diff --git a/.github/actions/get_aprl/entrypoint.py b/.github/actions/get_aprl/entrypoint.py
index 8d57333b1..f0608103c 100644
--- a/.github/actions/get_aprl/entrypoint.py
+++ b/.github/actions/get_aprl/entrypoint.py
@@ -93,6 +93,7 @@ def get_aprl_recos():
github_file_extension = '.yaml'
github_branch = 'master'
retrieved_recos = []
+ timestamp = datetime.date.today().strftime("%B %d, %Y")
# Get last commit to APRL reco
if (verbose): print("DEBUG: Scanning GitHub repository {0} for {1} files...".format(github_repo, github_file_extension))
r = requests.get(f'https://api.github.com/repos/{github_org}/{github_repo}/commits')
@@ -131,7 +132,9 @@ def get_aprl_recos():
item['severity'] = item['recommendationImpact']
item['category'] = item['recommendationControl']
item['guid'] = item['aprlGuid']
- item['source'] = file_path
+ item['sourceFile'] = file_path
+ item['sourceType'] = 'aprl'
+ item['timestamp'] = timestamp
retrieved_recos += aprl_recos
if verbose: print("DEBUG: {0} recommendations found in file {1}".format(len(aprl_recos), file_path))
else:
diff --git a/.github/actions/get_service_guides/entrypoint.py b/.github/actions/get_service_guides/entrypoint.py
index db5d5b8f1..8a38be748 100644
--- a/.github/actions/get_service_guides/entrypoint.py
+++ b/.github/actions/get_service_guides/entrypoint.py
@@ -75,6 +75,11 @@
args_verbose = (sys.argv[3].lower() == 'true')
except:
args_verbose = True
+try:
+ args_overwrite = (sys.argv[4].lower() == 'true')
+except:
+ args_overwrite = False
+
# These parameters haven't been implemented in the github action
args_print_json = False
args_extract_key_phrases_checklist = False
@@ -197,10 +202,11 @@ def short_pillar(pillar):
else: return pillar
# Function to parse markdown
-def parse_markdown(markdown, service, verbose=False):
+def parse_markdown(markdown, service, source=None, verbose=False):
recos = []
waf_pillars = ['cost optimization', 'operational excellence', 'performance efficiency', 'reliability', 'security']
processing_pillar = ''
+ timestamp = datetime.date.today().strftime("%B %d, %Y")
if (verbose): print("DEBUG: Processing markdown file...")
line_count = 0
for line in markdown.split('\n'):
@@ -211,7 +217,10 @@ def parse_markdown(markdown, service, verbose=False):
if (verbose): print("DEBUG: Processing pillar '{0}'".format(processing_pillar))
if (line[0:4] == '> - ') and (processing_pillar != ''):
reco = line[4:]
- recos.append({'waf': processing_pillar, 'service': service, 'text': remove_markdown(reco), 'description': '', 'type': 'checklist'})
+ reco_object = {'waf': processing_pillar, 'service': service, 'text': remove_markdown(reco), 'description': '', 'type': 'checklist', 'sourceType': 'wafsg', 'timestamp': timestamp}
+ if source:
+ reco_object['sourceFile'] = source
+ recos.append(reco_object)
# If line matches a pattern that starts with "|" then comes a text, then "|" and a description and a closing "|"
if (line[0:1] == '|'):
line_table_items = line.split('|')
@@ -258,7 +267,7 @@ def get_waf_service_guide_recos():
if r.status_code == 200:
svcguide = r.text
if (args_verbose): print("DEBUG: Parsing service guide '{0}', {1} characters retrieved...".format(file_path, len(svcguide)))
- svc_recos = parse_markdown(svcguide, service, verbose=False)
+ svc_recos = parse_markdown(svcguide, service, source=file_path, verbose=False)
if (len(svc_recos) > 0):
retrieved_recos += svc_recos
if args_verbose: print("DEBUG: {0} recommendations found for service '{1}'".format(len(svc_recos), service))
@@ -315,24 +324,33 @@ def get_waf_service_guide_recos():
# If file exists, try to match the recos in the file by the text field and update the GUIDs
# If file doesn't exist, generate random GUIDs for each reco
def update_guids(checklist, filename):
- # If file exists
+ # If file exists, we can either overwrite it and generate new GUIDs or try to match the recos by text
+ # Note that if matching the recos by GUID, the old recos that do not exactly match the text of the new ones will be lost
if os.path.isfile(filename):
- if (args_verbose): print("DEBUG: Retrieving checklist GUIDs from file {0}...".format(filename))
- existing_checklist = load_json(filename)
- for reco in checklist['items']:
- # Find a reco in the existing checklist that matches the text
- existing_reco = [x for x in existing_checklist['items'] if x['text'] == reco['text']]
- if len(existing_reco) > 0:
- # Verify that the existing reco has a GUID
- if 'guid' in existing_reco[0]:
- reco['guid'] = existing_reco[0]['guid']
+ if args_overwrite:
+ if (args_verbose): print("DEBUG: File {0} not found, generating new GUIDs...".format(filename))
+ for reco in checklist['items']:
+ reco['guid'] = str(uuid.uuid4())
+ if 'checklist_match' in reco:
+ reco['checklist_match_guid'] = str(uuid.uuid4())
+ return checklist
+ else:
+ if (args_verbose): print("DEBUG: Retrieving checklist GUIDs from file {0}...".format(filename))
+ existing_checklist = load_json(filename)
+ for reco in checklist['items']:
+ # Find a reco in the existing checklist that matches the text
+ existing_reco = [x for x in existing_checklist['items'] if x['text'] == reco['text']]
+ if len(existing_reco) > 0:
+ # Verify that the existing reco has a GUID
+ if 'guid' in existing_reco[0]:
+ reco['guid'] = existing_reco[0]['guid']
+ else:
+ if (args_verbose): print("DEBUG: reco {0} not found in file {1}, generating new GUID...".format(reco['text'], filename))
+ reco['guid'] = str(uuid.uuid4())
+ # If no reco was found, generate a new GUID
else:
- if (args_verbose): print("DEBUG: reco {0} not found in file {1}, generating new GUID...".format(reco['text'], filename))
reco['guid'] = str(uuid.uuid4())
- # If no reco was found, generate a new GUID
- else:
- reco['guid'] = str(uuid.uuid4())
- return checklist
+ return checklist
# If file doesn't exist, generate GUIDs for each reco
else:
if (args_verbose): print("DEBUG: File {0} not found, generating new GUIDs...".format(filename))
diff --git a/.github/actions/get_the_aks_checklist/entrypoint.py b/.github/actions/get_the_aks_checklist/entrypoint.py
index 9af53e424..fd320798c 100644
--- a/.github/actions/get_the_aks_checklist/entrypoint.py
+++ b/.github/actions/get_the_aks_checklist/entrypoint.py
@@ -79,6 +79,8 @@ def get_theaks_recos():
item['waf'] = 'Resiliency'
elif 'operations' in item['category'].lower() or 'management' in item['category'].lower():
item['waf'] = 'Operational Excellence'
+ item['sourceType'] = 'theakscl'
+ item['sourceFile'] = file_url
retrieved_recos += theaks_recos
if verbose: print("DEBUG: {0} recommendations found in file {1}".format(len(theaks_recos), file_path))
else:
diff --git a/.github/actions/recov2lint/Dockerfile b/.github/actions/recov2lint/Dockerfile
new file mode 100644
index 000000000..7f50a89b5
--- /dev/null
+++ b/.github/actions/recov2lint/Dockerfile
@@ -0,0 +1,6 @@
+FROM python:3.8-slim-buster
+WORKDIR /app
+COPY requirements.txt requirements.txt
+COPY entrypoint.py entrypoint.py
+RUN pip3 install -r requirements.txt
+ENTRYPOINT ["python3", "/app/entrypoint.py"]
\ No newline at end of file
diff --git a/.github/actions/recov2lint/README.md b/.github/actions/recov2lint/README.md
new file mode 100644
index 000000000..4047d343f
--- /dev/null
+++ b/.github/actions/recov2lint/README.md
@@ -0,0 +1,26 @@
+# Retrieve recommendations from Well Architected service guides
+
+This action retrieves the recommendations described in [Well-Architected Service Guides](https://learn.microsoft.com/azure/well-architected/service-guides/?product=popular) and stores it as a new checklist.
+
+## Inputs
+
+## `services`
+
+**Optional** Service(s) whose service guide will be downloaded (leave blank for all service guides). You can specify multiple comma-separated values. Default `""`.
+
+## `output_folder`
+
+**Optional** Folder where the new checklists will be stored. Default `"./checklists-ext"`.
+
+## `verbose`
+
+**Optional** Whether script output is verbose or not. Default `"true"`.
+
+## Example usage
+
+```
+uses: ./.github/actions/get_service_guides
+with:
+ output_file: './checklists'
+ service: 'Azure Kubernetes Service'
+```
diff --git a/.github/actions/recov2lint/action.yml b/.github/actions/recov2lint/action.yml
new file mode 100644
index 000000000..e7108a043
--- /dev/null
+++ b/.github/actions/recov2lint/action.yml
@@ -0,0 +1,18 @@
+# action.yml
+name: 'Validate PRs for v2 recommendations and checklists.'
+description: 'Verify that no duplicate names exist and that all YAML files conform to the schemas.'
+inputs:
+ folder:
+ description: 'Folder where the recommendations are stored'
+ required: false
+ default: './v2 (string)'
+ verbose:
+ description: 'Verbose output, true/false (string)'
+ required: false
+ default: 'true'
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - '${{ inputs.folder }}'
+ - '${{ inputs.verbose }}'
diff --git a/.github/actions/recov2lint/entrypoint.py b/.github/actions/recov2lint/entrypoint.py
new file mode 100644
index 000000000..f55421dc4
--- /dev/null
+++ b/.github/actions/recov2lint/entrypoint.py
@@ -0,0 +1,139 @@
+# This scripts runs checks on the v2 recommendations and checklists
+import jsonschema
+import sys
+import yaml
+import json
+import os
+from pathlib import Path
+from collections import Counter
+
+
+# The script has been modified to be run from a github action with positional parameters
+# 1. Root Folder where the v2 recommendations, checklists and schemas are stored
+# 2. Verbose
+try:
+ root_folder = sys.argv[1]
+except:
+ root_folder = './v2'
+try:
+ verbose = (sys.argv[2].lower() == 'true')
+except:
+ verbose = True
+
+# Print the parameters
+if verbose: print("INFO: Running recov2lint with parameters: root_folder='{0}', verbose={1}".format(root_folder, verbose))
+
+# Constants
+checklist_subfolder = os.path.join(root_folder, 'checklists')
+reco_subfolder = os.path.join(root_folder, 'recos')
+schema_subfolder = os.path.join(root_folder, 'schema')
+reco_schema_file = os.path.join(schema_subfolder, 'recommendation.schema.json')
+checklist_schema_file = os.path.join(schema_subfolder, 'checklist.schema.json')
+
+# Verify that the root folder and the subfolders exist
+if not os.path.exists(root_folder):
+ print(f"ERROR: Root folder '{root_folder}' does not exist.")
+ sys.exit(1)
+if not os.path.exists(checklist_subfolder):
+ print(f"ERROR: Checklist subfolder '{checklist_subfolder}' does not exist.")
+ sys.exit(1)
+if not os.path.exists(reco_subfolder):
+ print(f"ERROR: Reco subfolder '{reco_subfolder}' does not exist.")
+ sys.exit(1)
+if not os.path.exists(schema_subfolder):
+ print(f"ERROR: Schema subfolder '{schema_subfolder}' does not exist.")
+ sys.exit(1)
+if not os.path.exists(reco_schema_file):
+ print(f"ERROR: Reco schema file '{reco_schema_file}' does not exist.")
+ sys.exit(1)
+if not os.path.exists(checklist_schema_file):
+ print(f"ERROR: Checklist schema file '{checklist_schema_file}' does not exist.")
+ sys.exit(1)
+
+# Gets all YAML files in a folder and parses them into a list of objects, adding the filepath for reference
+def get_yml_objects(folder, verbose=False):
+ files = list(Path(folder).rglob( '*.*' ))
+ if verbose: print("DEBUG: Found {0} files in folder {1}".format(len(files), folder))
+ objects = []
+ for file in files:
+ if (file.suffix == '.yaml') or (file.suffix == '.yml'):
+ try:
+ with open(file.resolve()) as f:
+ object = yaml.safe_load(f)
+ except Exception as e:
+ print("ERROR: Error when loading YAML file {0} - {1}". format(file, str(e)))
+ item = {
+ 'filepath': str(file.resolve()),
+ 'object': object
+ }
+ objects.append(item)
+ if verbose: print("DEBUG: Loaded {0} objects from folder {1}".format(len(objects), folder))
+ return objects
+
+# Given a list of objects, compares them with a JSON schema
+def get_invalid_objects(items, schema_file, verbose=False):
+ # Retrieve checklists schema
+ if verbose: print("DEBUG: Loading schema from", schema_file)
+ with open(schema_file, 'r') as stream:
+ try:
+ schema = json.load(stream)
+ except:
+ print("ERROR: Error loading JSON schema from", schema_file)
+ return None
+ # Start validation
+ if verbose: print("DEBUG: Starting validation with schema {0}...".format(schema_file))
+ object_counter = 0
+ finding_counter = 0
+ for item in items:
+ object = item['object']
+ object_counter +=1
+ if 'name' in object:
+ object_name = object['name']
+ else:
+ object_name = 'unnamed'
+ try:
+ jsonschema.validate(object, schema)
+ if verbose: print("DEBUG: Checklist '{0}' in '{1}' validates correctly against the schema.".format(object_name, item['filepath']))
+ except jsonschema.exceptions.ValidationError as e:
+ print("ERROR: Object '{0}' in '{1}' does not validate against the schema.".format(object_name, item['filepath']))
+ print("DEBUG: -", str(e))
+ finding_counter += 1
+ except jsonschema.exceptions.SchemaError as e:
+ print("ERROR: Schema", schema_file, "does not seem to be valid.")
+ if verbose: print("DEBUG: -", str(e))
+ sys.exit(1)
+ except Exception as e:
+ print("ERROR: Unknown error validating checklist '{0}' against the schema {1}: {2}".format(cl['name'], schema_file,str(e)))
+ return finding_counter
+
+
+# Get all recos
+v2recos = get_yml_objects(reco_subfolder)
+# Look for duplicate names
+name_list = [reco['object']['name'] for reco in v2recos if 'name' in reco['object']]
+name_counts = Counter(name_list)
+duplicate_names = [item for item, count in name_counts.items() if count > 1]
+if len(duplicate_names) > 0:
+ print("ERROR: Duplicate reco names found: {0}".format(duplicate_names))
+ sys.exit(1)
+else:
+ print("INFO: No duplicate reco names found in {0} recommendations.".format(len(v2recos)))
+# Validate recos
+reco_errors = get_invalid_objects(v2recos, reco_schema_file, verbose=verbose)
+if reco_errors > 0:
+ print("ERROR: {0} recos did not validate against the schema.".format(reco_errors))
+ sys.exit(1)
+else:
+ print("INFO: {0} recommendations validated from folder {2}, {1} non-compliances found.".format(len(v2recos), reco_errors, reco_subfolder))
+
+# Get all checklists
+v2checklists = get_yml_objects(checklist_subfolder)
+# Validate checklists
+checklist_errors = get_invalid_objects(v2checklists, checklist_schema_file, verbose=verbose)
+if checklist_errors > 0:
+ print("ERROR: {0} checklists did not validate against the schema.".format(checklist_errors))
+ sys.exit(1)
+else:
+ print("INFO: {0} checklists validated from folder {2}, {1} non-compliances found.".format(len(v2checklists), checklist_errors, checklist_subfolder))
+
+
diff --git a/.github/actions/recov2lint/requirements.txt b/.github/actions/recov2lint/requirements.txt
new file mode 100644
index 000000000..da9426234
--- /dev/null
+++ b/.github/actions/recov2lint/requirements.txt
@@ -0,0 +1,2 @@
+pyyaml
+jsonschema
\ No newline at end of file
diff --git a/.github/workflows/autotagv2.yml b/.github/workflows/autotagv2.yml
new file mode 100644
index 000000000..80e9daf2b
--- /dev/null
+++ b/.github/workflows/autotagv2.yml
@@ -0,0 +1,46 @@
+name: Autotag
+
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+on:
+ pull_request:
+ branches: [v2]
+ paths:
+ - '**.yml'
+ - '**.yaml'
+
+jobs:
+ autotag:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - id: files
+ uses: masesgroup/retrieve-changed-files@v2
+ - id: alzimpact
+ name: Verify whether the modified files have an impact on the ALZ checklist
+ run: |
+ echo "DEBUG: Running on $SHELL"
+ pip install -r ./scripts/requirements.txt
+ alz_files=$(python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --only-filenames)
+ alz_files_count=$(echo "$alz_files" | wc -l)
+ echo "$alz_files_count reco files found in the ALZ checklist:"
+ echo "$alz_files" | head -2
+ echo "..."
+ echo "$alz_files" | tail -2
+ for input_file in ${{ steps.files.outputs.all }}; do
+ echo "Processing '$input_file'..."
+ if [[ "$alz_files" == *"$input_file"* ]]; then
+ echo "Modification to file '$input_file' detected, which seems to be a reco leveraged by the ALZ checklist"
+ echo "alz_impact=yes" >> $GITHUB_OUTPUT
+ else
+ echo "'$input_file' has no ALZ impact"
+ fi
+ done
+ - name: add ALZ label
+ if: ${{ steps.alzimpact.outputs.alz_impact == 'yes' }}
+ uses: actions-ecosystem/action-add-labels@v1
+ id: addalzlabel
+ with:
+ labels: 'landingzone'
+ github_token: ${{ secrets.WORKFLOW_PAT }}
\ No newline at end of file
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
index 5f30701b5..e9e6bc5df 100644
--- a/.github/workflows/linter.yml
+++ b/.github/workflows/linter.yml
@@ -26,7 +26,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check that GUIDs are unique
id: checklistlint
- uses: ./.github/actions/get_the_aks_checklist
+ uses: ./.github/actions/review-checklists-lint
with:
file_extension: 'en.json'
key_name: 'guid'
diff --git a/.github/workflows/linterv2.yml b/.github/workflows/linterv2.yml
new file mode 100644
index 000000000..c364036ec
--- /dev/null
+++ b/.github/workflows/linterv2.yml
@@ -0,0 +1,21 @@
+---
+name: Lint v2 recommendations and checklists
+on:
+ # push:
+ # branches-ignore: [main]
+ pull_request:
+ branches: [v2]
+
+jobs:
+ build:
+ name: Lint v2 recommendations and checklists
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v2
+ - name: Check unique names and schema conformity
+ id: checklistlint
+ uses: ./.github/actions/recov2lint
+ with:
+ folder: './v2'
+ verbose: 'false'
diff --git a/.github/workflows/translatev2.yml b/.github/workflows/translatev2.yml
new file mode 100644
index 000000000..ffc9b00a7
--- /dev/null
+++ b/.github/workflows/translatev2.yml
@@ -0,0 +1,159 @@
+name: Translation
+
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+on:
+ push:
+ branches: [ v2 ]
+ paths:
+ - '**.yaml'
+ - '**.yml'
+ workflow_dispatch:
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ translate:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v4
+ # Get list of files that have been changed in the push
+ - id: files
+ uses: masesgroup/retrieve-changed-files@v2
+ # Set variables that indicate whether XLSX files have been modified, which would indicate that
+ - name: Set variables
+ id: variables
+ run: |
+ echo "v1_output_folder=v2/checklists" >> $GITHUB_OUTPUT
+ echo "clv2_file_list=('./v2/checklists/alz.yaml' './v2/checklists/waf.yaml' './v2/checklists/app_delivery.yaml')" >> $GITHUB_OUTPUT
+ # this action has been triggered by an automated action
+ - id: automationresult
+ name: Verify whether this action is a result of another action
+ run: |
+ for input_file in ${{ steps.files.outputs.all }}; do
+ if [[ "$input_file" == *"xlsx" ]]; then
+ echo "Modification to XLSX file $input_file detected, this seems to be the output of an automated PR"
+ echo "excel_file_changed=yes" >> $GITHUB_OUTPUT
+ else
+ echo "$input_file is not an XLSX file"
+ fi
+ done
+
+ # Find out the impacted checklists
+ - id: climpact
+ if: ${{ steps.automationresult.outputs.excel_file_changed != 'yes' }}
+ name: Verify whether the modified files have an impact on the defined v2 checklists
+ run: |
+ # Install Python dependencies to run the checklist CLI
+ pip install -r ./scripts/requirements.txt
+ # The list of impacted checklists will be passed as an array
+ impacted_cl_files=()
+ done_something=no
+ clv2_file_list=${{ steps.variables.outputs.clv2_file_list }}
+ echo "Checking impact of changes in files ${{ steps.files.outputs.all }} to the following ${#clv2_file_list[@]} v2 checklists: ${clv2_file_list[@]}..."
+ for cl_file in "${clv2_file_list[@]}"; do
+ echo "Processing v2 checklist '${cl_file}'..."
+ cl_name=$(echo $cl_file | cut -d/ -f4 | cut -d. -f1)
+ cl_reco_files=$(python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --only-filenames)
+ cl_reco_files_count=$(echo "$cl_reco_files" | wc -l)
+ echo "$cl_reco_files_count reco files found referenced in the checklist $cl_file"
+ for input_file in ${{ steps.files.outputs.all }}; do
+ echo "- Processing changed file '$input_file'..."
+ if [[ "$cl_reco_files" == *"$input_file"* ]]; then
+ echo " * Modification to file '$input_file' detected, which seems to be a reco leveraged by the checklist $cl_name in $cl_file"
+ impacted_cl_files+="$cl_file"
+ done_something=yes
+ else
+ echo " * '$input_file' has no impact to the checklist $cl_name in $cl_file"
+ fi
+ done
+ done
+ echo "impacted_cl_files=(${impacted_cl_files[@]})" >> $GITHUB_OUTPUT
+ echo "done_something=$done_something" >> $GITHUB_OUTPUT
+ # Process the impacted checklists and generate v1 versions
+ - name: Generate v1 JSON checklists and translate them
+ id: clv1
+ if: ${{ steps.climpact.outputs.done_something == 'yes' }}
+ env:
+ AZURE_TRANSLATOR_SUBSCRIPTION_KEY: ${{ secrets.AZURE_TRANSLATOR_SUBSCRIPTION_KEY }}
+ AZURE_TRANSLATOR_ENDPOINT: ${{ secrets.AZURE_TRANSLATOR_ENDPOINT }}
+ AZURE_TRANSLATOR_REGION: ${{ secrets.AZURE_TRANSLATOR_REGION }}
+ run: |
+ # First we put the GH variable into a local one. Doing a loop against the GH variable directly doesn't work.
+ cl_v2_files=${{ steps.climpact.outputs.impacted_cl_files }}
+ # We will pass the list of generated v1 checklists as an array
+ cl_v1_files=()
+ echo "Generating v1 checklists for the following v2 files: $cl_v2_files..."
+ # We run now through the list of impacted checklists
+ for cl_file in "${cl_v2_files[@]}"; do
+ cl_name=$(echo $cl_file | cut -d/ -f4 | cut -d. -f1)
+ cl_v1_file="./${{ steps.variables.outputs.v1_output_folder }}/${cl_name}_checklist.en.json"
+ cl_v1_files+="$cl_v1_file"
+ # Generate v1 JSON for the checklist
+ echo "Generating v1 JSON for checklist $cl_name in $cl_file into $cl_v1_file..."
+ python3 ./scripts/cl.py export-checklist --input-folder ./v2/recos --service-dictionary ./scripts/service_dictionary.json --checklist-file $cl_file --output-file $cl_v1_file --verbose
+ # Sort modified file
+ # python3 ./scripts/sort_checklist.py --input-file $input_file
+ # Update the timestamp in the modified file
+ # python3 ./scripts/timestamp_checklist.py --input-file $input_file
+ # Translate the checklist
+ echo "Translating $cl_v1_file (this can take a few minutes)..."
+ python3 ./scripts/translate.py --input-file $cl_v1_file
+ done
+ echo "cl_v1_files=(${cl_v1_files[@]})" >> $GITHUB_OUTPUT
+
+ # Generate macro-free spreadsheets and Azure Monitor workbooks
+ - name: Setup python
+ if: ${{ steps.climpact.outputs.done_something == 'yes' }}
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.8 #install the python needed
+ - name: Install dependencies
+ if: ${{ steps.climpact.outputs.done_something == 'yes' }}
+ run: |
+ python -m pip install --upgrade pip
+ pip install requests openpyxl
+ # Create Excel spreadsheets
+ - name: Execute excel python script # run file
+ if: ${{ steps.climpact.outputs.done_something == 'yes' }}
+ run: |
+ # First we put the GH variable into a local one. Doing a loop against the GH variable directly doesn't work.
+ cl_v1_files="${{ steps.clv1.outputs.cl_v1_files }}"
+ # For each file we will generate a macro-free Excel file
+ for cl_file in "${cl_v1_files[@]}"; do
+ echo "Generating macro-free Excel file for $cl_file..."
+ python3 ./scripts/update_excel_openpyxl.py --checklist-file="$cl_v1_file" --find-all --excel-file="./spreadsheet/macrofree/review_checklist_empty.xlsx" --output-name-is-input-name --output-path="./spreadsheet/macrofree/" --verbose
+ done
+
+ # Create Azure Monitor workbooks
+ # Note that workbook creation might not work with some of the v1 checklists generated from v2, since categories and subcategories might be missing.
+ # The workbook creation script should instead pick service names instead of categories for the tabs.
+ - name: Execute workbook python script # run file
+ if: ${{ steps.climpact.outputs.done_something == 'yes' }}
+ run: |
+ # First we put the GH variable into a local one. Doing a loop against the GH variable directly doesn't work.
+ cl_v1_files="${{ steps.clv1.outputs.cl_v1_files }}"
+ # For each file we will generate a macro-free Excel file
+ for cl_file in "${cl_v1_files[@]}"; do
+ # Create workbooks for the modified file, both with and without reco counters
+ echo "Generating workbooks for the v1 checklist file: $cl_file..."
+ python3 ./scripts/workbook_create.py --checklist-file="$cl_file" --output-path="./workbooks/" --blocks-path="./workbooks/blocks/"
+ python3 ./scripts/workbook_create.py --checklist-file="$cl_file" --output-path="./workbooks/" --blocks-path="./workbooks/blocks/" --counters
+ # Extra static commands to generate a network-specific ALZ workbook
+ # python3 ./scripts/workbook_create.py --checklist-file ./checklists/alz_checklist.en.json --output-path ./workbooks --blocks-path ./workbooks/blocks --create-arm-template --category=network --query-size medium
+ # python3 ./scripts/workbook_create.py --checklist-file ./checklists/alz_checklist.en.json --output-file ./workbooks/alz_checklist.en_network_counters.json --blocks-path ./workbooks/blocks --create-arm-template --category=network --query-size tiny --counters
+ # python3 ./scripts/workbook_create.py --checklist-file ./checklists/alz_checklist.en.json --output-file ./workbooks/alz_checklist.en_network_tabcounters.json --blocks-path ./workbooks/blocks --create-arm-template --category=network --query-size tiny --tab-counters
+ # App delivery
+ # python3 ./scripts/workbook_create.py --checklist-file ./checklists/network_appdelivery_checklist.en.json --output-file ./workbooks/appdelivery_checklist.en_network_workbook.json --blocks-path ./workbooks/blocks --create-arm-template --category=network --query-size tiny
+ # python3 ./scripts/workbook_create.py --checklist-file ./checklists/network_appdelivery_checklist.en.json --output-file ./workbooks/appdelivery_checklist.en_network_counters_workbook.json --blocks-path ./workbooks/blocks --create-arm-template --category=network --query-size tiny --counters
+ done
+ # Create the PR if any change was made
+ - name: Create pull request
+ uses: peter-evans/create-pull-request@v6
+ if: ${{ steps.climpact.outputs.done_something == 'yes' }}
+ with:
+ title: 'Automated actions after change to ${{ steps.files.outputs.all }}'
+ body: 'Processed changed files ${{ steps.files.outputs.all }}'
+ labels: 'automated'
+ token: ${{ secrets.WORKFLOW_PAT }}
diff --git a/checklists-ext/appservicewebapps_sg_checklist.en.json b/checklists-ext/appservicewebapps_sg_checklist.en.json
index fd6463e21..f76a5606a 100644
--- a/checklists-ext/appservicewebapps_sg_checklist.en.json
+++ b/checklists-ext/appservicewebapps_sg_checklist.en.json
@@ -6,194 +6,217 @@
"service": "App Service Web Apps",
"text": "(App Service plan) Choose the Premium tier of an App Service plan for production workloads. Set the maximum and minimum number of workers according to your capacity planning. For more information, see App Service plan overview.",
"description": "A premium App Service plan offers advanced scaling features and ensures redundancy if failures occur.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a8bc7080-3d8a-43b1-aefc-1dcfdf45fff3"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service plan) Enable zone redundancy. Consider provisioning more than three instances to enhance fault tolerance. Check regional support for zone redundancy because not all regions offer this feature.",
"description": "Your application can withstand failures in a single zone when multiple instances are spread across zones. Traffic automatically shifts to healthy instances in other zones and maintains application reliability if one zone is unavailable.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6421eda8-605d-4058-baf3-5d39c62695f2"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service) Consider disabling the application request routing (ARR) affinity feature. ARR affinity creates sticky sessions that redirect users to the node that handled their previous requests.",
"description": "Incoming requests are evenly distributed across all available nodes when you disable ARR affinity. Evenly distributed requests prevent traffic from overwhelming any single node. Requests can be seamlessly redirected to other healthy nodes if a node is unavailable. Avoid session affinity to ensure that your App Service instance remains stateless. A stateless App Service reduces complexity and ensures consistent behavior across nodes. Remove sticky sessions so that App Service can add or remove instances to scale horizontally.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0b2003b3-120d-47e2-b088-6326688f6020"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service) Define automatic healing rules based on request count, slow requests, memory limits, and other indicators that are part of your performance baseline. Consider this configuration as part of your scaling strategy.",
"description": "Automatic healing rules help your application recover automatically from unexpected problems. The configured rules trigger healing actions when thresholds are breached. Automatic healing enables automatic proactive maintenance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c3976ed2-a374-4e1e-aaa9-6b5152dc79e6"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service) Enable the health check feature and provide a path that responds to the health check requests.",
"description": "Health checks can detect problems early. Then the system can automatically take corrective actions when a health check request fails. The load balancer routes traffic away from unhealthy instances, which directs users to healthy nodes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7ad7026a-e2e6-4e45-a0b4-9c707fe0e388"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Assign managed identities to the web app. To maintain isolation boundaries, don't share or reuse identities across applications. Make sure that you securely connect to your container registry if you use containers for your deployment.",
"description": "The application retrieves secrets from Key Vault to authenticate outward communication from the application. Azure manages the identity and doesn't require you to provision or rotate any secrets. You have distinct identities for granularity of control. Distinct identities make revocation easy if an identity is compromised.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a7caacdd-d39b-4e31-8dcf-c40f4c2bf86d"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Configure custom domains for applications. Disable HTTP and only accept HTTPS requests.",
"description": "Custom domains enable secure communication through HTTPS using Transport Layer Security (TLS) protocol, which ensures the protection of sensitive data and builds user trust.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "669b3cbe-e126-445b-8707-ac7ed7a242f8"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) valuate whether App Service built-in authentication is the right mechanism to authenticate users that access your application. App Service built-in authentication integrates with Microsoft Entra ID. This feature handles token validation and user identity management across multiple sign-in providers and supports OpenID Connect. With this feature, you don't have authorization at a granular level, and you don't have a mechanism to test authentication.",
"description": "When you use this feature, you don't have to use authentication libraries in application code, which reduces complexity. The user is already authenticated when a request reaches the application.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "707d4208-95aa-44b5-946a-95951187fbbe"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Configure the application for virtual network integration. Use private endpoints for App Service apps. Block all public traffic. Route the container image pull through the virtual network integration. All outgoing traffic from the application passes through the virtual network.",
"description": "Get the security benefits of using an Azure virtual network. For example, the application can securely access resources within the network. Add a private endpoint to help protect your application. Private endpoints limit direct exposure to the public network and allow controlled access through the reverse proxy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "41d2b47e-9224-4f24-a14f-d7c389adc40a"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) To implement hardening: - Disable basic authentication that uses a username and password in favor of Microsoft Entra ID-based authentication. - Turn off remote debugging so that inbound ports aren't opened. - Enable CORS policies to tighten incoming requests. - Disable protocols, such as FTP.",
"description": "We don't recommend basic authentication as a secure deployment method. Microsoft Entra ID employs OAuth 2.0 token-based authentication, which offers numerous advantages and enhancements that address the limitations that are associated with basic authentication. Policies restrict access to application resources, only allow requests from specific domains, and secure cross-region requests.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "87580a6c-f8fb-4cf4-9086-3cb2e6bf09ab"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Always use Key Vault references as app settings.",
"description": "Secrets are kept separate from your app's configuration. App settings are encrypted at rest. App Service also manages secret rotations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "14f83da8-4052-4d06-bd6c-ca6ea753c62e"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service plan) Enable Microsoft Defender for Cloud for App Service.",
"description": "Get real-time protection for resources that run in an App Service plan. Guard against threats and enhance your overall security posture.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d55d6834-894e-4fa9-a5da-93d42d703e02"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service plan) Enable diagnostic logging and add instrumentation to your app. The logs are sent to Azure Storage accounts, Azure Event Hubs, and Log Analytics. For more information about audit log types, see Supported log types.",
"description": "Logging captures access patterns. It records relevant events that provide valuable insights into how users interact with an application or platform. This information is crucial for accountability, compliance, and security purposes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "47eb1ae3-41cf-4925-8ad5-7c9d865e4392"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service plan) Choose Free or Basic tiers for lower environments. We recommend these tiers for experimental use. Remove the tiers when you no longer need them.",
"description": "The Free and Basic tiers are budget-friendly compared to higher tiers. They provide a cost-effective solution for nonproduction environments that don't need the full features and performance of premium plans.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "353d556b-015a-4ae6-9352-4551b7c7e267"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service plan) Take advantage of discounts and explore preferred pricing for: - Lower environments with dev/test plans. - Azure reservations and Azure savings plans for dedicated compute that you provision in the Premium V3 tier and App Service Environment. Use reserved instances for stable workloads that have predictable usage patterns.",
"description": "Dev/test plans provide reduced rates for Azure services, which makes them cost-effective for nonproduction environments. Use reserved instances to prepay for compute resources and get significant discounts.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5ad6a3b4-65eb-407e-8547-ce4ecdf9fe89"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service) Monitor costs that App Service resources incur. Run the cost analysis tool in the Azure portal. Create budgets and alerts to notify stakeholders.",
"description": "You can identify cost spikes, inefficiencies, or unexpected expenses early on. This proactive approach helps you to provide budgetary controls to prevent overspending.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4cf20e78-3047-4eca-a608-421414e82e4b"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service plan) Scale in when demand decreases. To scale in, define scale rules to reduce the number of instances in Azure Monitor.",
"description": "Prevent wastage and reduce unnecessary expenses.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "68b1b702-d272-4c97-8b70-727ba42a9b27"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service) Monitor the health of your instances and activate instance health probes. Set up a specific path for handling health probe requests.",
"description": "You can detect problems promptly and take necessary actions to maintain availability and performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5fe0c2c9-3403-47be-9e45-265107d05c71"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service) Enable diagnostics logs for the application and the instance. Frequent logging can slow down the performance of the system, add to storage costs, and introduce risk if you have unsecure access to logs. Follow these best practices: - Log the right level of information. - Set retention policies. - Keep an audit trail of authorized access and unauthorized attempts. - Treat logs as data and apply data-protection controls.",
"description": "Diagnostic logs provide valuable insights into your app's behavior. Monitor traffic patterns and identify anomalies.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e6afc11c-557b-4621-8716-606b90f670c7"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service) Take advantage of App Service managed certificates to offload certification management to Azure.",
"description": "App Service automatically handles processes like certificate procurement, certificate verification, certificate renewal, and importing certificates from Key Vault. Alternatively, upload your certificate to Key Vault and authorize the App Service resource provider to access it.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "15a2cb5e-2a24-49f7-8d54-042d22543f54"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service plan) Validate app changes in the staging slot before you swap it with the production slot.",
"description": "Avoid downtime and errors. Quickly revert to the last-known good state if you detect a problem after a swap.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ce8266e4-c481-4133-a5ce-2ee070954eeb"
},
{
"waf": "Performance",
"service": "App Service Web Apps",
"text": "Enable the Always On setting when applications share a single App Service plan. App Service apps automatically unload when idle to save resources. The next request triggers a cold start, which can cause request timeouts.",
"description": "The application is never unloaded with Always On enabled.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7a02f601-b092-4772-a044-a48a3caa335c"
},
{
"waf": "Performance",
"service": "App Service Web Apps",
"text": "Consider using HTTP/2 for applications to improve protocol efficiency.",
"description": "Choose HTTP/2 over HTTP/1.1 because HTTP/2 fully multiplexes connections, reuses connections to reduce overhead, and compresses headers to minimize data transfer.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0a0eaf20-6b30-45ac-b302-0b7cb940fc90"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -230,6 +253,6 @@
"name": "App Service Web Apps Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/aprl_checklist.en.json b/checklists-ext/aprl_checklist.en.json
index 565810fc5..ca6358ede 100644
--- a/checklists-ext/aprl_checklist.en.json
+++ b/checklists-ext/aprl_checklist.en.json
@@ -27,7 +27,9 @@
"severity": "High",
"category": "High Availability",
"guid": "bb6deb9d-24fa-4ee8-bc23-ac3ebc7fdf8e",
- "source": "azure-resources/AAD/domainServices/recommendations.yaml",
+ "sourceFile": "azure-resources/AAD/domainServices/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Gets Entry Domain Services that are using the Standard SKU\nresources\n| where type == \"microsoft.aad/domainservices\"\n| extend sku = properties.sku\n| where sku =~ 'Standard'\n| project recommendationId='bb6deb9d-24fa-4ee8-bc23-ac3ebc7fdf8e', name=name, id=id, tags=tags, param1=strcat('SKU:', sku)\n"
},
{
@@ -56,7 +58,9 @@
"severity": "High",
"category": "High Availability",
"guid": "a3058909-fcf8-4450-88b5-499f57449178",
- "source": "azure-resources/AAD/domainServices/recommendations.yaml",
+ "sourceFile": "azure-resources/AAD/domainServices/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Gets Entry Domain Services that are using only one replicaSet\nresources\n| where type == \"microsoft.aad/domainservices\"\n| extend replicaSets = properties.replicaSets\n| where array_length(replicaSets) < 2\n| project recommendationId='a3058909-fcf8-4450-88b5-499f57449178', name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)\n"
},
{
@@ -85,7 +89,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "74fcb9f2-9a25-49a6-8c42-d32851c4afb7",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure VMware Solution resources that don't have one or more service health alerts covering AVS private clouds in the deployed subscription and region pairs.\n//full list of private clouds\n(resources\n| where ['type'] == \"microsoft.avs/privateclouds\"\n| extend locale = tolower(location)\n| extend subscriptionId = tolower(subscriptionId)\n| project id, name, tags, subscriptionId, locale)\n| join kind=leftouter\n//Alert ID's that include all incident types filtered by AVS Service Health alerts\n((resources\n| where type == \"microsoft.insights/activitylogalerts\"\n| extend alertproperties = todynamic(properties)\n| where alertproperties.condition.allOf[0].field == \"category\" and alertproperties.condition.allOf[0].equals == \"ServiceHealth\"\n| where alertproperties.condition.allOf[1].field == \"properties.impactedServices[*].ServiceName\" and set_has_element(alertproperties.condition.allOf[1].containsAny, \"Azure VMware Solution\")\n| extend locale = strcat_array(split(tolower(alertproperties.condition.allOf[2].containsAny),' '), '')\n| mv-expand todynamic(locale)\n| where locale != \"global\"\n| project subscriptionId, tostring(locale) )\n| union\n//Alert ID's that include only some of the incident types after filtering by service health alerts covering AVS private clouds.\n(resources\n| where type == \"microsoft.insights/activitylogalerts\"\n| extend subscriptionId = tolower(subscriptionId)\n| extend alertproperties = todynamic(properties)\n| where alertproperties.condition.allOf[0].field == \"category\" and alertproperties.condition.allOf[0].equals == \"ServiceHealth\"\n| where alertproperties.condition.allOf[2].field == \"properties.impactedServices[*].ServiceName\" and set_has_element(alertproperties.condition.allOf[2].containsAny, \"Azure VMware Solution\")\n| extend locale = strcat_array(split(tolower(alertproperties.condition.allOf[3].containsAny),' '), '')\n| mv-expand todynamic(locale)\n| mv-expand alertproperties.condition.allOf[1].anyOf\n| extend incidentType = alertproperties_condition_allOf_1_anyOf.equals\n| where locale != \"global\"\n| project id, subscriptionId, locale, incidentType\n| distinct subscriptionId, tostring(locale), tostring(incidentType)\n| summarize incidentTypes=count() by subscriptionId, locale\n| where incidentTypes == 5 //only include this subscription, region pair if it includes all the incident types.\n| project subscriptionId, locale)) on subscriptionId, locale\n| where subscriptionId1 == \"\" or locale1 == \"\" or isnull(subscriptionId1) or isnull(locale1)\n| project recommendationId = \"74fcb9f2-9a25-49a6-8c42-d32851c4afb7\", name, id, tags, param1 = \"avsServiceHealthAlertsAllIncidentTypesConfigured: False\"\n\n"
},
{
@@ -114,7 +120,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "29d7a115-dfb6-4df1-9205-04824109548f",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -143,7 +151,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "f86355e3-de7c-4dad-8080-1b0b411e66c8",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -176,7 +186,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "9ec5b4c8-3dd8-473a-86ee-3273290331b9",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure VMware Solution resources that aren't configured as stretched clusters and in supported regions.\nresources\n| where ['type'] == \"microsoft.avs/privateclouds\"\n| extend avsproperties = todynamic(properties)\n| where avsproperties.availability.strategy != \"DualZone\"\n| where location in (\"uksouth\", \"westeurope\", \"germanywestcentral\", \"australiaeast\")\n| project recommendationId = \"9ec5b4c8-3dd8-473a-86ee-3273290331b9\", name, id, tags, param1 = \"stretchClusters: Disabled\"\n\n"
},
{
@@ -205,7 +217,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "4232eb32-3241-4049-9e14-9b8005817b56",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure VMware Solution resources that don't have a vSAN capacity critical alert with a threshold of 75% or a warning capacity of 70%.\n(\nresources\n| where ['type'] == \"microsoft.avs/privateclouds\"\n| extend scopeId = tolower(tostring(id))\n| project ['scopeId'], name, id, tags\n| join kind=leftouter (\nresources\n| where type == \"microsoft.insights/metricalerts\"\n| extend alertProperties = todynamic(properties)\n| mv-expand alertProperties.scopes\n| mv-expand alertProperties.criteria.allOf\n| extend scopeId = tolower(tostring(alertProperties_scopes))\n| extend metric = alertProperties_criteria_allOf.metricName\n| extend threshold = alertProperties_criteria_allOf.threshold\n| project scopeId, tostring(metric), toint(['threshold'])\n| where metric == \"DiskUsedPercentage\"\n| where threshold == 75\n) on scopeId\n| where isnull(['threshold'])\n| project recommendationId = \"4232eb32-3241-4049-9e14-9b8005817b56\", name, id, tags, param1 = \"vsanCapacityCriticalAlert: isNull or threshold != 75\"\n)\n| union (\nresources\n| where ['type'] == \"microsoft.avs/privateclouds\"\n| extend scopeId = tolower(tostring(id))\n| project ['scopeId'], name, id, tags\n| join kind=leftouter (\nresources\n| where type == \"microsoft.insights/metricalerts\"\n| extend alertProperties = todynamic(properties)\n| mv-expand alertProperties.scopes\n| mv-expand alertProperties.criteria.allOf\n| extend scopeId = tolower(tostring(alertProperties_scopes))\n| extend metric = alertProperties_criteria_allOf.metricName\n| extend threshold = alertProperties_criteria_allOf.threshold\n| project scopeId, tostring(metric), toint(['threshold'])\n| where metric == \"DiskUsedPercentage\"\n| where threshold == 70\n) on scopeId\n| where isnull(['threshold'])\n| project recommendationId = \"4232eb32-3241-4049-9e14-9b8005817b56\", name, id, tags, param1 = \"vsanCapacityWarningAlert: isNull or threshold != 70\"\n)\n\n"
},
{
@@ -234,7 +248,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "fa4ab927-bced-429a-971a-53350de7f14b",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -263,7 +279,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "4ee5d535-c47b-470a-9557-4a3dd297d62f",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure VMware Solution resources that don't have a Cluster CPU capacity critical alert with a threshold of 95%.\nresources\n| where ['type'] == \"microsoft.avs/privateclouds\"\n| extend scopeId = tolower(tostring(id))\n| project ['scopeId'], name, id, tags\n| join kind=leftouter (\nresources\n| where type == \"microsoft.insights/metricalerts\"\n| extend alertProperties = todynamic(properties)\n| mv-expand alertProperties.scopes\n| mv-expand alertProperties.criteria.allOf\n| extend scopeId = tolower(tostring(alertProperties_scopes))\n| extend metric = alertProperties_criteria_allOf.metricName\n| extend threshold = alertProperties_criteria_allOf.threshold\n| project scopeId, tostring(metric), toint(['threshold'])\n| where metric == \"EffectiveCpuAverage\"\n| where threshold == 95\n) on scopeId\n| where isnull(['threshold'])\n| project recommendationId = \"4ee5d535-c47b-470a-9557-4a3dd297d62f\", name, id, tags, param1 = \"hostCpuCriticalAlert: isNull or threshold != 95\"\n\n"
},
{
@@ -292,7 +310,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "029208c8-5186-4a76-8ee8-6e3445fef4dd",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure VMware Solution resources that don't have a cluster host memory critical alert with a threshold of 95%.\nresources\n| where ['type'] == \"microsoft.avs/privateclouds\"\n| extend scopeId = tolower(tostring(id))\n| project ['scopeId'], name, id, tags\n| join kind=leftouter (\nresources\n| where type == \"microsoft.insights/metricalerts\"\n| extend alertProperties = todynamic(properties)\n| mv-expand alertProperties.scopes\n| mv-expand alertProperties.criteria.allOf\n| extend scopeId = tolower(tostring(alertProperties_scopes))\n| extend metric = alertProperties_criteria_allOf.metricName\n| extend threshold = alertProperties_criteria_allOf.threshold\n| project scopeId, tostring(metric), toint(['threshold'])\n| where metric == \"UsageAverage\"\n| where threshold == 95\n) on scopeId\n| where isnull(['threshold'])\n| project recommendationId = \"029208c8-5186-4a76-8ee8-6e3445fef4dd\", name, id, tags, param1 = \"hostMemoryCriticalAlert: isNull or threshold != 95\"\n\n"
},
{
@@ -321,7 +341,9 @@
"severity": "High",
"category": "Governance",
"guid": "a5ef7c05-c611-4842-9af5-11efdc99123a",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -350,7 +372,9 @@
"severity": "High",
"category": "Security",
"guid": "e0ac2f57-c8c0-4b8c-a7c8-19e5797828b5",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -379,7 +403,9 @@
"severity": "High",
"category": "High Availability",
"guid": "fcc2e257-23af-4c68-aac8-9cc03033c939",
- "source": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceFile": "azure-resources/AVS/privateClouds/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -412,7 +438,9 @@
"severity": "High",
"category": "High Availability",
"guid": "baf3bfc0-32a2-4c0c-926d-c9bf0b49808e",
- "source": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceFile": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all API Management instances that aren't Premium\nresources\n| where type =~ 'Microsoft.ApiManagement/service'\n| extend skuName = sku.name\n| where tolower(skuName) != tolower('premium')\n| project recommendationId = \"baf3bfc0-32a2-4c0c-926d-c9bf0b49808e\", name, id, tags, param1=strcat(\"SKU: \", skuName)\n\n"
},
{
@@ -445,7 +473,9 @@
"severity": "High",
"category": "High Availability",
"guid": "740f2c1c-8857-4648-80eb-47d2c56d5a50",
- "source": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceFile": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Premium API Management instances that aren't zone redundant\nresources\n| where type =~ 'Microsoft.ApiManagement/service'\n| extend skuName = sku.name\n| where tolower(skuName) == tolower('premium')\n| where isnull(zones) or array_length(zones) < 2\n| extend zoneValue = iff((isnull(zones)), \"null\", zones)\n| project recommendationId = \"740f2c1c-8857-4648-80eb-47d2c56d5a50\", name, id, tags, param1=\"Zones: No Zone or Zonal\", param2=strcat(\"Zones value: \", zoneValue )\n\n"
},
{
@@ -478,7 +508,9 @@
"severity": "High",
"category": "High Availability",
"guid": "e35cf148-8eee-49d1-a1c9-956160f99e0b",
- "source": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceFile": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all API Management instances that aren't upgraded to platform version stv2\nresources\n| where type =~ 'Microsoft.ApiManagement/service'\n| extend plat_version = properties.platformVersion\n| extend skuName = sku.name\n| where tolower(plat_version) != tolower('stv2')\n| project recommendationId = \"e35cf148-8eee-49d1-a1c9-956160f99e0b\", name, id, tags, param1=strcat(\"Platform Version: \", plat_version) , param2=strcat(\"SKU: \", skuName)\n\n"
},
{
@@ -507,7 +539,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "c79680ea-de85-44fa-a596-f31fa17a952f",
- "source": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceFile": "azure-resources/ApiManagement/service/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -536,7 +570,9 @@
"severity": "High",
"category": "High Availability",
"guid": "8dbcd94b-0948-4df3-b608-1946726c3abf",
- "source": "azure-resources/App/containerApps/recommendations.yaml",
+ "sourceFile": "azure-resources/App/containerApps/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -565,7 +601,9 @@
"severity": "High",
"category": "High Availability",
"guid": "f4201965-a88d-449d-b3b4-021394719eb2",
- "source": "azure-resources/App/managedEnvironments/recommendations.yaml",
+ "sourceFile": "azure-resources/App/managedEnvironments/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// The query filters the qualified Container app environments that do not have Zone Redundancy enabled.\nresources\n| where type =~ \"microsoft.app/managedenvironments\"\n| where tobool(properties.zoneRedundant) == false\n| project recommendationId = \"f4201965-a88d-449d-b3b4-021394719eb2\", name, id, tags, param1 = \"AvailabilityZones: Single Zone\"\n| order by id asc\n"
},
{
@@ -594,7 +632,9 @@
"severity": "Low",
"category": "Governance",
"guid": "bb4c8db4-f821-475b-b1ea-16e95358665e",
- "source": "azure-resources/AppConfiguration/configurationStores/recommendations.yaml",
+ "sourceFile": "azure-resources/AppConfiguration/configurationStores/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Purge protection should be enabled for App Configuration stores to prevent accidental deletion of configuration data.\nresources\n| where type =~ \"Microsoft.AppConfiguration/configurationStores\"\n| where sku.name <> \"free\"\n| where (properties.enablePurgeProtection <> true) or isnull(properties.enablePurgeProtection )\n| project recommendationId = \"bb4c8db4-f821-475b-b1ea-16e95358665e\", name, id, tags, param1 = \"Enable purge protection\"\n"
},
{
@@ -623,7 +663,9 @@
"severity": "High",
"category": "High Availability",
"guid": "2102a57a-a056-4d5e-afe5-9df9f92177ca",
- "source": "azure-resources/AppConfiguration/configurationStores/recommendations.yaml",
+ "sourceFile": "azure-resources/AppConfiguration/configurationStores/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Upgrade to App Configuration Standard tier\nresources\n| where type =~ \"Microsoft.AppConfiguration/configurationStores\"\n| where sku.name == \"free\"\n| project recommendationId = \"2102a57a-a056-4d5e-afe5-9df9f92177ca\", name, id, tags, param1 = \"Upgrade to Standard SKU\"\n"
},
{
@@ -656,7 +698,9 @@
"severity": "High",
"category": "High Availability",
"guid": "67205887-0733-466e-b50e-b1cd7316c514",
- "source": "azure-resources/Automation/automationAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Automation/automationAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -685,7 +729,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "3464854d-6f75-4922-95e4-a2a308b53ce6",
- "source": "azure-resources/Batch/batchAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Batch/batchAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -714,7 +760,9 @@
"severity": "High",
"category": "High Availability",
"guid": "71cfab8f-d588-4742-b175-b6e07ae48dbd",
- "source": "azure-resources/Batch/batchAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Batch/batchAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -743,7 +791,9 @@
"severity": "High",
"category": "High Availability",
"guid": "5a44bd30-ae6a-4b81-9b68-dc3a8ffca4d8",
- "source": "azure-resources/Cache/Redis/recommendations.yaml",
+ "sourceFile": "azure-resources/Cache/Redis/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Cache for Redis instances with one or no Zones selected\nresources\n| where type =~ \"microsoft.cache/redis\"\n| where array_length(zones) <= 1 or isnull(zones)\n| project recommendationId = \"5a44bd30-ae6a-4b81-9b68-dc3a8ffca4d8\", name, id, tags, param1 = \"AvailabilityZones: Single Zone\"\n| order by id asc\n\n"
},
{
@@ -772,7 +822,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "cabc1f98-c8a7-44f7-ab24-977982ef3f70",
- "source": "azure-resources/Cache/Redis/recommendations.yaml",
+ "sourceFile": "azure-resources/Cache/Redis/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -801,7 +853,9 @@
"severity": "Medium",
"category": "Security",
"guid": "c474fc96-4e6a-4fb0-95d0-a26b3f35933c",
- "source": "azure-resources/Cache/Redis/recommendations.yaml",
+ "sourceFile": "azure-resources/Cache/Redis/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Azure Redis cache services not protected by private endpoints.\nResources\n| where type =~ \"microsoft.cache/redis\"\n| where properties['publicNetworkAccess'] == \"Enabled\"\n| project recommendationId = \"c474fc96-4e6a-4fb0-95d0-a26b3f35933c\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -842,7 +896,9 @@
"severity": "High",
"category": "Business Continuity",
"guid": "9437634c-d69e-2747-b13e-631c13182150",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Avoid combining Traffic Manager and Front Door\nresources\n| where type == \"microsoft.network/trafficmanagerprofiles\"\n| mvexpand(properties.endpoints)\n| extend endpoint=tostring(properties_endpoints.properties.target)\n| project name, trafficmanager=id, matchname=endpoint, tags\n| join (\n resources\n | where type =~ \"microsoft.cdn/profiles/afdendpoints\"\n | extend matchname= tostring(properties.hostName)\n | extend splitid=split(id, \"/\")\n | extend frontdoorid=tolower(strcat_array(array_slice(splitid, 0, 8), \"/\"))\n | project name, id, matchname, frontdoorid, type\n | union\n (cdnresources\n | where type =~ \"Microsoft.Cdn/Profiles/CustomDomains\"\n | extend matchname= tostring(properties.hostName)\n | extend splitid=split(id, \"/\")\n | extend frontdoorid=tolower(strcat_array(array_slice(splitid, 0, 8), \"/\"))\n | project name, id, matchname, frontdoorid, type)\n )\n on matchname\n| project\n recommendationId = \"9437634c-d69e-2747-b13e-631c13182150\",\n name=split(trafficmanager, \"/\")[-1],\n id=trafficmanager,\n tags,\n param1=strcat(\"hostname:\", matchname),\n param2=strcat(\"frontdoorid:\", frontdoorid)\n\n"
},
{
@@ -871,7 +927,9 @@
"severity": "High",
"category": "Security",
"guid": "6c40b7ae-2bea-5748-be1a-9e9e3b834649",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -908,7 +966,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "52bc9a7b-23c8-bc4c-9d2a-7bc43b50104a",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -945,7 +1005,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "1ad74c3c-e3d7-0046-b83f-a2199974ef15",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -974,7 +1036,9 @@
"severity": "High",
"category": "Security",
"guid": "d9bd6780-0d6f-cd4c-bc66-8ddcab12f3d1",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Use end-to-end TLS\ncdnresources\n| where type == \"microsoft.cdn/profiles/afdendpoints/routes\"\n| extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols\n| project id,name,forwardingProtocol,supportedProtocols,tags\n| where forwardingProtocol !~ \"httpsonly\" or supportedProtocols has \"http\"\n| project recommendationId= \"d9bd6780-0d6f-cd4c-bc66-8ddcab12f3d1\", name,id,tags,param1=strcat(\"forwardingProtocol:\",forwardingProtocol),param2=strcat(\"supportedProtocols:\",supportedProtocols)\n\n"
},
{
@@ -1003,7 +1067,9 @@
"severity": "High",
"category": "Security",
"guid": "24ab9f11-a3e4-3043-a985-22cf94c4933a",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Use HTTP to HTTPS redirection\ncdnresources\n| where type == \"microsoft.cdn/profiles/afdendpoints/routes\"\n| extend httpsRedirect=tostring(properties.httpsRedirect)\n| project id,name,httpsRedirect,tags\n| where httpsRedirect !~ \"enabled\"\n| project recommendationId= \"24ab9f11-a3e4-3043-a985-22cf94c4933a\", name,id,tags,param1=strcat(\"httpsRedirect:\",httpsRedirect)\n\n"
},
{
@@ -1032,7 +1098,9 @@
"severity": "High",
"category": "Security",
"guid": "29d65c41-2fad-d142-95eb-9eab95f6c0a5",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1061,7 +1129,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "4638c2c0-03de-6d42-9e09-82ee4478cbf3",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1090,7 +1160,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "cd6a32af-747a-e649-82a7-a98f528ca842",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1119,7 +1191,9 @@
"severity": "Medium",
"category": "Security",
"guid": "1bd2b7e8-400f-e64a-99a2-c572f7b08a62",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Enable the WAF\n\nresources\n| where type =~ \"microsoft.cdn/profiles\" and sku has \"AzureFrontDoor\"\n| project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name)\n| join kind= fullouter (\n cdnresources\n | where type == \"microsoft.cdn/profiles/securitypolicies\"\n | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id'])\n | extend splitid=split(id, \"/\")\n | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), \"/\"))\n | project secpolname=name, cdnprofileid, wafpolicyid\n )\n on cdnprofileid\n| project name, cdnprofileid, secpolname, wafpolicyid,skuname\n| join kind = fullouter (\n resources\n | where type == \"microsoft.network/frontdoorwebapplicationfirewallpolicies\"\n | extend\n managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != \"[]\", true, false),\n enabledState = tostring(properties.policySettings.enabledState)\n | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags)\n )\n on wafpolicyid\n| where name != \"\"\n| summarize\n associatedsecuritypolicies=countif(secpolname != \"\"),\n wafswithmanagedrules=countif(managedrulesenabled == 1)\n by name, id=cdnprofileid, tags,skuname\n| where associatedsecuritypolicies == 0 or wafswithmanagedrules == 0\n| project\n recommendationId = \"1bd2b7e8-400f-e64a-99a2-c572f7b08a62\",\n name,\n id,\n todynamic(tags),\n param1 = strcat(\"associatedsecuritypolicies:\", associatedsecuritypolicies),\n param2 = strcat(\"wafswithmanagedrules:\", wafswithmanagedrules),\n param3 = strcat(\"skuname:\",skuname)\n\n"
},
{
@@ -1148,7 +1222,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "38f3d542-6de6-a44b-86c6-97e3be690281",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Disable health probes when there is only one origin in an origin group\ncdnresources\n| where type =~ \"microsoft.cdn/profiles/origingroups\"\n| extend healthprobe=tostring(properties.healthProbeSettings)\n| project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe\n| join (\n cdnresources\n | where type =~ \"microsoft.cdn/profiles/origingroups/Origins\"\n | extend origingroupname = tostring(properties.originGroupName)\n )\n on origingroupname\n| summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != \"\") by origingroupname, id, tostring(tags), resourceGroup, subscriptionId\n| where origincount == 1 and enabledhealthprobecount != 0\n| project\n recommendationId = \"38f3d542-6de6-a44b-86c6-97e3be690281\",\n name=origingroupname,\n id,\n todynamic(tags),\n param1 = strcat(\"origincount:\", origincount),\n param2 = strcat(\"enabledhealthprobecount:\", enabledhealthprobecount)\n\n"
},
{
@@ -1177,7 +1253,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "5225bba3-28ec-1e43-8986-7eedfd466d65",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1206,7 +1284,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "5783defe-b49e-d947-84f7-d8677593f324",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1235,7 +1315,9 @@
"severity": "Medium",
"category": "Security",
"guid": "b515690d-3bf9-3a49-8d38-188e0fd45896",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1264,7 +1346,9 @@
"severity": "Medium",
"category": "Security",
"guid": "1cfe7834-56ec-ff41-b11d-993734705dba",
- "source": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Cdn/profiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -1293,7 +1377,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "b49a39fd-f431-4b61-9062-f2157849d845",
- "source": "azure-resources/Compute/galleries/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/galleries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query to list all image versions,its associated image name and version replica configurations per region in a compute gallery whose version replicas is less than 3\nresources\n| where type =~ \"microsoft.compute/galleries/images/versions\"\n| extend GalleryName = tostring(split(tostring(id), \"/\")[8]), ImageName = tostring(split(tostring(id), \"/\")[10])\n| mv-expand VersionReplicas = properties.publishingProfile.targetRegions\n| project RecommendationId=\"b49a39fd-f431-4b61-9062-f2157849d845\",name,id,tags,param1=strcat(\"GalleryName: \",GalleryName),param2=strcat(\"ImageName: \",ImageName),param3=strcat(\"VersionReplicaRegionName: \",VersionReplicas.name),param4=strcat(\"VersionReplicationCount: \",VersionReplicas.regionalReplicaCount),rc=toint(VersionReplicas.regionalReplicaCount)\n| where rc < 3\n| project-away rc\n\n"
},
{
@@ -1326,7 +1412,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "488dcc8b-f2e3-40ce-bf95-73deb2db095f",
- "source": "azure-resources/Compute/galleries/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/galleries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query to list all image versions and its associated image and gallery name whose Storage account type is not using ZRS\nresources\n| where type =~ \"microsoft.compute/galleries/images/versions\"\n| extend GalleryName = tostring(split(tostring(id), \"/\")[8]), ImageName = tostring(split(tostring(id), \"/\")[10])\n| extend StorageAccountType = tostring(properties.publishingProfile.storageAccountType)\n| where StorageAccountType !has \"ZRS\"\n| project RecommendationId=\"488dcc8b-f2e3-40ce-bf95-73deb2db095f\",name,id,tags,param1=strcat(\"GalleryName: \",GalleryName),param2=strcat(\"ImageName: \",ImageName),param3=strcat(\"StorageAccountType: \",StorageAccountType)\n\n"
},
{
@@ -1363,7 +1451,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "1c5e1e58-4e56-491c-8529-10f37af9d4ed",
- "source": "azure-resources/Compute/galleries/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/galleries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query to list all images whose Hyper-V generation is not V2\nresources\n| where type =~ \"microsoft.compute/galleries/images\"\n| extend VMGeneration = properties.hyperVGeneration\n| where VMGeneration <> 'V2'\n| project RecommendationId=\"1c5e1e58-4e56-491c-8529-10f37af9d4ed\",name,id,tags,param1=strcat(\"VMGeneration: \",VMGeneration)\n\n"
},
{
@@ -1396,7 +1486,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "e7495e1c-0c75-0946-b266-b429b5c7f3bf",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all zonal VMs that are NOT deployed with Flex orchestration mode\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| where properties.orchestrationMode != \"Flexible\"\n| project recommendationId = \"e7495e1c-0c75-0946-b266-b429b5c7f3bf\", name, id, tags, param1 = strcat(\"orchestrationMode: \", tostring(properties.orchestrationMode))\n\n"
},
{
@@ -1425,7 +1517,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "94794d2a-eff0-2345-9b67-6f9349d0a627",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that do NOT have health monitoring enabled\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| join kind=leftouter (\n resources\n | where type == \"microsoft.compute/virtualmachinescalesets\"\n | mv-expand extension=properties.virtualMachineProfile.extensionProfile.extensions\n | where extension.properties.type in ( \"ApplicationHealthWindows\", \"ApplicationHealthLinux\" )\n | project id\n) on id\n| where id1 == \"\"\n| project recommendationId = \"94794d2a-eff0-2345-9b67-6f9349d0a627\", name, id, tags, param1 = \"extension: null\"\n\n"
},
{
@@ -1454,7 +1548,9 @@
"severity": "High",
"category": "High Availability",
"guid": "820f4743-1f94-e946-ae0b-45efafd87962",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that do NOT have automatic repair policy enabled\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| where properties.automaticRepairsPolicy.enabled == false\n| project recommendationId = \"820f4743-1f94-e946-ae0b-45efafd87962\", name, id, tags, param1 = \"automaticRepairsPolicy: Disabled\"\n\n"
},
{
@@ -1487,7 +1583,9 @@
"severity": "High",
"category": "Scalability",
"guid": "ee66ff65-9aa3-2345-93c1-25827cf79f44",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find VMSS instances associated with autoscale settings when autoscale is disabled\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| project name, id, tags\n| join kind=leftouter (\n resources\n | where type == \"microsoft.insights/autoscalesettings\"\n | where tostring(properties.targetResourceUri) contains \"Microsoft.Compute/virtualMachineScaleSets\"\n | project id = tostring(properties.targetResourceUri), autoscalesettings = properties\n) on id\n| where isnull(autoscalesettings) or autoscalesettings.enabled == \"false\"\n| project recommendationId = \"ee66ff65-9aa3-2345-93c1-25827cf79f44\", name, id, tags, param1 = \"autoscalesettings: Disabled\"\n| order by id asc\n\n"
},
{
@@ -1516,7 +1614,9 @@
"severity": "Low",
"category": "Scalability",
"guid": "3f85a51c-e286-9f44-b4dc-51d00768696c",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find VMSS instances associated with autoscale settings when predictiveAutoscalePolicy_scaleMode is disabled\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| project name, id, tags\n| join kind=leftouter (\n resources\n | where type == \"microsoft.insights/autoscalesettings\"\n | where tostring(properties.targetResourceUri) contains \"Microsoft.Compute/virtualMachineScaleSets\"\n | project id = tostring(properties.targetResourceUri), autoscalesettings = properties\n) on id\n| where autoscalesettings.enabled == \"true\" and autoscalesettings.predictiveAutoscalePolicy.scaleMode == \"Disabled\"\n| project recommendationId = \"3f85a51c-e286-9f44-b4dc-51d00768696c\", name, id, tags, param1 = \"predictiveAutoscalePolicy_scaleMode: Disabled\"\n| order by id asc\n\n"
},
{
@@ -1545,7 +1645,9 @@
"severity": "High",
"category": "High Availability",
"guid": "b5a63aa0-c58e-244f-b8a6-cbba0560a6db",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find VMSS instances where strictly zoneBalance is set to True\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| where properties.orchestrationMode == \"Uniform\" and properties.zoneBalance == true\n| project recommendationId = \"b5a63aa0-c58e-244f-b8a6-cbba0560a6db\", name, id, tags, param1 = \"strictly zoneBalance: Enabled\"\n| order by id asc\n\n"
},
{
@@ -1578,7 +1680,9 @@
"severity": "High",
"category": "High Availability",
"guid": "1422c567-782c-7148-ac7c-5fc14cf45adc",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find VMSS instances with one or no Zones selected\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| where array_length(zones) <= 1 or isnull(zones)\n| project recommendationId = \"1422c567-782c-7148-ac7c-5fc14cf45adc\", name, id, tags, param1 = \"AvailabilityZones: Single Zone\"\n| order by id asc\n\n"
},
{
@@ -1611,7 +1715,9 @@
"severity": "Low",
"category": "Other Best Practices",
"guid": "e4ffd7b0-ba24-c84e-9352-ba4819f908c0",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph query\n// Identifies VMs and VMSS with manual patch settings, excluding automatic patch modes\nresources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| join kind=inner (\n resources\n | where type == \"microsoft.compute/virtualmachines\"\n | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties\n) on id\n| extend recommendationId = \"e4ffd7b0-ba24-c84e-9352-ba4819f908c0\", param1 = \"patchMode: Manual\", vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode\n| where isnotnull(vmproperties.osProfile.linuxConfiguration) and vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode !in (\"AutomaticByPlatform\", \"AutomaticByOS\")\n| distinct recommendationId, name, id, param1\n| union (resources\n| where type == \"microsoft.compute/virtualmachinescalesets\"\n| join kind=inner (\n resources\n | where type == \"microsoft.compute/virtualmachines\"\n | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties\n) on id\n| extend recommendationId = \"e4ffd7b0-ba24-c84e-9352-ba4819f908c0\", param1 = \"patchMode: Manual\", vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode\n| where isnotnull(vmproperties.osProfile.windowsConfiguration) and vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode !in (\"AutomaticByPlatform\", \"AutomaticByOS\")\n| distinct recommendationId, name, id, param1)\n\n"
},
{
@@ -1640,7 +1746,9 @@
"severity": "High",
"category": "Governance",
"guid": "83d61669-7bd6-9642-a305-175db8adcdf4",
- "source": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "//cannot-be-validated-with-arg\n\n"
},
{
@@ -1673,7 +1781,9 @@
"severity": "High",
"category": "High Availability",
"guid": "273f6b30-68e0-4241-85ea-acf15ffb60bf",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that are not associated with a VMSS Flex instance\nresources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnull(properties.virtualMachineScaleSet.id)\n| project recommendationId=\"273f6b30-68e0-4241-85ea-acf15ffb60bf\", name, id, tags\n\n"
},
{
@@ -1702,18 +1812,20 @@
"severity": "High",
"category": "High Availability",
"guid": "2bd0be95-a825-6f47-a8c6-3db1fb5eb387",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that are not assigned to a Zone\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnull(zones)\n| project recommendationId=\"2bd0be95-a825-6f47-a8c6-3db1fb5eb387\", name, id, tags, param1=\"No Zone\"\n\n"
},
{
- "description": "Availability sets will soon be retired. Migrate workloads from VMs to VMSS Flex for deployment across zones or within the same zone across different fault domains (FDs) and update domains (UDs) for better reliability.\n",
+ "description": "While availability sets are not scheduled for immediate deprecation, they are planned to be deprecated in the future. Migrate workloads from VMs to VMSS Flex for deployment across zones or within the same zone across different fault domains (FDs) and update domains (UDs) for better reliability.\n",
"aprlGuid": "a8d25876-7951-b646-b4e8-880c9031596b",
"recommendationTypeId": null,
"recommendationControl": "High Availability",
"recommendationImpact": "High",
"recommendationResourceType": "Microsoft.Compute/virtualMachines",
"recommendationMetadataState": "Active",
- "longDescription": "Availability sets will soon be retired. Migrate workloads from VMs to VMSS Flex for deployment across zones or within the same zone across different fault domains (FDs) and update domains (UDs) for better reliability.\n",
+ "longDescription": "While availability sets are not scheduled for immediate deprecation, they are planned to be deprecated in the future. Migrate workloads from VMs to VMSS Flex for deployment across zones or within the same zone across different fault domains (FDs) and update domains (UDs) for better reliability.\n",
"potentialBenefits": "Enhances reliability and future-proofs VMs",
"pgVerified": true,
"publishedToLearn": false,
@@ -1731,7 +1843,9 @@
"severity": "High",
"category": "High Availability",
"guid": "a8d25876-7951-b646-b4e8-880c9031596b",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs using Availability Sets\nresources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnotnull(properties.availabilitySet)\n| project recommendationId = \"a8d25876-7951-b646-b4e8-880c9031596b\", name, id, tags, param1=strcat(\"availabilitySet: \",properties.availabilitySet.id)\n\n"
},
{
@@ -1764,7 +1878,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "cfe22a65-b1db-fd41-9e8e-d573922709ae",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that do NOT have replication with ASR enabled\nresources\n| where type =~ \"Microsoft.Compute/virtualMachines\"\n| extend securityType = iif(isnull(properties.securityProfile.securityType), \"Standard\", properties.securityProfile.securityType)\n| where securityType !in~ (\"TrustedLaunch\", \"ConfidentialVM\")\n| project id, vmIdForJoin = tolower(id), name, tags\n| join kind = leftouter (\n recoveryservicesresources\n | where type =~ \"Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationProtectedItems\"\n and properties.providerSpecificDetails.dataSourceInfo.datasourceType =~ \"AzureVm\"\n | project vmResourceId = tolower(properties.providerSpecificDetails.dataSourceInfo.resourceId)\n )\n on $left.vmIdForJoin == $right.vmResourceId\n| where isempty(vmResourceId)\n| project recommendationId = \"cfe22a65-b1db-fd41-9e8e-d573922709ae\", name, id, tags\n"
},
{
@@ -1801,7 +1917,9 @@
"severity": "High",
"category": "High Availability",
"guid": "122d11d7-b91f-8747-a562-f56b79bcfbdc",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that are not using Managed Disks\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnull(properties.storageProfile.osDisk.managedDisk)\n| project recommendationId = \"122d11d7-b91f-8747-a562-f56b79bcfbdc\", name, id, tags\n\n"
},
{
@@ -1834,7 +1952,9 @@
"severity": "Low",
"category": "Scalability",
"guid": "4ea2878f-0d69-8d4a-b715-afc10d1e538e",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that only have OS Disk\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where array_length(properties.storageProfile.dataDisks) < 1\n| project recommendationId = \"4ea2878f-0d69-8d4a-b715-afc10d1e538e\", name, id, tags\n\n"
},
{
@@ -1863,7 +1983,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "1981f704-97b9-b645-9c57-33f8ded9261a",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that do NOT have Backup enabled\n// Run query to see results.\nresources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| project name, id, tags\n| join kind=leftouter (\n recoveryservicesresources\n | where type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems'\n | where properties.dataSourceInfo.datasourceType =~ 'Microsoft.Compute/virtualMachines'\n | project idBackupEnabled=properties.sourceResourceId\n | extend name=strcat_array(array_slice(split(idBackupEnabled, '/'), 8, -1), '/')\n) on name\n| where isnull(idBackupEnabled)\n| project-away idBackupEnabled\n| project-away name1\n| project recommendationId = \"1981f704-97b9-b645-9c57-33f8ded9261a\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -1892,7 +2014,9 @@
"severity": "Low",
"category": "Governance",
"guid": "98b334c0-8578-6046-9e43-b6e8fce6318e",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that are NOT running\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where properties.extended.instanceView.powerState.displayStatus != 'VM running'\n| project recommendationId = \"98b334c0-8578-6046-9e43-b6e8fce6318e\", name, id, tags\n\n"
},
{
@@ -1921,7 +2045,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "dfedbeb1-1519-fc47-86a5-52f96cf07105",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VM NICs that do not have Accelerated Networking enabled\nresources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| mv-expand nic = properties.networkProfile.networkInterfaces\n| project name, id, tags, lowerCaseNicId = tolower(nic.id), vmSize = tostring(properties.hardwareProfile.vmSize)\n| join kind = inner (\n resources\n | where type =~ 'Microsoft.Network/networkInterfaces'\n | where properties.enableAcceleratedNetworking == false\n | project nicName = split(id, \"/\")[8], lowerCaseNicId = tolower(id)\n )\n on lowerCaseNicId\n| summarize nicNames = make_set(nicName) by name, id, tostring(tags), vmSize\n| extend param1 = strcat(\"NicName: \", strcat_array(nicNames, \", \")), param2 = strcat(\"VMSize: \", vmSize)\n| project recommendationId = \"dfedbeb1-1519-fc47-86a5-52f96cf07105\", name, id, tags, param1, param2\n| order by id asc\n\n"
},
{
@@ -1950,7 +2076,9 @@
"severity": "Low",
"category": "Governance",
"guid": "73d1bb04-7d3e-0d47-bc0d-63afe773b5fe",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -1979,7 +2107,9 @@
"severity": "Medium",
"category": "Security",
"guid": "1f629a30-c9d0-d241-82ee-6f2eb9d42cb4",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs with PublicIPs directly associated with them\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnotnull(properties.networkProfile.networkInterfaces)\n| mv-expand nic=properties.networkProfile.networkInterfaces\n| project name, id, tags, nicId = nic.id\n| extend nicId = tostring(nicId)\n| join kind=inner (\n Resources\n | where type =~ 'Microsoft.Network/networkInterfaces'\n | where isnotnull(properties.ipConfigurations)\n | mv-expand ipconfig=properties.ipConfigurations\n | extend publicIp = tostring(ipconfig.properties.publicIPAddress.id)\n | where publicIp != \"\"\n | project name, nicId = tostring(id), publicIp\n) on nicId\n| project recommendationId = \"1f629a30-c9d0-d241-82ee-6f2eb9d42cb4\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -2008,7 +2138,9 @@
"severity": "Low",
"category": "Security",
"guid": "82b3cf6b-9ae2-2e44-b193-10793213f676",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of virtual machines and associated NICs that do have an NSG associated to them and also an NSG associated to the subnet.\nResources\n| where type =~ 'Microsoft.Network/networkInterfaces'\n| where isnotnull(properties.networkSecurityGroup)\n| mv-expand ipConfigurations = properties.ipConfigurations, nsg = properties.networkSecurityGroup\n| project nicId = tostring(id), subnetId = tostring(ipConfigurations.properties.subnet.id), nsgName=split(nsg.id, '/')[8]\n| parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet\n | join kind=inner (\n Resources\n | where type =~ 'Microsoft.Network/NetworkSecurityGroups' and isnotnull(properties.subnets)\n | project name, resourceGroup, subnet=properties.subnets\n | mv-expand subnet\n | project subnetId=tostring(subnet.id)\n ) on subnetId\n | project nicId\n| join kind=leftouter (\n Resources\n | where type =~ 'Microsoft.Compute/virtualMachines'\n | where isnotnull(properties.networkProfile.networkInterfaces)\n | mv-expand nic=properties.networkProfile.networkInterfaces\n | project vmName = name, vmId = id, tags, nicId = nic.id, nicName=split(nic.id, '/')[8]\n | extend nicId = tostring(nicId)\n) on nicId\n| project recommendationId = \"82b3cf6b-9ae2-2e44-b193-10793213f676\", name=vmName, id = vmId, tags, param1 = strcat(\"nic-name=\", nicName)\n\n"
},
{
@@ -2037,7 +2169,9 @@
"severity": "Medium",
"category": "Security",
"guid": "41a22a5e-5e08-9647-92d0-2ffe9ef1bdad",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VM NICs that have IPForwarding enabled. This feature is usually only required for Network Virtual Appliances\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnotnull(properties.networkProfile.networkInterfaces)\n| mv-expand nic=properties.networkProfile.networkInterfaces\n| project name, id, tags, nicId = nic.id\n| extend nicId = tostring(nicId)\n| join kind=inner (\n Resources\n | where type =~ 'Microsoft.Network/networkInterfaces'\n | where properties.enableIPForwarding == true\n | project nicId = tostring(id)\n) on nicId\n| project recommendationId = \"41a22a5e-5e08-9647-92d0-2ffe9ef1bdad\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -2066,7 +2200,9 @@
"severity": "Low",
"category": "Other Best Practices",
"guid": "1cf8fe21-9593-1e4e-966b-779a294c0d30",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VM NICs that have DNS Server settings configured in any of the NICs\nResources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnotnull(properties.networkProfile.networkInterfaces)\n| mv-expand nic=properties.networkProfile.networkInterfaces\n| project name, id, tags, nicId = nic.id\n| extend nicId = tostring(nicId)\n| join kind=inner (\n Resources\n | where type =~ 'Microsoft.Network/networkInterfaces'\n | project name, id, dnsServers = properties.dnsSettings.dnsServers\n | extend hasDns = array_length(dnsServers) >= 1\n | where hasDns != 0\n | project name, nicId = tostring(id)\n) on nicId\n| project recommendationId = \"1cf8fe21-9593-1e4e-966b-779a294c0d30\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -2099,7 +2235,9 @@
"severity": "Medium",
"category": "Other Best Practices",
"guid": "3263a64a-c256-de48-9818-afd3cbc55c2a",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Disks configured to be Shared. This is not an indication of an issue, but if a disk with this configuration is assigned to two or more VMs without a proper disk control mechanism (like a WSFC) it can lead to data loss\nresources\n| where type =~ 'Microsoft.Compute/disks'\n| where isnotnull(properties.maxShares) and properties.maxShares >= 2\n| project id, name, tags, lowerCaseDiskId = tolower(id), diskState = tostring(properties.diskState)\n| join kind = leftouter (\n resources\n | where type =~ 'Microsoft.Compute/virtualMachines'\n | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)\n | join kind = fullouter (\n resources\n | where type =~ 'Microsoft.Compute/virtualMachines'\n | mv-expand dataDisks = properties.storageProfile.dataDisks\n | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)\n )\n on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId\n | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)\n )\n on lowerCaseDiskId\n| summarize vmNames = make_set(vmName) by name, id, tostring(tags), diskState\n| extend param1 = strcat(\"DiskState: \", diskState), param2 = iif(isempty(vmNames[0]), \"VMName: n/a\", strcat(\"VMName: \", strcat_array(vmNames, \", \")))\n| project recommendationId = \"3263a64a-c256-de48-9818-afd3cbc55c2a\", name, id, tags, param1, param2\n| order by id asc\n\n"
},
{
@@ -2128,7 +2266,9 @@
"severity": "Low",
"category": "Security",
"guid": "70b1d2be-e6c4-b54e-9959-b1b690f9e485",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Disks with \"Enable public access from all networks\" enabled\nresources\n| where type =~ 'Microsoft.Compute/disks'\n| where properties.publicNetworkAccess == \"Enabled\"\n| project id, name, tags, lowerCaseDiskId = tolower(id)\n| join kind = leftouter (\n resources\n | where type =~ 'Microsoft.Compute/virtualMachines'\n | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)\n | join kind = fullouter (\n resources\n | where type =~ 'Microsoft.Compute/virtualMachines'\n | mv-expand dataDisks = properties.storageProfile.dataDisks\n | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)\n )\n on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId\n | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)\n )\n on lowerCaseDiskId\n| summarize vmNames = make_set(vmName) by name, id, tostring(tags)\n| extend param1 = iif(isempty(vmNames[0]), \"VMName: n/a\", strcat(\"VMName: \", strcat_array(vmNames, \", \")))\n| project recommendationId = \"70b1d2be-e6c4-b54e-9959-b1b690f9e485\", name, id, tags, param1\n| order by id asc\n\n"
},
{
@@ -2161,7 +2301,9 @@
"severity": "Low",
"category": "Governance",
"guid": "c42343ae-2712-2843-a285-3437eb0b28a1",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs in \"Non-compliant\" state with Azure Policies\npolicyresources\n| where type =~ \"Microsoft.PolicyInsights/policyStates\" and properties.resourceType =~ \"Microsoft.Compute/virtualMachines\" and properties.complianceState =~ \"NonCompliant\"\n| project\n policyDefinitionId = tolower(properties.policyDefinitionId),\n policyAssignmentId = tolower(properties.policyAssignmentId),\n targetResourceId = tolower(properties.resourceId)\n// Join the policy definition details\n| join kind = leftouter (\n policyresources\n | where type =~ \"Microsoft.Authorization/policyDefinitions\"\n | project policyDefinitionId = tolower(id), policyDefinitionDisplayName = properties.displayName\n )\n on policyDefinitionId\n| project policyDefinitionId, policyDefinitionDisplayName, policyAssignmentId, targetResourceId\n// Join the policy assignment details\n| join kind = leftouter (\n policyresources\n | where type =~ \"Microsoft.Authorization/policyAssignments\"\n | project policyAssignmentId = tolower(id), policyAssignmentDisplayName = properties.displayName\n )\n on policyAssignmentId\n| project policyDefinitionId, policyDefinitionDisplayName, policyAssignmentId, policyAssignmentDisplayName, targetResourceId\n// Join the target resource details\n| join kind = leftouter (\n resources\n | where type =~ \"Microsoft.Compute/virtualMachines\"\n | project targetResourceId = tolower(id), targetResourceIdPreservedCase = id, targetResourceName = name, targetResourceTags = tags\n )\n on targetResourceId\n| project\n recommendationId = \"c42343ae-2712-2843-a285-3437eb0b28a1\",\n name = targetResourceName,\n id = targetResourceIdPreservedCase,\n tags = targetResourceTags,\n param1 = strcat(\"DefinitionName: \", policyDefinitionDisplayName),\n param2 = strcat(\"DefinitionID: \", policyDefinitionId),\n param3 = strcat(\"AssignmentName: \", policyAssignmentDisplayName),\n param4 = strcat(\"AssignmentID: \", policyAssignmentId)\n"
},
{
@@ -2190,7 +2332,9 @@
"severity": "High",
"category": "Security",
"guid": "f0a97179-133a-6e4f-8a49-8a44da73ffce",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure VM disks without Azure Disk Encryption or encryption at host enabled\nresources\n| where type =~ \"microsoft.compute/disks\"\n| project diskId = id, diskName = name, vmId = tolower(managedBy), azureDiskEncryption = iff(properties.encryptionSettingsCollection.enabled == true, true, false)\n| join kind=leftouter (resources\n| where type =~ \"microsoft.compute/virtualmachines\"\n| project vmId = tolower(id), vmName = name, encryptionAtHost = iff(properties.securityProfile.encryptionAtHost == true, true, false)) on vmId\n| where not(encryptionAtHost) and not(azureDiskEncryption)\n| project recommendationId = 'f0a97179-133a-6e4f-8a49-8a44da73ffce', name = vmName, id =vmId, param1 = strcat('diskName:',diskName), param2 = strcat('azureDiskEncryption:',iff(azureDiskEncryption, \"Enabled\", \"Disabled\")), param3 = strcat('encryptionAtHost:',iff(encryptionAtHost, \"Enabled\", \"Disabled\"))\n"
},
{
@@ -2223,7 +2367,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "b72214bb-e879-5f4b-b9cd-642db84f36f4",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Check for VMs without Azure Monitoring Agent extension installed, missing Data Collection Rule or Data Collection Rule without performance enabled.\nResources\n| where type == 'microsoft.compute/virtualmachines'\n| project idVm = tolower(id), name, tags\n| join kind=leftouter (\n InsightsResources\n | where type =~ \"Microsoft.Insights/dataCollectionRuleAssociations\" and id has \"Microsoft.Compute/virtualMachines\"\n | project idDcr = tolower(properties.dataCollectionRuleId), idVmDcr = tolower(substring(id, 0, indexof(id, \"/providers/Microsoft.Insights/dataCollectionRuleAssociations/\"))))\non $left.idVm == $right.idVmDcr\n| join kind=leftouter (\n Resources\n | where type =~ \"Microsoft.Insights/dataCollectionRules\"\n | extend\n isPerformanceEnabled = iif(properties.dataSources.performanceCounters contains \"Microsoft-InsightsMetrics\" and properties.dataFlows contains \"Microsoft-InsightsMetrics\", true, false),\n isMapEnabled = iif(properties.dataSources.extensions contains \"Microsoft-ServiceMap\" and properties.dataSources.extensions contains \"DependencyAgent\" and properties.dataFlows contains \"Microsoft-ServiceMap\", true, false)//,\n | where isPerformanceEnabled or isMapEnabled\n | project dcrName = name, isPerformanceEnabled, isMapEnabled, idDcr = tolower(id))\non $left.idDcr == $right.idDcr\n| join kind=leftouter (\n Resources\n | where type == 'microsoft.compute/virtualmachines/extensions' and (name contains 'AzureMonitorWindowsAgent' or name contains 'AzureMonitorLinuxAgent')\n | extend idVmExtension = tolower(substring(id, 0, indexof(id, '/extensions'))), extensionName = name)\non $left.idVm == $right.idVmExtension\n| where isPerformanceEnabled != 1 or (extensionName != 'AzureMonitorWindowsAgent' and extensionName != 'AzureMonitorLinuxAgent')\n| project recommendationId = \"b72214bb-e879-5f4b-b9cd-642db84f36f4\", name, id = idVm, tags, param1 = strcat('MonitoringExtension:', extensionName), param2 = strcat('DataCollectionRuleId:', idDcr), param3 = strcat('isPerformanceEnabled:', isPerformanceEnabled)\n\n"
},
{
@@ -2252,7 +2398,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "4a9d8973-6dba-0042-b3aa-07924877ebd5",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Virtual Machines without diagnostic settings enabled/with diagnostic settings enabled but not configured both performance counters and event logs/syslogs.\nresources\n| where type =~ \"microsoft.compute/virtualmachines\"\n| project name, id, tags, lowerCaseVmId = tolower(id)\n| join kind = leftouter (\n resources\n | where type =~ \"Microsoft.Compute/virtualMachines/extensions\" and properties.publisher =~ \"Microsoft.Azure.Diagnostics\"\n | project\n lowerCaseVmIdOfExtension = tolower(substring(id, 0, indexof(id, \"/extensions/\"))),\n extensionType = properties.type,\n provisioningState = properties.provisioningState,\n storageAccount = properties.settings.StorageAccount,\n // Windows\n wadPerfCounters = properties.settings.WadCfg.DiagnosticMonitorConfiguration.PerformanceCounters.PerformanceCounterConfiguration,\n wadEventLogs = properties.settings.WadCfg.DiagnosticMonitorConfiguration.WindowsEventLog,\n // Linux\n ladPerfCounters = properties.settings.ladCfg.diagnosticMonitorConfiguration.performanceCounters.performanceCounterConfiguration,\n ladSyslog = properties.settings.ladCfg.diagnosticMonitorConfiguration.syslogEvents\n | extend\n // Windows\n isWadPerfCountersConfigured = iif(array_length(wadPerfCounters) > 0, true, false),\n isWadEventLogsConfigured = iif(isnotnull(wadEventLogs) and array_length(wadEventLogs.DataSource) > 0, true, false),\n // Linux\n isLadPerfCountersConfigured = iif(array_length(ladPerfCounters) > 0, true, false),\n isLadSyslogConfigured = isnotnull(ladSyslog)\n | project\n lowerCaseVmIdOfExtension,\n extensionType,\n provisioningState,\n storageAccount,\n isPerfCountersConfigured = case(extensionType =~ \"IaaSDiagnostics\", isWadPerfCountersConfigured, extensionType =~ \"LinuxDiagnostic\", isLadPerfCountersConfigured, false),\n isEventLogsConfigured = case(extensionType =~ \"IaaSDiagnostics\", isWadEventLogsConfigured, extensionType =~ \"LinuxDiagnostic\", isLadSyslogConfigured, false)\n )\n on $left.lowerCaseVmId == $right.lowerCaseVmIdOfExtension\n| where isempty(lowerCaseVmIdOfExtension) or provisioningState !~ \"Succeeded\" or not(isPerfCountersConfigured and isEventLogsConfigured)\n| extend\n param1 = strcat(\"DiagnosticSetting: \", iif(isnotnull(extensionType), strcat(\"Enabled, partially configured (\", extensionType, \")\"), \"Not enabled\")),\n param2 = strcat(\"ProvisioningState: \", iif(isnotnull(provisioningState), provisioningState, \"n/a\")),\n param3 = strcat(\"storageAccount: \", iif(isnotnull(storageAccount), storageAccount, \"n/a\")),\n param4 = strcat(\"PerformanceCounters: \", case(isnull(isPerfCountersConfigured), \"n/a\", isPerfCountersConfigured, \"Configured\", \"Not configured\")),\n param5 = strcat(\"EventLogs/Syslogs: \", case(isnull(isEventLogsConfigured), \"n/a\", isEventLogsConfigured, \"Configured\", \"Not configured\"))\n| project recommendationId = \"4a9d8973-6dba-0042-b3aa-07924877ebd5\", name, id, tags, param1, param2, param3, param4, param5\n\n"
},
{
@@ -2281,7 +2429,9 @@
"severity": "High",
"category": "High Availability",
"guid": "52ab9e5c-eec0-3148-8bd7-b6dd9e1be870",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find VMS that do not have maintenance configuration assigned\nResources\n| extend resourceId = tolower(id)\n| project name, location, type, id, tags, resourceId, properties\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| join kind=leftouter (\nmaintenanceresources\n| where type =~ \"microsoft.maintenance/configurationassignments\"\n| project planName = name, type, maintenanceProps = properties\n| extend resourceId = tostring(maintenanceProps.resourceId)\n) on resourceId\n| where isnull(maintenanceProps)\n| project recommendationId = \"52ab9e5c-eec0-3148-8bd7-b6dd9e1be870\",name, id, tags\n| order by id asc\n\n"
},
{
@@ -2310,7 +2460,9 @@
"severity": "High",
"category": "Scalability",
"guid": "3201dba8-d1da-4826-98a4-104066545170",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs using A or B series families\nresources\n| where type == 'microsoft.compute/virtualmachines'\n| where properties.hardwareProfile.vmSize contains \"Standard_B\" or properties.hardwareProfile.vmSize contains \"Standard_A\"\n| project recommendationId = \"3201dba8-d1da-4826-98a4-104066545170\", name, id, tags, param1=strcat(\"vmSku: \" , properties.hardwareProfile.vmSize)\n\n"
},
{
@@ -2339,7 +2491,9 @@
"severity": "High",
"category": "Scalability",
"guid": "df0ff862-814d-45a3-95e4-4fad5a244ba6",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs that have an attached disk that is not in the Premium or Ultra sku tier.\n\nresources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| extend lname = tolower(name)\n| join kind=leftouter(resources\n | where type =~ 'Microsoft.Compute/disks'\n | where not(sku.tier =~ 'Premium') and not(sku.tier =~ 'Ultra')\n | extend lname = tolower(tostring(split(managedBy, '/')[8]))\n | project lname, name\n | summarize disks = make_list(name) by lname) on lname\n| where isnotnull(disks)\n| project recommendationId = \"df0ff862-814d-45a3-95e4-4fad5a244ba6\", name, id, tags, param1=strcat(\"AffectedDisks: \", disks)\n\n"
},
{
@@ -2372,7 +2526,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "9ab499d8-8844-424d-a2d4-8f53690eb8f8",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -2409,7 +2565,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "2de8fa5e-14f4-4c4c-857f-1520f87a629f",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -2438,7 +2596,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "fa0cf4f5-0b21-47b7-89a9-ee936f193ce1",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find eligible Disks that are not zonal nor zone redundant\nresources\n| where type == 'microsoft.compute/disks'\n| where sku has \"Premium_LRS\" or sku has \"StandardSSD_LRS\"\n| where sku.name has_cs 'ZRS' or array_length(zones) > 0\n| project recommendationId=\"fa0cf4f5-0b21-47b7-89a9-ee936f193ce1\", name, id, tags, param1 = sku, param2 = sku.name\n"
},
{
@@ -2467,7 +2627,9 @@
"severity": "High",
"category": "High Availability",
"guid": "302fda08-ee65-4fbe-a916-6dc0b33169c4",
- "source": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceFile": "azure-resources/Compute/virtualMachines/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Virtual Machines not associated with a Capacity Reservation, and provide details for Capacity Reservation like vmSize, location, and zone.\nresources\n| where type =~ 'Microsoft.Compute/virtualMachines'\n| where isnull(properties.capacityReservation)\n| extend zoneValue = iff(isnull(zones), \"null\", zones)\n| project recommendationId = \"302fda08-ee65-4fbe-a916-6dc0b33169c4\", name, id, tags, param1 = strcat(\"VmSize: \", properties.hardwareProfile.vmSize), param2 = strcat(\"Location: \", location), param3 = strcat(\"Zone: \", zoneValue)\n"
},
{
@@ -2496,7 +2658,9 @@
"severity": "High",
"category": "Scalability",
"guid": "eb005943-40a8-194b-9db2-474d430046b7",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Container Registries that are not using the Premium tier\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| where sku.name != \"Premium\"\n| project recommendationId = \"eb005943-40a8-194b-9db2-474d430046b7\", name, id, tags, param1=strcat(\"SkuName: \", tostring(sku.name))\n| order by id asc\n\n"
},
{
@@ -2525,7 +2689,9 @@
"severity": "High",
"category": "High Availability",
"guid": "63491f70-22e4-3b4a-8b0c-845450e46fac",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Container Registries that do not have zone redundancy enabled\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| where properties.zoneRedundancy != \"Enabled\"\n| project recommendationId = \"63491f70-22e4-3b4a-8b0c-845450e46fac\", name, id, tags, param1=strcat(\"zoneRedundancy: \", tostring(properties.zoneRedundancy))\n| order by id asc\n\n"
},
{
@@ -2558,7 +2724,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "36ea6c09-ef6e-d743-9cfb-bd0c928a430b",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Container Registries that do not have geo-replication enabled\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| project registryName = name, registryId = id, tags, primaryRegion = location\n| join kind=leftouter (\n Resources\n | where type =~ \"microsoft.containerregistry/registries/replications\"\n | project replicationRegion=name, replicationId = id\n | extend registryId=strcat_array(array_slice(split(replicationId, '/'), 0, -3), '/')\n ) on registryId\n| project-away registryId1, replicationId\n| where isempty(replicationRegion)\n| project recommendationId = \"36ea6c09-ef6e-d743-9cfb-bd0c928a430b\", name=registryName, id=registryId, tags\n| order by id asc\n\n"
},
{
@@ -2587,7 +2755,9 @@
"severity": "Low",
"category": "Security",
"guid": "a5a0101a-a240-8742-90ba-81dbde9a0c0c",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -2616,7 +2786,9 @@
"severity": "Low",
"category": "Governance",
"guid": "8e389532-5db5-7e4c-9d4d-443b3e55ae82",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// List container registries that contain additional resources within the same resource group.\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| project registryName=name, registryId=id, registryTags=tags, resourceGroupId=strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup), resourceGroup, subscriptionId\n| join kind=inner (\n resources\n | where not(type =~ \"microsoft.containerregistry/registries\")\n | summarize recourceCount=count() by subscriptionId, resourceGroup\n | where recourceCount != 0\n) on resourceGroup, subscriptionId\n| project recommendationId = \"8e389532-5db5-7e4c-9d4d-443b3e55ae82\", name=registryName, id=registryId, tags=registryTags, param1=strcat('resourceGroupName:',resourceGroup), param2=strcat('resourceGroupId:',resourceGroupId)\n\n"
},
{
@@ -2649,7 +2821,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "3ef86f16-f65b-c645-9901-7830d6dc3a1b",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Container Registries that have their retention policy disabled\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| where properties.policies.retentionPolicy.status == \"disabled\"\n| project recommendationId = \"3ef86f16-f65b-c645-9901-7830d6dc3a1b\", name, id, tags, param1='retentionPolicy:disabled'\n| order by id asc\n\n"
},
{
@@ -2678,7 +2852,9 @@
"severity": "Medium",
"category": "Security",
"guid": "03f4a7d8-c5b4-7842-8e6e-14997a34842b",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Container Registries that have anonymous pull access enabled\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| where properties.anonymousPullEnabled == \"true\"\n| project recommendationId = \"03f4a7d8-c5b4-7842-8e6e-14997a34842b\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -2711,7 +2887,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "44107155-7a32-9348-89f3-d5aa7e7c5a1d",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -2744,7 +2922,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "d594cde6-4116-d143-a64a-25f63289a2f8",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -2773,7 +2953,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "e7f0fd54-fba0-054e-9ab8-e676f2851f88",
- "source": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerRegistry/registries/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure Container Registry resources that do not have soft delete enabled\nresources\n| where type =~ \"microsoft.containerregistry/registries\"\n| where properties.policies.softDeletePolicy.status == \"disabled\"\n| project recommendationId = \"e7f0fd54-fba0-054e-9ab8-e676f2851f88\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -2806,7 +2988,9 @@
"severity": "High",
"category": "High Availability",
"guid": "4f63619f-5001-439c-bacb-8de891287727",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns AKS clusters that do not have any availability zones enabled or only use a single zone\nresources\n| where type =~ \"Microsoft.ContainerService/managedClusters\"\n| project id, name, tags, location, pools = properties.agentPoolProfiles\n| mv-expand pool = pools\n| extend\n numOfAvailabilityZones = iif(isnull(pool.availabilityZones), 0, array_length(pool.availabilityZones))\n| where numOfAvailabilityZones < 2\n| project\n recommendationId = \"4f63619f-5001-439c-bacb-8de891287727\",\n id,\n name,\n tags,\n param1 = strcat(\"NodePoolName: \", pool.name),\n param2 = strcat(\"Mode: \", pool.mode),\n param3 = strcat(\"AvailabilityZones: \", iif(numOfAvailabilityZones == 0, \"None\", strcat(\"Zone \", strcat_array(pool.availabilityZones, \", \")))),\n param4 = strcat(\"Location: \", location)\n"
},
{
@@ -2835,7 +3019,9 @@
"severity": "High",
"category": "High Availability",
"guid": "5ee083cd-6ac3-4a83-8913-9549dd36cf56",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns each AKS cluster with nodepools that do not have system pods labelled with CriticalAddonsOnly\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| mv-expand agentPoolProfile = properties.agentPoolProfiles\n| where agentPoolProfile.mode =~ 'System' // system node pools\n| extend taint = tostring(parse_json(agentPoolProfile.nodeTaints))\n| extend hasCriticalAddonsTaint = agentPoolProfile.kubeletConfig has 'CriticalAddonsOnly'\n| extend hasNodeLabel = agentPoolProfile.customNodeLabels has 'CriticalAddonsOnly'\n| extend hasCriticalAddonsOnly = hasCriticalAddonsTaint or hasNodeLabel or isempty(taint)\n| extend nodePool = tostring(parse_json(agentPoolProfile.name))\n| where hasCriticalAddonsOnly\n| project\n recommendationId=\"5ee083cd-6ac3-4a83-8913-9549dd36cf56\",\n id,\n name,\n tags,\n param1=strcat(\"nodepoolName: \", nodePool)\n"
},
{
@@ -2872,7 +3058,9 @@
"severity": "High",
"category": "Security",
"guid": "ca324d71-54b0-4a3e-b9e4-10e767daa9fc",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns a list of AKS clusters not using AAD enabled\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| extend aadProfile = tostring (parse_json(properties.aadProfile))\n| extend disablelocalAdmin = tostring(parse_json(properties.disableLocalAccounts))\n| extend RBAC = tostring(parse_json(properties.enableRBAC))\n| where RBAC == \"false\"\n| project recommendationId=\"ca324d71-54b0-4a3e-b9e4-10e767daa9fc\", name, id, tags, param1=strcat(\"aadProfile: \", aadProfile), param2=strcat(\"disablelocalAdmin: \",disablelocalAdmin), param3=strcat(\"RBAC: \", RBAC)\n\n"
},
{
@@ -2905,7 +3093,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "c22db132-399b-4e7c-995d-577a60881be8",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Check AKS Clusters using kubenet network profile\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| extend networkProfile = tostring (parse_json(properties.networkProfile.networkPlugin))\n| where networkProfile ==\"kubenet\"\n| project recommendationId=\"c22db132-399b-4e7c-995d-577a60881be8\", name, id, tags, param1=strcat(\"networkProfile :\",networkProfile)\n\n"
},
{
@@ -2946,7 +3136,9 @@
"severity": "High",
"category": "Scalability",
"guid": "902c82ff-4910-4b61-942d-0d6ef7f39b67",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find AKS clusters with auto-scaling disabled\nResources\n| where type == \"microsoft.containerservice/managedclusters\"\n| extend autoScaling = tostring (parse_json(properties.agentPoolProfiles.[0].enableAutoScaling))\n| where autoScaling == \"false\"\n| project recommendationId=\"902c82ff-4910-4b61-942d-0d6ef7f39b67\", name, id, tags, param1=strcat(\"autoScaling :\", autoScaling)\n\n"
},
{
@@ -2979,7 +3171,9 @@
"severity": "Low",
"category": "Disaster Recovery",
"guid": "269a9f1a-6675-460a-831e-b05a887a8c4b",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find AKS clusters that do not have backup enabled\n\nresources\n| where type =~ 'Microsoft.ContainerService/managedClusters'\n| extend lname = tolower(name)\n| join kind=leftouter(recoveryservicesresources\n | where type =~ 'microsoft.dataprotection/backupvaults/backupinstances'\n | extend lname = tolower(tostring(split(properties.dataSourceInfo.resourceID, '/')[8]))\n | extend protectionState = properties.currentProtectionState\n | project lname, protectionState) on lname\n| where protectionState != 'ProtectionConfigured'\n| extend param1 = iif(isnull(protectionState), 'Protection Not Configured', strcat('Protection State: ', protectionState))\n| project recommendationId = \"269a9f1a-6675-460a-831e-b05a887a8c4b\", name, id, tags, param1\n\n"
},
{
@@ -3024,7 +3218,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "d3111036-355d-431b-ab49-8ddad042800b",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3057,7 +3253,9 @@
"severity": "High",
"category": "Governance",
"guid": "b002c030-72e6-4a37-8217-1cb276c43169",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3086,7 +3284,9 @@
"severity": "Low",
"category": "Scalability",
"guid": "9a1c17e5-c9a0-43db-b920-adaf54d1bcb7",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3119,7 +3319,9 @@
"severity": "Low",
"category": "Scalability",
"guid": "b4639ca7-6308-429a-8b98-92f0bf9bf813",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3152,7 +3354,9 @@
"severity": "High",
"category": "High Availability",
"guid": "0611251f-e70f-4243-8ddd-cfe894bec2e7",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns all AKS clusters not running on the Standard tier\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| where sku.tier != \"Standard\"\n| project recommendationId=\"0611251f-e70f-4243-8ddd-cfe894bec2e7\", id, name, tags, param1=strcat(\"skuName: \", sku.name), param2=strcat(\"skuTier: \", sku.tier)\n\n"
},
{
@@ -3181,7 +3385,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "dcaf8128-94bd-4d53-9235-3a0371df6b74",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns AKS clusters where either Azure Monitor is not enabled and/or Container Insights is not enabled\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| extend azureMonitor = tostring(parse_json(properties.azureMonitorProfile.metrics.enabled))\n| extend insights = tostring(parse_json(properties.addonProfiles.omsagent.enabled))\n| where isempty(azureMonitor) or isempty(insights)\n| project recommendationId=\"dcaf8128-94bd-4d53-9235-3a0371df6b74\",id, name, tags, param1=strcat(\"azureMonitorProfileEnabled: \", iff(isempty(azureMonitor), \"false\", azureMonitor)), param2=strcat(\"containerInsightsEnabled: \", iff(isempty(insights), \"false\", insights))\n\n"
},
{
@@ -3218,7 +3424,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "a7bfcc18-b0d8-4d37-81f3-8131ed8bead5",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns any AKS cluster nodepools that do not have Ephemeral Disks\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| mv-expand agentPoolProfile = properties.agentPoolProfiles\n| extend type = tostring(agentPoolProfile.osDiskType)\n| where type != 'Ephemeral'\n| project recommendationId=\"a7bfcc18-b0d8-4d37-81f3-8131ed8bead5\", name, id, param1=strcat(\"osDiskType: \", type)\n"
},
{
@@ -3251,7 +3459,9 @@
"severity": "Low",
"category": "Governance",
"guid": "26ebaf1f-c70d-4ebd-8641-4b60a0ce0094",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns a count of non-compliant policy items per AKS cluster\nPolicyResources\n| where type =~ 'Microsoft.PolicyInsights/PolicyStates'\n| extend complianceState = tostring(properties.complianceState)\n| where complianceState == 'NonCompliant'\n| where properties.resourceType =~ 'Microsoft.ContainerService/managedClusters'\n| extend\n id = tostring(properties.resourceId)\n| summarize count() by id\n| join kind=inner (\n resources\n | where type =~ 'Microsoft.ContainerService/managedClusters'\n | project id, name\n) on id\n| project recommendationId=\"26ebaf1f-c70d-4ebd-8641-4b60a0ce0094\", id, name, param1=strcat(\"numNonCompliantAlerts: \", count_)\n"
},
{
@@ -3284,7 +3494,9 @@
"severity": "Low",
"category": "Other Best Practices",
"guid": "5f3cbd68-692a-4121-988c-9770914859a9",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns AKS clusters where GitOps is not enabled\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| extend gitops = tostring (parse_json(properties.addOnProfiles.gitops.enabled))\n| where isempty(gitops)\n| project recommendationId=\"5f3cbd68-692a-4121-988c-9770914859a9\", id, name, tags, param1=strcat(\"gitopsEnabled: \", \"false\")\n\n"
},
{
@@ -3317,7 +3529,9 @@
"severity": "High",
"category": "High Availability",
"guid": "928fcc6f-5e9a-42d9-9bd4-260af42de2e5",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3350,7 +3564,9 @@
"severity": "High",
"category": "High Availability",
"guid": "cd6791b1-c60e-4b37-ac98-9897b1e6f4b8",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3379,7 +3595,9 @@
"severity": "High",
"category": "High Availability",
"guid": "bcfe71f1-ebed-49e5-a84a-193b81ad5d27",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3408,7 +3626,9 @@
"severity": "High",
"category": "High Availability",
"guid": "7f7ae535-a5ba-4665-b7e0-c451dbdda01f",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns each AKS cluster with nodepools that have system nodepools with less than 2 nodes\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| mv-expand agentPoolProfile = properties.agentPoolProfiles\n| extend taints = tostring(parse_json(agentPoolProfile.nodeTaints))\n| extend nodePool = tostring(parse_json(agentPoolProfile.name))\n| where taints has \"CriticalAddonsOnly=true:NoSchedule\" and agentPoolProfile.minCount < 2\n| project recommendationId=\"7f7ae535-a5ba-4665-b7e0-c451dbdda01f\", id, name, param1=strcat(\"nodePoolName: \", nodePool), param2=strcat(\"nodePoolMinNodeCount: \", agentPoolProfile.minCount)\n\n"
},
{
@@ -3437,7 +3657,9 @@
"severity": "High",
"category": "High Availability",
"guid": "005ccbbd-aeab-46ef-80bd-9bd4479412ec",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns each AKS cluster with nodepools that have user nodepools with less than 2 nodes\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| mv-expand agentPoolProfile = properties.agentPoolProfiles\n| extend taints = tostring(parse_json(agentPoolProfile.nodeTaints))\n| extend nodePool = tostring(parse_json(agentPoolProfile.name))\n| where taints !has \"CriticalAddonsOnly=true:NoSchedule\" and agentPoolProfile.minCount < 2\n| project recommendationId=\"005ccbbd-aeab-46ef-80bd-9bd4479412ec\", id, name, param1=strcat(\"nodePoolName: \", nodePool), param2=strcat(\"nodePoolMinNodeCount: \", agentPoolProfile.minCount)\n\n"
},
{
@@ -3470,7 +3692,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "a08a06a0-e41a-4b99-83bb-69ce8bca54cb",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -3499,7 +3723,9 @@
"severity": "High",
"category": "High Availability",
"guid": "e620fa98-7a40-41a0-bfc9-b4407297fb58",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns each AKS cluster with nodepools that have user nodepools with a subnetmask that does not match autoscale configured max-nodes\n// Subtracting the network address, broadcast address, and default 3 addresses Azure reserves within each subnet\n\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| extend nodePools = properties['agentPoolProfiles']\n| mv-expand nodePools = properties.agentPoolProfiles\n| where nodePools.enableAutoScaling == true\n| extend nodePoolName=nodePools.name, maxNodes = nodePools.maxCount, subnetId = tostring(nodePools.vnetSubnetID)\n| project clusterId = id, clusterName=name, nodePoolName=nodePools.name, toint(maxNodes), subnetId\n| join kind = leftouter (\n resources\n | where type == 'microsoft.network/virtualnetworks'\n | extend subnets = properties.subnets\n | mv-expand subnets\n | project id = tostring(subnets.id), addressPrefix = tostring(subnets.properties['addressPrefix'])\n | extend subnetmask = toint(substring(addressPrefix, indexof(addressPrefix, '/')+1, string_size(addressPrefix)))\n | extend possibleMaxNodeCount = toint(exp2(32-subnetmask) - 5)\n) on $left.subnetId == $right.id\n| project-away id, subnetmask\n| where possibleMaxNodeCount <= maxNodes\n| extend param1 = strcat(nodePoolName, \" autoscaler upper limit: \", maxNodes)\n| extend param2 = strcat(\"ip addresses on subnet: \", possibleMaxNodeCount)\n| project recommendationId=\"e620fa98-7a40-41a0-bfc9-b4407297fb58\", name=clusterName, id=clusterId, param1, param2\n\n"
},
{
@@ -3528,7 +3754,9 @@
"severity": "High",
"category": "High Availability",
"guid": "a01afc4c-7439-4919-b2da-3565992ea2a7",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -3557,7 +3785,9 @@
"severity": "High",
"category": "High Availability",
"guid": "f46b0d1d-56ef-4795-b98a-f6ee00cb341a",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns each AKS cluster with nodepools that have Linux nodepools not using Azure Linux\nresources\n| where type == \"microsoft.containerservice/managedclusters\"\n| mv-expand agentPoolProfile = properties.agentPoolProfiles\n| where agentPoolProfile.osType == 'Linux' and agentPoolProfile.osSKU != 'AzureLinux'\n| project recommendationid=\"f46b0d1d-56ef-4795-b98a-f6ee00cb341a\", name, id, param1=strcat(\"nodePoolName: \", agentPoolProfile.name)\n"
},
{
@@ -3586,7 +3816,9 @@
"severity": "High",
"category": "High Availability",
"guid": "9200aca6-0e83-4749-a5eb-e3939367bdc2",
- "source": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceFile": "azure-resources/ContainerService/managedClusters/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -3615,7 +3847,9 @@
"severity": "High",
"category": "High Availability",
"guid": "88856605-53d8-4bbd-a75b-4a7b14939d32",
- "source": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for MySQL instances that are not zone redundant\nresources\n| where type == \"microsoft.dbformysql/flexibleservers\"\n| where properties.highAvailability.mode != \"ZoneRedundant\"\n| project recommendationId = \"88856605-53d8-4bbd-a75b-4a7b14939d32\", name, id, tags, param1 = \"ZoneRedundant: False\"\n"
},
{
@@ -3644,7 +3878,9 @@
"severity": "High",
"category": "Scalability",
"guid": "82a9a0f2-24ee-496f-9ad2-25f81710942d",
- "source": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for MySQL instances that do not have a custom maintenance window\nresources\n| where type =~ \"microsoft.dbformysql/flexibleservers\"\n| where properties.maintenanceWindow.customWindow != \"Enabled\"\n| project recommendationId = \"82a9a0f2-24ee-496f-9ad2-25f81710942d\", name, id, tags, param1 = strcat(\"customWindow:\", properties['maintenanceWindow']['customWindow'])\n"
},
{
@@ -3673,7 +3909,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "5c96afc3-7d2e-46ff-a4c7-9c32850c441b",
- "source": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for MySQL instances that do not have geo redundant backup storage enabled\nresources\n| where type =~ \"microsoft.dbformysql/flexibleservers\"\n| where properties.backup.geoRedundantBackup != \"Enabled\"\n| project recommendationId = \"5c96afc3-7d2e-46ff-a4c7-9c32850c441b\", name, id, tags, param1 = strcat(\"geoRedundantBackup:\", properties['backup']['geoRedundantBackup'])\n"
},
{
@@ -3702,7 +3940,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "b49a8653-cc43-48c9-8513-a2d2e3f14dd1",
- "source": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for MySQL instances that do not have a read replica configured\nresources\n| where type =~ \"microsoft.dbformysql/flexibleservers\"\n| where properties.replicationRole == \"None\"\n| project recommendationId = \"b49a8653-cc43-48c9-8513-a2d2e3f14dd1\", name, id, tags, param1 = strcat(\"replicationRole:\", properties['replicationRole'])\n"
},
{
@@ -3731,7 +3971,9 @@
"severity": "High",
"category": "Scalability",
"guid": "8176a79d-8645-4e52-96be-a10fc0204fe5",
- "source": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforMySQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for MySQL instances that do not have a storage auto-grow\nresources\n| where type =~ \"microsoft.dbformysql/flexibleservers\"\n| where properties.storage.autoGrow != \"Enabled\"\n| project recommendationId = \"8176a79d-8645-4e52-96be-a10fc0204fe5\", name, id, tags, param1 = strcat(\"autoGrow:\", properties['storage']['autoGrow'])\n"
},
{
@@ -3760,7 +4002,9 @@
"severity": "High",
"category": "High Availability",
"guid": "ca87914f-aac4-4783-ab67-82a6f936f194",
- "source": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for PostgreSQL instances that are not zone redundant\nresources\n| where type == \"microsoft.dbforpostgresql/flexibleservers\"\n| where properties.highAvailability.mode != \"ZoneRedundant\"\n| project recommendationId = \"ca87914f-aac4-4783-ab67-82a6f936f194\", name, id, tags, param1 = \"ZoneRedundant: False\"\n"
},
{
@@ -3789,7 +4033,9 @@
"severity": "High",
"category": "Scalability",
"guid": "b2bad57d-7e03-4c0f-9024-597c9eb295bb",
- "source": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for PostgreSQL instances that do not have a custom maintenance window\nresources\n| where type == \"microsoft.dbforpostgresql/flexibleservers\"\n| where properties.maintenanceWindow.customWindow != \"Enabled\"\n| project recommendationId = \"b2bad57d-7e03-4c0f-9024-597c9eb295bb\", name, id, tags, param1 = strcat(\"customWindow:\", properties['maintenanceWindow']['customWindow'])\n"
},
{
@@ -3818,7 +4064,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "31f4ac4b-29cb-4588-8de2-d8fe6f13ceb3",
- "source": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for PostgreSQL instances that do not have geo redundant backup storage configured\nresources\n| where type == \"microsoft.dbforpostgresql/flexibleservers\"\n| where properties.backup.geoRedundantBackup != \"Enabled\"\n| project recommendationId = \"31f4ac4b-29cb-4588-8de2-d8fe6f13ceb3\", name, id, tags, param1 = strcat(\"geoRedundantBackup:\", properties['backup']['geoRedundantBackup'])\n"
},
{
@@ -3847,7 +4095,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "2ab85a67-26be-4ed2-a0bb-101b2513ec63",
- "source": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Database for PostgreSQL instances that are read replicas\nresources\n| where type == \"microsoft.dbforpostgresql/flexibleservers\"\n| where properties.replicationRole == \"AsyncReplica\"\n| project recommendationId = \"2ab85a67-26be-4ed2-a0bb-101b2513ec63\", name, id, tags, param1 = strcat(\"replicationRole:\", properties['replicationRole'])\n"
},
{
@@ -3876,7 +4126,9 @@
"severity": "High",
"category": "Scalability",
"guid": "6293a3cc-6b4a-4c0f-9ea7-b8ae8d7dd3d5",
- "source": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceFile": "azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -3905,7 +4157,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "0e835cc2-2551-a247-b1f1-3c5f25c9cb70",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -3934,7 +4188,9 @@
"severity": "High",
"category": "Scalability",
"guid": "c166602e-0804-e34b-be8f-09b4d56e1fcd",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -3963,7 +4219,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "5877a510-8444-7a4c-8412-a8dab8662f7e",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -3992,7 +4250,9 @@
"severity": "High",
"category": "Scalability",
"guid": "5c72f0d6-55ec-d941-be84-36c194fa78c0",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4021,7 +4281,9 @@
"severity": "High",
"category": "Scalability",
"guid": "362ad2b6-b92c-414f-980a-0cf69467ccce",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4054,7 +4316,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "cd77db98-9b13-6e4b-bd2b-74c2cb538628",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4083,7 +4347,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "3d3e53b5-ebd1-db42-b43b-d4fad74824ec",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4112,7 +4378,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "7fb90127-5364-bb4d-86fa-30778ed713fb",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4141,7 +4409,9 @@
"severity": "High",
"category": "High Availability",
"guid": "da4ea916-4df3-8c4d-8060-17b49da45977",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4170,7 +4440,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "892ca809-e2b5-9a47-924a-71132bf6f902",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4199,7 +4471,9 @@
"severity": "Low",
"category": "Business Continuity",
"guid": "7e52d64d-8cc0-8548-a593-eb49ab45630d",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4228,7 +4502,9 @@
"severity": "High",
"category": "High Availability",
"guid": "84e44da6-8cd7-b349-b02c-c8bf72cf587c",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4257,7 +4533,9 @@
"severity": "High",
"category": "Scalability",
"guid": "4cbb7744-ff3d-0447-badb-baf068c95696",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4286,7 +4564,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "1b0d0893-bf0e-8f4c-9dc6-f18f145c1ecf",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4315,7 +4595,9 @@
"severity": "Low",
"category": "Business Continuity",
"guid": "e93fe702-e385-d741-ba37-1f1656482ecd",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4344,7 +4626,9 @@
"severity": "Medium",
"category": "Other Best Practices",
"guid": "b7e1d13f-54c9-1648-8a52-34c0abe8ce16",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4373,7 +4657,9 @@
"severity": "Low",
"category": "Business Continuity",
"guid": "a42297c4-7e4f-8b41-8d4b-114033263f0e",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4402,7 +4688,9 @@
"severity": "Low",
"category": "Disaster Recovery",
"guid": "932d45d6-b46d-e341-abfb-d97bce832f1f",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4431,7 +4719,9 @@
"severity": "High",
"category": "High Availability",
"guid": "12e9d852-5cdc-2743-bffe-ee21f2ef7781",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4460,7 +4750,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "a18d60f8-c98c-ba4e-ad6e-2fac72879df1",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4489,7 +4781,9 @@
"severity": "Low",
"category": "Disaster Recovery",
"guid": "c0e22580-3819-444d-8546-a80e4ed85c83",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4518,7 +4812,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "4fdb7112-4531-6f48-b60e-c917a6068d9b",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4547,7 +4843,9 @@
"severity": "High",
"category": "Other Best Practices",
"guid": "42aedaa8-6151-424d-b782-b8666c779969",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4576,7 +4874,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "20193ff9-dbcd-a74e-b197-71d7d9d3c1e6",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4605,7 +4905,9 @@
"severity": "High",
"category": "Scalability",
"guid": "397cdebb-9d6e-ab4f-83a1-8c481de0a3a7",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4634,7 +4936,9 @@
"severity": "High",
"category": "Scalability",
"guid": "5e722c4f-415a-9b4c-bd4c-96b74dce29ad",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4663,7 +4967,9 @@
"severity": "High",
"category": "High Availability",
"guid": "14310ba6-77ad-3641-a2db-57a2218b9bc7",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4692,7 +4998,9 @@
"severity": "High",
"category": "High Availability",
"guid": "b5af7e26-3939-1b48-8fba-f8d4a475c67a",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4729,7 +5037,9 @@
"severity": "High",
"category": "High Availability",
"guid": "8aa63c34-dd9d-49bd-9582-21ec310dfbdd",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -4762,7 +5072,9 @@
"severity": "Medium",
"category": "Personalized",
"guid": "028593be-956e-4736-bccf-074cb10b92f4",
- "source": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/Databricks/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4791,7 +5103,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "013ac34e-7c4b-425f-9e0c-216f0cc06181",
- "source": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceFile": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -4820,7 +5134,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "979ff8be-5f3a-4d8e-9aa3-407ecdd6d6f7",
- "source": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceFile": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This resource graph query will return all AVD host pools that does not have scheduled agent updates configured\nresources\n| where type =~ \"Microsoft.DesktopVirtualization/hostpools\"\n| where isnull(properties.agentUpdate)\n| project recommendationId = \"979ff8be-5f3a-4d8e-9aa3-407ecdd6d6f7\", name, id, tags, param1 = 'No scheduled agent updates'\n"
},
{
@@ -4849,7 +5165,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "939cb85c-102a-4e0a-ab82-5c92116d3778",
- "source": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceFile": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4878,7 +5196,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "38721758-2cc2-4d6b-b7b7-8b47dadbf7df",
- "source": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceFile": "azure-resources/DesktopVirtualization/hostPools/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -4907,7 +5227,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "499769ae-67c9-492e-9ca5-cfd4cece5209",
- "source": "azure-resources/DesktopVirtualization/scalingPlans/recommendations.yaml",
+ "sourceFile": "azure-resources/DesktopVirtualization/scalingPlans/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -4940,7 +5262,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "783c6c18-760b-4867-9ced-3010a0bc5aa3",
- "source": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceFile": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -4969,7 +5293,9 @@
"severity": "High",
"category": "High Availability",
"guid": "eeba3a49-fef0-481f-a471-7ff01139b474",
- "source": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceFile": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// list all IoT Hubs that are using the Free tier\nresources\n| where type =~ \"microsoft.devices/iothubs\" and\n tostring(sku.tier) =~ 'Free'\n| project recommendationId=\"eeba3a49-fef0-481f-a471-7ff01139b474\", name, id, tags, param1=strcat(\"tier:\", tostring(sku.tier))\n\n"
},
{
@@ -4998,7 +5324,9 @@
"severity": "High",
"category": "High Availability",
"guid": "214cbc46-747e-4354-af6e-6bf0054196a5",
- "source": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceFile": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -5035,7 +5363,9 @@
"severity": "High",
"category": "Scalability",
"guid": "b1e1378d-4572-4414-bebd-b8872a6d4d1c",
- "source": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceFile": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// list all IoT Hubs that do not have a linked IoT Hub Device Provisioning Service (DPS)\nresources\n| where type =~ \"microsoft.devices/iothubs\"\n| project id, iotHubName=tostring(properties.hostName), tags, resourceGroup\n| join kind=fullouter (\n resources\n | where type == \"microsoft.devices/provisioningservices\"\n | mv-expand iotHubs=properties.iotHubs\n | project iotHubName = tostring(iotHubs.name), dpsName = name, name=iotHubs.name\n) on iotHubName\n| where dpsName == ''\n| project recommendationId=\"b1e1378d-4572-4414-bebd-b8872a6d4d1c\", name=iotHubName, id, tags, param1='DPS:none'\n\n"
},
{
@@ -5064,7 +5394,9 @@
"severity": "High",
"category": "High Availability",
"guid": "02568a5d-335e-4e51-9f7c-fe2ada977300",
- "source": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceFile": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -5093,7 +5425,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "e7dbd21f-b27a-4b8c-a901-cedb1e6d8e1e",
- "source": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceFile": "azure-resources/Devices/iotHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// list all IoT Hubs that have the fallback route disabled\nresources\n| where type == \"microsoft.devices/iothubs\"\n| extend fallbackEnabled=properties.routing.fallbackRoute.isEnabled\n| where fallbackEnabled == false\n| project recommendationId=\"e7dbd21f-b27a-4b8c-a901-cedb1e6d8e1e\", name, id, tags, param1='FallbackRouteEnabled:false'\n\n"
},
{
@@ -5126,7 +5460,9 @@
"severity": "High",
"category": "High Availability",
"guid": "43663217-a1d3-844b-80ea-571a2ce37c6c",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query to find Azure Cosmos DB accounts that have less than 2 regions or less than 3 regions with strong consistency level\nResources\n| where type =~ 'Microsoft.DocumentDb/databaseAccounts'\n| where\n array_length(properties.locations) < 2 or\n (array_length(properties.locations) < 3 and properties.consistencyPolicy.defaultConsistencyLevel == 'Strong')\n| project recommendationId='43663217-a1d3-844b-80ea-571a2ce37c6c', name, id, tags\n\n"
},
{
@@ -5155,7 +5491,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "9cabded7-a1fc-6e4a-944b-d7dd98ea31a2",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query to list all Azure Cosmos DB accounts that do not have multiple write locations or automatic failover enabled\nResources\n| where type =~ 'Microsoft.DocumentDb/databaseAccounts'\n| where\n array_length(properties.locations) > 1 and\n tobool(properties.enableAutomaticFailover) == false and\n tobool(properties.enableMultipleWriteLocations) == false\n| project recommendationId='9cabded7-a1fc-6e4a-944b-d7dd98ea31a2', name, id, tags\n"
},
{
@@ -5188,7 +5526,9 @@
"severity": "High",
"category": "High Availability",
"guid": "9ce78192-74a0-104c-b5bb-9a443f941649",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query to find Azure Cosmos DB accounts that have multiple read locations but do not have multiple write locations enabled\nResources\n| where type =~ 'Microsoft.DocumentDb/databaseAccounts'\n| where\n array_length(properties.locations) > 1 and\n properties.enableMultipleWriteLocations == false\n| project recommendationId='9ce78192-74a0-104c-b5bb-9a443f941649', name, id, tags\n\n"
},
{
@@ -5217,7 +5557,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "e544520b-8505-7841-9e77-1f1974ee86ec",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Query all Azure Cosmos DB accounts that do not have continuous backup mode configured\nResources\n| where type =~ 'Microsoft.DocumentDb/databaseAccounts'\n| where\n properties.backupPolicy.type == 'Periodic' and\n properties.enableMultipleWriteLocations == false and\n properties.enableAnalyticalStorage == false\n| project recommendationId='e544520b-8505-7841-9e77-1f1974ee86ec', name, id, tags\n"
},
{
@@ -5246,7 +5588,9 @@
"severity": "High",
"category": "Scalability",
"guid": "c006604a-0d29-684c-99f0-9729cb40dac5",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -5275,7 +5619,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "7eb32cf9-9a42-1540-acf8-597cbba8a418",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -5304,7 +5650,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "fa6ac22f-0584-bb4b-80e4-80f4755d1a97",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -5333,7 +5681,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "deaea200-013c-414b-ac9f-bfa7a7fb13f0",
- "source": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/DocumentDB/databaseAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -5362,7 +5712,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "54c3191b-b535-1946-bba9-b754f44060f6",
- "source": "azure-resources/EventGrid/topics/recommendations.yaml",
+ "sourceFile": "azure-resources/EventGrid/topics/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -5391,7 +5743,9 @@
"severity": "Low",
"category": "Personalized",
"guid": "92162eb5-4323-3145-8a6c-525ce2f0700e",
- "source": "azure-resources/EventGrid/topics/recommendations.yaml",
+ "sourceFile": "azure-resources/EventGrid/topics/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -5420,7 +5774,9 @@
"severity": "Medium",
"category": "Security",
"guid": "b2069f64-4741-3d4a-a71d-50c8b03f5ab7",
- "source": "azure-resources/EventGrid/topics/recommendations.yaml",
+ "sourceFile": "azure-resources/EventGrid/topics/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all eventgrid services not protected by private endpoints.\nResources\n| where type contains \"eventgrid\"\n| where properties['publicNetworkAccess'] == \"Enabled\"\n| project recommendationId = \"b2069f64-4741-3d4a-a71d-50c8b03f5ab7\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -5449,7 +5805,9 @@
"severity": "High",
"category": "High Availability",
"guid": "84636c6c-b317-4722-b603-7b1ffc16384b",
- "source": "azure-resources/EventHub/namespaces/recommendations.yaml"
+ "sourceFile": "azure-resources/EventHub/namespaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024"
},
{
"description": "Enable auto-inflate on Event Hub Standard tier namespaces to automatically scale up TUs, meeting usage needs and preventing data ingress or egress throttle scenarios by adjusting to allowed rates.\n",
@@ -5477,7 +5835,9 @@
"severity": "High",
"category": "Scalability",
"guid": "fbfef3df-04a5-41b2-a8fd-b8541eb04956",
- "source": "azure-resources/EventHub/namespaces/recommendations.yaml",
+ "sourceFile": "azure-resources/EventHub/namespaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Event Hub namespace instances that are Standard tier and do not have Auto Inflate enabled\nresources\n| where type == \"microsoft.eventhub/namespaces\"\n| where sku.tier == \"Standard\"\n| where properties.isAutoInflateEnabled == \"false\"\n| project recommendationId = \"fbfef3df-04a5-41b2-a8fd-b8541eb04956\", name, id, tags, param1 = \"AutoInflateEnabled: False\"\n\n"
},
{
@@ -5514,7 +5874,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "be448849-0d7d-49ba-9c94-9573ee533d5d",
- "source": "azure-resources/Insights/activityLogAlerts/recommendations.yaml",
+ "sourceFile": "azure-resources/Insights/activityLogAlerts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -5547,7 +5909,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "9729c89d-8118-41b4-a39b-e12468fa872b",
- "source": "azure-resources/Insights/activityLogAlerts/recommendations.yaml",
+ "sourceFile": "azure-resources/Insights/activityLogAlerts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This resource graph query will return all subscriptions without Service Health alerts configured.\n\nresourcecontainers\n| where type == 'microsoft.resources/subscriptions'\n| project subscriptionAlerts=tostring(id),name,tags\n| join kind=leftouter (\n resources\n | where type == 'microsoft.insights/activitylogalerts' and properties.condition contains \"ServiceHealth\"\n | extend subscriptions = properties.scopes\n | project subscriptions\n | mv-expand subscriptions\n | project subscriptionAlerts = tostring(subscriptions)\n) on subscriptionAlerts\n| where isempty(subscriptionAlerts1)\n| project-away subscriptionAlerts1\n| project recommendationId = \"9729c89d-8118-41b4-a39b-e12468fa872b\",id=subscriptionAlerts,name,tags\n\n"
},
{
@@ -5576,7 +5940,9 @@
"severity": "Medium",
"category": "Service Upgrade and Retirement",
"guid": "dac421ec-2832-4c37-839e-b6dc5a38f2fa",
- "source": "azure-resources/Insights/components/recommendations.yaml",
+ "sourceFile": "azure-resources/Insights/components/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph query\n// Filters Application Insights resources with \u2018Classic\u2019 deployment type\nresources\n| where type =~ \"microsoft.insights/components\"\n| extend IngestionMode = properties.IngestionMode\n| where IngestionMode =~ 'ApplicationInsights'\n| project recommendationId= \"dac421ec-2832-4c37-839e-b6dc5a38f2fa\", name, id, tags, param1=\"ApplicationInsightsDeploymentType: Classic\"\n\n"
},
{
@@ -5605,7 +5971,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "1cca00d2-d9ab-8e42-a788-5d40f49405cb",
- "source": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Key Vaults that do not have soft delete enabled.\nresources\n| where type == \"microsoft.keyvault/vaults\"\n| where isnull(properties.enableSoftDelete) or properties.enableSoftDelete != \"true\"\n| project recommendationId = \"1cca00d2-d9ab-8e42-a788-5d40f49405cb\", name, id, tags, param1 = \"EnableSoftDelete: Disabled\"\n\n"
},
{
@@ -5634,7 +6002,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "70fcfe6d-00e9-5544-a63a-fff42b9f2edb",
- "source": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This resource graph query will return all Key Vaults that do not have Purge Protection enabled.\nresources\n| where type == \"microsoft.keyvault/vaults\"\n| where isnull(properties.enablePurgeProtection) or properties.enablePurgeProtection != \"true\"\n| project recommendationId = \"70fcfe6d-00e9-5544-a63a-fff42b9f2edb\", name, id, tags, param1 = \"EnablePurgeProtection: Disabled\"\n\n"
},
{
@@ -5663,7 +6033,9 @@
"severity": "Medium",
"category": "Security",
"guid": "00c3d2b0-ea6e-4c4b-89be-b78a35caeb51",
- "source": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This resource graph query will return all Key Vaults that does not have a Private Endpoint Connection or where a private endpoint exists but public access is enabled\n\nresources\n| where type == \"microsoft.keyvault/vaults\"\n| where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != (\"Succeeded\") or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled')\n| extend param1 = strcat('Private Endpoint: ', iif(isnotnull(properties.privateEndpointConnections),split(properties.privateEndpointConnections[0].properties.privateEndpoint.id,'/')[8],'No Private Endpoint'))\n| extend param2 = strcat('Access: ', iif(properties.publicNetworkAccess == 'Disabled', 'Public Access Disabled', iif(isnotnull(properties.networkAcls), 'NetworkACLs in place','Public Access Enabled')))\n| project recommendationId = \"00c3d2b0-ea6e-4c4b-89be-b78a35caeb51\", name, id, tags, param1, param2\n\n"
},
{
@@ -5692,7 +6064,9 @@
"severity": "High",
"category": "Governance",
"guid": "e7091145-3642-bd41-bb58-66502e64d2cd",
- "source": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -5721,7 +6095,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "1dc0821d-4f14-7644-bab4-ba208ff5f7fa",
- "source": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/KeyVault/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -5750,7 +6126,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "af426a99-62a6-6b4c-9662-42d220b413b8",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -5779,7 +6157,9 @@
"severity": "High",
"category": "Scalability",
"guid": "ab984130-c57b-6c4a-8d04-6723b4e1bdb6",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Azure NetApp Files volumes without standard network features.\nresources\n| where type =~ \"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n| where properties.networkFeatures != \"Standard\"\n| project recommendationId = \"ab984130-c57b-6c4a-8d04-6723b4e1bdb6\", name, id, tags\n\n"
},
{
@@ -5808,7 +6188,9 @@
"severity": "High",
"category": "High Availability",
"guid": "47d100a5-7f85-5742-967a-67eb5081240a",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Azure NetApp Files volumes without an availability zone defined.\nResources\n| where type =~ \"Microsoft.NetApp/netAppAccounts/capacityPools/volumes\"\n| where array_length(zones) == 0 or isnull(zones)\n| project recommendationId = \"47d100a5-7f85-5742-967a-67eb5081240a\", name, id, tags\n\n"
},
{
@@ -5837,7 +6219,9 @@
"severity": "High",
"category": "Other Best Practices",
"guid": "8bb690e8-64d5-4838-8703-9ee3dbac688f",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -5866,7 +6250,9 @@
"severity": "High",
"category": "High Availability",
"guid": "72827434-c773-4345-9493-34848ddf5803",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Azure NetApp Files volumes without a snapshot policy defined.\nresources\n|\u00a0where\u00a0type\u00a0==\u00a0\"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n| where properties.dataProtection.snapshot.snapshotPolicyId == \"\"\n| project recommendationId = \"72827434-c773-4345-9493-34848ddf5803\", name, id, tags\n\n"
},
{
@@ -5895,7 +6281,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "b2fb3e60-97ec-e34d-af29-b16a0d61c2ac",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Azure NetApp Files volumes without a backup policy defined.\nresources\n| where type == \"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n| where properties.dataProtection.backup.backupPolicyId == \"\"\n| project recommendationId = \"b2fb3e60-97ec-e34d-af29-b16a0d61c2ac\", name, id, tags\n"
},
{
@@ -5924,7 +6312,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "e30317d2-c502-4dfe-a2d3-0a737cc79545",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Azure NetApp Files volumes without cross-region replication.\nresources\n|\u00a0where\u00a0type\u00a0==\u00a0\"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n|\u00a0extend\u00a0remoteVolumeRegion\u00a0=\u00a0properties.dataProtection.replication.remoteVolumeRegion\n|\u00a0extend\u00a0volumeType\u00a0=\u00a0properties.volumeType\n|\u00a0extend\u00a0replicationType\u00a0=\u00a0iff((remoteVolumeRegion\u00a0==\u00a0location),\u00a0\"CZR\",\u00a0iff((remoteVolumeRegion\u00a0==\u00a0\"\"),\"n/a\",\"CRR\"))\n| where replicationType != \"CRR\" and volumeType != \"DataProtection\"\n| project recommendationId = \"e30317d2-c502-4dfe-a2d3-0a737cc79545\", name, id, tags\n\n"
},
{
@@ -5953,7 +6343,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "e3d742e1-dacd-9b48-b6b1-510ec9f87c96",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Azure NetApp Files volumes without cross-zone replication.\nresources\n|\u00a0where\u00a0type\u00a0==\u00a0\"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n|\u00a0extend\u00a0remoteVolumeRegion\u00a0=\u00a0properties.dataProtection.replication.remoteVolumeRegion\n|\u00a0extend\u00a0volumeType\u00a0=\u00a0properties.volumeType\n|\u00a0extend\u00a0replicationType\u00a0=\u00a0iff((remoteVolumeRegion\u00a0==\u00a0location),\u00a0\"CZR\",\u00a0iff((remoteVolumeRegion\u00a0==\u00a0\"\"),\"n/a\",\"CRR\"))\n| where replicationType != \"CZR\" and volumeType != \"DataProtection\"\n| project recommendationId = \"e3d742e1-dacd-9b48-b6b1-510ec9f87c96\", name, id, tags\n\n"
},
{
@@ -5982,7 +6374,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "2f579fc9-e599-0d44-8b97-254f50ae04d8",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6015,7 +6409,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "687ae58f-517f-ca43-90fe-922497e61283",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6060,7 +6456,9 @@
"severity": "Medium",
"category": "Security",
"guid": "cfa2244b-5436-47de-8287-b217875d3b0a",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6089,7 +6487,9 @@
"severity": "High",
"category": "High Availability",
"guid": "d1e7ccc3-e6c1-40e9-a36e-fd134711c808",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6118,7 +6518,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "60f36f9b-fac9-4160-bbf5-57af04da4f53",
- "source": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/NetApp/netAppAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6147,7 +6549,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "823b0cff-05c0-2e4e-a1e7-9965e1cfa16f",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all Application Gateways that do not have autoscale enabled or have a min capacity of 1\nresources\n| where type =~ \"microsoft.network/applicationGateways\"\n| where isnull(properties.autoscaleConfiguration) or properties.autoscaleConfiguration.minCapacity <= 1\n| project recommendationId = \"823b0cff-05c0-2e4e-a1e7-9965e1cfa16f\", name, id, tags, param1 = \"autoScaleConfiguration: isNull or MinCapacity <= 1\"\n| order by id asc\n\n\n"
},
{
@@ -6192,7 +6596,9 @@
"severity": "High",
"category": "Security",
"guid": "233a7008-71e9-e745-923e-1a1c7a0b92f3",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// You can use the following Azure Resource Graph query to check if an HTTP rule is using an SSL certificate or is using Azure Key Vault to store the certificates\nresources\n| where type =~ \"microsoft.network/applicationGateways\"\n| mv-expand frontendPorts = properties.frontendPorts\n| mv-expand httpListeners = properties.httpListeners\n| where isnull(parse_json(httpListeners.properties.sslCertificate))\n| project recommendationId=\"233a7008-71e9-e745-923e-1a1c7a0b92f3\", name, id, tags, param1=strcat(\"frontendPort: \", frontendPorts.properties.port), param2=\"tls: false\"\n\n"
},
{
@@ -6225,7 +6631,9 @@
"severity": "Low",
"category": "Security",
"guid": "8d9223c4-730d-ca47-af88-a9a024c37270",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all Application Gateways that do not have WAF enabled\nResources\n| where type =~ \"microsoft.network/applicationGateways\"\n| where properties.firewallpolicy != \"\"\n| project recommendationId = \"8d9223c4-730d-ca47-af88-a9a024c37270\", name, id, tags, param1 = \"webApplicationFirewallConfiguration: isNull\"\n| order by id asc\n\n\n"
},
{
@@ -6262,7 +6670,9 @@
"severity": "High",
"category": "Scalability",
"guid": "7893f0b3-8622-1d47-beed-4b50a19f7895",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Get all Application Gateways, which are using the deprecated V1 SKU\nresources\n| where type =~ 'microsoft.network/applicationgateways'\n| extend tier = properties.sku.tier\n| where tier == 'Standard' or tier == 'WAF'\n| project recommendationId = \"7893f0b3-8622-1d47-beed-4b50a19f7895\", name, id, tags\n\n"
},
{
@@ -6295,7 +6705,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "5d035919-898d-a047-8d5d-454e199692e5",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6328,7 +6740,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "847a8d88-21c4-bc48-a94e-562206edd767",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Application Gateways are not using health probes to monitor the availability of the backend systems\nresources\n| where type =~ \"microsoft.network/applicationGateways\"\n| where array_length(properties.probes) == 0\n| project recommendationId=\"847a8d88-21c4-bc48-a94e-562206edd767\", name, id, tags, param1=\"customHealthProbeUsed: false\"\n\n"
},
{
@@ -6361,7 +6775,9 @@
"severity": "High",
"category": "High Availability",
"guid": "c9c00f2a-3888-714b-a72b-b4c9e8fcffb2",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// list Application Gateways that are not configured to use at least 2 Availability Zones\nresources\n| where type =~ \"microsoft.network/applicationGateways\"\n| where isnull(zones) or array_length(zones) < 2\n| extend zoneValue = iff((isnull(zones)), \"null\", zones)\n| project recommendationId = \"c9c00f2a-3888-714b-a72b-b4c9e8fcffb2\", name, id, tags, param1=\"Zones: No Zone or Zonal\", param2=strcat(\"Zones value: \", zoneValue )\n\n"
},
{
@@ -6394,7 +6810,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "10f02bc6-e2e7-004d-a2c2-f9bf9f16b915",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will check if connection draining is enabled\nresources\n| where type =~ \"microsoft.network/applicationGateways\"\n| mv-expand backendHttpSettings = properties.backendHttpSettingsCollection\n| extend connectionDrainingEnabled = backendHttpSettings.properties.connectionDraining.enabled\n| where connectionDrainingEnabled != true\n| extend backendPoolName = backendHttpSettings.name\n| project recommendationId = \"10f02bc6-e2e7-004d-a2c2-f9bf9f16b915\", name, id, tags, param1 = \"connectionDraining: Disabled\", param2 = strcat(\"backendSettingsName: \", backendPoolName)\n\n"
},
{
@@ -6423,7 +6841,9 @@
"severity": "High",
"category": "Other Best Practices",
"guid": "8364fd0a-7c0e-e240-9d95-4bf965aec243",
- "source": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/applicationGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will validate the subnet id for an appGW ends with a /24\n\nresources\n| where type =~ 'Microsoft.Network/applicationGateways'\n| extend subnetid = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id)\n| join kind=leftouter(resources\n | where type == \"microsoft.network/virtualnetworks\"\n | mv-expand properties.subnets\n | extend subnetid = tostring(properties_subnets.id)\n | extend addressprefix = tostring(properties_subnets.properties.addressPrefix)\n | project subnetid, addressprefix) on subnetid\n| where addressprefix !endswith '/24'\n| project recommendationId = \"8364fd0a-7c0e-e240-9d95-4bf965aec243\", name, id, tags, param1 = strcat('AppGW subnet prefix: ', addressprefix)\n\n"
},
{
@@ -6456,7 +6876,9 @@
"severity": "High",
"category": "High Availability",
"guid": "c72b7fee-1fa0-5b4b-98e5-54bcae95bb74",
- "source": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// List all Azure Firewalls that are not configured with multiple availability zones or deployed without a zone\nresources\n| where type == 'microsoft.network/azurefirewalls'\n| where array_length(zones) <= 1 or isnull(zones)\n| where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id)\n| project recommendationId = \"c72b7fee-1fa0-5b4b-98e5-54bcae95bb74\", name, id, tags, param1=\"multipleZones:false\"\n\n"
},
{
@@ -6489,7 +6911,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "3c8fa7c6-6b78-a24a-a63f-348a7c71acb9",
- "source": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// List all Azure Firewalls resources in-scope, along with any metrics associated to Azure Monitor alert rules, that are not fully configured.\nresources\n| where type == \"microsoft.network/azurefirewalls\"\n| project firewallId = tolower(id), name, tags\n| join kind = leftouter (\n resources\n | where type == \"microsoft.insights/metricalerts\"\n | mv-expand properties.scopes\n | mv-expand properties.criteria.allOf\n | where properties_scopes contains \"azureFirewalls\"\n | project metricId = tolower(properties_scopes), monitoredMetric = properties_criteria_allOf.metricName, tags\n | summarize monitoredMetrics = make_list(monitoredMetric) by tostring(metricId)\n | project\n metricId,\n monitoredMetrics,\n allAlertsConfigured = monitoredMetrics contains(\"FirewallHealth\") and monitoredMetrics contains (\"Throughput\") and monitoredMetrics contains (\"SNATPortUtilization\")\n) on $left.firewallId == $right.metricId\n| extend alertsNotFullyConfigured = isnull(allAlertsConfigured) or not(allAlertsConfigured)\n| where alertsNotFullyConfigured\n| project recommendationId = \"c8fa7c6-6b78-a24a-a63f-348a7c71acb9\", name, id = firewallId, tags, param1 = strcat(\"MetricsAlerts:\", monitoredMetrics)\n\n"
},
{
@@ -6518,7 +6942,9 @@
"severity": "High",
"category": "Security",
"guid": "1b2dbf4a-8a0b-5e4b-8f4e-3f758188910d",
- "source": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// List all in-scope Azure Firewall resources, where the VNet is not associated to a DDoS Protection Plan\nresources\n| where type =~ \"Microsoft.Network/azureFirewalls\"\n| where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id)\n| mv-expand ipConfig = properties.ipConfigurations\n| project\n name,\n firewallId = id,\n tags,\n vNetName = split(ipConfig.properties.subnet.id, \"/\", 8)[0],\n vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, \"/subnet\")))\n| join kind=fullouter (\n resources\n | where type =~ \"Microsoft.Network/ddosProtectionPlans\"\n | mv-expand vNet = properties.virtualNetworks\n | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id)\n )\n on vNetId\n| where isempty(ddosProtectionPlanId)\n| project recommendationId = \"1b2dbf4a-8a0b-5e4b-8f4e-3f758188910d\", name, id = firewallId, tags, param1 = strcat(\"vNet: \", vNetName), param2 = \"ddosProtection: Disabled\"\n"
},
{
@@ -6547,7 +6973,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "3a63560a-1ed3-6140-acd1-d1d23f9a2e12",
- "source": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6576,7 +7004,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "d2e4a38e-2307-4299-a217-4c0cebc9a7f6",
- "source": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under development\n\n"
},
{
@@ -6609,7 +7039,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "8faace2d-a36e-425c-aa58-2ad99e3e0b7a",
- "source": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/azureFirewalls/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under development\n\n"
},
{
@@ -6638,7 +7070,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "f6a14b32-a727-4ace-b5fa-7b1c6bdff402",
- "source": "azure-resources/Network/connections/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/connections/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6667,7 +7101,9 @@
"severity": "High",
"category": "High Availability",
"guid": "a5f3a4bd-4cf1-4196-a3cb-f5a0876198b2",
- "source": "azure-resources/Network/connections/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/connections/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6696,7 +7132,9 @@
"severity": "Medium",
"category": "Security",
"guid": "ae054bf2-aefa-cf4a-8282-741194cef8da",
- "source": "azure-resources/Network/ddosProtectionPlans/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/ddosProtectionPlans/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6725,7 +7163,9 @@
"severity": "High",
"category": "High Availability",
"guid": "4d703025-dafc-f840-a183-5dc440456134",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -6758,7 +7198,9 @@
"severity": "High",
"category": "High Availability",
"guid": "0e19cc41-8274-1342-b0db-0e4146eacef8",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6787,7 +7229,9 @@
"severity": "High",
"category": "High Availability",
"guid": "f06a2bbe-5839-d447-9f39-fc3d20562d88",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6816,7 +7260,9 @@
"severity": "High",
"category": "High Availability",
"guid": "2a5bf650-586d-db4c-a292-d922be7d3e0e",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -6845,7 +7291,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "9771a435-d031-814e-9827-9b5fdafc0f87",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6874,7 +7322,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "26cb547f-aabc-dc40-be02-d0a9b6b04b1a",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6903,7 +7353,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "f902cf86-2b53-2942-abc2-781f4fb62be6",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -6932,9 +7384,73 @@
"severity": "Medium",
"category": "Scalability",
"guid": "d40c769d-2f08-4980-8d8f-a386946276e6",
- "source": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRouteCircuits/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all the ExpressRoute circuits (Direct Based) that have Direct Port Rate Limiting disabled\nresources\n| where type =~ \"microsoft.network/expressroutecircuits\"\n| where properties.expressRoutePort != \"\" or isnotnull(properties.expressRoutePort)\n| where properties.enableDirectPortRateLimit == false\n| project recommendationId = \"d40c769d-2f08-4980-8d8f-a386946276e6\", name, id, tags, param1=strcat(\"enableDirectPortRateLimit: \",properties.enableDirectPortRateLimit)\n"
},
+ {
+ "description": "To increase reliability, it's advised that each v-Hub's ExpressRoute gateway connects to at least two circuits, with each circuit originating from a different peering location than the other, ensuring diverse connectivity paths for enhanced resilience.|",
+ "aprlGuid": "9987c813-d687-4163-a511-95f31bc5e536",
+ "recommendationTypeId": null,
+ "recommendationControl": "High Availability",
+ "recommendationImpact": "High",
+ "recommendationResourceType": "Microsoft.Network/expressRouteGateways",
+ "recommendationMetadataState": "Active",
+ "longDescription": "To increase reliability, it's advised that each v-Hub's ExpressRoute gateway connects to at least two circuits, with each circuit originating from a different peering location than the other, ensuring diverse connectivity paths for enhanced resilience.|",
+ "potentialBenefits": "Enhance resiliency for Azure Service",
+ "pgVerified": false,
+ "publishedToLearn": false,
+ "publishedToAdvisor": false,
+ "automationAvailable": false,
+ "tags": null,
+ "learnMoreLink": [
+ {
+ "name": "Designing for disaster recovery with ExpressRoute private peering",
+ "url": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering"
+ }
+ ],
+ "service": "Microsoft.Network/expressRouteGateways",
+ "text": "Connect v-Hub's ExpressRoute gateway to circuits from diverse peering locations for resilience",
+ "severity": "High",
+ "category": "High Availability",
+ "guid": "9987c813-d687-4163-a511-95f31bc5e536",
+ "sourceFile": "azure-resources/Network/expressRouteGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
+ "graph": "// under-development\n"
+ },
+ {
+ "description": "Set up monitoring and alerts for Virtual WAN Express Route Gateway. Create alert rule for ensuring promptly response to critical events such as exceeding packets per second, exceeding BGP routes prefixes, Gateway overutilization and high frequency in route changes.",
+ "aprlGuid": "17e8d380-e4b4-41a1-9b37-2e4df9fd5125",
+ "recommendationTypeId": null,
+ "recommendationControl": "Monitoring and Alerting",
+ "recommendationImpact": "High",
+ "recommendationResourceType": "Microsoft.Network/expressRouteGateways",
+ "recommendationMetadataState": "Active",
+ "longDescription": "Set up monitoring and alerts for Virtual WAN Express Route Gateway. Create alert rule for ensuring promptly response to critical events such as exceeding packets per second, exceeding BGP routes prefixes, Gateway overutilization and high frequency in route changes.",
+ "potentialBenefits": "Detection and mitigation to avoid disruptions.",
+ "pgVerified": false,
+ "publishedToLearn": false,
+ "publishedToAdvisor": false,
+ "automationAvailable": false,
+ "tags": null,
+ "learnMoreLink": [
+ {
+ "name": "Virtual WAN Monitoring Best Practices",
+ "url": "https://learn.microsoft.com/en-us/azure/virtual-wan/monitoring-best-practices#expressroute-gateway"
+ }
+ ],
+ "service": "Microsoft.Network/expressRouteGateways",
+ "text": "Monitor health for v-Hub's ExpressRoute gateway",
+ "severity": "High",
+ "category": "Monitoring and Alerting",
+ "guid": "17e8d380-e4b4-41a1-9b37-2e4df9fd5125",
+ "sourceFile": "azure-resources/Network/expressRouteGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
+ "graph": "// under-development\n"
+ },
{
"description": "In Azure ExpressRoute Direct, the \"Admin State\" indicates the administrative status of layer 1 links, showing if a link is enabled or disabled, effectively turning the physical port on or off.\n",
"aprlGuid": "60077378-7cb1-4b35-89bb-393884d9921d",
@@ -6961,7 +7477,9 @@
"severity": "High",
"category": "High Availability",
"guid": "60077378-7cb1-4b35-89bb-393884d9921d",
- "source": "azure-resources/Network/expressRoutePorts/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRoutePorts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Express Route Directs that do not have Admin State of both Links Enabled\nresources\n| where type == \"microsoft.network/expressrouteports\"\n| where properties['links'][0]['properties']['adminState'] == \"Disabled\" or properties['links'][1]['properties']['adminState'] == \"Disabled\"\n| project recommendationId = \"60077378-7cb1-4b35-89bb-393884d9921d\", name, id, tags, param1 = strcat(\"Link1AdminState: \", properties['links'][0]['properties']['adminState']), param2 = strcat(\"Link2AdminState: \", properties['links'][1]['properties']['adminState'])\n\n"
},
{
@@ -6990,7 +7508,9 @@
"severity": "High",
"category": "Scalability",
"guid": "0bee356b-7348-4799-8cab-0c71ffe13018",
- "source": "azure-resources/Network/expressRoutePorts/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRoutePorts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Express Route Directs that are over subscribed\nresources\n| where type == \"microsoft.network/expressrouteports\"\n| where toint(properties['provisionedBandwidthInGbps']) > toint(properties['bandwidthInGbps'])\n| project recommendationId = \"0bee356b-7348-4799-8cab-0c71ffe13018\", name, id, tags, param1 = strcat(\"provisionedBandwidthInGbps: \", properties['provisionedBandwidthInGbps']), param2 = strcat(\"bandwidthInGbps: \", properties['bandwidthInGbps'])\n\n"
},
{
@@ -7019,7 +7539,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "55815823-d588-4cb7-a5b8-ae581837356e",
- "source": "azure-resources/Network/expressRoutePorts/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/expressRoutePorts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n"
},
{
@@ -7060,7 +7582,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "d0cfe47f-686b-5043-bf83-5a3868acb80a",
- "source": "azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -7093,7 +7617,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "537b4d94-edd1-4041-b13d-8217dfa485f0",
- "source": "azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -7126,7 +7652,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "5357ae22-0f52-1a49-9fd4-1f00ace6add0",
- "source": "azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -7159,7 +7687,9 @@
"severity": "High",
"category": "High Availability",
"guid": "38c3bca1-97a1-eb42-8cd3-838b243f35ba",
- "source": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all LoadBalancers using Basic SKU\nresources\n| where type =~ 'Microsoft.Network/loadBalancers'\n| where sku.name == 'Basic'\n| project recommendationId = \"38c3bca1-97a1-eb42-8cd3-838b243f35ba\", name, id, tags, Param1=strcat(\"sku-tier: basic\")\n\n"
},
{
@@ -7188,7 +7718,9 @@
"severity": "High",
"category": "High Availability",
"guid": "6d82d042-6d61-ad49-86f0-6a5455398081",
- "source": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all LoadBalancers which only have 1 backend pool defined or only 1 VM in the backend pool\nresources\n| where type =~ 'Microsoft.Network/loadBalancers'\n| extend bep = properties.backendAddressPools\n| extend BackEndPools = array_length(bep)\n| where BackEndPools == 0\n| project recommendationId = \"6d82d042-6d61-ad49-86f0-6a5455398081\", name, id, Param1=\"backendPools\", Param2=toint(0), tags\n| union (resources\n | where type =~ 'Microsoft.Network/loadBalancers'\n | where sku.name == \"Standard\"\n | extend bep = properties.backendAddressPools\n | extend BackEndPools = toint(array_length(bep))\n | mv-expand bip = properties.backendAddressPools\n | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses)\n | where toint(BackendAddresses) <= 1\n | project recommendationId = \"6d82d042-6d61-ad49-86f0-6a5455398081\", name, id, tags, Param1=\"backendAddresses\", Param2=toint(BackendAddresses))\n| union (\n resources\n | where type =~ 'Microsoft.Network/loadBalancers'\n | where sku.name == \"Basic\"\n | mv-expand properties.backendAddressPools\n | extend backendPoolId = properties_backendAddressPools.id\n | project id, name, tags, tostring(backendPoolId), recommendationId = \"6d82d042-6d61-ad49-86f0-6a5455398081\", Param1=\"BackEndPools\"\n | join kind = leftouter (\n resources\n | where type =~ \"Microsoft.Network/networkInterfaces\"\n | mv-expand properties.ipConfigurations\n | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools\n | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id)\n | summarize poolMembers = count() by backendPoolId\n | project tostring(backendPoolId), poolMembers ) on backendPoolId\n | where toint(poolMembers) <= 1\n | extend BackendAddresses = poolMembers\n | project id, name, tags, recommendationId, Param1=\"backendAddresses\", Param2=toint(BackendAddresses))\n"
},
{
@@ -7217,7 +7749,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "8d319a05-677b-944f-b9b4-ca0fb42e883c",
- "source": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all LoadBalancers with Outbound rules configured\nresources\n| where type =~ 'Microsoft.Network/loadBalancers'\n| extend outboundRules = array_length(properties.outboundRules)\n| where outboundRules > 0\n| project recommendationId = \"8d319a05-677b-944f-b9b4-ca0fb42e883c\", name, id, tags, Param1 = \"outboundRules: >=1\"\n\n"
},
{
@@ -7246,7 +7780,9 @@
"severity": "High",
"category": "High Availability",
"guid": "621dbc78-3745-4d32-8eac-9e65b27b7512",
- "source": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all LoadBalancers with with regional or zonal public IP Addresses\nresources\n| where type == \"microsoft.network/loadbalancers\"\n| where tolower(sku.name) != 'basic'\n| mv-expand feIPconfigs = properties.frontendIPConfigurations\n| extend\n feConfigName = (feIPconfigs.name),\n PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id),\n PrivateIPZones = feIPconfigs.zones,\n PIPid = toupper(feIPconfigs.properties.publicIPAddress.id),\n JoinID = toupper(id)\n| where isnotempty(PrivateSubnetId)\n| where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2\n| project name, feConfigName, id\n| union (resources\n | where type == \"microsoft.network/loadbalancers\"\n | where tolower(sku.name) != 'basic'\n | mv-expand feIPconfigs = properties.frontendIPConfigurations\n | extend\n feConfigName = (feIPconfigs.name),\n PIPid = toupper(feIPconfigs.properties.publicIPAddress.id),\n JoinID = toupper(id)\n | where isnotempty(PIPid)\n | join kind=innerunique (\n resources\n | where type == \"microsoft.network/publicipaddresses\"\n | where isnull(zones) or array_length(zones) < 2\n | extend\n LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))),\n InnerID = toupper(id)\n ) on $left.PIPid == $right.InnerID)\n| project recommendationId = \"621dbc78-3745-4d32-8eac-9e65b27b7512\", name, id, tags, param1=\"Zones: No Zone or Zonal\", param2=strcat(\"Frontend IP Configuration:\", \" \", feConfigName)\n\n"
},
{
@@ -7275,7 +7811,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "e5f5fcea-f925-4578-8599-9a391e888a60",
- "source": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/loadBalancers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// List the load balancers which don't have health probe configured\nresources\n| where type =~ \"microsoft.network/loadbalancers\"\n| where array_length(properties.probes) == 0\n| project recommendationId=\"e5f5fcea-f925-4578-8599-9a391e888a60\", name, id, tags, param1=\"customHealthProbeUsed: false\"\n"
},
{
@@ -7308,7 +7846,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "4281631c-3d19-4994-8d96-084c2a51a534",
- "source": "azure-resources/Network/natGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/natGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7341,7 +7881,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "babf75d6-6407-4d90-b01e-5a1768e621f5",
- "source": "azure-resources/Network/natGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/natGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7370,7 +7912,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "419df1ea-336b-460a-b6b2-fefe2588fcef",
- "source": "azure-resources/Network/natGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/natGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7399,7 +7943,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "d2976d3e-294b-4b49-a1f0-c42566a3758f",
- "source": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7428,7 +7974,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "8bb4a57b-55e4-d24e-9c19-2679d8bc779f",
- "source": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Network Security Groups without alerts for modification configured.\nresources\n| where type =~ \"Microsoft.Network/networkSecurityGroups\"\n| project name, id, tags, lowerCaseNsgId = tolower(id)\n| join kind = leftouter (\n resources\n | where type =~ \"Microsoft.Insights/activityLogAlerts\" and properties.enabled == true\n | mv-expand scope = properties.scopes\n | where scope has \"Microsoft.Network/networkSecurityGroups\"\n | project alertName = name, conditionJson = dynamic_to_json(properties.condition.allOf), scope\n | where conditionJson has '\"Administrative\"' and (\n // Create or Update Network Security Group\n (conditionJson has '\"Microsoft.Network/networkSecurityGroups/write\"') or\n // All administrative operations\n (conditionJson !has '\"Microsoft.Network/networkSecurityGroups/write\"' and conditionJson !has '\"Microsoft.Network/networkSecurityGroups/delete\"' and conditionJson !has '\"Microsoft.Network/networkSecurityGroups/join/action\"')\n )\n | project lowerCaseNsgIdOfScope = tolower(scope)\n )\n on $left.lowerCaseNsgId == $right.lowerCaseNsgIdOfScope\n| where isempty(lowerCaseNsgIdOfScope)\n| project recommendationId = \"8bb4a57b-55e4-d24e-9c19-2679d8bc779f\", name, id, tags, param1 = \"ModificationAlert: Not configured/Disabled\"\n\n"
},
{
@@ -7457,7 +8005,9 @@
"severity": "Low",
"category": "Governance",
"guid": "52ac35e8-9c3e-f84d-8ce8-2fab955333d3",
- "source": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7486,7 +8036,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "da1a3c06-d1d5-a940-9a99-fcc05966fe7c",
- "source": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Network Security Groups without NSG Flow logs configured or disabled.\nresources\n| where type =~ \"Microsoft.Network/networkSecurityGroups\"\n| project name, id, tags, lowerCaseNsgId = tolower(id)\n| join kind = leftouter (\n resources\n | where type == \"microsoft.network/networkwatchers/flowlogs\" and properties.enabled == true\n | project flowLogName = name, lowerCaseTargetNsgId = tolower(properties.targetResourceId)\n )\n on $left.lowerCaseNsgId == $right.lowerCaseTargetNsgId\n| where isempty(lowerCaseTargetNsgId)\n| project recommendationId = \"da1a3c06-d1d5-a940-9a99-fcc05966fe7c\", name, id, tags, param1 = \"NSGFlowLog: Not configured/Disabled\"\n\n"
},
{
@@ -7515,7 +8067,9 @@
"severity": "Medium",
"category": "Security",
"guid": "8291c1fa-650c-b44b-b008-4deb7465919d",
- "source": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkSecurityGroups/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all NSGs that have NO security rules\nresources\n| where type =~ \"microsoft.network/networksecuritygroups\"\n| extend sr = string_size(properties.securityRules)\n| where sr <=2 or isnull(properties.securityRules)\n| project recommendationId = \"8291c1fa-650c-b44b-b008-4deb7465919d\", name, id\n\n"
},
{
@@ -7544,7 +8098,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "4e133bd0-8762-bc40-a95b-b29142427d73",
- "source": "azure-resources/Network/networkWatchers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkWatchers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all locations that do not have a Network Watcher deployed\nresources\n| where location != \"global\"\n| union (Resources\n | where type =~ \"microsoft.network/networkwatchers\")\n| summarize NetworkWatcherCount = countif(type =~ 'Microsoft.Network/networkWatchers') by location\n| where NetworkWatcherCount == 0\n| project recommendationId = \"4e133bd0-8762-bc40-a95b-b29142427d73\", name=location, id=\"n/a\", param1 = strcat(\"LocationMisingNetworkWatcher:\", location)\n\n"
},
{
@@ -7573,9 +8129,72 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "22a769ed-0ecb-8b49-bafe-8f52e6373d9c",
- "source": "azure-resources/Network/networkWatchers/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/networkWatchers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all Network Watcher Flow Logs that are not enabled or in a succeeded state\nresources\n| where type =~ \"microsoft.network/networkwatchers/flowlogs\" and isnotnull(properties)\n| extend targetResourceId = tostring(properties.targetResourceId)\n| extend status = iff(properties.enabled =~ 'true', \"Enabled\", \"Disabled\")\n| extend provisioningState = tostring(properties.provisioningState)\n| extend flowLogType = iff(properties.targetResourceId contains \"Microsoft.Network/virtualNetworks\", 'Virtual network', 'Network security group')\n| where provisioningState != \"Succeeded\" or status != \"Enabled\"\n| project recommendationId = \"22a769ed-0ecb-8b49-bafe-8f52e6373d9c\", name, id, tags, param1 = strcat(\"provisioningState:\", provisioningState), param2=strcat(\"Status:\", status), param3=strcat(\"targetResourceId:\",targetResourceId), param4=strcat(\"flowLogType:\",flowLogType)\n\n"
},
+ {
+ "description": "Improves monitoring for Azure and Hybrid connectivity\n",
+ "aprlGuid": "1e28bbc1-1eb7-486f-8d7f-93943f40219c",
+ "recommendationTypeId": null,
+ "recommendationControl": "Monitoring and Alerting",
+ "recommendationImpact": "High",
+ "recommendationResourceType": "Microsoft.Network/networkWatchers",
+ "recommendationMetadataState": "Active",
+ "longDescription": "Improves monitoring for Azure and Hybrid connectivity\n",
+ "potentialBenefits": "Improves monitoring for Azure and Hybrid connectivity",
+ "pgVerified": true,
+ "publishedToLearn": false,
+ "publishedToAdvisor": false,
+ "automationAvailable": "arg",
+ "tags": null,
+ "learnMoreLink": [
+ {
+ "name": "Connection monitor overview",
+ "url": "https://learn.microsoft.com/en-us/azure/network-watcher/connection-monitor-overview"
+ }
+ ],
+ "service": "Microsoft.Network/networkWatchers",
+ "text": "Configure Network Watcher Connection monitor",
+ "severity": "High",
+ "category": "Monitoring and Alerting",
+ "guid": "1e28bbc1-1eb7-486f-8d7f-93943f40219c",
+ "sourceFile": "azure-resources/Network/networkWatchers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024"
+ },
+ {
+ "description": "Set up monitoring and alerts for Point-to-Site VPN gateways. Create alert rule for ensuring promptly response to critical events such as Gateway overutilization, connection count limits and User VPN route limits.",
+ "aprlGuid": "fd43ea32-2ccf-49a8-ada4-9a78794e3ff1",
+ "recommendationTypeId": null,
+ "recommendationControl": "Monitoring and Alerting",
+ "recommendationImpact": "High",
+ "recommendationResourceType": "Microsoft.Network/p2sVpnGateways",
+ "recommendationMetadataState": "Active",
+ "longDescription": "Set up monitoring and alerts for Point-to-Site VPN gateways. Create alert rule for ensuring promptly response to critical events such as Gateway overutilization, connection count limits and User VPN route limits.",
+ "potentialBenefits": "Detection and mitigation to avoid disruptions.",
+ "pgVerified": false,
+ "publishedToLearn": false,
+ "publishedToAdvisor": false,
+ "automationAvailable": false,
+ "tags": null,
+ "learnMoreLink": [
+ {
+ "name": "Virtual WAN Monitoring Best Practices",
+ "url": "https://learn.microsoft.com/en-us/azure/virtual-wan/monitoring-best-practices#point-to-site-vpn-gateway"
+ }
+ ],
+ "service": "Microsoft.Network/p2sVpnGateways",
+ "text": "Monitor health for v-Hub's Point-to-Site VPN gateways",
+ "severity": "High",
+ "category": "Monitoring and Alerting",
+ "guid": "fd43ea32-2ccf-49a8-ada4-9a78794e3ff1",
+ "sourceFile": "azure-resources/Network/p2sVpnGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
+ "graph": "// under-development\n"
+ },
{
"description": "Private DNS zones and records are critical and their deletion can cause service outages. To protect against unauthorized or accidental changes, the Private DNS Zone Contributor role, a built-in role for managing these resources, should be assigned to specific users or groups.\n",
"aprlGuid": "2820f6d6-a23c-7a40-aec5-506f3bd1aeb6",
@@ -7602,7 +8221,9 @@
"severity": "Medium",
"category": "Security",
"guid": "2820f6d6-a23c-7a40-aec5-506f3bd1aeb6",
- "source": "azure-resources/Network/privateDnsZones/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/privateDnsZones/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7631,7 +8252,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "ab896e8c-49b9-2c44-adec-98339aff7821",
- "source": "azure-resources/Network/privateDnsZones/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/privateDnsZones/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7660,7 +8283,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "1e02335c-1f90-fd4e-a5a5-d359c7b22d70",
- "source": "azure-resources/Network/privateDnsZones/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/privateDnsZones/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7689,7 +8314,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "b89c9acc-0aba-fb44-9ff2-3dbfcf97dce7",
- "source": "azure-resources/Network/privateEndpoints/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/privateEndpoints/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all Private Endpoints that are not in a Succeeded state\nresources\n| where type =~ \"microsoft.network/privateendpoints\"\n| where (properties.provisioningState =~ \"Succeeded\" and (properties.privateLinkServiceConnections[0].properties.provisioningState =~ \"Succeeded\" or properties.manualPrivateLinkServiceConnections[0].properties.provisioningState =~ \"Succeeded\")) == false\n| project recommendationId = \"b89c9acc-0aba-fb44-9ff2-3dbfcf97dce7\", name, id, tags, param1 = strcat(\"provisioningState: \", tostring(properties.provisioningState)), param2 = strcat(\"provisioningState: \", tostring(properties.privateLinkServiceConnections[0].properties.provisioningState)), param3 = strcat(\"manualProvisioningState: \", tostring(properties.manualPrivateLinkServiceConnections[0].properties.provisioningState))\n"
},
{
@@ -7722,7 +8349,9 @@
"severity": "High",
"category": "High Availability",
"guid": "c63b81fb-7afc-894c-a840-91bb8a8dcfaf",
- "source": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph query\n// List public IP addresses that are not Zone-Redundant\nResources\n| where type =~ \"Microsoft.Network/publicIPAddresses\" and sku.tier =~ \"Regional\"\n| where isempty(zones) or array_length(zones) <= 1\n| extend az = case(isempty(zones), \"Non-zonal\", array_length(zones) <= 1, strcat(\"Zonal (\", strcat_array(zones, \",\"), \")\"), zones)\n| project recommendationId = \"c63b81fb-7afc-894c-a840-91bb8a8dcfaf\", name, id, tags, param1 = strcat(\"sku: \", sku.name), param2 = strcat(\"availabilityZone: \", az)\n\n"
},
{
@@ -7755,7 +8384,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "1adba190-5c4c-e646-8527-dd1b2a6d8b15",
- "source": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph query\n// Lists VMs with PIPs\nresources\n| where type =~ 'Microsoft.Network/publicIPAddresses'\n| where tostring(properties.ipConfiguration.id) contains \"microsoft.network/networkinterfaces\"\n| project recommendationId=\"1adba190-5c4c-e646-8527-dd1b2a6d8b15\", name, id, tags, param1=strcat(\"Migrate from instance IP to NAT Gateway\")\n\n"
},
{
@@ -7788,7 +8419,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "5cea1501-6fe4-4ec4-ac8f-f72320eb18d3",
- "source": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph query\n// List Basic SKU public IP addresses\nResources\n| where type =~ \"Microsoft.Network/publicIPAddresses\"\n| where sku.name =~ \"Basic\"\n| project recommendationId = \"5cea1501-6fe4-4ec4-ac8f-f72320eb18d3\", name, id, tags, param1 = strcat(\"sku: \", sku.name)\n\n"
},
{
@@ -7817,7 +8450,9 @@
"severity": "Medium",
"category": "Security",
"guid": "c4254c66-b8a5-47aa-82f6-e7d7fb418f47",
- "source": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/publicIPAddresses/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph query\n// Public IP addresses should have DDoS protection enabled\nresources\n| where type =~ 'Microsoft.Network/publicIPAddresses'\n| where properties.ddosSettings.protectionMode !in~ (\"Enabled\", \"VirtualNetworkInherited\")\n| project recommendationId=\"c4254c66-b8a5-47aa-82f6-e7d7fb418f47\", name, id, tags, param1=strcat(\"Apply either DDoS Network protection or DDoS IP Protrection to the public IP address.\")\n"
},
{
@@ -7846,7 +8481,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "23b2dfc7-7e5d-9443-9f62-980ca621b561",
- "source": "azure-resources/Network/routeTables/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/routeTables/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Route Tables without alerts for modification configured.\nresources\n| where type =~ \"Microsoft.Network/routeTables\"\n| project name, id, tags, lowerCaseRouteTableId = tolower(id)\n| join kind = leftouter (\n resources\n | where type =~ \"Microsoft.Insights/activityLogAlerts\" and properties.enabled == true\n | mv-expand scope = properties.scopes\n | where scope has \"Microsoft.Network/routeTables\"\n | project alertName = name, conditionJson = dynamic_to_json(properties.condition.allOf), scope\n | where conditionJson has '\"Administrative\"' and (\n // Create or Update Route Table\n (conditionJson has '\"Microsoft.Network/routeTables/write\"') or\n // All Administrative operations\n (conditionJson !has '\"Microsoft.Network/routeTables/write\"' and conditionJson !has '\"Microsoft.Network/routeTables/delete\"' and conditionJson !has '\"Microsoft.Network/routeTables/join/action\"')\n )\n | project lowerCaseRouteTableIdOfScope = tolower(scope)\n )\n on $left.lowerCaseRouteTableId == $right.lowerCaseRouteTableIdOfScope\n| where isempty(lowerCaseRouteTableIdOfScope)\n| project recommendationId = \"23b2dfc7-7e5d-9443-9f62-980ca621b561\", name, id, tags, param1 = \"ModificationAlert: Not configured/Disabled\"\n\n"
},
{
@@ -7875,7 +8512,9 @@
"severity": "Low",
"category": "Governance",
"guid": "89d1166a-1a20-0f46-acc8-3194387bf127",
- "source": "azure-resources/Network/routeTables/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/routeTables/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -7912,7 +8551,9 @@
"severity": "High",
"category": "High Availability",
"guid": "f05a3e6d-49db-2740-88e2-2b13706c1f67",
- "source": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find traffic manager profiles that have an endpoint monitor status of not 'Online'\nresources\n| where type == \"microsoft.network/trafficmanagerprofiles\"\n| mv-expand properties.endpoints\n| where properties_endpoints.properties.endpointMonitorStatus != \"Online\"\n| project recommendationId = \"f05a3e6d-49db-2740-88e2-2b13706c1f67\", name, id, tags, param1 = strcat('Profile name: ',properties_endpoints.name), param2 = strcat('endpointMonitorStatus: ', properties_endpoints.properties.endpointMonitorStatus)\n\n"
},
{
@@ -7941,7 +8582,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "5b422a7f-8caa-3d48-becb-511599e5bba9",
- "source": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find traffic manager profiles that have less than 2 endpoints\nresources\n| where type == \"microsoft.network/trafficmanagerprofiles\"\n| where array_length(properties.endpoints) < 2\n| project recommendationId = \"5b422a7f-8caa-3d48-becb-511599e5bba9\", name, id, tags, param1 = strcat('EndpointCount: ', array_length(properties.endpoints))\n\n"
},
{
@@ -7970,7 +8613,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "1ad9d7b7-9692-1441-a8f4-93792efbe97a",
- "source": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -8003,9 +8648,41 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "c31f76a0-48cd-9f44-aa43-99ee904db9bc",
- "source": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/trafficManagerProfiles/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Traffic Manager resources that are not confirgured for all-World access\nResources\n| where type == 'microsoft.network/trafficmanagerprofiles'\n| where properties.trafficRoutingMethod =~ \"Geographic\"\n| extend endpoints = properties.endpoints\n| mv-expand endpoint = endpoints\n| where endpoint.properties.geoMapping !contains \"WORLD\"\n| extend endpointName = endpoint.name\n| project recommendationId=\"c31f76a0-48cd-9f44-aa43-99ee904db9bc\", name, id, tags, param1=strcat(\"endpointName:\",endpointName), param2=strcat(\"GeoMapping:\", tostring(endpoint.properties.geoMapping))\n"
},
+ {
+ "description": "Set up monitoring and alerts for v-Hubs. Create alert rule for ensuring promptly response to changes in BGP status and Data processed by v-Hubs.",
+ "aprlGuid": "30ec8a5e-46de-4323-87e9-a7c56b72813b",
+ "recommendationTypeId": null,
+ "recommendationControl": "Monitoring and Alerting",
+ "recommendationImpact": "Medium",
+ "recommendationResourceType": "Microsoft.Network/virtualHubs",
+ "recommendationMetadataState": "Active",
+ "longDescription": "Set up monitoring and alerts for v-Hubs. Create alert rule for ensuring promptly response to changes in BGP status and Data processed by v-Hubs.",
+ "potentialBenefits": "Detection and mitigation to avoid disruptions.",
+ "pgVerified": false,
+ "publishedToLearn": false,
+ "publishedToAdvisor": false,
+ "automationAvailable": false,
+ "tags": null,
+ "learnMoreLink": [
+ {
+ "name": "Virtual WAN Monitoring Best Practices",
+ "url": "https://learn.microsoft.com/en-us/azure/virtual-wan/monitoring-best-practices#virtual-hub"
+ }
+ ],
+ "service": "Microsoft.Network/virtualHubs",
+ "text": "Monitor health for v-Hubs",
+ "severity": "Medium",
+ "category": "Monitoring and Alerting",
+ "guid": "30ec8a5e-46de-4323-87e9-a7c56b72813b",
+ "sourceFile": "azure-resources/Network/virtualHubs/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024"
+ },
{
"description": "To increase reliability, it's advised that each ExpressRoute gateway connects to at least two circuits, with each circuit originating from a different peering location than the other, ensuring diverse connectivity paths for enhanced resilience.\n",
"aprlGuid": "d37db635-157f-584d-9bce-4f6fc8c65ce5",
@@ -8032,7 +8709,9 @@
"severity": "High",
"category": "High Availability",
"guid": "d37db635-157f-584d-9bce-4f6fc8c65ce5",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of ExpressRoute Gateways that are not connected to two or more ExpressRoute Circuits. Baremetal circuits are excluded from consideration\n//This query assumes that the running entity has visibilty to the gateway, connection, and circuit scopes.\n//Start with a full list of gateways\n(resources\n| where type == \"microsoft.network/virtualnetworkgateways\"\n| where properties.gatewayType == \"ExpressRoute\"\n| extend exrGatewayId = tolower(tostring(id))\n| join kind=inner(\nresources\n| where type == \"microsoft.network/virtualnetworkgateways\"\n| where properties.gatewayType == \"ExpressRoute\"\n| extend exrGatewayId = tolower(tostring(id))\n| join kind=leftouter(\n//connections joined with circuit peer info\nresources\n| where type == \"microsoft.network/connections\"\n| extend connectionType = properties.connectionType\n| extend exrGatewayId = tolower(tostring(properties.virtualNetworkGateway1.id))\n| extend peerId = tolower(tostring(properties.peer.id))\n| extend connectionId = tolower(tostring(id))\n| where connectionType == \"ExpressRoute\"\n| join kind=leftouter(\n resources\n | where type == \"microsoft.network/expressroutecircuits\"\n //should this be location instead of peeringLocation\n | extend circuitId = tolower(tostring(id))\n | extend peeringLocation = tostring(properties.serviceProviderProperties.peeringLocation)\n | extend peerId = tolower(id)\n) on peerId ) on exrGatewayId\n//remove bare metal services connections/circuits\n| where not(isnotnull(connectionId) and isnull(sku1))\n//group by gateway ID's and peering locations\n| summarize by exrGatewayId, peeringLocation\n//summarize to connections with fewer than two unique connections\n| summarize connCount = count() by exrGatewayId\n| where connCount < 2) on exrGatewayId\n| project recommendationId = \"d37db635-157f-584d-9bce-4f6fc8c65ce5\", name, id, tags, param1 = \"twoOrMoreCircuitsConnectedFromDifferentPeeringLocations: false\")\n| union\n(\nresources\n| where type == \"microsoft.network/virtualnetworkgateways\"\n| where properties.gatewayType == \"ExpressRoute\"\n| extend exrGatewayId = tolower(tostring(id))\n| join kind=leftouter(\n//connections joined with circuit peer info\nresources\n| where type == \"microsoft.network/connections\"\n| extend connectionType = properties.connectionType\n| extend exrGatewayId = tolower(tostring(properties.virtualNetworkGateway1.id))\n| extend peerId = tolower(tostring(properties.peer.id))\n| extend connectionId = tolower(tostring(id))\n| where connectionType == \"ExpressRoute\") on exrGatewayId\n| where isnull(connectionType)\n| project recommendationId = \"d37db635-157f-584d-9bce-4f6fc8c65ce5\", name, id, tags, param1 = \"twoOrMoreCircuitsConnectedFromDifferentPeeringLocations: false\", param2 = \"noConnectionsOnGateway: true\"\n)\n\n"
},
{
@@ -8069,7 +8748,9 @@
"severity": "High",
"category": "High Availability",
"guid": "bbe668b7-eb5c-c746-8b82-70afdedf0cae",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// For all VNGs of type ExpressRoute, show any that do not have AZ in the SKU tier\nresources\n| where type =~ \"Microsoft.Network/virtualNetworkGateways\"\n| where properties.gatewayType == \"ExpressRoute\"\n| where properties.sku.tier !contains 'AZ'\n| project recommendationId = \"bbe668b7-eb5c-c746-8b82-70afdedf0cae\", name, id, tags, param1= strcat(\"sku-tier: \" , properties.sku.tier), param2=location\n| order by id asc\n\n"
},
{
@@ -8098,7 +8779,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "c0f23a92-d322-4d4d-97e9-a238b5e3bbb8",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -8131,7 +8814,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "1c34faa8-8b99-974c-adbf-71922eae943c",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n\n"
},
{
@@ -8160,7 +8845,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "194c14ac-0d7a-5a48-ae32-75fa450ee564",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -8189,7 +8876,9 @@
"severity": "High",
"category": "High Availability",
"guid": "3e115044-a3aa-433e-be01-ce17d67e50da",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Virtual Network Gateways without Maintenance Configurations\n\nresources\n| where type =~ \"Microsoft.Network/virtualNetworkGateways\"\n| extend resourceId = tolower(id)\n| join kind=leftouter (\n maintenanceresources\n | where type =~ \"Microsoft.Maintenance/configurationAssignments\"\n | project JsonData = parse_json(properties)\n | extend maintenanceConfigurationId = tolower(tostring(JsonData.maintenanceConfigurationId))\n | join kind=inner (\n resources\n | where type =~ \"Microsoft.Maintenance/maintenanceConfigurations\"\n | project maintenanceConfigurationId=tolower(id)\n ) on maintenanceConfigurationId\n | project maintenanceConfigurationId, resourceId=tolower(tostring(JsonData.resourceId))\n) on resourceId\n| where isempty(maintenanceConfigurationId)\n| project recommendationId = \"3e115044-a3aa-433e-be01-ce17d67e50da\", name, id, tags, param1= strcat(\"sku-tier: \" , properties.sku.tier), param2=location\n\n"
},
{
@@ -8226,7 +8915,9 @@
"severity": "High",
"category": "High Availability",
"guid": "5b1933a6-90e4-f642-a01f-e58594e5aab2",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// For all VNGs of type Vpn, show any that do not have AZ in the SKU tier\nresources\n| where type =~ \"Microsoft.Network/virtualNetworkGateways\"\n| where properties.gatewayType == \"Vpn\"\n| where properties.sku.tier !contains 'AZ'\n| project recommendationId = \"5b1933a6-90e4-f642-a01f-e58594e5aab2\", name, id, tags, param1= strcat(\"sku-tier: \" , properties.sku.tier), param2=location\n| order by id asc\n\n"
},
{
@@ -8259,7 +8950,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "281a2713-c0e0-3c48-b596-19f590c46671",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Identifies non-active-active VPN type virtual network gateways\nresources\n| where type =~ 'Microsoft.Network/virtualNetworkGateways'\n| where properties.gatewayType =~ \"vpn\"\n| extend gatewayType = properties.gatewayType, vpnType = properties.vpnType, connections = properties.connections, activeactive=properties.activeActive\n| where activeactive == false\n| project recommendationId = \"281a2713-c0e0-3c48-b596-19f590c46671\", name, id, tags\n\n\n"
},
{
@@ -8288,7 +8981,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "af11fc4c-c06c-4f4c-b98d-6eee6d5c4c70",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n\n"
},
{
@@ -8317,7 +9012,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "9eab120e-f6d3-ee49-ba0d-766562ce7df1",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -8350,7 +9047,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "9186dae0-7ddc-8f4b-bea5-55538cea4893",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n\n"
},
{
@@ -8379,7 +9078,9 @@
"severity": "High",
"category": "High Availability",
"guid": "4bae5a28-5cf4-40d9-bcf1-623d28f6d917",
- "source": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworkGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of zone-redundant Azure VPN gateways associated with non-zone-redundant Public IPs\nresources\n| where type =~ \"Microsoft.Network/virtualNetworkGateways\"\n| where properties.gatewayType == \"Vpn\"\n| where properties.sku.tier contains 'AZ'\n| mv-expand ipconfig = properties.ipConfigurations\n| extend pipId = tostring(ipconfig.properties.publicIPAddress.id)\n| join kind=inner (\n resources\n | where type == \"microsoft.network/publicipaddresses\"\n | where isnull(zones) or array_length(zones) < 3 )\n on $left.pipId == $right.id\n| project recommendationId = \"4bae5a28-5cf4-40d9-bcf1-623d28f6d917\", name, id, tags, param1 = strcat(\"PublicIpAddressName: \", name1), param2 = strcat (\"PublicIpAddressId: \",id1), param3 = strcat (\"PublicIpAddressTags: \",tags1)\n\n"
},
{
@@ -8420,7 +9121,9 @@
"severity": "Low",
"category": "Security",
"guid": "f0bf9ae6-25a5-974d-87d5-025abec73539",
- "source": "azure-resources/Network/virtualNetworks/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworks/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Subnets without NSG associated\nresources\n| where type =~ 'Microsoft.Network/virtualnetworks'\n| mv-expand subnets = properties.subnets\n| extend sn = string_size(subnets.properties.networkSecurityGroup)\n| where sn == 0 and subnets.name !in (\"GatewaySubnet\", \"AzureFirewallSubnet\", \"AzureFirewallManagementSubnet\", \"RouteServerSubnet\")\n| project recommendationId = \"f0bf9ae6-25a5-974d-87d5-025abec73539\", name, id, tags, param1 = strcat(\"SubnetName: \", subnets.name), param2 = \"NSG: False\"\n\n"
},
{
@@ -8449,7 +9152,9 @@
"severity": "High",
"category": "Security",
"guid": "69ea1185-19b7-de40-9da1-9e8493547a5c",
- "source": "azure-resources/Network/virtualNetworks/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworks/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find virtual networks without DDoS Protection\nresources\n| where type =~ 'Microsoft.Network/virtualNetworks'\n| where isnull(properties.enableDdosProtection) or properties.enableDdosProtection contains \"false\"\n| project recommendationId = \"69ea1185-19b7-de40-9da1-9e8493547a5c\", name, id, tags, param1 = strcat(\"EnableDdosProtection: \", properties.enableDdosProtection)\n\n"
},
{
@@ -8486,18 +9191,51 @@
"severity": "Medium",
"category": "Security",
"guid": "24ae3773-cc2c-3649-88de-c9788e25b463",
- "source": "azure-resources/Network/virtualNetworks/recommendations.yaml",
+ "sourceFile": "azure-resources/Network/virtualNetworks/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find Subnets with Service Endpoint enabled for services that offer Private Link\nresources\n| where type =~ 'Microsoft.Network/virtualnetworks'\n| mv-expand subnets = properties.subnets\n| extend se = array_length(subnets.properties.serviceEndpoints)\n| where se >= 1\n| project name, id, tags, subnets, serviceEndpoints=todynamic(subnets.properties.serviceEndpoints)\n| mv-expand serviceEndpoints\n| project name, id, tags, subnetName=subnets.name, serviceName=tostring(serviceEndpoints.service)\n| where serviceName in (parse_json('[\"Microsoft.CognitiveServices\",\"Microsoft.AzureCosmosDB\",\"Microsoft.DBforMariaDB\",\"Microsoft.DBforMySQL\",\"Microsoft.DBforPostgreSQL\",\"Microsoft.EventHub\",\"Microsoft.KeyVault\",\"Microsoft.ServiceBus\",\"Microsoft.Sql\", \"Microsoft.Storage\",\"Microsoft.StorageSync\",\"Microsoft.Synapse\",\"Microsoft.Web\"]'))\n| project recommendationId = \"24ae3773-cc2c-3649-88de-c9788e25b463\", name, id, tags, param1 = strcat(\"subnet=\", subnetName), param2=strcat(\"serviceName=\",serviceName), param3=\"ServiceEndpoints=true\"\n\n"
},
{
- "description": "ExpressRoute Traffic Collector samples network flows over ExpressRoute Direct circuits, sending flow logs to a Log Analytics workspace for analysis or export to visualization tools/SIEM.\n",
+ "description": "Set up monitoring and alerts for v-Hub's VPN Gateway. Create alert rule for ensuring promptly response to critical events such as packet drop counts, BGP status, Gateway overutilization.",
+ "aprlGuid": "f0d4f766-ac19-48c4-b228-4601cc038baa",
+ "recommendationTypeId": null,
+ "recommendationControl": "Monitoring and Alerting",
+ "recommendationImpact": "High",
+ "recommendationResourceType": "Microsoft.Network/vpnGateways",
+ "recommendationMetadataState": "Active",
+ "longDescription": "Set up monitoring and alerts for v-Hub's VPN Gateway. Create alert rule for ensuring promptly response to critical events such as packet drop counts, BGP status, Gateway overutilization.",
+ "potentialBenefits": "Detection and mitigation to avoid disruptions.",
+ "pgVerified": false,
+ "publishedToLearn": false,
+ "publishedToAdvisor": false,
+ "automationAvailable": false,
+ "tags": null,
+ "learnMoreLink": [
+ {
+ "name": "Virtual WAN Monitoring Best Practices",
+ "url": "https://learn.microsoft.com/en-us/azure/virtual-wan/monitoring-best-practices#virtual-wan-gateways"
+ }
+ ],
+ "service": "Microsoft.Network/vpnGateways",
+ "text": "Monitor gateway for Site-to-site v-Hub's VPN gateway",
+ "severity": "High",
+ "category": "Monitoring and Alerting",
+ "guid": "f0d4f766-ac19-48c4-b228-4601cc038baa",
+ "sourceFile": "azure-resources/Network/vpnGateways/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
+ "graph": "// under-development\n"
+ },
+ {
+ "description": "ExpressRoute Traffic Collector samples network flows over ExpressRoute Direct or Service-Provider based circuits, sending flow logs to a Log Analytics workspace for analysis or export to visualization tools/SIEM.\n",
"aprlGuid": "1ceea4b5-1d8b-4be0-9bbe-9594557be51a",
"recommendationTypeId": null,
"recommendationControl": "Monitoring and Alerting",
"recommendationImpact": "Medium",
"recommendationResourceType": "Microsoft.NetworkFunction/azureTrafficCollectors",
"recommendationMetadataState": "Active",
- "longDescription": "ExpressRoute Traffic Collector samples network flows over ExpressRoute Direct circuits, sending flow logs to a Log Analytics workspace for analysis or export to visualization tools/SIEM.\n",
+ "longDescription": "ExpressRoute Traffic Collector samples network flows over ExpressRoute Direct or Service-Provider based circuits, sending flow logs to a Log Analytics workspace for analysis or export to visualization tools/SIEM.\n",
"potentialBenefits": "Enhanced network flow analysis and DR readiness",
"pgVerified": true,
"publishedToLearn": false,
@@ -8511,11 +9249,13 @@
}
],
"service": "Microsoft.NetworkFunction/azureTrafficCollectors",
- "text": "Ensure ExpressRoute Traffic Collector is enabled and configured for ExpressRoute Direct circuits",
+ "text": "Ensure ExpressRoute Traffic Collector is enabled and configured for Direct or Provider circuits",
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "1ceea4b5-1d8b-4be0-9bbe-9594557be51a",
- "source": "azure-resources/NetworkFunction/azureTrafficCollectors/recommendations.yaml",
+ "sourceFile": "azure-resources/NetworkFunction/azureTrafficCollectors/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -8548,7 +9288,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "b36fd2ac-dd83-664a-ab48-ff7b8d3b189d",
- "source": "azure-resources/OperationalInsights/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/OperationalInsights/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -8581,7 +9323,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "4b77191c-cc3c-8c4e-844b-0f56d0927890",
- "source": "azure-resources/OperationalInsights/workspaces/recommendations.yaml",
+ "sourceFile": "azure-resources/OperationalInsights/workspaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -8610,7 +9354,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "e93bb813-b356-48f3-9bdf-a06a0a6ba039",
- "source": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -8639,7 +9385,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "17e877f7-3a89-4205-8a24-0670de54ddcd",
- "source": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all VMs where replication has been enabled but Test Failover was never performed\nrecoveryservicesresources\n| where type == \"microsoft.recoveryservices/vaults/replicationfabrics/replicationprotectioncontainers/replicationprotecteditems\"\n| where properties.providerSpecificDetails.dataSourceInfo.datasourceType == 'AzureVm' and isnull(properties.lastSuccessfulTestFailoverTime)\n| project recommendationId=\"17e877f7-3a89-4205-8a24-0670de54ddcd\" , name = properties.providerSpecificDetails.recoveryAzureVMName, id=properties.providerSpecificDetails.dataSourceInfo.resourceId\n\n"
},
{
@@ -8672,7 +9420,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "2912472d-0198-4bdc-aa90-37f145790edc",
- "source": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This Resource Graph query will return all Recovery services vault with Classic alerts enabled.\nresources\n| where type in~ ('microsoft.recoveryservices/vaults')\n| extend monitoringSettings = parse_json(properties).monitoringSettings\n| extend isUsingClassicAlerts = case(isnull(monitoringSettings),'Enabled',monitoringSettings.classicAlertSettings.alertsForCriticalOperations)\n| extend isUsingJobsAlerts = case(isnull(monitoringSettings), 'Enabled', monitoringSettings.azureMonitorAlertSettings.alertsForAllJobFailures)\n| where isUsingClassicAlerts == 'Enabled'\n| project recommendationId = \"2912472d-0198-4bdc-aa90-37f145790edc\", name, id, tags, param1=strcat(\"isUsingClassicAlerts: \", isUsingClassicAlerts), param2=strcat(\"isUsingJobsAlerts: \", isUsingJobsAlerts)\n\n"
},
{
@@ -8713,7 +9463,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "1549b91f-2ea0-4d4f-ba2a-4596becbe3de",
- "source": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Displays all recovery services vaults that do not have cross region restore enabled\nresources\n| where type =~ \"Microsoft.RecoveryServices/vaults\" and\n properties.redundancySettings.standardTierStorageRedundancy =~ \"GeoRedundant\" and\n properties.redundancySettings.crossRegionRestore !~ \"Enabled\"\n| extend\n param1 = strcat(\"CrossRegionRestore: \", properties.redundancySettings.crossRegionRestore),\n param2 = strcat(\"StorageReplicationType: \", properties.redundancySettings.standardTierStorageRedundancy)\n| project recommendationId = \"1549b91f-2ea0-4d4f-ba2a-4596becbe3de\", name, id, tags, param1, param2\n"
},
{
@@ -8742,7 +9494,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "9e39919b-78af-4a0b-b70f-c548dae97c25",
- "source": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceFile": "azure-resources/RecoveryServices/vaults/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Azure Recovery Services vaults that do not have soft delete enabled\nresources\n| where type == \"microsoft.recoveryservices/vaults\"\n| mv-expand issoftDelete=properties.securitySettings.softDeleteSettings.softDeleteState\n| where issoftDelete == 'Disabled'\n| project recommendationId = \"9e39919b-78af-4a0b-b70f-c548dae97c25\", name, id, tags, param1=strcat(\"Soft Delete: \",issoftDelete)\n"
},
{
@@ -8771,7 +9525,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "98bd7098-49d6-491b-86f1-b143d6b1a0ff",
- "source": "azure-resources/Resources/resourceGroups/recommendations.yaml",
+ "sourceFile": "azure-resources/Resources/resourceGroups/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure Resource Groups that have resources deployed in a region different than the Resource Group region\nresources\n| project id, name, tags, resourceGroup, location\n| where location != \"global\" // exclude global resources\n| where resourceGroup != \"networkwatcherrg\" // exclude networkwatcherrg\n| where split(id, \"/\", 3)[0] =~ \"resourceGroups\" // resource is in a resource group\n| extend resourceGroupId = strcat_array(array_slice(split(id, \"/\"),0,4), \"/\") // create resource group resource id\n| join (resourcecontainers | project containerid=id, containerlocation=location ) on $left.resourceGroupId == $right.['containerid'] // join to resourcecontainers table\n| where location != containerlocation\n| project recommendationId=\"98bd7098-49d6-491b-86f1-b143d6b1a0ff\", name, id, tags\n| order by id asc\n\n"
},
{
@@ -8808,7 +9564,9 @@
"severity": "High",
"category": "High Availability",
"guid": "20057905-262c-49fe-a9be-49f423afb359",
- "source": "azure-resources/ServiceBus/namespaces/recommendations.yaml",
+ "sourceFile": "azure-resources/ServiceBus/namespaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Returns Service Bus namespaces that do not have any availability zones enabled\nresources\n| where type =~ 'Microsoft.ServiceBus/namespaces'\n| where properties.zoneRedundant == 'false'\n| project recommendationId = \"20057905-262c-49fe-a9be-49f423afb359\", name, id, tags, param1=strcat(\"zoneRedundant: \", properties.zoneRedundant), param2=strcat(\"SKU: \", sku.name), param3=iff(tolower(sku.name) == 'premium', 'Move Service Bus namespace to a region that supports Availability Zones', 'Migrate to Premium SKU in a region that supports Availability Zones')\n\n"
},
{
@@ -8837,7 +9595,9 @@
"severity": "High",
"category": "High Availability",
"guid": "d810e3a8-600f-4be1-895b-1a93e61d37fd",
- "source": "azure-resources/ServiceBus/namespaces/recommendations.yaml",
+ "sourceFile": "azure-resources/ServiceBus/namespaces/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -8866,7 +9626,9 @@
"severity": "High",
"category": "High Availability",
"guid": "6a8b3db9-5773-413a-a127-4f7032f34bbd",
- "source": "azure-resources/SignalRService/signalR/recommendations.yaml",
+ "sourceFile": "azure-resources/SignalRService/signalR/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find SignalR instances that are not configured with the Premium tier\nresources\n| where type == \"microsoft.signalrservice/signalr\"\n| where sku.tier != \"Premium\"\n| project recommendationId = \"6a8b3db9-5773-413a-a127-4f7032f34bbd\", name, id, tags, param1 = \"AvailabilityZones: Single Zone\"\n| order by id asc\n\n"
},
{
@@ -8895,7 +9657,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "74c2491d-048b-0041-a140-935960220e20",
- "source": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceFile": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of SQL databases that are not part of Geo Replication.\nresources\n| where type == \"microsoft.sql/servers/databases\"\n| summarize secondaryTypeCount = countif(isnotempty(properties.secondaryType)) by name\n| where secondaryTypeCount == 0\n| join kind=inner (\n Resources\n | where type == \"microsoft.sql/servers/databases\"\n) on name\n| extend param1 = \"Not part of Geo Replication\"\n| project recommendationId = \"74c2491d-048b-0041-a140-935960220e20\", name, id, tags, param1\n"
},
{
@@ -8928,7 +9692,9 @@
"severity": "High",
"category": "Disaster Recovery",
"guid": "943c168a-2ec2-a94c-8015-85732a1b4859",
- "source": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceFile": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of SQL databases that are not configured to use a failover-group.\nresources\n| where type =~'microsoft.sql/servers/databases'\n| where isnull(properties['failoverGroupId'])\n| project recommendationId = \"943c168a-2ec2-a94c-8015-85732a1b4859\", name, id, tags, param1= strcat(\"databaseId=\", properties['databaseId'])\n"
},
{
@@ -8957,7 +9723,9 @@
"severity": "Medium",
"category": "High Availability",
"guid": "c0085c32-84c0-c247-bfa9-e70977cbf108",
- "source": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceFile": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Finds non-zone redundant SQL databases and lists them\nResources\n| where type =~ 'microsoft.sql/servers/databases'\n| where tolower(tostring(properties.zoneRedundant))=~'false'\n|project recommendationId = \"c0085c32-84c0-c247-bfa9-e70977cbf108\", name, id, tags\n\n\n"
},
{
@@ -8986,7 +9754,9 @@
"severity": "High",
"category": "High Availability",
"guid": "cbb17a29-64fb-c943-95d0-8df814a37c40",
- "source": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceFile": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -9023,7 +9793,9 @@
"severity": "High",
"category": "Monitoring and Alerting",
"guid": "7e7daec9-6a81-3546-a4cc-9aef72fec1f7",
- "source": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceFile": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of SQL databases that are not configured for monitoring.\nresources\n| where type == \"microsoft.insights/metricalerts\"\n| mv-expand properties.scopes\n| mv-expand properties.criteria.allOf\n| project databaseid = properties_scopes, monitoredMetric = properties_criteria_allOf.metricName\n| where databaseid contains 'databases'\n| summarize monitoredMetrics=make_list(monitoredMetric) by databaseid=tolower(tostring(databaseid))\n| join kind=fullouter (\n resources\n | where type =~ 'microsoft.sql/servers/databases'\n | project databaseid = tolower(id), name, tags\n) on databaseid\n| where isnull(monitoredMetrics)\n| project recommendationId = \"7e7daec9-6a81-3546-a4cc-9aef72fec1f7\", name, id=databaseid1, tags, param1=strcat(\"MonitoringMetrics=false\" )\n\n"
},
{
@@ -9056,7 +9828,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "d6ef87aa-574e-584e-a955-3e6bb8b5425b",
- "source": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceFile": "azure-resources/Sql/servers/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -9089,7 +9863,9 @@
"severity": "High",
"category": "High Availability",
"guid": "e6c7e1cc-2f47-264d-aa50-1da421314472",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This query will return all storage accounts that are not using Zone or Region replication\nResources\n| where type =~ \"Microsoft.Storage/storageAccounts\"\n| where sku.name in~ (\"Standard_LRS\", \"Premium_LRS\")\n| project recommendationId = \"e6c7e1cc-2f47-264d-aa50-1da421314472\", name, id, tags, param1 = strcat(\"sku: \", sku.name)\n\n"
},
{
@@ -9122,7 +9898,9 @@
"severity": "High",
"category": "Service Upgrade and Retirement",
"guid": "63ad027e-611c-294b-acc5-8e3234db9a40",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Azure classic Storage Account\nresources\n| where type =~ 'microsoft.classicstorage/storageaccounts'\n| project recommendationId = '63ad027e-611c-294b-acc5-8e3234db9a40', name, id, tags, param1=type\n\n"
},
{
@@ -9167,7 +9945,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "5587ef77-7a05-a74d-9c6e-449547a12f27",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -9196,7 +9976,9 @@
"severity": "Medium",
"category": "Disaster Recovery",
"guid": "03263c57-c869-3841-9e0a-3dbb9ef3e28d",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -9225,7 +10007,9 @@
"severity": "Low",
"category": "Disaster Recovery",
"guid": "8ebda7c0-e0e1-ed45-af59-2d7ea9a1c05d",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -9258,7 +10042,9 @@
"severity": "Low",
"category": "Disaster Recovery",
"guid": "1b965cb9-7629-214e-b682-6bf6e450a100",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -9291,7 +10077,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "96cb8331-6b06-8242-8ce8-4e2f665dc679",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -9324,7 +10112,9 @@
"severity": "Low",
"category": "Scalability",
"guid": "2ad78dec-5a4d-4a30-8fd1-8584335ad781",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Find all Azure Storage Accounts, that upgradeable to General purpose v2.\nResources\n| where type =~ \"Microsoft.Storage/storageAccounts\" and kind in~ (\"Storage\", \"BlobStorage\")\n| extend\n param1 = strcat(\"AccountKind: \", case(kind =~ \"Storage\", \"Storage (general purpose v1)\", kind =~ \"BlobStorage\", \"BlobStorage\", kind)),\n param2 = strcat(\"Performance: \", sku.tier),\n param3 = strcat(\"Replication: \", sku.name)\n| project recommendationId = \"2ad78dec-5a4d-4a30-8fd1-8584335ad781\", name, id, tags, param1, param2, param3\n\n"
},
{
@@ -9357,7 +10147,9 @@
"severity": "Medium",
"category": "Security",
"guid": "dc55be60-6f8c-461e-a9d5-a3c7686ed94e",
- "source": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceFile": "azure-resources/Storage/storageAccounts/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// This resource graph query will return all storage accounts that does not have a Private Endpoint Connection or where a private endpoint exists but public access is enabled\nresources\n| where type =~ \"Microsoft.Storage/StorageAccounts\"\n| where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != (\"Succeeded\") or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled')\n| extend param1 = strcat('Private Endpoint: ', iif(isnotnull(properties.privateEndpointConnections),split(properties.privateEndpointConnections[0].properties.privateEndpoint.id,'/')[8],'No Private Endpoint'))\n| extend param2 = strcat('Access: ', iif(properties.publicNetworkAccess == 'Disabled', 'Public Access Disabled', iif(isnotnull(properties.networkAcls), 'NetworkACLs in place','Public Access Enabled')))\n| project recommendationId = \"dc55be60-6f8c-461e-a9d5-a3c7686ed94e\", name, id, tags, param1, param2\n"
},
{
@@ -9386,7 +10178,9 @@
"severity": "High",
"category": "Governance",
"guid": "c041d596-6c97-4c5f-b4b3-9cd37628f2e2",
- "source": "azure-resources/Subscription/subscriptions/recommendations.yaml",
+ "sourceFile": "azure-resources/Subscription/subscriptions/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Count VM instances with a tag that contains \"Citrix VDA\" and create output if that count is >2000 for each subscription.\n// The Citrix published limit is 2500. This query runs an 80% check.\n\nresources\n| where type == 'microsoft.compute/virtualmachines'\n| where tags contains 'Citrix VDA'\n| summarize VMs=count() by subscriptionId\n| where VMs > 2000\n| join (resourcecontainers| where type =='microsoft.resources/subscriptions' | project subname=name, subscriptionId) on subscriptionId\n| project recommendationId='c041d596-6c97-4c5f-b4b3-9cd37628f2e2', name= subname, id = subscriptionId, param1='Too many instances.', param2= VMs\n\n"
},
{
@@ -9419,7 +10213,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "5ada5ffa-7149-4e49-9fbf-e67be7c2594c",
- "source": "azure-resources/Subscription/subscriptions/recommendations.yaml",
+ "sourceFile": "azure-resources/Subscription/subscriptions/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure Subscriptions that are placed under the Tenant Root Management Group\nresourcecontainers\n| where type == 'microsoft.resources/subscriptions'\n| extend mgParentSize = array_length(properties.managementGroupAncestorsChain)\n| where mgParentSize == 1\n| project recommendationId=\"5ada5ffa-7149-4e49-9fbf-e67be7c2594c\", name, id, tags\n\n"
},
{
@@ -9448,7 +10244,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "19b6df57-f6b5-3e4f-843a-273daa087cb0",
- "source": "azure-resources/VirtualMachineImages/imageTemplates/recommendations.yaml",
+ "sourceFile": "azure-resources/VirtualMachineImages/imageTemplates/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -9481,7 +10279,9 @@
"severity": "Low",
"category": "Disaster Recovery",
"guid": "21fb841b-ba70-1f4e-a460-1f72fb41aa51",
- "source": "azure-resources/VirtualMachineImages/imageTemplates/recommendations.yaml",
+ "sourceFile": "azure-resources/VirtualMachineImages/imageTemplates/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// List all Image Templates that are not replicated to another region\nresources\n| where type =~ \"microsoft.virtualmachineimages/imagetemplates\"\n| mv-expand distribution=properties.distribute\n| where array_length(parse_json(distribution).replicationRegions) == 1\n| project recommendationId = \"21fb841b-ba70-1f4e-a460-1f72fb41aa51\", name, id, param1=strcat(\"replicationRegions:\",parse_json(distribution).replicationRegions)\n\n"
},
{
@@ -9514,7 +10314,9 @@
"severity": "High",
"category": "High Availability",
"guid": "88cb90c2-3b99-814b-9820-821a63f600dd",
- "source": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// The query filters the qualified App Service Plans that do not have Zone Redundancy enabled.\n// Its important to check regions that support availability zones for Azure App Services running on multi-tenant and App Service Environments https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service?tabs=graph%2Ccli#:~:text=The%20following%20regions%20support%20Azure%20App%20Services%20running%20on%20multi%2Dtenant%20environments%3A\n\nresources\n| where type =~ 'microsoft.web/serverfarms'\n| extend zoneRedundant = tobool(properties.zoneRedundant)\n| extend sku_tier = tostring(sku.tier)\n| where (tolower(sku_tier) contains \"isolated\" or tolower(sku_tier) contains \"premium\") and zoneRedundant == false\n| project recommendationId=\"88cb90c2-3b99-814b-9820-821a63f600dd\", name, id, tags, param1=sku_tier, param2=\"Not Zone Redundant\"\n\n"
},
{
@@ -9543,7 +10345,9 @@
"severity": "High",
"category": "High Availability",
"guid": "b2113023-a553-2e41-9789-597e2fb54c31",
- "source": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure App Service Plans that are not in the \"Standard\", \"Premium\", or \"IsolatedV2\" SKU tiers.\n\nresources\n| where type =~ 'microsoft.web/serverfarms'\n| extend sku_tier = tostring(sku.tier)\n| where tolower(sku_tier) !contains \"standard\" and\n tolower(sku_tier) !contains \"premium\" and\n tolower(sku_tier) !contains \"isolatedv2\"\n| project recommendationId=\"b2113023-a553-2e41-9789-597e2fb54c31\", name, id, tags, param1= strcat(\"SKU=\",sku_tier)\n\n"
},
{
@@ -9572,7 +10376,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "07243659-4643-d44c-a1c6-07ac21635072",
- "source": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure App Service Plans and the number of changes that was made to the pricing tier, if the count is higher that 3 it means you need to avoid scaling up and down that often\n\nresourcechanges\n| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),\nchangeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId,\nchangedProperties = properties.changes, changeCount = properties.changeAttributes.changesCount\n| where changeTime > ago(14d)\n| join kind=inner (resources | project resources_Name = name, resources_Type = type, resources_Subscription= subscriptionId, resources_ResourceGroup= resourceGroup, id) on $left.targetResourceId == $right.id\n| where resources_Type contains \"microsoft.web/serverfarms\"\n| where changedProperties['sku.name'].propertyChangeType == 'Update' or changedProperties['sku.tier'].propertyChangeType == 'Update'\n| summarize count() by targetResourceId, resources_Name ,tostring(changedProperties['sku.name'].previousValue), tostring(changedProperties['sku.tier'].newValue)\n| project recommendationId=\"07243659-4643-d44c-a1c6-07ac21635072\", name=resources_Name, id=targetResourceId, tags=\"\", param1=['changedProperties_sku.name_previousValue'], param2=['changedProperties_sku.tier_newValue'], param3=count_\n\n"
},
{
@@ -9601,7 +10407,9 @@
"severity": "High",
"category": "Governance",
"guid": "dbe3fd66-fb2a-9d46-b162-1791e21da236",
- "source": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -9634,7 +10442,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "6320abf6-f917-1843-b2ae-4779c35985ae",
- "source": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/serverFarms/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// under-development\n\n"
},
{
@@ -9663,7 +10473,9 @@
"severity": "Low",
"category": "Monitoring and Alerting",
"guid": "493f6079-3bb6-4a56-96ba-ab3248474cb1",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n\n"
},
{
@@ -9696,7 +10508,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "a7e8bb3d-8ceb-442d-b26f-007cd63f9ffc",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n\n"
},
{
@@ -9725,7 +10539,9 @@
"severity": "Low",
"category": "Scalability",
"guid": "78a5c033-ff51-4332-8a71-83464c34494b",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -9754,7 +10570,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "3f9ddb59-0bb3-4acb-9c9b-99aa1776f0ab",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n\n"
},
{
@@ -9783,7 +10601,9 @@
"severity": "Low",
"category": "Governance",
"guid": "a1d91661-32d4-430b-b3b6-5adeb0975df7",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Display App Service with the count of deployment slots for Apps under eligible App service plans and it shows if deployment slot is enabled or not\n\nresources\n| where type =~ 'microsoft.web/sites' or type =~ 'microsoft.web/sites/slots'\n| extend isSlot = iff(type =~ 'microsoft.web/sites/slots', 1, 0)\n| extend AspName = iff(isSlot == 1, split(name, '/')[0], name)\n| extend Sku = tostring(properties.sku)\n| where tolower(Sku) contains \"standard\" or tolower(Sku) contains \"premium\" or tolower(Sku) contains \"isolatedv2\"\n| project id, name, AspName, isSlot, Sku\n| summarize Slots = countif(isSlot == 1) by id, name, AspName, Sku\n| extend DeploymentSlotEnabled = iff(Slots > 1, true, false)\n| where DeploymentSlotEnabled = false\n| project recommendationId=\"a1d91661-32d4-430b-b3b6-5adeb0975df7\", name, id, tags=\"\", param1=Sku, param2=Slots, param3=\"DeploymentSlotEnabled=false\"\n\n"
},
{
@@ -9812,7 +10632,9 @@
"severity": "Medium",
"category": "Other Best Practices",
"guid": "0b80b67c-afbe-4988-ad58-a85a146b681e",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure App Service resources that don't have App Settings configured\n\nappserviceresources\n| where type == \"microsoft.web/sites/config\"\n| extend AppSettings = iif(isempty(properties.AppSettings), true, false)\n| where AppSettings == false\n| project recommendationId=\"0b80b67c-afbe-4988-ad58-a85a146b681e\", id, name, tags=\"\", param1=\"AppSettings is not configured\"\n\n"
},
{
@@ -9841,7 +10663,9 @@
"severity": "Medium",
"category": "Other Best Practices",
"guid": "fd049c28-ae6d-48f0-a641-cc3ba1a3fe1d",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Check if Health Check is enabled for App Service\n\nresources\n| where type =~ 'microsoft.web/sites'\n| where properties.kind has 'app'\n| join kind = inner\n (\n appserviceresources\n | where isnull(properties.HealthCheckPath) == true\n | project name\n ) on name\n| project recommendationId = \"fd049c28-ae6d-48f0-a641-cc3ba1a3fe1d\", name, id, tags, param1 = \"Healthcheckpath = not set\"\n"
},
{
@@ -9870,7 +10694,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "aab6b4a4-9981-43a4-8728-35c7ecbb746d",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Check if Network access restrictions defined for App service\n\nresources\n| where type =~ 'microsoft.web/sites'\n| where properties.kind has 'app'\n| join kind = inner\n (\n appserviceresources\n | mv-expand IpSecurityRestrictions = properties.IpSecurityRestrictions\n | where isnotnull(IpSecurityRestrictions) == true\n | project name\n ) on name\n| project recommendationId = \"aab6b4a4-9981-43a4-8728-35c7ecbb746d\", name, id, tags, param1 = \"No network restrictions set\"\n"
},
{
@@ -9899,7 +10725,9 @@
"severity": "Medium",
"category": "Scalability",
"guid": "9e6682ac-31bc-4635-9959-ab74b52454e6",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of App services that do not have minimum instance count of 2\n\nresources\n| where type =~ 'microsoft.web/sites'\n| where properties.kind has 'app'\n| join kind = inner\n (\n appserviceresources\n | where properties.PreWarmedInstanceCount < 2\n | project name\n ) on name\n| project recommendationId = \"9e6682ac-31bc-4635-9959-ab74b52454e6\", name, id, tags, param1 = \"PreWarmedInstanceCount is less than 2\"\n"
},
{
@@ -9928,7 +10756,9 @@
"severity": "Low",
"category": "High Availability",
"guid": "c6c4b962-5af4-447a-9d74-7b9c53a5dff5",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// Azure Resource Graph Query\n// Provides a list of Azure Function App resources that do not have auto heal enabled\n\nResources\n| where type =~ 'microsoft.web/sites'\n| where properties.kind contains 'functionapp'\n| join kind=inner\n (appserviceresources\n | where type == \"microsoft.web/sites/config\"\n | where properties.AutoHealEnabled == 'false'\n | project id, name, tenantId, location, resourceGroup, properties.AutoHealEnabled\n ) on name\n| project recommendationID = \"c6c4b962-5af4-447a-9d74-7b9c53a5dff5\", name, id, type, kind, param1=\"AutoHealEnabled =false\"\n"
},
{
@@ -9957,7 +10787,9 @@
"severity": "Medium",
"category": "Monitoring and Alerting",
"guid": "52f368ee-1d77-4b34-92db-64be269642d0",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -9986,7 +10818,9 @@
"severity": "Low",
"category": "Governance",
"guid": "0b06a688-0dd6-4d73-9f72-6666ff853ca9",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -10015,7 +10849,9 @@
"severity": "Medium",
"category": "Governance",
"guid": "c9a278b7-024b-454b-bd54-41587c512b74",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
},
{
@@ -10044,51 +10880,53 @@
"severity": "Medium",
"category": "Governance",
"guid": "7c608f46-46b2-4cc0-bbd6-1d457c16671c",
- "source": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceFile": "azure-resources/Web/sites/recommendations.yaml",
+ "sourceType": "aprl",
+ "timestamp": "July 24, 2024",
"graph": "// cannot-be-validated-with-arg\n"
}
],
"categories": [
{
- "name": "Disaster Recovery"
+ "name": "Service Upgrade and Retirement"
},
{
- "name": "Scalability"
+ "name": "Disaster Recovery"
},
{
- "name": "Monitoring and Alerting"
+ "name": "Other Best Practices"
},
{
- "name": "High Availability"
+ "name": "Business Continuity"
},
{
- "name": "Other Best Practices"
+ "name": "Personalized"
},
{
- "name": "Business Continuity"
+ "name": "Monitoring and Alerting"
},
{
- "name": "Personalized"
+ "name": "Security"
},
{
"name": "Governance"
},
{
- "name": "Service Upgrade and Retirement"
+ "name": "High Availability"
},
{
- "name": "Security"
+ "name": "Scalability"
}
],
"severities": [
- {
- "name": "Low"
- },
{
"name": "High"
},
{
"name": "Medium"
+ },
+ {
+ "name": "Low"
}
],
"waf": [
@@ -10142,6 +10980,6 @@
"name": "APRL Checklist",
"waf": "none",
"state": "preview",
- "timestamp": "July 14, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azureapplicationgateway_sg_checklist.en.json b/checklists-ext/azureapplicationgateway_sg_checklist.en.json
index d2c3f09f4..bde5684ce 100644
--- a/checklists-ext/azureapplicationgateway_sg_checklist.en.json
+++ b/checklists-ext/azureapplicationgateway_sg_checklist.en.json
@@ -6,236 +6,265 @@
"service": "Azure Application Gateway",
"text": "Plan for rule updates",
"description": "Plan enough time for updates before accessing Application Gateway or making further changes. For example, removing servers from backend pool might take some time because they have to drain existing connections.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "aa2f47b2-36a3-4277-a7f9-530ebe697d26"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Use health probes to detect backend unavailability",
"description": "If Application Gateway is used to load balance incoming traffic over multiple backend instances, we recommend the use of health probes. These will ensure that traffic is not routed to backends that are unable to handle the traffic.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "26730c7f-aa79-4887-bef2-3c6fa3c796b4"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Review the impact of the interval and threshold settings on health probes",
"description": "The health probe sends requests to the configured endpoint at a set interval. Also, there's a threshold of failed requests that will be tolerated before the backend is marked unhealthy. These numbers present a trade-off.- Setting a higher interval puts a higher load on your service. Each Application Gateway instance sends its own health probes, so 100 instances every 30 seconds means 100 requests per 30 seconds.- Setting a lower interval leaves more time before an outage is detected.- Setting a low unhealthy threshold might mean that short, transient failures might take down a backend. - Setting a high threshold it can take longer to take a backend out of rotation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dc370d3b-180d-474b-ad33-3e3adc684768"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Verify downstream dependencies through health endpoints",
"description": "Suppose each backend has its own dependencies to ensure failures are isolated. For example, an application hosted behind Application Gateway might have multiple backends, each connected to a different database (replica). When such a dependency fails, the application might be working but won't return valid results. For that reason, the health endpoint should ideally validate all dependencies. Keep in mind that if each call to the health endpoint has a direct dependency call, that database would receive 100 queries every 30 seconds instead of 1. To avoid this, the health endpoint should cache the state of the dependencies for a short period of time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ff13f531-ebf7-4051-a2f9-6f6688200bd8"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "When using Azure Front Door and Application Gateway to protect `HTTP/S` applications, use WAF policies in Front Door and lock down Application Gateway to receive traffic only from Azure Front Door.",
"description": "Certain scenarios can force you to implement rules specifically on Application Gateway. For example, if ModSec CRS 2.2.9, CRS 3.0 or CRS 3.1 rules are required, these rules can be only implemented on Application Gateway. Conversely, rate-limiting and geo-filtering are available only on Azure Front Door, not on AppGateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1cacf8b7-2158-4fbf-8a2a-8021a0b7e54d"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Set up a TLS policy for enhanced security",
"description": "Set up a TLS policy for extra security. Ensure you're always using the latest TLS policy version available. This enforces TLS 1.2 and stronger ciphers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6f66822e-e720-4449-9109-d536e95e9aca"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Use AppGateway for TLS termination",
"description": "There are advantages of using Application Gateway for TLS termination:- Performance improves because requests going to different backends to have to re-authenticate to each backend.- Better utilization of backend servers because they don't have to perform TLS processing- Intelligent routing by accessing the request content.- Easier certificate management because the certificate only needs to be installed on Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2e78b1af-30aa-48fb-a8c3-852e109871a6"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Use Azure Key Vault to store TLS certificates",
"description": "Application Gateway can be integrated with Key Vault. This provides stronger security, easier separation of roles and responsibilities, support for managed certificates, and an easier certificate renewal and rotation process.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2d18cf76-75ec-4b98-b76c-a4d6fb44e043"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "When re-encrypting backend traffic, ensure the backend server certificate contains both the root and intermediate Certificate Authorities (CAs)",
"description": "A TLS certificate of the backend server must be issued by a well-known CA. If the certificate was not issued by a trusted CA, the Application Gateway checks if the certificate was issued by a trusted CA, and so on, until a trusted CA certificate is found. Only then a secure connection is established. Otherwise, Application Gateway marks the backend as unhealthy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8bc7c922-c69c-4280-9b9a-c9beecead835"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Use an appropriate DNS server for backend pool resources",
"description": "When the backend pool contains a resolvable FQDN, the DNS resolution is based on a private DNS zone or custom DNS server (if configured on the VNet), or it uses the default Azure-provided DNS.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "99518dfb-4e20-4868-8991-1c75f297a55d"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Comply with all NSG restrictions for Application Gateway",
"description": "NSGs are supported on Application Gateway subnet, but there are some restrictions. For instance, some communication with certain port ranges is prohibited. Make sure you understand the implications of those restrictions. For details, see Network security groups.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1437298d-0abb-484b-9152-5400d6b4d258"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Refrain from using UDRs on the Application gateway subnet",
"description": "Using User Defined Routes (UDR) on the Application Gateway subnet can cause some issues. Health status in the back-end might be unknown. Application Gateway logs and metrics might not get generated. We recommend that you don't use UDRs on the Application Gateway subnet so that you can view the back-end health, logs, and metrics. If your organizations require to use UDR in the Application Gateway subnet, please ensure you review the supported scenarios. For more information, see Supported user-defined routes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "aad6f93d-60b5-44e2-a166-a85d4fe7f6e9"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Be aware of Application Gateway capacity changes when enabling WAF",
"description": "When WAF is enabled, every request must be buffered by the Application Gateway until it fully arrives, checks if the request matches with any rule violation in its core rule set, and then forwards the packet to the backend instances. When there are large file uploads (30MB+ in size), it can result in a significant latency. Because Application Gateway capacity requirements are different with WAF, we do not recommend enabling WAF on Application Gateway without proper testing and validation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "32b914b9-a439-42ab-ac1b-e131333896d3"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Familiarize yourself with Application Gateway pricing",
"description": "For information about Application Gateway pricing, see Understanding Pricing for Azure Application Gateway and Web Application Firewall. You can also leverage the Pricing calculator.Ensure that the options are adequately sized to meet the capacity demand and deliver expected performance without wasting resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0edcbe2d-deaf-4319-ad1e-80a9393fa444"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Review underutilized resources",
"description": "Identify and delete Application Gateway instances with empty backend pools to avoid unnecessary costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4b19fe95-feb3-4d0f-87b4-b06897703775"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Stop Application Gateway instances when not in use",
"description": "You aren't billed when Application Gateway is in the stopped state. Continuously running Application Gateway instances can incur extraneous costs. Evaluate usage patterns and stop instances when you don't need them. For example, usage after business hours in Dev/Test environments is expected to be low.See these articles for information about how to stop and start instances.- Stop-AzApplicationGateway- Start-AzApplicationGateway",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4574f29b-5ff1-4acb-9914-dc5c912f31df"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Have a scale-in and scale-out policy",
"description": "A scale-out policy ensures that there will be enough instances to handle incoming traffic and spikes. Also, have a scale-in policy that makes sure the number of instances are reduced when demand drops. Consider the choice of instance size. The size can significantly impact the cost. Some considerations are described in the Estimate the Application Gateway instance count.For more information, see What is Azure Application Gateway v2?",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4cf0112c-e271-4802-ae11-4a95e14e1564"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Review consumption metrics across different parameters",
"description": "You're billed based on metered instances of Application Gateway based on the metrics tracked by Azure. Evaluate the various metrics and capacity units and determine the cost drivers. For more information, see Microsoft Cost Management and Billing. The following metrics are key for Application Gateway. This information can be used to validate that the provisioned instance count matches the amount of incoming traffic.- Estimated Billed Capacity Units- Fixed Billable Capacity Units- Current Capacity UnitsFor more information, see Application Gateway metrics.Make sure you account for bandwidth costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "98244878-55bd-49b1-ac07-ca6e96d5ba83"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Monitor capacity metrics",
"description": "Use these metrics as indicators of utilization of the provisioned Application Gateway capacity. We strongly recommend setting up alerts on capacity. For details, see Application Gateway high traffic support.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6a41de7f-c4c6-48c6-b997-1dcff0c8ac25"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Troubleshoot using metrics",
"description": "There are other metrics that can indicate issues either at Application Gateway or the backend. We recommend evaluating the following alerts:- Unhealthy Host Count- Response Status (dimension 4xx and 5xx)- Backend Response Status (dimension 4xx and 5xx)- Backend Last Byte Response Time- Application Gateway Total TimeFor more information, see Metrics for Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "886af6e8-8d4e-4963-bffc-ec91cfeac600"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Enable diagnostics on Application Gateway and Web Application Firewall (WAF)",
"description": "Diagnostic logs allow you to view firewall logs, performance logs, and access logs. Use these logs to manage and troubleshoot issues with Application Gateway instances. For more information, see Back-end health and diagnostic logs for Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1d2ea6e3-cf4a-4342-94d0-05204da3e0f4"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Use Azure Monitor Network Insights",
"description": "Azure Monitor Network Insights provides a comprehensive view of health and metrics for network resources, including Application Gateway. For additional details and supported capabilities for Application Gateway, see Azure Monitor Network insights.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2273b46e-b8f5-43ae-842c-54b042a9d984"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Match timeout settings with the backend application",
"description": "Ensure you have configured the IdleTimeout settings to match the listener and traffic characteristics of the backend application. The default value is set to four minutes and can be configured to a maximum of 30. For more information, see Load Balancer TCP Reset and Idle Timeout.For workload considerations, see Monitoring application health for reliability.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "41027b9b-d6e6-43b4-9827-48d59abf1cbd"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Monitor Key Vault configuration issues using Azure Advisor",
"description": "Application Gateway checks for the renewed certificate version in the linked Key Vault at every 4-hour interval. If it is inaccessible due to any incorrect Key Vault configuration, it logs that error and pushes a corresponding Advisor recommendation. You must configure the Advisor alerts to stay updated and fix such issues immediately to avoid any Control or Data plane related problems. For more information, see Investigating and resolving key vault errors. To set an alert for this specific case, use the Recommendation Type as Resolve Azure Key Vault issue for your Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5d5a0e24-e4e8-4454-83d0-313bce959d0f"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Consider SNAT port limitations in your design",
"description": "SNAT port limitations are important for backend connections on the Application Gateway. There are separate factors that affect how Application Gateway reaches the SNAT port limit. For example, if the backend is a public IP address, it will require its own SNAT port. In order to avoid SNAT port limitations, you can increase the number of instances per Application Gateway, scale out the backends to have more IP addresses, or move your backends into the same virtual network and use private IP addresses for the backends.Requests per second (RPS) on the Application Gateway will be affected if the SNAT port limit is reached. For example, if an Application Gateway reaches the SNAT port limit, then it won't be able to open a new connection to the backend, and the request will fail.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5acb5642-e3d0-4aa4-98cc-3bd36b826713"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Define the minimum instance count",
"description": "For Application Gateway v2 SKU, autoscaling takes some time (approximately six to seven minutes) before the additional set of instances is ready to serve traffic. During that time, if there are short spikes in traffic, expect transient latency or loss of traffic.We recommend that you set your minimum instance count to an optimal level. After you estimate the average instance count and determine your Application Gateway autoscaling trends, define the minimum instance count based on your application patterns. For information, see Application Gateway high traffic support.Check the Current Compute Units for the past one month. This metric represents the gateway's CPU utilization. To define the minimum instance count, divide the peak usage by 10. For example, if your average Current Compute Units in the past month is 50, set the minimum instance count to five.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e7f3c963-e70a-48dd-954b-27619837daab"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Define the maximum instance count",
"description": "We recommend 125 as the maximum autoscale instance count. Make sure the subnet that has the Application Gateway has sufficient available IP addresses to support the scale-up set of instances.Setting the maximum instance count to 125 has no cost implications because you're billed only for the consumed capacity.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3539073c-2694-4459-bcb4-a943a628101b"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Define Application Gateway subnet size",
"description": "Application Gateway needs a dedicated subnet within a virtual network. The subnet can have multiple instances of the deployed Application Gateway resource. You can also deploy other Application Gateway resources in that subnet, v1 or v2 SKU.Here are some considerations for defining the subnet size:- Application Gateway uses one private IP address per instance and another private IP address if a private front-end IP is configured.- Azure reserves five IP addresses in each subnet for internal use.- Application Gateway (Standard or WAF SKU) can support up to 32 instances. Taking 32 instance IP addresses + 1 private front-end IP + 5 Azure reserved, a minimum subnet size of /26 is recommended. Because the Standard_v2 or WAF_v2 SKU can support up to 125 instances, using the same calculation, a subnet size of /24 is recommended.- If you want to deploy additional Application Gateway resources in the same subnet, consider the additional IP addresses that will be required for their maximum instance count for both, Standard and Standard v2.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "75c2360c-8a5d-46ae-8471-7636e7e16313"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Take advantage of features for autoscaling and performance benefits",
"description": "The v2 SKU offers autoscaling to ensure that your Application Gateway can scale up as traffic increases. When compared to v1 SKU, v2 has capabilities that enhance the performance of the workload. For example, better TLS offload performance, quicker deployment and update times, zone redundancy, and more. For more information about autoscaling features, see Scaling Application Gateway v2 and WAF v2.If you are running v1 SKU Application gateway, consider migrating to the Application gateway v2 SKU. For more information, see Migrate Azure Application Gateway and Web Application Firewall from v1 to v2.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a8924ef1-8a49-4cf6-9858-b475d9618d9d"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -272,6 +301,6 @@
"name": "Azure Application Gateway Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azureblobstorage_sg_checklist.en.json b/checklists-ext/azureblobstorage_sg_checklist.en.json
index 89aa998ce..735f3463d 100644
--- a/checklists-ext/azureblobstorage_sg_checklist.en.json
+++ b/checklists-ext/azureblobstorage_sg_checklist.en.json
@@ -6,215 +6,241 @@
"service": "Azure Blob Storage",
"text": "Configure your account for redundancy. For maximum availability and durability, configure your account by using zone-redundant storage (ZRS) or GZRS.",
"description": "Redundancy protects your data against unexpected failures. The ZRS and GZRS configuration options replicate across different availability zones and enable applications to continue reading data during an outage. For more information, see Durability and availability by outage scenario and Durability and availability parameters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6e3a0d4c-f59e-4049-a15d-30ca8ac3bc5e"
},
{
"waf": "Reliability",
"service": "Azure Blob Storage",
"text": "Before initiating a failover or failback, evaluate the potential for data loss by checking the value of the last synchronization time property. This recommendation applies only to GRS and GZRS configurations.",
"description": "This property helps you estimate how much data you might lose by initiating an account failover. All data and metadata written before the last synchronization time is available on the secondary region, but data and metadata written after the last synchronization time might be lost because it's not written to the secondary region.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b9413c5c-1467-4f04-aa56-66756174bfe4"
},
{
"waf": "Reliability",
"service": "Azure Blob Storage",
"text": "As a part of your backup and recovery strategy, enable the container soft delete, blob soft delete, versioning, and point-in-time restore options.",
"description": "The soft delete option enables a storage account to recover deleted containers and blobs. The versioning option automatically tracks changes made to blobs. This option lets you restore a blob to a previous state.The point-in-time restore option protects against accidental blob deletion or corruption and lets you restore block blob data to an earlier state. For more information, see Data protection overview.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7900bd00-c4b2-4e8d-b006-0efdf966daa7"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Disable anonymous read access to containers and blob.",
"description": "When anonymous access is allowed for a storage account, a user that has the appropriate permissions can modify a container's anonymous access setting to enable anonymous access to the data in that container.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5d7648fc-6e65-46da-beb4-b7da768cd856"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Apply an Azure Resource Manager lock on the storage account.",
"description": "Locking an account prevents it from being deleted and causing data loss.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a279d1d6-4a74-4533-aef0-6d658c196084"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Disable traffic to the public endpoints of your storage account. Create private endpoints for clients that run in Azure. Enable the public endpoint only if clients and services external to Azure require direct access to your storage account. Enable firewall rules that limit access to specific virtual networks.",
"description": "Start with zero access and then incrementally authorize the lowest levels of access required for clients and services to minimize the risk of creating unnecessary openings for attackers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a3a5d6f5-b15b-4b9f-83a4-590d9f826f11"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Authorize access by using Azure role-based access control (RBAC).",
"description": "With RBAC, there are no passwords or keys that can be compromised. The security principal (user, group, managed identity, or service principal) is authenticated by Microsoft Entra ID to return an OAuth 2.0 token. The token is used to authorize a request against the Blob Storage service.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "945c0935-f1fd-4b22-a24e-5b767202d86e"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Disallow shared key authorization. This disables not only account key access but also service and account shared access signature tokens because they're based on account keys.",
"description": "Only secured requests that are authorized with Microsoft Entra ID are permitted.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "20c571b0-d4cf-4641-bd1d-1310f8cd6eb2"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "We recommend that you don't use an account key. If you must use account keys, then store them in Key Vault, and make sure that you regenerate them periodically.",
"description": "Key Vault lets you retrieve keys at runtime, instead of saving them by using your application. Key Vault also makes it easy to rotate your keys without interruption to your applications. Rotating the account keys periodically reduces the risk of exposing your data to malicious attacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "49899213-759d-4cac-b34a-446526b56f4b"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "We recommend that you don't use shared access signature tokens. Evaluate whether you need shared access signature tokens to secure access to Blob Storage resources. If you must create one, then review this list of shared access signature best practices before you create and distribute it.",
"description": "Best practices can help you prevent a shared access signature token from being leaked and quickly recover if a leak does occur.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "cb1a2ad8-7833-45be-97e5-4afc4a38cfc4"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Configure your storage account so clients can send and receive data by using the minimum version of TLS 1.2.",
"description": "TLS 1.2 is more secure and faster than TLS 1.0 and 1.1, which don't support modern cryptographic algorithms and cipher suites.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9bf21313-427b-4208-8815-9e6323d55f4c"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Consider using your own encryption key to protect the data in your storage account. For more information, see Customer-managed keys for Azure Storage encryption.",
"description": "Customer-managed keys provide greater flexibility and control. For example, you can store encryption keys in Key Vault and automatically rotate them.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "76f6e285-5bed-46c0-a50d-b8024c4fd512"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Pack small files into larger files before moving them to cooler tiers. You can use file formats such as TAR or ZIP.",
"description": "Cooler tiers have higher data transfer costs. By having fewer large files, you can reduce the number of operations required to transfer data.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "68a2d8f2-ccf3-4cde-9466-61444d55d7d3"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Use standard-priority rehydration when rehydrating blobs from archive storage. Use high-priority rehydration only for emergency data restoration situations. For more information, see Rehydrate an archived blob to an online tier",
"description": "High-priority rehydration from the archive tier can lead to higher-than-normal bills.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b3b25570-9501-4ccf-a42f-bf1ab7a1796d"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Reduce the cost of using resource logs by choosing the appropriate log storage location and by managing log-retention periods. If you only plan to query logs occasionally (for example, querying logs for compliance auditing), consider sending resource logs to a storage account instead of sending them to an Azure Monitor Logs workspace. You can use a serverless query solution such as Azure Synapse Analytics to analyze logs. For more information, see Optimize cost for infrequent queries. Use lifecycle management policies to delete or archive logs.",
"description": "Storing resource logs in a storage account for later analysis can be a cheaper option. Using lifecycle management policies to manage log retention in a storage account prevents large numbers of logs files building up over time, which can lead to unnecessary capacity charges.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9c10778d-ed29-4ac4-b310-38987b3ba76b"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "If you enable versioning, use a lifecycle management policy to automatically delete old blob versions.",
"description": "Every write operation to a blob creates a new version. This increases capacity costs. You can keep costs in check by removing versions that you no longer need.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "05ba2481-3ecf-4808-a6fd-211f0a7db6ce"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "If you enable versioning, then place blobs that are frequently overwritten into an account that doesn't have versioning enabled.",
"description": "Every time a blob is overwritten, a new version is added which leads to increased storage capacity charges. To reduce capacity charges, store frequently overwritten data in a separate storage account with versioning disabled.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2b3cf36b-31a3-48c2-8624-9c8bdbf15a07"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "If you enable soft delete, then place blobs that are frequently overwritten into an account that doesn't have soft delete enabled. Set retention periods. Consider starting with a short retention period to better understand how the feature affects your bill. The minimum recommended retention period is seven days.",
"description": "Every time a blob is overwritten, a new snapshot is created. The cause of increased capacity charges might be difficult to access because the creation of these snapshots doesn't appear in logs. To reduce capacity charges, store frequently overwritten data in a separate storage account with soft delete disabled. A retention period keeps soft-deleted blobs from piling up and adding to the cost of capacity.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ea98ff0a-e389-4eb1-9f55-98d638152d68"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Enable SFTP support only when it's used to transfer data.",
"description": "Enabling the SFTP endpoint incurs an hourly cost. By thoughtfully disabling SFTP support, and then enabling it as needed, you can avoid passive charges from accruing in your account.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "918a9943-7dd2-47be-9d8f-d7088e08247d"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Disable any encryption scopes that aren't needed to avoid unnecessary charges.",
"description": "Encryptions scopes incur a per month charge.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dda91f7c-dd40-485d-af07-7ef14c90de03"
},
{
"waf": "Operations",
"service": "Azure Blob Storage",
"text": "Use infrastructure as code (IaC) to define the details of your storage accounts in Azure Resource Manager templates (ARM templates), Bicep, or Terraform.",
"description": "You can use your existing DevOps processes to deploy new storage accounts, and use Azure Policy to enforce their configuration.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fab63e96-cd06-4c4d-b92c-3b32a554e2d5"
},
{
"waf": "Operations",
"service": "Azure Blob Storage",
"text": "Use Storage insights to track the health and performance of your storage accounts. Storage insights provides a unified view of the failures, performance, availability, and capacity for all your storage accounts.",
"description": "You can track the health and operation of each of your accounts. Easily create dashboards and reports that stakeholders can use to track the health of your storage accounts.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fe67dbff-1ce7-4ac5-8b12-b0c3e23e66f3"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "Provision storage accounts in the same region where dependent resources are placed. For applications that aren't hosted on Azure, such as mobile device apps or on-premises enterprise services, locate the storage account in a region nearer to those clients. For more information, see Azure geographies.If clients from a different region don't require the same data, then create a separate account in each region.If clients from a different region require only some data, consider using an object-replication policy to asynchronously copy relevant objects to a storage account in the other region.",
"description": "Reducing the physical distance between the storage account and VMs, services, and on-premises clients can improve performance and reduce network latency. Reducing the physical distance also reduces cost for applications hosted in Azure because bandwidth usage within a single region is free.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f8126892-8d54-4a95-8e93-cc34bd50443d"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "For broad consumption by web clients (streaming video, audio, or static website content), consider using a content delivery network through Azure Front Door.",
"description": "Content is delivered to clients faster because it uses the Microsoft global edge network with hundreds of global and local points of presence around the world.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9a8a245d-71e9-45a8-b143-de66b3b87fd1"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "Add a hash character sequence (such as three digits) as early as possible in the partition key of a blob. The partition key is the account name, container name, virtual directory name, and blob name. If you plan to use timestamps in names, then consider adding a seconds value to the beginning of that stamp. For more information, see Partitioning.",
"description": "Using a hash code or seconds value nearest the beginning of a partition key reduces the time required to list query and read blobs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "215dace2-6d30-430f-9ab0-90ada951e981"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "When uploading blobs or blocks, use a blob or block size that's greater than 256 KiB.",
"description": "Blob or block sizes above 256 KiB takes advantage of performance enhancements in the platform made specifically for larger blobs and block sizes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7c748c26-7894-46d4-811b-3f792790b567"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -251,6 +277,6 @@
"name": "Azure Blob Storage Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azureexpressroute_sg_checklist.en.json b/checklists-ext/azureexpressroute_sg_checklist.en.json
index 210d6f749..d608a37bb 100644
--- a/checklists-ext/azureexpressroute_sg_checklist.en.json
+++ b/checklists-ext/azureexpressroute_sg_checklist.en.json
@@ -6,215 +6,241 @@
"service": "Azure Expressroute",
"text": "Plan for ExpressRoute circuit or ExpressRoute Direct",
"description": "During the initial planning phase, you want to decide whether you want to configure an ExpressRoute circuit or an ExpressRoute Direct connection. An ExpressRoute circuit allows a private dedicated connection into Azure with the help of a connectivity provider. ExpressRoute Direct allows you to extend on-premises network directly into the Microsoft network at a peering location. You also need to identify the bandwidth requirement and the SKU type requirement for your business needs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1fd730ba-d5b5-450b-9444-3daff21bc4b9"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Physical layer diversity",
"description": "For better resiliency, plan to have multiple paths between the on-premises edge and the peering locations (provider/Microsoft edge locations). This configuration can be achieved by going through different service provider or through a different location from the on-premises network.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ecab565f-2cbe-4bb9-81e9-d1a4c3771e57"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Plan for geo-redundant circuits",
"description": "To plan for disaster recovery, set up ExpressRoute circuits in more than one peering locations. You can create circuits in peering locations in the same metro or different metro and choose to work with different service providers for diverse paths through each circuit. For more information, see Designing for disaster recovery and Designing for high availability.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c7a9ccf7-7daf-4f2d-871e-1f7c4dfdba33"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Plan for Active-Active connectivity",
"description": "ExpressRoute dedicated circuits guarantee `99.95%` availability when an active-active connectivity is configured between on-premises and Azure. This mode provides higher availability of your Expressroute connection. It's also recommended to configure BFD for faster failover if there's a link failure on a connection.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3206bf94-9a6e-436b-a9c2-785a79d3bdf7"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Planning for Virtual Network Gateways",
"description": "Create availability zone aware Virtual Network Gateway for higher resiliency and plan for Virtual Network Gateways in different region for disaster recovery and high availability.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1cbe905b-cc57-4571-9415-cd13c4320fec"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Monitor circuits and gateway health",
"description": "Set up monitoring and alerts for ExpressRoute circuits and Virtual Network Gateway health based on various metrics available.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8f4eb27d-3de4-4265-a35b-d5243506b1b3"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Enable service health",
"description": "ExpressRoute uses service health to notify about planned and unplanned maintenance. Configuring service health will notify you about changes made to your ExpressRoute circuits.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ee6ce588-143a-4ab4-acb1-0c7487484015"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Configure Activity log to send logs to archive",
"description": "Activity logs provide insights into operations that were performed at the subscription level for ExpressRoute resources. With Activity logs, you can determine who and when an operation was performed at the control plane. Data retention is only 90 days and required to be stored in Log Analytics, Event Hubs or a storage account for archive.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0c9fcbb1-5c1c-47ec-a5a8-413c7ef6d9c0"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Maintain inventory of administrative accounts",
"description": "Use Azure RBAC to configure roles to limit user accounts that can add, update, or delete peering configuration on an ExpressRoute circuit.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5a43370c-8625-4a7a-a86a-8482baa5e27d"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Configure MD5 hash on ExpressRoute circuit",
"description": "During configuration of private peering or Microsoft peering, apply an MD5 hash to secure messages between the on-premises route and the MSEE routers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8a9dc0cc-86a6-45c1-8441-a0d77757a8e2"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Configure MACSec for ExpressRoute Direct resources",
"description": "Media Access Control security is a point-to-point security at the data link layer. ExpressRoute Direct supports configuring MACSec to prevent security threats to protocols such as ARP, DHCP, LACP not normally secured on the Ethernet link. For more information on how to configure MACSec, see MACSec for ExpressRoute Direct ports.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "500c8980-c0ef-43a0-b9a8-2d3d14980e97"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Encrypt traffic using IPsec",
"description": "Configure a Site-to-site VPN tunnel over your ExpressRoute circuit to encrypt data transferring between your on-premises network and Azure virtual network. You can configure a tunnel using private peering or using Microsoft peering.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "91c50223-7778-4996-99c6-4dd5be8a7634"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Familiarize yourself with ExpressRoute pricing",
"description": "For information about ExpressRoute pricing, see Understand pricing for Azure ExpressRoute. You can also use the Pricing calculator.Ensure that the options are adequately sized to meet the capacity demand and deliver expected performance without wasting resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "cee32b00-067e-4548-b020-f187b4a8c31c"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Determine SKU and bandwidth required",
"description": "The way you're charged for your ExpressRoute usage varies between the three different SKU types. With Local SKU, you're automatically charged with an Unlimited data plan. With Standard and Premium SKU, you can select between a Metered or an Unlimited data plan. All ingress data are free of charge except when using the Global Reach add-on. It's important to understand which SKU types and data plan works best for your workload to best optimize cost and budget. For more information resizing ExpressRoute circuit, see upgrading ExpressRoute circuit bandwidth.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bbd469cf-f785-414a-81b5-8b32b458d36b"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Determine the ExpressRoute virtual network gateway size",
"description": "ExpressRoute virtual network gateways are used to pass traffic into a virtual network over private peering. Review the performance and scale needs of your preferred Virtual Network Gateway SKU. Select the appropriate gateway SKU on your on-premises to Azure workload.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f1a986d4-44ab-4f57-8e90-7d543b1f69ef"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Monitor cost and create budget alerts",
"description": "Monitor the cost of your ExpressRoute circuit and create alerts for spending anomalies and overspending risks. For more information, see Monitoring ExpressRoute costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a99b7390-8fcd-4982-874d-716d0e33a556"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Deprovision and delete ExpressRoute circuits no longer in use.",
"description": "ExpressRoute circuits are charged from the moment they're created. To reduce unnecessary cost, deprovision the circuit with the service provider and delete the ExpressRoute circuit from your subscription. For steps on how to remove an ExpressRoute circuit, see Deprovisioning an ExpressRoute circuit.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "af36cdef-2fb3-40c2-9aad-9737a0923106"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Configure connection monitoring",
"description": "Connection monitoring allows you to monitor connectivity between your on-premises resources and Azure over the ExpressRoute private peering and Microsoft peering connection. Connection monitor can detect networking issues by identifying where along the network path the problem is and help you quickly resolve configuration or hardware failures.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ed434cb2-77d8-42de-b470-bc4badecb570"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Configure Service Health",
"description": "Set up Service Health notifications to alert when planned and upcoming maintenance is happening to all ExpressRoute circuits in your subscription. Service Health also displays past maintenance along with RCA if an unplanned maintenance were to occur.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c840ed18-2c79-4052-981f-db4fe43778f7"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Review metrics with Network Insights",
"description": "ExpressRoute Insights with Network Insights allow you to review and analyze ExpressRoute circuits, gateways, connections metrics and health dashboards. ExpressRoute Insights also provide a topology view of your ExpressRoute connections where you can view details of your peering components all in a single place.Metrics available:- Availability- Throughput- Gateway metrics",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "750d3e90-ad08-4bf0-b5d0-615ae4989959"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Review ExpressRoute resource metrics",
"description": "ExpressRoute uses Azure Monitor to collect metrics and create alerts base on your configuration. Metrics are collected for ExpressRoute circuits, ExpressRoute gateways, ExpressRoute gateway connections, and ExpressRoute Direct. These metrics are useful for diagnosing connectivity problems and understanding the performance of your ExpressRoute connection.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "786e08d7-92ce-4431-92d4-0e562e040ec5"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Test ExpressRoute gateway performance to meet work load requirements.",
"description": "Use Azure Connectivity Toolkit to test performance across your ExpressRoute circuit to understand bandwidth capacity and latency of your network connection.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f3ae82d5-c234-45f3-aa60-fda19953882b"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Increase the size of the ExpressRoute gateway.",
"description": "Upgrade to a higher gateway SKU for improved throughput performance between on-premises and Azure environment.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7bb82173-fbe7-4006-8748-8563ced2099c"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Upgrade ExpressRoute circuit bandwidth",
"description": "Upgrade your circuit bandwidth to meet your work load requirements. Circuit bandwidth is shared between all virtual networks connected to the ExpressRoute circuit. Depending on your work load, one or more virtual networks can use up all the bandwidth on the circuit.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c971e654-a452-41cd-a068-2ce7b847e70b"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Enable ExpressRoute FastPath for higher throughput",
"description": "If you're using an Ultra performance or an ErGW3AZ virtual network gateway, you can enable FastPath to improve the data path performance between your on-premises network and Azure virtual network.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "afb1b0d7-d12f-41e2-83da-9f34a421fab2"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Monitor ExpressRoute circuit and gateway metrics",
"description": "Set up alerts base on ExpressRoute metrics to proactively notify you when a certain threshold is met. These metrics are useful to understand anomalies that can happen with your ExpressRoute connection such as outages and maintenance happening to your ExpressRoute circuits.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "36957ecf-2ad2-41d3-9c53-f0ba27050799"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -251,6 +277,6 @@
"name": "Azure Expressroute Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azurefiles_sg_checklist.en.json b/checklists-ext/azurefiles_sg_checklist.en.json
index 6d83dc655..638be19b5 100644
--- a/checklists-ext/azurefiles_sg_checklist.en.json
+++ b/checklists-ext/azurefiles_sg_checklist.en.json
@@ -6,236 +6,265 @@
"service": "Azure Files",
"text": "Configure your storage account for redundancy. For maximum availability and durability, configure your account with\u202fzone-redundant storage (ZRS), GRS, or\u202fGZRS. Limited Azure regions support ZRS for standard and premium file shares. Only standard SMB accounts support GRS and GZRS. Premium SMB shares and NFS shares don't support GRS and GZRS. Azure Files doesn't support read-access geo-redundant storage (RA-GRS) or read-access geo-zone-redundant storage (RA-GZRS). If you configure a storage account to use RA-GRS or RA-GZRS, the file shares are configured and billed as GRS or GZRS.",
"description": "Redundancy protects your data against unexpected failures. The ZRS and GZRS configuration options replicate across various availability zones and enable applications to continue reading data during an outage. For more information, see Durability and availability by outage scenario and Durability and availability parameters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "782065a8-04b9-4cf6-adec-da6ba3e6e42b"
},
{
"waf": "Reliability",
"service": "Azure Files",
"text": "Before you initiate a failover or failback, check the value of the last synchronization time property to evaluate the potential for data loss. This recommendation applies only to GRS and GZRS configurations.",
"description": "This property helps you estimate how much data you might lose if you initiate an account failover. All data and metadata that's written before the last synchronization time is available on the secondary region, but you might lose data and metadata that's written after the last synchronization time because it's not written to the secondary region.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "16e559b4-0842-4a5f-83bf-16dc3e3cbfe8"
},
{
"waf": "Reliability",
"service": "Azure Files",
"text": "As a part of your backup and recovery strategy, enable\u202fsoft delete\u202fand\u202fuse snapshots for point-in-time restore. You can use Azure Backup to back up your SMB file shares. You can also use Azure File Sync to back up on-premises SMB file shares to an Azure file share. Azure Backup also allows you to do a vaulted backup (preview) of Azure Files to protect your data from ransomware attacks or source data loss due to a malicious actor or rogue admin. By using vaulted backup, Azure Backup copies and stores data in the Recovery Services vault. This creates an offsite copy of data that you can retain for up to 99 years. Azure Backup creates and manages the recovery points as per the schedule and retention defined in the backup policy. Learn more.",
"description": "Soft delete works on a file share level to protect Azure file shares against accidental deletion. Point-in-time restore protects against accidental deletion or corruption because you can restore file shares to an earlier state. For more information, see Data protection overview.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7011d46a-99b8-49ff-944e-26f5cc2b817c"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Apply an Azure Resource Manager lock on the storage account.",
"description": "Lock the account to prevent accidental or malicious deletion of the storage account, which can cause data loss.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "750b7241-5ddc-4a6a-9e06-0019d5d3dd99"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Open TCP port 445 outbound or set up a VPN gateway or Azure ExpressRoute connection for clients outside of Azure to access the file share.",
"description": "SMB 3.x is an internet-safe protocol, but you might not have the ability to change organizational or ISP policies. You can use a VPN gateway or an ExpressRoute connection as an alternative option.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "544aa9b7-1339-462b-b05d-423bfa23f160"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "If you open port 445, be sure to disable SMBv1 on Windows and Linux clients. Azure Files doesn't support SMB 1, but you should still disable it on your clients.",
"description": "SMB 1 is an outdated, inefficient, and insecure protocol. Disable it on clients to improve your security posture.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "68e6b6ec-0d1a-4b5b-b864-0a84684d9dd2"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Consider disabling public network access to your storage account. Enable public network access only if SMB clients and services that are external to Azure require access to your storage account. If you disable public network access,create a private endpoint for your storage account. Standard data processing rates for private endpoints apply. A private endpoint doesn't block connections to the public endpoint. You should still disable public network access as previously described. If you don't require a static IP address for your file share and want to avoid the cost of private endpoints, you can instead restrict public endpoint access to specific virtual networks and IP addresses.",
"description": "Network traffic travels over the Microsoft backbone network instead of the public internet, which eliminates risk exposure from the public internet.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "aa4bcf28-fe1b-487d-8aca-57a4ca53e481"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Enable firewall rules that limit access to specific virtual networks. Start with zero access, and then methodically and incrementally provide the least amount of access required for clients and services.",
"description": "Minimize the risk of creating openings for attackers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2c486988-91fe-46d6-bb1b-695f9c3f32bd"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "When possible, use identity-based authentication with AES-256 Kerberos ticket encryption to authorize access to SMB Azure file shares.",
"description": "Use identity-based authentication to decrease the possibility of an attacker using a storage account key to access file shares.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "66352a0c-5c71-46d4-85c5-b5097fe941a6"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "If you use storage account keys, store them in Key Vault, and make sure to regenerate them periodically. You can completely disallow storage account key access to the file share by removing NTLMv2 from the share's SMB security settings. But you generally shouldn't remove NTLMv2 from the share's SMB security settings because administrators still need to use the account key for some tasks.",
"description": "Use Key Vault to retrieve keys at runtime instead of saving them with your application. Key Vault also makes it easy to rotate your keys without interruption to your applications. Periodically rotate the account keys to reduce the risk of exposing your data to malicious attacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d39ad222-964f-4404-b8c4-bad919fca4ae"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "In most cases, you should enable the Secure transfer required option on all your storage accounts to enable encryption in transit for SMB file shares. Don't enable this option if you need to allow very old clients to access the share. If you disable secure transfer, be sure to use network controls to restrict traffic.",
"description": "This setting ensures that all requests that are made against the storage account take place over secure connections (HTTPS). Any requests made over HTTP will fail.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "536e86a5-e2ea-47a2-8853-82651ced1265"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Configure your storage account so that TLS 1.2 is the minimum version for clients to send and receive data.",
"description": "TLS 1.2 is more secure and faster than TLS 1.0 and 1.1, which don't support modern cryptographic algorithms and cipher suites.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "80854b65-9017-498a-9b12-9e5aa5d6b93b"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Use only the most recent supported SMB protocol version (currently 3.1.1.), and use only AES-256-GCM for SMB channel encryption. Azure Files exposes settings that you can use to toggle the SMB protocol and make it more compatible or more secure, depending on your organization's requirements. By default, all SMB versions are allowed. However, SMB 2.1 is disallowed if you enable Require secure transfer because SMB 2.1 doesn't support encryption of data in transit. If you restrict these settings to a high level of security, some clients might not be able to connect to the file share.",
"description": "SMB 3.1.1, released with Windows 10, contains important security and performance updates. AES-256-GCM offers more secure channel encryption.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "41a8d523-2cb4-499b-9a7f-e9cdc708e28e"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Apply a Resource Manager lock on the storage account.",
"description": "Lock the account to prevent accidental or malicious deletion of the storage account, which might cause data loss.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ca0d9179-144c-4ef2-a617-046f3983000e"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "You must open port 2049 on the clients that you want to mount your NFS share to.",
"description": "Open port 2049 to let clients communicate with the NFS Azure file share.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e6ee6652-c7bf-474b-b47e-e0d739e94901"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "NFS Azure file shares are only accessible through restricted networks. So you must create a private endpoint for your storage account or restrict public endpoint access to selected virtual networks and IP addresses. We recommend that you create a private endpoint. You must configure network-level security for NFS shares because Azure Files doesn't support encryption in transit with the NFS protocol. You need to disable the Require secure transfer setting on the storage account to use NFS Azure file shares. Standard data processing rates apply for private endpoints. If you don't require a static IP address for your file share and want to avoid the cost of private endpoints, you can restrict public endpoint access instead.",
"description": "Network traffic travels over the Microsoft backbone network instead of the public internet, which eliminates risk exposure from the public internet.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e79615fa-f453-43f7-b9db-e4564a08fa6e"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Consider disallowing storage account key access at the storage account level. You don't need this access to mount NFS file shares. But keep in mind that full administrative control of a file share, including the ability to take ownership of a file, requires use of a storage account key.",
"description": "Disallow the use of storage account keys to make your storage account more secure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5d1ca94b-ac1b-482c-922e-8ee47b9c7ba6"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "When you migrate to standard Azure file shares, we recommend that you start in the transaction-optimized tier during the initial migration. Transaction usage during migration isn't typically indicative of normal transaction usage. This consideration doesn't apply for premium file shares because the provisioned billing model doesn't charge for transactions.",
"description": "Migrating to Azure Files is a temporary, transaction-heavy workload. Optimize the price for high-transaction workloads to help reduce migration costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e9863488-d023-4763-a169-161d1dba4b02"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "After you migrate your workload, if you use standard file shares, carefully choose the most cost effective access tier for your file share: hot, cool, or transaction optimized. After you operate for a few days or weeks with regular usage, you can insert your transaction counts in the pricing calculator to figure out which tier best suits your workload. Most customers should choose cool even if they actively use the share. But you should examine each share and compare the balance of storage capacity to transactions to determine your tier. If transaction costs make up a significant percentage of your bill, the savings from using the cool access tier often offsets this cost and minimizes the total overall cost. We recommend that you move standard file shares between access tiers only when necessary to optimize for changes in your workload pattern. Each move incurs transactions. For more information, see Switching between standard tiers.",
"description": "Select the appropriate access tier for standard file shares to considerably reduce your costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "51b872e9-5fcd-44eb-931f-9a249e459e65"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "If you use premium shares, ensure that you provision more than enough capacity and performance for your workload but not so much that you incur unnecessary costs. We recommend overprovisioning by two to three times. You can dynamically scale premium file shares up or down depending on your storage and input/output (IO) performance characteristics.",
"description": "Overprovision premium file shares by a reasonable amount to help maintain performance and account for future growth and performance requirements.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "534d8587-584b-4b2c-b671-3effdcbd01be"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "Use Azure Files reservations, also referred to as reserved instances, to precommit to storage usage and get a discount. Use reservations for production workloads or dev/test workloads with consistent footprints. For more information, see Optimize costs with storage reservations. Reservations don't include transaction, bandwidth, data transfer, and metadata storage charges.",
"description": "Three-year reservations can provide a discount up to 36% on the total cost of file storage. Reservations don't affect performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e2101858-bba3-4f27-b2b6-aa5c34bce700"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "Monitor snapshot usage. Snapshots incur charges, but they're billed based on the differential storage usage of each snapshot. You pay only for the difference in each snapshot. For more information, see Snapshots. Azure File Sync takes share-level and file-level snapshots as part of regular usage, which can increase your total Azure Files bill.",
"description": "Differential snapshots ensure that you're not billed multiple times for storing the same data. However, you should still monitor snapshot usage to help reduce your Azure Files bill.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "92ac1897-48f1-4f92-8305-462072504522"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "Set retention periods for the soft-delete feature, especially when you first start using it. Consider starting with a short retention period to better understand how the feature affects your bill. The minimum recommended retention period is seven days. When you soft delete standard and premium file shares, they're billed as used capacity rather than provisioned capacity. And premium file shares are billed at the snapshot rate while in the soft-delete state. Standard file shares are billed at the regular rate while in the soft-delete state.",
"description": "Set a retention period so that soft-deleted files don't pile up and increase the cost of capacity. After the configured retention period, permanently deleted data doesn't incur cost.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "06ba65dd-f706-428a-9e28-f25b2239e603"
},
{
"waf": "Operations",
"service": "Azure Files",
"text": "Use infrastructure as code (IaC) to define the details of your storage accounts in Azure Resource Manager templates (ARM templates), Bicep, or Terraform.",
"description": "You can use your existing DevOps processes to deploy new storage accounts, and use Azure Policy to enforce their configuration.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a40b648a-7c87-45d0-815b-47495a2b0e01"
},
{
"waf": "Operations",
"service": "Azure Files",
"text": "Use Storage insights to track the health and performance of your storage accounts. Storage insights provides a unified view of the failures, performance, availability, and capacity for all your storage accounts.",
"description": "You can track the health and operation of each of your accounts. Easily create dashboards and reports that stakeholders can use to track the health of your storage accounts.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f63aa6ba-25c6-49be-bda2-0c51c1d571b5"
},
{
"waf": "Operations",
"service": "Azure Files",
"text": "Use Monitor to analyze metrics, such as availability, latency, and usage, and to create alerts.",
"description": "Monitor provides a view of availability, performance, and resiliency for your file shares.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "15160eee-b0c3-48cd-ba6d-0f8577ffcd61"
},
{
"waf": "Performance",
"service": "Azure Files",
"text": "Enable SMB Multichannel for premium SMB file shares. SMB Multichannel allows an SMB 3.1.1 client to establish multiple network connections to an SMB Azure file share. SMB Multichannel only works when the feature is enabled on both client-side (your client) and service-side (Azure). On Windows clients, SMB Multichannel is enabled by default, but you need to enable it on your storage account.",
"description": "Increase throughput and IOPS while reducing the total cost of ownership. Performance benefits increase with the number of files that distribute load.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "daf30eda-f801-45ee-be0e-03d46dc88f79"
},
{
"waf": "Performance",
"service": "Azure Files",
"text": "Use the nconnect client-side mount option with NFS Azure file shares on Linux clients. Nconnect enables you to use more TCP connections between the client and the Azure Files premium service for NFSv4.1.",
"description": "Increase performance at scale, and reduce the total cost of ownership for NFS file shares.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9efba372-db55-473f-a8bb-26f0c718612f"
},
{
"waf": "Performance",
"service": "Azure Files",
"text": "Make sure your file share or storage account isn't being throttled, which can result in high latency, low throughput, or low IOPS. Requests are throttled when the IOPS, ingress, or egress limits are reached. For standard storage accounts, throttling occurs at the account level. For premium file shares, throttling usually occurs at the share level.",
"description": "Avoid throttling to provide the best possible client experience.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6da39eb6-e932-4c5a-a2f2-6b728108cd7b"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -272,6 +301,6 @@
"name": "Azure Files Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azurefirewall_sg_checklist.en.json b/checklists-ext/azurefirewall_sg_checklist.en.json
index 102737ef9..9e2710dc2 100644
--- a/checklists-ext/azurefirewall_sg_checklist.en.json
+++ b/checklists-ext/azurefirewall_sg_checklist.en.json
@@ -6,355 +6,401 @@
"service": "Azure Firewall",
"text": "Use Azure Firewall Manager with traditional Hub & Spokes or Azure Virtual WAN network topologies to deploy and manage instances of Azure Firewall.",
"description": "Easily create hub-and-spoke and transitive architectures with native security services for traffic governance and protection. For more information on network topologies, see the Azure Cloud Adoption Framework documentation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "906a66c0-f3fc-4766-bcc9-f483a13302d0"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Create Azure Firewall Policies to govern the security posture across global network environments. Assign policies to all instances of Azure Firewall.",
"description": "Azure Firewall Policies can be arranged in an hierarchical structure to overlay a central base policy. Allow for granular policies to meet the requirements of specific regions. Delegate incremental firewall policies to local security teams through role-based access control (RBAC). Some settings are specific per instance, for example DNAT Rules and DNS configuration, then multiple specialized policies might be required.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "02b98555-573c-44ff-b81b-8cf4d6c246c3"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Migrate Azure Firewall Classic Rules to Azure Firewall Manager Policies for existing deployments.",
"description": "For existing deployments, migrate Azure Firewall rules to Azure Firewall Manager policies. Use Azure Firewall Manager to centrally manage your firewalls and policies. For more information, see Migrate to Azure Firewall Premium.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d122223e-4634-4b87-8736-1fe446f2dc4b"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Review the list of Azure Firewall Known Issues.",
"description": "Azure Firewall Product Group maintains an updated list of known-issues at this location. This list contains important information related to by-design behavior, fixes under construction, platform limitations, along with possible workarounds or mitigation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7aa2c745-40cd-494b-a465-e3f57aa5db89"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Ensure your Azure Firewall Policy adheres to Azure Firewall limits and recommendations.",
"description": "There are limits on the policy structure, including numbers of Rules and Rule Collection Groups, total policy size, source/target destinations. Be sure to compose your policy and stay behind the documented thresholds.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a5d749c4-2d8f-4503-89d8-d09590d0cb75"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Deploy Azure Firewall across multiple availability zones for higher service-level agreement (SLA).",
"description": "Azure Firewall provides different SLAs when it's deployed in a single availability zone and when it's deployed in multiple zones. For more information, see SLA for Azure Firewall. For information about all Azure SLAs, see SLA summary for Azure services.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2abbe12f-832c-4c12-9ef2-7b5941de0d1c"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "In multi-region environments, deploy an Azure Firewall instance per region.",
"description": "For traditional Hub & Spokes architectures, multi-region details are explained in this article. For secured virtual hubs (Azure Virtual WAN), Routing Intent and Policies must be configured to secure inter-hub and branch-to-branch communications. For workloads designed to be resistant to failures and fault tolerant, remember to consider that instances of Azure Firewall and Azure Virtual Network as regional resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a5a128ef-71f4-4001-8cd8-01afdf78ed87"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Monitor Azure Firewall Metrics and Resource Health state.",
"description": "Closely monitor key metrics indicator of Azure Firewall health state such as Throughput, Firewall health state, SNAT port utilization and AZFW Latency Probe metrics. Additionally, Azure Firewall now integrates with Azure Resource Health. With the Azure Firewall Resource Health check, you can now view the health status of your Azure Firewall and address service problems that might affect your Azure Firewall resource.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b2e9619a-7495-4f85-8baf-1cf06575a966"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "If required to route all internet-bound traffic to a designated next hop instead of going directly to the internet, configure Azure Firewall in forced tunneling mode (does not apply to Azure Virtual WAN).",
"description": "Azure Firewall must have direct internet connectivity. If your AzureFirewallSubnet learns a default route to your on-premises network via the Border Gateway Protocol, you must configure Azure Firewall in the forced tunneling mode. Using the forced tunneling feature, you'll need another /26 address space for the Azure Firewall Management subnet. You're required to name it AzureFirewallManagementSubnet.If this is an existing Azure Firewall instance that can't be reconfigured in the forced tunneling mode, create a UDR with a 0.0.0.0/0 route. Set the NextHopType value as Internet. Associate it with AzureFirewallSubnet to maintain internet connectivity.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "77e598e8-9cf8-43d0-931f-4ad1cedfee4a"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Set the public IP address to None to deploy a fully private data plane when you configure Azure Firewall in the forced tunneling mode (does not apply to Azure Virtual WAN).",
"description": "When you deploy a new Azure Firewall instance, if you enable the forced tunneling mode, you can set the public IP address to None to deploy a fully private data plane. However, the management plane still requires a public IP for management purposes only. The internal traffic from virtual and on-premises networks won't use that public IP. For more about forced tunneling, see Azure Firewall forced tunneling.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dbc69891-14e6-428c-adca-cd11b01d9226"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Create rules for Firewall Policies based on least privilege access criteria.",
"description": "Azure Firewall Policies can be arranged in an hierarchical structure to overlay a central base policy. Allow for granular policies to meet the requirements of specific regions. Each policy can contains different sets of DNAT, Network and Application rules with specific priority, action and processing order. Create your rules based on least privilege access Zero Trust principle . How rules are processed is explained in this article.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a25be6b5-03c3-4bee-a348-ba338419ee17"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Enable IDPS in Alert or Alert and deny mode.",
"description": "IDPS is one of the most powerful Azure Firewall (Premium) security features and should be enabled. Based on security and application requirements, and considering the performance impact (see the Cost section below), Alert or Alert and deny modes can be selected.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5c7fbe3b-1d6d-49c4-bed1-2ac02ec15444"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Enable Azure Firewall (DNS) proxy configuration.",
"description": "Enabling this feature points clients in the VNets to Azure Firewall as a DNS server. It will protect internal DNS infrastructure that will not be directly accessed and exposed. Azure Firewall must be also configured to use custom DNS that will be used to forward DNS queries.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1ed3e1a5-0748-4ae3-92c4-61cdc805a881"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Configure user-defined routes (UDR) to force traffic through Azure Firewall.",
"description": "In a traditional Hub & Spokes architecture, configure UDRs to force traffic through Azure Firewall for `SpoketoSpoke`, `SpoketoInternet`, and `SpoketoHybrid` connectivity. In Azure Virtual WAN, instead, configure Routing Intent and Policies to redirect private and/or Internet traffic through the Azure Firewall instance integrated into the hub.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "219a0f29-198c-43ff-86b6-dd5887856c9f"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "If not possible to apply UDR, and only web traffic redirection is required, consider using Azure Firewall as an Explicit Proxy",
"description": "With explicit proxy feature enabled on the outbound path, you can configure a proxy setting on the sending web application (such as a web browser) with Azure Firewall configured as the proxy. As a result, web traffic will reach the firewall's private IP address and therefore egresses directly from the firewall without using a UDR. This feature also facilitates the usage of multiple firewalls without modifying existing network routes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4ba66379-9878-42b4-bc50-d6495cf000b4"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Configure supported third-party software as a service (SaaS) security providers within Firewall Manager if you want to use these solutions to protect outbound connections.",
"description": "You can use your familiar, best-in-breed, third-party SECaaS offerings to protect internet access for your users. This scenario does require Azure Virtual WAN with a S2S VPN Gateway in the Hub, as it uses an IPSec tunnel to connect to the provider's infrastructure. SECaaS providers might charge additional license fees and limit throughput on IPSec connections. Alternative solutions such as ZScaler Cloud Connector exist and might be more suitable.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0e0c6a0a-0627-47cc-8581-34280d7d4cba"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use Fully Qualified Domain Name (FQDN) filtering in network rules.",
"description": "You can use FQDN based on DNS resolution in Azure Firewall and firewall policies. This capability allows you to filter outbound traffic with any TCP/UDP protocol (including NTP, SSH, RDP, and more). You must enable the Azure Firewall DNS Proxy configuration to use FQDNs in your network rules. To learn how it works, see Azure Firewall FQDN filtering in network rules.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f6b95447-f9b8-46e0-b068-f9116791466d"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use Service Tags in Network Rules to enable selective access to specific Microsoft services.",
"description": "A service tag represents a group of IP address prefixes to help minimize complexity for security rule creation. Using Service Tags in Network Rules, it is possible to enable outbound access to specific services in Azure, Dynamics and Office 365 without opening wide ranges of IP addresses. Azure will maintain automatically the mapping between these tags and underlying IP addresses used by each service. The list of Service Tags available to Azure Firewall are listed here: Az Firewall Service Tags.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "101e4c48-234c-48fb-84a2-f23915ecbf15"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use FQDN Tags in Application Rules to enable selective access to specific Microsoft services.",
"description": "An FQDN tag represents a group of fully qualified domain names (FQDNs) associated with well known Microsoft services. You can use an FQDN tag in application rules to allow the required outbound network traffic through your firewall for some specific Azure services, Office 365, Windows 365 and Intune.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "88d9e6f8-4f96-4c83-9268-b3f7cfbd0559"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use Azure Firewall Manager to create and associate a DDoS protection plan with your hub virtual network (does not apply to Azure Virtual WAN).",
"description": "A DDoS protection plan provides enhanced mitigation features to defend your firewall from DDoS attacks. Azure Firewall Manager is an integrated tool to create your firewall infrastructure and DDoS protection plans. For more information, see Configure an Azure DDoS Protection Plan using Azure Firewall Manager.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6681988b-11df-4ea7-aee0-f7d5a1335ae0"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use an Enterprise PKI to generate certificates for TLS Inspection.",
"description": "With Azure Firewall Premium, if TLS Inspection feature is used, it is recommended to leverage an internal Enterprise Certification Authority (CA) for production environment. Self-signed certificates should be used for testing/PoC purposes only.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d6f023f6-dd16-4f48-9da7-18d0e0b0ef5b"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Review Zero-Trust configuration guide for Azure Firewall and Application Gateway",
"description": "If your security requirements necessitate implementing a Zero-Trust approach for web applications (inspection and encryption), it is recommended to follow this guide. In this document, how to integrate together Azure Firewall and Application Gateway will be explained, in both traditional Hub & Spoke and Virtual WAN scenarios.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "72a05358-270e-4985-878d-3f638d2bfbf2"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Deploy the proper Azure Firewall SKU.",
"description": "Azure Firewall can be deployed in three different SKUs: Basic, Standard and Premium. Azure Firewall Premium is recommended to secure highly sensitive applications (such as payment processing). Azure Firewall Standard is recommended for customers looking for Layer 3\u2013Layer 7 firewall and needs autoscaling to handle peak traffic periods of up to 30 Gbps. Azure Firewall Basic is recommended for SMB customers with throughput needs of 250 Mbps. If required, downgrade or upgrade is possible between Standard and Premium as documented here. For more information, see Choose the right Azure Firewall SKU to meet your needs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "32d1cc86-0c04-4c38-be59-14e6bbe3d020"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Stop Azure Firewall deployments that don't need to run for 24x7.",
"description": "You might have development or testing environments that are used only during business hours. For more information, see Deallocate and allocate Azure Firewall.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "27745055-45fb-4108-89af-a63b1170f7d6"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Share the same instance of Azure Firewall across multiple workloads and Azure Virtual Networks.",
"description": "You can use a central instance of Azure Firewall in the hub virtual network or Virtual WAN secure hub and share the same firewall across many spoke virtual networks that are connected to the same hub from the same region. Ensure there's no unexpected cross-region traffic as part of the hub-spoke topology.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "90ed4bf4-2371-4a63-bea1-c5c5005e4f08"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Regularly review traffic processed by Azure Firewall and look for originating workload optimizations",
"description": "Top Flows log (known in the industry as Fat Flows), shows the top connections that are contributing to the highest throughput through the firewall. It is recommended to regularly review traffic processed by the Azure Firewall and search for possible optimizations to reduce the amount of traffic traversing the firewall.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1020c3ff-e072-4de9-98d8-7c38bce266b9"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Review under-utilized Azure Firewall instances. Identify and delete unused Azure Firewall deployments.",
"description": "To identify unused Azure Firewall deployments, start by analyzing the monitoring metrics and UDRs associated with subnets pointing to the firewall's private IP. Combine that information with other validations, such as if your instance of Azure Firewall has any rules (classic) for NAT, Network and Application, or even if the DNS Proxy setting is configured to Disabled, and with internal documentation about your environment and deployments. You can detect deployments that are cost-effective over time. For more information about monitoring logs and metrics, see Monitor Azure Firewall logs and metrics and SNAT port utilization.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b4581201-7d7a-41b0-ab7d-cacdb77d6cfa"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Use Azure Firewall Manager and its Policies to reduce operational costs, increase efficiency, and reduce management overhead.",
"description": "Review your Firewall Manager policies, associations, and inheritance carefully. Policies are billed based on firewall associations. A policy with zero or one firewall association is free of charge. A policy with multiple firewall associations is billed at a fixed rate.For more information, see Pricing - Azure Firewall Manager.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4f9685b1-7f7e-413b-a5c8-03b734e9eade"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Delete unused public IP addresses.",
"description": "Validate whether all the associated public IP addresses are in use. If they aren't in use, disassociate and delete them. Evaluate SNAT port utilization before removing any IP addresses.You'll only use the number of public IPs your firewall needs. For more information, see Monitor Azure Firewall logs and metrics and SNAT port utilization.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7f7ce673-1cff-42f8-8deb-7f018d7ceb20"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Review logging requirements.",
"description": "Azure Firewall has the ability to comprehensively log metadata of all traffic it sees, to Log Analytics Workspaces, Storage or third party solutions through Event Hubs. However, all logging solutions incur costs for data processing and storage. At very large volumes these costs can be significant, a cost effective approach and alternative to Log Analytics should be considered and cost estimated. Consider whether it is required to log traffic metadata for all logging categories and modify in Diagnostic Settings if needed.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e0e0d21e-8a8c-4a88-b714-b7eff11570c7"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Do not use Azure Firewall for intra-VNet traffic control.",
"description": "Azure Firewall should be used to control traffic across VNets, between VNets and on-premises networks, outbound traffic to the Internet and incoming non-HTTP/s traffic. For intra-VNet traffic control, it is recommended to use Network Security Groups.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e94d1a6f-cfb1-4fd9-8f48-ad6cb7065081"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Maintain regular backups of Azure Policy artifacts.",
"description": "If Infrastructure-as-Code (IaC) approach is used to maintain Azure Firewall and all dependencies then backup and versioning of Azure Firewall Policies should be already in place. If not, a companion mechanism based on external Logic App can be deployed to automate and provide an effective solution.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b0219e9d-82f0-4760-bc2a-4d8909636794"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Enable Diagnostic Logs for Azure Firewall.",
"description": "Diagnostic Logs is a key component for many monitoring tools and strategies for Azure Firewall and should be enabled. You can monitor Azure Firewall by using firewall logs or workbooks. You can also use activity logs for auditing operations on Azure Firewall resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3cffb79e-0a6b-4dad-b781-d17d1e270127"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Use Structured Firewall Logs format.",
"description": "Structured Firewall Logs are a type of log data that are organized in a specific new format. They use a predefined schema to structure log data in a way that makes it easy to search, filter, and analyze. The latest monitoring tools are based on this type of logs hence it is often a pre-requisite. Use the previous Diagnostic Logs format only if there is an existing tool with a pre-requisite on that. Do not enable both logging formats at the same time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a66b781d-3445-4076-8c69-4b9dcd2bded5"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Use the built-in Azure Firewall Monitoring Workbook.",
"description": "Azure Firewall portal experience now includes a new workbook under the Monitoring section UI, a separate installation is no more required. With the Azure Firewall Workbook, you can extract valuable insights from Azure Firewall events, delve into your application and network rules, and examine statistics regarding firewall activities across URLs, ports, and addresses.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "60a9b0b2-a45c-4012-a059-18430a4c7ad3"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Monitor key metrics and create alerts for indicators of the utilization of Azure Firewall capacity.",
"description": "Alerts should be created to monitor at least Throughput, Firewall health state, SNAT port utilization and AZFW Latency Probe metrics.For information about monitoring logs and metrics, see Monitor Azure Firewall logs and metrics.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4c65a0f6-ea2d-46e8-bba3-9b8dea771bb8"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Configure Azure Firewall integration with Microsoft Defender for Cloud and Microsoft Sentinel.",
"description": "If these tools are available in the environment, it is recommended to leverage integration with Microsoft Defender for Cloud and Microsoft Sentinel solutions. With Microsoft Defender for Cloud integration, you can visualize the all-up status of network infrastructure and network security in one place, including Azure Network Security across all VNets and Virtual Hubs spread across different regions in Azure. Integration with Microsoft Sentinel provides threat detection and prevention capabilities.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bba04e81-c422-427b-b203-350c1d3a724a"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Regularly review Policy Analytics dashboard to identify potential issues.",
"description": "Policy Analytics is a new feature that provides insights into the impact of your Azure Firewall policies. It helps you identify potential issues (hitting policy limits, low utilization rules, redundant rules, rules too generic, IP Groups usage recommendation) in your policies and provides recommendations to improve your security posture and rule processing performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b171bd4a-f474-4249-b450-0f09e8fd9ded"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Become familiar with KQL (Kusto Query Language) queries to allow quick analysis and troubleshooting using Azure Firewall logs.",
"description": "Sample queries are provided for Azure Firewall. Those will enable you to quickly identify what's happening inside your firewall and check to see which rule was triggered, or which rule is allowing/blocking a request.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "acfff57b-8cbb-4643-bb47-c8ada4c360cd"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Use Policy Analytics dashboard to identify potential optimizations for Firewall Policies.",
"description": "Policy Analytics is a new feature that provides insights into the impact of your Azure Firewall policies. It helps you identify potential issues (hitting policy limits, low utilization rules, redundant rules, rules too generic, IP Groups usage recommendation) in your policies and provides recommendations to improve your security posture and rule processing performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5997898f-94eb-41bf-831c-64768c577d59"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Consider Web Categories to allow or deny outbound access in bulk.",
"description": "Instead of explicitly building and maintaining a long list of public Internet sites, consider the usage of Azure Firewall Web Categories. This feature will dynamically categorize web content and will permit the creation of compact Application Rules.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a413ad7f-d747-401c-8b4d-f670e1a500fd"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Evaluate the performance impact of IDPS in Alert and deny mode.",
"description": "If Azure Firewall is required to operate in IDPS mode Alert and deny, carefully consider the performance impact as documented in this page.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b3794bbc-ca9f-46c2-b857-e3c369b2a2ee"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Assess potential SNAT port exhaustion problem.",
"description": "Azure Firewall currently supports 2496 ports per Public IP address per backend Virtual Machine Scale Set instance. By default, there are two Virtual Machine Scale Set instances. So, there are 4992 ports per flow destination IP, destination port and protocol (TCP or UDP). The firewall scales up to a maximum of 20 instances. You can work around the limits by configuring Azure Firewall deployments with a minimum of five public IP addresses for deployments susceptible to SNAT exhaustion.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8ebc6c2c-afad-475f-bf6f-87fb04a32cbb"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Properly warm up Azure Firewall before any performance test.",
"description": "Create initial traffic that isn't part of your load tests 20 minutes before the test. Use diagnostics settings to capture scale-up and scale-down events. You can use the Azure Load Testing service to generate the initial traffic. Allows the Azure Firewall instance to scale up its instances to the maximum.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d4359622-ee34-46fe-84bd-c123458b7ddb"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Configure an Azure Firewall subnet (AzureFirewallSubnet) with a /26 address space.",
"description": "Azure Firewall is a dedicated deployment in your virtual network. Within your virtual network, a dedicated subnet is required for the instance of Azure Firewall. Azure Firewall provisions more capacity as it scales.A /26 address space for its subnets ensures that the firewall has enough IP addresses available to accommodate the scaling. Azure Firewall doesn't need a subnet bigger than /26. The Azure Firewall subnet name must be AzureFirewallSubnet.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "853d3967-f7e9-4019-bb9b-07957fb885b3"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Do not enable advanced logging if not required",
"description": "Azure Firewall provides some advanced logging capabilities that can be expensive to maintain always active. Instead, they should be used for troubleshooting purposes only, and limited in duration, then disabled when no more necessary. For example, Top flows and Flow trace logs are expensive can cause excessive CPU and storage usage on the Azure Firewall infrastructure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "62b90b2f-195d-4897-9537-e1164449b0d6"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -391,6 +437,6 @@
"name": "Azure Firewall Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azurefrontdoor_sg_checklist.en.json b/checklists-ext/azurefrontdoor_sg_checklist.en.json
index 32f6d81d0..b4a83f638 100644
--- a/checklists-ext/azurefrontdoor_sg_checklist.en.json
+++ b/checklists-ext/azurefrontdoor_sg_checklist.en.json
@@ -6,187 +6,209 @@
"service": "Azure Front Door",
"text": "Choose a routing method that supports your deployment strategy. The weighted method, which distributes traffic based on the configured weight coefficient, supports active-active models. A priority-based value that configures the primary region to receive all traffic and send traffic to the secondary region as a backup supports active-passive models. Combine the preceding methods with latency so that the origin with the lowest latency receives traffic.",
"description": "You can select the best origin resource by using a series of decision steps and your design. The selected origin serves traffic within the allowable latency range in the specified ratio of weights.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "12a2b704-aab5-49b9-b49f-d7b56d80611c"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Support redundancy by having multiple origins in one or more back-end pools. Always have redundant instances of your application and make sure each instance exposes an endpoint or origin. You can place those origins in one or more back-end pools.",
"description": "Multiple origins support redundancy by distributing traffic across multiple instances of the application. If one instance is unavailable, then other back-end origins can still receive traffic.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dbcc6d21-7f71-42d8-b10b-00ba5c152bd6"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Set up health probes on the origin. Configure Azure Front Door to conduct health checks to determine if the back-end instance is available and ready to continue receiving requests.",
"description": "Enabled health probes are part of the health monitoring pattern implementation. Health probes make sure that Azure Front Door only routes traffic to instances that are healthy enough to handle requests. For more information, see Best practices on health probes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f08c4574-a85c-4d77-adbc-6c85fc0aad9f"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Set a timeout on forwarding requests to the back end. Adjust the timeout setting according to your endpoints' needs. If you don't, Azure Front Door might close the connection before the origin sends the response. You can also lower the default timeout for Azure Front Door if all of your origins have a shorter timeout. For more information, see Troubleshooting unresponsive requests.",
"description": "Timeouts help prevent performance issues and availability issues by terminating requests that take longer than expected to complete.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a5ab698c-0a9f-4f84-b3db-513067920964"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Use the same host name on Azure Front Door and your origin. Azure Front Door can rewrite the host header of incoming requests, which is useful when you have multiple custom domain names that route to one origin. However, rewriting the host header might cause issues with request cookies and URL redirection.",
"description": "Set the same host name to prevent malfunction with session affinity, authentication, and authorization. For more information, see Preserve the original HTTP host name between a reverse proxy and its back-end web application.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5efdb592-6276-45eb-a9d4-1cf161cb5c42"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Decide if your application requires session affinity. If you have high reliability requirements, we recommend that you disable session affinity.",
"description": "With session affinity, user connections stay on the same origin during the user session. If that origin becomes unavailable, the user experience might be disrupted.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d494b3a0-08a0-4127-8376-1f5b6c37ecd2"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Take advantage of the rate-limiting rules that are included with a web application firewall (WAF).",
"description": "Limit requests to prevent clients from sending too much traffic to your application. Rate limiting can help you avoid problems like a retry storm.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "02733e65-a72a-4757-b58e-b9f1b3dbd900"
},
{
"waf": "Security",
"service": "Azure Front Door",
"text": "Enable WAF rule sets that detect and block potentially malicious traffic. This feature is available on the Premium tier. We recommend these rule sets: - Default- Bot protection- IP restriction- Geo-filtering- Rate limiting",
"description": "Default rule sets are updated frequently based on OWASP top-10 attack types and information from Microsoft Threat Intelligence. The specialized rule sets detect certain use cases. For example, bot rules classify bots as good, bad, or unknown based on the client IP addresses. They also block bad bots and known IP addresses and restrict traffic based on geographical location of the callers. By using a combination of rule sets, you can detect and block attacks with various intents.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "35b03d1d-e28e-4b7f-803b-6afb23c6133d"
},
{
"waf": "Security",
"service": "Azure Front Door",
"text": "Create exclusions for managed rule sets. Test a WAF policy in detection mode for a few weeks and adjust any false positives before you deploy it.",
"description": "Reduce false positives and allow legitimate requests for your application.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e1cecbea-d7ab-4d0f-92e1-921716dac3ae"
},
{
"waf": "Security",
"service": "Azure Front Door",
"text": "Enable end-to-end TLS, HTTP to HTTPS redirection, and managed TLS certificates when applicable. Review the TLS best practices for Azure Front Door. Use TLS version 1.2 as the minimum allowed version with ciphers that are relevant for your application. Azure Front Door managed certificates should be your default choice for ease of operations. However, if you want to manage the lifecycle of the certificates, use your own certificates in Azure Front Door custom domain endpoints and store them in Key Vault.",
"description": "TLS ensures that data exchanges between the browser, Azure Front Door, and the back-end origins are encrypted to prevent tampering. Key Vault offers managed certificate support and simple certificate renewal and rotation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "57b20099-1ae5-49de-8fe6-94af34380e64"
},
{
"waf": "Cost",
"service": "Azure Front Door",
"text": "Use caching for endpoints that support it.",
"description": "Caching optimizes data transfer costs because it reduces the number of calls from your Azure Front Door instance to the origin.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8c52f54e-5d37-4213-aa1c-aaefbaeac682"
},
{
"waf": "Cost",
"service": "Azure Front Door",
"text": "Consider enabling file compression. For this configuration, the application must support compression and caching must be enabled.",
"description": "Compression reduces bandwidth consumption and improves performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d040a66a-36ee-4dc5-b016-375e71dc937f"
},
{
"waf": "Cost",
"service": "Azure Front Door",
"text": "Disable health checks in single back-end pools.If you have only one origin configured in your Azure Front Door origin group, these calls are unnecessary.",
"description": "You can save on bandwidth costs by disabling requests that aren't required to make routing decisions.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8a9a1107-82b2-4fad-b914-ef3348b41b29"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Use HTTP to HTTPS redirection to support forward compatibility.",
"description": "When redirection is enabled, Azure Front Door automatically redirects clients that are using older protocol to use HTTPS for a secure experience.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "65b1c346-16af-4e5a-b465-f51094135758"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Capture logs and metrics. Include resource activity logs, access logs, health probe logs, and WAF logs. Set up alerts.",
"description": "Monitoring ingress flow is a crucial part of monitoring an application. You want to track requests and make performance and security improvements. You need data to debug your Azure Front Door configuration. With alerts in place, you can get instant notifications of any critical operational issues.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7d54b85e-638e-4a4b-b59e-e570a7cbf6bc"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Review the built-in analytics reports.",
"description": "A holistic view of your Azure Front Door profile helps drive improvements based on traffic and security reports through WAF metrics.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "095f1b55-569d-4964-b9e3-81d8cadedf94"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Use managed TLS certificates when possible.",
"description": "Azure Front Door can issue and manage certificates for you. This feature eliminates the need for certificate renewals and minimizes the risk of an outage due to an invalid or expired TLS certificate.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e0f192c1-fd21-407f-a3c8-16bd275dabfe"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Use wildcard TLS certificates.",
"description": "You don't need to modify the configuration to add or specify each subdomain separately.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e54684f1-f16b-4ed4-bc10-e9a0e411939e"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "Enable caching. You can optimize query strings for caching. For purely static content, ignore query strings to maximize your use of the cache. If your application uses query strings, consider including them in the cache key. Including the query strings in the cache key allows Azure Front Door to serve cached responses or other responses, based on your configuration.",
"description": "Azure Front Door offers a robust content delivery network solution that caches content at the edge of the network. Caching reduces the load on the back-end servers and reduces data movement across the network, which helps offload bandwidth usage.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "aebbe719-6eac-4192-90d5-2b5de6e28861"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "Use file compression when you're accessing downloadable content.",
"description": "Compression in Azure Front Door helps deliver content in the optimal format, has a smaller payload, and delivers content to the users faster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "eabc1f38-71e5-4af6-b31b-5b60508460f6"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "When you configure health probes in Azure Front Door, consider using `HEAD` requests instead of `GET` requests. The health probe reads only the status code, not the content.",
"description": "`HEAD` requests let you query a state change without fetching its entire content.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e1b9b5a3-569c-4dc2-a2dc-a453879eeadf"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "Evaluate whether you should enable session affinity when requests from the same user should be directed to the same back-end server. From a reliability perspective, we don't recommend this approach. If you use this option, the application should gracefully recover without disrupting user sessions. There's also a tradeoff on load balancing because it restricts the flexibility of distributing traffic across multiple back ends evenly.",
"description": "Optimize performance and maintain continuity for user sessions, especially when applications rely on maintaining state information locally.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "908b9efc-df91-432a-ad42-0babc1316896"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -223,6 +245,6 @@
"name": "Azure Front Door Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azurekubernetesservice_sg_checklist.en.json b/checklists-ext/azurekubernetesservice_sg_checklist.en.json
index 568262eb5..7aba70a60 100644
--- a/checklists-ext/azurekubernetesservice_sg_checklist.en.json
+++ b/checklists-ext/azurekubernetesservice_sg_checklist.en.json
@@ -6,390 +6,441 @@
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Control pod scheduling using node selectors and affinity.",
"description": "Allows the Kubernetes scheduler to logically isolate workloads by hardware in the node. Unlike tolerations, pods without a matching node selector can be scheduled on labeled nodes, which allows unused resources on the nodes to consume, but gives priority to pods that define the matching node selector. Use node affinity for more flexibility, which allows you to define what happens if the pod can't be matched with a node.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "97e853ae-0f0c-4af9-9efd-bd97419c00e0"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Ensure proper selection of network plugin based on network requirements and cluster sizing.",
"description": "Azure CNI is required for specific scenarios, for example, Windows-based node pools, specific networking requirements and Kubernetes Network Policies. Reference Kubenet versus Azure CNI for more information.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5c5d171c-e58a-430d-a2cc-38b46f773646"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Use the AKS Uptime SLA for production grade clusters.",
"description": "The AKS Uptime SLA guarantees: - `99.95%` availability of the Kubernetes API server endpoint for AKS Clusters that use Azure Availability Zones, or - `99.9%` availability for AKS Clusters that don't use Azure Availability Zones.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5a34db1f-70ba-41df-89ff-8dcac4e78fd9"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Configure monitoring of cluster with Container insights.",
"description": "Container insights help monitor the health and performance of controllers, nodes, and containers that are available in Kubernetes through the Metrics API. Integration with Prometheus enables collection of application and workload metrics.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "685d2330-e8f1-4201-bc45-fd74617cc28b"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use availability zones to maximize resilience within an Azure region by distributing AKS agent nodes across physically separate data centers.",
"description": "By spreading node pools across multiple zones, nodes in one node pool will continue running even if another zone has gone down. If colocality requirements exist, either a regular VMSS-based AKS deployment into a single zone or proximity placement groups can be used to minimize internode latency.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0d5115bc-7fbb-4fdb-a645-fee3c75d91a4"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Adopt a multiregion strategy by deploying AKS clusters deployed across different Azure regions to maximize availability and provide business continuity.",
"description": "Internet facing workloads should leverage Azure Front Door or Azure Traffic Manager to route traffic globally across AKS clusters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "006656dc-4514-447f-8472-40590ba7d6ad"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Define Pod resource requests and limits in application deployment manifests, and enforce with Azure Policy.",
"description": "Container CPU and memory resource limits are necessary to prevent resource exhaustion in your Kubernetes cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "daae16b3-339a-4f9c-a2e1-16437f2b39b0"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Keep the System node pool isolated from application workloads.",
"description": "System node pools require a VM SKU of at least 2 vCPUs and 4 GB memory, but 4 vCPU or more is recommended. Reference System and user node pools for detailed requirements.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8482ef12-2aa4-41ac-a90f-a41988abef7e"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Separate applications to dedicated node pools based on specific requirements.",
"description": "Applications may share the same configuration and need GPU-enabled VMs, CPU or memory optimized VMs, or the ability to scale-to-zero. Avoid large number of node pools to reduce extra management overhead.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d7fe91f7-0a16-43cc-9306-dc3c8f435698"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use a NAT gateway for clusters that run workloads that make many concurrent outbound connections.",
"description": "To avoid reliability issues with Azure Load Balancer limitations with high concurrent outbound traffic, us a NAT Gateway instead to support reliable egress traffic at scale.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "39c79408-332f-449d-8c22-308c4eee21d2"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Microsoft Entra integration.",
"description": "Using Microsoft Entra ID centralizes the identity management component. Any change in user account or group status is automatically updated in access to the AKS cluster. The developers and application owners of your Kubernetes cluster need access to different resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "50fb3fc8-14f2-4856-bb4e-4af6cadfeabe"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Authenticate with Microsoft Entra ID to Azure Container Registry.",
"description": "AKS and Microsoft Entra ID enables authentication with Azure Container Registry without the use of `imagePullSecrets` secrets. Review Authenticate with Azure Container Registry from Azure Kubernetes Service for more information.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "743a94f9-3a7e-4b04-9766-f4895e826914"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Secure network traffic to your API server with private AKS cluster.",
"description": "By default, network traffic between your node pools and the API server travels the Microsoft backbone network; by using a private cluster, you can ensure network traffic to your API server remains on the private network only.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4ba645c2-e73c-4d64-b122-afdf0b45243a"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: For non-private AKS clusters, use API server authorized IP ranges.",
"description": "When using public clusters, you can still limit the traffic that can reach your clusters API server by using the authorized IP range feature. Include sources like the public IPs of your deployment build agents, operations management, and node pools' egress point (such as Azure Firewall).",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "46d7f245-f07f-4e88-bb2d-faca191bd7f6"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Protect the API server with Microsoft Entra RBAC.",
"description": "Securing access to the Kubernetes API Server is one of the most important things you can do to secure your cluster. Integrate Kubernetes role-based access control (RBAC) with Microsoft Entra ID to control access to the API server. Disable local accounts to enforce all cluster access using Microsoft Entra ID-based identities.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "70a1f14b-2493-467a-baaa-0082ad3e6e66"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Azure network policies or Calico.",
"description": "Secure and control network traffic between pods in a cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9c861a46-6ed6-46c4-a407-d3a540731c4f"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Secure clusters and pods with Azure Policy.",
"description": "Azure Policy can help to apply at-scale enforcement and safeguards on your clusters in a centralized, consistent manner. It can also control what functions pods are granted and if anything is running against company policy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4aca3024-722c-4aa0-b727-d38adfcc2a46"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Secure container access to resources.",
"description": "Limit access to actions that containers can perform. Provide the least number of permissions, and avoid the use of root or privileged escalation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "37e193d8-d9b1-4444-8f2f-4186242f88cb"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use a Web Application Firewall to secure HTTP(S) traffic.",
"description": "To scan incoming traffic for potential attacks, use a web application firewall such as Azure Web Application Firewall (WAF) on Azure Application Gateway or Azure Front Door.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ecb6538c-45f3-46a8-ac7d-ef09e28905d9"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Control cluster egress traffic.",
"description": "Ensure your cluster's outbound traffic is passing through a network security point such as Azure Firewall or an HTTP proxy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8b978cf0-6f57-4b16-8ff4-c21cb24f9fda"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use the open-source Microsoft Entra Workload ID and Secrets Store CSI Driver with Azure Key Vault.",
"description": "Protect and rotate secrets, certificates, and connection strings in Azure Key Vault with strong encryption. Provides an access audit log, and keeps core secrets out of the deployment pipeline.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1287d8a6-3b9b-4cad-af36-efb95fb960ec"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Microsoft Defender for Containers.",
"description": "Monitor and maintain the security of your clusters, containers, and their applications.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ca24b98e-95aa-4250-9020-35f835aa8141"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Align SKU selection and managed disk size with workload requirements.",
"description": "Matching your selection to your workload demands ensures you don't pay for unneeded resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c318e6a0-4795-49ec-9911-6f0ecb79d7a6"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select the right virtual machine instance type.",
"description": "Selecting the right virtual machine instance type is critical as it directly impacts the cost of running applications on AKS. Choosing a high-performance instance without proper utilization can lead to wasteful spending, while choosing a powerful instance can lead to performance issues and increased downtime. To determine the right virtual machine instance type, consider workload characteristics, resource requirements, and availability needs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "87bb48b7-2f60-40f8-b5d5-a97e06baafc4"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select virtual machines based on the Arm architecture.",
"description": "AKS supports creating ARM64 Ubuntu agent nodes, as well as a of mix Intel and ARM architecture nodes within a cluster that can bring better performance at a lower cost.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "761503f3-f91b-47dc-b732-ed2079836237"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select Azure Spot Virtual Machines.",
"description": "Spot VMs allow you to take advantage of unutilized Azure capacity with significant discounts (up to 90% as compared to pay-as-you-go prices). If Azure needs capacity back, the Azure infrastructure evicts the Spot nodes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "54565ad7-0937-4126-bdd9-d242dcde1dc7"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select the appropriate region.",
"description": "Due to many factors, cost of resources varies per region in Azure. Evaluate the cost, latency, and compliance requirements to ensure you are running your workload cost-effectively and it doesn't affect your end-users or create extra networking charges.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "850c4199-ce25-4f8b-be6a-dbcb2009cf4a"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Maintain small and optimized images.",
"description": "Streamlining your images helps reduce costs since new nodes need to download these images. Build images in a way that allows the container start as soon as possible to help avoid user request failures or timeouts while the application is starting up, potentially leading to overprovisioning.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b17c40ac-02c7-4fbb-b804-7e246c89d073"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable Cluster Autoscaler to automatically reduce the number of agent nodes in response to excess resource capacity.",
"description": "Automatically scaling down the number of nodes in your AKS cluster lets you run an efficient cluster when demand is low and scale up when demand returns.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "35c3f143-8af5-4064-bff7-5cfee9b3de2b"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable Node Autoprovision to automate VM SKU selection.",
"description": "Node Autoprovision simplifies the SKU selection process and decides, based on pending pod resource requirements, the optimal VM configuration to run workloads in the most efficient and cost effective manner.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b671b868-82a9-4e67-b695-2a231daa98a9"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use the Horizontal Pod Autoscaler.",
"description": "Adjust the number of pods in a deployment depending on CPU utilization or other select metrics, which support cluster scale-in operations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "67bba4f2-32da-4816-adba-26cdd8416310"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use Vertical Pod Autoscaler (preview).",
"description": "Rightsize your pods and dynamically set requests and limits based on historic usage.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4727a766-8d04-4609-b397-dd7ae2e1a6eb"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use Kubernetes Event Driven Autoscaling (KEDA).",
"description": "Scale based on the number of events being processed. Choose from a rich catalogue of 50+ KEDA scalers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "47d91c51-224c-4d38-877a-f54d8c8b513c"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Adopt a cloud financial discipline and cultural practice to drive ownership of cloud usage.",
"description": "The foundation of enabling cost optimization is the spread of a cost saving cluster. A financial operations approach (FinOps) is often used to help organizations reduce cloud costs. It is a practice involving collaboration between finance, operations, and engineering teams to drive alignment on cost saving goals and bring transparency to cloud costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "519b4bb1-9a1a-41a6-b445-498f858c700f"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Sign up for Azure Reservations or Azure Savings Plan.",
"description": "If you properly planned for capacity, your workload is predictable and exists for an extended period of time, sign up for an Azure Reservation or a savings plan to further reduce your resource costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "268e3171-4a88-4ee1-9096-7956cf6a7009"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Configure monitoring of cluster with Container insights.",
"description": "Container insights help provides actionable insights into your clusters idle and unallocated resources. Container insights also supports collecting Prometheus metrics and integrates with Azure Managed Grafana to get a holistic view of your application and infrastructure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b0c6d2ab-4cee-4e81-be4e-b26b466c049d"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Configure the AKS Cost Analysis add-on.",
"description": "The cost analysis cluster extension enables you to obtain granular insight into costs associated with various Kubernetes resources in your clusters or namespaces.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f783ed2e-e0b7-494e-8b6c-03a7c7f0a521"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Review AKS best practices documentation.",
"description": "To build and run applications successfully in AKS, there are key considerations to understand and implement. These areas include multi-tenancy and scheduler features, cluster, and pod security, or business continuity and disaster recovery.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "34538d1b-a5ff-4ec6-9312-eaeb1dcbacf1"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Review Azure Chaos Studio.",
"description": "Azure Chaos Studio can help simulate faults and trigger disaster recovery situations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "73ed49fe-4b44-4bbc-b8ee-59bb6e602187"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Configure monitoring of cluster with Container insights.",
"description": "Container insights help monitor the performance of containers by collecting memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API and container logs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2760ddd2-3f7b-4a74-a742-602c4b2b1ee0"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Monitor application performance with Azure Monitor.",
"description": "Configure Application Insights for code-based monitoring of applications running in an AKS cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "41a1cac4-ce0f-44c8-b0b6-d7e36aeace4d"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Configure scraping of Prometheus metrics with Container insights.",
"description": "Container insights, which are part of Azure Monitor, provide a seamless onboarding experience to collect Prometheus metrics. Reference Configure scraping of Prometheus metrics for more information.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "95e28189-fdd7-4679-aeea-2070436acbd4"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Adopt a multiregion strategy by deploying AKS clusters deployed across different Azure regions to maximize availability and provide business continuity.",
"description": "Internet facing workloads should leverage Azure Front Door or Azure Traffic Manager to route traffic globally across AKS clusters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fbac9fd5-6811-4c97-8664-a598a206679c"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Operationalize clusters and pods configuration standards with Azure Policy.",
"description": "Azure Policy can help to apply at-scale enforcement and safeguards on your clusters in a centralized, consistent manner. It can also control what functions pods are granted and if anything is running against company policy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3531bc0d-e5ef-4513-bec0-4fe92182f3f0"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use platform capabilities in your release engineering process.",
"description": "Kubernetes and ingress controllers support many advanced deployment patterns for inclusion in your release engineering process. Consider patterns like blue-green deployments or canary releases.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6c472ee9-9c78-482a-bb39-bfd85de6e7a9"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: For mission-critical workloads, use stamp-level blue/green deployments.",
"description": "Automate your mission-critical design areas, including deployment and testing.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "be17bb53-96e5-4295-96fb-ba078126befe"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Develop a detailed capacity plan and continually review and revise.",
"description": "After formalizing your capacity plan, it should be frequently updated by continuously observing the resource utilization of the cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c45e82d7-78ac-4dac-af7d-6b9fa46201ce"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable cluster autoscaler to automatically adjust the number of agent nodes in response to resource constraints.",
"description": "The ability to automatically scale up or down the number of nodes in your AKS cluster lets you run an efficient, cost-effective cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2bc67a06-669d-4576-9ff7-467d440cd601"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Separate workloads into different node pools and consider scaling user node pools.",
"description": "Unlike System node pools that always require running nodes, user node pools allow you to scale up or down.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "14d66ba7-8381-4a2e-99f9-b52d42877bb7"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use AKS advanced scheduler features.",
"description": "Helps control balancing of resources for workloads that require them.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "69aadc69-d7f2-49a7-a8c0-948d950104d2"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use meaningful workload scaling metrics.",
"description": "Not all scale decisions can be derived from CPU or memory metrics. Often scale considerations will come from more complex or even external data points. Use KEDA to build a meaningful auto scale ruleset based on signals that are specific to your workload.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e5abfe2f-c669-42a3-9a0a-bdf9570208bc"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -426,6 +477,6 @@
"name": "Azure Kubernetes Service Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azuremachinelearning_sg_checklist.en.json b/checklists-ext/azuremachinelearning_sg_checklist.en.json
index e4c863d85..873179e6c 100644
--- a/checklists-ext/azuremachinelearning_sg_checklist.en.json
+++ b/checklists-ext/azuremachinelearning_sg_checklist.en.json
@@ -6,264 +6,297 @@
"service": "Azure Machine Learning",
"text": "Multi-region model deployment: For enhanced reliability and availability, consider a multi-region deployment environment when possible.",
"description": "A multi-region deployment ensures that your Machine Learning workloads continue to run even if one region experiences an outage. Multi-region deployment improves load distribution across regions, potentially enhancing performance for users located in different geographical areas. For more information, see Failover for business continuity and disaster recovery.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9fc5b64b-1e1a-4078-8d89-ee58f1c4e711"
},
{
"waf": "Reliability",
"service": "Azure Machine Learning",
"text": "Model training resiliency: Use checkpointing features supported by Machine Learning including Azure Container for PyTorch, the TensorFlow Estimator class, or the Run object and the FileDataset class that support model checkpointing.",
"description": "Model checkpointing periodically saves the state of your machine learning model during training, so that it can be restored in case of interruption, failure, or termination. For more information, see Boost checkpoint speed and reduce cost with Nebula.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4b5f3574-97aa-4f5e-beb5-1fae3c9f8b95"
},
{
"waf": "Reliability",
"service": "Azure Machine Learning",
"text": "Use the Dedicated virtual machine tier for compute clusters: Use the Dedicated virtual machine tier for compute clusters for batch inferencing to ensure your batch job isn't preempted.",
"description": "Low-priority virtual machines come at a reduced price but are preemptible. Clusters that use the Dedicated virtual machine tier aren't preempted.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d66e2a26-ae5f-4991-bbde-4b0760677b7d"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Security baseline: To enhance the security and compliance of your Machine Learning Service, apply the Azure security baseline for Machine Learning.",
"description": "The security baseline provides tailored guidance on crucial security aspects such as network security, identity management, data protection, and privileged access. For optimal security, use Microsoft Defender for Cloud to monitor these aspects.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4815b47d-64a5-4010-9a17-89f91790e23d"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Managed virtual network isolation: Configure managed virtual network isolation for Machine Learning. When you enable managed virtual network isolation, a managed virtual network is created for the workspace. Managed compute resources you create for the workspace automatically use this managed virtual network. If you can't implement managed virtual network isolation, then you must follow the network topology recommendations to separate compute into a dedicated subnet away from the rest of the resources in the solution, including the private endpoints for workspace resources.",
"description": "Managed virtual network isolation enhances security by isolating your workspace from other networks, reducing the risk of unauthorized access. In a scenario in which a breach occurs in another network within your organization, the isolated network of your Machine Learning workspace remains unaffected, protecting your machine learning workloads.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "eb4000ea-0aa2-4dc8-918e-0ea9dad778c3"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Machine Learning network isolation: Configure a private endpoint for your Machine Learning workspace and connect to the workspace over that private endpoint.",
"description": "Machine Learning network isolation enhances security by ensuring that access to your workspace is secure and controlled. With a private endpoint configured for your workspace, you can then limit access to your workspace to only occur over the private IP addresses.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dde6ce0a-6734-4e47-9860-47305641f3c8"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Allow only approved outbound access: Configure the outbound mode on the Machine Learning workspace managed outbound access to `Allow only approved outbound` to minimize the risk of data exfiltration. Configure private endpoints, service tags, or fully qualified domain names (FQDNs) for resources that you need to access.",
"description": "This configuration minimizes the risk of data exfiltration, improving data security. With this configuration enabled, a malicious actor who gains access to your system can\u2019t send your data to an unapproved external destination.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e7dc0d3b-de94-4d51-9deb-283c90ac955e"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Virtual network isolation for dependent services: Configure dependent services, such as Storage, Key Vault, and Container Registry with private endpoints and disable public access.",
"description": "Network isolation bolsters security by restricting access to Azure platform as a service (PaaS) solutions to private IP addresses only.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d5299777-93bb-4233-8420-f617c700e51a"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Managed identity: Use managed identities for authentication between Machine Learning and other services.",
"description": "Managed identities improve security by eliminating the need to store credentials and manually manage and rotate service principals.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1320acc1-2453-4af7-a484-232c7f487672"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Disable local authentication: Disable local authentication for Machine Learning compute clusters and instances.",
"description": "Disabling local authentication increases the security of your Machine Learning compute and provides centralized control and management of identities and resource credentials.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5163e567-cf02-4db1-aa8c-13335d5913e3"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Disable the public SSH port: Ensure the public Secure Shell (SSH) port is closed on the Machine Learning compute cluster by setting `remoteLoginPortPublicAccess` to `Disabled`. Apply a similar configuration if you use a different compute.",
"description": "Disabling SSH access helps prevent unauthorized individuals from gaining access and potentially causing harm to your system and protects you against brute force attacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5d0b43bc-7588-43cd-9a34-11d779cce318"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Don't provision public IP addresses for Machine Learning compute: Set enableNodePublicIp to `false` when provisioning Machine Learning compute clusters or compute instances. Apply a similar configuration if you use a different compute.",
"description": "Refrain from provisioning public IP addresses to enhance security by limiting the potential for unauthorized access to your compute instance or clusters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e70322de-d5c9-409d-9524-f495fd04071b"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Get the latest operating system image: Recreate compute instances to get the latest operating system image.",
"description": "Using the latest images ensures you're maintaining a consistent, stable, and secure environment, including ensuring you have the latest security patches.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b93a0e63-6d54-4065-9b94-4ffea5a81cc3"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Strict Machine Learning workspace access controls: Use Microsoft Entra ID groups to manage workspace access and adhere to the principle of least privilege for RBAC.",
"description": "Strict workspace access controls enhance security by ensuring that individuals have only the necessary permissions for their role. A data scientist, for instance, might have access to run experiments but not to modify security settings, minimizing potential security risks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7c1de0a4-ae28-464e-aaf2-1d8e162d1194"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Restrict model catalog deployments: Restrict model deployments to specific registries.",
"description": "Restricting the deployments from the model catalog to specific registries ensures you only deploy models to approved registries. This approach helps regulate access to the open-source foundational models.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fc675a42-35e6-4db4-a881-bcb68485993b"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Encrypt data at rest: Consider using customer-managed keys with Machine Learning.",
"description": "Encrypting data at rest enhances data security by ensuring that sensitive data is encrypted by using keys directly managed by you. If you have a regulatory requirement to manage your own encryption keys, use this feature to comply with that requirement.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0fd5a8dc-c8aa-4203-b60a-c4c3b29cdded"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Minimize the risk of data exfiltration: Implement data exfiltration prevention. For example, create a service endpoint policy to filter egress virtual network traffic and permit data exfiltration only to specific Azure Storage accounts.",
"description": "Minimize the risk of data exfiltration by limiting inbound and outbound requirements.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "140eeaf5-b8e9-4f38-ac81-23709d3505a4"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Optimize compute resources: Optimize your compute resources based on the requirements of your workload. Choose the SKU that best suits your workload:
- General Purpose \u2013 Balanced CPU to memory ratio, good for all purposes.
- Compute Optimized \u2013 High CPU to memory ratio, good for math-heavy computations.
- Memory Optimized \u2013 High memory to CPU, good for in-memory computations or database applications.
- M Series \u2013 Very large machines that have huge amounts of memory and CPU.
- GPU \u2013 Better for models with a high number of variables that can benefit from higher parallelism and specialized core instructions. Typical applications are deep learning, image or video processing, scientific simulations, data mining, and taking advantage of GPU development frameworks. Test with multiple families and document the results as your baseline. As your model and data evolve, the most adequate compute resource might change. Monitor execution times and reevaluate as needed.",
"description": "Selecting the right compute is critical as it directly impacts the cost of running your workload. Choosing a GPU or a high-performance SKU without proper usage can lead to wasteful spending, while choosing undersized compute can lead to prohibitively long training times and performance problems.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "865074f9-6695-439b-8afe-767f89e8236b"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Optimize compute scaling: Configure your compute clusters for autoscaling to ensure you only use what you need.For training clusters, set the minimum number of nodes to 0 and configure the amount of time the node is idle to an appropriate time. For less iterative experimentation, reduce the time to save costs. For more iterative experimentation, use a higher time to prevent paying for scaling up or down after each change.",
"description": "Configure autoscaling for compute clusters to scale down when their usage is low. Set the minimum number of nodes to 0 for training clusters to scale down to 0 when not in use.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "103217a3-a207-4d43-8053-79f48de00c95"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Set training termination policies: Set early termination policies to limit the duration of training runs or terminate them early.",
"description": "Setting termination policies can help you save costs by stopping nonperforming runs early.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fe491c00-6304-4aa2-a0f5-e7da262c2a35"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Use low-priority virtual machines for batch workloads: Consider using low-priority virtual machines for batch workloads that aren't time-sensitive and in which interruptions are recoverable.",
"description": "Low-priority virtual machines enable a large amount of compute power to be used for a low cost. They take advantage of surplus capacity in Azure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "10ed7b79-f99c-450e-9883-467ec8e7478a"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Enable idle shutdown for compute instances: Enable idle shutdown for compute instances or schedule a start and stop time if usage time is known.",
"description": "By default, compute instances are available to you, accruing cost. Configuring compute instances to shut down when idle or configuring a schedule for them saves cost when they aren't in use.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4662f51b-ae18-4b06-820a-1c2c224fc18b"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Parallelize training workloads: Consider parallelizing training workloads. Test running them with the help of the parallel components in Machine Learning.",
"description": "Parallel workloads can be run on multiple smaller instances, potentially yielding cost savings.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3b2133f2-181e-4501-a919-4460eebc5785"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Azure Reserved VM Instances: Purchase Azure Reserved VM Instances if you have a good estimate of usage over the next one to three years. Take advantage of reserved capacity options for services when you have good estimates of usage.",
"description": "Purchase Azure Reserved VM Instances to prepay for virtual machine usage and provide discounts with pay-as-you-go pricing. The discount is automatically applied for virtual machine usage that matches the reservation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ebed234e-9666-45ef-ac83-fe9cbf728d4c"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Minimize Machine Learning workspace instances: Minimize the number of workspaces, when possible, to reduce maintenance.",
"description": "Limiting the number of workspaces reduces the maintenance effort and cost of operation. For requirements, such as security, you might need multiple separate workspaces. Minimize the number of workspaces when possible.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c42c5cbb-269a-43c3-8c5c-b936cb55ac23"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Take advantage of model catalogs and registries: Take advantage of Machine Learning model catalogs and registries to store, version, and share machine learning assets.Use Machine Learning model catalogs to help you implement A/B testing and deployment of models.",
"description": "Use Machine Learning model registries to store and version your machine learning models to track changes and maintain lineage with the job and datasets used for training. With Machine Learning model catalogs, your data science teams can discover, evaluate, and fine tune pretrained foundational machine learning models. Storing versioned models in Machine Learning model registries supports deployment strategies such as A/B releases, canary releases, and rollbacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1126b7cc-4c6e-4131-9b60-6193c9d683cd"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Monitor model performance: Monitor the performance of your deployed models, and detect data drift on datasets.",
"description": "Monitoring deployed models ensures your models meet the performance requirements.Monitoring data drift helps you detect changes in the input data that can lead to a decline in your model\u2019s performance. Managing data drift helps you ensure that your model provides accurate results over time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d04648ab-beca-4fc0-bf66-ee2fdb30a15f"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Monitor infrastructure: If your models are deployed to online endpoints, enable Application Insights to monitor online endpoints and deployments.Monitor training infrastructure to ensure you're meeting your baseline requirements.Ensure you're collecting resource logs for Machine Learning.",
"description": "Monitoring endpoints gives you visibility into metrics such as request latency and requests per minute. You can compare your performance versus your baseline and use this information to make changes to compute resources accordingly. Monitoring metrics such as network bytes can alert you if you're approaching quota limits and prevent throttling.Likewise, monitoring your training environment provides you with the information to make changes to your training environment. Use that information to decide to scale in or out, scale up or down with different performant SKUs, or choose between CPUs or GPUs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1b331b25-29b6-48a1-83cd-66fe20f6019a"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Curate model training environments: Use curated environments optimized for Machine Learning, when available.",
"description": "Curated environments are pre-created environments provided by Machine Learning that speed up deployment time and reduce deployment and training latency. Using curated environments improves training and deployment success rates and avoids unnecessary image builds. Curated environments, such as Azure Container for PyTorch, can also be optimized for training large models on Machine Learning.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8546e6b3-0652-4f04-9412-ec3c58e67399"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Select appropriate compute services for model training: Consider Machine Learning compute clusters over compute instances for model training if you require autoscaling.Optimize your compute resources based on the training requirements. First choose between CPUs and GPUs. Default to CPUs, but consider GPUs for workloads such as deep learning, image or video processing, or large amounts of data. Next, choose the image SKU that best suits your workload.Use testing to choose the compute option that optimizes cost against training time when determining your baseline.",
"description": "Selecting the right compute is critical as it directly impacts the training time. Choosing the right SKU and CPU versus GPU ensures your model training can meet your requirements and performance targets. Choosing a low-performance SKU that's overused can lead to prohibitively long training times and performance problems. Compute clusters provide the ability to improve performance by scaling out workloads that support horizontal scaling. This method provides flexibility for handling workloads with different demands and lets you add or remove machines as needed.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "93e5a2e4-1c1a-4aef-ab50-d16a78f89d88"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Model deployment environment scaling: Use the deployment environment\u2019s autoscale capabilities. For AKS deployment environments, use the cluster autoscaler to scale to meet demand. For online endpoints, automatically scale via integration with the Azure Monitor autoscale feature.",
"description": "Autoscaling adjusts the number of instances of the deployed model to match demand.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e4fd3187-1d6a-4b19-ac21-500065d43640"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Monitor model performance: Monitor the performance of your deployed models.",
"description": "Tracking the performance of models in production alerts you to potential problems such as data drift, prediction drift, data quality, and feature attribution drift.Monitoring data drift helps you detect changes in the input data that can lead to a decline in your model\u2019s performance. Managing data drift helps you ensure that your model provides accurate results over time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8ac9a94b-d4fb-49d4-a820-9119f2941625"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Monitor infrastructure: Monitor online endpoints and integrate with Monitor to track and monitor the appropriate metrics and logs. Enable Application Insights when creating online deployments.Monitor training infrastructure and review resource usage such as memory and CPU or GPU usage when training models to ensure you're meeting your baseline requirements.",
"description": "Monitoring endpoints gives you visibility into metrics such as request latency and requests per minute. You can compare your performance versus your baseline and use this information to make changes to compute resources accordingly. Monitoring metrics such as network bytes can alert you if you're approaching quota limits and prevent throttling.Likewise, monitoring your training environment provides you with the information to make changes to your training environment. Use that information to decide to scale in or out, scale up or down with different performant SKUs, or choose between CPUs or GPUs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3625f61e-ac2b-4197-a345-7b8c4aa5de1a"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -300,6 +333,6 @@
"name": "Azure Machine Learning Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/azureopenai_sg_checklist.en.json b/checklists-ext/azureopenai_sg_checklist.en.json
index 278464dd3..04ee7f6c4 100644
--- a/checklists-ext/azureopenai_sg_checklist.en.json
+++ b/checklists-ext/azureopenai_sg_checklist.en.json
@@ -6,124 +6,137 @@
"service": "Azure Openai",
"text": "Monitor rate limits for pay-as-you-go: If you're using the pay-as-you-go approach, manage rate limits for your model deployments and monitor usage of tokens per minute (TPM) and requests per minute (RPM).",
"description": "This important throughput information provides information required to ensure that you assign enough TPM from your quota to meet the demand for your deployments.Assigning enough quota prevents throttling of calls to your deployed models.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b6dcf0b3-8127-4e92-b4f7-0aae28e620f9"
},
{
"waf": "Reliability",
"service": "Azure Openai",
"text": "Monitor provision-managed utilization for provisioned throughput: If you're using the provisioned throughput payment model, monitor provision-managed utilization.",
"description": "It's important to monitor provision-managed utilization to ensure it doesn't exceed 100%, to prevent throttling of calls to your deployed models.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "25f3bd77-90be-4e7b-8857-96908638e111"
},
{
"waf": "Reliability",
"service": "Azure Openai",
"text": "Tune content filters: Tune content filters to minimize false positives from overly aggressive filters.",
"description": "Content filters block prompts or completions based on an opaque risk analysis. Ensure content filters are tuned to allow expected usage for your workload.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "643a72fc-8705-4146-84bf-72cb38e293b6"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Secure keys: If your architecture requires Azure OpenAI key-based authentication, store those keys in Azure Key Vault, not in application code.",
"description": "Separating secrets from code by storing them in Key Vault reduces the chance of leaking secrets. Separation also facilitates central management of secrets, easing responsibilities like key rotation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b10d9c77-58fc-4775-b218-0c295ebc32e6"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Restrict access: Disable public access to Azure OpenAI unless your workload requires it. Create private endpoints if you're connecting from consumers in an Azure virtual network.",
"description": "Controlling access to Azure OpenAI helps prevent attacks from unauthorized users. Using private endpoints ensures network traffic remains private between the application and the platform.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c9dfe61d-73ca-4761-8078-746eba6130b5"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Microsoft Entra ID: Use Microsoft Entra ID for authentication and to authorize access to Azure OpenAI by using role-based access control (RBAC). Disable local authentication in Azure AI Services and set `disableLocalAuth` to `true`. Grant identities that perform completions or image generation the Cognitive Services OpenAI User role. Grant model automation pipelines and ad-hoc data-science access a role like Cognitive Services OpenAI Contributor.",
"description": "Using Microsoft Entra ID centralizes the identity-management component and eliminates the use of API keys. Using RBAC with Microsoft Entra ID ensures that users or groups have exactly the permissions they need to do their job. This kind of fine-grained access control isn't possible with Azure OpenAI API keys.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5059e94f-cdff-4e02-8c32-aff6fd822de4"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Use customer-managed keys: Use customer-managed keys for fine-tuned models and training data that's uploaded to Azure OpenAI.",
"description": "Using customer-managed keys gives you greater flexibility to create, rotate, disable, and revoke access controls.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "46ba1b6c-9749-4496-8004-0243958ff025"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Protect against jailbreak attacks: Use Azure AI Content Safety Studio to detect jailbreak risks.",
"description": "Detect jailbreak attempts to identify and block prompts that try to bypass the safety mechanisms of your Azure OpenAI deployments.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0b2a72f5-5403-4fd5-a28d-6dc59c7bb452"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Design client code to set limits: Your custom clients should use the limit features of the Azure OpenAI completions API, such as maximum limit on the number of tokens per model (`max_tokens`) or number of completions to generation (`n`). Setting limits ensures that the server doesn't produce more than the client needs.",
"description": "Using API features to restrict usage aligns service consumption with client needs. This saves money by ensuring the model doesn't generate an overly long response that consumes more tokens than necessary.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "64e82ff7-9005-4f2d-8b98-7e7d3d91c97d"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Monitor pay-as-you-go usage: If you use the pay-as-you-go approach, monitor usage of TPM and RPM. Use that information to inform architectural design decisions such as what models to use, and to optimize prompt sizes.",
"description": "Continuously monitoring TPM and RPM gives you relevant metrics to optimize the cost of Azure OpenAI models. You can couple this monitoring with model features and model pricing to optimize model usage. You can also use this monitoring to optimize prompt sizes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c05fe060-791d-4ce3-bfc1-95bf9e1633b5"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Monitor provisioned throughput usage: If you use provisioned throughput, monitor provision-managed utilization to ensure you're not underutilizing the provisioned throughput you purchased.",
"description": "Continuously monitoring provision-managed utilization gives you the information you need to understand if you're underutilizing your provisioned throughput.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c36f1457-da39-416f-83d4-81365a542fc9"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Cost management: Use cost management features with OpenAI to monitor costs, set budgets to manage costs, and create alerts to notify stakeholders of risks or anomalies.",
"description": "Cost monitoring, setting budgets, and setting alerts provides governance with the appropriate accountability processes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7fc76005-932c-4cf8-b1fb-24913118e687"
},
{
"waf": "Operations",
"service": "Azure Openai",
"text": "Enable and configure Azure Diagnostics: Enable and configure Diagnostics for the Azure OpenAI Service.",
"description": "Diagnostics collects and analyzes metrics and logs, helping you monitor the availability, performance, and operation of Azure OpenAI.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "998a96ee-9218-4cee-9f3a-79d823873f6d"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -160,6 +173,6 @@
"name": "Azure Openai Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/virtualmachines_sg_checklist.en.json b/checklists-ext/virtualmachines_sg_checklist.en.json
index 03449de33..4a514fabd 100644
--- a/checklists-ext/virtualmachines_sg_checklist.en.json
+++ b/checklists-ext/virtualmachines_sg_checklist.en.json
@@ -6,229 +6,257 @@
"service": "Virtual Machines",
"text": "(Scale set) Use Virtual Machine Scale Sets in Flexible orchestration mode to deploy VMs.",
"description": "Future-proof your application for scaling and take advantage of the high availability guarantees that spread VMs across fault domains in a region or an availability zone.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9e6f3dc6-2a5d-47b5-a551-a1a9810dd935"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(VMs) Implement heath endpoints that emit instance health statuses on VMs. (Scale set) Enable automatic repairs on the scale set by specifying the preferred repair action. Consider setting a time frame during which automatic repairs pause if the VM's state changes.",
"description": "Maintain availability even if an instance is deemed unhealthy. Automatic repairs initiate recovery by replacing the faulty instance. Setting a time window can prevent inadvertent or premature repair operations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5f7478db-999e-46f3-9881-10f662f252d4"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Enable overprovisioning on scale sets.",
"description": "Overprovisioning reduces deployment times and has a cost benefit because the extra VMs aren't billed.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c23b6808-0b13-4786-ae3d-6d5ec13b4bdd"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Allow Flexible orchestration to spread the VM instances across as many fault domains as possible.",
"description": "This option isolates fault domains. During maintenance periods, when one fault domain is updated, VM instances are available in the other fault domains.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "80eb3641-4ef3-45af-88d8-7125a7765b02"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Deploy across availability zones on scale sets. Set up at least two instances in each zone. Zone balancing equally spreads the instances across zones.",
"description": "The VM instances are provisioned in physically separate locations within each Azure region that are tolerant to local failures. Keep in mind that, depending on resource availability, there might be an uneven number of instances across zones. Zone balancing supports availability by making sure that, if one zone is down, the other zones have sufficient instances. Two instances in each zone provide a buffer during upgrades.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e7fcfb8c-dbd8-4c10-ab73-193b9992ba0d"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(VMs) Take advantage of the capacity reservations feature.",
"description": "Capacity is reserved for your use and is available within the scope of the applicable SLAs. You can delete capacity reservations when you no longer need them, and billing is consumption based.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "27744f26-46f0-405d-8776-a3fcc988990d"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(Scale set) Assign a managed identity to scale sets. All VMs in the scale set get the same identity through the specified VM profile. (VMs) You can also assign a managed identity to individual VMs when you create them and then add it to a scale set if needed.",
"description": "When VMs communicate with other resources, they cross a trust boundary. Scale sets and VMs should authenticate their identity before communication is allowed. Microsoft Entra ID handles that authentication by using managed identities.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7023aa88-e5da-44d3-9780-af7c27801969"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(Scale set) Choose VM SKUs with security features. For example, some SKUs support BitLocker encryption, and confidential computing provides encryption of data-in-use. Review the features to understand the limitations.",
"description": "Azure-provided features are based on signals that are captured across many tenants and can protect resources better than custom controls. You can also use policies to enforce those controls.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4993d5af-59fa-453f-85b8-b2dfa6a7104d"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs, scale set) Apply organization-recommended tags in the provisioned resources.",
"description": "Tagging is a common way to segment and organize resources and can be crucial during incident management. For more information, see Purpose of naming and tagging.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "46470ed3-87b7-4ead-b84f-1a4fc6dc279b"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs, scale set) Set a security profile with the security features that you want to enable in the VM configuration. For example, when you specify encryption at host in the profile, the data that's stored on the VM host is encrypted at rest and flows are encrypted to the storage service.",
"description": "The features in the security profile are automatically enabled when the VM is created. For more information, see Azure security baseline for Virtual Machine Scale Sets.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8a6c067c-0d4d-431d-9662-18afa0a1eb69"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs) Choose secure networking options for your VM's network profile. Don't directly associate public IP addresses to your VMs and don't enable IP forwarding. Ensure that all virtual network interfaces have an associated network security group.",
"description": "You can set segmentation controls in the networking profile. Attackers scan public IP addresses, which makes VMs vulnerable to threats.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "30b6c7bc-0358-498e-bdff-efa3ff1ddd8d"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs) Choose secure storage options for your VM's storage profile. Enable disk encryption and data-at-rest encryption by default. Disable public network access to the VM disks.",
"description": "Disabling public network access helps prevent unauthorized access to your data and resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e2547651-c250-4856-8efc-ccf94f88f410"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs, scale set) Include extensions in your VMs that protect against threats. For example, - Key Vault extension for Windows and Linux - Microsoft Entra ID authentication - Microsoft Antimalware for Azure Cloud Services and Virtual Machines - Azure Disk Encryption extension for Windows and Linux.",
"description": "The extensions are used to bootstrap the VMs with the right software that protects access to and from the VMs. Microsoft-provided extensions are updated frequently to keep up with the evolving security standards.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f3838a8a-b951-4afb-bde1-a85e8d6d68c9"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(VMs, scale set) Choose the right VM plan size and SKU. Identify the best VM sizes for your workload. Use the VM selector to identify the best VM for your workload. See Windows and Linux pricing. For workloads like highly parallel batch processing jobs that can tolerate some interruptions, consider using Azure Spot Virtual Machines. Spot virtual machines are good for experimenting, developing, and testing large-scale solutions.",
"description": "SKUs are priced according to the capabilities that they offer. If you don't need advanced capabilities, don't overspend on SKUs. Spot virtual machines take advantage of the surplus capacity in Azure at a lower cost.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2a4e2b58-ed4b-4e39-a271-51c457dcee2e"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(VMs, scale set) Evaluate the disk options that are associated with your VM's SKUs. Determine your performance needs while keeping in mind your storage capacity needs and accounting for fluctuating workload patterns. For example, the Azure Premium SSD v2 disk allows you to granularly adjust your performance independent of the disk's size.",
"description": "Some high-performance disk types offer extra cost optimization features and strategies. The Premium SSD v2 disk's adjustment capability can reduce costs because it provides high performance without overprovisioning, which could otherwise lead to underutilized resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "760507a2-2b33-4f34-8fd3-6316b5a66efb"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(Scale set) Mix regular VMs with spot virtual machines. Flexible orchestration lets you distribute spot virtual machines based on a specified percentage.",
"description": "Reduce compute infrastructure costs by applying the deep discounts of spot virtual machines.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "23c211be-371c-47f9-a748-3aec060ae861"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(Scale set) Reduce the number of VM instances when demand decreases. Set a scale-in policy based on criteria. Stop VMs during off-hours. You can use the Azure Automation Start/Stop feature and configure it according to your business needs.",
"description": "Scaling in or stopping resources when they're not in use reduces the number of VMs running in the scale set, which saves costs. The Start/Stop feature is a low-cost automation option.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "561d0ceb-45f3-4aa0-82c2-38b763a370fc"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(VMs, scale set) Take advantage of license mobility by using Azure Hybrid Benefit. VMs have a licensing option that allows you to bring your own on-premises Windows Server OS licenses to Azure. Azure Hybrid Benefit also lets you bring certain Linux subscriptions to Azure.",
"description": "You can maximize your on-premises licenses while getting the benefits of the cloud.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9b99f53f-5cb5-4da0-a98b-e038fcca9f46"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(Scale set) Virtual Machine Scale Sets in Flexible orchestration mode can help simplify the deployment and management of your workload. For example, you can easily manage self-healing by using automatic repairs.",
"description": "Flexible orchestration can manage VM instances at scale. Handing individual VMs adds operational overhead. For example, when you delete VM instances, the associated disks and NICs are also automatically deleted. VM instances are spread across multiple fault domains so that update operations don't disrupt service.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7bab3601-4f66-4bbf-907d-d0f831a60f78"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(Scale set) Keep your VMs up to date by setting an upgrade policy. We recommend rolling upgrades. However, if you need granular control, choose to upgrade manually. For Flexible orchestration, you can use Azure Update Manager.",
"description": "Security is the primary reason for upgrades. Security assurances for the instances shouldn't decay over time. Rolling upgrades are done in batches, which ensures all instances aren't down at the same time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5b759f0d-ad80-4545-9e4b-44056ec228ba"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(VMs, scale set) Automatically deploy VM applications from the Azure Compute Gallery by defining the applications in the profile.",
"description": "The VMs in the scale set are created and the specified apps are preinstalled, which makes management easier.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c2f4304e-5e0d-4f98-867f-8c550340a021"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "Install prebuilt software components as extensions as part of bootstrapping. Azure supports many extensions that can be used to configure, monitor, secure, and provide utility applications for your VMs. Enable automatic upgrades on extensions.",
"description": "Extensions can help simplify the software installation at scale without you having to manually install, configure, or upgrade it on each VM.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "12bb1904-9a08-465a-9fbd-2ecd862aaa06"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(VMs, scale set) Monitor and measure the health of the VM instances. Deploy the Monitor agent extension to your VMs to collect monitoring data from the guest OS with OS-specific data collection rules. Enable VM insights to monitor health and performance and to view trends from the collected data. Use boot diagnostics to get information as VMs boot. Boot diagnostics also diagnose boot failures.",
"description": "Monitoring data is at the core of incident resolution. A comprehensive monitoring stack provides information about how the VMs are performing and their health. By continuously monitoring the instances, you can be ready for or prevent failures like performance overload and reliability issues.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "01942d35-b702-41bc-9c34-34f18da7bb0c"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Choose SKUs for VMs that align with your capacity planning. Have a good understanding of your workload requirements, including the number of cores, memory, storage, and network bandwidth so that you can filter out unsuitable SKUs.",
"description": "Rightsizing your VMs is a fundamental decision that significantly affects the performance of your workload. Without the right set of VMs, you might experience performance issues and accrue unnecessary costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "30d448f0-47b5-4658-a4f2-da8cb72f79e1"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Deploy latency-sensitive workload VMs in proximity placement groups.",
"description": "Proximity placement groups reduce the physical distance between Azure compute resources, which can improve performance and reduce network latency between stand-alone VMs, VMs in multiple availability sets, or VMs in multiple scale sets.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "14a7c24e-88ec-4509-b3b8-452e69d729ea"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Set the storage profile by analyzing the disk performance of existing workloads and the VM SKU. Use Premium SSDs for production VMs. Adjust the performance of disks with Premium SSD v2. Use locally attached NVMe devices.",
"description": "Premium SSDs deliver high-performance and low-latency disk support VMs with I/O-intensive workloads. Premium SSD v2 doesn't require disk resizing, which enables high performance without excessive over-provisioning and minimizes the cost of unused capacity. When available on VM SKUs, locally attached NVMe or similar devices can offer high performance, especially for use cases that require high input/output operations per second (IOPS) and low latency.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5c29d96d-7a19-4eb4-9830-fad2b49e03be"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs) Consider enabling accelerated networking.",
"description": "It enables single root I/O virtualization (SR-IOV) to a VM, which greatly improves its networking performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4c376dc7-a1b7-42d8-85fb-ff807e0dee45"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Set autoscale rules to increase or decrease the number of VM instances in your scale set based on demand.",
"description": "If your application demand increases, the load on the VM instances in your scale set increases. Autoscale rules ensure that you have enough resources to meet the demand.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "79cef879-8b12-4e7c-ad74-6aad9c37305a"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -265,6 +293,6 @@
"name": "Virtual Machines Service Guide",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists-ext/wafsg_checklist.en.json b/checklists-ext/wafsg_checklist.en.json
index b5a385a35..31de6fcbe 100644
--- a/checklists-ext/wafsg_checklist.en.json
+++ b/checklists-ext/wafsg_checklist.en.json
@@ -6,4884 +6,6678 @@
"service": "App Service Web Apps",
"text": "Prioritize user flows: Not all flows are equally critical. Assign priorities to each flow to guide your design decisions. User flow design can influence which service tiers and number of instances that you choose for an App Service plan and configuration.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "e545b2de-84e1-4c41-81a6-46914c8e72cf"
},
{
"waf": "reliability",
"service": "App Service Web Apps",
"text": "Anticipate potential failures: Plan mitigation strategies for potential failures. The following table shows examples of failure mode analysis.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "f5e1c56f-e3a8-4dbd-b235-fdb88c41216d"
},
{
"waf": "reliability",
"service": "App Service Web Apps",
"text": "Build redundancy: Build redundancy in the application and supporting infrastructure. Spread instances across availability zones to improve fault tolerance. Traffic is routed to other zones if one zone fails. Deploy your application across multiple regions to ensure that your app remains available, even if an entire region experiences an outage.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "87816451-1e4f-42f0-a497-753b966193b0"
},
{
"waf": "reliability",
"service": "App Service Web Apps",
"text": "Have a reliable scaling strategy: Unexpected load on an application can make it unreliable. Consider the right scaling approach based on your workload characteristics. You can sometimes scale up to handle the load. However, if the load continues to increase, scale out to new instances. Prefer automatic scaling over manual approaches. Always maintain a buffer of extra capacity during scaling operations to prevent performance degradation.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "e03792ee-d7db-4ec3-8596-9d77baf09f8f"
},
{
"waf": "reliability",
"service": "App Service Web Apps",
"text": "Plan your recoverability: Redundancy is crucial for business continuity. Fail over to another instance if one instance is unreachable. Explore automatic healing capabilities in App Service, such as automatic repair of instances.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "bc69b314-43db-4c70-8b68-fcaf3b01137e"
},
{
"waf": "reliability",
"service": "App Service Web Apps",
"text": "Conduct reliability testing: Conduct load testing to evaluate your application's reliability and performance under load. Test plans should include scenarios that validate your automated recovery operations.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "04ae0e82-112b-4433-8a90-273a5684b328"
},
{
"waf": "reliability",
"service": "App Service Web Apps",
"text": "Use health probes to identify unresponsive workers: App Service has built-in capabilities that periodically ping a specific path of your web application. Unresponsive instances are removed from the load balancer and replaced with a new instance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "10e2e605-ef6e-4f70-a77f-15ba305c15d7"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service plan) Choose the Premium tier of an App Service plan for production workloads. Set the maximum and minimum number of workers according to your capacity planning. For more information, see App Service plan overview.",
"description": "A premium App Service plan offers advanced scaling features and ensures redundancy if failures occur.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9ba4ebdd-a039-47e8-bff9-884e1852a030"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service plan) Enable zone redundancy. Consider provisioning more than three instances to enhance fault tolerance. Check regional support for zone redundancy because not all regions offer this feature.",
"description": "Your application can withstand failures in a single zone when multiple instances are spread across zones. Traffic automatically shifts to healthy instances in other zones and maintains application reliability if one zone is unavailable.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f6d4a1ff-bf30-4477-823d-b2163667a87d"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service) Consider disabling the application request routing (ARR) affinity feature. ARR affinity creates sticky sessions that redirect users to the node that handled their previous requests.",
"description": "Incoming requests are evenly distributed across all available nodes when you disable ARR affinity. Evenly distributed requests prevent traffic from overwhelming any single node. Requests can be seamlessly redirected to other healthy nodes if a node is unavailable. Avoid session affinity to ensure that your App Service instance remains stateless. A stateless App Service reduces complexity and ensures consistent behavior across nodes. Remove sticky sessions so that App Service can add or remove instances to scale horizontally.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "784f255c-4436-47c2-a1fc-65de9b5de39e"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service) Define automatic healing rules based on request count, slow requests, memory limits, and other indicators that are part of your performance baseline. Consider this configuration as part of your scaling strategy.",
"description": "Automatic healing rules help your application recover automatically from unexpected problems. The configured rules trigger healing actions when thresholds are breached. Automatic healing enables automatic proactive maintenance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "152ed4b6-dba0-4737-92c1-441704fbfe83"
},
{
"waf": "Reliability",
"service": "App Service Web Apps",
"text": "(App Service) Enable the health check feature and provide a path that responds to the health check requests.",
"description": "Health checks can detect problems early. Then the system can automatically take corrective actions when a health check request fails. The load balancer routes traffic away from unhealthy instances, which directs users to healthy nodes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "874fa451-0ef2-4638-8cfd-c07cef131d7f"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Review security baselines: To enhance the security posture of your application that's hosted on an App Service plan, review the security baseline for App Service.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "44ba257f-d6b6-4eed-b5a1-eff3dcb027e8"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Use the latest runtime and libraries: Thoroughly test your application builds before you do updates to catch problems early and ensure a smooth transition to the new version. App Service supports the language runtime support policy for updating existing stacks and retiring end-of-support stacks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "4133fafa-441c-4d27-bfd1-f76a58ab6620"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Create segmentation through isolation boundaries to contain breach: Apply identity segmentation. For example, implement role-based access control (RBAC) to assign specific permissions based on roles. Follow the principle of least privilege to limit access rights to only what's necessary. Also create segmentation at the network level. Inject App Service apps in an Azure virtual network for isolation and define network security groups (NSGs) to filter traffic.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "dbeebd4f-c94a-4060-a2ac-c523b3e64a3d"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Apply access controls on identities: Restrict both inward access to the web app and outward access from the web app to other resources. This configuration applies access controls on identities and helps maintain the workload's overall security posture.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "5bb8daca-fde8-45bf-82f6-e55cdb28da05"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Control network traffic to and from the application: Don't expose application endpoints to the public internet. Instead, add a private endpoint on the web app that's placed in a dedicated subnet. Front your application with a reverse proxy that communicates with that private endpoint. Consider using Application Gateway or Azure Front Door for that purpose.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "e9b8f604-ff04-4eef-9949-bd6c23179186"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Encrypt data: Protect data in transit with end-to-end Transport Layer Security (TLS). Use your customer-managed keys for full encryption of data at rest. For more information, see Encryption at rest using customer-managed keys.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "4ed59aaa-9948-4387-975e-11e1fc65ff40"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Reduce the attack surface: Remove default configurations that you don't need. For example, disable remote debugging, local authentication for Source Control Manager (SCM) sites, and basic authentication. Disable unsecure protocols like HTTP and File Transfer Protocol (FTP). Enforce configurations through Azure policies. For more information, see Azure policies.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "d63a7c58-a495-4ff3-a164-88e8eac4febf"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Protect application secrets: You need to handle sensitive information, like API keys or authentication tokens. Instead of hardcoding these secrets directly into your application code or configuration files, you can use Azure Key Vault references in app settings. When the application starts, App Service automatically retrieves the secret values from Key Vault by using the app's managed identity.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "0545fb6c-0662-4ffd-8834-7d4d4ac7f2bb"
},
{
"waf": "security",
"service": "App Service Web Apps",
"text": "Enable resource logs for your application: Enable resource logs for your application to create comprehensive activity trails that provide valuable data during investigations that follow security incidents.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "1c90ec2a-85e3-400e-8937-22686ac115b8"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Assign managed identities to the web app. To maintain isolation boundaries, don't share or reuse identities across applications. Make sure that you securely connect to your container registry if you use containers for your deployment.",
"description": "The application retrieves secrets from Key Vault to authenticate outward communication from the application. Azure manages the identity and doesn't require you to provision or rotate any secrets. You have distinct identities for granularity of control. Distinct identities make revocation easy if an identity is compromised.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "14bc5ea3-400b-4bbf-9187-f0b21505173d"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Configure custom domains for applications. Disable HTTP and only accept HTTPS requests.",
"description": "Custom domains enable secure communication through HTTPS using Transport Layer Security (TLS) protocol, which ensures the protection of sensitive data and builds user trust.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ef64b1c3-a41f-4913-8ac4-27be04d96d10"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) valuate whether App Service built-in authentication is the right mechanism to authenticate users that access your application. App Service built-in authentication integrates with Microsoft Entra ID. This feature handles token validation and user identity management across multiple sign-in providers and supports OpenID Connect. With this feature, you don't have authorization at a granular level, and you don't have a mechanism to test authentication.",
"description": "When you use this feature, you don't have to use authentication libraries in application code, which reduces complexity. The user is already authenticated when a request reaches the application.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8cde5bed-8dd0-4a16-ae15-0672275bd473"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Configure the application for virtual network integration. Use private endpoints for App Service apps. Block all public traffic. Route the container image pull through the virtual network integration. All outgoing traffic from the application passes through the virtual network.",
"description": "Get the security benefits of using an Azure virtual network. For example, the application can securely access resources within the network. Add a private endpoint to help protect your application. Private endpoints limit direct exposure to the public network and allow controlled access through the reverse proxy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "703d13a6-d768-443b-b9f9-4e31d74767f9"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) To implement hardening: - Disable basic authentication that uses a username and password in favor of Microsoft Entra ID-based authentication. - Turn off remote debugging so that inbound ports aren't opened. - Enable CORS policies to tighten incoming requests. - Disable protocols, such as FTP.",
"description": "We don't recommend basic authentication as a secure deployment method. Microsoft Entra ID employs OAuth 2.0 token-based authentication, which offers numerous advantages and enhancements that address the limitations that are associated with basic authentication. Policies restrict access to application resources, only allow requests from specific domains, and secure cross-region requests.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "78fd4f02-98f6-459c-882c-5f0d659a2251"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service) Always use Key Vault references as app settings.",
"description": "Secrets are kept separate from your app's configuration. App settings are encrypted at rest. App Service also manages secret rotations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "59402f53-7298-4295-b919-609d8fc73876"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service plan) Enable Microsoft Defender for Cloud for App Service.",
"description": "Get real-time protection for resources that run in an App Service plan. Guard against threats and enhance your overall security posture.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "def198c3-8a34-4d8f-8e46-91b6f36064ab"
},
{
"waf": "Security",
"service": "App Service Web Apps",
"text": "(App Service plan) Enable diagnostic logging and add instrumentation to your app. The logs are sent to Azure Storage accounts, Azure Event Hubs, and Log Analytics. For more information about audit log types, see Supported log types.",
"description": "Logging captures access patterns. It records relevant events that provide valuable insights into how users interact with an application or platform. This information is crucial for accountability, compliance, and security purposes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "603bf106-42e6-43d3-a8e0-4470d05093b9"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Estimate the initial cost: As part of your cost modeling exercise, use the Azure pricing calculator to evaluate the approximate costs associated with various tiers based on the number of instances that you plan to run. Each App Service tier offers different compute options.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "551337b1-cb7a-4f60-870b-331efa943936"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Evaluate the discounted options: Higher tiers include dedicated compute instances. You can apply a reservation discount if your workload has a predictable and consistent usage pattern. Make sure that you analyze usage data to determine the type of reservation that suits your workload. For more information, see Save costs with App Service reserved instances.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "692ab2db-ff92-44e9-ae54-910c66389e0d"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Understand usage meters: Azure charges an hourly rate, prorated to the second, based on your App Service plan's pricing tier. Charges apply to each scaled-out instance in your plan, based on the time that you allocate the VM instance. Pay attention to underused compute resources that might increase your costs as a result of overallocation due to suboptimal SKU selection, or poorly configured scale-in configuration.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "84808948-46c4-4cd5-aa74-b79826a19b32"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Consider the tradeoffs between density and isolation: You can use App Service plans to host multiple applications on the same compute, which saves costs with shared environments. For more information, see Tradeoffs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "66723d3b-34de-4f55-8861-299453c5b6d8"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Evaluate the effect of your scaling strategy on cost: You must properly design, test, and configure for scaling out and for scaling in when you implement autoscaling. Establish precise maximum and minimum limits on autoscaling.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "289a2a9d-eda1-4be4-af63-23d230194724"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Optimize environment costs: Consider the Basic or Free tier to run pre-production environments. These tiers are low performance and low cost. If you use the Basic or Free tier, use governance to enforce the tier, constrain the number of instances and CPUs, restrict scaling, and limit log retention.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "4e2a03a6-ff51-46c5-902d-3d7161d9c99c"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Implement design patterns: This strategy reduces the volume of requests that your workload generates. Consider using patterns like the Backends for Frontends pattern and the Gateway Aggregation pattern, which can minimize the number of requests and reduce costs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "7ce7bbb5-df18-4e4d-86b6-83e25e835457"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Regularly check data-related costs: Extended data retention periods or expensive storage tiers can lead to high storage costs. More expenses can accumulate due to both bandwidth usage and prolonged retention of logging data.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "b7564349-7885-4f66-89ae-b732adaf29ae"
},
{
"waf": "cost",
"service": "App Service Web Apps",
"text": "Optimize deployment costs: Take advantage of deployment slots to optimize costs. The slot runs in the same compute environment as the production instance. Use them strategically for scenarios like blue-green deployments that switch between slots. This approach minimizes downtime and ensures smooth transitions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "41026085-4728-4bff-abbe-be08a46e4735"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service plan) Choose Free or Basic tiers for lower environments. We recommend these tiers for experimental use. Remove the tiers when you no longer need them.",
"description": "The Free and Basic tiers are budget-friendly compared to higher tiers. They provide a cost-effective solution for nonproduction environments that don't need the full features and performance of premium plans.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dc84dbbc-6816-48ae-9926-e52e68d4273e"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service plan) Take advantage of discounts and explore preferred pricing for: - Lower environments with dev/test plans. - Azure reservations and Azure savings plans for dedicated compute that you provision in the Premium V3 tier and App Service Environment. Use reserved instances for stable workloads that have predictable usage patterns.",
"description": "Dev/test plans provide reduced rates for Azure services, which makes them cost-effective for nonproduction environments. Use reserved instances to prepay for compute resources and get significant discounts.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1572941a-e08a-4d0c-bae6-5af048bbcc2a"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service) Monitor costs that App Service resources incur. Run the cost analysis tool in the Azure portal. Create budgets and alerts to notify stakeholders.",
"description": "You can identify cost spikes, inefficiencies, or unexpected expenses early on. This proactive approach helps you to provide budgetary controls to prevent overspending.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "83127c0d-df6c-4785-be24-e54d0933118d"
},
{
"waf": "Cost",
"service": "App Service Web Apps",
"text": "(App Service plan) Scale in when demand decreases. To scale in, define scale rules to reduce the number of instances in Azure Monitor.",
"description": "Prevent wastage and reduce unnecessary expenses.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a14a3b78-26d3-4159-975b-df8e82c9590e"
},
{
"waf": "operations",
"service": "App Service Web Apps",
"text": "Manage releases: Use deployment slots to manage releases effectively. You can deploy your application to a slot, perform testing, and validate its functionality. After verification, you can seamlessly move the app to production. This process doesn't incur extra costs because the slot runs in the same virtual machine (VM) environment as the production instance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "d4909fdf-867b-43b7-828d-197247a83530"
},
{
"waf": "operations",
"service": "App Service Web Apps",
"text": "Run automated tests: Before you promote a release of your web app, thoroughly test its performance, functionality, and integration with other components. Use Azure Load Testing, which integrates with Apache JMeter, a popular tool for performance testing. Explore automated tools for other types of testing, such as Phantom for functional testing.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "a4224cce-1a82-4c9e-a488-86bb6b215a39"
},
{
"waf": "operations",
"service": "App Service Web Apps",
"text": "Deploy immutable units: Implement the Deployment Stamps pattern to compartmentalize App Service into an immutable stamp. App Service supports the use of containers, which are inherently immutable. Consider custom containers for your App Service web app.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "669390a7-ea5f-4e73-ba58-bf3606702be1"
},
{
"waf": "operations",
"service": "App Service Web Apps",
"text": "Keep production environments safe: Create separate App Service plans to run production and pre-production environments. Don't make changes directly in the production environment to ensure stability and reliability. Separate instances allow flexibility in development and testing before you promote changes to production.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "6e19d92c-1d22-486b-81d2-bb3125e74231"
},
{
"waf": "operations",
"service": "App Service Web Apps",
"text": "Manage certificates: For custom domains, you need to manage TLS certificates.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "dc4ab7a7-f32b-44e3-a2e5-830459d5359a"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service) Monitor the health of your instances and activate instance health probes. Set up a specific path for handling health probe requests.",
"description": "You can detect problems promptly and take necessary actions to maintain availability and performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2bf6f5fc-cc4d-4ae3-98bc-ce4d42fafc32"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service) Enable diagnostics logs for the application and the instance. Frequent logging can slow down the performance of the system, add to storage costs, and introduce risk if you have unsecure access to logs. Follow these best practices: - Log the right level of information. - Set retention policies. - Keep an audit trail of authorized access and unauthorized attempts. - Treat logs as data and apply data-protection controls.",
"description": "Diagnostic logs provide valuable insights into your app's behavior. Monitor traffic patterns and identify anomalies.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "306767a6-b162-4b64-91a0-091a3d3b37cb"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service) Take advantage of App Service managed certificates to offload certification management to Azure.",
"description": "App Service automatically handles processes like certificate procurement, certificate verification, certificate renewal, and importing certificates from Key Vault. Alternatively, upload your certificate to Key Vault and authorize the App Service resource provider to access it.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "471061e9-3f5f-43a3-a861-79108871cf91"
},
{
"waf": "Operations",
"service": "App Service Web Apps",
"text": "(App Service plan) Validate app changes in the staging slot before you swap it with the production slot.",
"description": "Avoid downtime and errors. Quickly revert to the last-known good state if you detect a problem after a swap.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "02d5a8b1-6038-49c3-96b1-87ac56064269"
},
{
"waf": "performance",
"service": "App Service Web Apps",
"text": "Identify and monitor performance indicators: Set targets for the key indicators for the application, such as the volume of incoming requests, time that the application takes to respond to requests, pending requests, and errors in HTTP responses. Consider key indicators as part of the performance baseline for the workload.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "bebcf697-35e6-4f4d-abce-329e52c87367"
},
{
"waf": "performance",
"service": "App Service Web Apps",
"text": "Assess capacity: Simulate various user scenarios to determine the optimal capacity that you need to handle expected traffic. Use Load Testing to understand how your application behaves under different levels of load.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "26455527-f19a-43ef-adf4-29ed5e966a44"
},
{
"waf": "performance",
"service": "App Service Web Apps",
"text": "Select the right tier: Use dedicated compute for production workloads. Premium tiers offer larger SKUs with increased memory and CPU capacity, more instances, and more features, such as zone redundancy. For more information, see Premium V3 pricing tier.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "5ae81d49-ba81-423f-b8a2-d7a29a30f349"
},
{
"waf": "performance",
"service": "App Service Web Apps",
"text": "Optimize your scaling strategy: When possible, use autoscaling instead of manually adjusting the number of instances as application load changes. With autoscaling, App Service adjusts server capacity based on predefined rules or triggers. Make sure you do adequate performance testing and set the right rules for the right triggers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "4cb7ff21-66c1-4347-b93c-5c4073b3c4af"
},
{
"waf": "performance",
"service": "App Service Web Apps",
"text": "Use caching: Retrieving information from a resource that doesn't change frequently and is expensive to access affects performance. Complex queries, including joins and multiple lookups, contribute to runtime. Perform caching to minimize the processing time and latency. Cache query results to avoid repeated round trips to the database or back end and reduce processing time for subsequent requests.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "66321b11-3e45-4fa8-9afa-b5f9d6894c28"
},
{
"waf": "performance",
"service": "App Service Web Apps",
"text": "Review the performance antipatterns: To make sure the web application performs and scales in accordance with your business requirements, avoid the typical antipatterns. Here are some antipatterns that App Service corrects.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/app-service-web-apps.md",
+ "guid": "62ea8582-63cb-4ac6-8a73-c800a2a0428a"
},
{
"waf": "Performance",
"service": "App Service Web Apps",
"text": "Enable the Always On setting when applications share a single App Service plan. App Service apps automatically unload when idle to save resources. The next request triggers a cold start, which can cause request timeouts.",
"description": "The application is never unloaded with Always On enabled.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "225c3a4c-ee57-48b4-99f4-93d4c4884f4d"
},
{
"waf": "Performance",
"service": "App Service Web Apps",
"text": "Consider using HTTP/2 for applications to improve protocol efficiency.",
"description": "Choose HTTP/2 over HTTP/1.1 because HTTP/2 fully multiplexes connections, reuses connections to reduce overhead, and compresses headers to minimize data transfer.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4b759c59-9b6c-44d9-a7e1-1826948deb4a"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "Deploy the instances in a zone-aware configuration, where available.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "dc6efb36-f70f-41ed-aaf2-f8667781c123"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "Use Application Gateway with Web Application Firewall (WAF) within a virtual network to protect inbound `HTTP/S` traffic from the Internet.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "56195bba-5bc2-4f00-976e-f2734b46fe2b"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "In new deployments, use Azure Application Gateway v2 unless there is a compelling reason to use Azure Application Gateway v1.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "1b30c500-4ccd-4608-be41-d21c58fb0bb4"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "Plan for rule updates",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "174a65f5-51ca-483e-937f-9096d4468afa"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "Use health probes to detect backend unavailability",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "ca9df7df-8e89-4216-b9a2-0384af19938d"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "Review the impact of the interval and threshold settings on health probes",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "9754bccf-e2a5-4b36-9bca-058ec0a08fff"
},
{
"waf": "reliability",
"service": "Azure Application Gateway",
"text": "Verify downstream dependencies through health endpoints",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "cdc7160c-bc9d-40d9-ba43-bc9fa804c8c6"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Plan for rule updates",
"description": "Plan enough time for updates before accessing Application Gateway or making further changes. For example, removing servers from backend pool might take some time because they have to drain existing connections.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "67b006ed-a8b2-4f66-806b-ed9d83f94982"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Use health probes to detect backend unavailability",
"description": "If Application Gateway is used to load balance incoming traffic over multiple backend instances, we recommend the use of health probes. These will ensure that traffic is not routed to backends that are unable to handle the traffic.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6dcb1632-2ca3-411f-8555-69d689b8054f"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Review the impact of the interval and threshold settings on health probes",
"description": "The health probe sends requests to the configured endpoint at a set interval. Also, there's a threshold of failed requests that will be tolerated before the backend is marked unhealthy. These numbers present a trade-off.- Setting a higher interval puts a higher load on your service. Each Application Gateway instance sends its own health probes, so 100 instances every 30 seconds means 100 requests per 30 seconds.- Setting a lower interval leaves more time before an outage is detected.- Setting a low unhealthy threshold might mean that short, transient failures might take down a backend. - Setting a high threshold it can take longer to take a backend out of rotation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1690d11b-f93e-4bc4-9db3-25e56a9b2699"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "Verify downstream dependencies through health endpoints",
"description": "Suppose each backend has its own dependencies to ensure failures are isolated. For example, an application hosted behind Application Gateway might have multiple backends, each connected to a different database (replica). When such a dependency fails, the application might be working but won't return valid results. For that reason, the health endpoint should ideally validate all dependencies. Keep in mind that if each call to the health endpoint has a direct dependency call, that database would receive 100 queries every 30 seconds instead of 1. To avoid this, the health endpoint should cache the state of the dependencies for a short period of time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f5d846c8-9341-4a57-a77e-ccf4e9818c7f"
},
{
"waf": "Reliability",
"service": "Azure Application Gateway",
"text": "When using Azure Front Door and Application Gateway to protect `HTTP/S` applications, use WAF policies in Front Door and lock down Application Gateway to receive traffic only from Azure Front Door.",
"description": "Certain scenarios can force you to implement rules specifically on Application Gateway. For example, if ModSec CRS 2.2.9, CRS 3.0 or CRS 3.1 rules are required, these rules can be only implemented on Application Gateway. Conversely, rate-limiting and geo-filtering are available only on Azure Front Door, not on AppGateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f3b0ac39-7b7c-4fea-a540-6aa367afbc12"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Set up a TLS policy for enhanced security",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "297b842f-979b-474d-aa48-b6799a76c083"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Use AppGateway for TLS termination",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "61aac352-64e1-4351-8bc5-7dd84996adc6"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Use Azure Key Vault to store TLS certificates",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "2e0b6e8f-2784-4ea8-bec5-a128ddce6c98"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "When re-encrypting backend traffic, ensure the backend server certificate contains both the root and intermediate Certificate Authorities (CAs)",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "d3ed4722-efc4-4567-b9fe-e4254225913e"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Use an appropriate DNS server for backend pool resources",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "24847b21-1c0f-4ac9-9c00-f116155257b3"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Comply with all NSG restrictions for Application Gateway",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "12e359f5-1252-4fdf-83e8-542e5d5d34d8"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Refrain from using UDRs on the Application Gateway subnet",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "4890a129-6456-48e0-843c-195848a1eeea"
},
{
"waf": "security",
"service": "Azure Application Gateway",
"text": "Be aware of Application Gateway capacity changes when enabling WAF",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "1c10e986-48da-4cf8-acd6-2a7f7c940735"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Set up a TLS policy for enhanced security",
"description": "Set up a TLS policy for extra security. Ensure you're always using the latest TLS policy version available. This enforces TLS 1.2 and stronger ciphers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7547ed98-86fb-4a8f-94d8-162c5d6fd39d"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Use AppGateway for TLS termination",
"description": "There are advantages of using Application Gateway for TLS termination:- Performance improves because requests going to different backends to have to re-authenticate to each backend.- Better utilization of backend servers because they don't have to perform TLS processing- Intelligent routing by accessing the request content.- Easier certificate management because the certificate only needs to be installed on Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "726e1bc8-2b65-4393-a9a5-1b73976c89ef"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Use Azure Key Vault to store TLS certificates",
"description": "Application Gateway can be integrated with Key Vault. This provides stronger security, easier separation of roles and responsibilities, support for managed certificates, and an easier certificate renewal and rotation process.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5692cf86-c36a-4c1b-a73f-1a73f5728cd0"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "When re-encrypting backend traffic, ensure the backend server certificate contains both the root and intermediate Certificate Authorities (CAs)",
"description": "A TLS certificate of the backend server must be issued by a well-known CA. If the certificate was not issued by a trusted CA, the Application Gateway checks if the certificate was issued by a trusted CA, and so on, until a trusted CA certificate is found. Only then a secure connection is established. Otherwise, Application Gateway marks the backend as unhealthy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "08b9ecd4-7e8b-40a1-803b-bad57bec80ea"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Use an appropriate DNS server for backend pool resources",
"description": "When the backend pool contains a resolvable FQDN, the DNS resolution is based on a private DNS zone or custom DNS server (if configured on the VNet), or it uses the default Azure-provided DNS.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "694b80a2-72fb-4d42-a249-e9c86fb4d00a"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Comply with all NSG restrictions for Application Gateway",
"description": "NSGs are supported on Application Gateway subnet, but there are some restrictions. For instance, some communication with certain port ranges is prohibited. Make sure you understand the implications of those restrictions. For details, see Network security groups.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fc06eb7c-1989-4048-9c2f-6fc6e48fc334"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Refrain from using UDRs on the Application gateway subnet",
"description": "Using User Defined Routes (UDR) on the Application Gateway subnet can cause some issues. Health status in the back-end might be unknown. Application Gateway logs and metrics might not get generated. We recommend that you don't use UDRs on the Application Gateway subnet so that you can view the back-end health, logs, and metrics. If your organizations require to use UDR in the Application Gateway subnet, please ensure you review the supported scenarios. For more information, see Supported user-defined routes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9ba32fa7-9880-47f8-aaed-93097fe35c99"
},
{
"waf": "Security",
"service": "Azure Application Gateway",
"text": "Be aware of Application Gateway capacity changes when enabling WAF",
"description": "When WAF is enabled, every request must be buffered by the Application Gateway until it fully arrives, checks if the request matches with any rule violation in its core rule set, and then forwards the packet to the backend instances. When there are large file uploads (30MB+ in size), it can result in a significant latency. Because Application Gateway capacity requirements are different with WAF, we do not recommend enabling WAF on Application Gateway without proper testing and validation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fb24f724-e47b-46ec-a3cb-426fe159fdbf"
},
{
"waf": "cost",
"service": "Azure Application Gateway",
"text": "Familiarize yourself with Application Gateway pricing",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "30cbe437-b17d-45ad-a42e-a26bef6f4b77"
},
{
"waf": "cost",
"service": "Azure Application Gateway",
"text": "Review underutilized resources",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "74ad737c-cbb8-4e91-84b7-2aa937b37ede"
},
{
"waf": "cost",
"service": "Azure Application Gateway",
"text": "Stop Application Gateway instances that are not in use",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "a36bac4f-bf10-44c6-a51e-0d845162b3af"
},
{
"waf": "cost",
"service": "Azure Application Gateway",
"text": "Have a scale-in and scale-out policy",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "96bcda1b-240a-4d4b-93fa-6872b549d711"
},
{
"waf": "cost",
"service": "Azure Application Gateway",
"text": "Review consumption metrics across different parameters",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "0ce550b6-f2ed-428c-b8c2-b224c065a0db"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Familiarize yourself with Application Gateway pricing",
"description": "For information about Application Gateway pricing, see Understanding Pricing for Azure Application Gateway and Web Application Firewall. You can also leverage the Pricing calculator.Ensure that the options are adequately sized to meet the capacity demand and deliver expected performance without wasting resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6f1432ef-61d2-4037-8f85-58e005d16b8c"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Review underutilized resources",
"description": "Identify and delete Application Gateway instances with empty backend pools to avoid unnecessary costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7947e534-c9a8-435b-9e03-d300143b5f74"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Stop Application Gateway instances when not in use",
"description": "You aren't billed when Application Gateway is in the stopped state. Continuously running Application Gateway instances can incur extraneous costs. Evaluate usage patterns and stop instances when you don't need them. For example, usage after business hours in Dev/Test environments is expected to be low.See these articles for information about how to stop and start instances.- Stop-AzApplicationGateway- Start-AzApplicationGateway",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3c5f0966-3c57-4e15-a6b0-6cb73405bbf1"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Have a scale-in and scale-out policy",
"description": "A scale-out policy ensures that there will be enough instances to handle incoming traffic and spikes. Also, have a scale-in policy that makes sure the number of instances are reduced when demand drops. Consider the choice of instance size. The size can significantly impact the cost. Some considerations are described in the Estimate the Application Gateway instance count.For more information, see What is Azure Application Gateway v2?",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d0c4b44f-7b43-428c-93f2-dedd7bf00799"
},
{
"waf": "Cost",
"service": "Azure Application Gateway",
"text": "Review consumption metrics across different parameters",
"description": "You're billed based on metered instances of Application Gateway based on the metrics tracked by Azure. Evaluate the various metrics and capacity units and determine the cost drivers. For more information, see Microsoft Cost Management and Billing. The following metrics are key for Application Gateway. This information can be used to validate that the provisioned instance count matches the amount of incoming traffic.- Estimated Billed Capacity Units- Fixed Billable Capacity Units- Current Capacity UnitsFor more information, see Application Gateway metrics.Make sure you account for bandwidth costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ac8bb190-71ba-48ec-9fef-351c1cd5501f"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Monitor capacity metrics",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "188b768d-c65f-46c8-b0a7-e7b288b0c15d"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Enable diagnostics on Application Gateway and Web Application Firewall (WAF)",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "63eb295f-ef20-4749-a576-fbbdd528d093"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Use Azure Monitor Network Insights",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "3b24c03f-1fab-436e-b45c-4b4838f9f01a"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Match timeout settings with the backend application",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "02610076-047b-4f48-9c50-0172c4bac957"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Monitor Key Vault configuration issues using Azure Advisor",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "b53da374-3be5-405b-b543-b104491fc2e5"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Configure and monitor SNAT port limitations",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "d32ea6dc-3993-4536-b570-bc4d0236a136"
},
{
"waf": "operations",
"service": "Azure Application Gateway",
"text": "Consider SNAT port limitations in your design",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "fa9b6a56-3144-4d79-b409-8fc896c4ba76"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Monitor capacity metrics",
"description": "Use these metrics as indicators of utilization of the provisioned Application Gateway capacity. We strongly recommend setting up alerts on capacity. For details, see Application Gateway high traffic support.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "14cdf40e-36a1-4947-90a3-3b833e2df9d3"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Troubleshoot using metrics",
"description": "There are other metrics that can indicate issues either at Application Gateway or the backend. We recommend evaluating the following alerts:- Unhealthy Host Count- Response Status (dimension 4xx and 5xx)- Backend Response Status (dimension 4xx and 5xx)- Backend Last Byte Response Time- Application Gateway Total TimeFor more information, see Metrics for Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "00ddc7ab-c60b-4249-92e0-939a99ac890c"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Enable diagnostics on Application Gateway and Web Application Firewall (WAF)",
"description": "Diagnostic logs allow you to view firewall logs, performance logs, and access logs. Use these logs to manage and troubleshoot issues with Application Gateway instances. For more information, see Back-end health and diagnostic logs for Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ee3b1f28-7d23-484a-a721-a0e0da65aed8"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Use Azure Monitor Network Insights",
"description": "Azure Monitor Network Insights provides a comprehensive view of health and metrics for network resources, including Application Gateway. For additional details and supported capabilities for Application Gateway, see Azure Monitor Network insights.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "98530e65-c941-48d2-8ce7-55649e17a701"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Match timeout settings with the backend application",
"description": "Ensure you have configured the IdleTimeout settings to match the listener and traffic characteristics of the backend application. The default value is set to four minutes and can be configured to a maximum of 30. For more information, see Load Balancer TCP Reset and Idle Timeout.For workload considerations, see Monitoring application health for reliability.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9dd45a04-f63b-4ba8-bb19-0fa074b57dcc"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Monitor Key Vault configuration issues using Azure Advisor",
"description": "Application Gateway checks for the renewed certificate version in the linked Key Vault at every 4-hour interval. If it is inaccessible due to any incorrect Key Vault configuration, it logs that error and pushes a corresponding Advisor recommendation. You must configure the Advisor alerts to stay updated and fix such issues immediately to avoid any Control or Data plane related problems. For more information, see Investigating and resolving key vault errors. To set an alert for this specific case, use the Recommendation Type as Resolve Azure Key Vault issue for your Application Gateway.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "91366299-47be-4ee6-a9c1-adfa6b11beff"
},
{
"waf": "Operations",
"service": "Azure Application Gateway",
"text": "Consider SNAT port limitations in your design",
"description": "SNAT port limitations are important for backend connections on the Application Gateway. There are separate factors that affect how Application Gateway reaches the SNAT port limit. For example, if the backend is a public IP address, it will require its own SNAT port. In order to avoid SNAT port limitations, you can increase the number of instances per Application Gateway, scale out the backends to have more IP addresses, or move your backends into the same virtual network and use private IP addresses for the backends.Requests per second (RPS) on the Application Gateway will be affected if the SNAT port limit is reached. For example, if an Application Gateway reaches the SNAT port limit, then it won't be able to open a new connection to the backend, and the request will fail.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9bb30e02-43fd-4ed2-9189-c9a23ae9933f"
},
{
"waf": "performance",
"service": "Azure Application Gateway",
"text": "Estimate the Application Gateway instance count",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "63dd2b1b-6076-46c9-8b80-54a255b77f49"
},
{
"waf": "performance",
"service": "Azure Application Gateway",
"text": "Define the maximum instance count",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "adb085fc-433d-4bde-815d-77486524d8a3"
},
{
"waf": "performance",
"service": "Azure Application Gateway",
"text": "Define the minimum instance count",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "33ae0084-c64e-471f-aef1-c84a5cf77d5d"
},
{
"waf": "performance",
"service": "Azure Application Gateway",
"text": "Define Application Gateway subnet size",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "0e38111f-c642-46ca-a2a0-72d5eb520cab"
},
{
"waf": "performance",
"service": "Azure Application Gateway",
"text": "Take advantage of Application Gateway V2 features for autoscaling and performance benefits",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-application-gateway.md",
+ "guid": "66695955-0890-4f69-ab88-292a6c641558"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Define the minimum instance count",
"description": "For Application Gateway v2 SKU, autoscaling takes some time (approximately six to seven minutes) before the additional set of instances is ready to serve traffic. During that time, if there are short spikes in traffic, expect transient latency or loss of traffic.We recommend that you set your minimum instance count to an optimal level. After you estimate the average instance count and determine your Application Gateway autoscaling trends, define the minimum instance count based on your application patterns. For information, see Application Gateway high traffic support.Check the Current Compute Units for the past one month. This metric represents the gateway's CPU utilization. To define the minimum instance count, divide the peak usage by 10. For example, if your average Current Compute Units in the past month is 50, set the minimum instance count to five.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "af6f1096-14f3-465c-8691-b15cf5361942"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Define the maximum instance count",
"description": "We recommend 125 as the maximum autoscale instance count. Make sure the subnet that has the Application Gateway has sufficient available IP addresses to support the scale-up set of instances.Setting the maximum instance count to 125 has no cost implications because you're billed only for the consumed capacity.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e1a91738-8def-4c1e-83ce-cd7dac9c986a"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Define Application Gateway subnet size",
"description": "Application Gateway needs a dedicated subnet within a virtual network. The subnet can have multiple instances of the deployed Application Gateway resource. You can also deploy other Application Gateway resources in that subnet, v1 or v2 SKU.Here are some considerations for defining the subnet size:- Application Gateway uses one private IP address per instance and another private IP address if a private front-end IP is configured.- Azure reserves five IP addresses in each subnet for internal use.- Application Gateway (Standard or WAF SKU) can support up to 32 instances. Taking 32 instance IP addresses + 1 private front-end IP + 5 Azure reserved, a minimum subnet size of /26 is recommended. Because the Standard_v2 or WAF_v2 SKU can support up to 125 instances, using the same calculation, a subnet size of /24 is recommended.- If you want to deploy additional Application Gateway resources in the same subnet, consider the additional IP addresses that will be required for their maximum instance count for both, Standard and Standard v2.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6d9985b2-103c-4b47-82b9-148e22af311b"
},
{
"waf": "Performance",
"service": "Azure Application Gateway",
"text": "Take advantage of features for autoscaling and performance benefits",
"description": "The v2 SKU offers autoscaling to ensure that your Application Gateway can scale up as traffic increases. When compared to v1 SKU, v2 has capabilities that enhance the performance of the workload. For example, better TLS offload performance, quicker deployment and update times, zone redundancy, and more. For more information about autoscaling features, see Scaling Application Gateway v2 and WAF v2.If you are running v1 SKU Application gateway, consider migrating to the Application gateway v2 SKU. For more information, see Migrate Azure Application Gateway and Web Application Firewall from v1 to v2.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "22740e5f-f63b-4b82-8629-fb9d4fd74c36"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Use failure mode analysis: Minimize points of failure by considering internal dependencies such as the availability of virtual networks, Azure Key Vault, or Azure Content Delivery Network or Azure Front Door endpoints. Failures can occur if credentials required by workloads to access Blob Storage go missing from Key Vault, or if workloads use an endpoint based on a content delivery network that's removed. In these cases, workloads might need to use an alternative endpoint to connect. For general information about failure mode analysis, see Recommendations for performing failure mode analysis.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "42f14a23-b4d3-47a8-a0d1-5f9987aab27b"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Define reliability and recovery targets: Review the Azure service-level agreements (SLAs). Derive the service-level objective (SLO) for the storage account. For example, the SLO might be affected by the redundancy configuration that you chose. Consider the effect of a regional outage, the potential for data loss, and the time required to restore access after an outage. Also consider the availability of any internal dependencies that you identified as part of your failure mode analysis.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "ce838d0f-8069-420d-9adb-5c508c091e3f"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Configure data redundancy: For maximum durability, choose a configuration that copies data across availability zones or global regions. For maximum availability, choose a configuration that allows clients to read data from the secondary region during an outage of the primary region.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "8930145f-653c-4630-8090-7ddfb1522a30"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Design applications: Design applications to seamlessly shift to reading data from the secondary region if the primary region becomes unavailable for any reason. This only applies to geo-redundant storage (GRS) and geo-zone-redundant storage (GZRS) configurations. Designing applications to handle outages reduces downtime for end users.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "b819c0de-783e-4b18-8232-416710492029"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Explore features to help you meet your recovery targets: Make blobs restorable so that they can be recovered if they're corrupted, edited, or deleted by mistake.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "ff928466-de8a-496a-b5ba-aa8c358e3e09"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Create a recovery plan: Consider data protection features, backup and restore operations, or failover procedures. Prepare for potential data loss and data inconsistencies and the time and cost of failing over. For more information, see Recommendations for designing a disaster recovery strategy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "d93ddbcf-8760-4b99-8fdc-4f31268e76f7"
},
{
"waf": "reliability",
"service": "Azure Blob Storage",
"text": "Monitor potential availability problems: Subscribe to the Azure Service Health dashboard to monitor potential availability problems. Use storage metrics in Azure Monitor and diagnostic logs to investigate alerts.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "778ba0b4-9f48-4fd5-a788-949f2f2ea331"
},
{
"waf": "Reliability",
"service": "Azure Blob Storage",
"text": "Configure your account for redundancy. For maximum availability and durability, configure your account by using zone-redundant storage (ZRS) or GZRS.",
"description": "Redundancy protects your data against unexpected failures. The ZRS and GZRS configuration options replicate across different availability zones and enable applications to continue reading data during an outage. For more information, see Durability and availability by outage scenario and Durability and availability parameters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0a6a14f8-c014-4339-a444-45013d989209"
},
{
"waf": "Reliability",
"service": "Azure Blob Storage",
"text": "Before initiating a failover or failback, evaluate the potential for data loss by checking the value of the last synchronization time property. This recommendation applies only to GRS and GZRS configurations.",
"description": "This property helps you estimate how much data you might lose by initiating an account failover. All data and metadata written before the last synchronization time is available on the secondary region, but data and metadata written after the last synchronization time might be lost because it's not written to the secondary region.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "af07c8fb-ba63-41e5-b924-3bc6759ad671"
},
{
"waf": "Reliability",
"service": "Azure Blob Storage",
"text": "As a part of your backup and recovery strategy, enable the container soft delete, blob soft delete, versioning, and point-in-time restore options.",
"description": "The soft delete option enables a storage account to recover deleted containers and blobs. The versioning option automatically tracks changes made to blobs. This option lets you restore a blob to a previous state.The point-in-time restore option protects against accidental blob deletion or corruption and lets you restore block blob data to an earlier state. For more information, see Data protection overview.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "349d483b-5d14-4335-954a-4f8cbecfd7df"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Review the security baseline for Azure Storage: To get started, first review the security baseline for Storage.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "a7cd3662-4984-4a5a-8ed7-95c707f19c25"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Use network controls to restrict ingress and egress traffic: Disable all public traffic to the storage account. Use account network controls to grant the minimal level of access required by users and applications. For more information, see How to approach network security for your storage account.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "345a1c5e-8ca7-41e1-9acc-702b9684df71"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Reduce the attack surface: Preventing anonymous access, account key access, or access over non-secure (HTTP) connections can reduce the attack surface. Require clients to send and receive data by using the latest version of the Transport Layer Security (TLS) protocol.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "ceb9eb53-c2e4-4f28-b6e0-d42414ab3439"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Authorize access without using passwords or keys: Microsoft Entra ID provides superior security and ease of use compared to shared keys and shared access signatures. Grant security principals only those permissions that are necessary for them to do their tasks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "0936d029-8a6b-4eae-a739-863462bbecf4"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Protect sensitive information: Protect sensitive information such as account keys and shared access signature tokens. While these forms of authorization are generally not recommended, you should make sure to rotate, expire, and store them securely.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "48fe0f97-d78a-4907-b588-0b6d53172ff2"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Enable the secure transfer required option: Enabling this setting for all your storage accounts ensures that all requests made against the storage account must take place over secure connections. Any requests made over HTTP fail.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "b174e3db-c952-4b33-a72e-874f60a0f671"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Protect critical objects: Apply immutability policies to protect critical objects. Policies protect blobs that are stored for legal, compliance, or other business purposes from being modified or deleted. Configure holds for set time periods or until restrictions are lifted by an administrator.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "96a5a2e1-d8de-4297-b395-168cbd02467b"
},
{
"waf": "security",
"service": "Azure Blob Storage",
"text": "Detect threats: Enable Microsoft Defender for Storage to detect threats. Security alerts are triggered when anomalies in activity occur. The alerts notify subscription administrators via email with details of suspicious activity and recommendations on how to investigate and remediate threats.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "d0d49387-46dd-4aad-b467-19ecd0142c05"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Disable anonymous read access to containers and blob.",
"description": "When anonymous access is allowed for a storage account, a user that has the appropriate permissions can modify a container's anonymous access setting to enable anonymous access to the data in that container.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a2c5082f-3260-46ef-a44f-cab9c74fd16f"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Apply an Azure Resource Manager lock on the storage account.",
"description": "Locking an account prevents it from being deleted and causing data loss.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3195423b-0513-45e2-951b-87f9c5d534b0"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Disable traffic to the public endpoints of your storage account. Create private endpoints for clients that run in Azure. Enable the public endpoint only if clients and services external to Azure require direct access to your storage account. Enable firewall rules that limit access to specific virtual networks.",
"description": "Start with zero access and then incrementally authorize the lowest levels of access required for clients and services to minimize the risk of creating unnecessary openings for attackers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4c73ba4b-1d06-42f6-afcb-2dc1d4b8885a"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Authorize access by using Azure role-based access control (RBAC).",
"description": "With RBAC, there are no passwords or keys that can be compromised. The security principal (user, group, managed identity, or service principal) is authenticated by Microsoft Entra ID to return an OAuth 2.0 token. The token is used to authorize a request against the Blob Storage service.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "02be562a-9a28-4e56-94a3-a3671dd382fc"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Disallow shared key authorization. This disables not only account key access but also service and account shared access signature tokens because they're based on account keys.",
"description": "Only secured requests that are authorized with Microsoft Entra ID are permitted.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c1c19545-ae06-45b2-9770-1bc64e63c70b"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "We recommend that you don't use an account key. If you must use account keys, then store them in Key Vault, and make sure that you regenerate them periodically.",
"description": "Key Vault lets you retrieve keys at runtime, instead of saving them by using your application. Key Vault also makes it easy to rotate your keys without interruption to your applications. Rotating the account keys periodically reduces the risk of exposing your data to malicious attacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fa8fe7b9-8118-4913-adbe-be4420b62cfd"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "We recommend that you don't use shared access signature tokens. Evaluate whether you need shared access signature tokens to secure access to Blob Storage resources. If you must create one, then review this list of shared access signature best practices before you create and distribute it.",
"description": "Best practices can help you prevent a shared access signature token from being leaked and quickly recover if a leak does occur.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "74296778-eb6c-4ef3-b2db-f64839ca4140"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Configure your storage account so clients can send and receive data by using the minimum version of TLS 1.2.",
"description": "TLS 1.2 is more secure and faster than TLS 1.0 and 1.1, which don't support modern cryptographic algorithms and cipher suites.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "42a36eba-778e-437d-9750-4002823c8835"
},
{
"waf": "Security",
"service": "Azure Blob Storage",
"text": "Consider using your own encryption key to protect the data in your storage account. For more information, see Customer-managed keys for Azure Storage encryption.",
"description": "Customer-managed keys provide greater flexibility and control. For example, you can store encryption keys in Key Vault and automatically rotate them.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fd88f923-7d9f-4071-9152-15ee808cc9ed"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Identify the meters that are used to calculate your bill: Meters are used to track the amount of data stored in the account (data capacity) and the number and type of operations that are performed to write and read data. There are also meters associated with the use of optional features such as blob index tags, blob inventory, change feed support, encryption scopes, and SSH File Transfer Protocol (SFTP) support. For more information, see How you're charged for Blob Storage.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "322c5ad8-8c4a-4aa9-acd7-6f34a3e47c9c"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Understand the price of each meter: Make sure to use the appropriate pricing page and apply the appropriate settings in that page. For more information, see Finding the unit price for each meter. Consider the number of operations associated with each price. For example, the price associated with write and read operations applies to 10,000 operations. To determine the price of an individual operation, divide the listed price by 10,000.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "e53d71d3-879f-4a64-b425-e30f007e7221"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Estimate the cost of capacity and operations: You can model the costs associated with data storage, ingress, and egress by using the Azure pricing calculator. Use fields to compare the cost associated with various regions, account types, namespace types, and redundancy configurations. For certain scenarios, you can use sample calculations and worksheets available in Microsoft documentation. For example, you can estimate the cost of archiving data or estimate the cost of using the AzCopy command to transfer blobs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "4d17df43-4382-430a-9463-13abf73774d0"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Choose a billing model for capacity: Evaluate whether using a commitment-based model is more cost-efficient than using a consumption-based model. If you're unsure about how much capacity you need, you can start with a consumption-based model, monitor the capacity metrics, and then evaluate later.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "5bf631db-5818-4a48-9bb2-12383fb22c27"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Choose an account type, a redundancy level, and a default access tier: You must select a value for each of these settings when you create a storage account. All the values affect transaction charges and capacity charges. All these settings except for the account type can be changed after the account is created.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "96e18bc5-92d9-4184-990e-0916f7c116fa"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Choose the most cost-effective default access tier: Unless a tier is specified with each blob upload, blobs infer their access tier from the default access tier setting. A change to the default access tier setting of a storage account applies to all blobs in the account for which an access tier hasn't been explicitly set. This cost could be significant if you've collected a large number of blobs. For more information about how a tier change affects each existing blob, see Changing a blob's access tier.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "d78ebd83-3708-43dc-a146-c87c0bc845cc"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Upload data directly to the most cost-efficient access tier: For example, if the default access tier setting of your account is hot, but you're uploading files for archiving purposes, specify a cooler tier as the archive or a cold tier as part of your upload operation. After uploading blobs, use lifecycle management policies to move blobs to the most cost-efficient tiers based on usage metrics such as the last accessed time. Choosing the most optimal tier up front can reduce costs. If you change the tier of a block blob that you already uploaded, then you pay the cost of writing to the initial tier when you first upload the blob, and then pay the cost of writing to the desired tier.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "d8225b92-cc37-400e-9e24-660b9f4c1a28"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Have a plan for managing the data lifecycle: Optimize transaction and capacity costs by taking advantage of access tiers and lifecycle management. Data used less often should be placed in cooler access tiers while data that's accessed often should be placed in warmer access tiers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "d48626ce-bf57-4b9a-92b4-58d2904aca16"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Decide which features you need: Some features such as versioning and blob soft delete incur additional transaction and capacity costs as well as other charges. Make sure to review the pricing and billing sections in articles that describe those capabilities when you choose which capabilities to add to your account.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "ccbe2ffd-7bea-41ce-93fa-a9facc5bc5d0"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Create guardrails: Create budgets based on subscriptions and resource groups. Use governance policies to restrict resource types, configurations, and locations. Additionally, use RBAC to block actions that can lead to overspending.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "f0c38fed-fc9f-458d-aab7-9b03b8a0dfea"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Monitor costs: Ensure costs stay within budgets, compare costs against forecasts, and see where overspending occurs. You can use the cost analysis pane in the Azure portal to monitor costs. You also can export cost data to a storage account and analyze that data by using Excel or Power BI.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "18f1f2f6-de79-405d-b7a1-65fb571c0493"
},
{
"waf": "cost",
"service": "Azure Blob Storage",
"text": "Monitor usage: Continuously monitor usage patterns and detect unused or underutilized accounts and containers. Use Storage insights to identity accounts with no or low use. Enable blob inventory reports, and use tools such as Azure Databricks or Azure Synapse Analytics and Power BI to analyze cost data. Watch out for unexpected increases in capacity, which might indicate that you're collecting numerous log files, blob versions, or soft-deleted blobs. Develop a strategy for expiring or transitioning objects to more cost-effective access tiers.Have a plan for expiring objects or moving objects to more affordable access tiers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "d48bcd05-e5af-4500-b04e-e35dce0f17f9"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Pack small files into larger files before moving them to cooler tiers. You can use file formats such as TAR or ZIP.",
"description": "Cooler tiers have higher data transfer costs. By having fewer large files, you can reduce the number of operations required to transfer data.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1e8c6cb4-abe1-4ba1-899f-5ddc0d700517"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Use standard-priority rehydration when rehydrating blobs from archive storage. Use high-priority rehydration only for emergency data restoration situations. For more information, see Rehydrate an archived blob to an online tier",
"description": "High-priority rehydration from the archive tier can lead to higher-than-normal bills.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ab60898d-c5ae-4087-95ce-5b55ed006972"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Reduce the cost of using resource logs by choosing the appropriate log storage location and by managing log-retention periods. If you only plan to query logs occasionally (for example, querying logs for compliance auditing), consider sending resource logs to a storage account instead of sending them to an Azure Monitor Logs workspace. You can use a serverless query solution such as Azure Synapse Analytics to analyze logs. For more information, see Optimize cost for infrequent queries. Use lifecycle management policies to delete or archive logs.",
"description": "Storing resource logs in a storage account for later analysis can be a cheaper option. Using lifecycle management policies to manage log retention in a storage account prevents large numbers of logs files building up over time, which can lead to unnecessary capacity charges.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4ee9e348-ad55-46c9-bdbf-e17adcae5fd0"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "If you enable versioning, use a lifecycle management policy to automatically delete old blob versions.",
"description": "Every write operation to a blob creates a new version. This increases capacity costs. You can keep costs in check by removing versions that you no longer need.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "72af3409-f6b8-43b7-b254-31990577bb73"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "If you enable versioning, then place blobs that are frequently overwritten into an account that doesn't have versioning enabled.",
"description": "Every time a blob is overwritten, a new version is added which leads to increased storage capacity charges. To reduce capacity charges, store frequently overwritten data in a separate storage account with versioning disabled.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4fb53237-e44f-4292-a7a5-f8e79d55fc4e"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "If you enable soft delete, then place blobs that are frequently overwritten into an account that doesn't have soft delete enabled. Set retention periods. Consider starting with a short retention period to better understand how the feature affects your bill. The minimum recommended retention period is seven days.",
"description": "Every time a blob is overwritten, a new snapshot is created. The cause of increased capacity charges might be difficult to access because the creation of these snapshots doesn't appear in logs. To reduce capacity charges, store frequently overwritten data in a separate storage account with soft delete disabled. A retention period keeps soft-deleted blobs from piling up and adding to the cost of capacity.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "edc3f7bc-6b6c-41a8-8f11-1485781fdf58"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Enable SFTP support only when it's used to transfer data.",
"description": "Enabling the SFTP endpoint incurs an hourly cost. By thoughtfully disabling SFTP support, and then enabling it as needed, you can avoid passive charges from accruing in your account.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dd86bdc7-a08c-4624-9028-e0e80335a9ba"
},
{
"waf": "Cost",
"service": "Azure Blob Storage",
"text": "Disable any encryption scopes that aren't needed to avoid unnecessary charges.",
"description": "Encryptions scopes incur a per month charge.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a97cd83a-ed73-43df-bf01-11853e14f665"
},
{
"waf": "operations",
"service": "Azure Blob Storage",
"text": "Create maintenance and emergency recovery plans: Consider data protection features, backup and restore operations, and failover procedures. Prepare for potential data loss and data inconsistencies and the time and cost of failing over.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "2f429983-43fe-4e9a-a0f7-ec3328270b5c"
},
{
"waf": "operations",
"service": "Azure Blob Storage",
"text": "Monitor the health of your storage account: Create Storage insights dashboards to monitor availability, performance, and resilience metrics. Set up alerts to identify and address problems in your system before your customers notice them. Use diagnostic settings to route resource logs to an Azure Monitor Logs workspace. Then you can query logs to investigate alerts more deeply.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "16a0b5cc-d1a3-430b-a8d1-141a721f4e76"
},
{
"waf": "operations",
"service": "Azure Blob Storage",
"text": "Enable blob inventory reports: Enable blob inventory reports to review the retention, legal hold, or encryption status of your storage account contents. You can also use blob inventory reports to understand the total data size, age, tier distribution, or other attributes of your data. Use tools such as Azure Databricks or Azure Synapse Analytics and Power BI to better visualize inventory data and to create reports for stakeholders.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "c9e1bce3-8d36-44f7-a91a-e7d35e67297c"
},
{
"waf": "operations",
"service": "Azure Blob Storage",
"text": "Set up policies that delete blobs or move them to cost-efficient access tiers: Create a lifecycle management policy with an initial set of conditions. Policy runs automatically delete or set the access tier of blobs based on the conditions you define. Periodically analyze container use by using Monitor metrics and blob inventory reports so that you can refine conditions to optimize cost efficiency.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "508126c2-2c18-4411-a803-1d9c7ee07e7a"
},
{
"waf": "Operations",
"service": "Azure Blob Storage",
"text": "Use infrastructure as code (IaC) to define the details of your storage accounts in Azure Resource Manager templates (ARM templates), Bicep, or Terraform.",
"description": "You can use your existing DevOps processes to deploy new storage accounts, and use Azure Policy to enforce their configuration.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1c680237-1240-4015-b028-1e1525ac1a41"
},
{
"waf": "Operations",
"service": "Azure Blob Storage",
"text": "Use Storage insights to track the health and performance of your storage accounts. Storage insights provides a unified view of the failures, performance, availability, and capacity for all your storage accounts.",
"description": "You can track the health and operation of each of your accounts. Easily create dashboards and reports that stakeholders can use to track the health of your storage accounts.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "15f258d9-8353-49ff-9eca-441c96e911be"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Plan for scale: Understand the scale targets for storage accounts.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "aaf8acc7-9e41-4997-8da4-cc82b102db09"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Choose the optimal storage account type: If your workload requires high transaction rates, smaller objects, and a consistently low transaction latency, then consider using premium block blob storage accounts. A standard general-purpose v2 account is most appropriate in most cases.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "414185fb-3518-4ff6-a275-a48689d44e4d"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Reduce travel distance between the client and server: Place data in regions nearest to connecting clients (ideally in the same region). Optimize for clients in regions far away by using object replication or a content delivery network. Default network configurations provide the best performance. Modify network settings only to improve security. In general, network settings don't decrease travel distance and don't improve performance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "4732ffbc-7fe6-4e88-9178-932e7fbeddf5"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Choose an efficient naming scheme: Decrease the latency of listing, list, query, and read operations by using hash tag prefixes nearest the beginning of the blob partition key (account, container, virtual directory, or blob name). This scheme benefits mostly accounts that have a flat namespace.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "e79e1149-9aa1-4064-8c07-52e390f99d9e"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Optimize the performance of data clients: Choose a data transfer tool that's most appropriate for the data size, transfer frequency, and bandwidth of your workloads. Some tools such as AzCopy are optimized for performance and require little intervention. Consider the factors that influence latency, and fine-tune performance by reviewing the performance optimization guidance that's published with each tool.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "2c5c76ee-3c54-4063-9deb-6e02b3b046e6"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Optimize the performance of custom code: Consider using Storage SDKs instead of creating your own wrappers for blob REST operations. Azure SDKs are optimized for performance and provide mechanisms to fine-tune performance. Before creating an application, review the performance and scalability checklist for Blob Storage. Consider using query acceleration to filter out unwanted data during the storage request and keep clients from needlessly transferring data across the network.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "faea0cea-49d5-462b-bece-94cca446b10a"
},
{
"waf": "performance",
"service": "Azure Blob Storage",
"text": "Collect performance data: Monitor your storage account to identify performance bottlenecks that occur from throttling. For more information, see Monitoring your storage service with Monitor Storage insights. Use both metrics and logs. Metrics provide numbers such as throttling errors. Logs describe activity. If you see throttling metrics, you can use logs to identity which clients are receiving throttling errors. For more information, see Auditing data plane operations.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-blob-storage.md",
+ "guid": "557fe672-1057-4798-acbb-bb377abcb704"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "Provision storage accounts in the same region where dependent resources are placed. For applications that aren't hosted on Azure, such as mobile device apps or on-premises enterprise services, locate the storage account in a region nearer to those clients. For more information, see Azure geographies.If clients from a different region don't require the same data, then create a separate account in each region.If clients from a different region require only some data, consider using an object-replication policy to asynchronously copy relevant objects to a storage account in the other region.",
"description": "Reducing the physical distance between the storage account and VMs, services, and on-premises clients can improve performance and reduce network latency. Reducing the physical distance also reduces cost for applications hosted in Azure because bandwidth usage within a single region is free.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "876895f8-8298-4cda-9569-2fb95405511a"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "For broad consumption by web clients (streaming video, audio, or static website content), consider using a content delivery network through Azure Front Door.",
"description": "Content is delivered to clients faster because it uses the Microsoft global edge network with hundreds of global and local points of presence around the world.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b14ffaa1-4873-48ce-be43-05203e7e2562"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "Add a hash character sequence (such as three digits) as early as possible in the partition key of a blob. The partition key is the account name, container name, virtual directory name, and blob name. If you plan to use timestamps in names, then consider adding a seconds value to the beginning of that stamp. For more information, see Partitioning.",
"description": "Using a hash code or seconds value nearest the beginning of a partition key reduces the time required to list query and read blobs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5111fdd2-bb7e-46bf-9c14-371d1371c935"
},
{
"waf": "Performance",
"service": "Azure Blob Storage",
"text": "When uploading blobs or blocks, use a blob or block size that's greater than 256 KiB.",
"description": "Blob or block sizes above 256 KiB takes advantage of performance enhancements in the platform made specifically for larger blobs and block sizes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "22fb7fa5-e280-4a6a-8ae4-53fcd802c196"
},
{
"waf": "reliability",
"service": "Azure Expressroute",
"text": "Select between ExpressRoute circuit or ExpressRoute Direct for business requirements.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "c18e33dd-d764-42da-b855-cd050de2367a"
},
{
"waf": "reliability",
"service": "Azure Expressroute",
"text": "Configure Active-Active ExpressRoute connections between on-premises and Azure.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "7a87eeb7-44d2-409f-842f-fad32d9b01e1"
},
{
"waf": "reliability",
"service": "Azure Expressroute",
"text": "Set up availability zone aware ExpressRoute Virtual Network Gateways.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "51ac729d-25ff-4632-88e5-72df1106559d"
},
{
"waf": "reliability",
"service": "Azure Expressroute",
"text": "Configure ExpressRoute Virtual Network Gateways in different regions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "2d31b435-8edb-46cb-a682-8190d7cfedf9"
},
{
"waf": "reliability",
"service": "Azure Expressroute",
"text": "Configure site-to-site VPN as a backup to ExpressRoute private peering.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "d8dbe205-0115-4fc8-8aaf-fff7d9382a5e"
},
{
"waf": "reliability",
"service": "Azure Expressroute",
"text": "Configure service health to receive ExpressRoute circuit maintenance notification.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "41687924-ef94-411f-b71a-c8ec2543dbb7"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Plan for ExpressRoute circuit or ExpressRoute Direct",
"description": "During the initial planning phase, you want to decide whether you want to configure an ExpressRoute circuit or an ExpressRoute Direct connection. An ExpressRoute circuit allows a private dedicated connection into Azure with the help of a connectivity provider. ExpressRoute Direct allows you to extend on-premises network directly into the Microsoft network at a peering location. You also need to identify the bandwidth requirement and the SKU type requirement for your business needs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "47e7f99c-d9da-440c-96f3-53c2d1b3578e"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Physical layer diversity",
"description": "For better resiliency, plan to have multiple paths between the on-premises edge and the peering locations (provider/Microsoft edge locations). This configuration can be achieved by going through different service provider or through a different location from the on-premises network.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "18491e10-13a3-4864-87e9-3e37cbf8625e"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Plan for geo-redundant circuits",
"description": "To plan for disaster recovery, set up ExpressRoute circuits in more than one peering locations. You can create circuits in peering locations in the same metro or different metro and choose to work with different service providers for diverse paths through each circuit. For more information, see Designing for disaster recovery and Designing for high availability.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6807a566-19b0-4db5-a02e-af800136355e"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Plan for Active-Active connectivity",
"description": "ExpressRoute dedicated circuits guarantee `99.95%` availability when an active-active connectivity is configured between on-premises and Azure. This mode provides higher availability of your Expressroute connection. It's also recommended to configure BFD for faster failover if there's a link failure on a connection.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b145c875-e017-4b1e-af6a-e2c86150d5b9"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Planning for Virtual Network Gateways",
"description": "Create availability zone aware Virtual Network Gateway for higher resiliency and plan for Virtual Network Gateways in different region for disaster recovery and high availability.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a71ef0ea-30fd-4a34-b4ca-10a87d4db10a"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Monitor circuits and gateway health",
"description": "Set up monitoring and alerts for ExpressRoute circuits and Virtual Network Gateway health based on various metrics available.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1f311354-8e72-4308-ac18-29dd48ce58ad"
},
{
"waf": "Reliability",
"service": "Azure Expressroute",
"text": "Enable service health",
"description": "ExpressRoute uses service health to notify about planned and unplanned maintenance. Configuring service health will notify you about changes made to your ExpressRoute circuits.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1c26f51d-9ce7-49c5-87e8-d45a56f9fa14"
},
{
"waf": "security",
"service": "Azure Expressroute",
"text": "Configure Activity log to send logs to archive.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "dbcfcfa3-dcb3-43f7-8e98-a9d6d44ab3ae"
},
{
"waf": "security",
"service": "Azure Expressroute",
"text": "Maintain an inventory of administrative accounts with access to ExpressRoute resources.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "fd7f29a7-ae31-4983-8510-e219a25cfdfc"
},
{
"waf": "security",
"service": "Azure Expressroute",
"text": "Configure MD5 hash on ExpressRoute circuit.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "5f06f160-46b8-48b3-ab94-89da0ff37c56"
},
{
"waf": "security",
"service": "Azure Expressroute",
"text": "Configure MACSec for ExpressRoute Direct resources.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "e09a0328-3f6e-4ab5-9856-581a76090453"
},
{
"waf": "security",
"service": "Azure Expressroute",
"text": "Encrypt traffic over private peering and Microsoft peering for virtual network traffic.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "960e86aa-d918-4a37-917a-eab33a2a98fa"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Configure Activity log to send logs to archive",
"description": "Activity logs provide insights into operations that were performed at the subscription level for ExpressRoute resources. With Activity logs, you can determine who and when an operation was performed at the control plane. Data retention is only 90 days and required to be stored in Log Analytics, Event Hubs or a storage account for archive.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b893441c-5f7c-44fe-bfa2-457af4ae1cb8"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Maintain inventory of administrative accounts",
"description": "Use Azure RBAC to configure roles to limit user accounts that can add, update, or delete peering configuration on an ExpressRoute circuit.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "44059f81-2473-4325-ad67-70df146e1f5d"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Configure MD5 hash on ExpressRoute circuit",
"description": "During configuration of private peering or Microsoft peering, apply an MD5 hash to secure messages between the on-premises route and the MSEE routers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0d7a206c-e977-4c39-9379-766f5f20365b"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Configure MACSec for ExpressRoute Direct resources",
"description": "Media Access Control security is a point-to-point security at the data link layer. ExpressRoute Direct supports configuring MACSec to prevent security threats to protocols such as ARP, DHCP, LACP not normally secured on the Ethernet link. For more information on how to configure MACSec, see MACSec for ExpressRoute Direct ports.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "02e71cb8-379a-45ef-8daa-e4bfa3fa7237"
},
{
"waf": "Security",
"service": "Azure Expressroute",
"text": "Encrypt traffic using IPsec",
"description": "Configure a Site-to-site VPN tunnel over your ExpressRoute circuit to encrypt data transferring between your on-premises network and Azure virtual network. You can configure a tunnel using private peering or using Microsoft peering.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a7cb83ea-dfc8-49eb-9c03-a57fbcd3a0ef"
},
{
"waf": "cost",
"service": "Azure Expressroute",
"text": "Familiarize yourself with ExpressRoute pricing.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "96599299-4653-4e94-989b-8c7fe64cb2bd"
},
{
"waf": "cost",
"service": "Azure Expressroute",
"text": "Determine the ExpressRoute circuit SKU and bandwidth required.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "a3aaf86d-0531-404f-b881-78bbacd912ca"
},
{
"waf": "cost",
"service": "Azure Expressroute",
"text": "Determine the ExpressRoute virtual network gateway size required.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "2d710fcf-b8bc-461d-81a1-895193ce91cc"
},
{
"waf": "cost",
"service": "Azure Expressroute",
"text": "Monitor cost and create budget alerts.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "7327aac3-008f-4878-bf49-a6c3f76746a1"
},
{
"waf": "cost",
"service": "Azure Expressroute",
"text": "Deprovision ExpressRoute circuits no longer in use.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "271b6cfe-4507-4afa-a1e5-000e3be105ac"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Familiarize yourself with ExpressRoute pricing",
"description": "For information about ExpressRoute pricing, see Understand pricing for Azure ExpressRoute. You can also use the Pricing calculator.Ensure that the options are adequately sized to meet the capacity demand and deliver expected performance without wasting resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "92eec823-61dd-486c-b46e-0339fc02987e"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Determine SKU and bandwidth required",
"description": "The way you're charged for your ExpressRoute usage varies between the three different SKU types. With Local SKU, you're automatically charged with an Unlimited data plan. With Standard and Premium SKU, you can select between a Metered or an Unlimited data plan. All ingress data are free of charge except when using the Global Reach add-on. It's important to understand which SKU types and data plan works best for your workload to best optimize cost and budget. For more information resizing ExpressRoute circuit, see upgrading ExpressRoute circuit bandwidth.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c5c27eb1-6f1c-4b97-a216-0cbdc31a3c98"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Determine the ExpressRoute virtual network gateway size",
"description": "ExpressRoute virtual network gateways are used to pass traffic into a virtual network over private peering. Review the performance and scale needs of your preferred Virtual Network Gateway SKU. Select the appropriate gateway SKU on your on-premises to Azure workload.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "73967d95-39ff-47bb-b4f4-33ddade69d1f"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Monitor cost and create budget alerts",
"description": "Monitor the cost of your ExpressRoute circuit and create alerts for spending anomalies and overspending risks. For more information, see Monitoring ExpressRoute costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "edd459fa-3105-4a03-b009-4f983d23da5a"
},
{
"waf": "Cost",
"service": "Azure Expressroute",
"text": "Deprovision and delete ExpressRoute circuits no longer in use.",
"description": "ExpressRoute circuits are charged from the moment they're created. To reduce unnecessary cost, deprovision the circuit with the service provider and delete the ExpressRoute circuit from your subscription. For steps on how to remove an ExpressRoute circuit, see Deprovisioning an ExpressRoute circuit.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c36e0c83-11b4-409a-a4a6-2118b52a380f"
},
{
"waf": "operations",
"service": "Azure Expressroute",
"text": "Configure connection monitoring between your on-premises and Azure network.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "138436b3-3868-43ad-8a1c-61c8e4a84d8e"
},
{
"waf": "operations",
"service": "Azure Expressroute",
"text": "Configure Service Health for receiving notification.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "7cfb8c20-2449-4892-bb3f-d994944ba6c9"
},
{
"waf": "operations",
"service": "Azure Expressroute",
"text": "Review metrics and dashboards available through ExpressRoute Insights using Network Insights.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "6c4de9f0-b0f4-4390-8222-d5b9dfb506b6"
},
{
"waf": "operations",
"service": "Azure Expressroute",
"text": "Review ExpressRoute resource metrics.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "8c22c571-98a1-4d91-94b7-efb58db4763e"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Configure connection monitoring",
"description": "Connection monitoring allows you to monitor connectivity between your on-premises resources and Azure over the ExpressRoute private peering and Microsoft peering connection. Connection monitor can detect networking issues by identifying where along the network path the problem is and help you quickly resolve configuration or hardware failures.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "06b83763-eef7-4e07-8c16-8e0fcc9a388c"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Configure Service Health",
"description": "Set up Service Health notifications to alert when planned and upcoming maintenance is happening to all ExpressRoute circuits in your subscription. Service Health also displays past maintenance along with RCA if an unplanned maintenance were to occur.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "98086164-1e4f-4bd3-b67b-904b60e32470"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Review metrics with Network Insights",
"description": "ExpressRoute Insights with Network Insights allow you to review and analyze ExpressRoute circuits, gateways, connections metrics and health dashboards. ExpressRoute Insights also provide a topology view of your ExpressRoute connections where you can view details of your peering components all in a single place.Metrics available:- Availability- Throughput- Gateway metrics",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f48383e3-3d08-47a4-852e-211cc3a792df"
},
{
"waf": "Operations",
"service": "Azure Expressroute",
"text": "Review ExpressRoute resource metrics",
"description": "ExpressRoute uses Azure Monitor to collect metrics and create alerts base on your configuration. Metrics are collected for ExpressRoute circuits, ExpressRoute gateways, ExpressRoute gateway connections, and ExpressRoute Direct. These metrics are useful for diagnosing connectivity problems and understanding the performance of your ExpressRoute connection.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e2ca25a4-7d0d-49f8-8618-f81f0f3ff3e0"
},
{
"waf": "performance",
"service": "Azure Expressroute",
"text": "Test ExpressRoute gateway performance to meet work load requirements.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "986e4310-6a7c-469e-bd94-8b8d1c388f51"
},
{
"waf": "performance",
"service": "Azure Expressroute",
"text": "Increase the size of the ExpressRoute gateway.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "68ebf30c-d5f8-4e5a-bafa-9b8ff5aea0cc"
},
{
"waf": "performance",
"service": "Azure Expressroute",
"text": "Upgrade the ExpressRoute circuit bandwidth.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "124c88c4-391e-41fc-be92-f8efd3ae6b71"
},
{
"waf": "performance",
"service": "Azure Expressroute",
"text": "Enable ExpressRoute FastPath for higher throughput.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "21303a27-77fc-4cd0-afab-0080bbbf6501"
},
{
"waf": "performance",
"service": "Azure Expressroute",
"text": "Monitor the ExpressRoute circuit and gateway metrics.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-expressroute.md",
+ "guid": "a77220d0-45e2-4ac9-9f8e-352f4e4848d8"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Test ExpressRoute gateway performance to meet work load requirements.",
"description": "Use Azure Connectivity Toolkit to test performance across your ExpressRoute circuit to understand bandwidth capacity and latency of your network connection.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "71513d98-78dc-49ad-ba19-3d769b03c9bb"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Increase the size of the ExpressRoute gateway.",
"description": "Upgrade to a higher gateway SKU for improved throughput performance between on-premises and Azure environment.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "caa42667-014b-4fb2-9e0a-954e05385785"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Upgrade ExpressRoute circuit bandwidth",
"description": "Upgrade your circuit bandwidth to meet your work load requirements. Circuit bandwidth is shared between all virtual networks connected to the ExpressRoute circuit. Depending on your work load, one or more virtual networks can use up all the bandwidth on the circuit.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "be5fc5f6-92bd-4239-87a0-275d786b8d68"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Enable ExpressRoute FastPath for higher throughput",
"description": "If you're using an Ultra performance or an ErGW3AZ virtual network gateway, you can enable FastPath to improve the data path performance between your on-premises network and Azure virtual network.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a5327e51-9367-4f91-bca2-71b5724e6acb"
},
{
"waf": "Performance",
"service": "Azure Expressroute",
"text": "Monitor ExpressRoute circuit and gateway metrics",
"description": "Set up alerts base on ExpressRoute metrics to proactively notify you when a certain threshold is met. These metrics are useful to understand anomalies that can happen with your ExpressRoute connection such as outages and maintenance happening to your ExpressRoute circuits.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3e5d89cf-a4b0-4624-8a74-c086ce3665ac"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Use failure mode analysis: Minimize points of failure by considering internal dependencies such as the availability of virtual networks, Azure Key Vault, or Azure Content Delivery Network or Azure Front Door endpoints. Failures can occur if you need credentials to access Azure Files, and the credentials go missing from Key Vault. Or you might have a failure if your workloads use an endpoint that's based on a missing content delivery network. In these cases, you might need to configure your workloads to connect to an alternative endpoint. For general information about failure mode analysis, see Recommendations for performing failure mode analysis.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "49da89d4-35df-4837-884f-ffa0dc248d0b"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Define reliability and recovery targets: Review the Azure service-level agreements (SLAs). Derive the service-level objective (SLO) for the storage account. For example, the redundancy configuration that you chose might affect the SLO. Consider the effect of a regional outage, the potential for data loss, and the time required to restore access after an outage. Also consider the availability of internal dependencies that you identified as part of your failure mode analysis.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "76ae68b8-d5dd-44a0-a0e0-9abec3695316"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Configure data redundancy: For maximum durability, choose a configuration that copies data across availability zones or global regions. For maximum availability, choose a configuration that allows clients to read data from the secondary region during an outage of the primary region.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "0363e36d-5971-4e00-8bc6-7e0fd7e00889"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Design applications: Design your applications to seamlessly shift so that they read data from a secondary region if the primary region is unavailable. This design consideration only applies to geo-redundant storage (GRS) and geo-zone-redundant storage (GZRS) configurations. Design your applications to properly handle outages, which reduces downtime for customers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "6104ed5f-a4ee-4d87-82dd-1f7bafd7c468"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Explore features to help you meet your recovery targets: Make files restorable so that you can recover corrupted, edited, or deleted files.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "a5aa4909-7ee1-421e-a4c6-fa465f9bbdb5"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Create a recovery plan: Consider data protection features, backup and restore operations, or failover procedures. Prepare for potential data loss and data inconsistencies and the time and cost of failing over. For more information, see Recommendations for designing a disaster recovery strategy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "02300e9f-94e9-4cbd-b3ca-5c6cf17f2833"
},
{
"waf": "reliability",
"service": "Azure Files",
"text": "Monitor potential availability problems: Subscribe to the Azure Service Health dashboard to monitor potential availability problems. Use storage metrics and diagnostic logs in Azure Monitor to investigate alerts.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "58746f78-dba5-4a3a-b4a5-bdbcb9a00a28"
},
{
"waf": "Reliability",
"service": "Azure Files",
"text": "Configure your storage account for redundancy. For maximum availability and durability, configure your account with\u202fzone-redundant storage (ZRS), GRS, or\u202fGZRS. Limited Azure regions support ZRS for standard and premium file shares. Only standard SMB accounts support GRS and GZRS. Premium SMB shares and NFS shares don't support GRS and GZRS. Azure Files doesn't support read-access geo-redundant storage (RA-GRS) or read-access geo-zone-redundant storage (RA-GZRS). If you configure a storage account to use RA-GRS or RA-GZRS, the file shares are configured and billed as GRS or GZRS.",
"description": "Redundancy protects your data against unexpected failures. The ZRS and GZRS configuration options replicate across various availability zones and enable applications to continue reading data during an outage. For more information, see Durability and availability by outage scenario and Durability and availability parameters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "57930240-9165-4fe1-a7ea-24bc09930158"
},
{
"waf": "Reliability",
"service": "Azure Files",
"text": "Before you initiate a failover or failback, check the value of the last synchronization time property to evaluate the potential for data loss. This recommendation applies only to GRS and GZRS configurations.",
"description": "This property helps you estimate how much data you might lose if you initiate an account failover. All data and metadata that's written before the last synchronization time is available on the secondary region, but you might lose data and metadata that's written after the last synchronization time because it's not written to the secondary region.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f436bbde-bfd0-4be2-85a6-c13f0d79cee1"
},
{
"waf": "Reliability",
"service": "Azure Files",
"text": "As a part of your backup and recovery strategy, enable\u202fsoft delete\u202fand\u202fuse snapshots for point-in-time restore. You can use Azure Backup to back up your SMB file shares. You can also use Azure File Sync to back up on-premises SMB file shares to an Azure file share. Azure Backup also allows you to do a vaulted backup (preview) of Azure Files to protect your data from ransomware attacks or source data loss due to a malicious actor or rogue admin. By using vaulted backup, Azure Backup copies and stores data in the Recovery Services vault. This creates an offsite copy of data that you can retain for up to 99 years. Azure Backup creates and manages the recovery points as per the schedule and retention defined in the backup policy. Learn more.",
"description": "Soft delete works on a file share level to protect Azure file shares against accidental deletion. Point-in-time restore protects against accidental deletion or corruption because you can restore file shares to an earlier state. For more information, see Data protection overview.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0bcee250-521d-467f-94d6-ddeeb20844af"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Review the security baseline for Azure Storage: To get started, review the security baseline for Storage.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "486329dd-f6a9-4714-bab2-0c7da68e2473"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Consider using network controls to restrict ingress and egress traffic: You might be comfortable exposing your storage account to the public internet under certain conditions, like if you use identity-based authentication to grant access to file shares. But we recommend that you use network controls to grant the minimum required level of access to users and applications. For more information, see How to approach network security for your storage account.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "e450fd68-ca8c-4380-96f4-812a146c50a3"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Reduce the attack surface: Use encryption in transit and prevent access over non-secure (HTTP) connections to reduce the attack surface. Require clients to send and receive data by using the latest version of the Transport Layer Security (TLS) protocol.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "57e9b6de-1640-41de-93c5-8306d37660ff"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Minimize the use of storage account keys: Identity-based authentication provides superior security compared to using a storage account key. But you must use a storage account key to get full administrative control of a file share, including the ability to take ownership of a file. Grant security principals only the necessary permissions that they need to perform their tasks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "88413b43-c031-4930-acbf-fc1d33b7d930"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Protect sensitive information: Protect sensitive information, such as storage account keys and passwords. We don't recommend that you use these forms of authorization, but if you do, you should make sure to rotate, expire, and store them securely.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "5542bb7f-c507-480d-8881-93f7a2854e63"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Detect threats: Enable Microsoft Defender for Storage to detect potentially harmful attempts to access or exploit your Azure file shares over SMB or FileREST protocols. Subscription administrators get email alerts with details of suspicious activity and recommendations about how to investigate and remediate threats. Defender for Storage doesn't support antivirus capabilities for Azure file shares. If you use Defender for Storage, transaction-heavy file shares incur significant costs, so consider opting out of Defender for Storage for specific storage accounts.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "776e5617-ee35-4172-b15b-848e3d5c7c7b"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Apply an Azure Resource Manager lock on the storage account.",
"description": "Lock the account to prevent accidental or malicious deletion of the storage account, which can cause data loss.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5efa7ffa-1cc0-4a74-bd15-c809185ccb58"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Open TCP port 445 outbound or set up a VPN gateway or Azure ExpressRoute connection for clients outside of Azure to access the file share.",
"description": "SMB 3.x is an internet-safe protocol, but you might not have the ability to change organizational or ISP policies. You can use a VPN gateway or an ExpressRoute connection as an alternative option.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bfd07ef0-3cde-4965-bb68-0e382d5704c3"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "If you open port 445, be sure to disable SMBv1 on Windows and Linux clients. Azure Files doesn't support SMB 1, but you should still disable it on your clients.",
"description": "SMB 1 is an outdated, inefficient, and insecure protocol. Disable it on clients to improve your security posture.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ff7ac920-b3a0-4fbd-8434-69b5f5d52d89"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Consider disabling public network access to your storage account. Enable public network access only if SMB clients and services that are external to Azure require access to your storage account. If you disable public network access,create a private endpoint for your storage account. Standard data processing rates for private endpoints apply. A private endpoint doesn't block connections to the public endpoint. You should still disable public network access as previously described. If you don't require a static IP address for your file share and want to avoid the cost of private endpoints, you can instead restrict public endpoint access to specific virtual networks and IP addresses.",
"description": "Network traffic travels over the Microsoft backbone network instead of the public internet, which eliminates risk exposure from the public internet.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "27f96d86-72a7-4c44-8cdd-146d39feefaf"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Enable firewall rules that limit access to specific virtual networks. Start with zero access, and then methodically and incrementally provide the least amount of access required for clients and services.",
"description": "Minimize the risk of creating openings for attackers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bbbb3c40-4a58-4602-87cd-5bb36d95381d"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "When possible, use identity-based authentication with AES-256 Kerberos ticket encryption to authorize access to SMB Azure file shares.",
"description": "Use identity-based authentication to decrease the possibility of an attacker using a storage account key to access file shares.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b8abb5ae-bde5-40bc-b8d4-8518c9dd23c2"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "If you use storage account keys, store them in Key Vault, and make sure to regenerate them periodically. You can completely disallow storage account key access to the file share by removing NTLMv2 from the share's SMB security settings. But you generally shouldn't remove NTLMv2 from the share's SMB security settings because administrators still need to use the account key for some tasks.",
"description": "Use Key Vault to retrieve keys at runtime instead of saving them with your application. Key Vault also makes it easy to rotate your keys without interruption to your applications. Periodically rotate the account keys to reduce the risk of exposing your data to malicious attacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c034b5bc-eaca-4ba4-b9c7-3d427108584d"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "In most cases, you should enable the Secure transfer required option on all your storage accounts to enable encryption in transit for SMB file shares. Don't enable this option if you need to allow very old clients to access the share. If you disable secure transfer, be sure to use network controls to restrict traffic.",
"description": "This setting ensures that all requests that are made against the storage account take place over secure connections (HTTPS). Any requests made over HTTP will fail.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b9cbb598-dcaa-431a-bae0-f8a7909f577b"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Configure your storage account so that TLS 1.2 is the minimum version for clients to send and receive data.",
"description": "TLS 1.2 is more secure and faster than TLS 1.0 and 1.1, which don't support modern cryptographic algorithms and cipher suites.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e780c530-cf9a-42d2-8ccc-b32e44ab73cd"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Use only the most recent supported SMB protocol version (currently 3.1.1.), and use only AES-256-GCM for SMB channel encryption. Azure Files exposes settings that you can use to toggle the SMB protocol and make it more compatible or more secure, depending on your organization's requirements. By default, all SMB versions are allowed. However, SMB 2.1 is disallowed if you enable Require secure transfer because SMB 2.1 doesn't support encryption of data in transit. If you restrict these settings to a high level of security, some clients might not be able to connect to the file share.",
"description": "SMB 3.1.1, released with Windows 10, contains important security and performance updates. AES-256-GCM offers more secure channel encryption.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "59fe4bee-d21b-4f74-880f-eb22da54ee6e"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Review the security baseline for Storage: To get started, review the security baseline for Storage.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "c5f40aec-9c2c-4c16-8ae9-f9fdd4733804"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Understand your organization's security requirements: NFS Azure file shares only support Linux clients that use the NFSv4.1 protocol, with support for most features from the 4.1 protocol specification. Some security features, such as Kerberos authentication, access control lists (ACLs), and encryption in transit, aren't supported.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "a07d96be-b231-444c-8b2e-3123950de82f"
},
{
"waf": "security",
"service": "Azure Files",
"text": "Use network-level security and controls to restrict ingress and egress traffic: Identity-based authentication isn't available for NFS Azure file shares, so you must use network-level security and controls to grant the minimum required level of access to users and applications. For more information, see How to approach network security for your storage account.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "b3a2f115-8ee1-401e-a939-f4406b43b460"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Apply a Resource Manager lock on the storage account.",
"description": "Lock the account to prevent accidental or malicious deletion of the storage account, which might cause data loss.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0148ed98-3b9a-4b7f-81c2-8b550f56f793"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "You must open port 2049 on the clients that you want to mount your NFS share to.",
"description": "Open port 2049 to let clients communicate with the NFS Azure file share.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "45ae6fe2-da4c-4e41-9d2c-d9237a619ec6"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "NFS Azure file shares are only accessible through restricted networks. So you must create a private endpoint for your storage account or restrict public endpoint access to selected virtual networks and IP addresses. We recommend that you create a private endpoint. You must configure network-level security for NFS shares because Azure Files doesn't support encryption in transit with the NFS protocol. You need to disable the Require secure transfer setting on the storage account to use NFS Azure file shares. Standard data processing rates apply for private endpoints. If you don't require a static IP address for your file share and want to avoid the cost of private endpoints, you can restrict public endpoint access instead.",
"description": "Network traffic travels over the Microsoft backbone network instead of the public internet, which eliminates risk exposure from the public internet.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8959f137-e162-4b86-a14f-6e96c9fd5494"
},
{
"waf": "Security",
"service": "Azure Files",
"text": "Consider disallowing storage account key access at the storage account level. You don't need this access to mount NFS file shares. But keep in mind that full administrative control of a file share, including the ability to take ownership of a file, requires use of a storage account key.",
"description": "Disallow the use of storage account keys to make your storage account more secure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f7b42a8a-fb21-4101-a256-8bbab4e1bd25"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Decide whether your workload requires the performance of premium file shares (Azure Premium SSD) or if Azure Standard HDD storage is sufficient: Determine your storage account type and billing model based on the type of storage that you need. If you require large amounts of input/output operations per second (IOPS), extremely fast data transfer speeds, or very low latency, then you should choose premium Azure file shares. NFS Azure file shares are only available on the premium tier. NFS and SMB file shares are the same price on the premium tier.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "54bceac0-695d-4d3a-9e50-91fdb4c9f51a"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Create a storage account for your file share, and choose a redundancy level: Choose either a standard (GPv2) or premium (FileStorage) account. The redundancy level that you choose affects cost. The more redundancy, the higher the cost. Locally redundant storage (LRS) is the most affordable. GRS is only available for standard SMB file shares. Standard file shares only show transaction information at the storage account level, so we recommend that you deploy only one file share in each storage account to ensure full billing visibility.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "220f8243-dcba-41cd-95c1-70b8b0cc3bd2"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Understand how your bill is calculated: Standard Azure file shares provide a pay-as-you-go model. Premium shares use a provisioned model in which you specify and pay for a certain amount of capacity, IOPS, and throughput up front. In the pay-as-you-go model, meters track the amount of data that's stored in the account, or the capacity, and the number and type of transactions based on your usage of that data. The pay-as-you-go model can be cost efficient because you pay only for what you use. With the pay-as-you-go model, you don't need to overprovision or deprovision storage based on performance requirements or demand fluctuations.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "6a667592-f9c4-45ba-81c8-bb4841aa8781"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Estimate the cost of capacity and operations: You can use the Azure pricing calculator to model the costs associated with data storage, ingress, and egress. Compare the cost associated with various regions, account types, and redundancy configurations. For more information, see Azure Files pricing.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "c1f59c13-a5f1-4969-a1f4-a3180d9f7a30"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Choose the most cost-effective access tier: Standard SMB Azure file shares offer three access tiers: transaction optimized, hot, and cool. All three tiers are stored on the same standard storage hardware. The main difference for these three tiers is their data at rest storage prices, which are lower in cooler tiers, and the transaction prices, which are higher in cooler tiers. For more information, see Differences in standard tiers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "f3dd18d1-9937-413e-99a6-6abbe25b574c"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Decide which value-added services you need: Azure Files supports integrations with value-added services such as Backup, Azure File Sync, and Defender for Storage. These solutions have their own licensing and product costs but are often considered part of the total cost of ownership for file storage. Consider other cost aspects if you use Azure File Sync.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "318fe019-cffa-4ca1-aa56-e00d1df86fe2"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Create guardrails: Create budgets based on subscriptions and resource groups. Use governance policies to restrict resource types, configurations, and locations. Additionally, use role-based access control (RBAC) to block actions that can lead to overspending.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "a5675d94-de9f-44b1-8b21-f8032cdf3f3d"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Monitor costs: Ensure costs stay within budgets, compare costs against forecasts, and see where overspending occurs. You can use the cost analysis pane in the Azure portal to monitor costs. You can also export cost data to a storage account, and use Excel or Power BI to analyze that data.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "5473960a-7ac3-44a0-8d01-695132b782cd"
},
{
"waf": "cost",
"service": "Azure Files",
"text": "Monitor usage: Continuously monitor usage patterns to detect unused or underused storage accounts and file shares. Check for unexpected increases in capacity, which might indicate that you're collecting numerous log files or soft-deleted files. Develop a strategy for deleting files or moving files to more cost-effective access tiers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "a294f2dd-cd4f-42f7-80d8-798759c799e4"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "When you migrate to standard Azure file shares, we recommend that you start in the transaction-optimized tier during the initial migration. Transaction usage during migration isn't typically indicative of normal transaction usage. This consideration doesn't apply for premium file shares because the provisioned billing model doesn't charge for transactions.",
"description": "Migrating to Azure Files is a temporary, transaction-heavy workload. Optimize the price for high-transaction workloads to help reduce migration costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "72b9477f-3c39-4633-a052-90b1203f9be5"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "After you migrate your workload, if you use standard file shares, carefully choose the most cost effective access tier for your file share: hot, cool, or transaction optimized. After you operate for a few days or weeks with regular usage, you can insert your transaction counts in the pricing calculator to figure out which tier best suits your workload. Most customers should choose cool even if they actively use the share. But you should examine each share and compare the balance of storage capacity to transactions to determine your tier. If transaction costs make up a significant percentage of your bill, the savings from using the cool access tier often offsets this cost and minimizes the total overall cost. We recommend that you move standard file shares between access tiers only when necessary to optimize for changes in your workload pattern. Each move incurs transactions. For more information, see Switching between standard tiers.",
"description": "Select the appropriate access tier for standard file shares to considerably reduce your costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9dd18ccf-33eb-4da0-9710-7b3d64290faa"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "If you use premium shares, ensure that you provision more than enough capacity and performance for your workload but not so much that you incur unnecessary costs. We recommend overprovisioning by two to three times. You can dynamically scale premium file shares up or down depending on your storage and input/output (IO) performance characteristics.",
"description": "Overprovision premium file shares by a reasonable amount to help maintain performance and account for future growth and performance requirements.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "11b05f06-7a9a-4f25-9816-f41f893897b4"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "Use Azure Files reservations, also referred to as reserved instances, to precommit to storage usage and get a discount. Use reservations for production workloads or dev/test workloads with consistent footprints. For more information, see Optimize costs with storage reservations. Reservations don't include transaction, bandwidth, data transfer, and metadata storage charges.",
"description": "Three-year reservations can provide a discount up to 36% on the total cost of file storage. Reservations don't affect performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f455ac95-f1e3-4a9a-9fab-044e7faeff2f"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "Monitor snapshot usage. Snapshots incur charges, but they're billed based on the differential storage usage of each snapshot. You pay only for the difference in each snapshot. For more information, see Snapshots. Azure File Sync takes share-level and file-level snapshots as part of regular usage, which can increase your total Azure Files bill.",
"description": "Differential snapshots ensure that you're not billed multiple times for storing the same data. However, you should still monitor snapshot usage to help reduce your Azure Files bill.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f3715e13-e5c7-4830-b1a0-4319523efab1"
},
{
"waf": "Cost",
"service": "Azure Files",
"text": "Set retention periods for the soft-delete feature, especially when you first start using it. Consider starting with a short retention period to better understand how the feature affects your bill. The minimum recommended retention period is seven days. When you soft delete standard and premium file shares, they're billed as used capacity rather than provisioned capacity. And premium file shares are billed at the snapshot rate while in the soft-delete state. Standard file shares are billed at the regular rate while in the soft-delete state.",
"description": "Set a retention period so that soft-deleted files don't pile up and increase the cost of capacity. After the configured retention period, permanently deleted data doesn't incur cost.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bb6048c7-29fd-4388-aa22-de89fdbb39ea"
},
{
"waf": "operations",
"service": "Azure Files",
"text": "Create maintenance and emergency recovery plans: Consider data protection features, backup and restore operations, and failover procedures. Prepare for potential data loss and data inconsistencies and the time and cost of failing over.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "7de2699b-2c67-4b05-90a4-45d6c9d6693a"
},
{
"waf": "operations",
"service": "Azure Files",
"text": "Monitor the health of your storage account: Create Storage insights dashboards to monitor availability, performance, and resiliency metrics. Set up alerts to identify and address problems in your system before your customers notice them. Use diagnostic settings to route resource logs to an Azure Monitor Logs workspace. Then you can query logs to investigate alerts more deeply.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "b860ac4e-04bd-4fca-bbe3-b6d4659a3a62"
},
{
"waf": "operations",
"service": "Azure Files",
"text": "Periodically review file share activity: Share activity can change over time. Move standard file shares to cooler access tiers, or you can provision or deprovision capacity for premium shares. When you move standard file shares to a different access tier, you incur a transaction charge. Move standard file shares only when needed to reduce your monthly bill.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "b7ee3665-5f27-4d59-89d1-ab99c6dba955"
},
{
"waf": "Operations",
"service": "Azure Files",
"text": "Use infrastructure as code (IaC) to define the details of your storage accounts in Azure Resource Manager templates (ARM templates), Bicep, or Terraform.",
"description": "You can use your existing DevOps processes to deploy new storage accounts, and use Azure Policy to enforce their configuration.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6a7d5ccf-3cbf-468c-84cb-d5bdee7c7f3d"
},
{
"waf": "Operations",
"service": "Azure Files",
"text": "Use Storage insights to track the health and performance of your storage accounts. Storage insights provides a unified view of the failures, performance, availability, and capacity for all your storage accounts.",
"description": "You can track the health and operation of each of your accounts. Easily create dashboards and reports that stakeholders can use to track the health of your storage accounts.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5fff0543-7133-4501-bd87-ea55392c6a7e"
},
{
"waf": "Operations",
"service": "Azure Files",
"text": "Use Monitor to analyze metrics, such as availability, latency, and usage, and to create alerts.",
"description": "Monitor provides a view of availability, performance, and resiliency for your file shares.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9e6f3601-b1cc-47e4-9f7e-715ec473b941"
},
{
"waf": "performance",
"service": "Azure Files",
"text": "Plan for scale: Understand the scalability and performance targets for storage accounts, Azure Files, and Azure File Sync.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "606bb21e-2197-4b38-89bd-3cf48e053a7d"
},
{
"waf": "performance",
"service": "Azure Files",
"text": "Understand your application and usage patterns to achieve predictable performance: Determine latency sensitivity, IOPS and throughput requirements, workload duration and frequency, and workload parallelization. Use Azure Files for multi-threaded applications to help you achieve the upper performance limits of a service. If most of your requests are metadata-centric, such as createfile, openfile, closefile, queryinfo, or querydirectory, the requests create poor latency that's higher than the read and write operations. If you have this problem, consider separating the file share into multiple file shares within the same storage account.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "de7e1635-911b-43e8-a887-95b8e13778d1"
},
{
"waf": "performance",
"service": "Azure Files",
"text": "Choose the optimal storage account type: If your workload requires large amounts of IOPS, extremely fast data transfer speeds, or very low latency, then you should choose premium (FileStorage) storage accounts. You can use a standard general-purpose v2 account for most SMB file share workloads. The primary tradeoff between the two storage account types is cost versus performance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "6014ae08-0163-41c5-84ea-1467ad0d98ee"
},
{
"waf": "performance",
"service": "Azure Files",
"text": "Create storage accounts in the same regions as connecting clients to reduce latency: The farther you are from the Azure Files service, the greater the latency and the more difficult to achieve performance scale limits. This consideration is especially true when you access Azure Files from on-premises environments. If possible, ensure that your storage account and your clients are co-located in the same Azure region. Optimize for on-premises clients by minimizing network latency or by using an ExpressRoute connection to extend on-premises networks into the Microsoft cloud over a private connection.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "056cff2c-647d-41c8-82b0-f3ce60d82973"
},
{
"waf": "performance",
"service": "Azure Files",
"text": "Collect performance data: Monitor workload performance, including latency, availability, and usage metrics. Analyze logs to diagnose problems such as timeouts and throttling. Create alerts to notify you if a file share is being throttled, about to be throttled, or experiencing high latency.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "b67e8471-7d96-4b52-83d2-622c83758327"
},
{
"waf": "performance",
"service": "Azure Files",
"text": "Optimize for hybrid deployments: If you use Azure File Sync, sync performance depends on many factors: your Windows Server and the underlying disk configuration, network bandwidth between the server and the Azure storage, file size, total dataset size, and the activity on the dataset. To measure the performance of a solution that's based on Azure File Sync, determine the number of objects, such as files and directories, that you process per second.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-files.md",
+ "guid": "06194a9a-646b-40f8-81df-2cffae089d7b"
},
{
"waf": "Performance",
"service": "Azure Files",
"text": "Enable SMB Multichannel for premium SMB file shares. SMB Multichannel allows an SMB 3.1.1 client to establish multiple network connections to an SMB Azure file share. SMB Multichannel only works when the feature is enabled on both client-side (your client) and service-side (Azure). On Windows clients, SMB Multichannel is enabled by default, but you need to enable it on your storage account.",
"description": "Increase throughput and IOPS while reducing the total cost of ownership. Performance benefits increase with the number of files that distribute load.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "877da8a6-ccba-4655-a550-a1d0b01c13fc"
},
{
"waf": "Performance",
"service": "Azure Files",
"text": "Use the nconnect client-side mount option with NFS Azure file shares on Linux clients. Nconnect enables you to use more TCP connections between the client and the Azure Files premium service for NFSv4.1.",
"description": "Increase performance at scale, and reduce the total cost of ownership for NFS file shares.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "830493d9-b872-469b-8248-88a098ae834f"
},
{
"waf": "Performance",
"service": "Azure Files",
"text": "Make sure your file share or storage account isn't being throttled, which can result in high latency, low throughput, or low IOPS. Requests are throttled when the IOPS, ingress, or egress limits are reached. For standard storage accounts, throttling occurs at the account level. For premium file shares, throttling usually occurs at the share level.",
"description": "Avoid throttling to provide the best possible client experience.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1ba7c827-9dea-42c2-ae8f-6a8399bedf94"
},
{
"waf": "reliability",
"service": "Azure Firewall",
"text": "Deploy Azure Firewall in hub virtual networks or as part of Azure Virtual WAN hubs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "29c79d8a-974d-4768-9036-6b7c3980258b"
},
{
"waf": "reliability",
"service": "Azure Firewall",
"text": "Leverage Availability Zones resiliency.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "59945fc0-9f70-4b5d-a8b6-2ac38dc2508d"
},
{
"waf": "reliability",
"service": "Azure Firewall",
"text": "Create Azure Firewall Policy structure.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "457a41f6-6cc9-48a8-b16b-01f2312b6537"
},
{
"waf": "reliability",
"service": "Azure Firewall",
"text": "Review the Known Issue list.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "8af18b41-9be2-4bb2-aaac-8c2a5734539a"
},
{
"waf": "reliability",
"service": "Azure Firewall",
"text": "Monitor Azure Firewall health state.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "4ab78087-97ce-4ec5-ab5d-f67e47b20854"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Use Azure Firewall Manager with traditional Hub & Spokes or Azure Virtual WAN network topologies to deploy and manage instances of Azure Firewall.",
"description": "Easily create hub-and-spoke and transitive architectures with native security services for traffic governance and protection. For more information on network topologies, see the Azure Cloud Adoption Framework documentation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "22e4993d-53d4-4655-84fa-4d1bc8523e41"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Create Azure Firewall Policies to govern the security posture across global network environments. Assign policies to all instances of Azure Firewall.",
"description": "Azure Firewall Policies can be arranged in an hierarchical structure to overlay a central base policy. Allow for granular policies to meet the requirements of specific regions. Delegate incremental firewall policies to local security teams through role-based access control (RBAC). Some settings are specific per instance, for example DNAT Rules and DNS configuration, then multiple specialized policies might be required.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "965fde84-1253-4833-93bc-9476a10ce2ad"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Migrate Azure Firewall Classic Rules to Azure Firewall Manager Policies for existing deployments.",
"description": "For existing deployments, migrate Azure Firewall rules to Azure Firewall Manager policies. Use Azure Firewall Manager to centrally manage your firewalls and policies. For more information, see Migrate to Azure Firewall Premium.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "15329f1b-13d3-43a7-b76c-d110d7933148"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Review the list of Azure Firewall Known Issues.",
"description": "Azure Firewall Product Group maintains an updated list of known-issues at this location. This list contains important information related to by-design behavior, fixes under construction, platform limitations, along with possible workarounds or mitigation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8af66a9f-689a-4e52-a9f1-08cf07f86047"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Ensure your Azure Firewall Policy adheres to Azure Firewall limits and recommendations.",
"description": "There are limits on the policy structure, including numbers of Rules and Rule Collection Groups, total policy size, source/target destinations. Be sure to compose your policy and stay behind the documented thresholds.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c673cfb7-5f2f-40ff-a878-c4ffeb26acd9"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Deploy Azure Firewall across multiple availability zones for higher service-level agreement (SLA).",
"description": "Azure Firewall provides different SLAs when it's deployed in a single availability zone and when it's deployed in multiple zones. For more information, see SLA for Azure Firewall. For information about all Azure SLAs, see SLA summary for Azure services.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bc96dc36-32aa-404b-b450-aaacf0b1becc"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "In multi-region environments, deploy an Azure Firewall instance per region.",
"description": "For traditional Hub & Spokes architectures, multi-region details are explained in this article. For secured virtual hubs (Azure Virtual WAN), Routing Intent and Policies must be configured to secure inter-hub and branch-to-branch communications. For workloads designed to be resistant to failures and fault tolerant, remember to consider that instances of Azure Firewall and Azure Virtual Network as regional resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "82ee097d-7480-4896-92e9-78b3b335cfcb"
},
{
"waf": "Reliability",
"service": "Azure Firewall",
"text": "Monitor Azure Firewall Metrics and Resource Health state.",
"description": "Closely monitor key metrics indicator of Azure Firewall health state such as Throughput, Firewall health state, SNAT port utilization and AZFW Latency Probe metrics. Additionally, Azure Firewall now integrates with Azure Resource Health. With the Azure Firewall Resource Health check, you can now view the health status of your Azure Firewall and address service problems that might affect your Azure Firewall resource.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "778a05b2-ee67-42f2-b35e-0adfe817cded"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Determine if you need Forced Tunneling.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "f3ff369e-56ed-45da-ad6a-c135803249ba"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Create rules for Policies based on least privilege access criteria.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "a8db6917-b19a-4e97-a797-97a3cc882b45"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Leverage Threat Intelligence.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "dbfeaa71-3a9d-4c45-b68c-05fd8ccd6d66"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Enable Azure Firewall DNS proxy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "eb9ee852-eda8-41a8-917d-4a5a25a6d866"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Direct network traffic through Azure Firewall.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "0d173bba-16e4-4779-bbc6-b18447718271"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Determine if you want to use third-party security as a service (SECaaS) providers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "6cf7bc2c-7416-48d1-8966-05f18b4c77dc"
},
{
"waf": "security",
"service": "Azure Firewall",
"text": "Protect your Azure Firewall public IP addresses with DDoS.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "b64f5de8-7f72-4545-a18e-9e75bc46a712"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "If required to route all internet-bound traffic to a designated next hop instead of going directly to the internet, configure Azure Firewall in forced tunneling mode (does not apply to Azure Virtual WAN).",
"description": "Azure Firewall must have direct internet connectivity. If your AzureFirewallSubnet learns a default route to your on-premises network via the Border Gateway Protocol, you must configure Azure Firewall in the forced tunneling mode. Using the forced tunneling feature, you'll need another /26 address space for the Azure Firewall Management subnet. You're required to name it AzureFirewallManagementSubnet.If this is an existing Azure Firewall instance that can't be reconfigured in the forced tunneling mode, create a UDR with a 0.0.0.0/0 route. Set the NextHopType value as Internet. Associate it with AzureFirewallSubnet to maintain internet connectivity.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "00be10aa-262b-44b5-a82a-8c68aad4cccd"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Set the public IP address to None to deploy a fully private data plane when you configure Azure Firewall in the forced tunneling mode (does not apply to Azure Virtual WAN).",
"description": "When you deploy a new Azure Firewall instance, if you enable the forced tunneling mode, you can set the public IP address to None to deploy a fully private data plane. However, the management plane still requires a public IP for management purposes only. The internal traffic from virtual and on-premises networks won't use that public IP. For more about forced tunneling, see Azure Firewall forced tunneling.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0b4f833f-2a39-4d49-85b2-221317d24865"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Create rules for Firewall Policies based on least privilege access criteria.",
"description": "Azure Firewall Policies can be arranged in an hierarchical structure to overlay a central base policy. Allow for granular policies to meet the requirements of specific regions. Each policy can contains different sets of DNAT, Network and Application rules with specific priority, action and processing order. Create your rules based on least privilege access Zero Trust principle . How rules are processed is explained in this article.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "eea03b99-3b97-4c7a-b1ab-76404535a87f"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Enable IDPS in Alert or Alert and deny mode.",
"description": "IDPS is one of the most powerful Azure Firewall (Premium) security features and should be enabled. Based on security and application requirements, and considering the performance impact (see the Cost section below), Alert or Alert and deny modes can be selected.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "25ca3e7f-b569-4ddf-8f50-3577a7f8a86c"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Enable Azure Firewall (DNS) proxy configuration.",
"description": "Enabling this feature points clients in the VNets to Azure Firewall as a DNS server. It will protect internal DNS infrastructure that will not be directly accessed and exposed. Azure Firewall must be also configured to use custom DNS that will be used to forward DNS queries.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "35c2f653-acd6-471c-91a9-f7e4a3fcce3e"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Configure user-defined routes (UDR) to force traffic through Azure Firewall.",
"description": "In a traditional Hub & Spokes architecture, configure UDRs to force traffic through Azure Firewall for `SpoketoSpoke`, `SpoketoInternet`, and `SpoketoHybrid` connectivity. In Azure Virtual WAN, instead, configure Routing Intent and Policies to redirect private and/or Internet traffic through the Azure Firewall instance integrated into the hub.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0eb2861e-50ba-479a-93d2-ca98a617e5fb"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "If not possible to apply UDR, and only web traffic redirection is required, consider using Azure Firewall as an Explicit Proxy",
"description": "With explicit proxy feature enabled on the outbound path, you can configure a proxy setting on the sending web application (such as a web browser) with Azure Firewall configured as the proxy. As a result, web traffic will reach the firewall's private IP address and therefore egresses directly from the firewall without using a UDR. This feature also facilitates the usage of multiple firewalls without modifying existing network routes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "24f05ffb-5b19-4ff8-8168-0884bfd131cd"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Configure supported third-party software as a service (SaaS) security providers within Firewall Manager if you want to use these solutions to protect outbound connections.",
"description": "You can use your familiar, best-in-breed, third-party SECaaS offerings to protect internet access for your users. This scenario does require Azure Virtual WAN with a S2S VPN Gateway in the Hub, as it uses an IPSec tunnel to connect to the provider's infrastructure. SECaaS providers might charge additional license fees and limit throughput on IPSec connections. Alternative solutions such as ZScaler Cloud Connector exist and might be more suitable.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b1b6c964-c59a-42fb-85fe-61e5ec11da56"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use Fully Qualified Domain Name (FQDN) filtering in network rules.",
"description": "You can use FQDN based on DNS resolution in Azure Firewall and firewall policies. This capability allows you to filter outbound traffic with any TCP/UDP protocol (including NTP, SSH, RDP, and more). You must enable the Azure Firewall DNS Proxy configuration to use FQDNs in your network rules. To learn how it works, see Azure Firewall FQDN filtering in network rules.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "edad73e6-11f4-4f3d-ad4d-85a803631d88"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use Service Tags in Network Rules to enable selective access to specific Microsoft services.",
"description": "A service tag represents a group of IP address prefixes to help minimize complexity for security rule creation. Using Service Tags in Network Rules, it is possible to enable outbound access to specific services in Azure, Dynamics and Office 365 without opening wide ranges of IP addresses. Azure will maintain automatically the mapping between these tags and underlying IP addresses used by each service. The list of Service Tags available to Azure Firewall are listed here: Az Firewall Service Tags.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2747c05a-f1a0-44e2-918a-f673f409e9aa"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use FQDN Tags in Application Rules to enable selective access to specific Microsoft services.",
"description": "An FQDN tag represents a group of fully qualified domain names (FQDNs) associated with well known Microsoft services. You can use an FQDN tag in application rules to allow the required outbound network traffic through your firewall for some specific Azure services, Office 365, Windows 365 and Intune.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2ee28c36-0f0e-4da4-96a9-985f44b29615"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use Azure Firewall Manager to create and associate a DDoS protection plan with your hub virtual network (does not apply to Azure Virtual WAN).",
"description": "A DDoS protection plan provides enhanced mitigation features to defend your firewall from DDoS attacks. Azure Firewall Manager is an integrated tool to create your firewall infrastructure and DDoS protection plans. For more information, see Configure an Azure DDoS Protection Plan using Azure Firewall Manager.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1b052318-dd38-486c-97f3-b20c584c1bcd"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Use an Enterprise PKI to generate certificates for TLS Inspection.",
"description": "With Azure Firewall Premium, if TLS Inspection feature is used, it is recommended to leverage an internal Enterprise Certification Authority (CA) for production environment. Self-signed certificates should be used for testing/PoC purposes only.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c5db7b18-fa0c-48be-a754-ddb21f1acdcb"
},
{
"waf": "Security",
"service": "Azure Firewall",
"text": "Review Zero-Trust configuration guide for Azure Firewall and Application Gateway",
"description": "If your security requirements necessitate implementing a Zero-Trust approach for web applications (inspection and encryption), it is recommended to follow this guide. In this document, how to integrate together Azure Firewall and Application Gateway will be explained, in both traditional Hub & Spoke and Virtual WAN scenarios.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "96522d15-f2d0-41d0-b021-c87b47bf8b59"
},
{
"waf": "cost",
"service": "Azure Firewall",
"text": "Select the Azure Firewall SKU to deploy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "e23cca89-b750-4a14-8187-038aa999ab81"
},
{
"waf": "cost",
"service": "Azure Firewall",
"text": "Determine if some instances don't need permanent 24x7 allocation.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "c606fee7-9b75-4ce1-921f-aac5591768f8"
},
{
"waf": "cost",
"service": "Azure Firewall",
"text": "Determine where you can optimize firewall use across workloads.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "b68aec37-acbd-4101-be19-3e99e8d641f6"
},
{
"waf": "cost",
"service": "Azure Firewall",
"text": "Monitor and optimize firewall instances usage to determine cost-effectiveness.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "5f8eaf16-cabf-4fc4-82f9-1b9069b3bac2"
},
{
"waf": "cost",
"service": "Azure Firewall",
"text": "Review and optimize the number of public IP addresses required and Policies used.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "c88ea77e-1e9c-4d30-8b5e-c5e35cd4d93f"
},
{
"waf": "cost",
"service": "Azure Firewall",
"text": "Review logging requirements, estimate cost and control over time.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "ed8185a5-8f3a-402b-bd40-a3db15b390fd"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Deploy the proper Azure Firewall SKU.",
"description": "Azure Firewall can be deployed in three different SKUs: Basic, Standard and Premium. Azure Firewall Premium is recommended to secure highly sensitive applications (such as payment processing). Azure Firewall Standard is recommended for customers looking for Layer 3\u2013Layer 7 firewall and needs autoscaling to handle peak traffic periods of up to 30 Gbps. Azure Firewall Basic is recommended for SMB customers with throughput needs of 250 Mbps. If required, downgrade or upgrade is possible between Standard and Premium as documented here. For more information, see Choose the right Azure Firewall SKU to meet your needs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f91761cf-5135-4dc1-bebc-0f25ebd32c55"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Stop Azure Firewall deployments that don't need to run for 24x7.",
"description": "You might have development or testing environments that are used only during business hours. For more information, see Deallocate and allocate Azure Firewall.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e3cd59af-4664-4d35-b291-45076f5452bd"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Share the same instance of Azure Firewall across multiple workloads and Azure Virtual Networks.",
"description": "You can use a central instance of Azure Firewall in the hub virtual network or Virtual WAN secure hub and share the same firewall across many spoke virtual networks that are connected to the same hub from the same region. Ensure there's no unexpected cross-region traffic as part of the hub-spoke topology.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0648162b-e60c-4625-811d-8e844e53d297"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Regularly review traffic processed by Azure Firewall and look for originating workload optimizations",
"description": "Top Flows log (known in the industry as Fat Flows), shows the top connections that are contributing to the highest throughput through the firewall. It is recommended to regularly review traffic processed by the Azure Firewall and search for possible optimizations to reduce the amount of traffic traversing the firewall.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c6b65421-d9c6-46aa-85c5-9e891c888744"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Review under-utilized Azure Firewall instances. Identify and delete unused Azure Firewall deployments.",
"description": "To identify unused Azure Firewall deployments, start by analyzing the monitoring metrics and UDRs associated with subnets pointing to the firewall's private IP. Combine that information with other validations, such as if your instance of Azure Firewall has any rules (classic) for NAT, Network and Application, or even if the DNS Proxy setting is configured to Disabled, and with internal documentation about your environment and deployments. You can detect deployments that are cost-effective over time. For more information about monitoring logs and metrics, see Monitor Azure Firewall logs and metrics and SNAT port utilization.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ef951ddc-d36a-4194-a039-48af1cd3b1dd"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Use Azure Firewall Manager and its Policies to reduce operational costs, increase efficiency, and reduce management overhead.",
"description": "Review your Firewall Manager policies, associations, and inheritance carefully. Policies are billed based on firewall associations. A policy with zero or one firewall association is free of charge. A policy with multiple firewall associations is billed at a fixed rate.For more information, see Pricing - Azure Firewall Manager.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a8ac7739-8682-4369-84c6-e0fd8185f1a6"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Delete unused public IP addresses.",
"description": "Validate whether all the associated public IP addresses are in use. If they aren't in use, disassociate and delete them. Evaluate SNAT port utilization before removing any IP addresses.You'll only use the number of public IPs your firewall needs. For more information, see Monitor Azure Firewall logs and metrics and SNAT port utilization.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "01e92d97-de38-46fd-a4b3-a180301ada9b"
},
{
"waf": "Cost",
"service": "Azure Firewall",
"text": "Review logging requirements.",
"description": "Azure Firewall has the ability to comprehensively log metadata of all traffic it sees, to Log Analytics Workspaces, Storage or third party solutions through Event Hubs. However, all logging solutions incur costs for data processing and storage. At very large volumes these costs can be significant, a cost effective approach and alternative to Log Analytics should be considered and cost estimated. Consider whether it is required to log traffic metadata for all logging categories and modify in Diagnostic Settings if needed.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9fba472e-101a-4d6c-b9e9-762ce0e6035d"
},
{
"waf": "operations",
"service": "Azure Firewall",
"text": "Maintain inventory and backup of Azure Firewall configuration and Policies.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "3309c420-34ee-475f-983a-d258c92d73d1"
},
{
"waf": "operations",
"service": "Azure Firewall",
"text": "Leverage diagnostic logs for firewall monitoring and troubleshooting.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "32f7e307-f271-46d7-a0ea-e32ce5cf5f9a"
},
{
"waf": "operations",
"service": "Azure Firewall",
"text": "Leverage Azure Firewall Monitoring workbook.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "35c3a850-dd12-46fc-8748-d8e549a9b70e"
},
{
"waf": "operations",
"service": "Azure Firewall",
"text": "Regularly review your Policy insights and analytics.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "bc079e69-8f2f-43e6-94a7-61a05d1dd447"
},
{
"waf": "operations",
"service": "Azure Firewall",
"text": "Integrate Azure Firewall with Microsoft Defender for Cloud and Microsoft Sentinel.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "9b0b7514-18c1-4687-8a29-66e9e15c570d"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Do not use Azure Firewall for intra-VNet traffic control.",
"description": "Azure Firewall should be used to control traffic across VNets, between VNets and on-premises networks, outbound traffic to the Internet and incoming non-HTTP/s traffic. For intra-VNet traffic control, it is recommended to use Network Security Groups.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0405f896-a746-4bd5-831e-9914e4cb840f"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Maintain regular backups of Azure Policy artifacts.",
"description": "If Infrastructure-as-Code (IaC) approach is used to maintain Azure Firewall and all dependencies then backup and versioning of Azure Firewall Policies should be already in place. If not, a companion mechanism based on external Logic App can be deployed to automate and provide an effective solution.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1fe21c62-7800-4bd8-b1ed-b13c020a0759"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Enable Diagnostic Logs for Azure Firewall.",
"description": "Diagnostic Logs is a key component for many monitoring tools and strategies for Azure Firewall and should be enabled. You can monitor Azure Firewall by using firewall logs or workbooks. You can also use activity logs for auditing operations on Azure Firewall resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "afcc1df9-da67-4db4-a2d4-bad67422d890"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Use Structured Firewall Logs format.",
"description": "Structured Firewall Logs are a type of log data that are organized in a specific new format. They use a predefined schema to structure log data in a way that makes it easy to search, filter, and analyze. The latest monitoring tools are based on this type of logs hence it is often a pre-requisite. Use the previous Diagnostic Logs format only if there is an existing tool with a pre-requisite on that. Do not enable both logging formats at the same time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4f3d5677-801a-48f2-834c-4a2326a6a1c8"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Use the built-in Azure Firewall Monitoring Workbook.",
"description": "Azure Firewall portal experience now includes a new workbook under the Monitoring section UI, a separate installation is no more required. With the Azure Firewall Workbook, you can extract valuable insights from Azure Firewall events, delve into your application and network rules, and examine statistics regarding firewall activities across URLs, ports, and addresses.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c108c3a4-1cb0-4b5f-84dc-060e313574c4"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Monitor key metrics and create alerts for indicators of the utilization of Azure Firewall capacity.",
"description": "Alerts should be created to monitor at least Throughput, Firewall health state, SNAT port utilization and AZFW Latency Probe metrics.For information about monitoring logs and metrics, see Monitor Azure Firewall logs and metrics.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "912d5cba-1c0b-4a40-8ec0-81e5492c3023"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Configure Azure Firewall integration with Microsoft Defender for Cloud and Microsoft Sentinel.",
"description": "If these tools are available in the environment, it is recommended to leverage integration with Microsoft Defender for Cloud and Microsoft Sentinel solutions. With Microsoft Defender for Cloud integration, you can visualize the all-up status of network infrastructure and network security in one place, including Azure Network Security across all VNets and Virtual Hubs spread across different regions in Azure. Integration with Microsoft Sentinel provides threat detection and prevention capabilities.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e900c615-4865-4658-8cba-0d0f5fb6d169"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Regularly review Policy Analytics dashboard to identify potential issues.",
"description": "Policy Analytics is a new feature that provides insights into the impact of your Azure Firewall policies. It helps you identify potential issues (hitting policy limits, low utilization rules, redundant rules, rules too generic, IP Groups usage recommendation) in your policies and provides recommendations to improve your security posture and rule processing performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8ad68872-c312-4c23-9f23-be376493dfdb"
},
{
"waf": "Operations",
"service": "Azure Firewall",
"text": "Become familiar with KQL (Kusto Query Language) queries to allow quick analysis and troubleshooting using Azure Firewall logs.",
"description": "Sample queries are provided for Azure Firewall. Those will enable you to quickly identify what's happening inside your firewall and check to see which rule was triggered, or which rule is allowing/blocking a request.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bc0c5e49-a3d6-4d3d-b95d-aa96ce824f4b"
},
{
"waf": "performance",
"service": "Azure Firewall",
"text": "Regularly review and optimize firewall rules.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "0a96b331-2efc-47d2-8e25-f5c57b890ea9"
},
{
"waf": "performance",
"service": "Azure Firewall",
"text": "Review policy requirements and opportunities to summarize IP ranges and URLs list.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "be71278e-b14a-4c1b-9007-b7513095b138"
},
{
"waf": "performance",
"service": "Azure Firewall",
"text": "Assess your SNAT port requirements.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "503f63e3-bdd2-4e37-9a44-644670d204f0"
},
{
"waf": "performance",
"service": "Azure Firewall",
"text": "Plan load tests to test auto-scale performance in your environment.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "5dcb4cd3-a501-4d37-b2a6-3f59c3e1bd32"
},
{
"waf": "performance",
"service": "Azure Firewall",
"text": "Do not enable diagnostic tools and logging if not required.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-firewall.md",
+ "guid": "565d2322-9a28-4f3d-a657-95391fa683a5"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Use Policy Analytics dashboard to identify potential optimizations for Firewall Policies.",
"description": "Policy Analytics is a new feature that provides insights into the impact of your Azure Firewall policies. It helps you identify potential issues (hitting policy limits, low utilization rules, redundant rules, rules too generic, IP Groups usage recommendation) in your policies and provides recommendations to improve your security posture and rule processing performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e104f2f7-c376-4ed8-b536-a10a16be484d"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Consider Web Categories to allow or deny outbound access in bulk.",
"description": "Instead of explicitly building and maintaining a long list of public Internet sites, consider the usage of Azure Firewall Web Categories. This feature will dynamically categorize web content and will permit the creation of compact Application Rules.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0fb0141c-f1ac-4149-a10c-4b7954050b12"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Evaluate the performance impact of IDPS in Alert and deny mode.",
"description": "If Azure Firewall is required to operate in IDPS mode Alert and deny, carefully consider the performance impact as documented in this page.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "9263120f-b82d-4784-9c9a-73941e85079b"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Assess potential SNAT port exhaustion problem.",
"description": "Azure Firewall currently supports 2496 ports per Public IP address per backend Virtual Machine Scale Set instance. By default, there are two Virtual Machine Scale Set instances. So, there are 4992 ports per flow destination IP, destination port and protocol (TCP or UDP). The firewall scales up to a maximum of 20 instances. You can work around the limits by configuring Azure Firewall deployments with a minimum of five public IP addresses for deployments susceptible to SNAT exhaustion.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b2acb591-6e44-49f2-97f9-1196094776f3"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Properly warm up Azure Firewall before any performance test.",
"description": "Create initial traffic that isn't part of your load tests 20 minutes before the test. Use diagnostics settings to capture scale-up and scale-down events. You can use the Azure Load Testing service to generate the initial traffic. Allows the Azure Firewall instance to scale up its instances to the maximum.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0ec844d3-4b8c-41ee-ad0a-89c2b23f007b"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Configure an Azure Firewall subnet (AzureFirewallSubnet) with a /26 address space.",
"description": "Azure Firewall is a dedicated deployment in your virtual network. Within your virtual network, a dedicated subnet is required for the instance of Azure Firewall. Azure Firewall provisions more capacity as it scales.A /26 address space for its subnets ensures that the firewall has enough IP addresses available to accommodate the scaling. Azure Firewall doesn't need a subnet bigger than /26. The Azure Firewall subnet name must be AzureFirewallSubnet.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d1510802-2f00-4995-8a04-fbebce7fe966"
},
{
"waf": "Performance",
"service": "Azure Firewall",
"text": "Do not enable advanced logging if not required",
"description": "Azure Firewall provides some advanced logging capabilities that can be expensive to maintain always active. Instead, they should be used for troubleshooting purposes only, and limited in duration, then disabled when no more necessary. For example, Top flows and Flow trace logs are expensive can cause excessive CPU and storage usage on the Azure Firewall infrastructure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "60d6a84a-dcc9-4fbb-a68f-810341b9253c"
},
{
"waf": "reliability",
"service": "Azure Front Door",
"text": "Estimate the traffic pattern and volume. The number of requests from the client to the Azure Front Door edge might influence your tier choice. If you need to support a high volume of requests, consider the Azure Front Door Premium tier because performance ultimately impacts availability. However, there's a cost tradeoff. These tiers are described in Performance Efficiency.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "fd9f0940-7c31-4ed9-bd8c-5e927973c6c5"
},
{
"waf": "reliability",
"service": "Azure Front Door",
"text": "Choose your deployment strategy. The fundamental deployment approaches are active-active and active-passive. Active-active deployment means that multiple environments or stamps that run the workload serve traffic. Active-passive deployment means that only the primary region handles all traffic, but it fails over to the secondary region when necessary. In a multiregion deployment, stamps run in different regions for higher availability with a global load balancer, like Azure Front Door, that distributes traffic. Therefore, it's important to configure the load balancer for the appropriate deployment approach.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "1bc246b5-fba0-4047-bfaf-e5b677c6d003"
},
{
"waf": "reliability",
"service": "Azure Front Door",
"text": "Use the same host name on Azure Front Door and origin servers. To ensure that cookies or redirect URLs work properly, preserve the original HTTP host name when you use a reverse proxy, like a load balancer, in front of a web application.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "70c56b7a-a811-4c35-9fe0-939d9e866854"
},
{
"waf": "reliability",
"service": "Azure Front Door",
"text": "Implement the health endpoint monitoring pattern. Your application should expose health endpoints, which aggregate the state of the critical services and dependencies that your application needs to serve requests. Azure Front Door health probes use the endpoint to detect origin servers' health. For more information, see Health Endpoint Monitoring pattern.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "c30bd721-eb70-4887-8b8a-ce38e47ec178"
},
{
"waf": "reliability",
"service": "Azure Front Door",
"text": "Take advantage of the built-in content delivery network functionality in Azure Front Door. The content delivery network feature of Azure Front Door has hundreds of edge locations and can help withstand distributed denial of service (DDoS) attacks. These capabilities help improve reliability.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "ec18a3d4-61d5-4247-aa88-acbf11a339df"
},
{
"waf": "reliability",
"service": "Azure Front Door",
"text": "Consider a redundant traffic management option. Azure Front Door is a globally distributed service that runs as a singleton in an environment. Azure Front Door is a potential single point of failure in the system. If the service fails, then clients can't access your application during the downtime.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "5a88863f-43e9-48c7-8346-cf797fa4e4fa"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Choose a routing method that supports your deployment strategy. The weighted method, which distributes traffic based on the configured weight coefficient, supports active-active models. A priority-based value that configures the primary region to receive all traffic and send traffic to the secondary region as a backup supports active-passive models. Combine the preceding methods with latency so that the origin with the lowest latency receives traffic.",
"description": "You can select the best origin resource by using a series of decision steps and your design. The selected origin serves traffic within the allowable latency range in the specified ratio of weights.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2de15aa6-f607-4487-8972-2267a304f313"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Support redundancy by having multiple origins in one or more back-end pools. Always have redundant instances of your application and make sure each instance exposes an endpoint or origin. You can place those origins in one or more back-end pools.",
"description": "Multiple origins support redundancy by distributing traffic across multiple instances of the application. If one instance is unavailable, then other back-end origins can still receive traffic.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d5494be7-6a79-4d3f-bf44-ebe88788cd95"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Set up health probes on the origin. Configure Azure Front Door to conduct health checks to determine if the back-end instance is available and ready to continue receiving requests.",
"description": "Enabled health probes are part of the health monitoring pattern implementation. Health probes make sure that Azure Front Door only routes traffic to instances that are healthy enough to handle requests. For more information, see Best practices on health probes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "803e063d-1267-43c9-9878-54b1f3bb33b1"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Set a timeout on forwarding requests to the back end. Adjust the timeout setting according to your endpoints' needs. If you don't, Azure Front Door might close the connection before the origin sends the response. You can also lower the default timeout for Azure Front Door if all of your origins have a shorter timeout. For more information, see Troubleshooting unresponsive requests.",
"description": "Timeouts help prevent performance issues and availability issues by terminating requests that take longer than expected to complete.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "afb9a354-567a-4820-ae85-8eff0ad71f44"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Use the same host name on Azure Front Door and your origin. Azure Front Door can rewrite the host header of incoming requests, which is useful when you have multiple custom domain names that route to one origin. However, rewriting the host header might cause issues with request cookies and URL redirection.",
"description": "Set the same host name to prevent malfunction with session affinity, authentication, and authorization. For more information, see Preserve the original HTTP host name between a reverse proxy and its back-end web application.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "afa6253b-fffa-487f-a9b9-911e9821afef"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Decide if your application requires session affinity. If you have high reliability requirements, we recommend that you disable session affinity.",
"description": "With session affinity, user connections stay on the same origin during the user session. If that origin becomes unavailable, the user experience might be disrupted.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "702c37d1-ddfb-40fc-9ea0-58643a2e61b6"
},
{
"waf": "Reliability",
"service": "Azure Front Door",
"text": "Take advantage of the rate-limiting rules that are included with a web application firewall (WAF).",
"description": "Limit requests to prevent clients from sending too much traffic to your application. Rate limiting can help you avoid problems like a retry storm.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4a17bea1-3951-4f73-8de7-cd3193bca5d2"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Review the security baseline for Azure Front Door.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "017b3c2c-d4ae-434f-8a34-07892661814d"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Protect the back-end servers. The front end acts as the single point of ingress to the application.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "cbbd35ba-ecdb-4139-ab42-bdac8141062a"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Allow only authorized access to the control plane. Use Azure Front Door role-based access control (RBAC) to restrict access to only the identities that need it.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "959ab078-8d43-4796-9fef-6445a325097c"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Block common threats at the edge. WAF is integrated with Azure Front Door. Enable WAF rules on the front ends to protect applications from common exploits and vulnerabilities at the network edge, closer to the attack source.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "45987127-47d8-43a3-ad12-9f625ed6a883"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Protect Azure Front Door against unexpected traffic. Azure Front Door uses the basic plan of Azure DDoS protection to protect application endpoints from DDoS attacks. If you need to expose other public IP addresses from your application, consider adding the DDoS Protection standard plan for those addresses for advanced protection and detection capabilities.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "92f43df8-151b-4445-bba9-e1b96da81d10"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Protect data in transit. Enable end-to-end Transport Layer Security (TLS), HTTP to HTTPS redirection, and managed TLS certificates when applicable. For more information, see TLS best practices for Azure Front Door.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "ad119b63-dfca-446a-a65b-9f1e5849be6b"
},
{
"waf": "security",
"service": "Azure Front Door",
"text": "Monitor anomalous activity. Regularly review the logs to check for attacks and false positives. Send WAF logs from Azure Front Door to your organization's centralized security information and event management (SIEM), such as Microsoft Sentinel, to detect threat patterns and incorporate preventative measures in the workload design.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "7eec048b-3dfe-4a71-b4ac-5a3f554ff7ae"
},
{
"waf": "Security",
"service": "Azure Front Door",
"text": "Enable WAF rule sets that detect and block potentially malicious traffic. This feature is available on the Premium tier. We recommend these rule sets: - Default- Bot protection- IP restriction- Geo-filtering- Rate limiting",
"description": "Default rule sets are updated frequently based on OWASP top-10 attack types and information from Microsoft Threat Intelligence. The specialized rule sets detect certain use cases. For example, bot rules classify bots as good, bad, or unknown based on the client IP addresses. They also block bad bots and known IP addresses and restrict traffic based on geographical location of the callers. By using a combination of rule sets, you can detect and block attacks with various intents.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "67a91ccb-b42b-486c-8d10-99717d93fdb8"
},
{
"waf": "Security",
"service": "Azure Front Door",
"text": "Create exclusions for managed rule sets. Test a WAF policy in detection mode for a few weeks and adjust any false positives before you deploy it.",
"description": "Reduce false positives and allow legitimate requests for your application.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e85f5804-244d-4e3e-bd19-9c5476602260"
},
{
"waf": "Security",
"service": "Azure Front Door",
"text": "Enable end-to-end TLS, HTTP to HTTPS redirection, and managed TLS certificates when applicable. Review the TLS best practices for Azure Front Door. Use TLS version 1.2 as the minimum allowed version with ciphers that are relevant for your application. Azure Front Door managed certificates should be your default choice for ease of operations. However, if you want to manage the lifecycle of the certificates, use your own certificates in Azure Front Door custom domain endpoints and store them in Key Vault.",
"description": "TLS ensures that data exchanges between the browser, Azure Front Door, and the back-end origins are encrypted to prevent tampering. Key Vault offers managed certificate support and simple certificate renewal and rotation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5d4054fd-512a-4af5-84bd-1b039783b5e2"
},
{
"waf": "cost",
"service": "Azure Front Door",
"text": "Review Azure Front Door tiers and pricing. Use the pricing calculator to estimate the realistic costs for each tier. Compare the features and suitability of each tier for your scenario. For instance, only the Premium tier supports connecting to your origin via Private Link.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "5ecb8da9-9b18-4f39-a69e-c69eb2513b4b"
},
{
"waf": "cost",
"service": "Azure Front Door",
"text": "Consider bandwidth costs. The bandwidth costs of Azure Front Door depend on the tier that you choose and the type of data transfer. Azure Front Door provides built-in reports for billable metrics. To assess your costs related to bandwidth and where you can focus your optimization efforts, see Azure Front Door reports.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "3db5b1f9-57ec-44a6-adec-4f7cef47e63c"
},
{
"waf": "cost",
"service": "Azure Front Door",
"text": "Optimize incoming requests. Azure Front Door bills the incoming requests. You can set restrictions in your design configuration.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "871b4651-734d-40f4-b8a5-1705fa30dbe3"
},
{
"waf": "cost",
"service": "Azure Front Door",
"text": "Use resources efficiently. Azure Front Door uses a routing method that helps with resource optimization. Unless the workload is extremely latency sensitive, distribute traffic evenly across all environments to effectively use deployed resources.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "d16d79fc-3c0c-4da4-9cfe-8a6b97d7259d"
},
{
"waf": "cost",
"service": "Azure Front Door",
"text": "Consider using a shared instance that's provided by the organization. Costs incurred from centralized services are shared between the workloads. However, consider the tradeoff with reliability. For mission-critical applications that have high availability requirements, we recommend an autonomous instance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "78f09072-d08f-430c-9d24-6d3b938ecd14"
},
{
"waf": "cost",
"service": "Azure Front Door",
"text": "Pay attention to the amount of data logged. Costs related to both bandwidth and storage can accrue if certain requests aren't necessary or if logging data is retained for a long period of time.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "1069bc46-68c3-46dd-80d0-700866521165"
},
{
"waf": "Cost",
"service": "Azure Front Door",
"text": "Use caching for endpoints that support it.",
"description": "Caching optimizes data transfer costs because it reduces the number of calls from your Azure Front Door instance to the origin.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fc470281-721e-40db-9289-ad73b03159d7"
},
{
"waf": "Cost",
"service": "Azure Front Door",
"text": "Consider enabling file compression. For this configuration, the application must support compression and caching must be enabled.",
"description": "Compression reduces bandwidth consumption and improves performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "638db3b0-f9b3-49b8-86f1-11621086b10f"
},
{
"waf": "Cost",
"service": "Azure Front Door",
"text": "Disable health checks in single back-end pools.If you have only one origin configured in your Azure Front Door origin group, these calls are unnecessary.",
"description": "You can save on bandwidth costs by disabling requests that aren't required to make routing decisions.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f397a438-b320-46f8-a41a-f94545db3412"
},
{
"waf": "operations",
"service": "Azure Front Door",
"text": "Use infrastructure as code (IaC) technologies. Use IaC technologies like Bicep and Azure Resource Manager templates to provision the Azure Front Door instance. These declarative approaches provide consistency and straightforward maintenance. For example, by using IaC technologies, you can easily adopt new ruleset versions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "58485d89-afb9-4dd4-bc01-1c487bce0642"
},
{
"waf": "operations",
"service": "Azure Front Door",
"text": "Simplify configurations. Use Azure Front Door to easily manage configurations. For example, suppose your architecture supports microservices. Azure Front Door supports redirection capabilities, so you can use path-based redirection to target individual services.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "bd0f5f64-5670-4d70-9e1e-a455f393824b"
},
{
"waf": "operations",
"service": "Azure Front Door",
"text": "Handle progressive exposure by using Azure Front Door routing methods. For a weighted load balancing approach you can use a canary deployment to send a specific percentage of traffic to a back end. This approach helps you test new features and releases in a controlled environment before you roll them out.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "34d0c653-4565-4c84-b000-6226c6410dac"
},
{
"waf": "operations",
"service": "Azure Front Door",
"text": "Collect and analyze Azure Front Door operational data as part of your workload monitoring. Capture relevant Azure Front Door logs and metrics with Azure Monitor Logs. This data helps you troubleshoot, understand user behaviors, and optimize operations.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "46ce7fe1-829b-48d0-889f-cafd0e5cae28"
},
{
"waf": "operations",
"service": "Azure Front Door",
"text": "Offload certificate management to Azure. Ease the operational burden associated with certification rotation and renewals.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "29049b7b-7468-4852-895e-f33d1fb0c7fb"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Use HTTP to HTTPS redirection to support forward compatibility.",
"description": "When redirection is enabled, Azure Front Door automatically redirects clients that are using older protocol to use HTTPS for a secure experience.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1e9aecf0-747c-47c6-936e-a0c404ae8e21"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Capture logs and metrics. Include resource activity logs, access logs, health probe logs, and WAF logs. Set up alerts.",
"description": "Monitoring ingress flow is a crucial part of monitoring an application. You want to track requests and make performance and security improvements. You need data to debug your Azure Front Door configuration. With alerts in place, you can get instant notifications of any critical operational issues.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "90aa5326-da06-4070-bcb0-26d31648029a"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Review the built-in analytics reports.",
"description": "A holistic view of your Azure Front Door profile helps drive improvements based on traffic and security reports through WAF metrics.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bf371c38-103b-4467-953d-f6fc7746d599"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Use managed TLS certificates when possible.",
"description": "Azure Front Door can issue and manage certificates for you. This feature eliminates the need for certificate renewals and minimizes the risk of an outage due to an invalid or expired TLS certificate.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "544fffff-4bcd-4d30-851d-05b7bc2cdb91"
},
{
"waf": "Operations",
"service": "Azure Front Door",
"text": "Use wildcard TLS certificates.",
"description": "You don't need to modify the configuration to add or specify each subdomain separately.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bf934891-a9a1-49f7-9036-ea7ba9630bdc"
},
{
"waf": "performance",
"service": "Azure Front Door",
"text": "Plan capacity by analyzing your expected traffic patterns. Conduct thorough testing to understand how your application performs under different loads. Consider factors like simultaneous transactions, request rates, and data transfer.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "231e1a74-b2af-4061-8703-c1bc0c84ad7c"
},
{
"waf": "performance",
"service": "Azure Front Door",
"text": "Analyze performance data by regularly reviewing Azure Front Door reports. These reports provide insights into various metrics that serve as performance indicators at the technology level.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "83ea22a9-10c2-4d23-a022-05fc70bfc284"
},
{
"waf": "performance",
"service": "Azure Front Door",
"text": "Optimize data transfers.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "b3216475-74fa-46b9-b5a3-f13fcbb7e718"
},
{
"waf": "performance",
"service": "Azure Front Door",
"text": "Optimize the use of health probes. Get health information from health probes only when the state of the origins change. Strike a balance between monitoring accuracy and minimizing unnecessary traffic.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "fa0e75e6-5669-406a-8155-44e8d40ae935"
},
{
"waf": "performance",
"service": "Azure Front Door",
"text": "Review the origin routing method. Azure Front Door provides various routing methods, including latency-based, priority-based, weighted, and session affinity-based routing, to the origin. These methods significantly affect your application's performance. To learn more about the best traffic routing option for your scenario, see Traffic routing methods to origin.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "c1024a4d-bcba-42d9-92a8-070c5de5abf4"
},
{
"waf": "performance",
"service": "Azure Front Door",
"text": "Review the location of origin servers. Your origin servers' location impacts the responsiveness of your application. Origin servers should be closer to the users. Azure Front Door ensures that users from a specific location access the nearest Azure Front Door entry point. The performance benefits include faster user experience, better use of latency-based routing by Azure Front Door, and minimized data transfer time by using caching, which stores content closer to users.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-front-door.md",
+ "guid": "95d67b4f-c19e-40d0-9a55-dba46c40eea8"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "Enable caching. You can optimize query strings for caching. For purely static content, ignore query strings to maximize your use of the cache. If your application uses query strings, consider including them in the cache key. Including the query strings in the cache key allows Azure Front Door to serve cached responses or other responses, based on your configuration.",
"description": "Azure Front Door offers a robust content delivery network solution that caches content at the edge of the network. Caching reduces the load on the back-end servers and reduces data movement across the network, which helps offload bandwidth usage.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6133804d-8e26-4b44-b0ac-9a94fc420227"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "Use file compression when you're accessing downloadable content.",
"description": "Compression in Azure Front Door helps deliver content in the optimal format, has a smaller payload, and delivers content to the users faster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1c3bbe86-1c5f-491f-99c7-54f0603b943a"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "When you configure health probes in Azure Front Door, consider using `HEAD` requests instead of `GET` requests. The health probe reads only the status code, not the content.",
"description": "`HEAD` requests let you query a state change without fetching its entire content.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a03377e9-9c4a-49dd-abbc-6b240286eb1d"
},
{
"waf": "Performance",
"service": "Azure Front Door",
"text": "Evaluate whether you should enable session affinity when requests from the same user should be directed to the same back-end server. From a reliability perspective, we don't recommend this approach. If you use this option, the application should gracefully recover without disrupting user sessions. There's also a tradeoff on load balancing because it restricts the flexibility of distributing traffic across multiple back ends evenly.",
"description": "Optimize performance and maintain continuity for user sessions, especially when applications rely on maintaining state information locally.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c1acd7ab-028c-4f25-a0a9-840fe534fca7"
},
{
"waf": "reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: For critical workloads, use availability zones for your AKS clusters.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "2e9764a8-9f04-49c8-912c-41f40b2307e3"
},
{
"waf": "reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Plan the IP address space to ensure your cluster can reliably scale, including handling of failover traffic in multi-cluster topologies.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "5e7f4600-3959-4c9c-b29d-c555c79dfd9e"
},
{
"waf": "reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable Container insights to monitor your cluster and configure alerts for reliability-impacting events.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "217d3e94-7267-4b11-bd87-928d6119a666"
},
{
"waf": "reliability",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Ensure workloads are built to support horizontal scaling and report application readiness and health.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "b07721f6-5bd8-47df-8a79-e7e3ffa4e84a"
},
{
"waf": "reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Ensure your workload is running on user node pools and chose the right size SKU. At a minimum, include two nodes for user node pools and three nodes for the system node pool.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "3d531a79-530b-416f-8176-d18fb151f2a0"
},
{
"waf": "reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use the AKS Uptime SLA to meet availability targets for production workloads.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "359d4a34-78c9-41e3-9fce-3a4b5fb08a2b"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Control pod scheduling using node selectors and affinity.",
"description": "Allows the Kubernetes scheduler to logically isolate workloads by hardware in the node. Unlike tolerations, pods without a matching node selector can be scheduled on labeled nodes, which allows unused resources on the nodes to consume, but gives priority to pods that define the matching node selector. Use node affinity for more flexibility, which allows you to define what happens if the pod can't be matched with a node.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dd3b6ffb-7e93-4b1a-aaf0-3cc42e6271df"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Ensure proper selection of network plugin based on network requirements and cluster sizing.",
"description": "Azure CNI is required for specific scenarios, for example, Windows-based node pools, specific networking requirements and Kubernetes Network Policies. Reference Kubenet versus Azure CNI for more information.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a2c3dd5a-7ebc-4e4e-8061-a4cb90ed1fe7"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Use the AKS Uptime SLA for production grade clusters.",
"description": "The AKS Uptime SLA guarantees: - `99.95%` availability of the Kubernetes API server endpoint for AKS Clusters that use Azure Availability Zones, or - `99.9%` availability for AKS Clusters that don't use Azure Availability Zones.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "856eeb19-e8cf-4c18-8443-69a4d4a66600"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Configure monitoring of cluster with Container insights.",
"description": "Container insights help monitor the health and performance of controllers, nodes, and containers that are available in Kubernetes through the Metrics API. Integration with Prometheus enables collection of application and workload metrics.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1b92e639-a727-409c-a343-17109a2861f2"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use availability zones to maximize resilience within an Azure region by distributing AKS agent nodes across physically separate data centers.",
"description": "By spreading node pools across multiple zones, nodes in one node pool will continue running even if another zone has gone down. If colocality requirements exist, either a regular VMSS-based AKS deployment into a single zone or proximity placement groups can be used to minimize internode latency.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4834a7a7-6bf7-4a58-961b-f1b97da3c724"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Adopt a multiregion strategy by deploying AKS clusters deployed across different Azure regions to maximize availability and provide business continuity.",
"description": "Internet facing workloads should leverage Azure Front Door or Azure Traffic Manager to route traffic globally across AKS clusters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "57d11e53-f830-4930-9d74-2ce5435cd971"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Define Pod resource requests and limits in application deployment manifests, and enforce with Azure Policy.",
"description": "Container CPU and memory resource limits are necessary to prevent resource exhaustion in your Kubernetes cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5527c666-0096-4a1d-9022-cada9d4c77da"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Keep the System node pool isolated from application workloads.",
"description": "System node pools require a VM SKU of at least 2 vCPUs and 4 GB memory, but 4 vCPU or more is recommended. Reference System and user node pools for detailed requirements.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "80a4d735-cacb-456d-a188-ebf3e6610e6b"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Separate applications to dedicated node pools based on specific requirements.",
"description": "Applications may share the same configuration and need GPU-enabled VMs, CPU or memory optimized VMs, or the ability to scale-to-zero. Avoid large number of node pools to reduce extra management overhead.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "caa13588-59c1-416a-8b81-4e1ce3d9b707"
},
{
"waf": "Reliability",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use a NAT gateway for clusters that run workloads that make many concurrent outbound connections.",
"description": "To avoid reliability issues with Azure Load Balancer limitations with high concurrent outbound traffic, us a NAT Gateway instead to support reliable egress traffic at scale.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ecb8bcd9-2f8b-4394-86bb-c7ee533f7d08"
},
{
"waf": "security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Managed Identities to avoid managing and rotating service principles.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "5f6c3708-ec93-417b-909c-4414202ff1e6"
},
{
"waf": "security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Kubernetes role-based access control (RBAC) with Microsoft Entra ID for least privilege access and minimize granting administrator privileges to protect configuration, and secrets access.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "c90dce11-1c77-4b0e-b1c4-4aba286475af"
},
{
"waf": "security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Microsoft Defender for containers with Azure Sentinel to detect and quickly respond to threats across your cluster and workloads running on them.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "35a19511-d5d5-4a36-8fdc-796b8549dc4c"
},
{
"waf": "security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Deploy a private AKS cluster to ensure cluster management traffic to your API server remains on your private network. Or use the API server allow list for non-private clusters.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "a572c855-d42a-4490-ab5e-afab4018fd8f"
},
{
"waf": "security",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use a Web Application Firewall to secure HTTP(S) traffic.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "80693bc5-79bf-4928-8887-1a77544d3bad"
},
{
"waf": "security",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Ensure your CI/CID pipeline is hardened with container-aware scanning.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "ab5dd3a3-2d8f-4a82-b209-05715fba7e61"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Microsoft Entra integration.",
"description": "Using Microsoft Entra ID centralizes the identity management component. Any change in user account or group status is automatically updated in access to the AKS cluster. The developers and application owners of your Kubernetes cluster need access to different resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a97490b6-9e41-45a1-83bd-7d78dcaa75a6"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Authenticate with Microsoft Entra ID to Azure Container Registry.",
"description": "AKS and Microsoft Entra ID enables authentication with Azure Container Registry without the use of `imagePullSecrets` secrets. Review Authenticate with Azure Container Registry from Azure Kubernetes Service for more information.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0b153016-434a-419e-8114-530956194357"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Secure network traffic to your API server with private AKS cluster.",
"description": "By default, network traffic between your node pools and the API server travels the Microsoft backbone network; by using a private cluster, you can ensure network traffic to your API server remains on the private network only.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "539f0f42-b505-41d0-b297-3b49cc829720"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: For non-private AKS clusters, use API server authorized IP ranges.",
"description": "When using public clusters, you can still limit the traffic that can reach your clusters API server by using the authorized IP range feature. Include sources like the public IPs of your deployment build agents, operations management, and node pools' egress point (such as Azure Firewall).",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f169dfc7-70ef-478d-a483-12f396742584"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Protect the API server with Microsoft Entra RBAC.",
"description": "Securing access to the Kubernetes API Server is one of the most important things you can do to secure your cluster. Integrate Kubernetes role-based access control (RBAC) with Microsoft Entra ID to control access to the API server. Disable local accounts to enforce all cluster access using Microsoft Entra ID-based identities.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8431face-139d-4a91-ba8c-6053f0125e74"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Azure network policies or Calico.",
"description": "Secure and control network traffic between pods in a cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d1008f3b-5c0d-42ff-8513-fcd6b064fc5d"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Secure clusters and pods with Azure Policy.",
"description": "Azure Policy can help to apply at-scale enforcement and safeguards on your clusters in a centralized, consistent manner. It can also control what functions pods are granted and if anything is running against company policy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "e4987bda-a67a-4407-b133-8c378788a8b8"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Secure container access to resources.",
"description": "Limit access to actions that containers can perform. Provide the least number of permissions, and avoid the use of root or privileged escalation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6fff442f-deed-462d-90b6-7fde6ce81fae"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use a Web Application Firewall to secure HTTP(S) traffic.",
"description": "To scan incoming traffic for potential attacks, use a web application firewall such as Azure Web Application Firewall (WAF) on Azure Application Gateway or Azure Front Door.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dc2dfc11-1574-4228-88d9-50e077b7d8d3"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Control cluster egress traffic.",
"description": "Ensure your cluster's outbound traffic is passing through a network security point such as Azure Firewall or an HTTP proxy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "267d8ee6-5cfb-471c-ac5c-d2543358525b"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use the open-source Microsoft Entra Workload ID and Secrets Store CSI Driver with Azure Key Vault.",
"description": "Protect and rotate secrets, certificates, and connection strings in Azure Key Vault with strong encryption. Provides an access audit log, and keeps core secrets out of the deployment pipeline.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f5ae12ec-66b2-43fa-844d-3be5e07b91f0"
},
{
"waf": "Security",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use Microsoft Defender for Containers.",
"description": "Monitor and maintain the security of your clusters, containers, and their applications.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "628bfcb8-06cb-495f-a25e-5890b6f5dbba"
},
{
"waf": "cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use appropriate VM SKU per node pool and reserved instances where long-term capacity is expected.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "ec710c29-e6c0-4675-b051-73fc3a0010d7"
},
{
"waf": "cost",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Use appropriate managed disk tier and size.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "9cd3e427-64d5-48e8-aa6a-dfa7a473512c"
},
{
"waf": "cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Review performance metrics, starting with CPU, memory, storage, and network, to identify cost optimization opportunities by cluster, nodes, and namespace.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "aa2243d7-e30a-4963-b569-a93bf2660bb2"
},
{
"waf": "cost",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architecture: Use autoscalers to scale in when workloads are less active.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "d917bb41-11ca-4487-a354-abad918096e6"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Align SKU selection and managed disk size with workload requirements.",
"description": "Matching your selection to your workload demands ensures you don't pay for unneeded resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "60822342-a88f-4260-a595-c5919386bbdd"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select the right virtual machine instance type.",
"description": "Selecting the right virtual machine instance type is critical as it directly impacts the cost of running applications on AKS. Choosing a high-performance instance without proper utilization can lead to wasteful spending, while choosing a powerful instance can lead to performance issues and increased downtime. To determine the right virtual machine instance type, consider workload characteristics, resource requirements, and availability needs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "45c1b3bf-8e01-4337-984d-e8b03a969e4c"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select virtual machines based on the Arm architecture.",
"description": "AKS supports creating ARM64 Ubuntu agent nodes, as well as a of mix Intel and ARM architecture nodes within a cluster that can bring better performance at a lower cost.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "620cb68e-2005-464b-90d3-0e767babcfcd"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select Azure Spot Virtual Machines.",
"description": "Spot VMs allow you to take advantage of unutilized Azure capacity with significant discounts (up to 90% as compared to pay-as-you-go prices). If Azure needs capacity back, the Azure infrastructure evicts the Spot nodes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "357e61fe-86e6-41c6-b446-3f0def6d8bcf"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Select the appropriate region.",
"description": "Due to many factors, cost of resources varies per region in Azure. Evaluate the cost, latency, and compliance requirements to ensure you are running your workload cost-effectively and it doesn't affect your end-users or create extra networking charges.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ddb71774-895b-4149-9e0c-e348a9829df5"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Maintain small and optimized images.",
"description": "Streamlining your images helps reduce costs since new nodes need to download these images. Build images in a way that allows the container start as soon as possible to help avoid user request failures or timeouts while the application is starting up, potentially leading to overprovisioning.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d6b9a1b1-66b9-4f32-9269-4dba8ff3691d"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable Cluster Autoscaler to automatically reduce the number of agent nodes in response to excess resource capacity.",
"description": "Automatically scaling down the number of nodes in your AKS cluster lets you run an efficient cluster when demand is low and scale up when demand returns.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "330a0b20-69f1-44b9-9b9e-907e8e1bf5ca"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable Node Autoprovision to automate VM SKU selection.",
"description": "Node Autoprovision simplifies the SKU selection process and decides, based on pending pod resource requirements, the optimal VM configuration to run workloads in the most efficient and cost effective manner.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "479e3bcb-48bb-4f49-a449-d67df3a82c1e"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use the Horizontal Pod Autoscaler.",
"description": "Adjust the number of pods in a deployment depending on CPU utilization or other select metrics, which support cluster scale-in operations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "18dfc1c5-f5e8-4c89-9805-af9dd82f595d"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use Vertical Pod Autoscaler (preview).",
"description": "Rightsize your pods and dynamically set requests and limits based on historic usage.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ff159e4c-281f-4c30-aa1c-819ce3c94aad"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use Kubernetes Event Driven Autoscaling (KEDA).",
"description": "Scale based on the number of events being processed. Choose from a rich catalogue of 50+ KEDA scalers.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "afad2446-229b-4b5c-89fc-33e0a1ffdf05"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Adopt a cloud financial discipline and cultural practice to drive ownership of cloud usage.",
"description": "The foundation of enabling cost optimization is the spread of a cost saving cluster. A financial operations approach (FinOps) is often used to help organizations reduce cloud costs. It is a practice involving collaboration between finance, operations, and engineering teams to drive alignment on cost saving goals and bring transparency to cloud costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "7bf19a02-eeec-4611-b559-f5cef964cc63"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Sign up for Azure Reservations or Azure Savings Plan.",
"description": "If you properly planned for capacity, your workload is predictable and exists for an extended period of time, sign up for an Azure Reservation or a savings plan to further reduce your resource costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8b20a125-f425-42b9-9636-128941325958"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Configure monitoring of cluster with Container insights.",
"description": "Container insights help provides actionable insights into your clusters idle and unallocated resources. Container insights also supports collecting Prometheus metrics and integrates with Azure Managed Grafana to get a holistic view of your application and infrastructure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3c328ad3-02b3-4b44-b833-e8e0edcf8fd8"
},
{
"waf": "Cost",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Configure the AKS Cost Analysis add-on.",
"description": "The cost analysis cluster extension enables you to obtain granular insight into costs associated with various Kubernetes resources in your clusters or namespaces.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1104dc91-14f0-4330-ac7d-fa85039a0802"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use a template-based deployment using Bicep, Terraform, or others. Make sure that all deployments are repeatable, traceable, and stored in a source code repo.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "231e994a-ffa3-4eef-bcd5-e85c0fd017ef"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Build an automated process to ensure your clusters are bootstrapped with the necessary cluster-wide configurations and deployments. This is often performed using GitOps.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "484c6621-c021-430c-a94b-633da893adc5"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use a repeatable and automated deployment processes for your workload within your software development lifecycle.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "a394bfb7-a185-4416-af7f-908ad78ba2cf"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable diagnostics settings to ensure control plane or core API server interactions are logged.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "b88f9b48-fd82-404f-8b7b-5acea4d17dc4"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Enable Container insights to collect metrics, logs, and diagnostics to monitor the availability and performance of the cluster and workloads running on it.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "9ab6b90d-899e-4c61-8127-e097c1d80cca"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: The workload should be designed to emit telemetry that can be collected, which should also include liveliness and readiness statuses.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "a36b0ea0-7805-4deb-8c01-75ad610ecdc7"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Use chaos engineering practices that target Kubernetes to identify application or platform reliability issues.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "e14572fc-3556-4968-a23b-dcdb2305c57c"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Optimize your workload to operate and deploy efficiently in a container.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "3e3b24ae-ab28-40fe-8074-1a30b6c1a71f"
},
{
"waf": "operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Enforce cluster and workload governance using Azure Policy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "cb964e93-b3f5-43b4-a52f-30f53a16d163"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Review AKS best practices documentation.",
"description": "To build and run applications successfully in AKS, there are key considerations to understand and implement. These areas include multi-tenancy and scheduler features, cluster, and pod security, or business continuity and disaster recovery.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "df3a72a5-8d24-4289-aa12-803287bb182d"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Review Azure Chaos Studio.",
"description": "Azure Chaos Studio can help simulate faults and trigger disaster recovery situations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "037e283c-7763-4006-939e-f101331fef86"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Configure monitoring of cluster with Container insights.",
"description": "Container insights help monitor the performance of containers by collecting memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API and container logs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bdab324d-7736-4444-a03e-a1ec180f3699"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Monitor application performance with Azure Monitor.",
"description": "Configure Application Insights for code-based monitoring of applications running in an AKS cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ea1485fc-32d7-46dc-a000-9e87c4834091"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Configure scraping of Prometheus metrics with Container insights.",
"description": "Container insights, which are part of Azure Monitor, provide a seamless onboarding experience to collect Prometheus metrics. Reference Configure scraping of Prometheus metrics for more information.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "35367a45-61fb-4731-a636-e59e8ce67fac"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Adopt a multiregion strategy by deploying AKS clusters deployed across different Azure regions to maximize availability and provide business continuity.",
"description": "Internet facing workloads should leverage Azure Front Door or Azure Traffic Manager to route traffic globally across AKS clusters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8dd12fab-e3cb-4b39-9ebf-3609a3de2e34"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Operationalize clusters and pods configuration standards with Azure Policy.",
"description": "Azure Policy can help to apply at-scale enforcement and safeguards on your clusters in a centralized, consistent manner. It can also control what functions pods are granted and if anything is running against company policy.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3dc59879-d877-4719-84d1-8262c08c7081"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use platform capabilities in your release engineering process.",
"description": "Kubernetes and ingress controllers support many advanced deployment patterns for inclusion in your release engineering process. Consider patterns like blue-green deployments or canary releases.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "cb3372a2-16ef-4ebf-b7c2-b58f984ef966"
},
{
"waf": "Operations",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: For mission-critical workloads, use stamp-level blue/green deployments.",
"description": "Automate your mission-critical design areas, including deployment and testing.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0586a21b-1b24-4112-b1b6-9e10119bed8b"
},
{
"waf": "performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Perform and iterate on a detailed capacity plan exercise that includes SKU, autoscale settings, IP addressing, and failover considerations.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "f527e0a1-3ba5-48d8-93db-07cf5ce42fdd"
},
{
"waf": "performance",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable cluster autoscaler to automatically adjust the number of agent nodes in response workload demands.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "d8ec7ce1-bb32-4042-93f3-ad468f9c120b"
},
{
"waf": "performance",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Use the Horizontal pod autoscaler to adjust the number of pods in a deployment depending on CPU utilization or other select metrics.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "1cb2782a-f301-4c47-b0a5-f355abdbb796"
},
{
"waf": "performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Perform ongoing load testing activities that exercise both the pod and cluster autoscaler.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "a805eb93-ffa7-4fc8-a8ce-7481da64aa1e"
},
{
"waf": "performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Separate workloads into different node pools allowing independent scalling.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-kubernetes-service.md",
+ "guid": "162e3ed3-bde4-4a09-b074-aec1140b735a"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Develop a detailed capacity plan and continually review and revise.",
"description": "After formalizing your capacity plan, it should be frequently updated by continuously observing the resource utilization of the cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1b9c4ae0-1ae6-4d09-a1e8-22dec6edb20b"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Cluster architecture: Enable cluster autoscaler to automatically adjust the number of agent nodes in response to resource constraints.",
"description": "The ability to automatically scale up or down the number of nodes in your AKS cluster lets you run an efficient, cost-effective cluster.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b71f8835-94bd-4396-88e2-07a8ce2916e0"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Cluster and workload architectures: Separate workloads into different node pools and consider scaling user node pools.",
"description": "Unlike System node pools that always require running nodes, user node pools allow you to scale up or down.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0b3fd6dd-f113-441a-bf35-e6e49400a99e"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use AKS advanced scheduler features.",
"description": "Helps control balancing of resources for workloads that require them.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "259b98d6-ff88-4ba1-b459-bf1fab15ae3e"
},
{
"waf": "Performance",
"service": "Azure Kubernetes Service",
"text": "Workload architecture: Use meaningful workload scaling metrics.",
"description": "Not all scale decisions can be derived from CPU or memory metrics. Often scale considerations will come from more complex or even external data points. Use KEDA to build a meaningful auto scale ruleset based on signals that are specific to your workload.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5cf34320-3414-4c06-93c7-945fc9f3d7e2"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Resiliency: Deploy models to environments that support availability zones, such as AKS. By ensuring deployments are distributed across availability zones, you're ensuring a deployment is available even in the event of a datacenter failure. For enhanced reliability and availability, consider a multi-region deployment topology.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "0d13edb5-8966-463a-868e-c3ba9d94e644"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Resiliency: Ensure you have sufficient compute for both training and inferencing. Through resource planning, make sure your compute SKU and scale settings meet the requirements of your workload.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "9a42f7b9-41db-4c47-854d-90d08c4cbe22"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Resiliency: Segregate Machine Learning workspaces used for exploratory work from those used for production.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "3994dafd-ee4c-4768-8c9f-a3b8ff74b1ba"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Resiliency: When using managed online endpoints for inferencing, use a release strategy such as blue-green deployments to minimize downtime and reduce the risk associated with deploying new versions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "a8c2bbfa-d47f-44bd-ad33-4c635773259e"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Business requirements: Select your use of compute clusters, compute instances, and externalized inference hosts based on reliability needs, considering service-level agreements (SLAs) as a factor.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "a03b959b-6c2a-485f-824c-4d105fce8c68"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Recovery: Ensure you have self-healing capabilities, such as checkpointing features supported by Machine Learning, when training large models.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "45f7fa49-0339-464b-94cb-b20ec1700e14"
},
{
"waf": "reliability",
"service": "Azure Machine Learning",
"text": "Recovery: Ensure you have a recovery strategy defined. Machine Learning doesn't have automatic failover. Therefore, you must design a strategy that encompasses the workspace and all its dependencies, such as Key Vault, Azure Storage, and Azure Container Registry.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "bfa8abfb-faee-4eff-aff9-240353e483e2"
},
{
"waf": "Reliability",
"service": "Azure Machine Learning",
"text": "Multi-region model deployment: For enhanced reliability and availability, consider a multi-region deployment environment when possible.",
"description": "A multi-region deployment ensures that your Machine Learning workloads continue to run even if one region experiences an outage. Multi-region deployment improves load distribution across regions, potentially enhancing performance for users located in different geographical areas. For more information, see Failover for business continuity and disaster recovery.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c953c774-517c-48ce-82cb-105448b8a647"
},
{
"waf": "Reliability",
"service": "Azure Machine Learning",
"text": "Model training resiliency: Use checkpointing features supported by Machine Learning including Azure Container for PyTorch, the TensorFlow Estimator class, or the Run object and the FileDataset class that support model checkpointing.",
"description": "Model checkpointing periodically saves the state of your machine learning model during training, so that it can be restored in case of interruption, failure, or termination. For more information, see Boost checkpoint speed and reduce cost with Nebula.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "176382f6-20de-404a-a6c1-1cb00618b101"
},
{
"waf": "Reliability",
"service": "Azure Machine Learning",
"text": "Use the Dedicated virtual machine tier for compute clusters: Use the Dedicated virtual machine tier for compute clusters for batch inferencing to ensure your batch job isn't preempted.",
"description": "Low-priority virtual machines come at a reduced price but are preemptible. Clusters that use the Dedicated virtual machine tier aren't preempted.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "68b3ba0d-ab8c-44b9-b840-601535753fcc"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Availability: Reduce the attack surface of the Machine Learning workspace by restricting access to the workspace to resources within the virtual network.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "53cd2461-3b8d-47ca-ab08-a9b4491d71ae"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Confidentiality: Guard against data exfiltration from the Machine Learning workspace by implementing network isolation. Ensure access to all external resources is explicitly approved and access to all other external resources isn't permitted.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "bad5ff5c-bdeb-4648-b667-1ea0a76266dc"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Implement access controls that authenticate and authorize the Machine Learning workspace for external resources based on the least privilege principle.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "dad6ac87-fd6d-44a4-9882-6d51b37bc564"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Implement use case segregation for Machine Learning workspaces by setting up workspaces based on specific use cases or projects. This approach adheres to the principle of least privilege by ensuring that workspaces are only accessible to individuals that require access to data and experimentation assets for the use case or project.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "18119160-8531-45fb-b169-3e5488b9bd30"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Regulate access to foundational models. Ensure only approved registries have access to models in the model registry.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "ad0a3245-9a51-46d2-81e0-1fa77b288902"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Regulate access to approved container registries. Ensure Machine Learning compute can only access approved registries.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "20487ff0-e5c9-436d-939c-35c856dd64aa"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Regulate the Python packages that can be run on Machine Learning compute. Regulating the Python packages ensures only trusted packages are run.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "a6718d1d-a5e1-4064-a501-7068066d74ba"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Require code used for training in Machine Learning compute environments to be signed. Requiring code signing ensures that the code running is from a trusted source and hasn't been tampered with.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "69440a0f-3fab-4ea2-95b1-ba0ec1c637fc"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Confidentiality: Adhere to the principle of least privilege for role-based access control (RBAC) to the Machine Learning workspace and related resources, such as the workspace storage account, to ensure individuals have only the necessary permissions for their role, thereby minimizing potential security risks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "3fff9526-ef3a-487b-b89e-cb04d344c691"
},
{
"waf": "security",
"service": "Azure Machine Learning",
"text": "Integrity: Establish trust and verified access by implementing encryption for data at rest and data in transit.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "99910102-9fb9-4526-ad60-f0ef309b0230"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Security baseline: To enhance the security and compliance of your Machine Learning Service, apply the Azure security baseline for Machine Learning.",
"description": "The security baseline provides tailored guidance on crucial security aspects such as network security, identity management, data protection, and privileged access. For optimal security, use Microsoft Defender for Cloud to monitor these aspects.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "255aca7d-7c4e-4b83-a0d8-aee85f7c2695"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Managed virtual network isolation: Configure managed virtual network isolation for Machine Learning. When you enable managed virtual network isolation, a managed virtual network is created for the workspace. Managed compute resources you create for the workspace automatically use this managed virtual network. If you can't implement managed virtual network isolation, then you must follow the network topology recommendations to separate compute into a dedicated subnet away from the rest of the resources in the solution, including the private endpoints for workspace resources.",
"description": "Managed virtual network isolation enhances security by isolating your workspace from other networks, reducing the risk of unauthorized access. In a scenario in which a breach occurs in another network within your organization, the isolated network of your Machine Learning workspace remains unaffected, protecting your machine learning workloads.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "afb9783e-67e0-4aca-9f01-0299630c34f0"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Machine Learning network isolation: Configure a private endpoint for your Machine Learning workspace and connect to the workspace over that private endpoint.",
"description": "Machine Learning network isolation enhances security by ensuring that access to your workspace is secure and controlled. With a private endpoint configured for your workspace, you can then limit access to your workspace to only occur over the private IP addresses.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a4cde3d0-7ea2-40b0-b2a8-b047c132dab2"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Allow only approved outbound access: Configure the outbound mode on the Machine Learning workspace managed outbound access to `Allow only approved outbound` to minimize the risk of data exfiltration. Configure private endpoints, service tags, or fully qualified domain names (FQDNs) for resources that you need to access.",
"description": "This configuration minimizes the risk of data exfiltration, improving data security. With this configuration enabled, a malicious actor who gains access to your system can\u2019t send your data to an unapproved external destination.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6b50845b-0ab2-416a-bbd9-2b4295f8ffcc"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Virtual network isolation for dependent services: Configure dependent services, such as Storage, Key Vault, and Container Registry with private endpoints and disable public access.",
"description": "Network isolation bolsters security by restricting access to Azure platform as a service (PaaS) solutions to private IP addresses only.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f2bbde49-82c0-4b92-b593-5b66537909de"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Managed identity: Use managed identities for authentication between Machine Learning and other services.",
"description": "Managed identities improve security by eliminating the need to store credentials and manually manage and rotate service principals.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "75bc1a96-b2a0-449e-b0e5-93c8a658a39d"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Disable local authentication: Disable local authentication for Machine Learning compute clusters and instances.",
"description": "Disabling local authentication increases the security of your Machine Learning compute and provides centralized control and management of identities and resource credentials.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f4b8cd6c-b939-4cd6-a88f-cb56c5f1958f"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Disable the public SSH port: Ensure the public Secure Shell (SSH) port is closed on the Machine Learning compute cluster by setting `remoteLoginPortPublicAccess` to `Disabled`. Apply a similar configuration if you use a different compute.",
"description": "Disabling SSH access helps prevent unauthorized individuals from gaining access and potentially causing harm to your system and protects you against brute force attacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "10b9366c-cd35-439f-ac46-68b330714d4d"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Don't provision public IP addresses for Machine Learning compute: Set enableNodePublicIp to `false` when provisioning Machine Learning compute clusters or compute instances. Apply a similar configuration if you use a different compute.",
"description": "Refrain from provisioning public IP addresses to enhance security by limiting the potential for unauthorized access to your compute instance or clusters.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "aa25efe6-19ad-455e-8bae-886c75a8092b"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Get the latest operating system image: Recreate compute instances to get the latest operating system image.",
"description": "Using the latest images ensures you're maintaining a consistent, stable, and secure environment, including ensuring you have the latest security patches.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "97fb061c-e8f2-49ae-9932-bc3b16cfd9e5"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Strict Machine Learning workspace access controls: Use Microsoft Entra ID groups to manage workspace access and adhere to the principle of least privilege for RBAC.",
"description": "Strict workspace access controls enhance security by ensuring that individuals have only the necessary permissions for their role. A data scientist, for instance, might have access to run experiments but not to modify security settings, minimizing potential security risks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "07d3c478-039d-4654-9e75-44712f822a98"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Restrict model catalog deployments: Restrict model deployments to specific registries.",
"description": "Restricting the deployments from the model catalog to specific registries ensures you only deploy models to approved registries. This approach helps regulate access to the open-source foundational models.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ce858034-a1e7-475c-82df-73878cfb2b42"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Encrypt data at rest: Consider using customer-managed keys with Machine Learning.",
"description": "Encrypting data at rest enhances data security by ensuring that sensitive data is encrypted by using keys directly managed by you. If you have a regulatory requirement to manage your own encryption keys, use this feature to comply with that requirement.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bf8d8030-a273-4136-b91b-3e926b3265b1"
},
{
"waf": "Security",
"service": "Azure Machine Learning",
"text": "Minimize the risk of data exfiltration: Implement data exfiltration prevention. For example, create a service endpoint policy to filter egress virtual network traffic and permit data exfiltration only to specific Azure Storage accounts.",
"description": "Minimize the risk of data exfiltration by limiting inbound and outbound requirements.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "5842dc88-8f4b-4f34-9cba-9a3ecbd083f7"
},
{
"waf": "cost",
"service": "Azure Machine Learning",
"text": "Usage optimization: Choose the appropriate resources to ensure that they align with your workload requirements. For example, choose between CPUs or GPUs, various SKUs, or low versus regular-priority VMs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "ac00077c-9c99-40f8-8b08-9938b9ab6445"
},
{
"waf": "cost",
"service": "Azure Machine Learning",
"text": "Usage optimization: Ensure compute resources that aren't being used are scaled down or shut down when idle to reduce waste.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "42466537-fe74-483d-94b7-3525c15f3cf8"
},
{
"waf": "cost",
"service": "Azure Machine Learning",
"text": "Usage optimization: Apply policies and configure quotas to comply with the design's upper and lower limits.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "66c94617-9ee4-4b81-be7a-ef5dbd521fc6"
},
{
"waf": "cost",
"service": "Azure Machine Learning",
"text": "Usage optimization: Test parallelizing training workloads to determine if training requirements can be met on lower cost SKUs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "feac1256-41f0-435e-8d6c-c66c264deb5b"
},
{
"waf": "cost",
"service": "Azure Machine Learning",
"text": "Rate optimization: Purchase Azure Reserved Virtual Machine Instances if you have a good estimate of usage over the next one to three years.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "f846a556-0f24-45ba-a2e2-43855e78ca2d"
},
{
"waf": "cost",
"service": "Azure Machine Learning",
"text": "Monitor and optimize: Monitor your resource usage such as CPU and GPU usage when training models. If the resources aren't being fully used, modify your code to better use resources or scale down to smaller or cheaper VM sizes.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "2905301e-e22b-4203-8fa0-6c7d740dd465"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Optimize compute resources: Optimize your compute resources based on the requirements of your workload. Choose the SKU that best suits your workload:
- General Purpose \u2013 Balanced CPU to memory ratio, good for all purposes.
- Compute Optimized \u2013 High CPU to memory ratio, good for math-heavy computations.
- Memory Optimized \u2013 High memory to CPU, good for in-memory computations or database applications.
- M Series \u2013 Very large machines that have huge amounts of memory and CPU.
- GPU \u2013 Better for models with a high number of variables that can benefit from higher parallelism and specialized core instructions. Typical applications are deep learning, image or video processing, scientific simulations, data mining, and taking advantage of GPU development frameworks. Test with multiple families and document the results as your baseline. As your model and data evolve, the most adequate compute resource might change. Monitor execution times and reevaluate as needed.",
"description": "Selecting the right compute is critical as it directly impacts the cost of running your workload. Choosing a GPU or a high-performance SKU without proper usage can lead to wasteful spending, while choosing undersized compute can lead to prohibitively long training times and performance problems.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "1d3deb66-a7cf-4c9e-8071-3b3e3d60c478"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Optimize compute scaling: Configure your compute clusters for autoscaling to ensure you only use what you need.For training clusters, set the minimum number of nodes to 0 and configure the amount of time the node is idle to an appropriate time. For less iterative experimentation, reduce the time to save costs. For more iterative experimentation, use a higher time to prevent paying for scaling up or down after each change.",
"description": "Configure autoscaling for compute clusters to scale down when their usage is low. Set the minimum number of nodes to 0 for training clusters to scale down to 0 when not in use.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f96f9439-c6c3-4bd1-a6ef-912307025375"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Set training termination policies: Set early termination policies to limit the duration of training runs or terminate them early.",
"description": "Setting termination policies can help you save costs by stopping nonperforming runs early.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d02f1c6b-b32d-4027-8c23-dad429d06570"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Use low-priority virtual machines for batch workloads: Consider using low-priority virtual machines for batch workloads that aren't time-sensitive and in which interruptions are recoverable.",
"description": "Low-priority virtual machines enable a large amount of compute power to be used for a low cost. They take advantage of surplus capacity in Azure.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8fff224b-1d7f-4116-8624-e92ed5afc67a"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Enable idle shutdown for compute instances: Enable idle shutdown for compute instances or schedule a start and stop time if usage time is known.",
"description": "By default, compute instances are available to you, accruing cost. Configuring compute instances to shut down when idle or configuring a schedule for them saves cost when they aren't in use.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "af8c167c-be44-45c2-bb57-a1bc383a8abd"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Parallelize training workloads: Consider parallelizing training workloads. Test running them with the help of the parallel components in Machine Learning.",
"description": "Parallel workloads can be run on multiple smaller instances, potentially yielding cost savings.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2c88452f-1c05-46c4-a541-54acbfc708b2"
},
{
"waf": "Cost",
"service": "Azure Machine Learning",
"text": "Azure Reserved VM Instances: Purchase Azure Reserved VM Instances if you have a good estimate of usage over the next one to three years. Take advantage of reserved capacity options for services when you have good estimates of usage.",
"description": "Purchase Azure Reserved VM Instances to prepay for virtual machine usage and provide discounts with pay-as-you-go pricing. The discount is automatically applied for virtual machine usage that matches the reservation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bfc81863-3497-4a8d-a16e-aab55f3bae72"
},
{
"waf": "operations",
"service": "Azure Machine Learning",
"text": "Development standards: Take advantage of Machine Learning model catalogs and registries to store, version, and share machine learning assets.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "f5da553a-b026-4714-a3e3-d34ff609f316"
},
{
"waf": "operations",
"service": "Azure Machine Learning",
"text": "Automate for efficiency: Follow good machine learning operations (MLOps) practices. When possible, build end-to-end automated pipelines for data preparation, training, and scoring processes. In development, use scripts instead of notebooks for training models, as scripts are easier to integrate into automated pipelines.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "b796f824-2db6-452c-abf7-38292ba5b5f2"
},
{
"waf": "operations",
"service": "Azure Machine Learning",
"text": "Deploy with confidence: Implement infrastructure as code (IaC) for Machine Learning workspaces, compute clusters, compute instances, and other deployment environments.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "47a26596-5524-4dd6-8fdd-fcc6ccbc9601"
},
{
"waf": "operations",
"service": "Azure Machine Learning",
"text": "Observability: Monitor the performance of your deployed models including data drift.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "528dda34-794b-4acb-bd29-67d14b1cac5b"
},
{
"waf": "operations",
"service": "Azure Machine Learning",
"text": "Observability: If your models are deployed to online endpoints, enable Application Insights to monitor online endpoints and deployments. Monitor training infrastructure to ensure you're meeting your baseline requirements.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "b5a47cd0-f65e-44bb-8001-66f68f8e0687"
},
{
"waf": "operations",
"service": "Azure Machine Learning",
"text": "Simplicity: Use curated environments optimized for Machine Learning, when available.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "d0afa393-bcfd-4e72-8cd2-304a988a6d0a"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Minimize Machine Learning workspace instances: Minimize the number of workspaces, when possible, to reduce maintenance.",
"description": "Limiting the number of workspaces reduces the maintenance effort and cost of operation. For requirements, such as security, you might need multiple separate workspaces. Minimize the number of workspaces when possible.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "89ba4602-237d-4482-ba98-bf25c262c8e8"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Take advantage of model catalogs and registries: Take advantage of Machine Learning model catalogs and registries to store, version, and share machine learning assets.Use Machine Learning model catalogs to help you implement A/B testing and deployment of models.",
"description": "Use Machine Learning model registries to store and version your machine learning models to track changes and maintain lineage with the job and datasets used for training. With Machine Learning model catalogs, your data science teams can discover, evaluate, and fine tune pretrained foundational machine learning models. Storing versioned models in Machine Learning model registries supports deployment strategies such as A/B releases, canary releases, and rollbacks.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "53e64198-939d-4710-bb60-78240890442a"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Monitor model performance: Monitor the performance of your deployed models, and detect data drift on datasets.",
"description": "Monitoring deployed models ensures your models meet the performance requirements.Monitoring data drift helps you detect changes in the input data that can lead to a decline in your model\u2019s performance. Managing data drift helps you ensure that your model provides accurate results over time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2ec618e1-844b-4b7f-bc41-be65bdf537d0"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Monitor infrastructure: If your models are deployed to online endpoints, enable Application Insights to monitor online endpoints and deployments.Monitor training infrastructure to ensure you're meeting your baseline requirements.Ensure you're collecting resource logs for Machine Learning.",
"description": "Monitoring endpoints gives you visibility into metrics such as request latency and requests per minute. You can compare your performance versus your baseline and use this information to make changes to compute resources accordingly. Monitoring metrics such as network bytes can alert you if you're approaching quota limits and prevent throttling.Likewise, monitoring your training environment provides you with the information to make changes to your training environment. Use that information to decide to scale in or out, scale up or down with different performant SKUs, or choose between CPUs or GPUs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "dce862d1-7b48-478a-bc39-39faa56f2531"
},
{
"waf": "Operations",
"service": "Azure Machine Learning",
"text": "Curate model training environments: Use curated environments optimized for Machine Learning, when available.",
"description": "Curated environments are pre-created environments provided by Machine Learning that speed up deployment time and reduce deployment and training latency. Using curated environments improves training and deployment success rates and avoids unnecessary image builds. Curated environments, such as Azure Container for PyTorch, can also be optimized for training large models on Machine Learning.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4addefe4-a8b2-4b05-8483-c8a96ada0ee0"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Performance targets: Determine the acceptable training time and retrain frequency for your model. Setting a clear target for training time, along with testing, helps you determine the compute resources, CPU versus GPU, and CPU SKUs required to meet the training time goal.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "2b36442a-e682-4d91-9dac-75d02e6e90bf"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Performance targets: Define the acceptable performance targets for your deployed models including response time, requests per second, error rate, and uptime. Performance targets act as a benchmark for your deployed model's efficiency. Targets can help you make CPU versus GPU determinations, CPU SKU choices, and scaling requirements.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "224fccfe-921b-4854-a01c-429988f76fd0"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Meet capacity requirements: Choose the right compute resources for model training.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "ff8ee1a1-242e-4f07-b027-41219ea774d8"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Meet capacity requirements: Choose the right compute resources for model deployments.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "31f9cf51-136d-4c41-93d3-59f89c253259"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Meet capacity requirements: Choose deployment environments with autoscaling capabilities to add and remove capacity as demand fluctuates.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "def7165b-3e46-4bab-b1a1-a24681c4cacc"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Achieve and sustain performance: Continuously monitor the performance of your deployed models, review results, and take appropriate actions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "97507b95-fd6d-4784-a678-0327e5427f31"
},
{
"waf": "performance",
"service": "Azure Machine Learning",
"text": "Achieve and sustain performance: Continuously monitor the performance of your infrastructure of deployed models, review results, and take appropriate actions. Monitor training infrastructure to ensure you're meeting your requirements for training time.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-machine-learning.md",
+ "guid": "d5d78692-ab7b-45d0-8c91-93b4f6329f41"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Select appropriate compute services for model training: Consider Machine Learning compute clusters over compute instances for model training if you require autoscaling.Optimize your compute resources based on the training requirements. First choose between CPUs and GPUs. Default to CPUs, but consider GPUs for workloads such as deep learning, image or video processing, or large amounts of data. Next, choose the image SKU that best suits your workload.Use testing to choose the compute option that optimizes cost against training time when determining your baseline.",
"description": "Selecting the right compute is critical as it directly impacts the training time. Choosing the right SKU and CPU versus GPU ensures your model training can meet your requirements and performance targets. Choosing a low-performance SKU that's overused can lead to prohibitively long training times and performance problems. Compute clusters provide the ability to improve performance by scaling out workloads that support horizontal scaling. This method provides flexibility for handling workloads with different demands and lets you add or remove machines as needed.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8c75d7e5-34e6-4a55-85a1-db4c26eb15f2"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Model deployment environment scaling: Use the deployment environment\u2019s autoscale capabilities. For AKS deployment environments, use the cluster autoscaler to scale to meet demand. For online endpoints, automatically scale via integration with the Azure Monitor autoscale feature.",
"description": "Autoscaling adjusts the number of instances of the deployed model to match demand.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bc3729bc-45fd-4ceb-9b5d-2135464eddfb"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Monitor model performance: Monitor the performance of your deployed models.",
"description": "Tracking the performance of models in production alerts you to potential problems such as data drift, prediction drift, data quality, and feature attribution drift.Monitoring data drift helps you detect changes in the input data that can lead to a decline in your model\u2019s performance. Managing data drift helps you ensure that your model provides accurate results over time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ce910d41-2b8b-4685-9e78-5dc683d84bc1"
},
{
"waf": "Performance",
"service": "Azure Machine Learning",
"text": "Monitor infrastructure: Monitor online endpoints and integrate with Monitor to track and monitor the appropriate metrics and logs. Enable Application Insights when creating online deployments.Monitor training infrastructure and review resource usage such as memory and CPU or GPU usage when training models to ensure you're meeting your baseline requirements.",
"description": "Monitoring endpoints gives you visibility into metrics such as request latency and requests per minute. You can compare your performance versus your baseline and use this information to make changes to compute resources accordingly. Monitoring metrics such as network bytes can alert you if you're approaching quota limits and prevent throttling.Likewise, monitoring your training environment provides you with the information to make changes to your training environment. Use that information to decide to scale in or out, scale up or down with different performant SKUs, or choose between CPUs or GPUs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ff1f7368-9980-4cf5-bfe0-31ebae0ebc7e"
},
{
"waf": "reliability",
"service": "Azure Openai",
"text": "Resiliency: Choose the appropriate deployment option of either pay-as-you-go or provisioned throughput based on your use case. Because reserved capacity increases resiliency, choose provisioned throughput for production solutions. The pay-as-you-go approach is ideal for dev/test environments.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "9d3622f2-e644-41df-8909-d30ac168fd6e"
},
{
"waf": "reliability",
"service": "Azure Openai",
"text": "Redundancy: Add the appropriate gateways in front of your Azure OpenAI deployments. The gateway must have the capability to withstand transient failures like throttling and also route to multiple Azure OpenAI instances. Consider routing to instances in different regions to build regional redundancy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "bb8e46b8-026e-44ed-9218-cc86ac5f82dc"
},
{
"waf": "reliability",
"service": "Azure Openai",
"text": "Resiliency: If you're using provisioned throughput, consider also deploying a pay-as-you-go instance to handle overflow. You can route calls to the pay-as-you-go instance via your gateway when your provisioned throughput model is throttled. You can also use monitoring to predict when the model will be throttled and preemptively route calls to the pay-as-you-go instance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "9ba430a3-7386-4b44-8e19-26470b015bb8"
},
{
"waf": "reliability",
"service": "Azure Openai",
"text": "Resiliency: Monitor capacity usage to ensure you aren't exceeding throughput limits. Regularly review capacity usage to achieve more accurate forecasting and help prevent service interruptions due to capacity constraints.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "fca027d7-7acf-497a-b915-52872ab724a4"
},
{
"waf": "reliability",
"service": "Azure Openai",
"text": "Resiliency: Follow the guidance for large data files and import the data from an Azure blob store. Large files, 100 MB or larger, can become unstable when uploaded through multipart forms because the requests are atomic and can't be retried or resumed.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "544e8c7d-450b-4e55-aaec-1a75f667db90"
},
{
"waf": "reliability",
"service": "Azure Openai",
"text": "Recovery: Define a recovery strategy that includes a recovery plan for models that are fine-tuned and for training data uploaded to Azure OpenAI. Because Azure OpenAI doesn't have automatic failover, you must design a strategy that encompasses the entire service and all dependencies, such as storage that contains training data.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "8fe970c3-76a2-4c9f-b198-0e6106b17f96"
},
{
"waf": "Reliability",
"service": "Azure Openai",
"text": "Monitor rate limits for pay-as-you-go: If you're using the pay-as-you-go approach, manage rate limits for your model deployments and monitor usage of tokens per minute (TPM) and requests per minute (RPM).",
"description": "This important throughput information provides information required to ensure that you assign enough TPM from your quota to meet the demand for your deployments.Assigning enough quota prevents throttling of calls to your deployed models.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b1f8cbf7-e5d5-47cd-b8c6-dcece4ef10bf"
},
{
"waf": "Reliability",
"service": "Azure Openai",
"text": "Monitor provision-managed utilization for provisioned throughput: If you're using the provisioned throughput payment model, monitor provision-managed utilization.",
"description": "It's important to monitor provision-managed utilization to ensure it doesn't exceed 100%, to prevent throttling of calls to your deployed models.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a7585b62-bb9f-4b4f-8491-13e9728a0865"
},
{
"waf": "Reliability",
"service": "Azure Openai",
"text": "Tune content filters: Tune content filters to minimize false positives from overly aggressive filters.",
"description": "Content filters block prompts or completions based on an opaque risk analysis. Ensure content filters are tuned to allow expected usage for your workload.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "3b329988-97cb-40c6-b139-17089897a9a1"
},
{
"waf": "security",
"service": "Azure Openai",
"text": "Protect confidentiality: If you upload training data to Azure OpenAI, use customer-managed keys for data encryption, implement a key-rotation strategy, and delete training, validation, and training results data. If you use an external data store for training data, follow security best practices for that store. For example, for Azure Blob Storage, use customer-managed keys for encryption and implement a key-rotation strategy. Use managed identity-based access, implement a network perimeter by using private endpoints, and enable access logs.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "18050528-bca5-43c3-99c5-4e7035bd9496"
},
{
"waf": "security",
"service": "Azure Openai",
"text": "Protect confidentiality: Guard against data exfiltration by limiting the outbound URLs that Azure OpenAI resources can access.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "da9ce235-e104-401e-b094-59bf983cfa40"
},
{
"waf": "security",
"service": "Azure Openai",
"text": "Protect integrity: Implement access controls to authenticate and authorize user access to the system by using the least-privilege principle and by using individual identities instead of keys.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "f47bab52-1aa2-45c5-b250-b3716716367e"
},
{
"waf": "security",
"service": "Azure Openai",
"text": "Protect integrity: Implement jailbreak risk detection to safeguard your language model deployments against prompt injection attacks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "41a12d3c-56b5-4f10-9eea-303af5adcdb6"
},
{
"waf": "security",
"service": "Azure Openai",
"text": "Protect availability: Use security controls to prevent attacks that might exhaust model usage quotas. You might configure controls to isolate the service on a network. If the service must be accessible from the internet, consider using a gateway to block suspected abuse by using routing or throttling.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "a55c7008-6341-44e8-8b8c-089bc61dd193"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Secure keys: If your architecture requires Azure OpenAI key-based authentication, store those keys in Azure Key Vault, not in application code.",
"description": "Separating secrets from code by storing them in Key Vault reduces the chance of leaking secrets. Separation also facilitates central management of secrets, easing responsibilities like key rotation.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8dc95921-66ec-40fa-9e0c-2bcd0de338bc"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Restrict access: Disable public access to Azure OpenAI unless your workload requires it. Create private endpoints if you're connecting from consumers in an Azure virtual network.",
"description": "Controlling access to Azure OpenAI helps prevent attacks from unauthorized users. Using private endpoints ensures network traffic remains private between the application and the platform.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "fb4efdfc-4ccf-4be0-8652-39f3ac82a3a3"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Microsoft Entra ID: Use Microsoft Entra ID for authentication and to authorize access to Azure OpenAI by using role-based access control (RBAC). Disable local authentication in Azure AI Services and set `disableLocalAuth` to `true`. Grant identities that perform completions or image generation the Cognitive Services OpenAI User role. Grant model automation pipelines and ad-hoc data-science access a role like Cognitive Services OpenAI Contributor.",
"description": "Using Microsoft Entra ID centralizes the identity-management component and eliminates the use of API keys. Using RBAC with Microsoft Entra ID ensures that users or groups have exactly the permissions they need to do their job. This kind of fine-grained access control isn't possible with Azure OpenAI API keys.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "a391f8f5-e04e-4285-b756-4e9de162bc10"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Use customer-managed keys: Use customer-managed keys for fine-tuned models and training data that's uploaded to Azure OpenAI.",
"description": "Using customer-managed keys gives you greater flexibility to create, rotate, disable, and revoke access controls.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "f73c5ae9-9299-48ca-969c-6ac872096e3d"
},
{
"waf": "Security",
"service": "Azure Openai",
"text": "Protect against jailbreak attacks: Use Azure AI Content Safety Studio to detect jailbreak risks.",
"description": "Detect jailbreak attempts to identify and block prompts that try to bypass the safety mechanisms of your Azure OpenAI deployments.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "47f53122-cc5c-4172-901a-cd3cf6d5085f"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Cost management: Develop your cost model, considering prompt sizes. Understanding prompt input and response sizes and how text translates into tokens helps you create a viable cost model.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "fb012775-b93d-442c-916c-81ca72d7bc91"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Usage optimization: Start with pay-as-you-go pricing for Azure OpenAI until your token usage is predictable.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "48e39691-9809-4ab1-86fb-857d47e4163e"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Rate optimization: When your token usage is sufficiently high and predictable over a period of time, use the provisioned throughput pricing model for better cost optimization.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "8c51bdd3-d4cb-4742-a323-89917c6ac87e"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Usage optimization: Consider model pricing and capabilities when you choose models. Start with less-costly models for less-complex tasks like text generation or completion tasks. For more complex tasks like language translation or content understanding, consider using more advanced models. Consider different model capabilities and maximum token usage limits when you choose a model that's appropriate for use cases like text embedding, image generation, or transcription scenarios. By carefully selecting the model that best fits your needs, you can optimize costs while still achieving the desired application performance.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "e65920ea-b7aa-4eda-bfc8-36746c74933a"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Usage optimization: Use the token-limiting constraints offered by the API calls, such as `max_tokens` and `n`, which indicate the number of completions to generate.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "d310e9bc-ae3d-4eff-90a1-8356d72a1376"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Usage optimization: Maximize Azure OpenAI price breakpoints, for example, fine-tuning and model breakpoints like image generation. Because fine-tuning is charged per hour, use as much time as you have available per hour to improve fine-tuning results while avoiding slipping into the next billing period. Similarly, the cost for generating 100 images is the same as the cost for 1 image. Maximize price breakpoints to your advantage.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "73965cc9-1763-43c1-82aa-549b3ea75f4e"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Usage optimization: Remove unused fine-tuned models when they're no longer being consumed to avoid incurring an ongoing hosting fee.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "a1abac7c-cce9-4443-97e8-2faf150559d4"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Adjust usage: Optimize prompt input and response length. Longer prompts raise costs by consuming more tokens. However, prompts that are missing sufficient context don't help the models yield good results. Create concise prompts that provide enough context for the model to generate a useful response. Also ensure that you optimize the limit of the response length.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "9e2fb33a-0e01-43c6-9de0-2409778ad08d"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Cost efficiency: Batch requests where possible to minimize the per-call overhead, which can reduce overall costs. Ensure that you optimize batch size.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "3100afcf-2db1-4f14-901c-bd5e33bc29ff"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Cost efficiency: Because models have different fine-tuning costs, consider these costs if your solution requires fine-tuning.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "15ea2d47-0659-4906-a1ec-d26a00aa4237"
},
{
"waf": "cost",
"service": "Azure Openai",
"text": "Monitor and optimize: Set up a cost-tracking system that monitors model usage. Use that information to help inform model choices and prompt sizes.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "6ebaa528-2e34-4366-b8cb-6bc3318ec624"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Design client code to set limits: Your custom clients should use the limit features of the Azure OpenAI completions API, such as maximum limit on the number of tokens per model (`max_tokens`) or number of completions to generation (`n`). Setting limits ensures that the server doesn't produce more than the client needs.",
"description": "Using API features to restrict usage aligns service consumption with client needs. This saves money by ensuring the model doesn't generate an overly long response that consumes more tokens than necessary.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "550bf6a6-0fd6-4f5e-a447-fefda36067bc"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Monitor pay-as-you-go usage: If you use the pay-as-you-go approach, monitor usage of TPM and RPM. Use that information to inform architectural design decisions such as what models to use, and to optimize prompt sizes.",
"description": "Continuously monitoring TPM and RPM gives you relevant metrics to optimize the cost of Azure OpenAI models. You can couple this monitoring with model features and model pricing to optimize model usage. You can also use this monitoring to optimize prompt sizes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0d6d5b07-c475-408c-8f6a-fa8c92b96957"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Monitor provisioned throughput usage: If you use provisioned throughput, monitor provision-managed utilization to ensure you're not underutilizing the provisioned throughput you purchased.",
"description": "Continuously monitoring provision-managed utilization gives you the information you need to understand if you're underutilizing your provisioned throughput.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "25a3468e-92d0-4aa3-bb5f-c1214eee958b"
},
{
"waf": "Cost",
"service": "Azure Openai",
"text": "Cost management: Use cost management features with OpenAI to monitor costs, set budgets to manage costs, and create alerts to notify stakeholders of risks or anomalies.",
"description": "Cost monitoring, setting budgets, and setting alerts provides governance with the appropriate accountability processes.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0c5365cb-838b-4dfb-9608-0bcfabe98460"
},
{
"waf": "operations",
"service": "Azure Openai",
"text": "Azure DevOps culture: Ensure deployment of Azure OpenAI instances across your various environments, such as development, test, and production. Ensure that you have environments to support continuous learning and experimentation throughout the development cycle.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "be37d987-ea7b-4f82-b63a-49384a95b30b"
},
{
"waf": "operations",
"service": "Azure Openai",
"text": "Observability: Monitor, aggregate, and visualize appropriate metrics.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "f9637ddc-7d73-4efd-86f1-75d9d122f943"
},
{
"waf": "operations",
"service": "Azure Openai",
"text": "Observability: If Azure OpenAI diagnostics are insufficient for your needs, consider using a gateway like Azure API Management in front of Azure OpenAI to log both incoming prompts and outgoing responses where permitted. This information can help you understand the effectiveness of the model for incoming prompts.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "eff14512-adda-441e-a2af-7a6589c330d5"
},
{
"waf": "operations",
"service": "Azure Openai",
"text": "Deploy with confidence: Use infrastructure as code (IaC) to deploy Azure OpenAI, model deployments, and other infrastructure required for fine-tuning models.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "79634884-f1b8-4cbb-8583-e0ca1f41dd4d"
},
{
"waf": "operations",
"service": "Azure Openai",
"text": "Deploy with confidence: Follow large language model operations (LLMOps) practices to operationalize the management of your Azure OpenAI LLMs, including deployment, fine-tuning, and prompt engineering.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "8863b916-2b11-4d2f-a468-110900f06f11"
},
{
"waf": "operations",
"service": "Azure Openai",
"text": "Automate for efficiency: If you use key-based authentication, implement an automated key-rotation strategy.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "406ddc6b-7ccc-4262-8c11-e00714f74590"
},
{
"waf": "Operations",
"service": "Azure Openai",
"text": "Enable and configure Azure Diagnostics: Enable and configure Diagnostics for the Azure OpenAI Service.",
"description": "Diagnostics collects and analyzes metrics and logs, helping you monitor the availability, performance, and operation of Azure OpenAI.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c5ac80e5-9b95-4205-a5c7-d8d8702ed00b"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Estimate consumers' elasticity demands. Identify high-priority traffic that requires synchronous responses and low-priority traffic that can be asynchronous and batched.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "c8f369bf-bb71-4c71-bec6-a9806f071d66"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Benchmark token consumption requirements based on estimated demands from consumers. Consider using the Azure OpenAI benchmarking tool to help you validate the throughput if you're using provisioned throughput unit (PTU) deployments.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "1238d615-b520-4de2-a8db-5da3156ea687"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Use provisioned throughput for production workloads. Provisioned throughput offers dedicated memory and compute, reserved capacity, and consistent maximum latency for the specified model version. The pay-as-you-go offering can suffer from noisy neighbor problems like increased latency and throttling in regions under heavy use. Also, the pay-as-you-go approach doesn't offer guaranteed capacity.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "2b52edf1-c7bc-4108-90c0-d3df81bff610"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Add the appropriate gateways in front of your Azure OpenAI deployments. Ensure that the gateway can route to multiple instances in the same or different regions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "39601e61-c985-4ac6-9269-9f7edff4ca1e"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Allocate PTUs to cover your predicted usage, and complement these PTUs with a TPM deployment to handle elasticity above that limit. This approach combines base throughput with elastic throughput for efficiency. Like other considerations, this approach requires a custom gateway implementation to route requests to the TPM deployment when the PTU limits are reached.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "2153dc0b-41f7-4470-abd1-c6ac7522537c"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Send high-priority requests synchronously. Queue low-priority requests and send them through in batches when demand is low.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "4d0ffbf1-3c3b-4ea3-8a58-05fac3a22e33"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Capacity: Select a model that aligns with your performance requirements, considering the tradeoff between speed and output complexity. Model performance can vary significantly based on the chosen model type. Models designed for speed offer faster response times, which can be beneficial for applications that require quick interactions. Conversely, more sophisticated models might deliver higher-quality outputs at the expense of increased response time.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "6fd43871-d247-42ea-b468-dcf25d2d4e68"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Achieve performance: For applications like chatbots or conversational interfaces, consider implementing streaming. Streaming can enhance the perceived performance of Azure OpenAI applications by delivering responses to users in an incremental manner, improving the user experience.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "3bbf1b68-e6d6-475b-9406-9271cdee6454"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Achieve performance: Determine when to use fine-tuning before you commit to fine-tuning. Although there are good use cases for fine-tuning, such as when the information needed to steer the model is too long or complex to fit into the prompt, make sure that prompt engineering and retrieval-augmented generation (RAG) approaches don't work or are demonstrably more expensive.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "50fa9db0-6a80-446b-8eca-32b51efb14b5"
},
{
"waf": "performance",
"service": "Azure Openai",
"text": "Achieve performance: Consider using dedicated model deployments per consumer group to provide per-model usage isolation that can help prevent noisy neighbors between your consumer groups.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/azure-openai.md",
+ "guid": "21a63a3a-9e5d-4a7d-9825-636f4012fbcf"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Review Virtual Machines quotas and limits that might pose design restrictions. VMs have specific limits and quotas, which vary based on the type of VM or the region. There might be subscription restrictions, such as the number of VMs per subscription or the number of cores per VM. If other workloads share your subscription, then your ability to consume data might be reduced.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "361c5452-9715-4191-b073-b0331eb90559"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Conduct a failure mode analysis to minimize points of failure by analyzing VM interactions with the network and storage components. Choose configurations like ephemeral operating system (OS) disks to localize disk access and avoid network hops. Add a load balancer to enhance self-preservation by distributing network traffic across multiple VMs, which improves availability and reliability.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "957b7b80-d049-454d-b65b-7bbd967b141b"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Calculate your composite service-level objectives (SLOs) based on Azure service-level agreements (SLAs). Ensure that your SLO isn't higher than the Azure SLAs to avoid unrealistic expectations and potential issues.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "0962db49-c5c0-45b4-9064-c5da949a67b3"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Create state isolation. Workload data should be on a separate data disk to prevent interference with the OS disk. If a VM fails, you can create a new OS disk with the same data disk, which ensures resilience and fault isolation. For more information, see Ephemeral OS disks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "b2ecdce9-fd21-4784-beb8-6084a166aa12"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Make VMs and their dependencies redundant across zones. If a VM fails, the workload should continue to function because of redundancy. Include dependencies in your redundancy choices. For example, use the built-in redundancy options that are available with disks. Use zone-redundant IPs to ensure data availability and high uptime.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "5aaae165-879c-4ce7-8661-c4a05b0e5074"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Be ready to scale up and scale out to prevent service level degradation and to avoid failures. Virtual Machine Scale Sets have autoscale capabilities that create new instances as required and distribute the load across multiple VMs and availability zones.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "553a3f24-22d8-4c4c-a26a-84063663c613"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Explore the automatic recovery options. Azure supports health degradation monitoring and self-healing features for VMs. For example, scale sets provide automatic instance repairs. In more advanced scenarios, self-healing involves using Azure Site Recovery, having a passive standby to fail over to, or redeploying from infrastructure as code (IaC). The method that you choose should align with the business requirements and your organizational operations. For more information, see VM service disruptions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "9a34544a-d391-485c-8373-e191d47e3fb8"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Rightsize the VMs and their dependencies. Understand your VM's expected work to ensure it's not undersized and can handle the maximum load. Have extra capacity to mitigate failures.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "285a5da3-2741-4f96-b58f-d2a48be2d39d"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Create a comprehensive disaster recovery plan. Disaster preparedness involves creating a comprehensive plan and deciding on a technology for recovery.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "dcaadec2-8bc9-43ce-b13d-51aa5c4db90e"
},
{
"waf": "reliability",
"service": "Virtual Machines",
"text": "Run operations with rigor. Reliability design choices must be supported by effective operations based on the principles of monitoring, resiliency testing in production, automated application VM patches and upgrades, and consistency of deployments. For operational guidance, see Operational Excellence.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "eaff9b97-b18a-4ab7-9307-14cf820eeb5a"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Use Virtual Machine Scale Sets in Flexible orchestration mode to deploy VMs.",
"description": "Future-proof your application for scaling and take advantage of the high availability guarantees that spread VMs across fault domains in a region or an availability zone.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2f3edda7-4225-472e-83d0-265c26367213"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(VMs) Implement heath endpoints that emit instance health statuses on VMs. (Scale set) Enable automatic repairs on the scale set by specifying the preferred repair action. Consider setting a time frame during which automatic repairs pause if the VM's state changes.",
"description": "Maintain availability even if an instance is deemed unhealthy. Automatic repairs initiate recovery by replacing the faulty instance. Setting a time window can prevent inadvertent or premature repair operations.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0bc7ac44-c4e0-4192-a423-09571aae23dc"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Enable overprovisioning on scale sets.",
"description": "Overprovisioning reduces deployment times and has a cost benefit because the extra VMs aren't billed.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "c97c1d86-cef5-435b-9312-c8f41b231afe"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Allow Flexible orchestration to spread the VM instances across as many fault domains as possible.",
"description": "This option isolates fault domains. During maintenance periods, when one fault domain is updated, VM instances are available in the other fault domains.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "18b6cb3c-704e-415c-ac33-a04ce8d33982"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(Scale set) Deploy across availability zones on scale sets. Set up at least two instances in each zone. Zone balancing equally spreads the instances across zones.",
"description": "The VM instances are provisioned in physically separate locations within each Azure region that are tolerant to local failures. Keep in mind that, depending on resource availability, there might be an uneven number of instances across zones. Zone balancing supports availability by making sure that, if one zone is down, the other zones have sufficient instances. Two instances in each zone provide a buffer during upgrades.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "cfcbe692-8d95-414c-855a-2af8530bbee7"
},
{
"waf": "Reliability",
"service": "Virtual Machines",
"text": "(VMs) Take advantage of the capacity reservations feature.",
"description": "Capacity is reserved for your use and is available within the scope of the applicable SLAs. You can delete capacity reservations when you no longer need them, and billing is consumption based.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "640c79fd-8a7f-4824-ba96-ca41034d02e8"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Review the security baselines for Linux and Windows VMs and Virtual Machine Scale Sets.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "fe47919b-9d90-4600-8dad-658568ce94d8"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Ensure timely and automated security patching and upgrades. Make sure updates are automatically rolled out and validated by using a well-defined process. Use a solution like Azure Automation to manage OS updates and maintain security compliance by making critical updates.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "51c32087-d5b8-4be6-9006-786bf12bd94b"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Identify the VMs that hold state. Make sure that data is classified according to the sensitivity labels that your organization provided. Protect data by using security controls like appropriate levels of at-rest and in-transit encryption. If you have high sensitivity requirements, consider using high-security controls like double encryption and Azure confidential computing to protect data-in-use.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "a4ceac6a-ac90-4278-9ad9-706194c2d5c9"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Provide segmentation to the VMs and scale sets by setting network boundaries and access controls. Place VMs in resource groups that share the same lifecycle.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "f90aa688-2018-4e02-9fd9-0c7151dee588"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Apply access controls to the identities that try to reach the VMs and also to the VMs that reach other resources. Use Microsoft Entra ID for authentication and authorization needs. Put strong passwords, multifactor authentication, and role-based access control (RBAC) in place for your VMs and their dependencies, like secrets, to permit allowed identities to perform only the operations that are expected of their roles.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "2e452de7-a327-401b-9ad4-19a42e7b3b2a"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Use network controls to restrict ingress and egress traffic. Isolate VMs and scale sets in Azure Virtual Network and define network security groups to filter traffic. Protect against distributed denial of service (DDoS) attacks. Use load balancers and firewall rules to protect against malicious traffic and data exfiltration attacks.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "51bdfe3f-1460-43ac-860d-d5dcaa69a698"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Reduce the attack surface by hardening OS images and removing unused components. Use smaller images and remove binaries that aren't required to run the workload. Tighten the VM configurations by removing features, like default accounts and ports, that you don't need.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "e4779d30-f938-495f-b9a6-bfed5afa8c38"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Protect secrets such as the certificates that you need to protect data in transit. Consider using the Azure Key Vault extension for Windows or Linux that automatically refreshes the certificates stored in a key vault. When it detects a change in the certificates, the extension retrieves and installs the corresponding certificates.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "08be36ad-0190-4740-b002-9adae9be0cca"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Threat detection. Monitor VMs for threats and misconfigurations. Use Defender for Servers to capture VM and OS changes, and maintain an audit trail of access, new accounts, and changes in permissions.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "9a7f628b-002c-4926-b1fc-d4918b451c30"
},
{
"waf": "security",
"service": "Virtual Machines",
"text": "Threat prevention. Protect against malware attacks and malicious actors by implementing security controls like firewalls, antivirus software, and intrusion detection systems. Determine if a Trusted Execution Environment (TEE) is required.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "ad4792c8-903c-4467-a6c8-90c84a49af47"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(Scale set) Assign a managed identity to scale sets. All VMs in the scale set get the same identity through the specified VM profile. (VMs) You can also assign a managed identity to individual VMs when you create them and then add it to a scale set if needed.",
"description": "When VMs communicate with other resources, they cross a trust boundary. Scale sets and VMs should authenticate their identity before communication is allowed. Microsoft Entra ID handles that authentication by using managed identities.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "22995c7f-8fcf-4986-b139-cc1b8e946c03"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(Scale set) Choose VM SKUs with security features. For example, some SKUs support BitLocker encryption, and confidential computing provides encryption of data-in-use. Review the features to understand the limitations.",
"description": "Azure-provided features are based on signals that are captured across many tenants and can protect resources better than custom controls. You can also use policies to enforce those controls.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b298468d-1c65-4c20-986c-6456d2d99665"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs, scale set) Apply organization-recommended tags in the provisioned resources.",
"description": "Tagging is a common way to segment and organize resources and can be crucial during incident management. For more information, see Purpose of naming and tagging.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "b47b917b-bb94-49a9-9c84-a579d9554f18"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs, scale set) Set a security profile with the security features that you want to enable in the VM configuration. For example, when you specify encryption at host in the profile, the data that's stored on the VM host is encrypted at rest and flows are encrypted to the storage service.",
"description": "The features in the security profile are automatically enabled when the VM is created. For more information, see Azure security baseline for Virtual Machine Scale Sets.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "4529997c-b38f-402e-9bbf-8db5717a74d4"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs) Choose secure networking options for your VM's network profile. Don't directly associate public IP addresses to your VMs and don't enable IP forwarding. Ensure that all virtual network interfaces have an associated network security group.",
"description": "You can set segmentation controls in the networking profile. Attackers scan public IP addresses, which makes VMs vulnerable to threats.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "312f1ab0-131f-4606-ae9b-18956ba60371"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs) Choose secure storage options for your VM's storage profile. Enable disk encryption and data-at-rest encryption by default. Disable public network access to the VM disks.",
"description": "Disabling public network access helps prevent unauthorized access to your data and resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "47c0a03c-627a-4961-96da-9a8c883d0d9f"
},
{
"waf": "Security",
"service": "Virtual Machines",
"text": "(VMs, scale set) Include extensions in your VMs that protect against threats. For example, - Key Vault extension for Windows and Linux - Microsoft Entra ID authentication - Microsoft Antimalware for Azure Cloud Services and Virtual Machines - Azure Disk Encryption extension for Windows and Linux.",
"description": "The extensions are used to bootstrap the VMs with the right software that protects access to and from the VMs. Microsoft-provided extensions are updated frequently to keep up with the evolving security standards.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "01d2e86e-e54e-4e42-87dd-fc09bf9f69a0"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Estimate realistic costs. Use the pricing calculator to estimate the costs of your VMs. Identify the best VM for your workload by using the VM selector. For more information, see Linux and Windows pricing.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "4f730d71-d8da-489b-b609-e9b1962ab07f"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Implement cost guardrails. Use governance policies to restrict resource types, configurations, and locations. Use RBAC to block actions that can lead to overspending.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "389aca19-a7d5-4abb-82f6-66716e25023a"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Choose the right resources. Your selection of VM plan sizes and SKUs directly affect the overall cost. Choose VMs based on workload characteristics. Is the workload CPU intensive or does it run interruptible processes? Each SKU has associated disk options that affect the overall cost.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "fd59590a-44b0-469a-aa57-e04183683d0b"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Choose the right capabilities for dependent resources. Save on backup storage costs for the vault-standard tier by using Azure Backup storage with reserved capacity. It offers a discount when you commit to a reservation for either one year or three years.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "e445d2d7-01a5-428d-9996-7d42b8727ae5"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Choose the right billing model. Evaluate whether commitment-based models for computing optimize costs based on the business requirements of workload. Consider these Azure options:",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "72eb7a10-acdd-47f4-ac63-c2366162dca0"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Monitor usage. Continuously monitor usage patterns and detect unused or underutilized VMs. For those instances, shut down VM instances when they're not in use. Monitoring is a key approach of Operational Excellence. For more information, see the recommendations in Operational Excellence.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "9269756b-3f6f-4066-907b-a24ef20d44c9"
},
{
"waf": "cost",
"service": "Virtual Machines",
"text": "Look for ways to optimize. Some strategies include choosing the most cost-effective approach between increasing resources in an existing system, or scaling up, and adding more instances of that system, or scaling out. You can offload demand by distributing it to other resources, or you can reduce demand by implementing priority queues, gateway offloading, buffering, and rate limiting. For more information, see the recommendations in Performance Efficiency.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "f7fc4792-bc2c-4a9d-98dc-ee637e18badd"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(VMs, scale set) Choose the right VM plan size and SKU. Identify the best VM sizes for your workload. Use the VM selector to identify the best VM for your workload. See Windows and Linux pricing. For workloads like highly parallel batch processing jobs that can tolerate some interruptions, consider using Azure Spot Virtual Machines. Spot virtual machines are good for experimenting, developing, and testing large-scale solutions.",
"description": "SKUs are priced according to the capabilities that they offer. If you don't need advanced capabilities, don't overspend on SKUs. Spot virtual machines take advantage of the surplus capacity in Azure at a lower cost.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "12835f9e-fdcf-4ecd-8d96-22d2a32bbd29"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(VMs, scale set) Evaluate the disk options that are associated with your VM's SKUs. Determine your performance needs while keeping in mind your storage capacity needs and accounting for fluctuating workload patterns. For example, the Azure Premium SSD v2 disk allows you to granularly adjust your performance independent of the disk's size.",
"description": "Some high-performance disk types offer extra cost optimization features and strategies. The Premium SSD v2 disk's adjustment capability can reduce costs because it provides high performance without overprovisioning, which could otherwise lead to underutilized resources.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8e136ca6-91e6-4cd0-8d19-b6cfec2622c1"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(Scale set) Mix regular VMs with spot virtual machines. Flexible orchestration lets you distribute spot virtual machines based on a specified percentage.",
"description": "Reduce compute infrastructure costs by applying the deep discounts of spot virtual machines.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bf114ba8-d145-4e31-9798-fb07277a246d"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(Scale set) Reduce the number of VM instances when demand decreases. Set a scale-in policy based on criteria. Stop VMs during off-hours. You can use the Azure Automation Start/Stop feature and configure it according to your business needs.",
"description": "Scaling in or stopping resources when they're not in use reduces the number of VMs running in the scale set, which saves costs. The Start/Stop feature is a low-cost automation option.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0a6605c5-2e42-4796-b60c-f2ac2a89872c"
},
{
"waf": "Cost",
"service": "Virtual Machines",
"text": "(VMs, scale set) Take advantage of license mobility by using Azure Hybrid Benefit. VMs have a licensing option that allows you to bring your own on-premises Windows Server OS licenses to Azure. Azure Hybrid Benefit also lets you bring certain Linux subscriptions to Azure.",
"description": "You can maximize your on-premises licenses while getting the benefits of the cloud.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2a4a0772-4dab-4123-bdb0-569271e29b63"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Monitor the VM instances. Collect logs and metrics from VM instances to monitor resource usage and measure the health of the instances. Some common metrics include CPU usage, number of requests, and input/output (I/O) latency. Set up Azure Monitor alerts to be notified about issues and to detect configuration changes in your environment.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "7fabd21e-bee0-4264-a4c0-666cb66e9deb"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Monitor the health of the VMs and their dependencies.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "f41eee87-6f25-4471-b482-a186535f468d"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Create a maintenance plan that includes regular system patching as a part of routine operations. Include emergency processes that allow for immediate patch application. You can have custom processes to manage patching or partially delegate the task to Azure.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "f419068c-ec1e-4c73-a7c6-ead478c8b4d6"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Automate processes for bootstrapping, running scripts, and configuring VMs. You can automate processes by using extensions or custom scripts. We recommend the following options:",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "91646a8b-4462-401b-9b10-e600079458fe"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Have processes for installing automatic updates. Consider using Automatic VM guest patching for a timely rollout of critical patches and security patches. Use Azure Update Manager to manage OS updates for your Windows and Linux virtual machines in Azure.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "941dc2bd-3fae-42ce-97e8-2aae24fa414c"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Build a test environment that closely matches your production environment to test updates and changes before you deploy them to production. Have processes in place to test the security updates, performance baselines, and reliability faults. Take advantage of Azure Chaos Studio fault libraries to inject and simulate error conditions. For more information, see Azure Chaos Studio fault and action library.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "bc5e266d-f8ee-4c9d-ba6c-edbb581c9a97"
},
{
"waf": "operations",
"service": "Virtual Machines",
"text": "Manage your quota. Plan what level of quota your workload requires and review that level regularly as the workload evolves. If you need to increase or decrease your quota, request those changes early.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "00d9961c-9d4b-4edd-9c69-45aed5d2172c"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(Scale set) Virtual Machine Scale Sets in Flexible orchestration mode can help simplify the deployment and management of your workload. For example, you can easily manage self-healing by using automatic repairs.",
"description": "Flexible orchestration can manage VM instances at scale. Handing individual VMs adds operational overhead. For example, when you delete VM instances, the associated disks and NICs are also automatically deleted. VM instances are spread across multiple fault domains so that update operations don't disrupt service.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "6ecf127d-151e-41d6-a796-2f1b0502ddd7"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(Scale set) Keep your VMs up to date by setting an upgrade policy. We recommend rolling upgrades. However, if you need granular control, choose to upgrade manually. For Flexible orchestration, you can use Azure Update Manager.",
"description": "Security is the primary reason for upgrades. Security assurances for the instances shouldn't decay over time. Rolling upgrades are done in batches, which ensures all instances aren't down at the same time.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "2adb5980-e146-44a0-b143-b1e618b9af3f"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(VMs, scale set) Automatically deploy VM applications from the Azure Compute Gallery by defining the applications in the profile.",
"description": "The VMs in the scale set are created and the specified apps are preinstalled, which makes management easier.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "77a59c87-2e77-4070-8823-def10424362e"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "Install prebuilt software components as extensions as part of bootstrapping. Azure supports many extensions that can be used to configure, monitor, secure, and provide utility applications for your VMs. Enable automatic upgrades on extensions.",
"description": "Extensions can help simplify the software installation at scale without you having to manually install, configure, or upgrade it on each VM.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "bb8b2ac8-e277-4172-996b-a366a00321d3"
},
{
"waf": "Operations",
"service": "Virtual Machines",
"text": "(VMs, scale set) Monitor and measure the health of the VM instances. Deploy the Monitor agent extension to your VMs to collect monitoring data from the guest OS with OS-specific data collection rules. Enable VM insights to monitor health and performance and to view trends from the collected data. Use boot diagnostics to get information as VMs boot. Boot diagnostics also diagnose boot failures.",
"description": "Monitoring data is at the core of incident resolution. A comprehensive monitoring stack provides information about how the VMs are performing and their health. By continuously monitoring the instances, you can be ready for or prevent failures like performance overload and reliability issues.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "eb4dbee8-3513-472d-a1da-f27afda1e7d2"
},
{
"waf": "performance",
"service": "Virtual Machines",
"text": "Define performance targets. Identify VM metrics to track and measure against performance indicators as response time, CPU utilization, and memory utilization, as well as workload metrics such as transactions per second, concurrent users, and availability and health.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "9ea20a53-3560-42fd-b9c2-e0554d262a5f"
},
{
"waf": "performance",
"service": "Virtual Machines",
"text": "Factor in the performance profile of VMs, scale sets, and disk configuration in your capacity planning. Each SKU has a different profile of memory and CPU and behaves differently depending on the type of workload. Conduct pilots and proofs of concept to understand performance behavior under the specific workload.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "5739c739-7af2-4f47-8c0a-a38cce9f64af"
},
{
"waf": "performance",
"service": "Virtual Machines",
"text": "VM performance tuning. Take advantage of performance optimization and enhancing features as required by the workload. For example, use locally attached Non-Volatile Memory Express (NVMe) for high performance use cases and accelerated networking, and use Premium SSD v2 for better performance and scalability.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "d7ea0eb8-7505-4e2b-9be1-380fad934a96"
},
{
"waf": "performance",
"service": "Virtual Machines",
"text": "Take the dependent services into account. Workload dependencies, like caching, network traffic, and content delivery networks, that interact with the VMs can affect performance. Also, consider geographical distribution, like zones and regions, which can add latency.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "b255b907-9f43-4998-ad40-ef60a225fe43"
},
{
"waf": "performance",
"service": "Virtual Machines",
"text": "Collect performance data. Follow the Operational Excellence best practices for monitoring and deploy the appropriate extensions to view metrics that track against performance indicators.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "fd304fa2-0694-4952-b53a-6161a4e21099"
},
{
"waf": "performance",
"service": "Virtual Machines",
"text": "Proximity placement groups. Use proximity placement groups in workloads where low latency is required to ensure that VMs are physically located close to each other.",
"description": "",
- "type": "checklist"
+ "type": "checklist",
+ "sourceType": "wafsg",
+ "timestamp": "July 24, 2024",
+ "sourceFile": "well-architected/service-guides/virtual-machines.md",
+ "guid": "e2a34493-c121-47fe-aa04-d9897feeca73"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Choose SKUs for VMs that align with your capacity planning. Have a good understanding of your workload requirements, including the number of cores, memory, storage, and network bandwidth so that you can filter out unsuitable SKUs.",
"description": "Rightsizing your VMs is a fundamental decision that significantly affects the performance of your workload. Without the right set of VMs, you might experience performance issues and accrue unnecessary costs.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "0278dc83-3a7e-4439-b706-1bdc45e0ecd0"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Deploy latency-sensitive workload VMs in proximity placement groups.",
"description": "Proximity placement groups reduce the physical distance between Azure compute resources, which can improve performance and reduce network latency between stand-alone VMs, VMs in multiple availability sets, or VMs in multiple scale sets.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "d69311a8-15b4-4509-928a-0dd369babed3"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Set the storage profile by analyzing the disk performance of existing workloads and the VM SKU. Use Premium SSDs for production VMs. Adjust the performance of disks with Premium SSD v2. Use locally attached NVMe devices.",
"description": "Premium SSDs deliver high-performance and low-latency disk support VMs with I/O-intensive workloads. Premium SSD v2 doesn't require disk resizing, which enables high performance without excessive over-provisioning and minimizes the cost of unused capacity. When available on VM SKUs, locally attached NVMe or similar devices can offer high performance, especially for use cases that require high input/output operations per second (IOPS) and low latency.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "633df150-cf95-4992-853f-72b1d599395b"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs) Consider enabling accelerated networking.",
"description": "It enables single root I/O virtualization (SR-IOV) to a VM, which greatly improves its networking performance.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "8b4677c6-aed0-4e08-9736-6710010b142b"
},
{
"waf": "Performance",
"service": "Virtual Machines",
"text": "(VMs, scale set) Set autoscale rules to increase or decrease the number of VM instances in your scale set based on demand.",
"description": "If your application demand increases, the load on the VM instances in your scale set increases. Autoscale rules ensure that you have enough resources to meet the demand.",
- "type": "recommendation"
+ "type": "recommendation",
+ "guid": "ac6b7b0d-63b8-4c6f-b7ed-f0bd175ba810"
}
],
"categories": [],
"waf": [
{
- "name": "cost"
+ "name": "Performance"
},
{
- "name": "Cost"
+ "name": "Operations"
},
{
- "name": "reliability"
+ "name": "operations"
},
{
- "name": "Security"
+ "name": "Cost"
},
{
- "name": "operations"
+ "name": "Reliability"
},
{
- "name": "Operations"
+ "name": "reliability"
},
{
- "name": "Reliability"
+ "name": "cost"
},
{
- "name": "Performance"
+ "name": "security"
},
{
"name": "performance"
},
{
- "name": "security"
+ "name": "Security"
}
],
"yesno": [
@@ -4920,6 +6714,6 @@
"name": "WAF Service Guides",
"waf": "all",
"state": "preview",
- "timestamp": "July 07, 2024"
+ "timestamp": "July 24, 2024"
}
}
\ No newline at end of file
diff --git a/checklists/acr_security_checklist.en.json b/checklists/acr_security_checklist.en.json
index 2303b2e66..6a200c26e 100644
--- a/checklists/acr_security_checklist.en.json
+++ b/checklists/acr_security_checklist.en.json
@@ -10,6 +10,7 @@
"guid": "ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e",
"id": "A01.01",
"severity": "High",
+ "query": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | extend acrName = name, acrId = id | extend exportPolicyStatus = properties.policies.exportPolicy.status | extend compliant = iif(exportPolicyStatus =~ 'Disabled', true, false) | project acrName, acrId, exportPolicyStatus, compliant",
"link": "https://learn.microsoft.com/azure/container-registry/data-loss-prevention"
},
{
@@ -46,6 +47,7 @@
"guid": "0bd05dc2-efd5-4d76-8d41-d2500cc47b49",
"id": "A01.04",
"severity": "Medium",
+ "graph": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | extend acrName = name, acrId = id | extend encryptionStatus = properties.encryption.status | extend compliant = iif(encryptionStatus == 'disabled', false, true) | project acrName, acrId, encryptionStatus, compliant",
"link": "https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys"
},
{
@@ -70,6 +72,7 @@
"guid": "be0e38ce-e297-411b-b363-caaab79b198d",
"id": "A02.02",
"severity": "High",
+ "graph": "resources | where type =~ 'microsoft.containerregistry/registries' | extend localAdminDisabled = properties.adminUserEnabled // Adjust this property as needed | extend compliant = iif(localAdminDisabled == 'false', true, false) // Check if local admin is disabled | project compliant, name, id, tags | distinct id, compliant",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity"
},
{
@@ -82,6 +85,7 @@
"guid": "387e5ced-126c-4d13-8af5-b20c6998a646",
"id": "A02.03",
"severity": "High",
+ "graph": "resources | where type =~ 'microsoft.containerregistry/registries' | extend localAdminDisabled = properties.adminUserEnabled // Adjust this property as needed | extend compliant = iif(localAdminDisabled == 'false', true, false) // Check if local admin is disabled | project compliant, name, id, tags | distinct id, compliant",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli"
},
{
@@ -94,6 +98,7 @@
"guid": "e338997e-41c7-47d7-acf6-a62a1194956d",
"id": "A02.04",
"severity": "Medium",
+ "graph": "resources | where type =~ 'microsoft.containerregistry/registries' | extend compliant = iif(properties.anonymousPullEnabled == false, true, false) | project compliant, name, id, tags | distinct id, compliant" ,
"link": "https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access"
},
{
@@ -165,6 +170,7 @@
"guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
"id": "A04.02",
"severity": "Medium",
+ "graph": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | where sku.name =~ 'Premium' // Check for Premium SKU | extend publicAccessEnabled = properties.publicNetworkAccess | extend defaultAction = tostring(properties.networkRuleSet.defaultAction) // Extract defaultAction | extend compliant = iif(publicAccessEnabled != 'Enabled' or defaultAction == 'Deny', true, false) | project name, id, publicAccessEnabled, defaultAction, compliant",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access"
},
{
@@ -177,6 +183,7 @@
"guid": "fc833934-8b26-42d6-ac5f-512925498f6d",
"id": "A04.03",
"severity": "Medium",
+ "graph": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | extend skuName = sku.name // Extract the SKU name | extend compliant = iif(skuName == 'Premium', true, false) // Check if SKU is Premium | project name, id, skuName, compliant",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-skus"
},
{
diff --git a/checklists/afd_checklist.en.json b/checklists/afd_checklist.en.json
new file mode 100644
index 000000000..2ff9198c9
--- /dev/null
+++ b/checklists/afd_checklist.en.json
@@ -0,0 +1,518 @@
+{
+ "items": [
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "id": "A01.01",
+ "severity": "Medium",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "id": "A01.11",
+ "severity": "Medium",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "id": "A01.12",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Deploy your WAF policy for Front Door in 'Prevention' mode' so that Web Application Firewall takes appropriate action to allow or deny traffic.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "id": "A01.16",
+ "severity": "High",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Avoid placing Traffic Manager behind Front Door.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "id": "A01.17",
+ "severity": "High",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "id": "A01.18",
+ "severity": "High",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
+ "waf": "Performance",
+ "service": "Front Door",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "id": "A01.19",
+ "severity": "Low",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
+ "waf": "Reliability",
+ "service": "Front Door",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "id": "A01.20",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
+ "waf": "Performance",
+ "service": "Front Door",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "id": "A01.21",
+ "severity": "Low",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "id": "A01.23",
+ "severity": "High",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "id": "A01.24",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "id": "A01.25",
+ "severity": "High",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "id": "A01.26",
+ "severity": "Medium",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "id": "A01.27",
+ "severity": "High",
+ "graph" : "resources | where type =~ 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=~'Enabled') and (mode=~'Prevention')), enabledState, mode",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Tune the Azure Front Door WAF for your workload by configuring the WAF in Detection mode to reduce and fix false positive detections.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "id": "A01.28",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "id": "A01.29",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "id": "A01.30",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "id": "A01.31",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "id": "A01.32",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "id": "A01.33",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "id": "A01.34",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "id": "A01.35",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "id": "A01.36",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Capture logs and metrics by turning on Diagnostic Settings. Include resource activity logs, access logs, health probe logs, and WAF logs. Set up alerts.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "id": "A01.47",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "id": "A01.49",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Choose a routing method that supports your deployment strategy. The weighted method, which distributes traffic based on the configured weight coefficient, supports active-active models. A priority-based value that configures the primary region to receive all traffic and send traffic to the secondary region as a backup supports active-passive models. Combine the preceding methods with latency so that the origin with the lowest latency receives traffic.",
+ "waf": "Reliability",
+ "service": "Front Door",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "id": "A01.50",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Support redundancy by having multiple origins in one or more back-end pools. Always have redundant instances of your application and make sure each instance exposes an endpoint or origin. You can place those origins in one or more back-end pools.",
+ "waf": "Reliability",
+ "service": "Front Door",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "id": "A01.51",
+ "severity": "High",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Set a timeout on forwarding requests to the back end. Adjust the timeout setting according to your endpoints' needs. If you don't, Azure Front Door might close the connection before the origin sends the response. You can also lower the default timeout for Azure Front Door if all of your origins have a shorter timeout.",
+ "waf": "Reliability",
+ "service": "Front Door",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "id": "A01.52",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Decide if your application requires session affinity. If you have high reliability requirements, we recommend that you disable session affinity.",
+ "waf": "Reliability",
+ "service": "Front Door",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "id": "A01.53",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Send the host header to the back end. The back-end services should be aware of the host name so that they can create rules to accept traffic only from that host.",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "id": "A01.56",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use caching for endpoints that support it.",
+ "waf": "Cost",
+ "service": "Front Door",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "id": "A01.58",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Disable health checks in single back-end pools. If you have only one origin configured in your Azure Front Door origin group, these calls are unnecessary. This is only recommended if you can't have multiple origins in your endpoint.",
+ "waf": "Cost",
+ "service": "Front Door",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "id": "A01.60",
+ "severity": "Low",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "We recommend using the Premium Tier for leveraging the Security reports while the Standard Azure Front Door Profile provides only traffic reports under built-in analytics/reports.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "id": "A01.62",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use wildcard TLS certificates when possible.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "id": "A01.63",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Optimize your application query string for caching. For purely static content, ignore query strings to maximize your use of the cache. If your application uses query strings, consider including them in the cache key. Including the query strings in the cache key allows Azure Front Door to serve cached responses or other responses, based on your configuration.",
+ "waf": "Performance",
+ "service": "Front Door",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "id": "A01.64",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Use file compression when you're accessing downloadable content.",
+ "waf": "Performance",
+ "service": "Front Door",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "id": "A01.65",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Consider migrating to Standard or Premium SKU if you are using Classic Azure Front Door currently as Classic Azure Front Door will be deprecated by March 2027.",
+ "waf": "Operations",
+ "service": "Front Door",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "id": "A01.66",
+ "severity": "High",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "Consider using Traffic Manager load balancing Azure Front Door and a third party CDN provider CDN profile for mission critical high availability scenario. ",
+ "waf": "Reliability",
+ "service": "Front Door",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "id": "A01.67",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Front Door",
+ "text": "When using Front Door with origin as App services, consider locking down the traffic to app services only through Azure Front Door using access restrictions. ",
+ "waf": "Security",
+ "service": "Front Door",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "id": "A01.68",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance"
+ }
+ ],
+ "categories": [
+ {
+ "name": "Network Topology and Connectivity"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Security"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Performance"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "status": [
+ {
+ "name": "Not verified",
+ "description": "This check has not been looked at yet"
+ },
+ {
+ "name": "Open",
+ "description": "There is an action item associated to this check"
+ },
+ {
+ "name": "Fulfilled",
+ "description": "This check has been verified, and there are no further action items associated to it"
+ },
+ {
+ "name": "Not required",
+ "description": "Recommendation understood, but not needed by current requirements"
+ },
+ {
+ "name": "N/A",
+ "description": "Not applicable for current design"
+ }
+ ],
+ "severities": [
+ {
+ "name": "High"
+ },
+ {
+ "name": "Medium"
+ },
+ {
+ "name": "Low"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Application Delivery Networking",
+ "state": "GA",
+ "waf": "all",
+ "timestamp": "September 23, 2024"
+ }
+}
diff --git a/checklists/afd_checklist.es.json b/checklists/afd_checklist.es.json
new file mode 100644
index 000000000..55367cf52
--- /dev/null
+++ b/checklists/afd_checklist.es.json
@@ -0,0 +1,517 @@
+{
+ "categories": [
+ {
+ "name": "Topología de red y conectividad"
+ }
+ ],
+ "items": [
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Si usa certificados TLS administrados por el cliente con Azure Front Door, use la versión de certificado \"más reciente\". Reduzca el riesgo de interrupciones causadas por la renovación manual de certificados.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "id": "A01.11",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Use Azure Front Door con directivas de WAF para entregar y ayudar a proteger aplicaciones HTTP/S globales que abarcan varias regiones de Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "id": "A01.12",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Al usar Front Door y Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Front Door. Bloquee Application Gateway para recibir tráfico solo desde Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "id": "A01.16",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Implemente la directiva de WAF para Front Door en modo \"Prevención\" para que el firewall de aplicaciones web tome las medidas adecuadas para permitir o denegar el tráfico.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "id": "A01.17",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Evite colocar el Administrador de tráfico detrás de la puerta principal.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "id": "A01.18",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Use el mismo nombre de dominio en Azure Front Door y en su origen. Los nombres de host no coincidentes pueden causar errores sutiles.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "id": "A01.19",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "subcategory": "Puerta",
+ "text": "Deshabilite los sondeos de estado cuando solo haya un origen en un grupo de origen de Azure Front Door.",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "id": "A01.20",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Seleccione puntos de conexión de sondeo de estado correctos para Azure Front Door. Considere la posibilidad de crear puntos de conexión de estado que comprueben todas las dependencias de la aplicación.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "id": "A01.21",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "subcategory": "Puerta",
+ "text": "Use sondeos de estado de HEAD con Azure Front Door para reducir el tráfico que Front Door envía a la aplicación.",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "id": "A01.23",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Use certificados TLS administrados con Azure Front Door. Reduzca los costos operativos y el riesgo de interrupciones debido a las renovaciones de certificados.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "id": "A01.24",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Defina la configuración de WAF de Azure Front Door como código. Mediante el uso de código, puede adoptar más fácilmente una nueva versión del conjunto de reglas y obtener protección adicional.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "id": "A01.25",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Use TLS de un extremo a otro con Azure Front Door. Use TLS para las conexiones de los clientes a Front Door y de Front Door al origen.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "id": "A01.26",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Use el redireccionamiento de HTTP a HTTPS con Azure Front Door. Apoye a los clientes más antiguos redirigiéndolos automáticamente a una solicitud HTTPS.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "id": "A01.27",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Habilite el WAF de Azure Front Door. Proteja su aplicación de una variedad de ataques.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "id": "A01.28",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Ajuste el WAF de Azure Front Door para su carga de trabajo configurando el WAF en modo de detección para reducir y corregir las detecciones de falsos positivos.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "id": "A01.29",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Habilite la característica de inspección del cuerpo de la solicitud habilitada en la directiva WAF de Azure Front Door.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "id": "A01.30",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Habilite los conjuntos de reglas predeterminados de WAF de Azure Front Door. Los conjuntos de reglas predeterminados detectan y bloquean ataques comunes.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "id": "A01.31",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Habilite el conjunto de reglas de protección contra bots de WAF de Azure Front Door. Las reglas de bots detectan bots buenos y malos.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "id": "A01.32",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Use la versión más reciente del conjunto de reglas de WAF de Azure Front Door. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "id": "A01.33",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Agregue la limitación de velocidad al WAF de Azure Front Door. La limitación de velocidad bloquea a los clientes que envían accidental o intencionalmente grandes cantidades de tráfico en un corto período de tiempo.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "id": "A01.34",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Use un umbral alto para los límites de frecuencia de WAF de Azure Front Door. Los umbrales de límite de velocidad altos evitan bloquear el tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "id": "A01.35",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "subcategory": "Puerta",
+ "text": "Si no espera tráfico de todas las regiones geográficas, utilice filtros geográficos para bloquear el tráfico de países no esperados.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "id": "A01.36",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Especifique la ubicación desconocida (ZZ) al filtrar geográficamente el tráfico con el WAF de Azure Front Door. Evite bloquear accidentalmente solicitudes legítimas cuando las direcciones IP no puedan coincidir geográficamente.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "id": "A01.47",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Capture registros y métricas activando la configuración de diagnóstico. Incluya registros de actividad de recursos, registros de acceso, registros de sondeo de estado y registros de WAF. Configura alertas.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "id": "A01.49",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Envíe registros de WAF de Azure Front Door a Microsoft Sentinel.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "id": "A01.50",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Elija un método de enrutamiento que admita su estrategia de implementación. El método ponderado, que distribuye el tráfico en función del coeficiente de ponderación configurado, admite modelos activo-activo. Un valor basado en prioridades que configura la región primaria para recibir todo el tráfico y enviar tráfico a la región secundaria como copia de seguridad admite modelos activo-pasivo. Combine los métodos anteriores con la latencia para que el origen con la latencia más baja reciba tráfico.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "id": "A01.51",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Compatibilidad con la redundancia al tener varios orígenes en uno o varios grupos de back-end. Tenga siempre instancias redundantes de su aplicación y asegúrese de que cada instancia exponga un punto de conexión u origen. Puede colocar esos orígenes en uno o varios grupos de back-end.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "id": "A01.52",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Establezca un tiempo de espera para reenviar solicitudes al back-end. Ajuste la configuración de tiempo de espera según las necesidades de sus terminales. Si no lo hace, Azure Front Door podría cerrar la conexión antes de que el origen envíe la respuesta. También puede reducir el tiempo de espera predeterminado para Azure Front Door si todos los orígenes tienen un tiempo de espera más corto.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "id": "A01.53",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Decida si la aplicación requiere afinidad de sesión. Si tiene requisitos de alta confiabilidad, le recomendamos que deshabilite la afinidad de sesión.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "id": "A01.56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Envíe el encabezado del host al back-end. Los servicios back-end deben tener en cuenta el nombre de host para que puedan crear reglas para aceptar el tráfico solo de ese host.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "id": "A01.58",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Use el almacenamiento en caché para los puntos de conexión que lo admitan.",
+ "waf": "Costar"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "id": "A01.60",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "subcategory": "Puerta",
+ "text": "Deshabilite las comprobaciones de estado en grupos de back-end únicos. Si solo tiene un origen configurado en el grupo de origen de Azure Front Door, estas llamadas son innecesarias. Esto solo se recomienda si no puede tener varios orígenes en el punto de conexión.",
+ "waf": "Costar"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "id": "A01.62",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Se recomienda usar el nivel Premium para aprovechar los informes de seguridad, mientras que el perfil estándar de Azure Front Door solo proporciona informes de tráfico en análisis o informes integrados.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "id": "A01.63",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Utilice certificados TLS comodín cuando sea posible.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "id": "A01.64",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Optimice la cadena de consulta de la aplicación para el almacenamiento en caché. En el caso de contenido puramente estático, omita las cadenas de consulta para maximizar el uso de la memoria caché. Si la aplicación usa cadenas de consulta, considere la posibilidad de incluirlas en la clave de caché. La inclusión de las cadenas de consulta en la clave de caché permite a Azure Front Door servir respuestas almacenadas en caché u otras respuestas, en función de la configuración.",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "id": "A01.65",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Usa la compresión de archivos cuando accedas a contenido descargable.",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "id": "A01.66",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Considere la posibilidad de migrar a la SKU Estándar o Premium si usa Azure Front Door clásico actualmente, ya que Azure Front Door clásico quedará en desuso en marzo de 2027.",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "id": "A01.67",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "Medio",
+ "subcategory": "Puerta",
+ "text": "Considere la posibilidad de usar el equilibrio de carga del Administrador de tráfico, Azure Front Door y un perfil de CDN de proveedor de CDN de terceros para el escenario crítico de alta disponibilidad. ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "id": "A01.68",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Puerta",
+ "text": "Al usar Front Door con origen como servicios de aplicación, considere la posibilidad de bloquear el tráfico a los servicios de aplicaciones solo a través de Azure Front Door mediante restricciones de acceso. ",
+ "waf": "Seguridad"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Application Delivery Networking",
+ "state": "GA",
+ "timestamp": "September 23, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Medio"
+ },
+ {
+ "name": "Bajo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta comprobación aún no se ha examinado",
+ "name": "No verificado"
+ },
+ {
+ "description": "Hay un elemento de acción asociado a esta comprobación",
+ "name": "Abrir"
+ },
+ {
+ "description": "Esta comprobación se ha verificado y no hay más elementos de acción asociados a ella",
+ "name": "Cumplido"
+ },
+ {
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
+ "name": "No es necesario"
+ },
+ {
+ "description": "No aplicable para el diseño actual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidad"
+ },
+ {
+ "name": "Seguridad"
+ },
+ {
+ "name": "Costar"
+ },
+ {
+ "name": "Operaciones"
+ },
+ {
+ "name": "Rendimiento"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sí"
+ },
+ {
+ "name": "No"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/afd_checklist.ja.json b/checklists/afd_checklist.ja.json
new file mode 100644
index 000000000..d2fb23c12
--- /dev/null
+++ b/checklists/afd_checklist.ja.json
@@ -0,0 +1,517 @@
+{
+ "categories": [
+ {
+ "name": "ネットワーク トポロジと接続性"
+ }
+ ],
+ "items": [
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door でカスタマー マネージド TLS 証明書を使用する場合は、\"最新\" の証明書バージョンを使用します。証明書の手動更新による停止のリスクを軽減します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "id": "A01.11",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door と WAF ポリシーを使用して、複数の Azure リージョンにまたがるグローバル HTTP/S アプリを提供し、保護します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "id": "A01.12",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Front Door と Application Gateway を使用して HTTP/S アプリを保護する場合は、Front Door で WAF ポリシーを使用します。Application Gateway をロックダウンして、Front Door からのトラフィックのみを受信します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "id": "A01.16",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Front Door の WAF ポリシーを \"防止\" モードでデプロイし、Web アプリケーション ファイアウォールがトラフィックを許可または拒否するための適切なアクションを実行するようにします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "id": "A01.17",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Traffic Manager を Front Door の後ろに配置しないでください。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "id": "A01.18",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door と配信元で同じドメイン名を使用します。ホスト名が一致しないと、微妙なバグが発生する可能性があります。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "id": "A01.19",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door の配信元グループに配信元が 1 つしかない場合は、正常性プローブを無効にします。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "id": "A01.20",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door の適切な正常性プローブ エンドポイントを選択します。アプリケーションのすべての依存関係をチェックする正常性エンドポイントの構築を検討してください。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "id": "A01.21",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "低い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door で HEAD 正常性プローブを使用して、Front Door がアプリケーションに送信するトラフィックを減らします。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "id": "A01.23",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door でマネージド TLS 証明書を使用します。運用コストと、証明書の更新による停止のリスクを軽減します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "id": "A01.24",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF 構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "id": "A01.25",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door でエンド ツー エンド TLS を使用します。クライアントから Front Door への接続、および Front Door から配信元への接続には TLS を使用します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "id": "A01.26",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door で HTTP から HTTPS へのリダイレクトを使用します。古いクライアントを自動的に HTTPS リクエストにリダイレクトすることで、クライアントをサポートします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "id": "A01.27",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF を有効にします。さまざまな攻撃からアプリケーションを保護します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "id": "A01.28",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "ワークロードに合わせて Azure Front Door WAF を調整するには、検出モードで WAF を構成して誤検知の検出を減らして修正します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "id": "A01.29",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF ポリシーで有効になっている要求本文の検査機能を有効にします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "id": "A01.30",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF の既定のルール セットを有効にします。デフォルトのルールセットは、一般的な攻撃を検出してブロックします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "id": "A01.31",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF ボット保護ルール セットを有効にします。ボット ルールは、良いボットと悪いボットを検出します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "id": "A01.32",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "最新の Azure Front Door WAF ルール セット バージョンを使用します。ルールセットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "id": "A01.33",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF にレート制限を追加します。レート制限は、クライアントが誤ってまたは意図的に短時間に大量のトラフィックを送信するのをブロックします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "id": "A01.34",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF のレート制限には高いしきい値を使用します。レート制限のしきい値を高くすると、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多くのリクエストに対する保護を提供します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "id": "A01.35",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "低い",
+ "subcategory": "フロントドア",
+ "text": "すべての地理的地域からのトラフィックを想定していない場合は、geo フィルタを使用して、想定外の国からのトラフィックをブロックします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "id": "A01.36",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF を使用してトラフィックを geo フィルタリングする場合は、不明な (ZZ) 場所を指定します。IP アドレスを地理的に一致できない場合に、正当な要求を誤ってブロックしないようにします。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "id": "A01.47",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "ログとメトリックをキャプチャするには、診断設定をオンにします。リソース アクティビティ ログ、アクセス ログ、正常性プローブ ログ、WAF ログを含めます。アラートを設定します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "id": "A01.49",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "Azure Front Door WAF ログを Microsoft Sentinel に送信します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "id": "A01.50",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "デプロイ戦略をサポートするルーティング方法を選択します。設定された重み係数に基づいてトラフィックを分散する加重方式は、アクティブ/アクティブモデルをサポートします。プライマリ リージョンがすべてのトラフィックを受信し、バックアップとしてセカンダリ リージョンにトラフィックを送信するように設定する優先度ベースの値は、アクティブ/パッシブ モデルをサポートします。上記の方法とレイテンシを組み合わせて、レイテンシが最も低いオリジンがトラフィックを受信するようにします。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "id": "A01.51",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "1 つ以上のバックエンド プールに複数の配信元を持つことで冗長性をサポートします。アプリケーションの冗長インスタンスを常に用意し、各インスタンスがエンドポイントまたはオリジンを公開していることを確認します。これらの配信元は、1 つ以上のバックエンド プールに配置できます。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "id": "A01.52",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "バックエンドへの要求の転送にタイムアウトを設定します。エンドポイントのニーズに応じてタイムアウト設定を調整します。そうしないと、配信元が応答を送信する前に Azure Front Door が接続を閉じる可能性があります。また、すべての配信元のタイムアウトが短い場合は、Azure Front Door の既定のタイムアウトを下げることもできます。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "id": "A01.53",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "アプリケーションにセッション アフィニティが必要かどうかを判断します。高い信頼性要件がある場合は、セッション アフィニティを無効にすることをお勧めします。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "id": "A01.56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "ホストヘッダーをバックエンドに送信します。バックエンド サービスは、そのホストからのトラフィックのみを受け入れるルールを作成できるように、ホスト名を認識する必要があります。",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "id": "A01.58",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "キャッシュをサポートするエンドポイントにはキャッシュを使用します。",
+ "waf": "費用"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "id": "A01.60",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低い",
+ "subcategory": "フロントドア",
+ "text": "単一のバックエンド・プールのヘルス・チェックを無効にします。Azure Front Door の配信元グループに配信元が 1 つしか構成されていない場合、これらの呼び出しは不要です。これは、エンドポイントに複数のオリジンを持てない場合にのみ推奨されます。",
+ "waf": "費用"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "id": "A01.62",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "セキュリティ レポートを活用するには Premium レベルを使用することをお勧めしますが、Standard Azure Front Door プロファイルでは、組み込みの分析/レポートでトラフィック レポートのみが提供されます。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "id": "A01.63",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "可能な場合は、ワイルドカード TLS 証明書を使用します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "id": "A01.64",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "キャッシュ用にアプリケーションのクエリ文字列を最適化します。純粋に静的なコンテンツの場合は、クエリ文字列を無視して、キャッシュを最大限に活用します。アプリケーションでクエリ文字列を使用する場合は、それらをキャッシュキーに含めることを検討してください。キャッシュ キーにクエリ文字列を含めると、Azure Front Door は、構成に基づいてキャッシュされた応答またはその他の応答を提供できます。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "id": "A01.65",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "ダウンロード可能なコンテンツにアクセスするときは、ファイル圧縮を使用します。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "id": "A01.66",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "現在クラシック Azure Front Door を使用している場合は、クラシック Azure Front Door は 2027 年 3 月までに非推奨になるため、Standard SKU または Premium SKU への移行を検討してください。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "id": "A01.67",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "中程度",
+ "subcategory": "フロントドア",
+ "text": "ミッション クリティカルな高可用性シナリオには、Traffic Manager の負荷分散 Azure Front Door とサード パーティの CDN プロバイダー CDN プロファイルの使用を検討してください。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "id": "A01.68",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "高い",
+ "subcategory": "フロントドア",
+ "text": "配信元を App Services として Front Door を使用する場合は、アクセス制限を使用して Azure Front Door 経由でのみアプリ サービスへのトラフィックをロックダウンすることを検討してください。",
+ "waf": "安全"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Application Delivery Networking",
+ "state": "GA",
+ "timestamp": "September 23, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高い"
+ },
+ {
+ "name": "中程度"
+ },
+ {
+ "name": "低い"
+ }
+ ],
+ "status": [
+ {
+ "description": "このチェックはまだ見ていません",
+ "name": "未確認"
+ },
+ {
+ "description": "このチェックにはアクションアイテムが関連付けられています",
+ "name": "開ける"
+ },
+ {
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
+ "name": "達成"
+ },
+ {
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
+ },
+ {
+ "description": "現在のデザインには適用されません",
+ "name": "該当なし"
+ }
+ ],
+ "waf": [
+ {
+ "name": "確実"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "費用"
+ },
+ {
+ "name": "オペレーションズ"
+ },
+ {
+ "name": "パフォーマンス"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "はい"
+ },
+ {
+ "name": "いいえ"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/afd_checklist.ko.json b/checklists/afd_checklist.ko.json
new file mode 100644
index 000000000..0d8fd1da1
--- /dev/null
+++ b/checklists/afd_checklist.ko.json
@@ -0,0 +1,517 @@
+{
+ "categories": [
+ {
+ "name": "네트워크 토폴로지 및 연결성"
+ }
+ ],
+ "items": [
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door에서 고객 관리형 TLS 인증서를 사용하는 경우 '최신' 인증서 버전을 사용합니다. 수동 인증서 갱신으로 인한 중단 위험을 줄입니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "id": "A01.11",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "WAF 정책과 함께 Azure Front Door를 사용하여 여러 Azure 지역에 걸쳐 있는 글로벌 HTTP/S 앱을 제공하고 보호할 수 있습니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "id": "A01.12",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Front Door 및 Application Gateway를 사용하여 HTTP/S 앱을 보호하는 경우 Front Door에서 WAF 정책을 사용합니다. Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "id": "A01.16",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Web Application Firewall이 트래픽을 허용하거나 거부하기 위해 적절한 조치를 취할 수 있도록 Front Door에 대한 WAF 정책을 '방지' 모드'에 배포합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "id": "A01.17",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Traffic Manager를 Front Door 뒤에 배치하지 마세요.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "id": "A01.18",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door 및 원본에서 동일한 도메인 이름을 사용합니다. 호스트 이름이 일치하지 않으면 미묘한 버그가 발생할 수 있습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "id": "A01.19",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "낮다",
+ "subcategory": "정문",
+ "text": "Azure Front Door 원본 그룹에 원본이 하나만 있는 경우 상태 프로브를 사용하지 않도록 설정합니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "id": "A01.20",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door에 대한 양호한 상태 프로브 엔드포인트를 선택합니다. 애플리케이션의 모든 종속성을 확인하는 상태 엔드포인트를 구축하는 것이 좋습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "id": "A01.21",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "낮다",
+ "subcategory": "정문",
+ "text": "Azure Front Door와 함께 HEAD 상태 프로브를 사용하여 Front Door가 애플리케이션으로 보내는 트래픽을 줄입니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "id": "A01.23",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door에서 관리형 TLS 인증서를 사용합니다. 운영 비용을 줄이고 인증서 갱신으로 인한 중단 위험을 줄입니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "id": "A01.24",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF 구성을 코드로 정의합니다. 코드를 사용하면 새 규칙 집합 버전을 보다 쉽게 채택하고 추가 보호를 얻을 수 있습니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "id": "A01.25",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door에서 엔드투엔드 TLS를 사용합니다. 클라이언트에서 Front Door로, Front Door에서 원본으로의 연결에 TLS를 사용합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "id": "A01.26",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door에서 HTTP를 HTTPS로 리디렉션을 사용합니다. 이전 클라이언트를 HTTPS 요청으로 자동으로 리디렉션하여 지원합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "id": "A01.27",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF를 사용하도록 설정합니다. 다양한 공격으로부터 애플리케이션을 보호합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "id": "A01.28",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "검색 모드에서 WAF를 구성하여 워크로드에 맞게 Azure Front Door WAF를 조정하여 가양성 검색을 줄이고 수정합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "id": "A01.29",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF 정책에서 요청 본문 검사 기능을 사용하도록 설정합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "id": "A01.30",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF 기본 규칙 집합을 사용하도록 설정합니다. 기본 규칙 집합은 일반적인 공격을 탐지하고 차단합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "id": "A01.31",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF 봇 보호 규칙 집합을 사용하도록 설정합니다. 봇 규칙은 좋은 봇과 나쁜 봇을 감지합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "id": "A01.32",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "최신 Azure Front Door WAF 규칙 집합 버전을 사용합니다. 규칙 집합 업데이트는 현재 위협 환경을 고려하기 위해 정기적으로 업데이트됩니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "id": "A01.33",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 단기간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "id": "A01.34",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF 속도 제한에 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호를 제공합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "id": "A01.35",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "낮다",
+ "subcategory": "정문",
+ "text": "모든 지역에서 트래픽이 발생할 것으로 예상되지 않는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "id": "A01.36",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 마세요.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "id": "A01.47",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Diagnostic Settings(진단 설정)를 켜서 로그 및 메트릭을 캡처합니다. 리소스 활동 로그, 액세스 로그, 상태 프로브 로그 및 WAF 로그를 포함합니다. 알림을 설정합니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "id": "A01.49",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "Azure Front Door WAF 로그를 Microsoft Sentinel로 보냅니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "id": "A01.50",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "배포 전략을 지원하는 라우팅 방법을 선택합니다. 구성된 가중치 계수에 따라 트래픽을 분산하는 가중치 방법은 액티브-액티브 모델을 지원합니다. 모든 트래픽을 수신하고 보조 지역으로 트래픽을 백업으로 보내도록 주 지역을 구성하는 우선 순위 기반 값은 활성-수동 모델을 지원합니다. 앞의 방법을 지연 시간과 결합하여 지연 시간이 가장 낮은 오리진이 트래픽을 수신하도록 합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "id": "A01.51",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "하나 이상의 백 엔드 풀에 여러 원본을 두어 중복성을 지원합니다. 항상 응용 프로그램의 중복 인스턴스를 가지고 있으며 각 인스턴스가 끝점 또는 원본을 노출하는지 확인하십시오. 이러한 원본을 하나 이상의 백 엔드 풀에 배치할 수 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "id": "A01.52",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "백 엔드에 대한 요청 전달에 대한 시간 제한을 설정합니다. 엔드포인트의 필요에 따라 시간 제한 설정을 조정합니다. 그렇지 않으면 원본이 응답을 보내기 전에 Azure Front Door가 연결을 닫을 수 있습니다. 모든 원본의 시간 제한이 더 짧은 경우 Azure Front Door의 기본 시간 제한을 낮출 수도 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "id": "A01.53",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "응용 프로그램에 세션 선호도가 필요한지 여부를 결정합니다. 높은 안정성 요구 사항이 있는 경우 세션 선호도를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "id": "A01.56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "호스트 헤더를 백 엔드로 보냅니다. 백 엔드 서비스는 해당 호스트의 트래픽만 허용하는 규칙을 만들 수 있도록 호스트 이름을 인식해야 합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "id": "A01.58",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "캐싱을 지원하는 엔드포인트에 대해 캐싱을 사용합니다.",
+ "waf": "비용"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "id": "A01.60",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "낮다",
+ "subcategory": "정문",
+ "text": "단일 백 엔드 풀에서 상태 검사를 사용하지 않도록 설정합니다. Azure Front Door 원본 그룹에 원본이 하나만 구성된 경우 이러한 호출이 필요하지 않습니다. 이는 엔드포인트에 여러 원본을 가질 수 없는 경우에만 권장됩니다.",
+ "waf": "비용"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "id": "A01.62",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "보안 보고서를 활용하기 위해 프리미엄 계층을 사용하는 것이 좋지만 표준 Azure Front Door 프로필은 기본 제공 분석/보고서에서 트래픽 보고서만 제공합니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "id": "A01.63",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "가능한 경우 와일드카드 TLS 인증서를 사용합니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "id": "A01.64",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "캐싱을 위해 응용 프로그램 쿼리 문자열을 최적화합니다. 순전히 정적인 콘텐츠의 경우 쿼리 문자열을 무시하여 캐시 사용을 최대화합니다. 응용 프로그램에서 쿼리 문자열을 사용하는 경우 캐시 키에 포함하는 것이 좋습니다. 캐시 키에 쿼리 문자열을 포함하면 Azure Front Door가 구성에 따라 캐시된 응답 또는 기타 응답을 제공할 수 있습니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "id": "A01.65",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "다운로드 가능한 콘텐츠에 액세스할 때 파일 압축을 사용합니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "id": "A01.66",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "클래식 Azure Front Door는 2027년 3월까지 더 이상 사용되지 않으므로 현재 클래식 Azure Front Door를 사용하는 경우 표준 또는 프리미엄 SKU로 마이그레이션하는 것이 좋습니다.",
+ "waf": "작업"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "id": "A01.67",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "보통",
+ "subcategory": "정문",
+ "text": "중요 업무용 고가용성 시나리오의 경우 Traffic Manager 부하 분산 Azure Front Door 및 타사 CDN 공급자 CDN 프로필을 사용하는 것이 좋습니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "id": "A01.68",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "높다",
+ "subcategory": "정문",
+ "text": "원본과 함께 Front Door를 App Services로 사용하는 경우 액세스 제한을 사용하여 Azure Front Door를 통해서만 앱 서비스에 대한 트래픽을 잠그는 것이 좋습니다. ",
+ "waf": "안전"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Application Delivery Networking",
+ "state": "GA",
+ "timestamp": "September 23, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "높다"
+ },
+ {
+ "name": "보통"
+ },
+ {
+ "name": "낮다"
+ }
+ ],
+ "status": [
+ {
+ "description": "이 검사는 아직 검토되지 않았습니다",
+ "name": "확인되지 않음"
+ },
+ {
+ "description": "이 검사와 연관된 작업 항목이 있습니다",
+ "name": "열다"
+ },
+ {
+ "description": "이 검사는 확인되었으며 이와 관련된 추가 작업 항목이 없습니다",
+ "name": "성취"
+ },
+ {
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
+ "name": "필요 없음"
+ },
+ {
+ "description": "현재 설계에는 적용되지 않습니다.",
+ "name": "해당 없음"
+ }
+ ],
+ "waf": [
+ {
+ "name": "신뢰도"
+ },
+ {
+ "name": "안전"
+ },
+ {
+ "name": "비용"
+ },
+ {
+ "name": "작업"
+ },
+ {
+ "name": "공연"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "예"
+ },
+ {
+ "name": "아니요"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/afd_checklist.pt.json b/checklists/afd_checklist.pt.json
new file mode 100644
index 000000000..9511c66da
--- /dev/null
+++ b/checklists/afd_checklist.pt.json
@@ -0,0 +1,517 @@
+{
+ "categories": [
+ {
+ "name": "Topologia e conectividade de rede"
+ }
+ ],
+ "items": [
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Se você usar certificados TLS gerenciados pelo cliente com o Azure Front Door, use a versão do certificado 'Mais recente'. Reduza o risco de interrupções causadas pela renovação manual do certificado.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "id": "A01.11",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use o Azure Front Door com políticas do WAF para fornecer e ajudar a proteger aplicativos HTTP/S globais que abrangem várias regiões do Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "id": "A01.12",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Ao usar o Front Door e o Gateway de Aplicativo para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Front Door. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "id": "A01.16",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Implante sua política de WAF para o Front Door no modo 'Prevenção' para que o Firewall de Aplicativo Web tome as medidas apropriadas para permitir ou negar o tráfego.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "id": "A01.17",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Evite colocar o Gerenciador de Tráfego atrás da Porta da Frente.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "id": "A01.18",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Use o mesmo nome de domínio no Azure Front Door e sua origem. Nomes de host incompatíveis podem causar bugs sutis.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "id": "A01.19",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "subcategory": "Porta da frente",
+ "text": "Desabilite as investigações de integridade quando houver apenas uma origem em um grupo de origens do Azure Front Door.",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "id": "A01.20",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Selecione pontos de extremidade de investigação de integridade boa para o Azure Front Door. Considere a criação de pontos de extremidade de integridade que verifiquem todas as dependências do aplicativo.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "id": "A01.21",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "subcategory": "Porta da frente",
+ "text": "Use investigações de integridade HEAD com o Azure Front Door para reduzir o tráfego que o Front Door envia para seu aplicativo.",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "id": "A01.23",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Use certificados TLS gerenciados com o Azure Front Door. Reduza o custo operacional e o risco de interrupções devido a renovações de certificados.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "id": "A01.24",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Defina a configuração do WAF do Azure Front Door como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "id": "A01.25",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Use o TLS de ponta a ponta com o Azure Front Door. Use o TLS para conexões de seus clientes com o Front Door e do Front Door com sua origem.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "id": "A01.26",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use o redirecionamento de HTTP para HTTPS com o Azure Front Door. Ofereça suporte a clientes mais antigos redirecionando-os para uma solicitação HTTPS automaticamente.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "id": "A01.27",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Habilite o WAF do Azure Front Door. Proteja seu aplicativo contra uma variedade de ataques.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "id": "A01.28",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Ajuste o WAF do Azure Front Door para sua carga de trabalho configurando o WAF no modo de detecção para reduzir e corrigir detecções de falsos positivos.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "id": "A01.29",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Habilite o recurso de inspeção do corpo da solicitação habilitado na política do WAF do Azure Front Door.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "id": "A01.30",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Habilite os conjuntos de regras padrão do WAF do Azure Front Door. Os conjuntos de regras padrão detectam e bloqueiam ataques comuns.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "id": "A01.31",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Habilite o conjunto de regras de proteção contra bot do WAF do Azure Front Door. As regras de bot detectam bots bons e ruins.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "id": "A01.32",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use a versão mais recente do conjunto de regras do WAF do Azure Front Door. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário de ameaças atual.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "id": "A01.33",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Adicione a limitação de taxa ao WAF do Azure Front Door. A limitação de taxa bloqueia os clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "id": "A01.34",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use um limite alto para os limites de taxa do WAF do Azure Front Door. Os limites de limite de taxa altos evitam o bloqueio do tráfego legítimo, ao mesmo tempo em que fornecem proteção contra números extremamente altos de solicitações que podem sobrecarregar sua infraestrutura.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "id": "A01.35",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "subcategory": "Porta da frente",
+ "text": "Se você não estiver esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "id": "A01.36",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Azure Front Door. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "id": "A01.47",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Capture logs e métricas ativando as Configurações de Diagnóstico. Inclua logs de atividades de recursos, logs de acesso, logs de investigação de integridade e logs do WAF. Configure alertas.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "id": "A01.49",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Envie logs do WAF do Azure Front Door para o Microsoft Sentinel.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "id": "A01.50",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Escolha um método de roteamento que dê suporte à sua estratégia de implantação. O método ponderado, que distribui o tráfego com base no coeficiente de peso configurado, oferece suporte a modelos ativos-ativos. Um valor baseado em prioridade que configura a região primária para receber todo o tráfego e enviar tráfego para a região secundária como backup oferece suporte a modelos ativo-passivo. Combine os métodos anteriores com latência para que a origem com a menor latência receba tráfego.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "id": "A01.51",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Dar suporte à redundância por ter várias origens em um ou mais pools de back-end. Sempre tenha instâncias redundantes do seu aplicativo e certifique-se de que cada instância exponha um ponto de extremidade ou origem. Você pode colocar essas origens em um ou mais pools de back-end.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "id": "A01.52",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Defina um tempo limite para encaminhar solicitações para o back-end. Ajuste a configuração de tempo limite de acordo com as necessidades de seus endpoints. Caso contrário, o Azure Front Door poderá fechar a conexão antes que a origem envie a resposta. Você também pode reduzir o tempo limite padrão do Azure Front Door se todas as suas origens tiverem um tempo limite mais curto.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "id": "A01.53",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Decida se seu aplicativo requer afinidade de sessão. Se você tiver requisitos de alta confiabilidade, recomendamos que você desabilite a afinidade de sessão.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "id": "A01.56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Envie o cabeçalho do host para o back-end. Os serviços de back-end devem estar cientes do nome do host para que possam criar regras para aceitar o tráfego somente desse host.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "id": "A01.58",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use o cache para pontos de extremidade que dão suporte a ele.",
+ "waf": "Custar"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "id": "A01.60",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "subcategory": "Porta da frente",
+ "text": "Desabilite as verificações de integridade em pools de back-end únicos. Se você tiver apenas uma origem configurada no grupo de origens do Azure Front Door, essas chamadas serão desnecessárias. Isso só é recomendado se você não puder ter várias origens em seu endpoint.",
+ "waf": "Custar"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "id": "A01.62",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "É recomendável usar a Camada Premium para aproveitar os relatórios de segurança, enquanto o Perfil Standard do Azure Front Door fornece apenas relatórios de tráfego em análises/relatórios internos.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "id": "A01.63",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use certificados TLS curinga quando possível.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "id": "A01.64",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Otimize a cadeia de caracteres de consulta do aplicativo para armazenamento em cache. Para conteúdo puramente estático, ignore as cadeias de caracteres de consulta para maximizar o uso do cache. Se o aplicativo usar cadeias de caracteres de consulta, considere incluí-las na chave de cache. Incluir as cadeias de caracteres de consulta na chave de cache permite que o Azure Front Door forneça respostas armazenadas em cache ou outras respostas, com base em sua configuração.",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "id": "A01.65",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Use a compactação de arquivos ao acessar conteúdo para download.",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "id": "A01.66",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Considere migrar para o SKU Standard ou Premium se você estiver usando o Azure Front Door Clássico atualmente, pois o Front Door do Azure Clássico será preterido até março de 2027.",
+ "waf": "Operações"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "id": "A01.67",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "Média",
+ "subcategory": "Porta da frente",
+ "text": "Considere usar o balanceamento de carga do Gerenciador de Tráfego, o Azure Front Door e um perfil de CDN de provedor de CDN de terceiros para o cenário de alta disponibilidade crítico. ",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "id": "A01.68",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "Alto",
+ "subcategory": "Porta da frente",
+ "text": "Ao usar o Front Door com origem como serviços de aplicativos, considere bloquear o tráfego para serviços de aplicativos somente por meio do Azure Front Door usando restrições de acesso. ",
+ "waf": "Segurança"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Application Delivery Networking",
+ "state": "GA",
+ "timestamp": "September 23, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Média"
+ },
+ {
+ "name": "Baixo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta verificação ainda não foi analisada",
+ "name": "Não verificado"
+ },
+ {
+ "description": "Há um item de ação associado a essa verificação",
+ "name": "Abrir"
+ },
+ {
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
+ "name": "Cumprido"
+ },
+ {
+ "description": "Recomendação compreendida, mas não necessária pelos requisitos atuais",
+ "name": "Não é necessário"
+ },
+ {
+ "description": "Não aplicável para o projeto atual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidade"
+ },
+ {
+ "name": "Segurança"
+ },
+ {
+ "name": "Custar"
+ },
+ {
+ "name": "Operações"
+ },
+ {
+ "name": "Desempenho"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sim"
+ },
+ {
+ "name": "Não"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/afd_checklist.zh-Hant.json b/checklists/afd_checklist.zh-Hant.json
new file mode 100644
index 000000000..75d1716fe
--- /dev/null
+++ b/checklists/afd_checklist.zh-Hant.json
@@ -0,0 +1,517 @@
+{
+ "categories": [
+ {
+ "name": "網路拓撲和連接"
+ }
+ ],
+ "items": [
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "如果將客戶管理的 TLS 證書與 Azure Front Door 一起使用,請使用“最新”證書版本。降低手動證書續訂導致中斷的風險。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "id": "A01.11",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "將 Azure Front Door 與 WAF 策略結合使用,以交付和幫助保護跨多個 Azure 區域的全球 HTTP/S 應用程式。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "id": "A01.12",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "使用 Front Door 和應用程式閘道幫助保護 HTTP/S 應用時,請在 Front Door 中使用 WAF 策略。鎖定應用程式閘道以僅接收來自 Front Door 的流量。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "id": "A01.16",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "在「防護」模式下部署 Front Door 的 WAF 策略,以便 Web 應用程式防火牆採取適當的措施來允許或拒絕流量。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "id": "A01.17",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "避免將 Traffic Manager 放在 Front Door 後面。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "id": "A01.18",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "在 Azure Front Door 和源上使用相同的功能變數名稱。不匹配的主機名可能會導致細微的錯誤。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "id": "A01.19",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低",
+ "subcategory": "前門",
+ "text": "當 Azure Front Door 源組中只有一個源時,禁用運行狀況探測。",
+ "waf": "性能"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "id": "A01.20",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "為 Azure Front Door 選擇良好的運行狀況探測終結點。考慮構建運行狀況終端節點來檢查應用程式的所有依賴項。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "id": "A01.21",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "低",
+ "subcategory": "前門",
+ "text": "將 HEAD 運行狀況探測與 Azure Front Door 配合使用,以減少 Front Door 發送到應用程式的流量。",
+ "waf": "性能"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "id": "A01.23",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "將託管 TLS 證書與 Azure Front Door 配合使用。降低運營成本和因證書續訂而導致的中斷風險。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "id": "A01.24",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "將 Azure Front Door WAF 配置定義為代碼。通過使用代碼,您可以更輕鬆地採用新的規則集版本並獲得額外的保護。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "id": "A01.25",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "將端到端 TLS 與 Azure Front Door 配合使用。將 TLS 用於從用戶端到 Front Door 以及從 Front Door 到源的連接。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "id": "A01.26",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "將 HTTP 到 HTTPS 重定向與 Azure Front Door 配合使用。通過自動將較舊的用戶端重定向到 HTTPS 請求來支援這些用戶端。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "id": "A01.27",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "啟用 Azure Front Door WAF。保護您的應用程式免受各種攻擊。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "id": "A01.28",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "通過在檢測模式下配置 WAF 來減少和修復誤報檢測,從而針對工作負載優化 Azure Front Door WAF。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "id": "A01.29",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "在 Azure Front Door WAF 策略中啟用請求正文檢查功能。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "id": "A01.30",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "啟用 Azure Front Door WAF 預設規則集。默認規則集檢測和阻止常見攻擊。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "id": "A01.31",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "啟用 Azure Front Door WAF 機器人保護規則集。機器人規則檢測好的機器人和壞的機器人。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "id": "A01.32",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "使用最新的 Azure Front Door WAF 規則集版本。規則集更新會定期更新,以考慮當前的威脅形勢。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "id": "A01.33",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "向 Azure Front Door WAF 添加速率限制。Rate limit 會阻止客戶端在短時間內意外或故意發送大量流量。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "id": "A01.34",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "對 Azure Front Door WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎設施不堪重負的極大量請求提供保護。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "id": "A01.35",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "低",
+ "subcategory": "前門",
+ "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選條件來阻止來自非預期國家/地區的流量。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "id": "A01.36",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "在使用 Azure Front Door WAF 對流量進行異地篩選時,指定未知 (ZZ) 位置。避免在IP位址無法進行異地匹配時意外阻止合法請求。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "id": "A01.47",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "通過打開 Diagnostic Settings (診斷設置) 來捕獲日誌和指標。包括資源活動日誌、訪問日誌、運行狀況探測日誌和 WAF 日誌。設置警報。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "id": "A01.49",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "將 Azure Front Door WAF 日誌發送到 Microsoft Sentinel。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "id": "A01.50",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "選擇支援您的部署策略的路由方法。加權方法根據配置的權重係數分配流量,支持主動-主動模型。一個基於優先順序的值,將主區域配置為接收所有流量並將流量作為備份發送到輔助區域,支援主動-被動模型。將上述方法與延遲相結合,以便延遲最低的源接收流量。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "id": "A01.51",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "通過在一個或多個後端池中擁有多個源來支援冗餘。始終具有應用程式的冗餘實例,並確保每個實例都公開一個終端節點或源。可以將這些源放置在一個或多個後端池中。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "id": "A01.52",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "設置將請求轉發到後端的超時。根據終端節點的需要調整超時設置。否則,Azure Front Door 可能會在源發送回應之前關閉連接。如果所有源的超時時間較短,還可以降低 Azure Front Door 的預設超時。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "id": "A01.53",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "確定您的應用程式是否需要會話關聯。如果您對可靠性要求較高,建議您關閉會話關聯。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "id": "A01.56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "將主機標頭髮送到後端。後端服務應該知道主機名,以便它們可以創建規則以僅接受來自該主機的流量。",
+ "waf": "安全"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "id": "A01.58",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "對支援快取的終端節點使用緩存。",
+ "waf": "成本"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "id": "A01.60",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低",
+ "subcategory": "前門",
+ "text": "在單個後端池中禁用運行狀況檢查。如果在 Azure Front Door 源組中只配置了一個源,則這些調用是不必要的。僅當終端節點中不能有多個源時,才建議這樣做。",
+ "waf": "成本"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "id": "A01.62",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "我們建議使用高級層來利用安全報告,而標準 Azure Front Door 配置檔僅在內置分析/報告下提供流量報告。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "id": "A01.63",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "盡可能使用通配符 TLS 證書。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "id": "A01.64",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "優化應用程式查詢字串以進行緩存。對於純靜態內容,請忽略查詢字串以最大限度地利用緩存。如果您的應用程式使用查詢字串,請考慮將它們包含在緩存鍵中。在緩存鍵中包含查詢字串可讓 Azure Front Door 根據您的配置提供緩存的回應或其他回應。",
+ "waf": "性能"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "id": "A01.65",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "在訪問可下載內容時使用檔壓縮。",
+ "waf": "性能"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "id": "A01.66",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "如果目前使用的是經典 Azure Front Door,請考慮遷移到標準或高級 SKU,因為經典 Azure Front Door 將於 2027 年 3 月棄用。",
+ "waf": "操作"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "id": "A01.67",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "中等",
+ "subcategory": "前門",
+ "text": "考慮將流量管理器負載均衡 Azure Front Door 和第三方 CDN 供應商 CDN 配置檔用於任務關鍵型高可用性方案。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "id": "A01.68",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "高",
+ "subcategory": "前門",
+ "text": "將源作為應用服務的 Front Door 一起使用時,請考慮使用訪問限制僅通過 Azure Front Door 鎖定到應用服務的流量。",
+ "waf": "安全"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Application Delivery Networking",
+ "state": "GA",
+ "timestamp": "September 23, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高"
+ },
+ {
+ "name": "中等"
+ },
+ {
+ "name": "低"
+ }
+ ],
+ "status": [
+ {
+ "description": "尚未查看此檢查",
+ "name": "未驗證"
+ },
+ {
+ "description": "存在與此檢查關聯的操作項",
+ "name": "打開"
+ },
+ {
+ "description": "此檢查已經過驗證,沒有與之關聯的其他操作項",
+ "name": "實現"
+ },
+ {
+ "description": "建議已理解,但當前要求不需要",
+ "name": "不需要"
+ },
+ {
+ "description": "不適用於當前設計",
+ "name": "不適用"
+ }
+ ],
+ "waf": [
+ {
+ "name": "可靠性"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "成本"
+ },
+ {
+ "name": "操作"
+ },
+ {
+ "name": "性能"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "是的"
+ },
+ {
+ "name": "不"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/alz_checklist.en.json b/checklists/alz_checklist.en.json
index f10c8cfce..5c2a0685d 100644
--- a/checklists/alz_checklist.en.json
+++ b/checklists/alz_checklist.en.json
@@ -1,5 +1,17 @@
{
"items": [
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "text": "Deploy your Azure landing zone connectivity resources in multiple regions, so that you can quickly support multi-region application landing zones and disaster recovery scenarios.",
+ "waf": "Reliability",
+ "service": "VNet",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "id": "",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/"
+ },
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Entra ID Tenants",
@@ -9,45 +21,49 @@
"guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
"id": "A01.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Entra ID Tenants",
- "text": "Ensure you have a Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants",
+ "text": "Use Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants.",
"waf": "Operations",
"service": "Entra",
"guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
"id": "A01.02",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Entra ID Tenants",
- "text": "Leverage Azure Lighthouse for Multi-Tenant Management",
+ "text": "Use Azure Lighthouse for Multi-Tenant Management with the same IDs.",
"waf": "Operations",
"service": "Entra",
"guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
"id": "A01.03",
- "severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse"
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Cloud Solution Provider",
- "text": "Ensure that Azure Lighthouse is used for administering the tenant by partner",
+ "text": "If you give a partner access to administer your tenant, use Azure Lighthouse.",
"waf": "Cost",
"service": "Entra",
"guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
"id": "A02.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations"
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Cloud Solution Provider",
- "text": "Discuss support request and escalation process with CSP partner",
+ "text": "If you have a CSP partner, define and document your support request and escalation process.",
"waf": "Cost",
"guid": "a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01",
"id": "A02.02",
@@ -57,17 +73,18 @@
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Cloud Solution Provider",
- "text": "Setup Cost Reporting and Views with Azure Cost Management",
+ "text": "Setup Cost Reporting and Views with Azure Cost Management.",
"waf": "Cost",
"guid": "32952499-58c8-4e6f-ada5-972e67893d55",
"id": "A02.03",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Enterprise Agreement",
- "text": "Configure Notification Contacts to a group mailbox",
+ "text": "Configure Notification Contacts to a group mailbox.",
"waf": "Cost",
"guid": "685cb4f2-ac9c-4b19-9167-993ed0b32415",
"id": "A03.01",
@@ -82,7 +99,8 @@
"guid": "12cd499f-96e2-4e41-a243-231fb3245a1c",
"id": "A03.02",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
@@ -92,57 +110,63 @@
"guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
"id": "A03.04",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Enterprise Agreement",
- "text": "Make use of Enterprise Dev/Test Subscriptions to reduce costs for non-production workloads",
+ "text": "Use of Enterprise Dev/Test Subscriptions to reduce costs for non-production workloads.",
"waf": "Cost",
"guid": "5cf9f485-2784-49b3-9824-75d9b8bdb57b",
"id": "A03.05",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Customer Agreement",
- "text": "Configure Agreement billing account notification contact email",
+ "text": "Configure Agreement billing account notification contact email.",
"waf": "Cost",
"guid": "6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c",
"id": "A04.01",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Customer Agreement",
- "text": "Use Billing Profiles and Invoice sections to structure your agreements billing for effective cost management",
+ "text": "Use Billing Profiles and Invoice sections to structure your agreements billing for effective cost management.",
"waf": "Cost",
"guid": "90e87802-602f-4dfb-acea-67c60689f1d7",
"id": "A04.02",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice"
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Customer Agreement",
- "text": "Make use of Microsoft Azure plan for dev/test offer to reduce costs for non-production workloads",
+ "text": "Make use of Microsoft Azure plan for dev/test offer to reduce costs for non-production workloads.",
"waf": "Cost",
"guid": "e81a73f0-84c4-4641-b406-14db3b4d1f50",
"id": "A04.03",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio"
},
{
"category": "Azure Billing and Microsoft Entra ID Tenants",
"subcategory": "Microsoft Customer Agreement",
- "text": "Periodically audit the agreement billing RBAC role assignments to review who has access to your MCA billing account",
+ "text": "Define and document a process to periodically audit the agreement billing RBAC role assignments to review who has access to your MCA billing account.",
"waf": "Cost",
"guid": "ae757485-92a4-482a-8bc9-eefe6f5b5ec3",
"id": "A04.04",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles"
},
{
"category": "Identity and Access Management",
@@ -152,10 +176,9 @@
"service": "Entra",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"id": "B03.01",
- "ammp": true,
"severity": "High",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview"
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/"
},
{
"category": "Identity and Access Management",
@@ -164,10 +187,9 @@
"waf": "Security",
"guid": "4348bf81-7573-4512-8f46-9061cc198fea",
"id": "B03.02",
- "ammp": true,
"severity": "High",
- "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview"
},
{
"category": "Identity and Access Management",
@@ -177,8 +199,7 @@
"service": "Entra",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"id": "B03.02",
- "ammp": true,
- "severity": "High",
+ "severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts"
},
@@ -197,43 +218,42 @@
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Enforce Microsoft Entra ID conditional-access policies for any user with rights to Azure environments",
+ "text": "Enforce Microsoft Entra ID Conditional Access policies for any user with rights to Azure environments.",
"waf": "Security",
"service": "Entra",
"guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
"id": "B03.04",
- "severity": "Low",
+ "severity": "High",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview"
},
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Enforce multi-factor authentication for any user with rights to the Azure environments",
+ "text": "Enforce multi-factor authentication for any user with rights to the Azure environments.",
"waf": "Security",
"service": "Entra",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"id": "B03.05",
- "ammp": true,
"severity": "High",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks"
},
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Enforce centralized and delegated responsibilities to manage resources deployed inside the landing zone, based on role and security requirements",
+ "text": "Enforce centralized and delegated responsibilities to manage resources deployed inside the landing zone, based on role and security requirements.",
"waf": "Security",
"guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
"id": "B03.06",
- "severity": "Medium",
+ "severity": "High",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations"
},
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege",
+ "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege.",
"waf": "Security",
"service": "Entra",
"guid": "14658d35-58fd-4772-99b8-21112df27ee4",
@@ -245,35 +265,60 @@
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "When deploying Active Directory on Windows Server, use a location with Availability Zones and deploy at least two VMs across these zones. If not available, deploy in an Availability Set",
+ "text": "When deploying Active Directory Domain Controllers, use a location with Availability Zones and deploy at least two VMs across these zones. If not available, deploy in an Availability Set.",
"waf": "Reliability",
"guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
"id": "B03.09",
- "severity": "Medium",
+ "severity": "High",
"training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations"
},
+ {
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "text": "Deploy your Azure landing zone identity resources in multiple regions. If using domain controllers, associate each region with an Active Directory site so that resources can resolve to their local domain controllers.",
+ "waf": "Reliability",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "id": "B03.10",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity"
+ },
{
"category": "Identity and Access Management",
"subcategory": "Identity",
"text": "Use Azure custom RBAC roles for the following key roles to provide fine-grain access across your ALZ: Azure platform owner, network management, security operations, subscription owner, application owner. Align these roles to teams and responsibilities within your business.",
"waf": "Security",
"guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "id": "B03.10",
+ "id": "B03.11",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations"
},
{
- "subcategory": "Identity and Access Management",
- "text": "If planning to switch from Active Directory Domain Services to Entra domain services, evaluate the compatibility of all workloads",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "text": "If planning to switch from Active Directory Domain Services to Entra domain services, evaluate the compatibility of all workloads.",
"waf": "Security",
"service": "Entra",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "id": "B03.11",
+ "id": "B03.12",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview"
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "text": "When using Microsoft Entra Domain Services use replica sets. Replica sets will improve the resiliency of your managed domain and allow you to deploy to additional regions. ",
+ "waf": "Reliability",
+ "service": "Entra",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "id": "B03.13",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview"
},
{
"category": "Identity and Access Management",
@@ -282,41 +327,43 @@
"waf": "Security",
"service": "Entra",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "id": "B03.12",
+ "id": "B03.14",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor"
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs"
},
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout",
+ "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout. MFA will be turned on by default for all users in Oct 2024. We recommend updating these accounts to use\u202fpasskey (FIDO2)\u202for\u202fconfigure certificate-based authentication for MFA. ",
"waf": "Security",
"service": "Entra",
"guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "id": "B03.13",
+ "id": "B03.15",
"ammp": true,
"severity": "High",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access"
},
{
"category": "Identity and Access Management",
"subcategory": "Microsoft Entra ID",
- "text": "When deploying Microsoft Entra Connect, leverage a staging sever for high availability / Disaster recovery",
+ "text": "When deploying Microsoft Entra Connect, use a staging sever for high availability/disaster recovery.",
"waf": "Reliability",
"guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "id": "B03.14",
+ "id": "B03.16",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server"
+ "link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies"
},
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Avoid using on-premises synced accounts for Microsoft Entra ID role assignments.",
+ "text": "Do not use on-premises synced accounts for Microsoft Entra ID role assignments, unless you have a scenario that specifically requires it.",
"waf": "Security",
"service": "Entra",
"guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "id": "B03.15",
+ "id": "B03.17",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices"
@@ -324,11 +371,11 @@
{
"category": "Identity and Access Management",
"subcategory": "Identity",
- "text": "Where required, use Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications (hosted in the cloud or on-premises).",
+ "text": "When using Microsoft Entra ID Application Proxy to give remote users access to applications, manage it as a Platform resource as you can only have one instance per tenant.",
"waf": "Security",
"service": "Entra",
"guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "id": "B03.16",
+ "id": "B03.18",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy"
@@ -340,9 +387,9 @@
"waf": "Security",
"guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
"id": "B04.01",
- "severity": "Medium",
+ "severity": "High",
"training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator"
},
{
"category": "Identity and Access Management",
@@ -363,17 +410,17 @@
"guid": "d505ebcb-79b1-4274-9c0d-a27c8bea489c",
"id": "B04.03",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review"
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review"
},
{
"category": "Resource Organization",
"subcategory": "Naming and tagging",
- "text": "It is recommended to follow Microsoft Best Practice Naming Standards",
+ "text": "Use a well defined naming scheme for resources, such as Microsoft Best Practice Naming Standards.",
"description": "Consider using the Azure naming tool available at https://aka.ms/azurenamingtool",
"waf": "Security",
"guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
"id": "C01.01",
- "ammp": true,
"severity": "High",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming"
},
@@ -392,7 +439,7 @@
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Enforce a sandbox management group to allow users to immediately experiment with Azure",
+ "text": "Enforce a sandbox management group to allow users to immediately experiment with Azure.",
"waf": "Security",
"guid": "667313b4-f566-44b5-b984-a859c773e7d2",
"id": "C02.02",
@@ -403,7 +450,7 @@
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Enforce a platform management group under the root management group to support common platform policy and Azure role assignment",
+ "text": "Enforce a platform management group under the root management group to support common platform policy and Azure role assignment.",
"waf": "Security",
"guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
"id": "C02.03",
@@ -414,7 +461,7 @@
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Enforce a dedicated connectivity subscription in the Connectivity management group to host an Azure Virtual WAN hub, private Domain Name System (DNS), ExpressRoute circuit, and other networking resources.",
+ "text": "Enforce a dedicated connectivity subscription in the Connectivity management group to host an Azure Virtual WAN hub, private non-AD Domain Name System (DNS), ExpressRoute circuit, and other networking resources.",
"waf": "Security",
"guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
"id": "C02.04",
@@ -425,23 +472,25 @@
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Enforce no subscriptions are placed under the root management group",
+ "text": "Enforce no subscriptions are placed under the root management group.",
"waf": "Security",
"guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
"id": "C02.05",
"severity": "Medium",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant = (array_length(mgmtChain) > 1)",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group"
+ "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview"
},
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Enforce that only privileged users can operate management groups in the tenant by enabling Azure RBAC authorization in the management group hierarchy settings",
+ "text": "Enforce that only privileged users can operate management groups in the tenant by enabling Azure RBAC authorization in the management group hierarchy settings.",
"waf": "Security",
"guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
"id": "C02.06",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization"
+ "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/"
},
{
"category": "Resource Organization",
@@ -460,9 +509,9 @@
"waf": "Security",
"guid": "49b82111-2df2-47ee-912e-7f983f630472",
"id": "C02.08",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview"
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/"
},
{
"category": "Resource Organization",
@@ -472,16 +521,16 @@
"guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
"id": "C02.09",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits"
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/"
},
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Use Reserved Instances where appropriate to optimize cost and ensure available capacity in target regions. Enforce the use of purchased Reserved Instance VM SKUs via Azure Policy.",
+ "text": "Use Reserved Instances where appropriate to optimize cost and ensure available capacity in target regions.",
"waf": "Security",
"guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
"id": "C02.10",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
"link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations"
@@ -495,20 +544,19 @@
"id": "C02.11",
"ammp": true,
"severity": "Medium",
- "training": "https://learn.microsoft.com/en-gb/training/modules/visualize-data-workbooks/",
- "link": "https://learn.microsoft.com/en-us/azure/azure-portal/azure-portal-dashboards"
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards"
},
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Enforce a process for cost management",
+ "text": "As part of your cloud adoption, implement a detailed cost management plan using the 'Managed cloud costs' process.",
"waf": "Security",
"guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
"id": "C02.12",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs"
},
{
"category": "Resource Organization",
@@ -524,7 +572,7 @@
{
"category": "Resource Organization",
"subcategory": "Subscriptions",
- "text": "Ensure tags are used for billing and cost management",
+ "text": "Ensure tags are used for billing and cost management.",
"waf": "Security",
"guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
"id": "C02.14",
@@ -541,12 +589,13 @@
"guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
"id": "C02.15",
"severity": "Medium",
- "link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md"
+ "link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview"
},
{
"category": "Resource Organization",
"subcategory": "Regions",
- "text": "Select the right Azure region/s for your deployment. Azure is a global-scale cloud platform that provide global coverage through many regions and geographies. Different Azure regions have different characteristics, access and availability models, costs, capacity, and services offered, then it is important to consider all criteria and requirements",
+ "text": "Select the right Azure region/s for your deployment. Azure is a global-scale cloud platform that provide global coverage through many regions and geographies. Different Azure regions have different characteristics, access and availability models, costs, capacity, and services offered, then it is important to consider all criteria and requirements.",
"waf": "Reliability",
"guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
"id": "C03.01",
@@ -557,7 +606,7 @@
{
"category": "Resource Organization",
"subcategory": "Regions",
- "text": "Consider a multi-region deployment. Depending on customer size, locations, and users presence, operating in multiple regions can be a common choice to deliver services and run applications closer to them. Using a multi-region deployment is also important to provide geo disaster recovery capabilities, to eliminate the dependency from a single region capacity and diminish the risk of a temporary and localized resource capacity constraint",
+ "text": "Deploy your Azure landing zone in a multi-region deployment. Depending on customer size, locations, and users presence, operating in multiple regions can be a common choice to deliver services and run applications closer to them. Using a multi-region deployment is also important to provide geo disaster recovery capabilities, to eliminate the dependency from a single region capacity and diminish the risk of a temporary and localized resource capacity constraint.",
"waf": "Reliability",
"guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
"id": "C03.02",
@@ -568,7 +617,7 @@
{
"category": "Resource Organization",
"subcategory": "Regions",
- "text": "Ensure required services and features are available within the chosen deployment regions",
+ "text": "Ensure required services and features are available within the chosen deployment regions.",
"waf": "Reliability",
"guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
"id": "C03.03",
@@ -579,7 +628,7 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "App delivery",
- "text": "Develop a plan for securing the delivery application content from your Workload spokes using Application Gateway and Azure Front door. You can use the Application Delivery checklist to for recommendations.",
+ "text": "Document a standard for securing the delivery application content from your Workload spokes using Application Gateway and Azure Front Door. You can use the Application Delivery checklist to for recommendations.",
"waf": "Operations",
"guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
"id": "D01.01",
@@ -589,7 +638,7 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Hub and spoke",
- "text": "Leverage a network design based on the traditional hub-and-spoke network topology for network scenarios that require maximum flexibility.",
+ "text": "Use a hub-and-spoke network topology for network scenarios that require maximum flexibility.",
"waf": "Security",
"service": "VNet",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
@@ -598,45 +647,34 @@
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "App delivery",
- "text": "Perform app delivery within landing zones for both internal-facing (corp) and external-facing apps (online).",
- "waf": "Security",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "id": "D01.02",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "Hub and spoke",
- "text": "Ensure that shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS servers.",
+ "text": "Deploy shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS services.",
"waf": "Cost",
"service": "VNet",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
"id": "D01.02",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "App delivery",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
+ "text": "Use a DDoS Network or IP protection plan for all public IP addresses in application landing zones.",
"waf": "Security",
"service": "VNet",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"id": "D01.03",
- "severity": "Medium",
+ "severity": "High",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Hub and spoke",
- "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance",
+ "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance.",
"waf": "Reliability",
"service": "NVA",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
@@ -653,7 +691,8 @@
"guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
"id": "D01.04",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn"
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/"
},
{
"category": "Network Topology and Connectivity",
@@ -665,7 +704,8 @@
"id": "D01.05",
"severity": "Low",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1"
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/"
},
{
"category": "Network Topology and Connectivity",
@@ -694,39 +734,65 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Hub and spoke",
- "text": "When connecting spoke virtual networks to the central hub virtual network, consider VNet peering limits (500), the maximum number of prefixes that can be advertised via ExpressRoute (1000)",
+ "text": "If you have more than 400 spoke networks in a region, deploy an additional hub to bypass VNet peering limits (500) and the maximum number of prefixes that can be advertised via ExpressRoute (1000).",
"waf": "Reliability",
"service": "VNet",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"id": "D01.08",
"severity": "Medium",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits"
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Hub and spoke",
- "text": "Consider the limit of routes per route table (400).",
+ "text": "Limit the number of routes per route table to 400.",
"waf": "Reliability",
"service": "VNet",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"id": "D01.09",
"severity": "Medium",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits"
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Hub and spoke",
- "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings",
+ "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings.",
"waf": "Reliability",
"service": "VNet",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"id": "D01.10",
- "ammp": true,
"severity": "High",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering"
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "text": "Use Standard Load Balancer SKU with a zone-redundant deployment, Selecting Standard SKU Load Balancer enhances reliability through availability zones and zone resiliency, ensuring deployments withstand zone and region failures. Unlike Basic, it supports global load balancing and offers an SLA.",
+ "waf": "Reliability",
+ "service": "Load Balancers",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "id": "D01.11",
+ "severity": "High",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "text": "Ensure load balancer backend pool(s) contains at least two instances, Deploying Azure Load Balancers with at least two instances in the backend prevents a single point of failure and supports scalability.",
+ "waf": "Reliability",
+ "service": "Load Balancers",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "id": "D01.12",
+ "severity": "High",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant"
},
{
"category": "Network Topology and Connectivity",
@@ -737,7 +803,8 @@
"guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
"id": "D02.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec"
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/"
},
{
"category": "Network Topology and Connectivity",
@@ -747,19 +814,18 @@
"service": "ExpressRoute",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
"id": "D02.02",
- "severity": "Low",
+ "severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about"
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "IP plan",
- "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used",
+ "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used.",
"waf": "Security",
"service": "ExpressRoute",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"id": "D03.01",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing"
@@ -772,7 +838,7 @@
"service": "VNet",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"id": "D03.02",
- "severity": "Low",
+ "severity": "Medium",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing"
@@ -780,12 +846,11 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "IP plan",
- "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16)",
+ "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16).",
"waf": "Performance",
"service": "VNet",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
"id": "D03.03",
- "ammp": true,
"severity": "High",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
@@ -794,16 +859,28 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "IP plan",
- "text": "Avoid using overlapping IP address ranges for production and DR sites.",
+ "text": "Do not use overlapping IP address ranges for production and disaster recovery sites.",
"waf": "Reliability",
"service": "VNet",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"id": "D03.04",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses"
},
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "text": "Use Standard SKU and Zone-Redundant IPs when applicable, Public IP addresses in Azure can be of standard SKU, available as non-zonal, zonal, or zone-redundant. Zone-redundant IPs are accessible across all zones, resisting any single zone failure, thereby providing higher resilience. ",
+ "waf": "Reliability",
+ "service": "Public IP Addresses",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "id": "D03.05",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "severity": "High",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone"
+ },
{
"category": "Network Topology and Connectivity",
"subcategory": "IP plan",
@@ -811,19 +888,19 @@
"waf": "Operations",
"service": "DNS",
"guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "id": "D03.05",
+ "id": "D03.06",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances"
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "IP plan",
- "text": "For environments where name resolution across Azure and on-premises is required, consider using Azure DNS Private Resolver.",
+ "text": "For environments where name resolution across Azure and on-premises is required and there is no existing enterprise DNS service like Active Directory, use Azure DNS Private Resolver to route DNS requests to Azure or to on-premises DNS servers.",
"waf": "Security",
"service": "DNS",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "id": "D03.06",
+ "id": "D03.07",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview"
@@ -835,9 +912,10 @@
"waf": "Operations",
"service": "DNS",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "id": "D03.07",
+ "id": "D03.08",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances"
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00"
},
{
"category": "Network Topology and Connectivity",
@@ -846,22 +924,34 @@
"waf": "Operations",
"service": "DNS",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
- "id": "D03.08",
- "ammp": true,
+ "id": "D03.09",
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration"
},
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "text": "Implement a plan for managing DNS resolution between multiple Azure regions and when services fail over to another region",
+ "waf": "Reliability",
+ "service": "DNS",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "id": "D03.10",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures"
+ },
{
"category": "Network Topology and Connectivity",
"subcategory": "Internet",
- "text": "Consider using Azure Bastion to securely connect to your network.",
+ "text": "Use Azure Bastion to securely connect to your network.",
"waf": "Security",
"service": "Bastion",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"id": "D05.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview"
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/"
},
{
"category": "Network Topology and Connectivity",
@@ -873,7 +963,8 @@
"id": "D05.02",
"severity": "Medium",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet"
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/"
},
{
"category": "Network Topology and Connectivity",
@@ -902,12 +993,11 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Internet",
- "text": "Deploy WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
+ "text": "When WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
"waf": "Security",
"service": "WAF",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"id": "D05.05",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview"
@@ -920,7 +1010,6 @@
"service": "VNet",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"id": "D05.06",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures"
@@ -928,14 +1017,14 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Internet",
- "text": "Assess and review network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed",
+ "text": "Plan for how to manage your network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed.",
"waf": "Reliability",
"service": "VNet",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"id": "D05.07",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access"
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/"
},
{
"category": "Network Topology and Connectivity",
@@ -945,27 +1034,38 @@
"service": "VNet",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"id": "D05.08",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures"
},
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "text": "Ensure there is a policy assignment to deny Public IP addresses\u00a0directly tied to Virtual Machines. Use exclusions if public IPs are needed on specific VMs.",
+ "waf": "Security",
+ "service": "Policy",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "id": "D05.08",
+ "severity": "High",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
+ },
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "Ensure that you have investigated the possibility to use ExpressRoute as primary connection to Azure.",
+ "text": "Use ExpressRoute as the primary connection to Azure. Use VPNs as a source of backup connectivity.",
"waf": "Performance",
"service": "ExpressRoute",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
"id": "D06.01",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "When you use multiple ExpressRoute circuits, or multiple on-prem locations, make sure to optimize routing with BGP attributes, if certain paths are preferred.",
+ "text": "When you use multiple ExpressRoute circuits or multiple on-prem locations, use BGP attributes to optimize routing.",
"description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
"waf": "Reliability",
"service": "ExpressRoute",
@@ -978,7 +1078,7 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "Ensure that you're using the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
+ "text": "Select the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
"waf": "Performance",
"service": "ExpressRoute",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
@@ -986,7 +1086,7 @@
"severity": "Medium",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing"
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku"
},
{
"category": "Network Topology and Connectivity",
@@ -996,23 +1096,23 @@
"service": "ExpressRoute",
"guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
"id": "D06.04",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost"
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuits' peering location supports your Azure regions for the Local SKU.",
+ "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuit peering location supports your Azure regions for the Local SKU.",
"waf": "Cost",
"service": "ExpressRoute",
"guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
"id": "D06.05",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local"
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/"
},
{
"category": "Network Topology and Connectivity",
@@ -1079,12 +1179,11 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs",
+ "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs.",
"waf": "Cost",
"service": "ExpressRoute",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"id": "D06.11",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about"
@@ -1135,19 +1234,20 @@
"id": "D06.15",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "Use site-to-site VPN as failover of ExpressRoute, especially if only using a single ExpressRoute circuit.",
+ "text": "Use site-to-site VPN as failover of ExpressRoute, if only using a single ExpressRoute circuit.",
"waf": "Reliability",
"service": "ExpressRoute",
"guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
"id": "D06.16",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager"
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/"
},
{
"category": "Network Topology and Connectivity",
@@ -1157,7 +1257,6 @@
"service": "ExpressRoute",
"guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
"id": "D06.17",
- "ammp": true,
"severity": "High",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))"
@@ -1170,9 +1269,9 @@
"service": "ExpressRoute",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"id": "D06.18",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections"
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/"
},
{
"category": "Network Topology and Connectivity",
@@ -1225,7 +1324,7 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Hybrid",
- "text": "Avoid using ExpressRoute circuits for VNet-to-VNet communication.",
+ "text": "Do not use ExpressRoute circuits for VNet-to-VNet communication.",
"waf": "Performance",
"service": "ExpressRoute",
"guid": "5234c93f-b651-41dd-80c1-234177b91ced",
@@ -1234,18 +1333,28 @@
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance"
},
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "text": "Do not send Azure traffic to hybrid locations for inspection. Instead, follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network.",
+ "waf": "Performance",
+ "service": "N/A",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "id": "D06.25",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about"
+ },
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it).",
"waf": "Security",
"service": "Firewall",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
"id": "D07.01",
- "ammp": true,
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features"
+ "link": "https://learn.microsoft.com/azure/firewall/overview"
},
{
"category": "Network Topology and Connectivity",
@@ -1257,7 +1366,7 @@
"id": "D07.02",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall"
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview"
},
{
"category": "Network Topology and Connectivity",
@@ -1274,28 +1383,28 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over protocols not supported by application rules.",
+ "text": "Use application rules to filter outbound traffic on destination host name for supported protocols. Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over other protocols.",
"waf": "Security",
"service": "Firewall",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"id": "D07.04",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules"
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Use Azure Firewall Premium for additional security and protection.",
+ "text": "Use Azure Firewall Premium to enable additional security features.",
"waf": "Security",
"service": "Firewall",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"id": "D07.05",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features"
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/"
},
{
"category": "Network Topology and Connectivity",
@@ -1305,10 +1414,9 @@
"service": "Firewall",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
"id": "D07.06",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features"
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules"
},
{
"category": "Network Topology and Connectivity",
@@ -1318,20 +1426,19 @@
"service": "Firewall",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
"id": "D07.07",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps"
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance",
+ "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance.",
"waf": "Security",
"service": "Firewall",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"id": "D07.08",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview"
@@ -1344,7 +1451,6 @@
"service": "Firewall",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"id": "D07.09",
- "ammp": true,
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs"
@@ -1357,8 +1463,7 @@
"service": "Firewall",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"id": "D07.10",
- "ammp": true,
- "severity": "Important",
+ "severity": "High",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy"
},
@@ -1370,26 +1475,27 @@
"service": "Firewall",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
"id": "D07.11",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size"
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use",
+ "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use.",
"waf": "Performance",
"service": "Firewall",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"id": "D07.12",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy"
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Use IP Groups or IP prefixes to reduce number of IP table rules",
+ "text": "Use IP Groups or IP prefixes to reduce number of IP table rules.",
"waf": "Performance",
"service": "Firewall",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
@@ -1400,13 +1506,14 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Avoid wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs",
+ "text": "Do not use wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs.",
"waf": "Performance",
"service": "Firewall",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"id": "D07.13",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat"
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/"
},
{
"category": "Network Topology and Connectivity",
@@ -1417,12 +1524,13 @@
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
"id": "D07.14",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall"
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Enable TLS Inspection",
+ "text": "If you are using Azure Firewall Premium, enable TLS Inspection.",
"waf": "Performance",
"service": "Firewall",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
@@ -1450,61 +1558,79 @@
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"id": "D07.17",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall"
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Enable Azure Firewall DNS proxy configuration ",
+ "text": "Enable Azure Firewall DNS proxy configuration.",
"waf": "Security",
"service": "Firewall",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"id": "D07.18",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details"
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Ensure there is a policy assignment to deny Public IP addresses\u00a0directly tied to Virtual Machines",
- "waf": "Security",
+ "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs and metrics.",
+ "waf": "Operations",
"service": "Firewall",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"id": "D07.19",
- "severity": "Medium",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp"
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs.",
+ "text": "Implement backups for your firewall rules",
"waf": "Operations",
"service": "Firewall",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"id": "D07.20",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics"
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Firewall",
- "text": "Implement backups for your firewall rules",
- "waf": "Operations",
+ "text": "Deploy Azure Firewall across multiple availability zones. Azure Firewall offers different SLAs depending on its deployment; in a single availability zone or across multiple, potentially improving reliability and performance.",
+ "waf": "Reliability",
"service": "Firewall",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
"id": "D07.21",
- "severity": "Low",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall"
+ "severity": "High",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "text": "Configure DDoS Protection on the Azure Firewall VNet, Associate a DDoS protection plan with the virtual network hosting Azure Firewall to provide enhanced mitigation against DDoS attacks. Azure Firewall Manager integrates the creation of firewall infrastructure and DDoS protection plans. ",
+ "waf": "Reliability",
+ "service": "Firewall",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "id": "D07.22",
+ "severity": "High",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "PaaS",
- "text": "Ensure that control-plane communication for Azure PaaS services injected into a virtual network is not broken, for example with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
+ "text": "Do not disrupt control-plane communication for Azure PaaS services injected into a virtual networks, such as with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
"waf": "Security",
"service": "App Gateway",
"guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "id": "D07.22",
- "ammp": true,
+ "id": "D07.23",
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services"
@@ -1518,7 +1644,7 @@
"id": "D08.02",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features"
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview"
},
{
"category": "Network Topology and Connectivity",
@@ -1530,7 +1656,7 @@
"id": "D08.03",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features"
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview"
},
{
"category": "Network Topology and Connectivity",
@@ -1540,10 +1666,10 @@
"service": "VNet",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
"id": "D08.04",
- "severity": "Medium",
+ "severity": "High",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features"
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview"
},
{
"category": "Network Topology and Connectivity",
@@ -1555,17 +1681,16 @@
"id": "D08.05",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features"
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Segmentation",
- "text": "Use at least a /27 prefix for your Gateway subnets",
+ "text": "Use at least a /27 prefix for your Gateway subnets.",
"waf": "Security",
"service": "ExpressRoute",
"guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
"id": "D09.01",
- "ammp": true,
"severity": "High",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway"
@@ -1578,7 +1703,7 @@
"service": "NSG",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"id": "D09.02",
- "severity": "Medium",
+ "severity": "High",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags"
},
@@ -1602,21 +1727,10 @@
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"id": "D09.04",
"severity": "Medium",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Segmentation",
- "text": "The application team should use application security groups at the subnet-level NSGs to help protect multi-tier VMs within the landing zone.",
- "waf": "Security",
- "service": "NSG",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "id": "D09.05",
- "severity": "Medium",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "Segmentation",
@@ -1624,7 +1738,7 @@
"waf": "Security",
"service": "NSG",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "id": "D09.06",
+ "id": "D09.05",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works"
@@ -1636,19 +1750,20 @@
"waf": "Security",
"service": "NSG",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "id": "D09.07",
+ "id": "D09.06",
"severity": "Medium",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works"
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Segmentation",
- "text": "Consider the limit of NSG rules per NSG (1000).",
+ "text": "Do not implement more than 900 NSG rules per NSG, due to the limit of 1000 rules.",
"waf": "Reliability",
"service": "NSG",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "id": "D09.08",
+ "id": "D09.07",
"severity": "Medium",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
@@ -1657,7 +1772,7 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "Virtual WAN",
- "text": "Consider Virtual WAN for simplified Azure networking management, and make sure your scenario is explicitly described in the list of Virtual WAN routing designs",
+ "text": "Use Virtual WAN if your scenario is explicitly described in the list of Virtual WAN routing designs.",
"waf": "Operations",
"service": "VWAN",
"guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
@@ -1675,42 +1790,33 @@
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
"id": "D10.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Virtual WAN",
- "text": "Follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network",
- "waf": "Performance",
- "service": "VWAN",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "id": "D10.03",
- "severity": "Low",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Virtual WAN",
- "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs",
+ "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs.",
"waf": "Security",
"service": "VWAN",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "id": "D10.04",
+ "id": "D10.03",
"severity": "Medium",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about"
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Virtual WAN",
- "text": "Ensure that the network architecture is within the Azure Virtual WAN limits.",
+ "text": "Ensure that your virtual WAN network architecture aligns to an identified architecture scenario.",
"waf": "Reliability",
"service": "VWAN",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "id": "D10.05",
+ "id": "D10.04",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits"
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Network Topology and Connectivity",
@@ -1719,20 +1825,23 @@
"waf": "Operations",
"service": "VWAN",
"guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "id": "D10.06",
+ "id": "D10.05",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights"
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Virtual WAN",
- "text": "Make sure that your IaC deployments does not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
+ "text": "Do not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
"waf": "Reliability",
"service": "VWAN",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "id": "D10.07",
+ "id": "D10.06",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan"
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Network Topology and Connectivity",
@@ -1741,32 +1850,36 @@
"waf": "Reliability",
"service": "VWAN",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "id": "D10.08",
+ "id": "D10.07",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference"
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Virtual WAN",
- "text": "Make sure that your IaC deployments are configuring label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
+ "text": "Configure label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
"waf": "Reliability",
"service": "VWAN",
"guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "id": "D10.09",
+ "id": "D10.08",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels"
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "Virtual WAN",
- "text": "Assign enough IP space to virtual hubs, ideally a /23 prefix.",
+ "text": "Assign at least a /23 prefix to virtual hubs to ensure enough IP space is available.",
"waf": "Reliability",
"service": "VWAN",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
- "id": "D10.10",
- "ammp": true,
+ "id": "D10.09",
"severity": "High",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation"
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/"
},
{
"category": "Governance",
@@ -1776,9 +1889,9 @@
"service": "Policy",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"id": "E01.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
@@ -1789,18 +1902,20 @@
"guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
"id": "E01.03",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/"
},
{
"category": "Governance",
"subcategory": "Governance",
- "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes",
+ "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes.",
"waf": "Security",
"service": "Policy",
"guid": "223ace8c-b123-408c-a501-7f154e3ab369",
"id": "E01.04",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
@@ -1810,19 +1925,21 @@
"service": "Policy",
"guid": "3829e7e3-1618-4368-9a04-77a209945bda",
"id": "E01.05",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
"subcategory": "Governance",
- "text": "Use Azure Policy to control which services users can provision at the subscription/management group level",
+ "text": "Use Azure Policy to control which services users can provision at the subscription/management group level.",
"waf": "Security",
"service": "Policy",
"guid": "43334f24-9116-4341-a2ba-527526944008",
"id": "E01.06",
"severity": "Low",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services"
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
@@ -1832,8 +1949,9 @@
"service": "Policy",
"guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
"id": "E01.07",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
@@ -1845,7 +1963,8 @@
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"id": "E01.08",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy"
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
@@ -1856,12 +1975,13 @@
"guid": "19048384-5c98-46cb-8913-156a12476e49",
"id": "E01.09",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/"
},
{
"category": "Governance",
"subcategory": "Governance",
- "text": "If any data sovereignty requirements exist, Azure Policies can be deployed to enforce them",
+ "text": "If any data sovereignty requirements exist, Azure Policies should be deployed to enforce them.",
"waf": "Security",
"service": "Policy",
"guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
@@ -1873,7 +1993,7 @@
{
"category": "Governance",
"subcategory": "Governance",
- "text": "For Sovereign Landing Zone, sovereignty policy baseline' policy initiative is deployed and and assigned at correct MG level.",
+ "text": "For Sovereign Landing Zone, deploy sovereignty policy baseline and assign at correct management group level.",
"waf": "Security",
"service": "Policy",
"guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
@@ -1884,7 +2004,7 @@
{
"category": "Governance",
"subcategory": "Governance",
- "text": "For Sovereign Landing Zone, sovereign Control objectives to policy mapping' is documented.",
+ "text": "For Sovereign Landing Zone, document Sovereign Control objectives to policy mapping.",
"waf": "Security",
"service": "Policy",
"guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
@@ -1895,12 +2015,13 @@
{
"category": "Governance",
"subcategory": "Governance",
- "text": "For Sovereign Landing Zone, process is in place for CRUD of 'Sovereign Control objectives to policy mapping'.",
+ "text": "For Sovereign Landing Zone, ensure process is in place for management of 'Sovereign Control objectives to policy mapping'.",
"waf": "Security",
"service": "Policy",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
"id": "E01.13",
- "severity": "Medium"
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives"
},
{
"category": "Governance",
@@ -1910,7 +2031,8 @@
"guid": "29fd366b-a180-452b-9bd7-954b7700c667",
"id": "E02.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json"
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/"
},
{
"category": "Management",
@@ -1922,6 +2044,18 @@
"id": "F01.01",
"severity": "Medium",
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions"
+ },
+ {
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "text": "Decide whether to use a single Azure Monitor Logs workspace for all regions or to create multiple workspaces to cover various geographical regions. Each approach has advantages and disadvantages, including potential cross-region networking charges",
+ "waf": "Reliability",
+ "service": "Monitor",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "id": "F01.02",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment"
},
{
@@ -1932,7 +2066,7 @@
"service": "Monitor",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"id": "F01.03",
- "severity": "Medium",
+ "severity": "High",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work"
},
@@ -1943,7 +2077,7 @@
"waf": "Operations",
"service": "VM",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "id": "F01.05",
+ "id": "F01.04",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview"
@@ -1955,10 +2089,10 @@
"waf": "Operations",
"service": "VM",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "id": "F01.06",
+ "id": "F01.05",
"severity": "Medium",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations "
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations"
},
{
"category": "Management",
@@ -1967,7 +2101,7 @@
"waf": "Operations",
"service": "VM",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "id": "F01.07",
+ "id": "F01.06",
"severity": "Medium",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations "
@@ -1975,11 +2109,11 @@
{
"category": "Management",
"subcategory": "Monitoring",
- "text": "Use Network Watcher to proactively monitor traffic flows",
+ "text": "Use Network Watcher to proactively monitor traffic flows.",
"waf": "Operations",
"service": "Network Watcher",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "id": "F01.08",
+ "id": "F01.07",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview"
@@ -1990,7 +2124,7 @@
"text": "Use resource locks to prevent accidental deletion of critical shared services.",
"waf": "Operations",
"guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "id": "F01.09",
+ "id": "F01.08",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json"
@@ -2001,9 +2135,10 @@
"text": "Use deny policies to supplement Azure role assignments. The combination of deny policies and Azure role assignments ensures the appropriate guardrails are in place to enforce who can deploy and configure resources and what resources they can deploy and configure.",
"waf": "Operations",
"guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "id": "F01.10",
+ "id": "F01.09",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal"
},
{
"category": "Management",
@@ -2011,19 +2146,21 @@
"text": "Include service and resource health events as part of the overall platform monitoring solution. Tracking service and resource health from the platform perspective is an important component of resource management in Azure.",
"waf": "Operations",
"guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "id": "F01.11",
+ "id": "F01.10",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal"
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/"
},
{
"category": "Management",
"subcategory": "Monitoring",
- "text": "Include alerts and action groups as part of the Azure Service Health platform to ensure that alerts or issues can be actioned",
+ "text": "Include alerts and action groups as part of the Azure Service Health platform to ensure that alerts or issues can be actioned.",
"waf": "Operations",
"guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "id": "F01.12",
+ "id": "F01.11",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules"
},
{
"category": "Management",
@@ -2031,9 +2168,10 @@
"text": "Don't send raw log entries back to on-premises monitoring systems. Instead, adopt a principle that data born in Azure stays in Azure. If on-premises SIEM integration is required, then send critical alerts instead of logs.",
"waf": "Operations",
"guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "id": "F01.13",
+ "id": "F01.12",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard"
+ "link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/"
},
{
"category": "Management",
@@ -2042,9 +2180,10 @@
"waf": "Operations",
"service": "Monitor",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "id": "F01.15",
+ "id": "F01.13",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/"
},
{
"category": "Management",
@@ -2052,9 +2191,10 @@
"text": "When necessary, use shared storage accounts within the landing zone for Azure diagnostic extension log storage.",
"waf": "Operations",
"guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "id": "F01.16",
+ "id": "F01.14",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/"
},
{
"category": "Management",
@@ -2063,19 +2203,21 @@
"waf": "Operations",
"service": "Monitor",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "id": "F01.17",
+ "id": "F01.15",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/"
},
{
"category": "Management",
"subcategory": "Monitoring",
- "text": "Ensure that monitoring requirements have been assessed and that appropriate data collection and alerting configurations are applied",
+ "text": "Ensure that monitoring requirements have been assessed and that appropriate data collection and alerting configurations are applied.",
"waf": "Operations",
"guid": "859c3900-4514-41eb-b010-475d695abd74",
- "id": "F01.18",
+ "id": "F01.16",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring"
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/"
},
{
"category": "Management",
@@ -2084,46 +2226,72 @@
"waf": "Operations",
"service": "Monitor",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "id": "F01.19",
+ "id": "F01.17",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings"
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/"
},
{
"category": "Management",
"subcategory": "Monitoring",
- "text": "Establish monitoring for platform components of your landing zone, AMBA is a framework solution that is available and provides an easy way to scale alerting by using Azure Policy",
+ "text": "Deploy AMBA to establish monitoring for platform components of your landing zone - AMBA is a framework solution that is available and provides an easy way to scale alerting by using Azure Policy.",
"waf": "Operations",
"guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "id": "F01.19",
+ "id": "F01.18",
"severity": "Medium",
"training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor"
},
+ {
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "text": "Use Azure Monitoring Agent (AMA). The Log Analytics agent is deprecated since August 31,2024",
+ "waf": "Operations",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "id": "F01.19",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation"
+ },
{
"category": "Management",
"subcategory": "Data Protection",
- "text": "Consider cross-region replication in Azure for BCDR with paired regions",
+ "text": "Ensure that storage accounts are zone or region redundant, Redundancy ensures storage accounts meet availability and durability targets amidst failures, weighing lower costs against higher availability. Locally redundant storage offers the least durability at the lowest cost.",
+ "waf": "Reliability",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "id": "F01.20",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy"
+ },
+ {
+ "category": "Management",
+ "subcategory": "Data Protection",
+ "text": "Enable cross-region replication in Azure for BCDR with paired regions.",
"waf": "Reliability",
"guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
"id": "F02.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure"
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/"
},
{
"category": "Management",
"subcategory": "Data Protection",
- "text": "When using Azure Backup, consider the different backup types (GRS, ZRS & LRS) as the default setting is GRS",
+ "text": "When using Azure Backup, use the correct backup types (GRS, ZRS & LRS) for your backup, as the default setting is GRS.",
"waf": "Reliability",
"service": "Backup",
"guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
"id": "F02.02",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy"
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/"
},
{
"category": "Management",
"subcategory": "Operational compliance",
- "text": "Use Azure policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "text": "Use Azure guest policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
"waf": "Security",
"service": "VM",
"guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
@@ -2136,12 +2304,13 @@
"subcategory": "Operational compliance",
"text": "Monitor VM security configuration drift via Azure Policy.",
"service": "VM",
- "description": "Azure Policy's guest configuration features can audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
+ "description": "Use Azure Policy's guest configuration features to audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
"waf": "Security",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"id": "F03.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/"
},
{
"category": "Management",
@@ -2152,17 +2321,19 @@
"guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
"id": "F04.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview"
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/"
},
{
"category": "Management",
"subcategory": "Protect and Recover",
- "text": "Ensure to use and test native PaaS service disaster recovery capabilities.",
+ "text": "Use native PaaS service disaster recovery capabilities. Perform failover testing with these capabilities.",
"waf": "Operations",
"guid": "b2ab13ad-a6e5-45d7-b8a2-adb117d6326a",
"id": "F04.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery"
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/"
},
{
"category": "Management",
@@ -2173,42 +2344,8 @@
"guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
"id": "F04.03",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview"
- },
- {
- "category": "Management",
- "subcategory": "Fault Tolerance",
- "text": "Leverage Availability Zones for your VMs in regions where they are supported.",
- "waf": "Reliability",
- "service": "VM",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "id": "F05.01",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview"
- },
- {
- "category": "Management",
- "subcategory": "Fault Tolerance",
- "text": "Avoid running a production workload on a single VM.",
- "waf": "Reliability",
- "service": "VM",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "id": "F05.02",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability"
- },
- {
- "category": "Management",
- "subcategory": "Fault Tolerance",
- "text": "Azure Load Balancer and Application Gateway distribute incoming network traffic across multiple resources.",
- "waf": "Reliability",
- "service": "VM",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "id": "F05.03",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview"
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/"
},
{
"category": "Management",
@@ -2218,9 +2355,9 @@
"service": "WAF",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"id": "F06.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs"
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/"
},
{
"category": "Management",
@@ -2231,7 +2368,8 @@
"guid": "7f408960-c626-44cb-a018-347c8d790cdf",
"id": "F06.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel"
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/"
},
{
"category": "Security",
@@ -2241,29 +2379,31 @@
"guid": "b86ad884-08e3-4727-94b8-75ba18f20459",
"id": "G01.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/security/benchmark/azure/security-control-incident-response"
+ "link": "https://learn.microsoft.com/security/benchmark/azure/security-control-incident-response",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/"
},
{
"category": "Security",
"subcategory": "Access control",
- "text": "Implement a zero-trust approach for access to the Azure platform, where appropriate.",
+ "text": "Apply a zero-trust approach for access to the Azure platform.",
"waf": "Security",
"guid": "01365d38-e43f-49cc-ad86-8266abca264f",
"id": "G01.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/"
},
{
"category": "Security",
"subcategory": "Encryption and keys",
- "text": "Use Azure Key Vault to store your secrets and credentials",
+ "text": "Use Azure Key Vault to store your secrets and credentials.",
"waf": "Security",
"service": "Key Vault",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"id": "G02.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/"
},
{
"category": "Security",
@@ -2275,7 +2415,8 @@
"id": "G02.02",
"severity": "Medium",
"graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/"
},
{
"category": "Security",
@@ -2286,7 +2427,8 @@
"guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
"id": "G02.03",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/"
},
{
"category": "Security",
@@ -2297,7 +2439,8 @@
"guid": "dc055bcf-619e-48a1-9f98-879525d62688",
"id": "G02.04",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/"
},
{
"category": "Security",
@@ -2308,7 +2451,8 @@
"guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
"id": "G02.05",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/"
},
{
"category": "Security",
@@ -2319,7 +2463,8 @@
"guid": "913156a1-2476-4e49-b541-acdce979377b",
"id": "G02.06",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/"
},
{
"category": "Security",
@@ -2330,7 +2475,8 @@
"guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
"id": "G02.07",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/"
},
{
"category": "Security",
@@ -2341,7 +2487,8 @@
"guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
"id": "G02.08",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/"
},
{
"category": "Security",
@@ -2352,7 +2499,8 @@
"guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
"id": "G02.09",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/"
},
{
"category": "Security",
@@ -2362,7 +2510,8 @@
"guid": "16183687-a047-47a2-8994-5bda43334f24",
"id": "G02.10",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest"
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/"
},
{
"category": "Security",
@@ -2373,7 +2522,8 @@
"guid": "91163418-2ba5-4275-8694-4008be7d7e48",
"id": "G02.11",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/"
},
{
"category": "Security",
@@ -2384,7 +2534,8 @@
"guid": "25d62688-6d70-4ba6-a97b-e99519048384",
"id": "G02.12",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/"
},
{
"category": "Security",
@@ -2395,7 +2546,8 @@
"guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
"id": "G02.13",
"severity": "Medium",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management"
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/"
},
{
"category": "Security",
@@ -2406,7 +2558,8 @@
"guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
"id": "G03.01",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports"
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/"
},
{
"category": "Security",
@@ -2416,7 +2569,8 @@
"guid": "4e3ab369-3829-4e7e-9161-83687a0477a2",
"id": "G03.02",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/"
},
{
"category": "Security",
@@ -2426,9 +2580,9 @@
"service": "Defender",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"id": "G03.03",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management"
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/"
},
{
"category": "Security",
@@ -2438,9 +2592,9 @@
"service": "Defender",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"id": "G03.04",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan"
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/"
},
{
"category": "Security",
@@ -2450,9 +2604,9 @@
"service": "Defender",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"id": "G03.05",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription"
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/"
},
{
"category": "Security",
@@ -2462,9 +2616,9 @@
"service": "VM",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"id": "G03.06",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection"
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/"
},
{
"category": "Security",
@@ -2475,7 +2629,8 @@
"guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
"id": "G03.07",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/security-center/"
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/"
},
{
"category": "Security",
@@ -2486,51 +2641,65 @@
"guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
"id": "G03.08",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/"
},
{
"category": "Security",
"subcategory": "Operations",
- "text": "For Sovereign Landing Zone, transparency logs is enabled on the Entra ID tenant.",
+ "text": "Centralized threat detection with correlated logs - consolidate security data in a central location where it can be correlated across various services via SIEM (security information and event management)",
"waf": "Security",
"service": "Entra",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
"id": "G03.09",
+ "severity": "High",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Operations",
+ "text": "For Sovereign Landing Zone, enable transparancy logs on the Entra ID tenant.",
+ "waf": "Security",
+ "service": "Entra",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "id": "G03.10",
"severity": "Medium",
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs"
},
{
"category": "Security",
"subcategory": "Operations",
- "text": "For Sovereign Landing Zone, customer Lockbox is enabled on the Entra ID tenant.",
+ "text": "For Sovereign Landing Zone, enable customer Lockbox on the Entra ID tenant.",
"waf": "Security",
"service": "Entra",
"guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "id": "G03.10",
+ "id": "G03.11",
"severity": "Medium",
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview"
},
{
"category": "Security",
"subcategory": "Operations",
- "text": "Use an Azure Event Grid-based solution for log-oriented, real-time alerts",
+ "text": "Use an Azure Event Grid-based solution for log-oriented, real-time alerts.",
"waf": "Security",
"guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "id": "G03.11",
+ "id": "G03.12",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security"
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/"
},
{
"category": "Security",
"subcategory": "Overview",
- "text": "Secure transfer to storage accounts should be enabled",
+ "text": "Enable secure transfer to storage accounts.",
"waf": "Security",
"service": "Storage",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"id": "G04.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer"
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/"
},
{
"category": "Security",
@@ -2540,7 +2709,6 @@
"service": "Storage",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"id": "G04.02",
- "ammp": true,
"severity": "High",
"link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection"
},
@@ -2551,14 +2719,14 @@
"waf": "Security",
"guid": "6f704104-85c1-441f-96d3-c9819911645e",
"id": "G05.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning"
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/"
},
{
"category": "Security",
"subcategory": "Service enablement framework",
- "text": "Plan how new azure services will be implemented",
+ "text": "Plan how new azure services will be implemented.",
"waf": "Security",
"guid": "9a19bf39-c95d-444c-9c89-19ca1f6d5215",
"id": "G06.01",
@@ -2568,7 +2736,7 @@
{
"category": "Security",
"subcategory": "Service enablement framework",
- "text": "Plan how service request will be fulfilled for Azure services",
+ "text": "Plan how service request will be fulfilled for Azure services.",
"waf": "Security",
"guid": "ae514b93-3d45-485e-8112-9bd7ba012f7b",
"id": "G06.02",
@@ -2582,9 +2750,9 @@
"waf": "Operations",
"guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
"id": "H01.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/"
},
{
"category": "Platform Automation and DevOps",
@@ -2594,7 +2762,8 @@
"guid": "634146bf-7085-4419-a7b5-f96d2726f6da",
"id": "H01.02",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/"
},
{
"category": "Platform Automation and DevOps",
@@ -2604,7 +2773,8 @@
"guid": "a9e65070-c59e-4112-8bf6-c11364d4a2a5",
"id": "H01.03",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/"
},
{
"category": "Platform Automation and DevOps",
@@ -2613,9 +2783,9 @@
"waf": "Operations",
"guid": "165eb5e9-b434-448a-9e24-178632186212",
"id": "H01.04",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code"
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/"
},
{
"category": "Platform Automation and DevOps",
@@ -2625,7 +2795,8 @@
"guid": "0cadb8c7-8fa5-4fbf-8f39-d1fadb3b0460",
"id": "H01.05",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/"
},
{
"category": "Platform Automation and DevOps",
@@ -2635,14 +2806,14 @@
"service": "Key Vault",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"id": "H01.06",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/"
},
{
"category": "Platform Automation and DevOps",
"subcategory": "DevOps Team Topologies",
- "text": "Implement automation for new landing zone for applications and workloads through subscription vending",
+ "text": "Implement automation for new landing zone for applications and workloads through subscription vending.",
"waf": "Operations",
"guid": "a52e0c98-76b9-4a09-a1c9-6b2babf22ac4",
"id": "H01.07",
@@ -2656,9 +2827,9 @@
"waf": "Operations",
"guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
"id": "H02.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/"
},
{
"category": "Platform Automation and DevOps",
@@ -2668,7 +2839,8 @@
"guid": "c7245dd4-af8a-403a-8bb7-890c1a7cfa9d",
"id": "H02.02",
"severity": "Low",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/"
},
{
"category": "Platform Automation and DevOps",
@@ -2678,7 +2850,8 @@
"guid": "12aeea20-9165-4b3e-bdf2-6795fcd3cdbe",
"id": "H02.03",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/"
},
{
"category": "Platform Automation and DevOps",
@@ -2688,7 +2861,8 @@
"guid": "2676ae46-65ca-444e-8695-fdddeace4cb1",
"id": "H02.04",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/"
},
{
"category": "Platform Automation and DevOps",
@@ -2697,9 +2871,9 @@
"waf": "Operations",
"guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
"id": "H03.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/"
},
{
"category": "Platform Automation and DevOps",
@@ -2708,9 +2882,9 @@
"waf": "Operations",
"guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
"id": "H04.01",
- "ammp": true,
"severity": "High",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/"
}
],
"categories": [
@@ -2801,6 +2975,6 @@
"name": "Azure Landing Zone Review",
"state": "GA",
"waf": "all",
- "timestamp": "June 17, 2024"
+ "timestamp": "September 23, 2024"
}
-}
+}
\ No newline at end of file
diff --git a/checklists/alz_checklist.es.json b/checklists/alz_checklist.es.json
index 18aa18a44..fbac4c6a9 100644
--- a/checklists/alz_checklist.es.json
+++ b/checklists/alz_checklist.es.json
@@ -1,13 +1,13 @@
{
"categories": [
{
- "name": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra"
+ "name": "Facturación de Azure y inquilinos de Id. de Microsoft Entra"
},
{
"name": "Gestión de identidades y accesos"
},
{
- "name": "Topología y conectividad de red"
+ "name": "Topología de red y conectividad"
},
{
"name": "Seguridad"
@@ -27,7 +27,19 @@
],
"items": [
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Topología de red y conectividad",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "id": "",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "Medio",
+ "subcategory": "Cubo y radio",
+ "text": "Implemente los recursos de conectividad de la zona de aterrizaje de Azure en varias regiones, de modo que pueda admitir rápidamente zonas de aterrizaje de aplicaciones de varias regiones y escenarios de recuperación ante desastres.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
"id": "A01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
@@ -35,143 +47,154 @@
"severity": "Medio",
"subcategory": "Inquilinos de Microsoft Entra ID",
"text": "Use un inquilino de Entra para administrar los recursos de Azure, a menos que tenga un requisito normativo o empresarial claro para varios inquilinos.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "Operaciones"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
"id": "A01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
"service": "Entra",
"severity": "Bajo",
"subcategory": "Inquilinos de Microsoft Entra ID",
- "text": "Asegúrese de que tiene un enfoque de automatización multiinquilino para administrar los inquilinos de Microsoft Entra ID",
+ "text": "Use el enfoque de automatización multiinquilino para administrar los inquilinos de identificador de Microsoft Entra.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "Operaciones"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
"id": "A01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "Bajo",
+ "severity": "Alto",
"subcategory": "Inquilinos de Microsoft Entra ID",
- "text": "Aprovechamiento de Azure Lighthouse para la administración multiinquilino",
+ "text": "Use Azure Lighthouse para la administración de varios inquilinos con los mismos identificadores.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "Operaciones"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
"id": "A02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Proveedor de soluciones en la nube",
- "text": "Asegúrese de que el asociado usa Azure Lighthouse para administrar el inquilino",
+ "text": "Si concede a un asociado acceso para administrar el inquilino, use Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01",
"id": "A02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
"severity": "Bajo",
"subcategory": "Proveedor de soluciones en la nube",
- "text": "Analizar la solicitud de soporte técnico y el proceso de escalamiento con el socio de CSP",
+ "text": "Si tiene un asociado de CSP, defina y documente la solicitud de soporte técnico y el proceso de escalamiento.",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "32952499-58c8-4e6f-ada5-972e67893d55",
"id": "A02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Medio",
"subcategory": "Proveedor de soluciones en la nube",
- "text": "Configuración de informes de costos y vistas con Azure Cost Management",
+ "text": "Configure informes de costos y vistas con Azure Cost Management.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "685cb4f2-ac9c-4b19-9167-993ed0b32415",
"id": "A03.01",
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"severity": "Medio",
"subcategory": "Contrato Enterprise",
- "text": "Configurar contactos de notificación en un buzón de grupo",
+ "text": "Configurar contactos de notificación en un buzón de grupo.",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "12cd499f-96e2-4e41-a243-231fb3245a1c",
"id": "A03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "Bajo",
"subcategory": "Contrato Enterprise",
"text": "Use departamentos y cuentas para asignar la estructura de su organización a su jerarquía de inscripción, lo que puede ayudar a separar la facturación.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
"id": "A03.04",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
"severity": "Medio",
"subcategory": "Contrato Enterprise",
- "text": "Habilite los cargos de visualización de DA y los cargos de vista de AO en sus inscripciones de EA para permitir que los usuarios con las permanentes correctas revisen los datos de costos y facturación.",
+ "text": "Habilite tanto los cargos de visualización de DA como los cargos de vista de AO en sus inscripciones de EA para permitir que los usuarios con las permanentes correctas revisen los datos de costos y facturación.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal",
"waf": "Seguridad"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "5cf9f485-2784-49b3-9824-75d9b8bdb57b",
"id": "A03.05",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "Bajo",
"subcategory": "Contrato Enterprise",
- "text": "Utilice las suscripciones de desarrollo y pruebas empresariales para reducir los costos de las cargas de trabajo que no son de producción",
+ "text": "Uso de suscripciones de desarrollo y pruebas empresariales para reducir los costos de las cargas de trabajo que no son de producción.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c",
"id": "A04.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Bajo",
"subcategory": "Contrato de cliente de Microsoft",
- "text": "Configurar el correo electrónico de contacto de notificación de la cuenta de facturación del acuerdo",
+ "text": "Configurar el correo electrónico de contacto de notificación de la cuenta de facturación del acuerdo.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "90e87802-602f-4dfb-acea-67c60689f1d7",
"id": "A04.02",
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
"severity": "Bajo",
"subcategory": "Contrato de cliente de Microsoft",
- "text": "Utilice las secciones Perfiles de facturación y Factura para estructurar la facturación de los acuerdos y lograr una administración eficaz de los costos",
+ "text": "Utilice las secciones Perfiles de facturación y Factura para estructurar la facturación de sus acuerdos y lograr una administración de costos eficaz.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "e81a73f0-84c4-4641-b406-14db3b4d1f50",
"id": "A04.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Bajo",
"subcategory": "Contrato de cliente de Microsoft",
- "text": "Usar el plan de Microsoft Azure para la oferta de desarrollo y pruebas para reducir los costos de las cargas de trabajo que no son de producción",
+ "text": "Utilice la oferta de plan de desarrollo y pruebas de Microsoft Azure para reducir los costos de las cargas de trabajo que no son de producción.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio",
"waf": "Costar"
},
{
- "category": "Inquilinos de Facturación de Azure y de Id. de Microsoft Entra",
+ "category": "Facturación de Azure y inquilinos de Id. de Microsoft Entra",
"guid": "ae757485-92a4-482a-8bc9-eefe6f5b5ec3",
"id": "A04.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Medio",
"subcategory": "Contrato de cliente de Microsoft",
- "text": "Audite periódicamente las asignaciones de roles de RBAC de facturación del acuerdo para revisar quién tiene acceso a su cuenta de facturación de MCA",
+ "text": "Defina y documente un proceso para auditar periódicamente las asignaciones de roles de RBAC de facturación del acuerdo para revisar quién tiene acceso a su cuenta de facturación de MCA.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles",
"waf": "Costar"
},
{
- "ammp": true,
"category": "Gestión de identidades y accesos",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"id": "B03.01",
@@ -184,25 +207,23 @@
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Gestión de identidades y accesos",
"guid": "4348bf81-7573-4512-8f46-9061cc198fea",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
"severity": "Alto",
"subcategory": "Id. de Microsoft Entra e identidad híbrida",
- "text": "Use identidades administradas en lugar de entidades de servicio para la autenticación en los servicios de Azure. Puede comprobar si hay entidades de servicio existentes a través de Entra ID > Iniciar sesión Registros > Inicios de sesión de entidad de servicio.",
+ "text": "Use identidades administradas en lugar de entidades de servicio para la autenticación en los servicios de Azure. Puede comprobar las entidades de servicio existentes a través de Entra ID > Iniciar sesión Registros > Inicios de sesión de Entidad de servicio.",
"training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Gestión de identidades y accesos",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "Alto",
+ "severity": "Medio",
"subcategory": "Identidad",
"text": "Utilice solo el tipo de autenticación Cuenta profesional o educativa para todos los tipos de cuenta. Evite usar la cuenta de Microsoft",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
@@ -216,7 +237,7 @@
"service": "Entra",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Utilice solo grupos para asignar permisos. Agregue grupos locales al grupo solo de ID de Entra si ya existe un sistema de administración de grupos.",
+ "text": "Utilice solo grupos para asignar permisos. Agregue grupos locales al grupo Solo ID de Entra si ya hay un sistema de administración de grupos en su lugar.",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Seguridad"
},
@@ -226,14 +247,13 @@
"id": "B03.04",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "Bajo",
+ "severity": "Alto",
"subcategory": "Identidad",
- "text": "Aplicación de directivas de acceso condicional de Microsoft Entra ID para cualquier usuario con derechos en entornos de Azure",
+ "text": "Aplique directivas de acceso condicional de identificador de Microsoft Entra para cualquier usuario con derechos en entornos de Azure.",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Gestión de identidades y accesos",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"id": "B03.05",
@@ -241,8 +261,8 @@
"service": "Entra",
"severity": "Alto",
"subcategory": "Identidad",
- "text": "Aplicación de la autenticación multifactor para cualquier usuario con derechos en los entornos de Azure",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Aplique la autenticación multifactor para cualquier usuario con derechos sobre los entornos de Azure.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "Seguridad"
},
{
@@ -250,9 +270,9 @@
"guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
"id": "B03.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Identidad",
- "text": "Aplique responsabilidades centralizadas y delegadas para administrar los recursos implementados dentro de la zona de aterrizaje, en función de los requisitos de rol y seguridad",
+ "text": "Aplique responsabilidades centralizadas y delegadas para administrar los recursos implementados dentro de la zona de aterrizaje, en función de los requisitos de rol y seguridad.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "Seguridad"
},
@@ -264,7 +284,7 @@
"service": "Entra",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Aplique la administración de identidades privilegiadas (PIM) de Microsoft Entra ID para establecer el acceso permanente cero y los privilegios mínimos",
+ "text": "Aplique la administración de identidades privilegiadas (PIM) de Microsoft Entra ID para establecer un acceso permanente cero y privilegios mínimos.",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Seguridad"
},
@@ -273,89 +293,116 @@
"guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
"id": "B03.09",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
+ "severity": "Alto",
+ "subcategory": "Identidad",
+ "text": "Al implementar controladores de dominio de Active Directory, use una ubicación con zonas de disponibilidad e implemente al menos dos máquinas virtuales en estas zonas. Si no está disponible, impleméntelo en un conjunto de disponibilidad.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de identidades y accesos",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "id": "B03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Al implementar Active Directory en Windows Server, use una ubicación con zonas de disponibilidad e implemente al menos dos máquinas virtuales en estas zonas. Si no está disponible, impleméntelo en un conjunto de disponibilidad",
+ "text": "Implemente los recursos de identidad de la zona de aterrizaje de Azure en varias regiones. Si usa controladores de dominio, asocie cada región con un sitio de Active Directory para que los recursos puedan resolverse en sus controladores de dominio locales.",
"training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"waf": "Fiabilidad"
},
{
"category": "Gestión de identidades y accesos",
"guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "id": "B03.10",
+ "id": "B03.11",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Use roles RBAC personalizados de Azure para los siguientes roles clave a fin de proporcionar acceso específico en toda la zona de disponibilidad general: propietario de la plataforma Azure, administración de red, operaciones de seguridad, propietario de la suscripción, propietario de la aplicación. Alinea estos roles con los equipos y las responsabilidades dentro de tu empresa.",
+ "text": "Use roles de RBAC personalizados de Azure para los siguientes roles clave a fin de proporcionar acceso específico en toda la ALZ: propietario de la plataforma Azure, administración de red, operaciones de seguridad, propietario de la suscripción, propietario de la aplicación. Alinea estos roles con los equipos y las responsabilidades dentro de tu empresa.",
"training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "Seguridad"
},
{
+ "category": "Gestión de identidades y accesos",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "id": "B03.10",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "id": "B03.12",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "Medio",
- "subcategory": "Gestión de identidades y accesos",
- "text": "Si planea cambiar de servicios de dominio de Active Directory a servicios de dominio de Entra, evalúe la compatibilidad de todas las cargas de trabajo",
+ "subcategory": "Identidad",
+ "text": "Si planea cambiar de Servicios de dominio de Active Directory a Servicios de dominio Entra, evalúe la compatibilidad de todas las cargas de trabajo.",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "Seguridad"
},
+ {
+ "category": "Gestión de identidades y accesos",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "id": "B03.13",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "Medio",
+ "subcategory": "Identidad",
+ "text": "Al usar Microsoft Entra Domain Services, use conjuntos de réplicas. Los conjuntos de réplicas mejorarán la resistencia del dominio administrado y le permitirán implementarlo en regiones adicionales. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "Fiabilidad"
+ },
{
"category": "Gestión de identidades y accesos",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "id": "B03.11",
+ "id": "B03.14",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Integre los registros de identificador de Microsoft Entra con Azure Monitor central de la plataforma. Azure Monitor permite una única fuente de información en torno a los datos de registro y supervisión en Azure, lo que ofrece a las organizaciones opciones nativas en la nube para cumplir los requisitos relacionados con la recopilación y retención de registros.",
+ "text": "Integre los registros de identificador de Microsoft Entra con Azure Monitor central de la plataforma. Azure Monitor permite una única fuente de información sobre los datos de registro y supervisión en Azure, lo que proporciona a las organizaciones opciones nativas en la nube para cumplir los requisitos relacionados con la recopilación y retención de registros.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "Seguridad"
},
{
"ammp": true,
"category": "Gestión de identidades y accesos",
"guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "id": "B03.12",
+ "id": "B03.15",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "Alto",
"subcategory": "Identidad",
- "text": "Implemente un acceso de emergencia o cuentas de emergencia para evitar el bloqueo de cuentas en todo el inquilino",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "Implemente un acceso de emergencia o cuentas de emergencia para evitar el bloqueo de cuentas en todo el inquilino. MFA se activará de forma predeterminada para todos los usuarios en octubre de 2024. Recomendamos actualizar estas cuentas para usar la clave de paso (FIDO2) o configurar la autenticación basada en certificados para MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "Seguridad"
},
{
"category": "Gestión de identidades y accesos",
"guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "id": "B03.13",
+ "id": "B03.16",
"link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"severity": "Medio",
"subcategory": "Id. de Microsoft Entra",
- "text": "Al implementar Microsoft Entra Connect, aproveche un servidor de ensayo para alta disponibilidad o recuperación ante desastres",
+ "text": "Al implementar Microsoft Entra Connect, use un servidor de ensayo para alta disponibilidad o recuperación ante desastres.",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies",
"waf": "Fiabilidad"
},
{
"category": "Gestión de identidades y accesos",
"guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "id": "B03.14",
+ "id": "B03.17",
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Evite el uso de cuentas sincronizadas locales para las asignaciones de roles de identificador de Microsoft Entra.",
+ "text": "No use cuentas sincronizadas locales para las asignaciones de roles de identificador de Microsoft Entra, a menos que tenga un escenario que lo requiera específicamente.",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "Seguridad"
},
{
"category": "Gestión de identidades y accesos",
"guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "id": "B03.15",
+ "id": "B03.18",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Cuando sea necesario, use Microsoft Entra ID Application Proxy para proporcionar a los usuarios remotos acceso seguro y autenticado a las aplicaciones internas (hospedadas en la nube o en el entorno local).",
+ "text": "Al usar el proxy de aplicación de Microsoft Entra ID para proporcionar a los usuarios remotos acceso a las aplicaciones, adminístrelo como un recurso de plataforma, ya que solo puede tener una instancia por inquilino.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Seguridad"
},
@@ -363,10 +410,10 @@
"category": "Gestión de identidades y accesos",
"guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
"id": "B04.01",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
- "severity": "Medio",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "severity": "Alto",
"subcategory": "Zonas de aterrizaje",
- "text": "Configure la segmentación de la red de identidad mediante el uso de una red virtual y vuelva a emparejarse con el centro. Proporcionar autenticación dentro de la zona de aterrizaje de la aplicación (heredada).",
+ "text": "Configure la segmentación de la red de identidad mediante el uso de una red virtual y el emparejamiento con el centro. Proporcionar autenticación dentro de la zona de aterrizaje de la aplicación (heredada).",
"training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "Seguridad"
},
@@ -377,7 +424,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"severity": "Medio",
"subcategory": "Zonas de aterrizaje",
- "text": "Use Azure RBAC para administrar el acceso del plano de datos a los recursos, si es posible. Por ejemplo, operaciones de datos en Key Vault, cuentas de almacenamiento y servicios de base de datos.",
+ "text": "Use Azure RBAC para administrar el acceso del plano de datos a los recursos, si es posible. Por ejemplo, operaciones de datos en Key Vault, cuenta de almacenamiento y servicios de base de datos.",
"training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"waf": "Seguridad"
},
@@ -388,11 +435,11 @@
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
"severity": "Medio",
"subcategory": "Zonas de aterrizaje",
- "text": "Use las revisiones de acceso PIM de Microsoft Entra ID para validar periódicamente los derechos de recursos.",
+ "text": "Use las revisiones de acceso PIM de ID de Microsoft Entra para validar periódicamente los derechos de recursos.",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Organización de recursos",
"description": "Considere la posibilidad de usar la herramienta de nomenclatura de Azure disponible en https://aka.ms/azurenamingtool",
"guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
@@ -400,7 +447,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
"severity": "Alto",
"subcategory": "Nomenclatura y etiquetado",
- "text": "Se recomienda seguir los estándares de nomenclatura de procedimientos recomendados de Microsoft",
+ "text": "Use un esquema de nomenclatura bien definido para los recursos, como los estándares de nomenclatura de procedimientos recomendados de Microsoft.",
"waf": "Seguridad"
},
{
@@ -422,7 +469,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Aplicación de un grupo de administración de espacio aislado para permitir que los usuarios experimenten inmediatamente con Azure",
+ "text": "Aplique un grupo de administración de espacio aislado para permitir que los usuarios experimenten inmediatamente con Azure.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Seguridad"
},
@@ -433,7 +480,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Aplicación de un grupo de administración de plataforma en el grupo de administración raíz para admitir la directiva de plataforma común y la asignación de roles de Azure",
+ "text": "Aplique un grupo de administración de plataforma en el grupo de administración raíz para admitir la directiva de plataforma común y la asignación de roles de Azure.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Seguridad"
},
@@ -444,7 +491,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Aplique una suscripción de conectividad dedicada en el grupo de administración de conectividad para hospedar un centro de conectividad de Azure Virtual WAN, un sistema de nombres de dominio (DNS) privado, un circuito ExpressRoute y otros recursos de red.",
+ "text": "Aplique una suscripción de conectividad dedicada en el grupo de administración de conectividad para hospedar un centro de conectividad de Azure Virtual WAN, un sistema de nombres de dominio (DNS) privado que no sea de AD, un circuito ExpressRoute y otros recursos de red.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Seguridad"
},
@@ -456,7 +503,8 @@
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Exigir que no se coloquen suscripciones en el grupo de administración raíz",
+ "text": "Exigir que no se coloquen suscripciones en el grupo de administración raíz.",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"waf": "Seguridad"
},
{
@@ -466,7 +514,8 @@
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Exija que solo los usuarios con privilegios puedan operar grupos de administración en el inquilino habilitando la autorización de Azure RBAC en la configuración de la jerarquía del grupo de administración",
+ "text": "Exija que solo los usuarios con privilegios puedan operar grupos de administración en el inquilino habilitando la autorización de Azure RBAC en la configuración de la jerarquía del grupo de administración.",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/",
"waf": "Seguridad"
},
{
@@ -480,14 +529,14 @@
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Organización de recursos",
"guid": "49b82111-2df2-47ee-912e-7f983f630472",
"id": "C02.08",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
"severity": "Alto",
"subcategory": "Suscripciones",
"text": "Aplique un proceso para que los propietarios de recursos sean conscientes de sus funciones y responsabilidades, la revisión de acceso, la revisión del presupuesto, el cumplimiento de las políticas y la corrección cuando sea necesario.",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/",
"waf": "Seguridad"
},
{
@@ -498,17 +547,17 @@
"severity": "Medio",
"subcategory": "Suscripciones",
"text": "Asegúrese de que todos los propietarios de suscripciones y el equipo central de TI conozcan las cuotas de suscripción y el impacto que tienen en el aprovisionamiento de recursos para una suscripción determinada.",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Organización de recursos",
"guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
"id": "C02.10",
"link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
"severity": "Alto",
"subcategory": "Suscripciones",
- "text": "Utilice instancias reservadas cuando corresponda para optimizar los costos y garantizar la capacidad disponible en las regiones de destino. Aplique el uso de SKU de máquina virtual de instancia reservada adquiridas a través de Azure Policy.",
+ "text": "Utilice instancias reservadas cuando corresponda para optimizar el costo y garantizar la capacidad disponible en las regiones de destino.",
"training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
"waf": "Seguridad"
},
@@ -517,22 +566,21 @@
"category": "Organización de recursos",
"guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
"id": "C02.11",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/design-capacity",
- "severity": "Alto",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards",
+ "severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Aplique un panel, un libro de trabajo o un proceso manual para supervisar los niveles de capacidad utilizados",
- "training": "https://learn.microsoft.com/learn/paths/monitor-usage-performance-availability-resources-azure-monitor/",
+ "text": "Establezca paneles de control y/o visualizaciones para supervisar las métricas de capacidad de cómputo y almacenamiento. (es decir, CPU, memoria, espacio en disco)",
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Organización de recursos",
"guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
"id": "C02.12",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs",
"severity": "Alto",
"subcategory": "Suscripciones",
- "text": "Aplicación de un proceso para la gestión de costos",
+ "text": "Como parte de su adopción de la nube, implemente un plan detallado de administración de costos mediante el proceso \"Costos administrados de la nube\".",
"training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
"waf": "Seguridad"
},
@@ -555,7 +603,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Asegúrese de que las etiquetas se utilizan para la facturación y la gestión de costos",
+ "text": "Asegúrese de que las etiquetas se utilicen para la facturación y la gestión de costos.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Seguridad"
},
@@ -566,7 +614,8 @@
"link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "En el caso de la Zona de Aterrizaje Soberana, contar con una \"corporación confidencial\" y un grupo de gestión \"confidencial en línea\" directamente bajo el MG de las \"zonas de aterrizaje\".",
+ "text": "En el caso de la zona de aterrizaje soberana, disponer de un grupo de gestión de \"corporación confidencial\" y de \"confidencial en línea\" directamente debajo: el MG de las \"zonas de aterrizaje\".",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview",
"waf": "Seguridad"
},
{
@@ -576,7 +625,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
"severity": "Alto",
"subcategory": "Regiones",
- "text": "Seleccione las regiones de Azure adecuadas para la implementación. Azure es una plataforma en la nube a escala global que proporciona cobertura global a través de muchas regiones y geografías. Las diferentes regiones de Azure tienen diferentes características, modelos de acceso y disponibilidad, costos, capacidad y servicios ofrecidos, por lo que es importante tener en cuenta todos los criterios y requisitos",
+ "text": "Seleccione las regiones de Azure adecuadas para su implementación. Azure es una plataforma en la nube a escala global que proporciona cobertura global a través de muchas regiones y geografías. Las diferentes regiones de Azure tienen diferentes características, modelos de acceso y disponibilidad, costos, capacidad y servicios ofrecidos, por lo que es importante tener en cuenta todos los criterios y requisitos.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Fiabilidad"
},
@@ -587,7 +636,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
"severity": "Medio",
"subcategory": "Regiones",
- "text": "Considere la posibilidad de realizar una implementación en varias regiones. Dependiendo del tamaño del cliente, las ubicaciones y la presencia de los usuarios, operar en varias regiones puede ser una opción común para prestar servicios y ejecutar aplicaciones más cerca de ellos. El uso de una implementación en varias regiones también es importante para proporcionar capacidades de recuperación ante desastres geográficas, eliminar la dependencia de la capacidad de una sola región y disminuir el riesgo de una restricción temporal y localizada de la capacidad de los recursos",
+ "text": "Implemente la zona de aterrizaje de Azure en una implementación de varias regiones. Dependiendo del tamaño del cliente, las ubicaciones y la presencia de usuarios, operar en varias regiones puede ser una opción común para brindar servicios y ejecutar aplicaciones más cerca de ellos. El uso de una implementación de varias regiones también es importante para proporcionar capacidades de recuperación ante desastres geográficas, para eliminar la dependencia de la capacidad de una sola región y disminuir el riesgo de una restricción temporal y localizada de la capacidad de los recursos.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Fiabilidad"
},
@@ -598,91 +647,81 @@
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
"severity": "Medio",
"subcategory": "Regiones",
- "text": "Asegúrese de que los servicios y las características necesarios estén disponibles en las regiones de implementación elegidas",
+ "text": "Asegúrese de que los servicios y características necesarios estén disponibles en las regiones de implementación elegidas.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
"severity": "Medio",
"subcategory": "Entrega de aplicaciones",
- "text": "Desarrolle un plan para proteger el contenido de la aplicación de entrega de los radios de carga de trabajo mediante Application Gateway y Azure Front Door. Puede utilizar la lista de comprobación de entrega de aplicaciones para obtener recomendaciones.",
+ "text": "Documente un estándar para proteger el contenido de la aplicación de entrega de los radios de carga de trabajo mediante Application Gateway y Azure Front Door. Puede utilizar la lista de comprobación de entrega de aplicaciones para obtener recomendaciones.",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "Medio",
"subcategory": "Cubo y radio",
- "text": "Aproveche un diseño de red basado en la topología de red radial tradicional para escenarios de red que requieren la máxima flexibilidad.",
+ "text": "Utilice una topología de red radial para escenarios de red que requieran la máxima flexibilidad.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "id": "D01.02",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "severity": "Medio",
- "subcategory": "Entrega de aplicaciones",
- "text": "Realice la entrega de aplicaciones dentro de las zonas de aterrizaje tanto para aplicaciones internas (corporativas) como externas (en línea).",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
"id": "D01.02",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "Alto",
"subcategory": "Cubo y radio",
- "text": "Asegúrese de que los servicios de redes compartidas, incluidas las puertas de enlace de ExpressRoute, las puertas de enlace de VPN y Azure Firewall o las aplicaciones virtuales de red de asociados en la red virtual del centro central. Si es necesario, implemente también servidores DNS.",
+ "text": "Implemente servicios de redes compartidas, incluidas puertas de enlace de ExpressRoute, puertas de enlace de VPN y Azure Firewall o aplicaciones virtuales de red de asociados en la red virtual del centro central. Si es necesario, implemente también servicios DNS.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Costar"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Entrega de aplicaciones",
- "text": "Use una red DDoS o planes de protección IP para todas las direcciones IP públicas en las zonas de aterrizaje de la aplicación.",
+ "text": "Utilice una red DDoS o un plan de protección de IP para todas las direcciones IP públicas en las zonas de aterrizaje de aplicaciones.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "Medio",
"subcategory": "Cubo y radio",
- "text": "Al implementar tecnologías de redes de asociados o aplicaciones virtuales de red, siga las instrucciones del proveedor de asociados",
+ "text": "Al implementar tecnologías de redes de asociados o NVA, siga las instrucciones del proveedor del asociado.",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
"id": "D01.04",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
"service": "ExpressRoute",
"severity": "Bajo",
"subcategory": "Cubo y radio",
- "text": "Si necesita el tránsito entre ExpressRoute y las puertas de enlace de VPN en escenarios radiales, use Azure Route Server.",
+ "text": "Si necesita el tránsito entre ExpressRoute y puertas de enlace de VPN en escenarios tipo hub-and-spoke, use Azure Route Server.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
"id": "D01.05",
@@ -691,34 +730,35 @@
"severity": "Bajo",
"subcategory": "Cubo y radio",
"text": "Si utiliza el servidor de rutas, utilice un prefijo /27 para la subred del servidor de rutas.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
"id": "D01.06",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "Medio",
"subcategory": "Cubo y radio",
- "text": "En el caso de las arquitecturas de red con varias topologías en estrella tipo hub-and-spoke en las regiones de Azure, use emparejamientos de red virtual global entre las redes virtuales del centro para conectar las regiones entre sí.",
+ "text": "En el caso de las arquitecturas de red con varias topologías radiales en las regiones de Azure, use emparejamientos de redes virtuales globales entre las redes virtuales del centro para conectar las regiones entre sí.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
"id": "D01.07",
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
"service": "VNet",
"severity": "Medio",
"subcategory": "Cubo y radio",
- "text": "Use Azure Monitor para redes para supervisar el estado de un extremo a otro de las redes en Azure.",
+ "text": "Use Azure Monitor para redes para supervisar el estado de un extremo a otro de las redes de Azure.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"id": "D01.08",
@@ -726,11 +766,12 @@
"service": "VNet",
"severity": "Medio",
"subcategory": "Cubo y radio",
- "text": "Al conectar redes virtuales de radio a la red virtual del centro central, tenga en cuenta los límites de emparejamiento de red virtual (500), el número máximo de prefijos que se pueden anunciar a través de ExpressRoute (1000)",
+ "text": "Si tiene más de 400 redes radiales en una región, implemente un centro adicional para omitir los límites de emparejamiento de red virtual (500) y el número máximo de prefijos que se pueden anunciar a través de ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"id": "D01.09",
@@ -738,12 +779,12 @@
"service": "VNet",
"severity": "Medio",
"subcategory": "Cubo y radio",
- "text": "Tenga en cuenta el límite de rutas por tabla de rutas (400).",
+ "text": "Limite el número de rutas por tabla de rutas a 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"id": "D01.10",
@@ -751,11 +792,36 @@
"service": "VNet",
"severity": "Alto",
"subcategory": "Cubo y radio",
- "text": "Use la opción \"Permitir tráfico a la red virtual remota\" al configurar emparejamientos de red virtual",
+ "text": "Use la opción \"Permitir tráfico a la red virtual remota\" al configurar emparejamientos de red virtual.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "id": "D01.11",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "Alto",
+ "subcategory": "Cubo y radio",
+ "text": "Uso de SKU de Standard Load Balancer con una implementación con redundancia de zona, la selección de Standard SKU Load Balancer mejora la confiabilidad a través de zonas de disponibilidad y resistencia de zona, lo que garantiza que las implementaciones resistan errores de zona y región. A diferencia de Basic, admite el equilibrio de carga global y ofrece un SLA.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "id": "D01.12",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "Alto",
+ "subcategory": "Cubo y radio",
+ "text": "Asegúrese de que los grupos de back-end del equilibrador de carga contengan al menos dos instancias, La implementación de Azure Load Balancers con al menos dos instancias en el back-end evita un único punto de error y admite la escalabilidad.",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
"id": "D02.01",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
@@ -763,134 +829,158 @@
"severity": "Medio",
"subcategory": "Encriptación",
"text": "Cuando use ExpressRoute Direct, configure MACsec para cifrar el tráfico en el nivel de capa dos entre los enrutadores de la organización y MSEE. El diagrama muestra este cifrado en el flujo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
"id": "D02.02",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "Bajo",
+ "severity": "Medio",
"subcategory": "Encriptación",
"text": "En escenarios en los que MACsec no es una opción (por ejemplo, no usar ExpressRoute Direct), use una puerta de enlace de VPN para establecer túneles IPsec a través del emparejamiento privado de ExpressRoute.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"id": "D03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "ExpressRoute",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
- "text": "Asegúrese de que no se usan espacios de direcciones IP superpuestos en las regiones de Azure y las ubicaciones locales",
+ "subcategory": "Plan de PI",
+ "text": "Asegúrese de que no se usen espacios de direcciones IP superpuestos entre regiones de Azure y ubicaciones locales.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"id": "D03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "Bajo",
- "subcategory": "Plan de propiedad intelectual",
- "text": "Utilice direcciones IP de los rangos de asignación de direcciones para Internet privadas (RFC 1918).",
+ "severity": "Medio",
+ "subcategory": "Plan de PI",
+ "text": "Utilice las direcciones IP de los rangos de asignación de direcciones para Internets privadas (RFC 1918).",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
"id": "D03.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
- "text": "Asegúrese de que no se desperdicie espacio de direcciones IP, no cree redes virtuales innecesariamente grandes (por ejemplo, /16)",
+ "subcategory": "Plan de PI",
+ "text": "Asegúrese de que no se desperdicie el espacio de direcciones IP, no cree redes virtuales innecesariamente grandes (por ejemplo, /16).",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Rendimiento"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"id": "D03.04",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
- "text": "Evite el uso de intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
+ "subcategory": "Plan de PI",
+ "text": "No utilice intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "category": "Topología de red y conectividad",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
"id": "D03.05",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "Alto",
+ "subcategory": "Plan de PI",
+ "text": "Use SKU estándar e IP con redundancia de zona cuando corresponda, las direcciones IP públicas de Azure pueden ser de SKU estándar, disponibles como no zonales, zonales o con redundancia de zona. Las direcciones IP con redundancia de zona son accesibles en todas las zonas, resistiendo cualquier error de una sola zona, lo que proporciona una mayor resistencia. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "id": "D03.06",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "Medio",
- "subcategory": "Plan de propiedad intelectual",
- "text": "En entornos en los que la resolución de nombres en Azure es todo lo que se requiere, use Azure Private DNS para la resolución con una zona delegada para la resolución de nombres (como \"azure.contoso.com\").",
+ "subcategory": "Plan de PI",
+ "text": "En entornos en los que la resolución de nombres en Azure es todo lo necesario, use Azure Private DNS para la resolución con una zona delegada para la resolución de nombres (como 'azure.contoso.com').",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "id": "D03.06",
+ "id": "D03.07",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "Medio",
- "subcategory": "Plan de propiedad intelectual",
- "text": "En el caso de los entornos en los que se requiere la resolución de nombres en Azure y en el entorno local, considere la posibilidad de usar Azure DNS Private Resolver.",
+ "subcategory": "Plan de PI",
+ "text": "En el caso de los entornos en los que se requiere la resolución de nombres en Azure y en el entorno local y no existe ningún servicio DNS empresarial como Active Directory, use Azure DNS Private Resolver para enrutar las solicitudes DNS a Azure o a servidores DNS locales.",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "id": "D03.07",
+ "id": "D03.08",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "Bajo",
- "subcategory": "Plan de propiedad intelectual",
- "text": "Las cargas de trabajo especiales que requieren e implementan su propio DNS (como Red Hat OpenShift) deben utilizar su solución DNS preferida.",
+ "subcategory": "Plan de PI",
+ "text": "Las cargas de trabajo especiales que requieren e implementan su propio DNS (como Red Hat OpenShift) deben utilizar su solución de DNS preferida.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "Operaciones"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
- "id": "D03.08",
+ "id": "D03.09",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
"service": "DNS",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
+ "subcategory": "Plan de PI",
"text": "Habilite el registro automático de Azure DNS para administrar automáticamente el ciclo de vida de los registros DNS de las máquinas virtuales implementadas en una red virtual.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "id": "D03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "Medio",
+ "subcategory": "Plan de PI",
+ "text": "Implementación de un plan para administrar la resolución de DNS entre varias regiones de Azure y cuando los servicios conmutan por error a otra región",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"id": "D05.01",
"link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
"service": "Bastion",
"severity": "Medio",
"subcategory": "Internet",
- "text": "Considere la posibilidad de usar Azure Bastion para conectarse de forma segura a la red.",
+ "text": "Use Azure Bastion para conectarse de forma segura a la red.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
"guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
"id": "D05.02",
@@ -899,22 +989,23 @@
"severity": "Medio",
"subcategory": "Internet",
"text": "Use Azure Bastion en una subred /26 o superior.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
"id": "D05.03",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "WAF",
"severity": "Medio",
"subcategory": "Internet",
- "text": "Use directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
+ "text": "Use las directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"id": "D05.04",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -926,97 +1017,105 @@
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"id": "D05.05",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "Alto",
"subcategory": "Internet",
- "text": "La implementación de WAF y otros servidores proxy inversos son necesarios para las conexiones HTTP/S entrantes, impleméntelos dentro de una red virtual de zona de aterrizaje y junto con las aplicaciones que protegen y exponen a Internet.",
+ "text": "Cuando se requieran WAF y otros servidores proxy inversos para las conexiones HTTP/S entrantes, impleméntelos dentro de una red virtual de zona de aterrizaje y junto con las aplicaciones que protegen y exponen a Internet.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"id": "D05.06",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "Alto",
"subcategory": "Internet",
- "text": "Use planes de protección IP o de red DDoS de Azure para ayudar a proteger los puntos de conexión de direcciones IP públicas dentro de las redes virtuales.",
+ "text": "Use los planes de protección IP o de red DDoS de Azure para ayudar a proteger los puntos de conexión de direcciones IP públicas dentro de las redes virtuales.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"id": "D05.07",
"link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
"service": "VNet",
"severity": "Alto",
"subcategory": "Internet",
- "text": "Evalúe y revise la configuración y la estrategia del tráfico saliente de la red antes del próximo cambio importante. El 30 de septiembre de 2025, se retirará el acceso saliente predeterminado para las nuevas implementaciones y solo se permitirán las configuraciones de acceso explícitas",
+ "text": "Planifique cómo administrar la configuración y la estrategia del tráfico saliente de la red antes del próximo cambio importante. El 30 de septiembre de 2025, se retirará el acceso saliente predeterminado para las nuevas implementaciones y solo se permitirán configuraciones de acceso explícitas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"id": "D05.08",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "Alto",
"subcategory": "Internet",
- "text": "Agregue configuraciones de diagnóstico para guardar registros relacionados con DDoS para todas las direcciones IP públicas protegidas (DDoS IP o Protección de red).",
+ "text": "Agregue configuraciones de diagnóstico para guardar los registros relacionados con DDoS para todas las direcciones IP públicas protegidas (DDoS IP o Protección de red).",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "id": "D05.08",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "Alto",
+ "subcategory": "Internet",
+ "text": "Asegúrese de que haya una asignación de directiva para denegar las direcciones IP públicas vinculadas directamente a las máquinas virtuales. Use exclusiones si se necesitan direcciones IP públicas en máquinas virtuales específicas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Topología de red y conectividad",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
"id": "D06.01",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Asegúrese de que ha investigado la posibilidad de usar ExpressRoute como conexión principal a Azure.",
+ "text": "Use ExpressRoute como conexión principal a Azure. Utilice las VPN como fuente de conectividad de respaldo.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
- "description": "Puede usar la anteposición de AS y los pesos de conexión para influir en el tráfico de Azure al entorno local, y la gama completa de atributos de BGP en sus propios enrutadores para influir en el tráfico del entorno local a Azure.",
+ "category": "Topología de red y conectividad",
+ "description": "Puede usar la anteposición de AS Path y los pesos de conexión para influir en el tráfico de Azure al entorno local, y la gama completa de atributos BGP en sus propios enrutadores para influir en el tráfico del entorno local a Azure.",
"guid": "f29812b2-363c-4efe-879b-599de0d5973c",
"id": "D06.02",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Cuando use varios circuitos ExpressRoute o varias ubicaciones locales, asegúrese de optimizar el enrutamiento con atributos BGP, si se prefieren determinadas rutas de acceso.",
+ "text": "Cuando use varios circuitos ExpressRoute o varias ubicaciones locales, use atributos BGP para optimizar el enrutamiento.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
"id": "D06.03",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Asegúrese de que usa la SKU correcta para las puertas de enlace de ExpressRoute/VPN en función de los requisitos de ancho de banda y rendimiento.",
+ "text": "Seleccione la SKU correcta para las puertas de enlace de ExpressRoute/VPN en función de los requisitos de ancho de banda y rendimiento.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Rendimiento"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
"guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
"id": "D06.04",
@@ -1025,11 +1124,11 @@
"severity": "Alto",
"subcategory": "Híbrido",
"text": "Asegúrese de que usa circuitos ExpressRoute de datos ilimitados solo si alcanza el ancho de banda que justifica su costo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Costar"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
"guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
"id": "D06.05",
@@ -1037,11 +1136,12 @@
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Aproveche la SKU local de ExpressRoute para reducir el costo de los circuitos, si la ubicación de emparejamiento de los circuitos admite las regiones de Azure para la SKU local.",
+ "text": "Aproveche la SKU local de ExpressRoute para reducir el costo de los circuitos, si la ubicación de emparejamiento de circuitos admite las regiones de Azure para la SKU local.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Costar"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
"id": "D06.06",
@@ -1054,7 +1154,7 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
"id": "D06.07",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
@@ -1066,19 +1166,19 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
"id": "D06.08",
"link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Cuando se requiera una latencia baja o el rendimiento del entorno local a Azure sea superior a 10 Gbps, habilite FastPath para omitir la puerta de enlace de ExpressRoute de la ruta de acceso de datos.",
+ "text": "Cuando se requiera una latencia baja o el rendimiento del entorno local a Azure debe ser superior a 10 Gbps, habilite FastPath para omitir la puerta de enlace de ExpressRoute de la ruta de acceso de datos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
"guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
"id": "D06.09",
@@ -1091,44 +1191,43 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
"id": "D06.10",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
"service": "VPN",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Use dispositivos VPN redundantes en las instalaciones (activo/activo o activo/pasivo).",
+ "text": "Utilice dispositivos VPN redundantes en las instalaciones (activo/activo o activo/pasivo).",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"id": "D06.11",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Si usa ExpressRoute Direct, considere la posibilidad de usar circuitos locales de ExpressRoute a las regiones locales de Azure para ahorrar costos",
+ "text": "Si usa ExpressRoute Direct, considere la posibilidad de usar circuitos locales de ExpressRoute a las regiones locales de Azure para ahorrar costos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Costar"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
"id": "D06.12",
"link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Cuando se requiere aislamiento de tráfico o ancho de banda dedicado, por ejemplo, para separar entornos de producción y no de producción, use circuitos ExpressRoute diferentes. Le ayudará a garantizar dominios de enrutamiento aislados y a aliviar los riesgos de vecinos ruidosos.",
+ "text": "Cuando se requiera aislamiento de tráfico o ancho de banda dedicado, por ejemplo, para separar entornos de producción y no de producción, use diferentes circuitos ExpressRoute. Le ayudará a garantizar dominios de enrutamiento aislados y a aliviar los riesgos de vecinos ruidosos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b30e38c3-f298-412b-8363-cefe179b599d",
"id": "D06.13",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
@@ -1140,7 +1239,7 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
"id": "D06.14",
"link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
@@ -1152,11 +1251,11 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
"id": "D06.15",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
@@ -1165,19 +1264,19 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
"id": "D06.16",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Use VPN de sitio a sitio como conmutación por error de ExpressRoute, especialmente si solo usa un único circuito ExpressRoute.",
+ "text": "Use VPN de sitio a sitio como conmutación por error de ExpressRoute, si solo usa un único circuito ExpressRoute.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
"guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
"id": "D06.17",
@@ -1189,8 +1288,7 @@
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"id": "D06.18",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
@@ -1198,10 +1296,11 @@
"severity": "Alto",
"subcategory": "Híbrido",
"text": "Si usa ExpressRoute, el enrutamiento local debe ser dinámico: en caso de que se produzca un error de conexión, debe converger a la conexión restante del circuito. La carga debe compartirse entre ambas conexiones, idealmente como activa/activa, aunque también se admite activa/pasiva.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
"id": "D06.19",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
@@ -1213,7 +1312,7 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
"id": "D06.20",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
@@ -1225,7 +1324,7 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
"id": "D06.22",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
@@ -1237,7 +1336,7 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
"id": "D06.23",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
@@ -1249,44 +1348,54 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5234c93f-b651-41dd-80c1-234177b91ced",
"id": "D06.24",
"link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Evite el uso de circuitos ExpressRoute para la comunicación de red virtual a red virtual.",
+ "text": "No use circuitos ExpressRoute para la comunicación de red virtual a red virtual.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Rendimiento"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "id": "D06.25",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "Bajo",
+ "subcategory": "Híbrido",
+ "text": "No envíe el tráfico de Azure a ubicaciones híbridas para su inspección. En su lugar, siga el principio \"el tráfico de Azure se queda en Azure\" para que la comunicación entre los recursos de Azure se produzca a través de la red troncal de Microsoft.",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Topología de red y conectividad",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
"id": "D07.01",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Use Azure Firewall para controlar el tráfico saliente de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado del tráfico Este/Oeste (si la organización lo requiere)",
+ "text": "Use Azure Firewall para controlar el tráfico de salida de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado del tráfico este/oeste (si la organización lo requiere).",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
"id": "D07.02",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Cortafuegos",
- "text": "Cree una directiva global de Azure Firewall para controlar la posición de seguridad en todo el entorno de red global y asígnela a todas las instancias de Azure Firewall. Permita que las directivas granulares satisfagan los requisitos de regiones específicas delegando directivas de firewall incrementales a los equipos de seguridad locales a través del control de acceso basado en roles de Azure.",
+ "text": "Cree una directiva global de Azure Firewall para controlar la posición de seguridad en todo el entorno de red global y asígnela a todas las instancias de Azure Firewall. Permita que las directivas granulares cumplan los requisitos de regiones específicas delegando directivas de firewall incrementales a los equipos de seguridad locales a través del control de acceso basado en roles de Azure.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
"id": "D07.03",
"link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
@@ -1298,8 +1407,7 @@
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"id": "D07.04",
@@ -1307,12 +1415,12 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Use reglas de red basadas en FQDN y Azure Firewall con proxy DNS para filtrar el tráfico de salida a Internet a través de protocolos no admitidos por las reglas de aplicación.",
+ "text": "Utilice las reglas de la aplicación para filtrar el tráfico saliente en el nombre de host de destino para los protocolos compatibles. Use reglas de red basadas en FQDN y Azure Firewall con proxy DNS para filtrar el tráfico de salida a Internet a través de otros protocolos.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"id": "D07.05",
@@ -1320,25 +1428,24 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Use Azure Firewall Premium para obtener seguridad y protección adicionales.",
+ "text": "Use Azure Firewall Premium para habilitar características de seguridad adicionales.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
"id": "D07.06",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Configure el modo de inteligencia sobre amenazas de Azure Firewall en Alerta y denegación para obtener protección adicional.",
+ "text": "Configure el modo de Inteligencia sobre amenazas de Azure Firewall en Alerta y Denegar para obtener protección adicional.",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
"id": "D07.07",
@@ -1347,11 +1454,11 @@
"severity": "Alto",
"subcategory": "Cortafuegos",
"text": "Configure el modo IDPS de Azure Firewall en Denegar para obtener protección adicional.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"id": "D07.08",
@@ -1359,12 +1466,11 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "En el caso de las subredes de las redes virtuales que no están conectadas a Virtual WAN, adjunte una tabla de rutas para que el tráfico de Internet se redirija a Azure Firewall o a una aplicación virtual de red",
+ "text": "En el caso de las subredes de redes virtuales que no están conectadas a Virtual WAN, adjunte una tabla de rutas para que el tráfico de Internet se redirija a Azure Firewall o a una aplicación virtual de red.",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"id": "D07.09",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
@@ -1376,21 +1482,19 @@
"waf": "Operaciones"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"id": "D07.10",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
"service": "Firewall",
- "severity": "Importante",
+ "severity": "Alto",
"subcategory": "Cortafuegos",
"text": "Migre de las reglas de Azure Firewall clásico (si existen) a la directiva de firewall.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Operaciones"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
"id": "D07.11",
@@ -1399,65 +1503,69 @@
"severity": "Alto",
"subcategory": "Segmentación",
"text": "Use un prefijo /26 para las subredes de Azure Firewall.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Cortafuegos",
- "text": "Organice las reglas dentro de la directiva de firewall en grupos de recopilación de reglas y colecciones de reglas en función de su frecuencia de uso",
+ "text": "Organice las reglas dentro de la política de firewall en grupos de recopilación de reglas y colecciones de reglas, en función de su frecuencia de uso.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall/ip-groups",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Cortafuegos",
- "text": "Utilice grupos de IP o prefijos de IP para reducir el número de reglas de tabla de IP",
+ "text": "Utilice grupos de direcciones IP o prefijos de direcciones IP para reducir el número de reglas de tabla de direcciones IP.",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"id": "D07.13",
"link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Cortafuegos",
- "text": "Evite los comodines como IP de origen para los DNAT, como * o cualquiera, debe especificar las direcciones IP de origen para los DNAT entrantes",
+ "text": "No utilice caracteres comodín como IP de origen para los DNAT, como * o cualquiera, debe especificar las direcciones IP de origen para los DNAT entrantes.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
"id": "D07.14",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Cortafuegos",
- "text": "Evite el agotamiento del puerto SNAT mediante la supervisión del uso del puerto SNAT, la evaluación de la configuración de la puerta de enlace NAT y la garantía de una conmutación por error sin problemas. Si el número de puertos se acerca al límite, es una señal de que el agotamiento de SNAT podría ser inminente.",
+ "text": "Evite el agotamiento del puerto SNAT supervisando el uso del puerto SNAT, evaluando la configuración de la puerta de enlace NAT y garantizando una conmutación por error sin problemas. Si el número de puertos se acerca al límite, es una señal de que el agotamiento de SNAT podría ser inminente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
"id": "D07.15",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
"service": "Firewall",
"severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Habilitar la inspección TLS",
+ "text": "Si usa Azure Firewall Premium, habilite la inspección de TLS.",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
"id": "D07.16",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
@@ -1468,7 +1576,7 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"id": "D07.17",
"link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
@@ -1476,116 +1584,133 @@
"severity": "Medio",
"subcategory": "Cortafuegos",
"text": "Como parte de la inspección de TLS, planee la recepción de tráfico de Azure App Gateways para su inspección.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"id": "D07.18",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Cortafuegos",
- "text": "Habilitación de la configuración del proxy DNS de Azure Firewall ",
+ "text": "Habilite la configuración de proxy DNS de Azure Firewall.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "category": "Topología de red y conectividad",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"id": "D07.19",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Asegúrese de que haya una asignación de directiva para denegar direcciones IP públicas vinculadas directamente a máquinas virtuales",
- "waf": "Seguridad"
+ "text": "Integre Azure Firewall con Azure Monitor y habilite el registro de diagnóstico para almacenar y analizar los registros y las métricas del firewall.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "category": "Topología de red y conectividad",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"id": "D07.20",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "Bajo",
"subcategory": "Cortafuegos",
- "text": "Integre Azure Firewall con Azure Monitor y habilite el registro de diagnóstico para almacenar y analizar los registros del firewall.",
+ "text": "Implementación de copias de seguridad para las reglas de firewall",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
"id": "D07.21",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
"service": "Firewall",
- "severity": "Bajo",
+ "severity": "Alto",
"subcategory": "Cortafuegos",
- "text": "Implemente copias de seguridad para las reglas de firewall",
- "waf": "Operaciones"
+ "text": "Implemente Azure Firewall en varias zonas de disponibilidad. Azure Firewall ofrece diferentes acuerdos de nivel de servicio en función de su implementación; en una sola zona de disponibilidad o en varias, lo que podría mejorar la fiabilidad y el rendimiento.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
"id": "D07.22",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "Alto",
+ "subcategory": "Cortafuegos",
+ "text": "Configure la protección contra DDoS en la red virtual de Azure Firewall y asocie un plan de protección contra DDoS con la red virtual que hospeda Azure Firewall para proporcionar una mitigación mejorada contra ataques DDoS. Azure Firewall Manager integra la creación de infraestructura de firewall y planes de protección contra DDoS. ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Topología de red y conectividad",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "id": "D07.23",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Paas",
- "text": "Asegúrese de que la comunicación del plano de control para los servicios PaaS de Azure insertados en una red virtual no se interrumpa, por ejemplo, con una ruta 0.0.0.0/0 o una regla de grupo de seguridad de red que bloquee el tráfico del plano de control.",
+ "text": "No interrumpa la comunicación del plano de control para los servicios PaaS de Azure insertados en una red virtual, como con una ruta 0.0.0.0/0 o una regla de grupo de seguridad de red que bloquee el tráfico del plano de control.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
"id": "D08.02",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"severity": "Medio",
"subcategory": "Paas",
- "text": "Use Private Link, cuando esté disponible, para los servicios PaaS compartidos de Azure.",
+ "text": "Use Private Link, donde esté disponible, para los servicios PaaS compartidos de Azure.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
"id": "D08.03",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "Medio",
"subcategory": "Paas",
- "text": "Acceda a los servicios PaaS de Azure desde el entorno local a través de puntos de conexión privados y emparejamiento privado de ExpressRoute. Este método evita el tránsito a través de la Internet pública.",
+ "text": "Acceda a los servicios PaaS de Azure desde el entorno local a través de puntos de conexión privados y el emparejamiento privado de ExpressRoute. Este método evita el tránsito por la Internet pública.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
"id": "D08.04",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Paas",
"text": "No habilite los puntos de conexión de servicio de red virtual de forma predeterminada en todas las subredes.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
"id": "D08.05",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "Medio",
"subcategory": "Paas",
- "text": "Filtre el tráfico de salida a los servicios PaaS de Azure mediante FQDN en lugar de direcciones IP en Azure Firewall o una aplicación virtual de red para evitar la filtración de datos. Si usa Private Link, puede bloquear todos los FQDN, de lo contrario, permita solo los servicios PaaS necesarios.",
+ "text": "Filtre el tráfico de salida a los servicios PaaS de Azure mediante FQDN en lugar de direcciones IP en Azure Firewall o una NVA para evitar la filtración de datos. Si usa Private Link, puede bloquear todos los FQDN, de lo contrario, permitir solo los servicios PaaS necesarios.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Seguridad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
"id": "D09.01",
@@ -1593,23 +1718,23 @@
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Segmentación",
- "text": "Use al menos un prefijo /27 para las subredes de puerta de enlace",
+ "text": "Utilice al menos un prefijo /27 para las subredes de puerta de enlace.",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"id": "D09.02",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Segmentación",
"text": "No confíe en las reglas predeterminadas de entrada del grupo de seguridad de red que usan la etiqueta de servicio VirtualNetwork para limitar la conectividad.",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
"id": "D09.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
@@ -1620,182 +1745,169 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"id": "D09.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"service": "NSG",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "Use grupos de seguridad de red para ayudar a proteger el tráfico entre subredes, así como el tráfico este/oeste a través de la plataforma (tráfico entre zonas de aterrizaje).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "id": "D09.05",
- "service": "NSG",
- "severity": "Medio",
- "subcategory": "Segmentación",
- "text": "El equipo de aplicaciones debe usar grupos de seguridad de aplicaciones en los grupos de seguridad de red de nivel de subred para ayudar a proteger las máquinas virtuales de varios niveles dentro de la zona de aterrizaje.",
+ "text": "Use los grupos de seguridad de red para ayudar a proteger el tráfico a través de las subredes, así como el tráfico este/oeste a través de la plataforma (tráfico entre zonas de aterrizaje).",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "id": "D09.06",
+ "id": "D09.05",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "Use grupos de seguridad de red y grupos de seguridad de aplicaciones para microsegmentar el tráfico dentro de la zona de aterrizaje y evitar el uso de una aplicación virtual de red central para filtrar los flujos de tráfico.",
+ "text": "Use grupos de seguridad de red y grupos de seguridad de aplicaciones para microsegmentar el tráfico dentro de la zona de aterrizaje y evite usar una NVA central para filtrar los flujos de tráfico.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "id": "D09.07",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "id": "D09.06",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "Habilite los registros de flujo de red virtual e introdúzcalos en Análisis de tráfico para obtener información sobre los flujos de tráfico internos y externos.",
+ "text": "Habilite los registros de flujo de red virtual e introdúzcalos en Traffic Analytics para obtener información sobre los flujos de tráfico internos y externos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "id": "D09.08",
+ "id": "D09.07",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "Tenga en cuenta el límite de reglas de grupo de seguridad de red por grupo de seguridad de red (1000).",
+ "text": "No implemente más de 900 reglas de grupo de seguridad de red por grupo de seguridad de red, debido al límite de 1000 reglas.",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
"id": "D10.01",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Considere la posibilidad de utilizar Virtual WAN para simplificar la administración de redes de Azure y asegúrese de que el escenario se describe explícitamente en la lista de diseños de enrutamiento de Virtual WAN",
+ "text": "Use Virtual WAN si el escenario se describe explícitamente en la lista de diseños de enrutamiento de Virtual WAN.",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
"id": "D10.02",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Use un centro de conectividad de Virtual WAN por región de Azure para conectar varias zonas de aterrizaje entre sí en las regiones de Azure a través de una instancia global común de Azure Virtual WAN.",
+ "text": "Use un centro de conectividad de Virtual WAN por región de Azure para conectar varias zonas de aterrizaje entre sí en regiones de Azure a través de una Azure Virtual WAN global común.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "id": "D10.03",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "Bajo",
- "subcategory": "Virtual WAN",
- "text": "Siga el principio \"el tráfico de Azure permanece en Azure\" para que la comunicación entre los recursos de Azure se produzca a través de la red troncal de Microsoft",
- "waf": "Rendimiento"
- },
- {
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "id": "D10.04",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "id": "D10.03",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Para la protección y el filtrado del tráfico de Internet saliente, implemente Azure Firewall en centros seguros",
+ "text": "Para la protección y el filtrado del tráfico de Internet saliente, implemente Azure Firewall en centros seguros.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "id": "D10.05",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "id": "D10.04",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Asegúrese de que la arquitectura de red está dentro de los límites de Azure Virtual WAN.",
+ "text": "Asegúrese de que la arquitectura de red WAN virtual se alinee con un escenario de arquitectura identificado.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "id": "D10.06",
+ "id": "D10.05",
"link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
"text": "Use Azure Monitor Insights para Virtual WAN para supervisar la topología de un extremo a otro de Virtual WAN, el estado y las métricas clave.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "id": "D10.07",
+ "id": "D10.06",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Asegúrese de que las implementaciones de IaC no deshabiliten el tráfico de sucursal a sucursal en Virtual WAN, a menos que estos flujos se bloqueen explícitamente.",
+ "text": "No deshabilite el tráfico de rama a rama en Virtual WAN, a menos que estos flujos se deban bloquear explícitamente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "id": "D10.08",
+ "id": "D10.07",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Use AS-Path como preferencia de enrutamiento del centro, ya que es más flexible que ExpressRoute o VPN.",
+ "text": "Use AS-Path como preferencia de enrutamiento del concentrador, ya que es más flexible que ExpressRoute o VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "id": "D10.09",
+ "id": "D10.08",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "Medio",
"subcategory": "Virtual WAN",
- "text": "Asegúrese de que las implementaciones de IaC configuran la propagación basada en etiquetas en Virtual WAN, de lo contrario, la conectividad entre los centros virtuales se verá afectada.",
+ "text": "Configure la propagación basada en etiquetas en Virtual WAN, de lo contrario, la conectividad entre los centros virtuales se verá afectada.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
- "id": "D10.10",
+ "id": "D10.09",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "Alto",
"subcategory": "Virtual WAN",
- "text": "Asigne suficiente espacio IP a los centros virtuales, idealmente un prefijo /23.",
+ "text": "Asigne al menos un prefijo /23 a los centros virtuales para asegurarse de que haya suficiente espacio IP disponible.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidad"
},
{
- "ammp": true,
"category": "Gobernanza",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"id": "E01.01",
@@ -1803,7 +1915,8 @@
"service": "Policy",
"severity": "Alto",
"subcategory": "Gobernanza",
- "text": "Aproveche Azure Policy estratégicamente, defina controles para su entorno y use iniciativas de directivas para agrupar directivas relacionadas.",
+ "text": "Aproveche Azure Policy de forma estratégica, defina controles para su entorno mediante iniciativas de directivas para agrupar directivas relacionadas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Seguridad"
},
{
@@ -1814,7 +1927,8 @@
"service": "Policy",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": "Asigne los requisitos normativos y de cumplimiento normativo a las definiciones de Azure Policy y a las asignaciones de roles de Azure.",
+ "text": "Asigne los requisitos normativos y de cumplimiento a las definiciones de Azure Policy y las asignaciones de roles de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "Seguridad"
},
{
@@ -1825,7 +1939,8 @@
"service": "Policy",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": null,
+ "text": "Establezca definiciones de Azure Policy en el grupo de administración raíz intermedio para que se puedan asignar en ámbitos heredados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Seguridad"
},
{
@@ -1834,20 +1949,22 @@
"id": "E01.05",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Gobernanza",
- "text": "Administre las asignaciones de directivas en el nivel más alto adecuado con exclusiones en los niveles inferiores, si es necesario.",
+ "text": "Administre las asignaciones de políticas en el nivel más alto apropiado con exclusiones en los niveles inferiores, si es necesario.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Seguridad"
},
{
- "category": null,
+ "category": "Gobernanza",
"guid": "43334f24-9116-4341-a2ba-527526944008",
"id": "E01.06",
"link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
"service": "Policy",
"severity": "Bajo",
"subcategory": "Gobernanza",
- "text": "Use Azure Policy para controlar qué servicios pueden aprovisionar los usuarios en el nivel de suscripción o grupo de administración",
+ "text": "Use Azure Policy para controlar los servicios que los usuarios pueden aprovisionar en el nivel de suscripción o grupo de administración.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Seguridad"
},
{
@@ -1856,22 +1973,24 @@
"id": "E01.07",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "Medio",
- "subcategory": null,
- "text": null,
- "waf": null
+ "severity": "Alto",
+ "subcategory": "Gobernanza",
+ "text": "Utilice políticas integradas siempre que sea posible para minimizar la sobrecarga operativa.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
},
{
"category": "Gobernanza",
- "description": "La asignación del rol Colaborador de directivas de recursos a ámbitos específicos le permite delegar la administración de directivas a los equipos pertinentes. Por ejemplo, un equipo de TI central puede supervisar las directivas a nivel de grupo de administración, mientras que los equipos de aplicaciones se encargan de las directivas de sus suscripciones, lo que permite la gobernanza distribuida con el cumplimiento de los estándares de la organización.",
+ "description": "La asignación del rol Colaborador de políticas de recursos a ámbitos específicos le permite delegar la administración de directivas a los equipos pertinentes. Por ejemplo, un equipo de TI central puede supervisar las políticas a nivel de grupo de administración, mientras que los equipos de aplicaciones se encargan de las políticas de sus suscripciones, lo que permite la gobernanza distribuida con el cumplimiento de los estándares de la organización.",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"id": "E01.08",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": "Asigne el rol integrado Colaborador de directivas de recursos en un ámbito determinado para habilitar la gobernanza de nivel de aplicación.",
- "waf": null
+ "text": "Asigne el rol integrado Colaborador de directiva de recursos en un ámbito determinado para habilitar la gobernanza de nivel de aplicación.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
},
{
"category": "Gobernanza",
@@ -1882,7 +2001,8 @@
"severity": "Medio",
"subcategory": "Gobernanza",
"text": "Limite el número de asignaciones de Azure Policy realizadas en el ámbito del grupo de administración raíz para evitar la administración a través de exclusiones en ámbitos heredados.",
- "waf": null
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
},
{
"category": "Gobernanza",
@@ -1892,7 +2012,7 @@
"service": "Policy",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": "Si existen requisitos de soberanía de datos, se pueden implementar directivas de Azure para aplicarlos",
+ "text": "Si existen requisitos de soberanía de datos, se deben implementar Azure Policies para aplicarlos.",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "Seguridad"
},
@@ -1903,29 +2023,30 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
"service": "Policy",
"severity": "Medio",
- "subcategory": null,
- "text": "En el caso de la Zona de Aterrizaje Soberana, la iniciativa política de referencia de la política de soberanía se despliega y asigna al nivel correcto de MG.",
- "waf": null
+ "subcategory": "Gobernanza",
+ "text": "Para la zona de aterrizaje soberana, implemente la línea base de la política de soberanía y asígnela en el nivel de grupo de gestión correcto.",
+ "waf": "Seguridad"
},
{
- "category": null,
+ "category": "Gobernanza",
"guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
"id": "E01.12",
"link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
"service": "Policy",
- "severity": null,
+ "severity": "Medio",
"subcategory": "Gobernanza",
- "text": "En el caso de la Zona de Aterrizaje Soberana, se documentan los objetivos de control soberano para el mapeo de políticas.",
+ "text": "En el caso de la Zona de Aterrizaje Soberano, documente los objetivos del Control Soberano para el mapeo de políticas.",
"waf": "Seguridad"
},
{
"category": "Gobernanza",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
"id": "E01.13",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": "En el caso de la Zona de Aterrizaje Soberana, existe un proceso para el CRUD de \"Objetivos de Control Soberano para el mapeo de políticas\".",
+ "text": "En el caso de la Zona de Aterrizaje Soberana, garantizar que exista un proceso para la gestión de los \"objetivos de control soberano para el mapeo de políticas\".",
"waf": "Seguridad"
},
{
@@ -1935,50 +2056,63 @@
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
"severity": "Medio",
"subcategory": "Optimice su inversión en la nube",
- "text": "Configure alertas de presupuesto \"real\" y \"pronosticado\".",
+ "text": "Configure alertas de presupuesto \"Real\" y \"Prevista\".",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "Costar"
},
{
- "category": null,
+ "category": "Administración",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
"id": "F01.01",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": null,
+ "text": "Use un único área de trabajo de registros de monitor para administrar las plataformas de forma centralizada, excepto cuando el control de acceso basado en rol de Azure (Azure RBAC), los requisitos de soberanía de datos o las directivas de retención de datos exijan áreas de trabajo independientes.",
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "Operaciones"
},
+ {
+ "category": "Administración",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "id": "F01.02",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "Medio",
+ "subcategory": "Monitorización",
+ "text": "Decida si desea usar una única área de trabajo de Azure Monitor Logs para todas las regiones o crear varias áreas de trabajo para cubrir varias regiones geográficas. Cada enfoque tiene ventajas y desventajas, incluidos los posibles cargos de red entre regiones",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Fiabilidad"
+ },
{
"category": "Administración",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"id": "F01.03",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "Medio",
+ "severity": "Alto",
"subcategory": "Monitorización",
- "text": "Exporte los registros a Azure Storage si los requisitos de retención de registros superan los doce años. Use el almacenamiento inmutable con una directiva de escritura única y lectura múltiple para que los datos no se puedan borrar ni modificar durante un intervalo especificado por el usuario.",
+ "text": "Exporte los registros a Azure Storage si los requisitos de retención de registros superan los doce años. Use el almacenamiento inmutable con una política de escritura única y lectura múltiple para que los datos no se puedan borrar ni modificar durante un intervalo especificado por el usuario.",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": null
+ "waf": "Operaciones"
},
{
"category": "Administración",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "id": "F01.05",
+ "id": "F01.04",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"service": "VM",
"severity": "Medio",
- "subcategory": null,
- "text": "Supervise el desfase de configuración de la máquina virtual (VM) a nivel de sistema operativo mediante Azure Policy. La habilitación de las funcionalidades de auditoría de Azure Automanage Machine Configuration a través de la directiva ayuda a las cargas de trabajo del equipo de aplicaciones a consumir inmediatamente las funcionalidades de características con poco esfuerzo.",
+ "subcategory": "Monitorización",
+ "text": "Supervise el desfase de configuración de la máquina virtual (VM) a nivel de sistema operativo mediante Azure Policy. La habilitación de las funcionalidades de auditoría de Azure Automanage Machine Configuration a través de directivas ayuda a las cargas de trabajo del equipo de aplicaciones a consumir inmediatamente las funcionalidades de características con poco esfuerzo.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Operaciones"
},
{
"category": "Administración",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "id": "F01.06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "id": "F01.05",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "Medio",
"subcategory": "Cumplimiento operacional",
@@ -1989,142 +2123,174 @@
{
"category": "Administración",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "id": "F01.07",
+ "id": "F01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "Medio",
"subcategory": "Cumplimiento operacional",
- "text": null,
+ "text": "Use Azure Update Manager como mecanismo de aplicación de revisiones para máquinas virtuales Windows y Linux fuera de Azure mediante Azure Arc.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "Operaciones"
},
{
"category": "Administración",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "id": "F01.08",
+ "id": "F01.07",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "Utilice Network Watcher para supervisar de forma proactiva los flujos de tráfico",
+ "text": "Utilice Network Watcher para supervisar de forma proactiva los flujos de tráfico.",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "Operaciones"
},
{
- "category": null,
+ "category": "Administración",
"guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "id": "F01.09",
+ "id": "F01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"severity": "Medio",
"subcategory": "Monitorización",
"text": "Utilice bloqueos de recursos para evitar la eliminación accidental de servicios compartidos críticos.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": null
+ "waf": "Operaciones"
},
{
"category": "Administración",
"guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "id": "F01.10",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "id": "F01.09",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
"severity": "Bajo",
"subcategory": "Monitorización",
- "text": "Use directivas de denegación para complementar las asignaciones de roles de Azure. La combinación de directivas de denegación y asignaciones de roles de Azure garantiza que existan las barreras de protección adecuadas para exigir quién puede implementar y configurar recursos y qué recursos pueden implementar y configurar.",
+ "text": "Use directivas de denegación para complementar las asignaciones de roles de Azure. La combinación de directivas de denegación y asignaciones de roles de Azure garantiza que se establezcan las barreras de protección adecuadas para aplicar quién puede implementar y configurar recursos y qué recursos pueden implementar y configurar.",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal",
"waf": "Operaciones"
},
{
- "category": null,
+ "category": "Administración",
"guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "id": "F01.11",
+ "id": "F01.10",
"link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "Incluya eventos de estado de servicios y recursos como parte de la solución general de supervisión de la plataforma. El seguimiento del estado de los servicios y los recursos desde la perspectiva de la plataforma es un componente importante de la administración de recursos en Azure.",
+ "text": "Incluya eventos de estado de servicio y recursos como parte de la solución general de supervisión de la plataforma. El seguimiento del servicio y el estado de los recursos desde la perspectiva de la plataforma es un componente importante de la administración de recursos en Azure.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/",
"waf": "Operaciones"
},
{
"category": "Administración",
"guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "id": "F01.12",
+ "id": "F01.11",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "severity": null,
+ "severity": "Medio",
"subcategory": "Monitorización",
- "text": "Incluya alertas y grupos de acciones como parte de la plataforma Azure Service Health para asegurarse de que se pueden realizar las alertas o los problemas",
+ "text": "Incluya alertas y grupos de acciones como parte de la plataforma Azure Service Health para asegurarse de que se pueden tomar medidas sobre las alertas o los problemas.",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules",
"waf": "Operaciones"
},
{
"category": "Administración",
"guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "id": "F01.13",
+ "id": "F01.12",
"link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "No envíe entradas de registro sin procesar a los sistemas de supervisión locales. En su lugar, adopte el principio de que los datos nacidos en Azure permanecen en Azure. Si se requiere la integración de SIEM local, envíe alertas críticas en lugar de registros.",
- "waf": null
+ "text": "No devuelva las entradas de registro sin procesar a los sistemas de supervisión locales. En su lugar, adopte el principio de que los datos nacidos en Azure permanecen en Azure. Si se requiere la integración de SIEM en las instalaciones, envíe alertas críticas en lugar de registros.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/",
+ "waf": "Operaciones"
},
{
"category": "Administración",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "id": "F01.15",
+ "id": "F01.13",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "Medio",
"subcategory": "Monitorización",
"text": "Use los registros de Azure Monitor para obtener información e informes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "Operaciones"
},
{
"category": "Administración",
"guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "id": "F01.16",
+ "id": "F01.14",
"link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "Cuando sea necesario, use cuentas de almacenamiento compartido dentro de la zona de aterrizaje para el almacenamiento de registros de la extensión de diagnóstico de Azure.",
+ "text": "Cuando sea necesario, use cuentas de almacenamiento compartido dentro de la zona de aterrizaje para el almacenamiento de registros de extensión de diagnóstico de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/",
"waf": "Operaciones"
},
{
- "category": null,
+ "category": "Administración",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "id": "F01.17",
+ "id": "F01.15",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
- "severity": null,
+ "severity": "Medio",
"subcategory": "Monitorización",
- "text": null,
+ "text": "Use las alertas de Azure Monitor para la generación de alertas operativas.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "Operaciones"
},
{
"category": "Administración",
"guid": "859c3900-4514-41eb-b010-475d695abd74",
- "id": "F01.18",
+ "id": "F01.16",
"link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "severity": null,
+ "severity": "Medio",
"subcategory": "Monitorización",
"text": "Asegúrese de que se han evaluado los requisitos de supervisión y de que se aplican las configuraciones adecuadas de recopilación de datos y alertas.",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/",
"waf": "Operaciones"
},
{
- "category": null,
+ "category": "Administración",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "id": "F01.19",
+ "id": "F01.17",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "Medio",
- "subcategory": null,
- "text": "Al usar el seguimiento de cambios e inventario a través de cuentas de Azure Automation, asegúrese de que ha seleccionado las regiones admitidas para vincular el área de trabajo de Log Analytics y las cuentas de automatización.",
+ "subcategory": "Monitorización",
+ "text": "Al usar el seguimiento de cambios e inventario a través de cuentas de Azure Automation, asegúrese de que ha seleccionado regiones compatibles para vincular el área de trabajo de Log Analytics y las cuentas de automatización.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "Operaciones"
},
{
- "category": null,
+ "category": "Administración",
"guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "id": "F01.19",
+ "id": "F01.18",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "Establecimiento de la supervisión de los componentes de la plataforma de la zona de aterrizaje, AMBA es una solución de marco que está disponible y proporciona una manera sencilla de escalar las alertas mediante Azure Policy",
+ "text": "Implementación de AMBA para establecer la supervisión de los componentes de la plataforma de la zona de aterrizaje: AMBA es una solución de marco que está disponible y proporciona una manera sencilla de escalar las alertas mediante Azure Policy.",
"training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
"waf": "Operaciones"
},
+ {
+ "category": "Administración",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "id": "F01.19",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
+ "severity": "Medio",
+ "subcategory": "Monitorización",
+ "text": "Use Azure Monitoring Agent (AMA). El agente de Log Analytics está en desuso desde el 31 de agosto de 2024",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation",
+ "waf": "Operaciones"
+ },
+ {
+ "category": "Administración",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "id": "F01.20",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
+ "severity": "Alto",
+ "subcategory": "Protección de datos",
+ "text": "Asegúrese de que las cuentas de almacenamiento sean redundantes por zona o región, la redundancia garantiza que las cuentas de almacenamiento cumplan los objetivos de disponibilidad y durabilidad en medio de errores, sopesando los costos más bajos con una mayor disponibilidad. El almacenamiento con redundancia local ofrece la menor durabilidad al menor costo.",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "waf": "Fiabilidad"
+ },
{
"category": "Administración",
"guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
@@ -2132,7 +2298,8 @@
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"severity": "Medio",
"subcategory": "Protección de datos",
- "text": "Considere la posibilidad de replicar entre regiones en Azure para BCDR con regiones emparejadas",
+ "text": "Habilite la replicación entre regiones en Azure para BCDR con regiones emparejadas.",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/",
"waf": "Fiabilidad"
},
{
@@ -2141,25 +2308,26 @@
"id": "F02.02",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "Medio",
+ "severity": "Bajo",
"subcategory": "Protección de datos",
- "text": "Al usar Azure Backup, tenga en cuenta los diferentes tipos de copia de seguridad (GRS, ZRS Y LRS), ya que la configuración predeterminada es GRS",
+ "text": "Al usar Azure Backup, use los tipos de copia de seguridad correctos (GRS, ZRS Y LRS) para la copia de seguridad, ya que la configuración predeterminada es GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Fiabilidad"
},
{
- "category": null,
+ "category": "Administración",
"guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
"id": "F03.01",
"link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
"service": "VM",
"severity": "Medio",
"subcategory": "Cumplimiento operacional",
- "text": "Use directivas de Azure para implementar automáticamente configuraciones de software a través de extensiones de máquina virtual y aplicar una configuración de máquina virtual de línea base compatible.",
+ "text": "Use directivas de invitado de Azure para implementar automáticamente configuraciones de software a través de extensiones de máquina virtual y aplicar una configuración de máquina virtual de línea base compatible.",
"waf": "Seguridad"
},
{
"category": "Administración",
- "description": "Las características de configuración de invitado de Azure Policy pueden auditar y corregir la configuración de la máquina (por ejemplo, el sistema operativo, la aplicación, el entorno) para asegurarse de que los recursos se alinean con las configuraciones esperadas, y Update Management puede aplicar la administración de revisiones para las máquinas virtuales.",
+ "description": "Use las características de configuración de invitado de Azure Policy para auditar y corregir la configuración de la máquina (por ejemplo, el sistema operativo, la aplicación, el entorno) para asegurarse de que los recursos se alinean con las configuraciones esperadas, y Update Management puede aplicar la administración de revisiones para las máquinas virtuales.",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"id": "F03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
@@ -2167,6 +2335,7 @@
"severity": "Medio",
"subcategory": "Cumplimiento operacional",
"text": "Supervise el desfase de la configuración de seguridad de la máquina virtual a través de Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Seguridad"
},
{
@@ -2178,6 +2347,7 @@
"severity": "Medio",
"subcategory": "Proteger y recuperar",
"text": "Use Azure Site Recovery para escenarios de recuperación ante desastres de Azure a Azure Virtual Machines. Esto le permite replicar cargas de trabajo en todas las regiones.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "Operaciones"
},
{
@@ -2187,7 +2357,8 @@
"link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
"severity": "Medio",
"subcategory": "Proteger y recuperar",
- "text": "Asegúrese de usar y probar las capacidades nativas de recuperación ante desastres del servicio PaaS.",
+ "text": "Utilice las capacidades nativas de recuperación ante desastres del servicio PaaS. Realice pruebas de conmutación por error con estas funcionalidades.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/",
"waf": "Operaciones"
},
{
@@ -2199,45 +2370,10 @@
"severity": "Medio",
"subcategory": "Proteger y recuperar",
"text": "Use funcionalidades de copia de seguridad nativas de Azure o una solución de copia de seguridad de terceros compatible con Azure.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Operaciones"
},
{
- "ammp": true,
- "category": "Administración",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "id": "F05.01",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "Alto",
- "subcategory": "Tolerancia a fallos",
- "text": "Aproveche las zonas de disponibilidad para las máquinas virtuales en las regiones en las que se admiten.",
- "waf": "Fiabilidad"
- },
- {
- "ammp": true,
- "category": "Administración",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "id": "F05.02",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "Alto",
- "subcategory": "Tolerancia a fallos",
- "text": "Evite ejecutar una carga de trabajo de producción en una sola máquina virtual.",
- "waf": "Fiabilidad"
- },
- {
- "category": "Administración",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "id": "F05.03",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "Medio",
- "subcategory": "Tolerancia a fallos",
- "text": "Azure Load Balancer y Application Gateway distribuyen el tráfico de red entrante entre varios recursos.",
- "waf": "Fiabilidad"
- },
- {
- "ammp": true,
"category": "Administración",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"id": "F06.01",
@@ -2245,7 +2381,8 @@
"service": "WAF",
"severity": "Alto",
"subcategory": "Entrega de aplicaciones",
- "text": "Agregue la configuración de diagnóstico para guardar los registros de WAF de los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway. Revise periódicamente los registros para comprobar si hay ataques y detecciones de falsos positivos.",
+ "text": "Agregue configuración de diagnóstico para guardar los registros de WAF de los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway. Revise periódicamente los registros para comprobar si hay ataques y detecciones de falsos positivos.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "Operaciones"
},
{
@@ -2257,6 +2394,7 @@
"severity": "Medio",
"subcategory": "Entrega de aplicaciones",
"text": "Envíe registros de WAF desde los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway, a Microsoft Sentinel. Detecte ataques e integre la telemetría de WAF en su entorno general de Azure.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "Operaciones"
},
{
@@ -2267,6 +2405,7 @@
"severity": "Medio",
"subcategory": "Control de acceso",
"text": "Determine el plan de respuesta a incidentes para los servicios de Azure antes de permitirlo en producción.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/",
"waf": "Seguridad"
},
{
@@ -2276,11 +2415,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
"severity": "Medio",
"subcategory": "Control de acceso",
- "text": "Implemente un enfoque de confianza cero para el acceso a la plataforma Azure, cuando corresponda.",
+ "text": "Aplique un enfoque de confianza cero para el acceso a la plataforma Azure.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"id": "G02.01",
@@ -2288,7 +2427,8 @@
"service": "Key Vault",
"severity": "Alto",
"subcategory": "Cifrado y claves",
- "text": "Uso de Azure Key Vault para almacenar los secretos y las credenciales",
+ "text": "Use Azure Key Vault para almacenar sus secretos y credenciales.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2301,6 +2441,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Use diferentes instancias de Azure Key Vaults para diferentes aplicaciones y regiones para evitar límites de escala de transacciones y restringir el acceso a los secretos.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2311,7 +2452,8 @@
"service": "Key Vault",
"severity": "Medio",
"subcategory": "Cifrado y claves",
- "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención de los objetos eliminados.",
+ "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención para los objetos eliminados.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2323,6 +2465,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Siga un modelo de privilegios mínimos limitando la autorización para eliminar claves, secretos y certificados de forma permanente a roles de identificador personalizados especializados de Microsoft Entra.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2334,6 +2477,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Automatice el proceso de gestión y renovación de certificados con autoridades de certificación públicas para facilitar la administración.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2345,6 +2489,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Establezca un proceso automatizado para la rotación de claves y certificados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2356,6 +2501,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Habilite el firewall y el punto de conexión de servicio de red virtual o el punto de conexión privado en el almacén para controlar el acceso al almacén de claves.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "Seguridad"
},
{
@@ -2367,6 +2513,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Use el área de trabajo de Log Analytics de Azure Monitor central de la plataforma para auditar el uso de claves, certificados y secretos en cada instancia de Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Seguridad"
},
{
@@ -2377,7 +2524,8 @@
"service": "Key Vault",
"severity": "Medio",
"subcategory": "Cifrado y claves",
- "text": "Delegue la creación de instancias de Key Vault y el acceso con privilegios, y use Azure Policy para aplicar una configuración coherente y compatible.",
+ "text": "Delegue la creación de instancias de Key Vault y el acceso con privilegios, y use Azure Policy para aplicar una configuración coherente y conforme.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "Seguridad"
},
{
@@ -2387,7 +2535,8 @@
"link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
"severity": "Medio",
"subcategory": "Cifrado y claves",
- "text": "De forma predeterminada, utilice claves administradas por Microsoft para la funcionalidad de cifrado de entidad de seguridad y use claves administradas por el cliente cuando sea necesario.",
+ "text": "De forma predeterminada, use claves administradas por Microsoft para la funcionalidad de cifrado principal y use claves administradas por el cliente cuando sea necesario.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2399,6 +2548,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Use una instancia de Azure Key Vault por aplicación, por entorno, por región.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2410,6 +2560,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "Si desea traer sus propias claves, es posible que esto no sea compatible con todos los servicios considerados. Implemente la mitigación pertinente para que las inconsistencias no obstaculicen los resultados deseados. Elija los pares de regiones y las regiones de recuperación ante desastres adecuados que minimicen la latencia.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2421,6 +2572,7 @@
"severity": "Medio",
"subcategory": "Cifrado y claves",
"text": "En el caso de la zona de aterrizaje soberana, use el HSM administrado de Azure Key Vault para almacenar los secretos y las credenciales.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Seguridad"
},
{
@@ -2431,7 +2583,8 @@
"service": "Entra",
"severity": "Medio",
"subcategory": "Operaciones",
- "text": "Use las funcionalidades de informes de Microsoft Entra ID para generar informes de auditoría de control de acceso.",
+ "text": "Use las capacidades de generación de informes de Microsoft Entra ID para generar informes de auditoría de control de acceso.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "Seguridad"
},
{
@@ -2442,10 +2595,10 @@
"severity": "Medio",
"subcategory": "Operaciones",
"text": "Exporte los registros de actividad de Azure a los registros de Azure Monitor para la retención de datos a largo plazo. Exporte a Azure Storage para un almacenamiento a largo plazo superior a dos años, si es necesario.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"id": "G03.03",
@@ -2454,10 +2607,10 @@
"severity": "Alto",
"subcategory": "Operaciones",
"text": "Habilite la administración de la posición de seguridad en la nube de Defender para todas las suscripciones.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"id": "G03.04",
@@ -2465,11 +2618,11 @@
"service": "Defender",
"severity": "Alto",
"subcategory": "Operaciones",
- "text": "Habilite un plan de protección de cargas de trabajo en la nube de Defender para servidores en todas las suscripciones.",
+ "text": "Habilite un plan de protección de carga de trabajo en la nube de Defender para servidores en todas las suscripciones.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"id": "G03.05",
@@ -2478,10 +2631,10 @@
"severity": "Alto",
"subcategory": "Operaciones",
"text": "Habilite los planes de protección de cargas de trabajo en la nube de Defender para recursos de Azure en todas las suscripciones.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"id": "G03.06",
@@ -2489,7 +2642,8 @@
"service": "VM",
"severity": "Alto",
"subcategory": "Operaciones",
- "text": "Habilite Endpoint Protection en servidores IaaS.",
+ "text": "Habilite la protección de puntos de conexión en servidores IaaS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "Seguridad"
},
{
@@ -2501,6 +2655,7 @@
"severity": "Medio",
"subcategory": "Operaciones",
"text": "Supervise el desfase de revisiones del sistema operativo base a través de los registros de Azure Monitor y Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "Seguridad"
},
{
@@ -2511,43 +2666,56 @@
"service": "Monitor",
"severity": "Medio",
"subcategory": "Operaciones",
- "text": "Conecte las configuraciones de recursos predeterminadas a un área de trabajo centralizada de Log Analytics de Azure Monitor.",
+ "text": "Conecte las configuraciones de recursos predeterminadas a un área de trabajo centralizada de Azure Monitor Log Analytics.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Seguridad"
},
{
"category": "Seguridad",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
"id": "G03.09",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "Alto",
+ "subcategory": "Operaciones",
+ "text": "Detección centralizada de amenazas con registros correlacionados: consolide los datos de seguridad en una ubicación central donde se puedan correlacionar entre varios servicios a través de SIEM (información de seguridad y gestión de eventos)",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "id": "G03.10",
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "Medio",
"subcategory": "Operaciones",
- "text": "En el caso de la zona de aterrizaje soberana, los registros de transparencia están habilitados en el inquilino de Entra ID.",
+ "text": "Para Sovereign Landing Zone, habilite los registros de transparencia en el inquilino de Entra ID.",
"waf": "Seguridad"
},
{
"category": "Seguridad",
"guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "id": "G03.10",
+ "id": "G03.11",
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "Medio",
"subcategory": "Operaciones",
- "text": "En el caso de la zona de aterrizaje soberana, la caja de seguridad del cliente está habilitada en el inquilino de Entra ID.",
+ "text": "Para Sovereign Landing Zone, habilite la caja de seguridad del cliente en el inquilino de Entra ID.",
"waf": "Seguridad"
},
{
"category": "Seguridad",
"guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "id": "G03.11",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security",
+ "id": "G03.12",
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
"severity": "Bajo",
"subcategory": "Operaciones",
- "text": "Uso de una solución basada en Azure Event Grid para alertas en tiempo real orientadas a registros",
+ "text": "Use una solución basada en Azure Event Grid para alertas en tiempo real orientadas a registros.",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"id": "G04.01",
@@ -2555,11 +2723,11 @@
"service": "Storage",
"severity": "Alto",
"subcategory": "Visión general",
- "text": "La transferencia segura a cuentas de almacenamiento debe estar habilitada",
+ "text": "Habilite la transferencia segura a las cuentas de almacenamiento.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"id": "G04.02",
@@ -2567,11 +2735,10 @@
"service": "Storage",
"severity": "Alto",
"subcategory": "Visión general",
- "text": "Habilite la eliminación temporal del contenedor para que la cuenta de almacenamiento recupere un contenedor eliminado y su contenido.",
+ "text": "Habilite la eliminación temporal de contenedor para que la cuenta de almacenamiento recupere un contenedor eliminado y su contenido.",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Seguridad",
"guid": "6f704104-85c1-441f-96d3-c9819911645e",
"id": "G05.01",
@@ -2579,6 +2746,7 @@
"severity": "Alto",
"subcategory": "Acceso privilegiado seguro",
"text": "Separe las cuentas de administrador con privilegios para las tareas administrativas de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/",
"waf": "Seguridad"
},
{
@@ -2588,7 +2756,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "Medio",
"subcategory": "Marco de habilitación de servicios",
- "text": "Planeación de cómo se implementarán los nuevos servicios de Azure",
+ "text": "Planifique cómo se implementarán los nuevos servicios de Azure.",
"waf": "Seguridad"
},
{
@@ -2598,18 +2766,18 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "Medio",
"subcategory": "Marco de habilitación de servicios",
- "text": "Planeación de cómo se cumplirá la solicitud de servicio para los servicios de Azure",
+ "text": "Planifique cómo se cumplirá la solicitud de servicio para los servicios de Azure.",
"waf": "Seguridad"
},
{
- "ammp": true,
"category": "Automatización de plataformas y DevOps",
"guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
"id": "H01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
"severity": "Alto",
"subcategory": "Topologías de equipo de DevOps",
- "text": "Asegúrese de que cuenta con un equipo multifuncional de la plataforma DevOps para crear, administrar y mantener la arquitectura de la zona de aterrizaje de Azure.",
+ "text": "Asegúrese de contar con un equipo de plataforma DevOps multifuncional para crear, administrar y mantener la arquitectura de la zona de aterrizaje de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/",
"waf": "Operaciones"
},
{
@@ -2620,6 +2788,7 @@
"severity": "Bajo",
"subcategory": "Topologías de equipo de DevOps",
"text": "Trate de definir funciones para el equipo de la plataforma de zona de aterrizaje de Azure.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "Operaciones"
},
{
@@ -2629,18 +2798,19 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "Bajo",
"subcategory": "Topologías de equipo de DevOps",
- "text": "Trate de definir funciones para que los equipos de carga de trabajo de las aplicaciones sean autosuficientes y no requieran el soporte del equipo de la plataforma DevOps. Logre esto mediante el uso del rol RBAC personalizado.",
+ "text": "El objetivo es definir las funciones para que los equipos de carga de trabajo de las aplicaciones sean autosuficientes y no requieran el apoyo del equipo de la plataforma DevOps. Logre esto mediante el uso del rol RBAC personalizado.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "Operaciones"
},
{
- "ammp": true,
"category": "Automatización de plataformas y DevOps",
"guid": "165eb5e9-b434-448a-9e24-178632186212",
"id": "H01.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "severity": "Alto",
+ "severity": "Medio",
"subcategory": "Topologías de equipo de DevOps",
"text": "Use una canalización de CI/CD para implementar artefactos de IaC y garantizar la calidad de la implementación y los entornos de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/",
"waf": "Operaciones"
},
{
@@ -2651,10 +2821,10 @@
"severity": "Medio",
"subcategory": "Topologías de equipo de DevOps",
"text": "Incluya pruebas unitarias para IaC y código de aplicación como parte del proceso de compilación.",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/",
"waf": "Operaciones"
},
{
- "ammp": true,
"category": "Automatización de plataformas y DevOps",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"id": "H01.06",
@@ -2662,7 +2832,8 @@
"service": "Key Vault",
"severity": "Alto",
"subcategory": "Topologías de equipo de DevOps",
- "text": "Use secretos de Key Vault para evitar codificar de forma rígida información confidencial, como credenciales (máquinas virtuales, contraseñas de usuario), certificados o claves.",
+ "text": "Use los secretos de Key Vault para evitar codificar de forma rígida información confidencial, como credenciales (máquinas virtuales, contraseñas de usuario), certificados o claves.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "Operaciones"
},
{
@@ -2672,18 +2843,18 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
"severity": "Bajo",
"subcategory": "Topologías de equipo de DevOps",
- "text": "Implemente la automatización de la nueva zona de aterrizaje para aplicaciones y cargas de trabajo a través de la venta de suscripciones",
+ "text": "Implemente la automatización de la nueva zona de aterrizaje para aplicaciones y cargas de trabajo a través de la venta de suscripciones.",
"waf": "Operaciones"
},
{
- "ammp": true,
"category": "Automatización de plataformas y DevOps",
"guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
"id": "H02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "Alto",
- "subcategory": "Ciclo de vida de desarrollo",
- "text": "Asegúrese de que se utiliza un sistema de control de versiones para el código fuente de las aplicaciones y la IaC desarrollada. Microsoft recomienda Git.",
+ "subcategory": "Ciclo de vida del desarrollo",
+ "text": "Asegurar que se utiliza un sistema de control de versiones para el código fuente de las aplicaciones y la IaC desarrollada. Microsoft recomienda Git.",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/",
"waf": "Operaciones"
},
{
@@ -2692,8 +2863,9 @@
"id": "H02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "Bajo",
- "subcategory": "Ciclo de vida de desarrollo",
+ "subcategory": "Ciclo de vida del desarrollo",
"text": "Siga una estrategia de ramificación para permitir que los equipos colaboren mejor y administren de manera eficiente el control de versiones de IaC y el código de la aplicación. Revisa opciones como Github Flow.",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/",
"waf": "Operaciones"
},
{
@@ -2702,8 +2874,9 @@
"id": "H02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "Medio",
- "subcategory": "Ciclo de vida de desarrollo",
+ "subcategory": "Ciclo de vida del desarrollo",
"text": "Adopte una estrategia de solicitud de incorporación de cambios para ayudar a mantener el control de los cambios de código fusionados en ramas.",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/",
"waf": "Operaciones"
},
{
@@ -2712,23 +2885,23 @@
"id": "H02.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
"severity": "Medio",
- "subcategory": "Ciclo de vida de desarrollo",
+ "subcategory": "Ciclo de vida del desarrollo",
"text": "Establezca un proceso para usar código para implementar correcciones rápidas. Registre siempre las correcciones rápidas en el trabajo pendiente de su equipo para que cada corrección se pueda volver a trabajar en un momento posterior y pueda limitar la deuda técnica.",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/",
"waf": "Operaciones"
},
{
- "ammp": true,
"category": "Automatización de plataformas y DevOps",
"guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
"id": "H03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "Alto",
"subcategory": "Estrategia de desarrollo",
- "text": "Aproveche las herramientas de infraestructura declarativa como código, como Azure Bicep, las plantillas de ARM o Terraform, para crear y mantener la arquitectura de la zona de aterrizaje de Azure. Tanto desde el punto de vista de la carga de trabajo de la plataforma como de la aplicación.",
+ "text": "Aproveche las herramientas de infraestructura declarativa como código, como Azure Bicep, plantillas de ARM o Terraform, para crear y mantener la arquitectura de Azure Landing Zone. Tanto desde el punto de vista de la plataforma como de la carga de trabajo de la aplicación.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/",
"waf": "Operaciones"
},
{
- "ammp": true,
"category": "Automatización de plataformas y DevOps",
"guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
"id": "H04.01",
@@ -2736,13 +2909,14 @@
"severity": "Alto",
"subcategory": "Seguridad",
"text": "Integrar la seguridad en el proceso ya combinado de desarrollo y operaciones en DevOps para mitigar los riesgos en el proceso de innovación.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/",
"waf": "Operaciones"
}
],
"metadata": {
"name": "Azure Landing Zone Review",
"state": "GA",
- "timestamp": "June 17, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -2770,7 +2944,7 @@
"name": "Cumplido"
},
{
- "description": "Recomendación entendida, pero no necesaria por los requisitos actuales",
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
"name": "No es necesario"
},
{
diff --git a/checklists/alz_checklist.ja.json b/checklists/alz_checklist.ja.json
index 784b227cb..c076c2658 100644
--- a/checklists/alz_checklist.ja.json
+++ b/checklists/alz_checklist.ja.json
@@ -1,13 +1,13 @@
{
"categories": [
{
- "name": "Azure 課金と Microsoft Entra ID テナント"
+ "name": "Azure Billing と Microsoft Entra ID テナント"
},
{
- "name": "IDおよびアクセス管理"
+ "name": "ID およびアクセス管理"
},
{
- "name": "ネットワークトポロジと接続性"
+ "name": "ネットワーク トポロジと接続性"
},
{
"name": "安全"
@@ -16,7 +16,7 @@
"name": "管理"
},
{
- "name": "リソース編成"
+ "name": "リソースの編成"
},
{
"name": "プラットフォームの自動化とDevOps"
@@ -27,785 +27,850 @@
],
"items": [
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "id": "",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "中程度",
+ "subcategory": "ハブ&スポーク",
+ "text": "Azure ランディング ゾーン接続リソースを複数のリージョンにデプロイして、複数リージョンのアプリケーション ランディング ゾーンとディザスター リカバリー シナリオを迅速にサポートできるようにします。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "確実"
+ },
+ {
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
"id": "A01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
"service": "Entra",
"severity": "中程度",
"subcategory": "Microsoft Entra ID テナント",
- "text": "マルチテナントに関する明確な規制要件またはビジネス要件がない限り、Azure リソースの管理には 1 つの Entra テナントを使用します。",
+ "text": "Azure リソースの管理には 1 つの Entra テナントを使用します (マルチテナントに対する明確な規制要件やビジネス要件がない限り)。",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "オペレーションズ"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
"id": "A01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
"service": "Entra",
"severity": "低い",
"subcategory": "Microsoft Entra ID テナント",
- "text": "Microsoft Entra ID テナントを管理するためのマルチテナント自動化アプローチがあることを確認する",
+ "text": "マルチテナント自動化アプローチを使用して、Microsoft Entra ID テナントを管理します。",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "オペレーションズ"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
"id": "A01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "低い",
+ "severity": "高い",
"subcategory": "Microsoft Entra ID テナント",
- "text": "マルチテナント管理に Azure Lighthouse を活用する",
+ "text": "同じ ID でマルチテナント管理に Azure Lighthouse を使用します。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "オペレーションズ"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
"id": "A02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "クラウドソリューションプロバイダー",
- "text": "パートナーによるテナントの管理に Azure Lighthouse が使用されていることを確認する",
+ "text": "テナントを管理するためのアクセス権をパートナーに付与する場合は、Azure Lighthouse を使用します。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01",
"id": "A02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
"severity": "低い",
"subcategory": "クラウドソリューションプロバイダー",
- "text": "サポート要求とエスカレーション プロセスについてCSP パートナーと話し合う",
+ "text": "CSP パートナーがいる場合は、サポート要求とエスカレーション プロセスを定義して文書化します。",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "32952499-58c8-4e6f-ada5-972e67893d55",
"id": "A02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "中程度",
"subcategory": "クラウドソリューションプロバイダー",
- "text": "Azure Cost Management を使用したコスト レポートとビューの設定Setup Cost Reporting and Views with Azure Cost Management",
+ "text": "Azure Cost Management を使用してコスト レポートとビューを設定します。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "685cb4f2-ac9c-4b19-9167-993ed0b32415",
"id": "A03.01",
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"severity": "中程度",
"subcategory": "エンタープライズ契約",
- "text": "グループ メールボックスへの通知連絡先の構成",
+ "text": "通知連絡先をグループ メールボックスに構成します。",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "12cd499f-96e2-4e41-a243-231fb3245a1c",
"id": "A03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "低い",
"subcategory": "エンタープライズ契約",
- "text": "部門とアカウントを使用して、組織の構造を登録階層にマップし、請求の分離に役立てることができます。",
+ "text": "部門とアカウントを使用して、組織の構造を登録階層にマップし、請求の分離に役立ちます。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
"id": "A03.04",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
"severity": "中程度",
"subcategory": "エンタープライズ契約",
- "text": "EA 加入契約で DA View Charges と AO View Charges の両方を有効にして、正しい権限を持つユーザーがコストと課金データを確認できるようにします。",
+ "text": "EA 加入契約で DA ビュー料金と AO ビュー料金の両方を有効にして、正しい権限を持つユーザーがコストと請求データを確認できるようにします。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal",
"waf": "安全"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "5cf9f485-2784-49b3-9824-75d9b8bdb57b",
"id": "A03.05",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "低い",
"subcategory": "エンタープライズ契約",
- "text": "Enterprise Dev/Test サブスクリプションを利用して、非運用ワークロードのコストを削減する",
+ "text": "Enterprise Dev/Test サブスクリプションを使用して、非運用ワークロードのコストを削減します。",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c",
"id": "A04.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "低い",
"subcategory": "Microsoft 顧客契約",
- "text": "契約の請求先アカウント通知の連絡先メールを構成する",
+ "text": "契約請求先アカウント通知の連絡先メールを設定します。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "90e87802-602f-4dfb-acea-67c60689f1d7",
"id": "A04.02",
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
"severity": "低い",
"subcategory": "Microsoft 顧客契約",
- "text": "[課金プロファイル] セクションと [請求書] セクションを使用して、効果的なコスト管理のための契約の請求を構造化します",
+ "text": "請求プロファイルと請求書セクションを使用して、効果的なコスト管理のための契約請求を構造化します。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "e81a73f0-84c4-4641-b406-14db3b4d1f50",
"id": "A04.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "低い",
"subcategory": "Microsoft 顧客契約",
- "text": "開発/テスト プランの Microsoft Azure プランを利用して、非運用ワークロードのコストを削減します",
+ "text": "Microsoft Azure の Dev/Test プランを利用して、非運用ワークロードのコストを削減します。",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio",
"waf": "費用"
},
{
- "category": "Azure 課金と Microsoft Entra ID テナント",
+ "category": "Azure Billing と Microsoft Entra ID テナント",
"guid": "ae757485-92a4-482a-8bc9-eefe6f5b5ec3",
"id": "A04.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "中程度",
"subcategory": "Microsoft 顧客契約",
- "text": "契約課金 RBAC ロールの割り当てを定期的に監査して、MCA 課金アカウントにアクセスできるユーザーを確認します",
+ "text": "契約請求 RBAC ロールの割り当てを定期的に監査して、MCA 課金アカウントにアクセスできるユーザーを確認するプロセスを定義および文書化します。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles",
"waf": "費用"
},
{
- "ammp": true,
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"id": "B03.01",
"link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"service": "Entra",
"severity": "高い",
"subcategory": "同一性",
- "text": "クラウド運用モデルに合わせた RBAC モデルを適用します。管理グループとサブスクリプション全体のスコープと割り当てを行います。",
+ "text": "クラウド運用モデルに合わせた RBAC モデルを適用します。管理グループとサブスクリプション全体のスコープと割り当て。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "4348bf81-7573-4512-8f46-9061cc198fea",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
"severity": "高い",
"subcategory": "Microsoft Entra ID とハイブリッド ID",
- "text": "Azure サービスへの認証には、サービス プリンシパルの代わりにマネージド ID を使用します。既存のサービス プリンシパルは、Entra ID > サインイン ログ > サービス プリンシパル ログインを使用して確認できます。",
+ "text": "Azure サービスへの認証には、サービス プリンシパルの代わりにマネージド ID を使用します。既存のサービス プリンシパルは、Entra ID >サインイン ログ>サービス プリンシパル ログインで確認できます。",
"training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
"waf": "安全"
},
{
- "ammp": true,
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "高い",
+ "severity": "中程度",
"subcategory": "同一性",
- "text": "すべてのアカウントの種類で、認証の種類である職場または学校アカウントのみを使用します。Microsoft アカウントの使用は避けてください",
+ "text": "すべてのアカウントの種類に対して、認証の種類である [職場または学校アカウント] のみを使用します。Microsoftアカウントの使用は避けてください",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
"id": "B03.03",
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
"service": "Entra",
"severity": "中程度",
"subcategory": "同一性",
- "text": "アクセス許可の割り当てには、グループのみを使用します。グループ管理システムが既に導入されている場合は、オンプレミス グループを Entra ID のみのグループに追加します。",
+ "text": "権限の割り当てには、グループのみを使用してください。グループ管理システムがすでに導入されている場合は、オンプレミス グループを Entra ID のみのグループに追加します。",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
"id": "B03.04",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "低い",
+ "severity": "高い",
"subcategory": "同一性",
- "text": "Azure 環境に対する権限を持つすべてのユーザーに Microsoft Entra ID 条件付きアクセス ポリシーを適用する",
+ "text": "Azure 環境に対する権限を持つすべてのユーザーに対して、Microsoft Entra ID 条件付きアクセス ポリシーを適用します。",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"id": "B03.05",
"link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
"service": "Entra",
"severity": "高い",
"subcategory": "同一性",
- "text": "Azure 環境に対する権限を持つすべてのユーザーに多要素認証を適用する",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Azure 環境に対する権限を持つすべてのユーザーに多要素認証を適用します。",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
"id": "B03.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "同一性",
- "text": "役割とセキュリティの要件に基づいて、ランディング ゾーン内にデプロイされたリソースを管理するために、一元化された委任された責任を適用します",
+ "text": "役割とセキュリティ要件に基づいて、ランディング ゾーン内にデプロイされたリソースを管理するための一元化された委任された責任を適用します。",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "14658d35-58fd-4772-99b8-21112df27ee4",
"id": "B03.07",
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"service": "Entra",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Microsoft Entra ID Privileged Identity Management (PIM) を適用して、ゼロの永続的なアクセスと最小限の特権を確立します",
+ "text": "Microsoft Entra ID Privileged Identity Management (PIM) を適用して、ゼロスタンディング アクセスと最小特権を確立します。",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
"id": "B03.09",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
+ "severity": "高い",
+ "subcategory": "同一性",
+ "text": "Active Directory ドメイン コントローラーをデプロイする場合は、Availability Zones のある場所を使用し、これらのゾーンに少なくとも 2 つの VM をデプロイします。使用できない場合は、可用性セットにデプロイします。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "確実"
+ },
+ {
+ "category": "ID およびアクセス管理",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "id": "B03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Active Directory を Windows Server にデプロイする場合は、可用性ゾーンのある場所を使用し、これらのゾーンに少なくとも 2 つの VM をデプロイします。使用できない場合は、可用性セットにデプロイします",
+ "text": "Azure ランディング ゾーンの ID リソースを複数のリージョンにデプロイします。 ドメイン コントローラーを使用している場合は、各リージョンを Active Directory サイトに関連付けて、リソースがローカル ドメイン コントローラーに解決できるようにします。",
"training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"waf": "確実"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "id": "B03.10",
+ "id": "B03.11",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Azure カスタム RBAC ロールを Azure カスタム RBAC ロールとして使用して、ALZ 全体にわたるきめ細かなアクセスを提供します: Azure プラットフォーム所有者、ネットワーク管理、セキュリティ運用、サブスクリプション所有者、アプリケーション所有者。これらの役割をビジネス内のチームと責任に合わせます。",
+ "text": "Azure カスタム RBAC ロールを次の主要なロールに使用して、ALZ 全体できめ細かなアクセスを提供します: Azure プラットフォーム所有者、ネットワーク管理、セキュリティ操作、サブスクリプション所有者、アプリケーション所有者。これらの役割をビジネス内のチームと責任に合わせます。",
"training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "安全"
},
{
+ "category": "ID およびアクセス管理",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "id": "B03.10",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "id": "B03.12",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "中程度",
- "subcategory": "IDおよびアクセス管理",
- "text": "Active Directory ドメイン サービスから Entra ドメイン サービスへの切り替えを計画している場合は、すべてのワークロードの互換性を評価します",
+ "subcategory": "同一性",
+ "text": "Active Directory Domain Services から Entra ドメイン サービスへの切り替えを計画している場合は、すべてのワークロードの互換性を評価します。",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "id": "B03.13",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "中程度",
+ "subcategory": "同一性",
+ "text": "Microsoft Entra Domain Services を使用する場合は、レプリカ セットを使用します。レプリカ セットを使用すると、マネージド ドメインの回復性が向上し、追加のリージョンにデプロイできるようになります。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "確実"
+ },
+ {
+ "category": "ID およびアクセス管理",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "id": "B03.11",
+ "id": "B03.14",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Microsoft Entra ID ログをプラットフォーム中心の Azure Monitor と統合します。Azure Monitor を使用すると、Azure のログと監視データに関する信頼できる唯一の情報源が得られ、ログの収集と保持に関する要件を満たすクラウド ネイティブ オプションが組織に提供されます。",
+ "text": "Microsoft Entra ID ログをプラットフォーム中央の Azure Monitor と統合します。Azure Monitor を使用すると、Azure のログと監視データに関する信頼できる唯一の情報源を使用できるため、ログの収集と保持に関する要件を満たすためのクラウド ネイティブ オプションを組織に提供できます。",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "安全"
},
{
"ammp": true,
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "id": "B03.12",
+ "id": "B03.15",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "高い",
"subcategory": "同一性",
- "text": "テナント全体のアカウント ロックアウトを防ぐために、緊急アクセスまたは非常用アカウントを実装する",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "テナント全体のアカウント ロックアウトを防ぐために、緊急アクセスまたは非常用アカウントを実装します。MFA は、2024 年 10 月にすべてのユーザーに対してデフォルトで有効になります。これらのアカウントを更新して、パスキー (FIDO2) を使用するか、MFA の証明書ベースの認証を構成することをお勧めします。",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "id": "B03.13",
+ "id": "B03.16",
"link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"severity": "中程度",
"subcategory": "Microsoft Entra ID",
- "text": "Microsoft Entra Connectを展開する場合は、高可用性/ディザスタリカバリのためにステージングサーバーを活用します",
+ "text": "Microsoft Entra Connect をデプロイする場合は、高可用性/ディザスター リカバリーのためにステージング サーバーを使用します。",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies",
"waf": "確実"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "id": "B03.14",
+ "id": "B03.17",
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Microsoft Entra ID ロールの割り当てにオンプレミスの同期アカウントを使用しないでください。",
+ "text": "特に必要なシナリオがない限り、Microsoft Entra ID ロールの割り当てにオンプレミスの同期アカウントを使用しないでください。",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "id": "B03.15",
+ "id": "B03.18",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "中程度",
"subcategory": "同一性",
- "text": "必要に応じて、Microsoft Entra ID アプリケーション プロキシを使用して、内部アプリケーション (クラウドまたはオンプレミスでホストされている) への安全で認証されたアクセスをリモート ユーザーに付与します。",
+ "text": "Microsoft Entra ID アプリケーション プロキシを使用してリモート ユーザーにアプリケーションへのアクセス権を付与する場合は、テナントごとに 1 つのインスタンスしか持つことができないため、プラットフォーム リソースとして管理します。",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
"id": "B04.01",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
- "severity": "中程度",
- "subcategory": "ランディング ゾーン",
- "text": "仮想ネットワークを使用してアイデンティティ ネットワークのセグメント化を構成し、ハブにピア バックします。アプリケーション ランディング ゾーン (レガシ) 内での認証の提供。",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "severity": "高い",
+ "subcategory": "ランディングゾーン",
+ "text": "仮想ネットワークを使用して Identity ネットワークのセグメント化を構成し、ハブにピアリングします。アプリケーション ランディング ゾーン (レガシ) 内での認証を提供します。",
"training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "d4d1ad54-1abc-4919-b267-3f342d3b49e4",
"id": "B04.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"severity": "中程度",
- "subcategory": "ランディング ゾーン",
- "text": "可能であれば、Azure RBAC を使用して、リソースへのデータ プレーン アクセスを管理します。例: Key Vault、ストレージ アカウント、データベース サービス全体のデータ操作。",
+ "subcategory": "ランディングゾーン",
+ "text": "可能であれば、Azure RBAC を使用して、リソースへのデータ プレーン アクセスを管理します。たとえば、Key Vault、ストレージ アカウント、データベース サービス全体のデータ操作などです。",
"training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"waf": "安全"
},
{
- "category": "IDおよびアクセス管理",
+ "category": "ID およびアクセス管理",
"guid": "d505ebcb-79b1-4274-9c0d-a27c8bea489c",
"id": "B04.03",
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
"severity": "中程度",
- "subcategory": "ランディング ゾーン",
+ "subcategory": "ランディングゾーン",
"text": "Microsoft Entra ID PIM アクセス レビューを使用して、リソースの権利を定期的に検証します。",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review",
"waf": "安全"
},
{
- "ammp": true,
- "category": "リソース編成",
+ "category": "リソースの編成",
"description": "https://aka.ms/azurenamingtool で入手できる Azure 名前付けツールの使用を検討してください",
"guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
"id": "C01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
"severity": "高い",
"subcategory": "名前付けとタグ付け",
- "text": "Microsoft のベスト プラクティスの名前付け標準に従うことをお勧めします",
+ "text": "リソースには、Microsoft Best Practice Naming Standards など、明確に定義された名前付けスキームを使用します。",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "2df27ee4-12e7-4f98-9f63-04722dd69c5b",
"id": "C02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "4 レベル以下の合理的にフラットな管理グループ階層を適用します。",
+ "text": "管理グループ階層を 4 つ以下の適度にフラットなものにします。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "667313b4-f566-44b5-b984-a859c773e7d2",
"id": "C02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "サンドボックス管理グループを適用して、ユーザーがすぐに Azure を試せるようにする",
+ "text": "サンドボックス管理グループを適用して、ユーザーがすぐに Azure を試せるようにします。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
"id": "C02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "ルート管理グループの下にプラットフォーム管理グループを適用して、共通のプラットフォーム ポリシーと Azure ロールの割り当てをサポートする",
+ "text": "ルート管理グループの下にプラットフォーム管理グループを適用して、共通のプラットフォーム ポリシーと Azure ロールの割り当てをサポートします。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
"id": "C02.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "接続管理グループで専用の接続サブスクリプションを適用して、Azure Virtual WAN ハブ、プライベート ドメイン ネーム システム (DNS)、ExpressRoute 回線、その他のネットワーク リソースをホストします。",
+ "text": "接続管理グループで専用の接続サブスクリプションを適用して、Azure Virtual WAN ハブ、プライベートな非 AD ドメイン ネーム システム (DNS)、ExpressRoute 回線、その他のネットワーク リソースをホストします。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant = (array_length(mgmtChain) > 1)",
"guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
"id": "C02.05",
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "サブスクリプションがルート管理グループの下に配置されないように強制する",
+ "text": "ルート管理グループの下にサブスクリプションが配置されないように強制します。",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
"id": "C02.06",
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "管理グループ階層の設定で Azure RBAC 承認を有効にすることで、特権ユーザーのみがテナント内の管理グループを操作できるようにします",
+ "text": "特権ユーザーのみがテナント内の管理グループを操作できるように強制するには、管理グループ階層設定で Azure RBAC 承認を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "92481607-d5d1-4e4e-9146-58d3558fd772",
"id": "C02.07",
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "ルートレベルの管理グループの下に管理グループを適用し、セキュリティ、コンプライアンス、接続性、機能のニーズに基づいてワークロードの種類を表します。",
+ "text": "ルートレベルの管理グループの下に管理グループを適用して、セキュリティ、コンプライアンス、接続性、機能のニーズに基づいてワークロードの種類を表します。",
"waf": "安全"
},
{
- "ammp": true,
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "49b82111-2df2-47ee-912e-7f983f630472",
"id": "C02.08",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "リソース所有者に自分の役割と責任を認識させるプロセスを適用し、レビュー、予算レビュー、ポリシーのコンプライアンスにアクセスし、必要に応じて修復します。",
+ "text": "リソース所有者に自分の役割と責任を認識させるプロセスを適用し、アクセス レビュー、予算レビュー、ポリシーのコンプライアンス、必要に応じて修復します。",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
"id": "C02.09",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"severity": "中程度",
"subcategory": "サブスクリプション",
"text": "すべてのサブスクリプション所有者と IT コア チームが、サブスクリプションのクォータと、それらが特定のサブスクリプションのプロビジョニング リソースに与える影響を認識していることを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
"id": "C02.10",
"link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "必要に応じてリザーブドインスタンスを使用して、コストを最適化し、ターゲットリージョンで使用可能な容量を確保します。購入した予約インスタンス VM SKU の使用を Azure Policy で強制します。",
+ "text": "必要に応じてリザーブドインスタンスを使用して、コストを最適化し、ターゲットリージョンで利用可能な容量を確保します。",
"training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
"waf": "安全"
},
{
"ammp": true,
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
"id": "C02.11",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/design-capacity",
- "severity": "高い",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards",
+ "severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "ダッシュボード、ブック、または手動プロセスを適用して、使用済み容量レベルを監視します",
- "training": "https://learn.microsoft.com/learn/paths/monitor-usage-performance-availability-resources-azure-monitor/",
+ "text": "ダッシュボードや視覚化を確立して、コンピューティングとストレージ容量のメトリックを監視します。(CPU、メモリ、ディスク容量など)",
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
"id": "C02.12",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "コスト管理のプロセスを適用する",
+ "text": "クラウド導入の一環として、「マネージド クラウド コスト」プロセスを使用して詳細なコスト管理計画を実装します。",
"training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "3a923c34-74d0-4001-aac6-a9e01e6a83de",
"id": "C02.13",
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "ドメイン コントローラーなどの ID サービスにサーバーを使用する場合は、ID 管理グループに専用の ID サブスクリプションを確立して、これらのサービスをホストします。リソースが、そのリージョンで使用可能なドメイン コントローラーを使用するように設定されていることを確認します。",
+ "text": "ドメイン コントローラーなどのサーバーを ID サービスに使用する場合は、これらのサービスをホストするために、ID 管理グループに専用の ID サブスクリプションを確立します。リソースが、そのリージョンで使用可能なドメイン コントローラーを使用するように設定されていることを確認します。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
"id": "C02.14",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "タグが課金とコスト管理に使用されていることを確認する",
+ "text": "タグが請求とコスト管理に使用されていることを確認します。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
"id": "C02.15",
"link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "ソブリン ランディング ゾーンの場合は、\"ランディング ゾーン\" MG の直下に \"機密企業\" と \"機密オンライン\" 管理グループを配置します。",
+ "text": "ソブリンランディングゾーンについては、「ランディングゾーン」MGの直下に「コンフィデンシャルコーポレーション」と「コンフィデンシャルオンライン」管理グループを置きます。",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview",
"waf": "安全"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
"id": "C03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
"severity": "高い",
"subcategory": "地域",
- "text": "デプロイに適した Azure リージョンを選択します。Azure は、多くのリージョンと地域を通じてグローバル カバレッジを提供するグローバル規模のクラウド プラットフォームです。Azure リージョンが異なれば、特性、アクセスと可用性のモデル、コスト、容量、提供されるサービスも異なるため、すべての条件と要件を考慮することが重要です",
+ "text": "デプロイに適した Azure リージョンを選択します。Azure は、多くの地域や地域を通じてグローバルにカバーするグローバル規模のクラウド プラットフォームです。Azure リージョンが異なれば、特性、アクセスと可用性モデル、コスト、容量、提供されるサービスも異なるため、すべての条件と要件を考慮することが重要です。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "確実"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
"id": "C03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
"severity": "中程度",
"subcategory": "地域",
- "text": "複数リージョンのデプロイを検討してください。顧客の規模、場所、ユーザーの存在によっては、複数のリージョンで運用することが、サービスを提供し、より近い場所でアプリケーションを実行するための一般的な選択肢となる場合があります。複数リージョンのデプロイを使用することは、geo ディザスター リカバリー機能を提供し、単一リージョンの容量からの依存関係を排除し、一時的および局所的なリソース容量の制約のリスクを軽減するためにも重要です",
+ "text": "Azure ランディング ゾーンをマルチリージョン デプロイにデプロイします。顧客の規模、場所、ユーザーの存在によっては、複数の地域での運用が、サービスを提供し、その地域の近くでアプリケーションを実行するための一般的な選択肢となる場合があります。複数リージョンのデプロイを使用することは、geo ディザスター リカバリー機能を提供し、1 つのリージョン容量からの依存関係を排除し、一時的およびローカライズされたリソース容量の制約のリスクを軽減するためにも重要です。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "確実"
},
{
- "category": "リソース編成",
+ "category": "リソースの編成",
"guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
"id": "C03.03",
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
"severity": "中程度",
"subcategory": "地域",
- "text": "必要なサービスと機能が、選択したデプロイ リージョン内で利用可能であることを確認する",
+ "text": "必要なサービスと機能が、選択したデプロイリージョン内で使用可能であることを確認します。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
"severity": "中程度",
- "subcategory": "アプリ配信",
- "text": "Application Gateway と Azure Front door を使用して、ワークロードのスポークから配信アプリケーション コンテンツをセキュリティで保護するための計画を作成します。 アプリケーション配信チェックリストを使用して、推奨事項を確認できます。",
+ "subcategory": "アプリの配信",
+ "text": "Application Gateway と Azure Front Door を使用して、ワークロード スポークから配信アプリケーションのコンテンツをセキュリティで保護するための標準を文書化します。 アプリケーション配信チェックリストを使用して、推奨事項を確認できます。",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "中程度",
- "subcategory": "ハブ アンド スポーク",
- "text": "従来のハブアンドスポーク ネットワーク トポロジに基づくネットワーク設計を、最大限の柔軟性を必要とするネットワーク シナリオに活用します。",
+ "subcategory": "ハブ&スポーク",
+ "text": "ハブアンドスポークネットワークトポロジは、最大限の柔軟性を必要とするネットワークシナリオに使用します。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "id": "D01.02",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "severity": "中程度",
- "subcategory": "アプリ配信",
- "text": "内部向けアプリ (corp) と外部向けアプリ (online) の両方のランディング ゾーン内でアプリ配信を実行します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
"id": "D01.02",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "高い",
- "subcategory": "ハブ アンド スポーク",
- "text": "ExpressRoute ゲートウェイ、VPN ゲートウェイ、Azure Firewall などの共有ネットワーク サービス、または中央ハブ仮想ネットワーク内のパートナーの NVA を確認します。必要に応じて、DNS サーバーも展開します。",
+ "subcategory": "ハブ&スポーク",
+ "text": "ExpressRoute ゲートウェイ、VPN ゲートウェイ、Azure Firewall またはパートナー NVA などの共有ネットワーク サービスを中央ハブ仮想ネットワークにデプロイします。必要に応じて、DNS サービスもデプロイします。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "費用"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "中程度",
- "subcategory": "アプリ配信",
- "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して DDoS ネットワークまたは IP 保護プランを使用します。",
+ "severity": "高い",
+ "subcategory": "アプリの配信",
+ "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して、DDoS ネットワークまたは IP 保護プランを使用します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "中程度",
- "subcategory": "ハブ アンド スポーク",
- "text": "パートナー ネットワーク テクノロジまたは NVA をデプロイする場合は、パートナー ベンダーのガイダンスに従ってください",
+ "subcategory": "ハブ&スポーク",
+ "text": "パートナー ネットワーク テクノロジまたは NVA をデプロイする場合は、パートナー ベンダーのガイダンスに従ってください。",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
"id": "D01.04",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
"service": "ExpressRoute",
"severity": "低い",
- "subcategory": "ハブ アンド スポーク",
- "text": "ハブ アンド スポーク シナリオで ExpressRoute と VPN ゲートウェイ間の転送が必要な場合は、Azure Route Server を使用します。",
+ "subcategory": "ハブ&スポーク",
+ "text": "ハブ アンド スポークのシナリオで ExpressRoute ゲートウェイと VPN ゲートウェイ間のトランジットが必要な場合は、Azure Route Server を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
"id": "D01.05",
"link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
"service": "ARS",
"severity": "低い",
- "subcategory": "ハブ アンド スポーク",
+ "subcategory": "ハブ&スポーク",
"text": "Route Server を使用する場合は、Route Server サブネットに /27 プレフィックスを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
"id": "D01.06",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "中程度",
- "subcategory": "ハブ アンド スポーク",
- "text": "複数のハブ アンド スポーク トポロジを持つネットワーク アーキテクチャでは、ハブ VNet 間のグローバル仮想ネットワーク ピアリングを使用して、リージョンを相互に接続します。",
+ "subcategory": "ハブ&スポーク",
+ "text": "Azure リージョン間で複数のハブ アンド スポーク トポロジを持つネットワーク アーキテクチャの場合は、ハブ VNet 間でグローバル仮想ネットワーク ピアリングを使用して、リージョンを相互に接続します。",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
"id": "D01.07",
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
"service": "VNet",
"severity": "中程度",
- "subcategory": "ハブ アンド スポーク",
- "text": "Azure Monitor for Networks を使用して、Azure 上のネットワークのエンド ツー エンドの状態を監視します。",
+ "subcategory": "ハブ&スポーク",
+ "text": "Azure Monitor for Networks を使用して、Azure 上のネットワークのエンドツーエンドの状態を監視します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"id": "D01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "中程度",
- "subcategory": "ハブ アンド スポーク",
- "text": "スポーク仮想ネットワークを中央ハブ仮想ネットワークに接続する場合は、ExpressRoute 経由でアドバタイズできるプレフィックスの最大数である VNet ピアリングの制限 (500) (1000) を考慮してください",
+ "subcategory": "ハブ&スポーク",
+ "text": "リージョンに 400 を超えるスポーク ネットワークがある場合は、VNet ピアリングの制限 (500) と ExpressRoute 経由でアドバタイズできるプレフィックスの最大数 (1000) をバイパスするために、追加のハブをデプロイします。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"id": "D01.09",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "中程度",
- "subcategory": "ハブ アンド スポーク",
- "text": "ルート テーブルあたりのルート数の制限 (400) を考慮します。",
+ "subcategory": "ハブ&スポーク",
+ "text": "ルート テーブルあたりのルート数を 400 に制限します。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"id": "D01.10",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
"service": "VNet",
"severity": "高い",
- "subcategory": "ハブ アンド スポーク",
- "text": "VNet ピアリングを構成するときに [リモート仮想ネットワークへのトラフィックを許可する] 設定を使用します",
+ "subcategory": "ハブ&スポーク",
+ "text": "VNet ピアリングを構成するときは、\"リモート仮想ネットワークへのトラフィックを許可する\" 設定を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "id": "D01.11",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高い",
+ "subcategory": "ハブ&スポーク",
+ "text": "Standard Load Balancer SKU をゾーン冗長デプロイで使用すると、Standard SKU Load Balancer を選択すると、可用性ゾーンとゾーンの回復性によって信頼性が向上し、デプロイがゾーンとリージョンの障害に耐えられるようになります。Basic とは異なり、グローバル負荷分散をサポートし、SLA を提供します。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "id": "D01.12",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高い",
+ "subcategory": "ハブ&スポーク",
+ "text": "Load Balancer バックエンド プールに少なくとも 2 つのインスタンスが含まれていることを確認し、バックエンドに少なくとも 2 つのインスタンスがある Azure Load Balancers をデプロイすると、単一障害点が防止され、スケーラビリティがサポートされます。",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
"id": "D02.01",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "暗号化",
- "text": "ExpressRoute Direct を使用している場合は、組織のルーターと MSEE 間のレイヤー 2 レベルでトラフィックを暗号化するために MACsec を構成します。この図は、この暗号化をフローで示しています。",
+ "text": "ExpressRoute Direct を使用している場合は、組織のルーターと MSEE の間のレイヤー 2 レベルでトラフィックを暗号化するために MACsec を構成します。この図は、フロー内のこの暗号化を示しています。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
"id": "D02.02",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "低い",
+ "severity": "中程度",
"subcategory": "暗号化",
- "text": "MACsec がオプションではないシナリオ (ExpressRoute Direct を使用しない場合など) では、VPN ゲートウェイを使用して、ExpressRoute プライベート ピアリング経由で IPsec トンネルを確立します。",
+ "text": "MACsec がオプションではないシナリオ (ExpressRoute Direct を使用しない場合など) は、VPN ゲートウェイを使用して、ExpressRoute プライベート ピアリング経由で IPsec トンネルを確立します。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"id": "D03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "IPプラン",
- "text": "Azure リージョンとオンプレミスの場所間で重複する IP アドレス空間が使用されていないことを確認します",
+ "text": "Azure リージョンとオンプレミスの場所間で重複する IP アドレス空間が使用されていないことを確認します。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"id": "D03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "低い",
+ "severity": "中程度",
"subcategory": "IPプラン",
- "text": "プライベート インターネットのアドレス割り当て範囲 (RFC 1918) の IP アドレスを使用します。",
+ "text": "プライベートインターネットのアドレス割り当て範囲(RFC 1918)のIPアドレスを使用します。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
"id": "D03.03",
@@ -813,63 +878,75 @@
"service": "VNet",
"severity": "高い",
"subcategory": "IPプラン",
- "text": "IP アドレス空間が無駄にならないようにし、不必要に大きな仮想ネットワーク (/16 など) を作成しないようにします",
+ "text": "IP アドレス空間が無駄にならないようにし、不必要に大規模な仮想ネットワーク (/16 など) を作成しないでください。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "パフォーマンス"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"id": "D03.04",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "高い",
"subcategory": "IPプラン",
- "text": "運用サイトと DR サイトで重複する IP アドレス範囲を使用しないでください。",
+ "text": "運用サイトとディザスター リカバリー サイトで重複する IP アドレス範囲を使用しないでください。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
"id": "D03.05",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "高い",
+ "subcategory": "IPプラン",
+ "text": "Standard SKU とゾーン冗長 IP を使用する (該当する場合)、Azure のパブリック IP アドレスは Standard SKU であり、非ゾーン、ゾーン、またはゾーン冗長として使用できます。ゾーン冗長 IP は、すべてのゾーンでアクセス可能であり、1 つのゾーンの障害に耐えるため、回復性が向上します。",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "id": "D03.06",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "中程度",
"subcategory": "IPプラン",
- "text": "Azure での名前解決のみが必要な環境では、名前解決用の委任されたゾーン ('azure.contoso.com' など) を使用して解決に Azure プライベート DNS を使用します。",
+ "text": "Azure での名前解決が必要な環境では、Azure プライベート DNS を使用して解決し、名前解決に委任されたゾーン ('azure.contoso.com' など) を使用します。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "id": "D03.06",
+ "id": "D03.07",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "中程度",
"subcategory": "IPプラン",
- "text": "Azure とオンプレミスでの名前解決が必要な環境では、Azure DNS Private Resolver の使用を検討してください。",
+ "text": "Azure とオンプレミス間での名前解決が必要で、Active Directory のような既存のエンタープライズ DNS サービスがない環境の場合は、Azure DNS Private Resolver を使用して DNS 要求を Azure またはオンプレミスの DNS サーバーにルーティングします。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "id": "D03.07",
+ "id": "D03.08",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "低い",
"subcategory": "IPプラン",
- "text": "独自の DNS (Red Hat OpenShift など) を必要としてデプロイする特別なワークロードでは、優先 DNS ソリューションを使用する必要があります。",
+ "text": "独自の DNS が必要でデプロイする特別なワークロード (Red Hat OpenShift など) は、優先する DNS ソリューションを使用する必要があります。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "オペレーションズ"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
- "id": "D03.08",
+ "id": "D03.09",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
"service": "DNS",
"severity": "高い",
@@ -879,18 +956,31 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "id": "D03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "中程度",
+ "subcategory": "IPプラン",
+ "text": "複数の Azure リージョン間の DNS 解決を管理し、サービスが別のリージョンにフェールオーバーするときの計画を実装します",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"id": "D05.01",
"link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
"service": "Bastion",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure Bastion を使用してネットワークに安全に接続することを検討してください。",
+ "text": "Azure Bastion を使用して、ネットワークに安全に接続します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
"guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
"id": "D05.02",
@@ -898,49 +988,48 @@
"service": "Bastion",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure Bastion は、サブネット /26 以上で使用します。",
+ "text": "Azure Bastion は、/26 以上のサブネットで使用します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
"id": "D05.03",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "WAF",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン全体でグローバル保護を提供します。",
+ "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン間でグローバルな保護を提供します。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"id": "D05.04",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "低い",
"subcategory": "インターネット",
- "text": "Azure Front Door と Azure Application Gateway を使用して HTTP/S アプリを保護する場合は、Azure Front Door で WAF ポリシーを使用します。Azure Application Gateway をロックダウンして、Azure Front Door からのトラフィックのみを受信するようにします。",
+ "text": "Azure Front Door と Azure Application Gateway を使用して HTTP/S アプリを保護する場合は、Azure Front Door の WAF ポリシーを使用します。Azure Application Gateway をロックダウンして、Azure Front Door からのトラフィックのみを受信するようにします。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"id": "D05.05",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "高い",
"subcategory": "インターネット",
- "text": "WAF とその他のリバース プロキシは、受信 HTTP/S 接続に必要であり、ランディング ゾーン仮想ネットワーク内にデプロイし、保護してインターネットに公開しているアプリと共にデプロイします。",
+ "text": "受信 HTTP/S 接続に WAF やその他のリバース プロキシが必要な場合は、ランディング ゾーン仮想ネットワーク内にデプロイし、保護してインターネットに公開するアプリと共にデプロイします。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"id": "D05.06",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
@@ -952,71 +1041,81 @@
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"id": "D05.07",
"link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
"service": "VNet",
"severity": "高い",
"subcategory": "インターネット",
- "text": "今後の破壊的変更の前に、ネットワーク送信トラフィックの構成と戦略を評価および確認します。2025 年 9 月 30 日に、新しいデプロイの既定の送信アクセスは廃止され、明示的なアクセス構成のみが許可されます",
+ "text": "ネットワークの送信トラフィックの構成と戦略を管理する方法を、今後の破壊的変更の前に計画します。2025 年 9 月 30 日に、新しいデプロイの既定の送信アクセスは廃止され、明示的なアクセス構成のみが許可されます。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"id": "D05.08",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "高い",
"subcategory": "インターネット",
- "text": "診断設定を追加して、保護されているすべてのパブリック IP アドレス (DDoS IP またはネットワーク保護) の DDoS 関連ログを保存します。",
+ "text": "診断設定を追加して、保護されたすべてのパブリック IP アドレス (DDoS IP またはネットワーク保護) の DDoS 関連のログを保存します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "id": "D05.08",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "高い",
+ "subcategory": "インターネット",
+ "text": "Virtual Machines に直接関連付けられているパブリック IP アドレスを拒否するポリシーの割り当てがあることを確認します。 特定の VM でパブリック IP が必要な場合は、除外を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
"id": "D06.01",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "ExpressRoute を Azure へのプライマリ接続として使用する可能性を調査したことを確認します。",
+ "text": "ExpressRoute を Azure へのプライマリ接続として使用します。 バックアップ接続のソースとして VPN を使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
- "description": "AS パスのプリペンドと接続の重みを使用して、Azure からオンプレミスへのトラフィックに影響を与え、独自のルーターの全範囲の BGP 属性を使用して、オンプレミスから Azure へのトラフィックに影響を与えることができます。",
+ "category": "ネットワーク トポロジと接続性",
+ "description": "AS パスの先頭と接続の重みを使用して Azure からオンプレミスへのトラフィックに影響を与えたり、独自のルーターの BGP 属性の全範囲を使用してオンプレミスから Azure へのトラフィックに影響を与えたりできます。",
"guid": "f29812b2-363c-4efe-879b-599de0d5973c",
"id": "D06.02",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "複数の ExpressRoute 回線、または複数のオンプレミスの場所を使用する場合、特定のパスが優先される場合は、BGP 属性を使用してルーティングを最適化してください。",
+ "text": "複数の ExpressRoute 回線または複数のオンプレミスの場所を使用する場合は、BGP 属性を使用してルーティングを最適化します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
"id": "D06.03",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "帯域幅とパフォーマンスの要件に基づいて、ExpressRoute/VPN ゲートウェイに適切な SKU を使用していることを確認します。",
+ "text": "ExpressRoute/VPN ゲートウェイの適切な SKU は、帯域幅とパフォーマンスの要件に基づいて選択してください。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
"guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
"id": "D06.04",
@@ -1024,12 +1123,12 @@
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "ハイブリッド",
- "text": "無制限のデータ ExpressRoute 回線は、コストに見合った帯域幅に達した場合にのみ使用してください。",
+ "text": "無制限のデータ ExpressRoute 回線を使用しているのは、そのコストを正当化する帯域幅に達した場合にのみしてください。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "費用"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
"guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
"id": "D06.05",
@@ -1037,11 +1136,12 @@
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "ハイブリッド",
- "text": "回線のピアリングの場所がローカル SKU の Azure リージョンをサポートしている場合は、ExpressRoute のローカル SKU を利用して回線のコストを削減します。",
+ "text": "ExpressRoute のローカル SKU を活用して、回線のコストを削減します (回線ピアリングの場所がローカル SKU の Azure リージョンをサポートしている場合)。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "費用"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
"id": "D06.06",
@@ -1049,36 +1149,36 @@
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "サポートされている Azure リージョンにゾーン冗長 ExpressRoute ゲートウェイをデプロイします。",
+ "text": "ゾーン冗長 ExpressRoute ゲートウェイをサポートされている Azure リージョンにデプロイします。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
"id": "D06.07",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "10 Gbps を超える帯域幅または専用の 10/100 Gbps ポートを必要とするシナリオでは、ExpressRoute Direct を使用します。",
+ "text": "10 Gbps を超える帯域幅または専用の 10/100 Gbps ポートが必要なシナリオでは、ExpressRoute Direct を使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
"id": "D06.08",
"link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "待機時間を短くする必要がある場合、またはオンプレミスから Azure へのスループットを 10 Gbps を超える必要がある場合は、FastPath を有効にして、データ パスから ExpressRoute ゲートウェイをバイパスします。",
+ "text": "待機時間を短くする必要がある場合、またはオンプレミスから Azure へのスループットを 10 Gbps より大きくする必要がある場合は、FastPath を有効にして、データ パスから ExpressRoute ゲートウェイをバイパスします。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
"guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
"id": "D06.09",
@@ -1086,98 +1186,97 @@
"service": "VPN",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "ゾーン冗長 VPN ゲートウェイを使用して、ブランチまたはリモートの場所を Azure に接続します (使用可能な場合)。",
+ "text": "ゾーン冗長 VPN ゲートウェイを使用して、ブランチまたはリモートの場所を Azure (使用可能な場合) に接続します。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
"id": "D06.10",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
"service": "VPN",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "冗長 VPN アプライアンスをオンプレミス (アクティブ/アクティブまたはアクティブ/パッシブ) で使用します。",
+ "text": "オンプレミスで冗長な VPN アプライアンス (アクティブ/アクティブまたはアクティブ/パッシブ) を使用します。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"id": "D06.11",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "ハイブリッド",
- "text": "ExpressRoute Direct を使用する場合は、コストを節約するために、ローカルの Azure リージョンへの ExpressRoute Local 回線の使用を検討してください",
+ "text": "ExpressRoute Direct を使用する場合は、コストを節約するために、ローカル Azure リージョンへの ExpressRoute ローカル回線を使用することを検討してください。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "費用"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
"id": "D06.12",
"link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "運用環境と非運用環境を分離する場合など、トラフィックの分離または専用の帯域幅が必要な場合は、異なる ExpressRoute 回線を使用します。これにより、ルーティング ドメインが分離され、ノイジー ネイバーのリスクが軽減されます。",
+ "text": "運用環境と非運用環境を分離する場合など、トラフィックの分離または専用の帯域幅が必要な場合は、異なる ExpressRoute 回線を使用します。これにより、ルーティングドメインを分離し、ノイズの多い隣人のリスクを軽減できます。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b30e38c3-f298-412b-8363-cefe179b599d",
"id": "D06.13",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "組み込みの Express Route Insights を使用して、ExpressRoute の可用性と使用率を監視します。",
+ "text": "ExpressRoute の可用性と使用率は、組み込みの Express Route Insights を使用して監視します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
"id": "D06.14",
"link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "接続モニターは、ネットワーク全体 (特にオンプレミスと Azure 間) の接続を監視するために使用します。",
+ "text": "接続モニターは、ネットワーク全体 (特にオンプレミスと Azure の間) の接続監視に使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
"id": "D06.15",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "冗長性のために、異なるピアリングの場所からの ExpressRoute 回線を使用します。",
+ "text": "冗長性を確保するために、さまざまなピアリングの場所から ExpressRoute 回線を使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
"id": "D06.16",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "ExpressRoute のフェールオーバーとしてサイト間 VPN を使用します (特に、1 つの ExpressRoute 回線のみを使用する場合)。",
+ "text": "ExpressRoute 回線を 1 つだけ使用する場合は、ExpressRoute のフェールオーバーとしてサイト間 VPN を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
"guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
"id": "D06.17",
@@ -1185,23 +1284,23 @@
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "ハイブリッド",
- "text": "GatewaySubnet でルート テーブルを使用している場合は、ゲートウェイ ルートが伝達されていることを確認します。",
+ "text": "GatewaySubnet でルート テーブルを使用している場合は、ゲートウェイ ルートが伝達されていることを確認してください。",
"waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"id": "D06.18",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "ハイブリッド",
- "text": "ExpressRoute を使用する場合、オンプレミスのルーティングは動的である必要があり、接続障害が発生した場合は、回線の残りの接続に収束する必要があります。負荷は、アクティブ/パッシブもサポートされていますが、理想的にはアクティブ/アクティブとして両方の接続で共有する必要があります。",
+ "text": "ExpressRoute を使用する場合、オンプレミスのルーティングは動的である必要があり、接続エラーが発生した場合は、回線の残りの接続に収束する必要があります。負荷は、アクティブ/アクティブとして両方の接続で共有するのが理想的ですが、アクティブ/パッシブもサポートされています。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
"id": "D06.19",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
@@ -1213,31 +1312,31 @@
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
"id": "D06.20",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
"service": "ExpressRoute",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "Bidirectional Forwarding Detection(BFD)が有効で、顧客またはプロバイダーのエッジ ルーティング デバイスで設定されていることを確認します。",
+ "text": "BFD(Bidirectional Forwarding Detection)が顧客またはプロバイダのエッジルーティングデバイスで有効で設定されていることを確認します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
"id": "D06.22",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "ハイブリッド",
- "text": "回復性を高めるために、ExpressRoute ゲートウェイを異なるピアリングの場所から 2 つ以上の回線に接続します。",
+ "text": "ExpressRoute ゲートウェイを異なるピアリングの場所から 2 つ以上の回線に接続すると、回復性が向上します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
"id": "D06.23",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
@@ -1249,7 +1348,7 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5234c93f-b651-41dd-80c1-234177b91ced",
"id": "D06.24",
"link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
@@ -1261,45 +1360,54 @@
"waf": "パフォーマンス"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "id": "D06.25",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "低い",
+ "subcategory": "ハイブリッド",
+ "text": "検査のために Azure トラフィックをハイブリッドの場所に送信しないでください。 代わりに、Azure のリソース間の通信が Microsoft バックボーン ネットワーク経由で行われるように、\"Azure のトラフィックは Azure にとどまる\" という原則に従います。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
"id": "D07.01",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルター処理 (組織で必要な場合) を管理します",
+ "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルタリング (組織で必要な場合) を管理します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
"id": "D07.02",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "グローバル ネットワーク環境全体のセキュリティ体制を管理するグローバル Azure Firewall ポリシーを作成し、それをすべての Azure Firewall インスタンスに割り当てます。Azure のロールベースのアクセス制御を介して増分ファイアウォール ポリシーをローカルのセキュリティ チームに委任することで、特定のリージョンの要件を満たすきめ細かなポリシーが可能になります。",
+ "text": "グローバル ネットワーク環境全体のセキュリティ体制を管理するためのグローバル Azure Firewall ポリシーを作成し、それをすべての Azure Firewall インスタンスに割り当てます。Azure のロールベースのアクセス制御を介して、増分ファイアウォール ポリシーをローカル セキュリティ チームに委任することで、特定のリージョンの要件を満たすためのきめ細かなポリシーを可能にします。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
"id": "D07.03",
"link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
"service": "Firewall",
"severity": "低い",
"subcategory": "ファイアウォール",
- "text": "組織がそのようなソリューションを使用してアウトバウンド接続を保護する場合は、Firewall Manager 内でサポートされているパートナーの SaaS セキュリティ プロバイダーを構成します。",
+ "text": "サポートされているパートナー SaaS セキュリティプロバイダーを Firewall Manager 内で構成します。これは、組織がアウトバウンド接続を保護するためにそのようなソリューションを使用する場合です。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"id": "D07.04",
@@ -1307,12 +1415,12 @@
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "FQDN ベースのネットワーク ルールと DNS プロキシを備えた Azure Firewall を使用して、アプリケーション ルールでサポートされていないプロトコルを介してインターネットへのエグレス トラフィックをフィルター処理します。",
+ "text": "アプリケーション・ルールを使用して、サポートされているプロトコルの宛先ホスト名でアウトバウンド・トラフィックをフィルタリングします。 FQDN ベースのネットワーク規則と Azure Firewall と DNS プロキシを使用して、他のプロトコル経由でインターネットへのエグレス トラフィックをフィルター処理します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"id": "D07.05",
@@ -1320,25 +1428,24 @@
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "Azure Firewall Premium を使用して、セキュリティと保護を強化します。",
+ "text": "Azure Firewall Premium を使用して、追加のセキュリティ機能を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
"id": "D07.06",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "保護を強化するために、Azure Firewall 脅威インテリジェンス モードを [アラート] と [拒否] に構成します。",
+ "text": "Azure Firewall の脅威インテリジェンス モードを [アラート] と [拒否] に構成して、保護を強化します。",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
"id": "D07.07",
@@ -1346,12 +1453,12 @@
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "保護を強化するために、Azure Firewall IDPS モードを [拒否] に構成します。",
+ "text": "Azure Firewall の IDPS モードを [拒否] に構成して、保護を強化します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"id": "D07.08",
@@ -1359,38 +1466,35 @@
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "Virtual WAN に接続されていない VNet 内のサブネットの場合は、インターネット トラフィックが Azure Firewall またはネットワーク仮想アプライアンスにリダイレクトされるようにルート テーブルをアタッチします",
+ "text": "Virtual WAN に接続されていない VNet 内のサブネットの場合は、インターネット トラフィックが Azure Firewall またはネットワーク仮想アプライアンスにリダイレクトされるようにルート テーブルをアタッチします。",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"id": "D07.09",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "すべての Azure Firewall デプロイのログを保存するための診断設定を、リソース固有の宛先テーブルに追加します。",
+ "text": "診断設定を追加して、リソース固有の宛先テーブルを使用して、すべての Azure Firewall デプロイのログを保存します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"id": "D07.10",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
"service": "Firewall",
- "severity": "大事な",
+ "severity": "高い",
"subcategory": "ファイアウォール",
- "text": "Azure Firewall クラシック規則 (存在する場合) からファイアウォール ポリシーに移行します。",
+ "text": "Azure Firewall クラシック ルール (存在する場合) からファイアウォール ポリシーに移行します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
"id": "D07.11",
@@ -1399,65 +1503,69 @@
"severity": "高い",
"subcategory": "セグメンテーション",
"text": "Azure Firewall サブネットに /26 プレフィックスを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "ファイアウォール ポリシー内のルールをルール コレクション グループとルール コレクションに分類し、使用頻度に基づいて配置します",
+ "text": "ファイアウォールポリシー内のルールを、使用頻度に基づいて「ルールコレクショングループ」と「ルールコレクション」に整理します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall/ip-groups",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "IP グループまたは IP プレフィックスを使用して、IP テーブル ルールの数を減らす",
+ "text": "IP グループまたは IP プレフィックスを使用して、IP テーブル・ルールの数を減らします。",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"id": "D07.13",
"link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "DNATS の送信元 IP としてワイルドカード (* や any など) は使用せず、受信 DNAT の送信元 IP を指定する必要があります",
+ "text": "DNATSのソースIPとしてワイルドカード(*やanyなど)を使用せず、受信DNATのソースIPを指定する必要があります。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
"id": "D07.14",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
"text": "SNAT ポートの使用状況を監視し、NAT ゲートウェイの設定を評価し、シームレスなフェールオーバーを確保することで、SNAT ポートの枯渇を防ぎます。ポート数が制限に近づく場合は、SNAT の枯渇が差し迫っている可能性があります。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
"id": "D07.15",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
"service": "Firewall",
"severity": "高い",
"subcategory": "ファイアウォール",
- "text": "TLSインスペクションの有効化",
+ "text": "Azure Firewall Premium を使用している場合は、TLS 検査を有効にします。",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
"id": "D07.16",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
@@ -1468,124 +1576,141 @@
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"id": "D07.17",
"link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "TLS 検査の一環として、検査のために Azure App Gateway からトラフィックを受信することを計画します。",
+ "text": "TLS 検査の一環として、Azure App Gateway からのトラフィックの受信を検査用に計画します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"id": "D07.18",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "中程度",
"subcategory": "ファイアウォール",
- "text": "Azure Firewall DNS プロキシ構成を有効にする",
+ "text": "Azure Firewall DNS プロキシ構成を有効にします。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"id": "D07.19",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "ファイアウォール",
- "text": "仮想マシンに直接関連付けられているパブリック IP アドレスを拒否するポリシーの割り当てがあることを確認します",
- "waf": "安全"
+ "text": "Azure Firewall を Azure Monitor と統合し、診断ログを有効にして、ファイアウォールのログとメトリックを格納および分析します。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"id": "D07.20",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "低い",
"subcategory": "ファイアウォール",
- "text": "Azure Firewall を Azure Monitor と統合し、診断ログを有効にして、ファイアウォール ログを格納および分析します。",
+ "text": "ファイアウォールルールのバックアップを実装する",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
"id": "D07.21",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
"service": "Firewall",
- "severity": "低い",
+ "severity": "高い",
"subcategory": "ファイアウォール",
- "text": "ファイアウォールルールのバックアップを実装する",
- "waf": "オペレーションズ"
+ "text": "Azure Firewall を複数の可用性ゾーンにデプロイします。Azure Firewall は、そのデプロイに応じて異なる SLA を提供します。1 つの可用性ゾーンまたは複数の可用性ゾーンで、信頼性とパフォーマンスが向上する可能性があります。",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
"id": "D07.22",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "高い",
+ "subcategory": "ファイアウォール",
+ "text": "Azure Firewall VNet で DDoS Protection を構成し、DDoS Protection プランを Azure Firewall をホストしている仮想ネットワークに関連付けて、DDoS 攻撃に対する軽減を強化します。Azure Firewall Manager は、ファイアウォール インフラストラクチャと DDoS 保護プランの作成を統合します。",
+ "waf": "確実"
+ },
+ {
+ "category": "ネットワーク トポロジと接続性",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "id": "D07.23",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "高い",
- "subcategory": "PaaS(パーエス)",
- "text": "仮想ネットワークに挿入された Azure PaaS サービスのコントロール プレーン通信が、たとえば、コントロール プレーンのトラフィックをブロックする 0.0.0.0/0 ルートや NSG ルールによって切断されていないことを確認します。",
+ "subcategory": "PaaSの",
+ "text": "0.0.0.0/0 ルートやコントロール プレーン トラフィックをブロックする NSG ルールなど、仮想ネットワークに挿入された Azure PaaS サービスのコントロール プレーン通信を中断しないでください。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
"id": "D08.02",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"severity": "中程度",
- "subcategory": "PaaS(パーエス)",
+ "subcategory": "PaaSの",
"text": "共有 Azure PaaS サービスには、使用可能な場合は Private Link を使用します。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
"id": "D08.03",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "中程度",
- "subcategory": "PaaS(パーエス)",
- "text": "オンプレミスからプライベート エンドポイントと ExpressRoute プライベート ピアリングを介して Azure PaaS サービスにアクセスします。この方法では、パブリック インターネット経由のトランジットが回避されます。",
+ "subcategory": "PaaSの",
+ "text": "オンプレミスからプライベート エンドポイントと ExpressRoute プライベート ピアリングを介して Azure PaaS サービスにアクセスします。この方法では、公共のインターネット経由のトランジットを回避できます。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
"id": "D08.04",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "中程度",
- "subcategory": "PaaS(パーエス)",
- "text": "すべてのサブネットで仮想ネットワーク サービス エンドポイントを既定で有効にしないでください。",
+ "severity": "高い",
+ "subcategory": "PaaSの",
+ "text": "既定では、すべてのサブネットで仮想ネットワーク サービス エンドポイントを有効にしないでください。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
"id": "D08.05",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "中程度",
- "subcategory": "PaaS(パーエス)",
- "text": "Azure Firewall または NVA の IP アドレスの代わりに FQDN を使用して Azure PaaS サービスへのエグレス トラフィックをフィルター処理し、データ流出を防ぎます。Private Link を使用している場合は、すべての FQDN をブロックし、それ以外の場合は必要な PaaS サービスのみを許可できます。",
+ "subcategory": "PaaSの",
+ "text": "Azure Firewall または NVA の IP アドレスではなく FQDN を使用して Azure PaaS サービスへのエグレス トラフィックをフィルター処理し、データの流出を防ぎます。Private Link を使用している場合は、すべての FQDN をブロックでき、それ以外の場合は必要な PaaS サービスのみを許可できます。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
"id": "D09.01",
@@ -1593,34 +1718,35 @@
"service": "ExpressRoute",
"severity": "高い",
"subcategory": "セグメンテーション",
- "text": "Gateway サブネットに少なくとも /27 プレフィックスを使用する",
+ "text": "Gateway サブネットには、少なくとも /27 プレフィックスを使用します。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"id": "D09.02",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "セグメンテーション",
- "text": "接続を制限するために、VirtualNetwork サービス タグを使用する NSG 受信の既定の規則に依存しないでください。",
+ "text": "VirtualNetwork サービス タグを使用して接続を制限する NSG 受信既定の規則に依存しないでください。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
"id": "D09.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "サブネットの作成をランディングゾーンの所有者に委任します。",
+ "text": "サブネットの作成をランディング ゾーンの所有者に委任します。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"id": "D09.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
@@ -1632,170 +1758,156 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "id": "D09.05",
- "service": "NSG",
- "severity": "中程度",
- "subcategory": "セグメンテーション",
- "text": "アプリケーション チームは、サブネット レベルの NSG でアプリケーション セキュリティ グループを使用して、ランディング ゾーン内の多層 VM を保護する必要があります。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "id": "D09.06",
+ "id": "D09.05",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "NSG とアプリケーション セキュリティ グループを使用して、ランディング ゾーン内のトラフィックを細かくセグメント化し、中央の NVA を使用してトラフィック フローをフィルター処理しないようにします。",
+ "text": "NSG とアプリケーション セキュリティ グループを使用して、ランディング ゾーン内のトラフィックをマイクロセグメント化し、中央の NVA を使用してトラフィック フローをフィルター処理しないようにします。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "id": "D09.07",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "id": "D09.06",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "VNet フロー ログを有効にして Traffic Analytics にフィードし、内部および外部のトラフィック フローに関する分析情報を取得します。",
+ "text": "VNet フロー ログを有効にし、Traffic Analytics にフィードして、内部および外部のトラフィック フローに関する分析情報を取得します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "id": "D09.08",
+ "id": "D09.07",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "NSG あたりの NSG ルールの制限 (1000) を検討します。",
+ "text": "1000 ルールの制限があるため、NSG ごとに 900 を超える NSG ルールを実装しないでください。",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
"id": "D10.01",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "Azure ネットワーク管理を簡素化するために Virtual WAN を検討し、Virtual WAN ルーティング設計の一覧にシナリオが明示的に記述されていることを確認します",
+ "text": "Virtual WAN ルーティング設計の一覧にシナリオが明示的に説明されている場合は、Virtual WAN を使用します。",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
"id": "D10.02",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
"text": "Azure リージョンごとに Virtual WAN ハブを使用して、共通のグローバル Azure Virtual WAN を介して Azure リージョン間で複数のランディング ゾーンを接続します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "id": "D10.03",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "低い",
- "subcategory": "仮想WAN",
- "text": "\"Azure のトラフィックは Azure にとどまる\" という原則に従って、Azure のリソース間の通信が Microsoft バックボーン ネットワーク経由で行われるようにします",
- "waf": "パフォーマンス"
- },
- {
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "id": "D10.04",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "id": "D10.03",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "送信インターネット トラフィックの保護とフィルター処理を行うには、セキュリティで保護されたハブに Azure Firewall をデプロイします",
+ "text": "送信インターネット トラフィックの保護とフィルタリングを行うには、セキュリティで保護されたハブに Azure Firewall をデプロイします。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "id": "D10.05",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "id": "D10.04",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "ネットワーク アーキテクチャが Azure Virtual WAN の制限内にあることを確認します。",
+ "text": "Virtual WAN ネットワーク アーキテクチャが、特定されたアーキテクチャ シナリオと一致していることを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "id": "D10.06",
+ "id": "D10.05",
"link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "Azure Monitor Insights for Virtual WAN を使用して、Virtual WAN のエンドツーエンドのトポロジ、状態、主要なメトリックを監視します。",
+ "text": "Azure Monitor Insights for Virtual WAN を使用して、Virtual WAN のエンドツーエンド トポロジ、状態、および主要なメトリックを監視します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "id": "D10.07",
+ "id": "D10.06",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "IaC デプロイで、これらのフローを明示的にブロックする必要がない限り、Virtual WAN のブランチ間トラフィックが無効にならないようにしてください。",
+ "text": "Virtual WAN のブランチ間トラフィックは、これらのフローを明示的にブロックする必要がない限り、無効にしないでください。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "id": "D10.08",
+ "id": "D10.07",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "AS-Path は ExpressRoute や VPN よりも柔軟性が高いため、ハブ ルーティングの基本設定として使用します。",
+ "text": "AS-Path は ExpressRoute や VPN よりも柔軟性が高いため、ハブ ルーティング設定として使用します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "id": "D10.09",
+ "id": "D10.08",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "中程度",
"subcategory": "仮想WAN",
- "text": "IaC デプロイで Virtual WAN でラベルベースの伝達が構成されていることを確認すると、仮想ハブ間の接続が損なわれます。",
+ "text": "Virtual WAN でラベルベースの伝達を構成すると、仮想ハブ間の接続が損なわれます。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
- "id": "D10.10",
+ "id": "D10.09",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "高い",
"subcategory": "仮想WAN",
- "text": "仮想ハブに十分な IP 空間 (理想的には /23 プレフィックス) を割り当てます。",
+ "text": "仮想ハブに少なくとも /23 プレフィックスを割り当てて、十分な IP スペースが使用可能であることを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "ammp": true,
"category": "統治",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"id": "E01.01",
@@ -1803,7 +1915,8 @@
"service": "Policy",
"severity": "高い",
"subcategory": "統治",
- "text": "Azure Policy を戦略的に活用し、環境の制御を定義し、ポリシー イニシアチブを使用して関連するポリシーをグループ化します。",
+ "text": "Azure Policy を戦略的に活用し、環境のコントロールを定義し、ポリシー イニシアチブを使用して関連するポリシーをグループ化します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1814,7 +1927,8 @@
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "規制とコンプライアンスの要件を Azure Policy の定義と Azure ロールの割り当てにマップします。",
+ "text": "規制とコンプライアンスの要件を Azure Policy 定義と Azure ロールの割り当てにマップします。",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "安全"
},
{
@@ -1825,7 +1939,8 @@
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "中間ルート管理グループで Azure Policy 定義を確立し、継承されたスコープで割り当てられるようにする",
+ "text": "中間ルート管理グループで Azure Policy 定義を確立して、継承されたスコープで割り当てられるようにします。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1834,9 +1949,10 @@
"id": "E01.05",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "統治",
- "text": "必要に応じて、ポリシーの割り当てを最下位レベルで管理し、最下位レベルで除外します。",
+ "text": "ポリシーの割り当てを適切な最上位レベルで管理し、必要に応じて下位レベルで除外します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1847,7 +1963,8 @@
"service": "Policy",
"severity": "低い",
"subcategory": "統治",
- "text": "Azure Policy を使用して、ユーザーがサブスクリプション/管理グループ レベルでプロビジョニングできるサービスを制御する",
+ "text": "Azure Policy を使用して、ユーザーがサブスクリプション/管理グループ レベルでプロビジョニングできるサービスを制御します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1856,21 +1973,23 @@
"id": "E01.07",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "統治",
- "text": "可能な場合は組み込みのポリシーを使用して、運用上のオーバーヘッドを最小限に抑えます。",
+ "text": "可能な場合は組み込みポリシーを使用して、運用オーバーヘッドを最小限に抑えます。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
"category": "統治",
- "description": "リソース ポリシー共同作成者ロールを特定のスコープに割り当てると、ポリシー管理を関連するチームに委任できます。たとえば、中央の IT チームが管理グループ レベルのポリシーを監督し、アプリケーション チームがサブスクリプションのポリシーを処理することで、組織の標準に準拠した分散ガバナンスが可能になります。",
+ "description": "Resource Policy Contributor ロールを特定のスコープに割り当てると、ポリシー管理を関連するチームに委任できます。たとえば、中央のITチームが管理グループレベルのポリシーを監督し、アプリケーションチームがサブスクリプションのポリシーを処理することで、組織の標準に準拠した分散型ガバナンスが可能になります。",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"id": "E01.08",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "組み込みのリソース ポリシー共同作成者ロールを特定のスコープで割り当てて、アプリケーション レベルのガバナンスを有効にします。",
+ "text": "特定のスコープで組み込みのリソース ポリシー共同作成者ロールを割り当てて、アプリケーション レベルのガバナンスを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1881,7 +2000,8 @@
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "ルート管理グループのスコープで行われる Azure Policy 割り当ての数を制限して、継承されたスコープでの除外による管理を回避します。",
+ "text": "ルート管理グループのスコープで行われる Azure Policy の割り当ての数を制限して、継承されたスコープでの除外による管理を回避します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1892,7 +2012,7 @@
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "データ主権の要件が存在する場合は、Azure ポリシーをデプロイして適用できます",
+ "text": "データ主権の要件が存在する場合は、それらを適用するために Azure ポリシーをデプロイする必要があります。",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "安全"
},
@@ -1904,7 +2024,7 @@
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "ソブリン・ランディング・ゾーンの場合、主権ポリシー・ベースラインのポリシー・イニシアチブがデプロイされ、正しいMGレベルで割り当てられます。",
+ "text": "ソブリン ランディング ゾーンの場合は、ソブリン ポリシー ベースラインをデプロイし、正しい管理グループ レベルで割り当てます。",
"waf": "安全"
},
{
@@ -1915,17 +2035,18 @@
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "ソブリン・ランディング・ゾーンについては、ソブリン制御の目標とポリシー・マッピングが文書化されています。",
+ "text": "ソブリン ランディング ゾーンの場合は、ソブリン制御の目標をポリシー マッピングに文書化します。",
"waf": "安全"
},
{
"category": "統治",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
"id": "E01.13",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "中程度",
"subcategory": "統治",
- "text": "ソブリン ランディング ゾーンでは、\"ソブリン制御の目標からポリシー マッピング\" の CRUD のプロセスが導入されています。",
+ "text": "ソブリン・ランディング・ゾーンについては、「ソブリン・コントロールの目標からポリシー・マッピングまで」の管理プロセスが実施されていることを確認してください。",
"waf": "安全"
},
{
@@ -1936,13 +2057,14 @@
"severity": "中程度",
"subcategory": "クラウドへの投資を最適化",
"text": "「実績」と「予測」の予算アラートを設定します。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "費用"
},
{
"category": "管理",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
"id": "F01.01",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "中程度",
"subcategory": "モニタリング",
@@ -1950,181 +2072,225 @@
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "オペレーションズ"
},
+ {
+ "category": "管理",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "id": "F01.02",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "中程度",
+ "subcategory": "モニタリング",
+ "text": "すべてのリージョンで 1 つの Azure Monitor ログ ワークスペースを使用するか、さまざまな地理的リージョンをカバーする複数のワークスペースを作成するかを決定します。各アプローチには、リージョン間のネットワーク料金の可能性など、長所と短所があります",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "確実"
+ },
{
"category": "管理",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"id": "F01.03",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "中程度",
+ "severity": "高い",
"subcategory": "モニタリング",
- "text": "ログの保持要件が 12 年を超える場合は、ログを Azure Storage にエクスポートします。不変ストレージと write-once、read-many ポリシーを使用して、ユーザーが指定した間隔でデータを消去および変更できないようにします。",
+ "text": "ログの保持要件が 12 年を超える場合は、ログを Azure Storage にエクスポートします。write-once、read-many ポリシーで不変ストレージを使用して、ユーザーが指定した間隔でデータを消去および変更できないようにします。",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "id": "F01.05",
+ "id": "F01.04",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"service": "VM",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "Azure Policy を使用して OS レベルの仮想マシン (VM) 構成のずれを監視します。ポリシーを使用して Azure Automanage Machine Configuration 監査機能を有効にすると、アプリケーション チームのワークロードは、わずかな労力で機能をすぐに使用できます。",
+ "text": "Azure Policy を使用して、OS レベルの仮想マシン (VM) 構成のずれを監視します。ポリシーを使用して Azure Automanage マシン構成の監査機能を有効にすると、アプリケーション チームのワークロードは、わずかな労力で機能機能をすぐに使用できます。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "id": "F01.06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "id": "F01.05",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "中程度",
"subcategory": "運用コンプライアンス",
- "text": "Azure Update Manager を、Azure の Windows および Linux VM の修正プログラムの適用メカニズムとして使用します。",
+ "text": "Azure Update Manager は、Azure の Windows VM と Linux VM の修正プログラム適用メカニズムとして使用します。",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "id": "F01.07",
+ "id": "F01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "中程度",
"subcategory": "運用コンプライアンス",
- "text": "Azure Arc を使用して、Azure の外部にある Windows および Linux VM の修正プログラムの適用メカニズムとして Azure Update Manager を使用します。",
+ "text": "Azure Arc を使用して、Azure の外部にある Windows および Linux VM の修正プログラム適用メカニズムとして Azure Update Manager を使用します。",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "id": "F01.08",
+ "id": "F01.07",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "Network Watcher を使用してトラフィック フローをプロアクティブに監視する",
+ "text": "Network Watcher を使用して、トラフィック フローを事前に監視します。",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "id": "F01.09",
+ "id": "F01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "リソースロックを使用して、重要な共有サービスが誤って削除されないようにします。",
+ "text": "リソース ロックを使用して、重要な共有サービスが誤って削除されるのを防ぎます。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "id": "F01.10",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "id": "F01.09",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
"severity": "低い",
"subcategory": "モニタリング",
- "text": "拒否ポリシーを使用して、Azure ロールの割り当てを補完します。拒否ポリシーと Azure ロールの割り当てを組み合わせることで、リソースをデプロイおよび構成できるユーザーと、そのユーザーがデプロイおよび構成できるリソースを適用するための適切なガードレールが確実に配置されます。",
+ "text": "拒否ポリシーを使用して、Azure ロールの割り当てを補完します。拒否ポリシーと Azure ロールの割り当ての組み合わせにより、リソースをデプロイおよび構成できるユーザーと、デプロイおよび構成できるリソースを適用するための適切なガードレールが確保されます。",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "id": "F01.11",
+ "id": "F01.10",
"link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "サービスとリソースの正常性イベントを、プラットフォーム全体の監視ソリューションの一部として含めます。プラットフォームの観点からサービスとリソースの正常性を追跡することは、Azure でのリソース管理の重要なコンポーネントです。",
+ "text": "サービスとリソースの正常性イベントを、プラットフォーム全体の監視ソリューションの一部として含めます。プラットフォームの観点からサービスとリソースの正常性を追跡することは、Azure のリソース管理の重要なコンポーネントです。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "id": "F01.12",
+ "id": "F01.11",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "アラートとアクション グループを Azure Service Health プラットフォームの一部として含め、アラートまたは問題に確実に対処できるようにします",
+ "text": "アラートとアクション グループを Azure Service Health プラットフォームの一部として含めて、アラートや問題を処理できるようにします。",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "id": "F01.13",
+ "id": "F01.12",
"link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "未加工のログ エントリをオンプレミスの監視システムに送り返さないでください。代わりに、Azure で生成されたデータは Azure にとどまるという原則を採用します。オンプレミスの SIEM 統合が必要な場合は、ログではなく重要なアラートを送信します。",
+ "text": "未加工のログエントリをオンプレミスの監視システムに送り返さないでください。代わりに、Azure で生成されたデータは Azure に留まるという原則を採用します。オンプレミスの SIEM 統合が必要な場合は、ログの代わりに重要なアラートを送信します。",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "id": "F01.15",
+ "id": "F01.13",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "分析情報とレポートには Azure Monitor ログを使用します。",
+ "text": "Azure Monitor ログを使用して、分析情報とレポートを作成します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "id": "F01.16",
+ "id": "F01.14",
"link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "必要に応じて、ランディング ゾーン内の共有ストレージ アカウントを Azure 診断拡張機能のログ ストレージに使用します。",
+ "text": "必要に応じて、ランディング ゾーン内の共有ストレージ アカウントを使用して、Azure 診断拡張機能のログ ストレージを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "id": "F01.17",
+ "id": "F01.15",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "運用アラートの生成には、Azure Monitor アラートを使用します。",
+ "text": "Azure Monitor アラートを使用して、運用アラートを生成します。",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "859c3900-4514-41eb-b010-475d695abd74",
- "id": "F01.18",
+ "id": "F01.16",
"link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "監視要件が評価され、適切なデータ収集とアラートの構成が適用されていることを確認します",
+ "text": "監視要件が評価され、適切なデータ収集とアラート構成が適用されていることを確認します。",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "id": "F01.19",
+ "id": "F01.17",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "Azure Automation アカウントを介して変更とインベントリの追跡を使用する場合は、Log Analytics ワークスペースと Automation アカウントをリンクするためにサポートされているリージョンを選択していることを確認してください。",
+ "text": "Azure Automation アカウントを使用して変更とインベントリの追跡を使用する場合は、Log Analytics ワークスペースと Automation アカウントをリンクするためにサポートされているリージョンが選択されていることを確認してください。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "オペレーションズ"
},
{
"category": "管理",
"guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "id": "F01.19",
+ "id": "F01.18",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "ランディング ゾーンのプラットフォーム コンポーネントの監視を確立する AMBA は、使用可能なフレームワーク ソリューションであり、Azure Policy を使用してアラートをスケーリングする簡単な方法を提供します",
+ "text": "AMBA をデプロイしてランディング ゾーンのプラットフォーム コンポーネントの監視を確立する - AMBA は、Azure Policy を使用してアラートを簡単にスケーリングできるフレームワーク ソリューションです。",
"training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
"waf": "オペレーションズ"
},
+ {
+ "category": "管理",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "id": "F01.19",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
+ "severity": "中程度",
+ "subcategory": "モニタリング",
+ "text": "Azure Monitoring Agent (AMA) を使用します。Log Analytics エージェントは、2024 年 8 月 31 日に非推奨になりました",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation",
+ "waf": "オペレーションズ"
+ },
+ {
+ "category": "管理",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "id": "F01.20",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
+ "severity": "高い",
+ "subcategory": "データ保護",
+ "text": "ストレージ アカウントがゾーンまたはリージョンの冗長性であることを確認し、冗長性により、ストレージ アカウントが障害発生時に可用性と持続性の目標を確実に達成し、低コストと高可用性を比較検討します。ローカル冗長ストレージは、最も低い耐久性を最小のコストで提供します。",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "waf": "確実"
+ },
{
"category": "管理",
"guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
@@ -2132,7 +2298,8 @@
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"severity": "中程度",
"subcategory": "データ保護",
- "text": "ペアのリージョンを持つ BCDR の Azure でのリージョン間レプリケーションを検討する",
+ "text": "Azure で BCDR のリージョン間レプリケーションをペアにしたリージョンを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/",
"waf": "確実"
},
{
@@ -2141,9 +2308,10 @@
"id": "F02.02",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "中程度",
+ "severity": "低い",
"subcategory": "データ保護",
- "text": "Azure Backup を使用する場合は、既定の設定が GRS であるため、さまざまなバックアップの種類 (GRS、ZRS、LRS) を考慮してください",
+ "text": "Azure Backup を使用する場合は、既定の設定が GRS であるため、バックアップに正しいバックアップの種類 (GRS、ZRS、LRS) を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "確実"
},
{
@@ -2154,19 +2322,20 @@
"service": "VM",
"severity": "中程度",
"subcategory": "運用コンプライアンス",
- "text": "Azure ポリシーを使用して、VM 拡張機能を通じてソフトウェア構成を自動的にデプロイし、準拠したベースライン VM 構成を適用します。",
+ "text": "Azure ゲスト ポリシーを使用して、VM 拡張機能を通じてソフトウェア構成を自動的にデプロイし、準拠したベースライン VM 構成を適用します。",
"waf": "安全"
},
{
"category": "管理",
- "description": "Azure Policy のゲスト構成機能では、マシンの設定 (OS、アプリケーション、環境など) を監査して修復し、リソースが想定される構成と一致していることを確認できます。",
+ "description": "Azure Policy のゲスト構成機能を使用して、マシンの設定 (OS、アプリケーション、環境など) を監査および修復し、リソースが予想される構成と一致していることを確認し、Update Management では VM のパッチ管理を適用できます。",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"id": "F03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
"service": "VM",
"severity": "中程度",
"subcategory": "運用コンプライアンス",
- "text": "VM のセキュリティ構成のドリフトを Azure Policy で監視します。",
+ "text": "Azure Policy を使用して VM セキュリティ構成のドリフトを監視します。",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
@@ -2176,8 +2345,9 @@
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
"service": "VM",
"severity": "中程度",
- "subcategory": "保護とリカバリ",
- "text": "Azure から Azure Virtual Machines へのディザスター リカバリー シナリオには、Azure Site Recovery を使用します。これにより、リージョン間でワークロードをレプリケートできます。",
+ "subcategory": "保護と回復",
+ "text": "Azure Site Recovery は、Azure から Azure Virtual Machines へのディザスター リカバリー シナリオに使用します。これにより、リージョン間でワークロードをレプリケートできます。",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "オペレーションズ"
},
{
@@ -2186,8 +2356,9 @@
"id": "F04.02",
"link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
"severity": "中程度",
- "subcategory": "保護とリカバリ",
- "text": "ネイティブの PaaS サービスのディザスター リカバリー機能を使用し、テストしてください。",
+ "subcategory": "保護と回復",
+ "text": "ネイティブのPaaSサービスのディザスタリカバリ機能を使用します。 これらの機能を使用してフェイルオーバーテストを実行します。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/",
"waf": "オペレーションズ"
},
{
@@ -2197,55 +2368,21 @@
"link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
"service": "Backup",
"severity": "中程度",
- "subcategory": "保護とリカバリ",
- "text": "Azure ネイティブのバックアップ機能、または Azure 互換のサード パーティのバックアップ ソリューションを使用します。",
+ "subcategory": "保護と回復",
+ "text": "Azure ネイティブのバックアップ機能、または Azure と互換性のあるサード パーティのバックアップ ソリューションを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "オペレーションズ"
},
- {
- "ammp": true,
- "category": "管理",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "id": "F05.01",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "高い",
- "subcategory": "フォールトトレランス",
- "text": "Availability Zones は、サポートされているリージョンの VM に活用します。",
- "waf": "確実"
- },
- {
- "ammp": true,
- "category": "管理",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "id": "F05.02",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "高い",
- "subcategory": "フォールトトレランス",
- "text": "運用ワークロードを 1 つの VM で実行することは避けてください。",
- "waf": "確実"
- },
{
- "category": "管理",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "id": "F05.03",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "中程度",
- "subcategory": "フォールトトレランス",
- "text": "Azure Load Balancer と Application Gateway は、受信ネットワーク トラフィックを複数のリソースに分散します。",
- "waf": "確実"
- },
- {
- "ammp": true,
"category": "管理",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"id": "F06.01",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"service": "WAF",
"severity": "高い",
- "subcategory": "アプリ配信",
- "text": "診断設定を追加して、Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから WAF ログを保存します。ログを定期的に確認して、攻撃や誤検知がないか確認します。",
+ "subcategory": "アプリの配信",
+ "text": "診断設定を追加して、Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから WAF ログを保存します。ログを定期的に確認して、攻撃や誤検知の検出がないか確認します。",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "オペレーションズ"
},
{
@@ -2255,8 +2392,9 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
"service": "WAF",
"severity": "中程度",
- "subcategory": "アプリ配信",
- "text": "Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから Microsoft Sentinel に WAF ログを送信します。攻撃を検出し、WAF テレメトリを Azure 環境全体に統合します。",
+ "subcategory": "アプリの配信",
+ "text": "Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから WAF ログを Microsoft Sentinel に送信します。攻撃を検出し、WAF テレメトリを Azure 環境全体に統合します。",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "オペレーションズ"
},
{
@@ -2266,7 +2404,8 @@
"link": "https://learn.microsoft.com/security/benchmark/azure/security-control-incident-response",
"severity": "中程度",
"subcategory": "アクセス制御",
- "text": "運用環境に導入する前に、Azure サービスのインシデント対応計画を決定します。",
+ "text": "Azure サービスを運用環境に導入する前に、インシデント対応計画を決定します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/",
"waf": "安全"
},
{
@@ -2276,11 +2415,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
"severity": "中程度",
"subcategory": "アクセス制御",
- "text": "必要に応じて、Azure プラットフォームへのアクセスにゼロトラスト アプローチを実装します。",
+ "text": "Azure プラットフォームへのアクセスにゼロトラスト アプローチを適用します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"id": "G02.01",
@@ -2288,7 +2427,8 @@
"service": "Key Vault",
"severity": "高い",
"subcategory": "暗号化とキー",
- "text": "Azure Key Vault を使用してシークレットと資格情報を格納する",
+ "text": "Azure Key Vault を使用して、シークレットと資格情報を格納します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2301,6 +2441,7 @@
"severity": "中程度",
"subcategory": "暗号化とキー",
"text": "アプリケーションやリージョンごとに異なる Azure Key Vault を使用して、トランザクションのスケール制限を回避し、シークレットへのアクセスを制限します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2312,6 +2453,7 @@
"severity": "中程度",
"subcategory": "暗号化とキー",
"text": "論理的な削除ポリシーと消去ポリシーを有効にして Azure Key Vault をプロビジョニングし、削除されたオブジェクトの保持保護を許可します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2322,7 +2464,8 @@
"service": "Key Vault",
"severity": "中程度",
"subcategory": "暗号化とキー",
- "text": "最小特権モデルに従って、キー、シークレット、証明書を完全に削除する承認を特殊なカスタム Microsoft Entra ID ロールに制限します。",
+ "text": "最小特権モデルに従って、キー、シークレット、証明書を完全に削除する承認を、特殊なカスタム Microsoft Entra ID ロールに制限します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2333,7 +2476,8 @@
"service": "Key Vault",
"severity": "中程度",
"subcategory": "暗号化とキー",
- "text": "公的認証局による証明書の管理と更新プロセスを自動化し、管理を容易にします。",
+ "text": "公開認証局を使用して証明書の管理と更新プロセスを自動化し、管理を容易にします。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2344,7 +2488,8 @@
"service": "Key Vault",
"severity": "中程度",
"subcategory": "暗号化とキー",
- "text": "キーと証明書のローテーションの自動化されたプロセスを確立します。",
+ "text": "キーと証明書のローテーションのための自動化されたプロセスを確立します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2356,6 +2501,7 @@
"severity": "中程度",
"subcategory": "暗号化とキー",
"text": "コンテナーでファイアウォールと仮想ネットワーク サービス エンドポイントまたはプライベート エンドポイントを有効にして、キー コンテナーへのアクセスを制御します。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "安全"
},
{
@@ -2367,6 +2513,7 @@
"severity": "中程度",
"subcategory": "暗号化とキー",
"text": "プラットフォーム中央の Azure Monitor Log Analytics ワークスペースを使用して、Key Vault の各インスタンス内のキー、証明書、シークレットの使用状況を監査します。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
@@ -2377,7 +2524,8 @@
"service": "Key Vault",
"severity": "中程度",
"subcategory": "暗号化とキー",
- "text": "Key Vault のインスタンス化と特権アクセスを委任し、Azure Policy を使用して一貫性のある準拠構成を適用します。",
+ "text": "Key Vault のインスタンス化と特権アクセスを委任し、Azure Policy を使用して一貫した準拠構成を適用します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "安全"
},
{
@@ -2387,7 +2535,8 @@
"link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
"severity": "中程度",
"subcategory": "暗号化とキー",
- "text": "プリンシパル暗号化機能には既定で Microsoft マネージド キーを使用し、必要に応じてカスタマー マネージド キーを使用します。",
+ "text": "プリンシパル暗号化機能には Microsoft マネージド キーが既定で設定され、必要に応じてカスタマー マネージド キーが使用されます。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2399,6 +2548,7 @@
"severity": "中程度",
"subcategory": "暗号化とキー",
"text": "Azure Key Vault は、アプリケーションごと、環境ごと、リージョンごとに使用します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2409,7 +2559,8 @@
"service": "Key Vault",
"severity": "中程度",
"subcategory": "暗号化とキー",
- "text": "独自のキーを持ち込む場合、これは考慮されているすべてのサービスでサポートされていない可能性があります。不整合が望ましい結果を妨げないように、関連する軽減策を実装します。待機時間を最小限に抑える適切なリージョン ペアとディザスター リカバリー リージョンを選択します。",
+ "text": "独自のキーを持ち込む場合、これは考慮されるすべてのサービスでサポートされているとは限りません。不整合が望ましい結果を妨げないように、適切な軽減策を実装します。レイテンシを最小限に抑える適切なリージョンペアとディザスタリカバリリージョンを選択します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2421,6 +2572,7 @@
"severity": "中程度",
"subcategory": "暗号化とキー",
"text": "ソブリン ランディング ゾーンの場合は、Azure Key Vault マネージド HSM を使用してシークレットと資格情報を格納します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2432,6 +2584,7 @@
"severity": "中程度",
"subcategory": "オペレーションズ",
"text": "Microsoft Entra ID レポート機能を使用して、アクセス制御監査レポートを生成します。",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "安全"
},
{
@@ -2441,11 +2594,11 @@
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
"severity": "中程度",
"subcategory": "オペレーションズ",
- "text": "Azure アクティビティ ログを Azure Monitor ログにエクスポートして、データを長期間保持します。必要に応じて、2 年を超える長期保存のために Azure Storage にエクスポートします。",
+ "text": "Azure アクティビティ ログを Azure Monitor ログにエクスポートして、長期的なデータ保持を行います。必要に応じて、2 年を超える長期保存のために Azure Storage にエクスポートします。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"id": "G03.03",
@@ -2453,11 +2606,11 @@
"service": "Defender",
"severity": "高い",
"subcategory": "オペレーションズ",
- "text": "すべてのサブスクリプションに対して Defender Cloud Security Posture Management を有効にします。",
+ "text": "すべてのサブスクリプションで Defender Cloud セキュリティ態勢管理を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"id": "G03.04",
@@ -2465,11 +2618,11 @@
"service": "Defender",
"severity": "高い",
"subcategory": "オペレーションズ",
- "text": "すべてのサブスクリプションでサーバーに対して Defender Cloud ワークロード保護プランを有効にします。",
+ "text": "すべてのサブスクリプションで、サーバーの Defender Cloud ワークロード保護プランを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"id": "G03.05",
@@ -2477,11 +2630,11 @@
"service": "Defender",
"severity": "高い",
"subcategory": "オペレーションズ",
- "text": "すべてのサブスクリプションで Azure リソースの Defender Cloud Workload Protection プランを有効にします。",
+ "text": "すべてのサブスクリプションで Azure リソースの Defender Cloud ワークロード保護プランを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"id": "G03.06",
@@ -2489,7 +2642,8 @@
"service": "VM",
"severity": "高い",
"subcategory": "オペレーションズ",
- "text": "IaaS サーバーで Endpoint Protection を有効にします。",
+ "text": "IaaS サーバーでエンドポイント保護を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "安全"
},
{
@@ -2500,7 +2654,8 @@
"service": "VM",
"severity": "中程度",
"subcategory": "オペレーションズ",
- "text": "Azure Monitor ログと Defender for Cloud を使用して、基本オペレーティング システムの修正プログラムの適用誤差を監視します。",
+ "text": "Azure Monitor ログと Defender for Cloud を使用して、基本オペレーティング システムの修正プログラムのずれを監視します。",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "安全"
},
{
@@ -2512,42 +2667,55 @@
"severity": "中程度",
"subcategory": "オペレーションズ",
"text": "既定のリソース構成を一元化された Azure Monitor Log Analytics ワークスペースに接続します。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
"category": "安全",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
"id": "G03.09",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "高い",
+ "subcategory": "オペレーションズ",
+ "text": "相関ログによる一元的な脅威検出 - セキュリティデータを中央の場所に統合して、SIEM(セキュリティ情報およびイベント管理)を介してさまざまなサービス間で関連付けることができます",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "id": "G03.10",
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "中程度",
"subcategory": "オペレーションズ",
- "text": "ソブリン ランディング ゾーンの場合、透過性ログは Entra ID テナントで有効になっています。",
+ "text": "ソブリン ランディング ゾーンの場合は、Entra ID テナントで透明度ログを有効にします。",
"waf": "安全"
},
{
"category": "安全",
"guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "id": "G03.10",
+ "id": "G03.11",
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "中程度",
"subcategory": "オペレーションズ",
- "text": "ソブリン ランディング ゾーンの場合、Entra ID テナントでカスタマー ロックボックスが有効になっています。",
+ "text": "Sovereign Landing Zone の場合は、Entra ID テナントでカスタマー ロックボックスを有効にします。",
"waf": "安全"
},
{
"category": "安全",
"guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "id": "G03.11",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security",
+ "id": "G03.12",
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
"severity": "低い",
"subcategory": "オペレーションズ",
- "text": "Azure Event Grid ベースのソリューションを使用して、ログ指向のリアルタイム アラートを行う",
+ "text": "Azure Event Grid ベースのソリューションを使用して、ログ指向のリアルタイム アラートを実現します。",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"id": "G04.01",
@@ -2555,11 +2723,11 @@
"service": "Storage",
"severity": "高い",
"subcategory": "概要",
- "text": "ストレージ アカウントへの安全な転送を有効にする必要がある",
+ "text": "ストレージ アカウントへの安全な転送を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"id": "G04.02",
@@ -2571,14 +2739,14 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "6f704104-85c1-441f-96d3-c9819911645e",
"id": "G05.01",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning",
"severity": "高い",
"subcategory": "特権アクセスの保護",
- "text": "Azure 管理タスク用に特権管理者アカウントを分離します。",
+ "text": "Azure 管理タスク用の個別の特権管理者アカウント。",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/",
"waf": "安全"
},
{
@@ -2588,7 +2756,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "中程度",
"subcategory": "サービス有効化フレームワーク",
- "text": "新しい Azure サービスの実装方法を計画する",
+ "text": "新しい Azure サービスの実装方法を計画します。",
"waf": "安全"
},
{
@@ -2598,18 +2766,18 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "中程度",
"subcategory": "サービス有効化フレームワーク",
- "text": "Azure サービスのサービス要求の履行方法を計画する",
+ "text": "Azure サービスのサービス要求を満たす方法を計画します。",
"waf": "安全"
},
{
- "ammp": true,
"category": "プラットフォームの自動化とDevOps",
"guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
"id": "H01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
"severity": "高い",
- "subcategory": "DevOps チーム トポロジ",
- "text": "Azure ランディング ゾーン アーキテクチャを構築、管理、保守するための機能横断的な DevOps プラットフォーム チームがあることを確認します。",
+ "subcategory": "DevOps チームのトポロジ",
+ "text": "Azure ランディング ゾーン アーキテクチャを構築、管理、保守するためのクロスファンクショナルな DevOps プラットフォーム チームがあることを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/",
"waf": "オペレーションズ"
},
{
@@ -2618,8 +2786,9 @@
"id": "H01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "低い",
- "subcategory": "DevOps チーム トポロジ",
- "text": "Azure ランディング ゾーン プラットフォーム チームの関数を定義することを目指します。",
+ "subcategory": "DevOps チームのトポロジ",
+ "text": "Azure ランディング ゾーン プラットフォーム チームの機能を定義することを目指します。",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "オペレーションズ"
},
{
@@ -2628,19 +2797,20 @@
"id": "H01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "低い",
- "subcategory": "DevOps チーム トポロジ",
- "text": "アプリケーション ワークロード チームが自己完結し、DevOps プラットフォーム チームのサポートを必要としない機能を定義することを目指します。これは、カスタム RBAC ロールを使用して実現します。",
+ "subcategory": "DevOps チームのトポロジ",
+ "text": "アプリケーションワークロードチームが自己完結し、DevOpsプラットフォームチームのサポートを必要としない機能を定義することを目指します。これは、カスタム RBAC ロールを使用して実現します。",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
"category": "プラットフォームの自動化とDevOps",
"guid": "165eb5e9-b434-448a-9e24-178632186212",
"id": "H01.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "severity": "高い",
- "subcategory": "DevOps チーム トポロジ",
+ "severity": "中程度",
+ "subcategory": "DevOps チームのトポロジ",
"text": "CI/CD パイプラインを使用して IaC 成果物をデプロイし、デプロイと Azure 環境の品質を確保します。",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/",
"waf": "オペレーションズ"
},
{
@@ -2649,20 +2819,21 @@
"id": "H01.05",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"severity": "中程度",
- "subcategory": "DevOps チーム トポロジ",
- "text": "ビルド プロセスの一部として、IaC とアプリケーション コードの単体テストを含めます。",
+ "subcategory": "DevOps チームのトポロジ",
+ "text": "IaC とアプリケーション コードの単体テストをビルド プロセスの一部として含めます。",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
"category": "プラットフォームの自動化とDevOps",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"id": "H01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"service": "Key Vault",
"severity": "高い",
- "subcategory": "DevOps チーム トポロジ",
- "text": "Key Vault シークレットを使用して、資格情報 (仮想マシン、ユーザー パスワード)、証明書、キーなどの機密情報をハードコーディングしないようにします。",
+ "subcategory": "DevOps チームのトポロジ",
+ "text": "Key Vault シークレットを使用して、資格情報 (仮想マシン、ユーザー パスワード)、証明書、キーなどの機密情報のハードコーディングを回避します。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "オペレーションズ"
},
{
@@ -2671,19 +2842,19 @@
"id": "H01.07",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
"severity": "低い",
- "subcategory": "DevOps チーム トポロジ",
- "text": "サブスクリプションの販売を通じて、アプリケーションとワークロードの新しいランディング ゾーンの自動化を実装する",
+ "subcategory": "DevOps チームのトポロジ",
+ "text": "サブスクリプション販売を通じて、アプリケーションとワークロードの新しいランディングゾーンの自動化を実装します。",
"waf": "オペレーションズ"
},
{
- "ammp": true,
"category": "プラットフォームの自動化とDevOps",
"guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
"id": "H02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "高い",
"subcategory": "開発ライフサイクル",
- "text": "アプリケーションや IaC のソース コードにバージョン管理システムが使用されていることを確認します。Microsoft では Git を推奨しています。",
+ "text": "開発されたアプリケーションとIaCのソースコードにバージョン管理システムが使用されていることを確認します。Microsoft では Git をお勧めします。",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/",
"waf": "オペレーションズ"
},
{
@@ -2693,7 +2864,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "低い",
"subcategory": "開発ライフサイクル",
- "text": "分岐戦略に従って、チームのコラボレーションを改善し、IaC とアプリケーション コードのバージョン管理を効率的に管理できるようにします。Github Flow などのオプションを確認します。",
+ "text": "分岐戦略に従って、チームがより適切に協力し、IaC とアプリケーション コードのバージョン管理を効率的に管理できるようにします。Github Flow などのオプションを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/",
"waf": "オペレーションズ"
},
{
@@ -2703,7 +2875,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "中程度",
"subcategory": "開発ライフサイクル",
- "text": "プル要求戦略を採用して、ブランチにマージされたコード変更を制御し続けるのに役立ちます。",
+ "text": "プルリクエスト戦略を採用して、ブランチにマージされたコード変更の制御を維持します。",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/",
"waf": "オペレーションズ"
},
{
@@ -2713,36 +2886,37 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
"severity": "中程度",
"subcategory": "開発ライフサイクル",
- "text": "コードを使用してクイックフィックスを実装するためのプロセスを確立します。チームのバックログにクイックフィックスを必ず登録して、各フィックスを後で作り直せるようにし、技術的負債を抑えることができます。",
+ "text": "コードを使用してクイックフィックスを実装するためのプロセスを確立します。常にチームのバックログにクイック修正を登録して、各修正を後でやり直すことができるようにし、技術的負債を制限できます。",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
"category": "プラットフォームの自動化とDevOps",
"guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
"id": "H03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "高い",
"subcategory": "開発戦略",
- "text": "Azure Bicep、ARM テンプレート、Terraform などの宣言型インフラストラクチャ as Code ツールを活用して、Azure ランディング ゾーン アーキテクチャを構築および維持します。プラットフォームとアプリケーションのワークロードの両方の観点から。",
+ "text": "Azure Bicep、ARM テンプレート、Terraform などの宣言型コードとしてのインフラストラクチャ ツールを活用して、Azure ランディング ゾーン アーキテクチャを構築および保守します。プラットフォームとアプリケーションの両方のワークロードの観点から。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
"category": "プラットフォームの自動化とDevOps",
"guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
"id": "H04.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure",
"severity": "高い",
"subcategory": "安全",
- "text": "DevOpsの開発と運用のすでに組み合わされているプロセスにセキュリティを統合して、イノベーションプロセスのリスクを軽減します。",
+ "text": "DevOpsで開発と運用のすでに組み合わされているプロセスにセキュリティを統合して、イノベーションプロセスのリスクを軽減します。",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/",
"waf": "オペレーションズ"
}
],
"metadata": {
"name": "Azure Landing Zone Review",
"state": "GA",
- "timestamp": "June 17, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -2758,7 +2932,7 @@
],
"status": [
{
- "description": "このチェックはまだ検討されていません",
+ "description": "このチェックはまだ見ていません",
"name": "未確認"
},
{
@@ -2766,12 +2940,12 @@
"name": "開ける"
},
{
- "description": "このチェックは検証済みで、これ以上のアクションアイテムは関連付けられていません",
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
"name": "達成"
},
{
- "description": "推奨事項は理解されているが、現在の要件では不要",
- "name": "必要なし"
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
},
{
"description": "現在のデザインには適用されません",
diff --git a/checklists/alz_checklist.ko.json b/checklists/alz_checklist.ko.json
index d7aa4f978..c6d2a7384 100644
--- a/checklists/alz_checklist.ko.json
+++ b/checklists/alz_checklist.ko.json
@@ -7,7 +7,7 @@
"name": "ID 및 액세스 관리"
},
{
- "name": "네트워크 토폴로지 및 연결"
+ "name": "네트워크 토폴로지 및 연결성"
},
{
"name": "안전"
@@ -16,7 +16,7 @@
"name": "경영"
},
{
- "name": "자원 조직"
+ "name": "리소스 구성"
},
{
"name": "플랫폼 자동화 및 DevOps"
@@ -26,6 +26,18 @@
}
],
"items": [
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "id": "",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "보통",
+ "subcategory": "허브 앤 스포크",
+ "text": "다중 지역 애플리케이션 랜딩 존 및 재해 복구 시나리오를 신속하게 지원할 수 있도록 여러 지역에 Azure 랜딩 존 연결 리소스를 배포합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "신뢰도"
+ },
{
"category": "Azure 청구 및 Microsoft Entra ID 테넌트",
"guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
@@ -35,6 +47,7 @@
"severity": "보통",
"subcategory": "Microsoft Entra ID 테넌트",
"text": "다중 테넌트에 대한 명확한 규정 또는 비즈니스 요구 사항이 없는 한 Azure 리소스를 관리하기 위해 하나의 Entra 테넌트를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "작업"
},
{
@@ -45,7 +58,8 @@
"service": "Entra",
"severity": "낮다",
"subcategory": "Microsoft Entra ID 테넌트",
- "text": "Microsoft Entra ID 테넌트를 관리하기 위한 다중 테넌트 자동화 접근 방식이 있는지 확인합니다.",
+ "text": "다중 테넌트 자동화 접근 방식을 사용하여 Microsoft Entra ID 테넌트를 관리합니다.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "작업"
},
{
@@ -54,9 +68,10 @@
"id": "A01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "낮다",
+ "severity": "높다",
"subcategory": "Microsoft Entra ID 테넌트",
- "text": "다중 테넌트 관리를 위해 Azure Lighthouse 활용",
+ "text": "동일한 ID로 다중 테넌트 관리에 Azure Lighthouse를 사용합니다.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "작업"
},
{
@@ -65,9 +80,10 @@
"id": "A02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "클라우드 솔루션 공급자",
- "text": "Azure Lighthouse가 파트너별로 테넌트를 관리하는 데 사용되는지 확인합니다.",
+ "text": "파트너에게 테넌트를 관리할 수 있는 액세스 권한을 부여하는 경우 Azure Lighthouse를 사용합니다.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "비용"
},
{
@@ -77,7 +93,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
"severity": "낮다",
"subcategory": "클라우드 솔루션 공급자",
- "text": "CSP 파트너와 지원 요청 및 에스컬레이션 프로세스 논의",
+ "text": "CSP 파트너가 있는 경우 지원 요청 및 에스컬레이션 프로세스를 정의하고 문서화합니다.",
"waf": "비용"
},
{
@@ -87,7 +103,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "보통",
"subcategory": "클라우드 솔루션 공급자",
- "text": "Azure Cost Management를 사용하여 Cost Reporting 및 뷰 설정Setup Cost Reporting and Views with Azure Cost Management",
+ "text": "Azure Cost Management를 사용하여 Cost Reporting 및 뷰를 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "비용"
},
{
@@ -97,7 +114,7 @@
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"severity": "보통",
"subcategory": "기업 계약",
- "text": "Configure Notification Contacts to a group mailbox 그룹 사서함에 대한 알림 연락처 구성Configure Notification Contacts to a group mailbox",
+ "text": "그룹 사서함에 대한 알림 연락처를 구성합니다.",
"waf": "비용"
},
{
@@ -107,17 +124,19 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "낮다",
"subcategory": "기업 계약",
- "text": "부서 및 계정을 사용하여 조직의 구조를 등록 계층 구조에 매핑하면 청구를 분리하는 데 도움이 될 수 있습니다.",
+ "text": "부서와 계정을 사용하여 조직의 구조를 등록 계층에 매핑하면 청구를 분리하는 데 도움이 될 수 있습니다.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles",
"waf": "비용"
},
{
"category": "Azure 청구 및 Microsoft Entra ID 테넌트",
"guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
"id": "A03.04",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
"severity": "보통",
"subcategory": "기업 계약",
- "text": "EA 등록에서 DA 보기 요금과 AO 보기 요금을 모두 활성화하여 올바른 권한을 가진 사용자가 비용 및 청구 데이터를 검토할 수 있도록 합니다.",
+ "text": "EA 등록에서 DA View Charges와 AO View Charges를 모두 활성화하여 올바른 권한을 가진 사용자가 비용 및 청구 데이터를 검토할 수 있도록 합니다.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal",
"waf": "안전"
},
{
@@ -127,7 +146,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "낮다",
"subcategory": "기업 계약",
- "text": "Enterprise 개발/테스트 구독을 사용하여 비프로덕션 워크로드에 대한 비용 절감",
+ "text": "Enterprise Dev/Test Subscriptions를 사용하여 비프로덕션 워크로드에 대한 비용을 줄입니다.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest",
"waf": "비용"
},
{
@@ -137,7 +157,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "낮다",
"subcategory": "Microsoft 고객 계약",
- "text": "계약 청구 계정 알림 연락처 이메일 구성",
+ "text": "계약 청구 계정 알림 연락처 이메일을 구성합니다.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account",
"waf": "비용"
},
{
@@ -148,6 +169,7 @@
"severity": "낮다",
"subcategory": "Microsoft 고객 계약",
"text": "청구 프로필 및 청구서 섹션을 사용하여 효과적인 비용 관리를 위한 계약 청구를 구성합니다.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles",
"waf": "비용"
},
{
@@ -157,7 +179,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "낮다",
"subcategory": "Microsoft 고객 계약",
- "text": "개발/테스트 제품에 대한 Microsoft Azure 플랜을 사용하여 비프로덕션 워크로드에 대한 비용 절감",
+ "text": "개발/테스트 제품에 대한 Microsoft Azure 플랜을 사용하여 비프로덕션 워크로드에 대한 비용을 줄입니다.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio",
"waf": "비용"
},
{
@@ -167,11 +190,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "보통",
"subcategory": "Microsoft 고객 계약",
- "text": "계약 청구 RBAC 역할 할당을 정기적으로 감사하여 MCA 청구 계정에 액세스할 수 있는 사용자를 검토합니다.",
+ "text": "계약 청구 RBAC 역할 할당을 정기적으로 감사하여 MCA 청구 계정에 액세스할 수 있는 사용자를 검토하는 프로세스를 정의하고 문서화합니다.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles",
"waf": "비용"
},
{
- "ammp": true,
"category": "ID 및 액세스 관리",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"id": "B03.01",
@@ -179,12 +202,11 @@
"service": "Entra",
"severity": "높다",
"subcategory": "신원",
- "text": "클라우드 운영 모델에 맞는 RBAC 모델을 적용합니다. 관리 그룹 및 구독에서 범위 지정 및 할당Scope and Assign across Management Groups and Subscriptions.",
+ "text": "클라우드 운영 모델에 맞는 RBAC 모델을 적용합니다. 관리 그룹 및 구독에서 범위를 지정하고 할당합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
{
- "ammp": true,
"category": "ID 및 액세스 관리",
"guid": "4348bf81-7573-4512-8f46-9061cc198fea",
"id": "B03.02",
@@ -196,15 +218,14 @@
"waf": "안전"
},
{
- "ammp": true,
"category": "ID 및 액세스 관리",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "높다",
+ "severity": "보통",
"subcategory": "신원",
- "text": "모든 계정 유형에 대해 인증 유형 회사 또는 학교 계정만 사용합니다. Microsoft 계정 사용 금지",
+ "text": "모든 계정 유형에 대해 회사 또는 학교 계정 인증 유형만 사용합니다. Microsoft 계정을 사용하지 마십시오.",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "안전"
},
@@ -216,7 +237,7 @@
"service": "Entra",
"severity": "보통",
"subcategory": "신원",
- "text": "그룹만 사용하여 권한을 할당합니다. 그룹 관리 시스템이 이미 있는 경우 Entra ID 전용 그룹에 온-프레미스 그룹을 추가합니다.",
+ "text": "그룹만 사용하여 사용 권한을 할당합니다. 그룹 관리 시스템이 이미 있는 경우 Entra ID 전용 그룹에 온-프레미스 그룹을 추가합니다.",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "안전"
},
@@ -226,14 +247,13 @@
"id": "B03.04",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "낮다",
+ "severity": "높다",
"subcategory": "신원",
- "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 Microsoft Entra ID 조건부 액세스 정책 적용",
+ "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 Microsoft Entra ID 조건부 액세스 정책을 적용합니다.",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "안전"
},
{
- "ammp": true,
"category": "ID 및 액세스 관리",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"id": "B03.05",
@@ -241,8 +261,8 @@
"service": "Entra",
"severity": "높다",
"subcategory": "신원",
- "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 다단계 인증 적용",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 다단계 인증을 적용합니다.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "안전"
},
{
@@ -250,7 +270,7 @@
"guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
"id": "B03.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "신원",
"text": "역할 및 보안 요구 사항에 따라 landing zone 내에 배포된 리소스를 관리하기 위해 중앙 집중식 및 위임된 책임을 적용합니다.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
@@ -264,7 +284,7 @@
"service": "Entra",
"severity": "보통",
"subcategory": "신원",
- "text": "Microsoft Entra ID PIM(Privileged Identity Management)을 적용하여 제로 스탠딩 액세스 및 최소 권한 설정",
+ "text": "Microsoft Entra ID PIM(Privileged Identity Management)을 적용하여 제로 스탠딩 액세스 및 최소 권한을 설정합니다.",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "안전"
},
@@ -273,89 +293,116 @@
"guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
"id": "B03.09",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
+ "severity": "높다",
+ "subcategory": "신원",
+ "text": "Active Directory 도메인 컨트롤러를 배포할 때 가용성 영역이 있는 위치를 사용하고 이러한 영역에 두 개 이상의 VM을 배포합니다. 사용할 수 없는 경우 가용성 집합에 배포합니다.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "ID 및 액세스 관리",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "id": "B03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity",
"severity": "보통",
"subcategory": "신원",
- "text": "Windows Server에 Active Directory를 배포할 때 가용성 영역이 있는 위치를 사용하고 이러한 영역에 두 개 이상의 VM을 배포합니다. 사용할 수 없는 경우 가용성 집합에 배포합니다",
+ "text": "Azure 랜딩 존 ID 리소스를 여러 지역에 배포합니다. 도메인 컨트롤러를 사용하는 경우 리소스가 로컬 도메인 컨트롤러로 확인될 수 있도록 각 지역을 Active Directory 사이트와 연결합니다.",
"training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"waf": "신뢰도"
},
{
"category": "ID 및 액세스 관리",
"guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "id": "B03.10",
+ "id": "B03.11",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
"severity": "보통",
"subcategory": "신원",
- "text": "Azure 플랫폼 소유자, 네트워크 관리, 보안 운영, 구독 소유자, 애플리케이션 소유자와 같은 주요 역할에 대해 Azure 사용자 지정 RBAC 역할을 사용하여 ALZ에서 세분화된 액세스를 제공합니다. 이러한 역할을 비즈니스 내의 팀과 책임에 맞게 조정하세요.",
+ "text": "Azure 플랫폼 소유자, 네트워크 관리, 보안 작업, 구독 소유자, 애플리케이션 소유자와 같은 주요 역할에 대해 Azure 사용자 지정 RBAC 역할을 사용하여 ALZ 전반에 걸쳐 세분화된 액세스를 제공합니다. 이러한 역할을 비즈니스 내의 팀과 책임에 맞게 조정하세요.",
"training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "안전"
},
{
+ "category": "ID 및 액세스 관리",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "id": "B03.10",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "id": "B03.12",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "보통",
- "subcategory": "ID 및 액세스 관리",
- "text": "Active Directory 도메인 서비스에서 Entra 도메인 서비스로 전환하려는 경우 모든 워크로드의 호환성을 평가합니다",
+ "subcategory": "신원",
+ "text": "Active Directory Domain Services에서 Entra Domain Services로 전환하려는 경우 모든 워크로드의 호환성을 평가합니다.",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "안전"
},
+ {
+ "category": "ID 및 액세스 관리",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "id": "B03.13",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "보통",
+ "subcategory": "신원",
+ "text": "Microsoft Entra Domain Services를 사용하는 경우 복제본 세트를 사용합니다. 복제본 세트는 관리되는 도메인의 복원력을 향상시키고 추가 지역에 배포할 수 있도록 합니다. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "신뢰도"
+ },
{
"category": "ID 및 액세스 관리",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "id": "B03.11",
+ "id": "B03.14",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "보통",
"subcategory": "신원",
- "text": "Microsoft Entra ID 로그를 플랫폼 중앙 Azure Monitor와 통합합니다. Azure Monitor를 사용하면 Azure의 로그 및 모니터링 데이터에 대한 단일 정보 원본을 사용할 수 있으므로 조직에 로그 수집 및 보존에 대한 요구 사항을 충족할 수 있는 클라우드 네이티브 옵션을 제공합니다.",
+ "text": "Microsoft Entra ID 로그를 플랫폼 중앙 Azure Monitor와 통합합니다. Azure Monitor는 Azure의 로그 및 모니터링 데이터에 대한 단일 정보 소스를 허용하여 조직에 로그 수집 및 보존에 대한 요구 사항을 충족할 수 있는 클라우드 네이티브 옵션을 제공합니다.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "안전"
},
{
"ammp": true,
"category": "ID 및 액세스 관리",
"guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "id": "B03.12",
+ "id": "B03.15",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "높다",
"subcategory": "신원",
- "text": "테넌트 전체 계정 잠금을 방지하기 위해 긴급 액세스 또는 비상 계정을 구현합니다",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "응급 액세스 또는 비상 계정을 구현하여 테넌트 전체 계정 잠금을 방지합니다. MFA는 2024년 10월에 모든 사용자에 대해 기본적으로 설정됩니다. 암호 키(FIDO2)를 사용하거나 MFA에 대한 인증서 기반 인증을 구성하도록 이러한 계정을 업데이트하는 것이 좋습니다. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "안전"
},
{
"category": "ID 및 액세스 관리",
"guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "id": "B03.13",
+ "id": "B03.16",
"link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"severity": "보통",
"subcategory": "Microsoft Entra ID",
- "text": "Microsoft Entra Connect를 배포할 때 고가용성/재해 복구를 위해 스테이징 서버를 활용합니다.",
+ "text": "Microsoft Entra Connect를 배포할 때 고가용성/재해 복구를 위해 스테이징 서버를 사용합니다.",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies",
"waf": "신뢰도"
},
{
"category": "ID 및 액세스 관리",
"guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "id": "B03.14",
+ "id": "B03.17",
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "보통",
"subcategory": "신원",
- "text": "Microsoft Entra ID 역할 할당에 온-프레미스 동기화된 계정을 사용하지 마세요.",
+ "text": "특별히 필요한 시나리오가 없는 한 Microsoft Entra ID 역할 할당에 온-프레미스 동기화 계정을 사용하지 마세요.",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "안전"
},
{
"category": "ID 및 액세스 관리",
"guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "id": "B03.15",
+ "id": "B03.18",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "보통",
"subcategory": "신원",
- "text": "필요한 경우 Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 내부 애플리케이션(클라우드 또는 온-프레미스에서 호스트됨)에 대한 안전하고 인증된 액세스를 제공합니다.",
+ "text": "Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 애플리케이션에 대한 액세스 권한을 부여하는 경우 테넌트당 하나의 인스턴스만 가질 수 있으므로 플랫폼 리소스로 관리합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "안전"
},
@@ -363,10 +410,10 @@
"category": "ID 및 액세스 관리",
"guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
"id": "B04.01",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
- "severity": "보통",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "severity": "높다",
"subcategory": "랜딩 존",
- "text": "가상 네트워크를 사용하여 ID 네트워크 구분을 구성하고 허브로 다시 피어링합니다. 응용 프로그램 랜딩 존(레거시) 내에서 인증을 제공합니다.",
+ "text": "가상 네트워크를 사용하여 ID 네트워크 세분화를 구성하고 허브로 다시 피어링합니다. 응용 프로그램 랜딩 존(레거시) 내에서 인증을 제공합니다.",
"training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "안전"
},
@@ -377,7 +424,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"severity": "보통",
"subcategory": "랜딩 존",
- "text": "가능한 경우 Azure RBAC를 사용하여 리소스에 대한 데이터 평면 액세스를 관리합니다. 예: Key Vault, Storage 계정 및 데이터베이스 서비스에서 데이터 작업E.G - Data Operations across Key Vault, Storage Account and Database Services.",
+ "text": "가능한 경우 Azure RBAC를 사용하여 리소스에 대한 데이터 평면 액세스를 관리합니다. 예: Key Vault, Storage 계정 및 데이터베이스 서비스에 대한 데이터 작업E.G. Data Operations across Key Vault, Storage Account and Database Services.",
"training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"waf": "안전"
},
@@ -388,46 +435,46 @@
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
"severity": "보통",
"subcategory": "랜딩 존",
- "text": "Microsoft Entra ID PIM 액세스 검토를 사용하여 리소스 자격의 유효성을 주기적으로 검사합니다.",
+ "text": "Microsoft Entra ID PIM 액세스 검토를 사용하여 리소스 권한의 유효성을 주기적으로 검사합니다.",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review",
"waf": "안전"
},
{
- "ammp": true,
- "category": "자원 조직",
- "description": "https://aka.ms/azurenamingtool 에서 사용할 수 있는 Azure 명명 도구를 사용하는 것이 좋습니다.",
+ "category": "리소스 구성",
+ "description": "에서 사용할 수 있는 Azure 명명 도구를 사용하는 것이 좋습니다 https://aka.ms/azurenamingtool",
"guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
"id": "C01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
"severity": "높다",
"subcategory": "이름 지정 및 태그 지정",
- "text": "Microsoft 모범 사례 명명 표준을 따르는 것이 좋습니다",
+ "text": "리소스에 대해 Microsoft Best Practice Naming Standards와 같은 잘 정의된 명명 체계를 사용합니다.",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "2df27ee4-12e7-4f98-9f63-04722dd69c5b",
"id": "C02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"severity": "보통",
"subcategory": "구독",
- "text": "4개 이하의 수준으로 합리적으로 평평한 관리 그룹 계층 구조를 적용합니다.",
+ "text": "4개 이하의 수준으로 합리적으로 수평적인 관리 그룹 계층을 적용합니다.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "667313b4-f566-44b5-b984-a859c773e7d2",
"id": "C02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "보통",
"subcategory": "구독",
- "text": "사용자가 Azure를 즉시 실험할 수 있도록 샌드박스 관리 그룹 적용",
+ "text": "사용자가 Azure를 즉시 실험할 수 있도록 샌드박스 관리 그룹을 적용합니다.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
"id": "C02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
@@ -438,106 +485,107 @@
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
"id": "C02.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "보통",
"subcategory": "구독",
- "text": "연결 관리 그룹에서 전용 연결 구독을 적용하여 Azure Virtual WAN 허브, 프라이빗 DNS(Domain Name System), ExpressRoute 회로 및 기타 네트워킹 리소스를 호스트합니다.",
+ "text": "연결 관리 그룹에서 전용 연결 구독을 적용하여 Azure Virtual WAN 허브, 사설 비 AD DNS(Domain Name System), ExpressRoute 회로 및 기타 네트워킹 리소스를 호스트합니다.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant = (array_length(mgmtChain) > 1)",
"guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
"id": "C02.05",
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
"severity": "보통",
"subcategory": "구독",
- "text": "루트 관리 그룹 아래에 구독이 배치되지 않도록 적용",
+ "text": "루트 관리 그룹 아래에 구독이 배치되지 않도록 적용합니다.",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
"id": "C02.06",
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"severity": "보통",
"subcategory": "구독",
- "text": "관리 그룹 계층 설정에서 Azure RBAC 권한 부여를 사용하도록 설정하여 권한 있는 사용자만 테넌트에서 관리 그룹을 작동할 수 있도록 적용",
+ "text": "관리 그룹 계층 구조 설정에서 Azure RBAC 권한 부여를 사용하도록 설정하여 권한 있는 사용자만 테넌트에서 관리 그룹을 작동할 수 있도록 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "92481607-d5d1-4e4e-9146-58d3558fd772",
"id": "C02.07",
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"severity": "보통",
"subcategory": "구독",
- "text": "루트 수준 관리 그룹 아래에 관리 그룹을 적용하여 보안, 규정 준수, 연결 및 기능 요구 사항에 따라 워크로드 유형을 나타냅니다.",
+ "text": "루트 수준 관리 그룹 아래에 관리 그룹을 적용하여 보안, 규정 준수, 연결성 및 기능 요구 사항에 따라 작업 유형을 나타냅니다.",
"waf": "안전"
},
{
- "ammp": true,
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "49b82111-2df2-47ee-912e-7f983f630472",
"id": "C02.08",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
"severity": "높다",
"subcategory": "구독",
"text": "리소스 소유자가 자신의 역할과 책임을 인식하고, 검토, 예산 검토, 정책 준수에 액세스하고, 필요한 경우 수정할 수 있도록 프로세스를 적용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
"id": "C02.09",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"severity": "보통",
"subcategory": "구독",
- "text": "모든 구독 소유자와 IT 핵심 팀이 구독 할당량 및 지정된 구독에 대한 리소스 프로비전에 미치는 영향을 알고 있는지 확인합니다.",
+ "text": "모든 구독 소유자와 IT 핵심 팀이 구독 할당량과 구독 할당량이 지정된 구독에 대한 리소스 프로비전에 미치는 영향을 알고 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
"id": "C02.10",
"link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
"severity": "높다",
"subcategory": "구독",
- "text": "적절한 경우 예약 인스턴스를 사용하여 비용을 최적화하고 대상 리전에서 사용 가능한 용량을 확보합니다. Azure Policy를 통해 구매한 Reserved Instance VM SKU의 사용을 적용합니다.",
+ "text": "적절한 경우 예약 인스턴스를 사용하여 비용을 최적화하고 대상 리전에서 사용 가능한 용량을 확보합니다.",
"training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
"waf": "안전"
},
{
"ammp": true,
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
"id": "C02.11",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/design-capacity",
- "severity": "높다",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards",
+ "severity": "보통",
"subcategory": "구독",
- "text": "대시보드, 통합 문서 또는 수동 프로세스를 적용하여 사용된 용량 수준을 모니터링합니다",
- "training": "https://learn.microsoft.com/learn/paths/monitor-usage-performance-availability-resources-azure-monitor/",
+ "text": "대시보드 및/또는 시각화를 설정하여 컴퓨팅 및 스토리지 용량 메트릭을 모니터링합니다. (예: CPU, 메모리, 디스크 공간)",
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
"id": "C02.12",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs",
"severity": "높다",
"subcategory": "구독",
- "text": "비용 관리를 위한 프로세스 적용",
+ "text": "클라우드 도입의 일환으로 '관리형 클라우드 비용' 프로세스를 사용하여 자세한 비용 관리 계획을 구현합니다.",
"training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "3a923c34-74d0-4001-aac6-a9e01e6a83de",
"id": "C02.13",
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
@@ -548,51 +596,52 @@
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
"id": "C02.14",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
"severity": "보통",
"subcategory": "구독",
- "text": "태그가 청구 및 비용 관리에 사용되는지 확인",
+ "text": "태그가 청구 및 비용 관리에 사용되는지 확인합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
"id": "C02.15",
"link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
"severity": "보통",
"subcategory": "구독",
"text": "Sovereign Landing Zone의 경우 'landing zones' MG 바로 아래에 'confidential corp' 및 'confidential online' 관리 그룹이 있습니다.",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview",
"waf": "안전"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
"id": "C03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
"severity": "높다",
"subcategory": "지역",
- "text": "배포에 적합한 Azure 지역을 선택합니다. Azure는 여러 지역 및 지역에 걸쳐 글로벌 범위를 제공하는 글로벌 규모의 클라우드 플랫폼입니다. Azure 지역마다 특성, 액세스 및 가용성 모델, 비용, 용량 및 제공되는 서비스가 다르므로 모든 기준과 요구 사항을 고려하는 것이 중요합니다",
+ "text": "배포에 적합한 Azure 지역을 선택합니다. Azure는 여러 지역 및 지역에 걸쳐 글로벌 적용 범위를 제공하는 글로벌 규모의 클라우드 플랫폼입니다. Azure 지역마다 특성, 액세스 및 가용성 모델, 비용, 용량 및 제공되는 서비스가 다르므로 모든 조건과 요구 사항을 고려하는 것이 중요합니다.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "신뢰도"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
"id": "C03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
"severity": "보통",
"subcategory": "지역",
- "text": "다중 지역 배포를 고려합니다. 고객 규모, 위치 및 사용자 존재 여부에 따라 여러 지역에서 운영하는 것이 서비스를 제공하고 더 가까운 곳에서 애플리케이션을 실행하는 일반적인 선택이 될 수 있습니다. 다중 지역 배포를 사용하는 것은 지리적 재해 복구 기능을 제공하고, 단일 지역 용량의 종속성을 제거하고, 일시적이고 지역화된 리소스 용량 제약 조건의 위험을 줄이는 데도 중요합니다",
+ "text": "다중 지역 배포에서 Azure 랜딩 존을 배포합니다. 고객 규모, 위치 및 사용자 현재 상태에 따라 여러 지역에서 운영하는 것이 서비스를 제공하고 더 가까운 곳에서 애플리케이션을 실행하기 위한 일반적인 선택이 될 수 있습니다. 다중 지역 배포를 사용하는 것은 지리적 재해 복구 기능을 제공하여 단일 지역 용량의 종속성을 제거하고 임시 및 지역화된 리소스 용량 제약 조건의 위험을 줄이는 데도 중요합니다.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "신뢰도"
},
{
- "category": "자원 조직",
+ "category": "리소스 구성",
"guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
"id": "C03.03",
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
@@ -603,75 +652,64 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
"severity": "보통",
- "subcategory": "앱 제공",
- "text": "Application Gateway 및 Azure Front door를 사용하여 워크로드 스포크에서 배달 애플리케이션 콘텐츠를 보호하기 위한 계획을 개발합니다. 응용 프로그램 배달 검사 목록을 사용하여 권장 사항을 확인할 수 있습니다.",
+ "subcategory": "앱 배송",
+ "text": "Application Gateway 및 Azure Front Door를 사용하여 워크로드 스포크에서 배달 애플리케이션 콘텐츠를 보호하기 위한 표준을 문서화합니다. 응용 프로그램 배달 검사 목록을 사용하여 권장 사항을 확인할 수 있습니다.",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "보통",
"subcategory": "허브 앤 스포크",
- "text": "최대한의 유연성이 필요한 네트워크 시나리오를 위해 기존의 허브 앤 스포크(hub-and-spoke) 네트워크 토폴로지를 기반으로 하는 네트워크 설계를 활용합니다.",
+ "text": "최대한의 유연성이 필요한 네트워크 시나리오에는 허브 및 스포크(hub-and-spoke) 네트워크 토폴로지를 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "id": "D01.02",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "severity": "보통",
- "subcategory": "앱 제공",
- "text": "랜딩 존 내에서 내부 연결(corp) 및 외부 연결 앱(온라인) 모두에 대해 앱 배달을 수행합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
"id": "D01.02",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "높다",
"subcategory": "허브 앤 스포크",
- "text": "ExpressRoute 게이트웨이, VPN 게이트웨이 및 Azure Firewall 또는 중앙 허브 가상 네트워크의 파트너 NVA를 포함한 공유 네트워킹 서비스를 확인합니다. 필요한 경우 DNS 서버도 배포합니다.",
+ "text": "ExpressRoute 게이트웨이, VPN 게이트웨이 및 Azure Firewall 또는 파트너 NVA를 포함한 공유 네트워킹 서비스를 중앙 허브 가상 네트워크에 배포합니다. 필요한 경우 DNS 서비스도 배포합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "비용"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "보통",
- "subcategory": "앱 제공",
+ "severity": "높다",
+ "subcategory": "앱 배송",
"text": "애플리케이션 랜딩 존의 모든 공용 IP 주소에 대해 DDoS 네트워크 또는 IP 보호 계획을 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "보통",
"subcategory": "허브 앤 스포크",
- "text": "파트너 네트워킹 기술 또는 NVA를 배포할 때 파트너 공급업체의 지침을 따릅니다",
+ "text": "파트너 네트워킹 기술 또는 NVA를 배포할 때 파트너 공급업체의 지침을 따릅니다.",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
"id": "D01.04",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
@@ -679,10 +717,11 @@
"severity": "낮다",
"subcategory": "허브 앤 스포크",
"text": "허브 및 스포크 시나리오에서 ExpressRoute와 VPN 게이트웨이 간의 전송이 필요한 경우 Azure Route Server를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
"id": "D01.05",
@@ -691,22 +730,23 @@
"severity": "낮다",
"subcategory": "허브 앤 스포크",
"text": "Route Server를 사용하는 경우 Route Server 서브넷에 /27 접두사를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
"id": "D01.06",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "보통",
"subcategory": "허브 앤 스포크",
- "text": "Azure 지역에 걸쳐 여러 허브 및 스포크 토폴로지가 있는 네트워크 아키텍처의 경우 허브 VNet 간에 글로벌 가상 네트워크 피어링을 사용하여 지역을 서로 연결합니다.",
+ "text": "Azure 지역 간에 여러 허브 및 스포크 토폴로지가 있는 네트워크 아키텍처의 경우 허브 VNet 간의 글로벌 가상 네트워크 피어링을 사용하여 지역을 서로 연결합니다.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
"id": "D01.07",
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
@@ -718,7 +758,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"id": "D01.08",
@@ -726,11 +766,12 @@
"service": "VNet",
"severity": "보통",
"subcategory": "허브 앤 스포크",
- "text": "스포크 가상 네트워크를 중앙 허브 가상 네트워크에 연결할 때 ExpressRoute를 통해 보급할 수 있는 최대 접두사 수(1000)인 VNet 피어링 제한(500)을 고려합니다",
+ "text": "한 지역에 400개 이상의 스포크 네트워크가 있는 경우 VNet 피어링 제한(500) 및 ExpressRoute를 통해 보급할 수 있는 최대 접두사 수(1000)를 우회하기 위해 추가 허브를 배포합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"id": "D01.09",
@@ -738,12 +779,12 @@
"service": "VNet",
"severity": "보통",
"subcategory": "허브 앤 스포크",
- "text": "경로 테이블당 경로 제한(400)을 고려합니다.",
+ "text": "경로 테이블당 경로 수를 400개로 제한합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"id": "D01.10",
@@ -751,11 +792,36 @@
"service": "VNet",
"severity": "높다",
"subcategory": "허브 앤 스포크",
- "text": "VNet 피어링을 구성할 때 '원격 가상 네트워크에 대한 트래픽 허용' 설정을 사용합니다",
+ "text": "VNet 피어링을 구성할 때 '원격 가상 네트워크에 대한 트래픽 허용' 설정을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "id": "D01.11",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "높다",
+ "subcategory": "허브 앤 스포크",
+ "text": "영역 중복 배포와 함께 표준 Load Balancer SKU를 사용하는 경우 표준 SKU Load Balancer를 선택하면 가용성 영역 및 영역 복원력을 통해 안정성이 향상되어 배포가 영역 및 지역 오류를 견딜 수 있습니다. Basic과 달리 전역 부하 분산을 지원하고 SLA를 제공합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "id": "D01.12",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "높다",
+ "subcategory": "허브 앤 스포크",
+ "text": "부하 분산 장치 백 엔드 풀에 두 개 이상의 인스턴스가 포함되어 있는지 확인하고, 백 엔드에 두 개 이상의 인스턴스를 사용하여 Azure Load Balancer를 배포하면 단일 실패 지점을 방지하고 확장성을 지원할 수 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
"id": "D02.01",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
@@ -763,23 +829,23 @@
"severity": "보통",
"subcategory": "암호화",
"text": "ExpressRoute Direct를 사용하는 경우 조직의 라우터와 MSEE 간의 계층 2 수준에서 트래픽을 암호화하도록 MACsec을 구성합니다. 다이어그램은 흐름에서 이 암호화를 보여 줍니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
"id": "D02.02",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "낮다",
+ "severity": "보통",
"subcategory": "암호화",
- "text": "MACsec을 사용할 수 없는 시나리오(예: ExpressRoute Direct를 사용하지 않는 경우)의 경우 VPN Gateway를 사용하여 ExpressRoute 개인 피어링을 통해 IPsec 터널을 설정합니다.",
+ "text": "MACsec을 사용할 수 없는 시나리오(예: ExpressRoute Direct를 사용하지 않음)의 경우 VPN Gateway를 사용하여 ExpressRoute 개인 피어링을 통해 IPsec 터널을 설정합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"id": "D03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
@@ -791,21 +857,20 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"id": "D03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "낮다",
+ "severity": "보통",
"subcategory": "IP 플랜",
- "text": "개인 인터넷에 대한 주소 할당 범위의 IP 주소를 사용합니다(RFC 1918).",
+ "text": "개인 인터넷(RFC 1918)에 대한 주소 할당 범위의 IP 주소를 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
"id": "D03.03",
@@ -818,58 +883,70 @@
"waf": "공연"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"id": "D03.04",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "높다",
"subcategory": "IP 플랜",
- "text": "프로덕션 및 DR 사이트에 겹치는 IP 주소 범위를 사용하지 마십시오.",
+ "text": "프로덕션 및 재해 복구 사이트에 대해 겹치는 IP 주소 범위를 사용하지 마세요.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
"id": "D03.05",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "높다",
+ "subcategory": "IP 플랜",
+ "text": "해당하는 경우 표준 SKU 및 영역 중복 IP를 사용하며, Azure의 공용 IP 주소는 비영역, 영역 또는 영역 중복으로 사용할 수 있는 표준 SKU일 수 있습니다. 영역 중복 IP는 모든 영역에서 액세스할 수 있으므로 단일 영역 오류에 저항하여 더 높은 복원력을 제공합니다. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "id": "D03.06",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "보통",
"subcategory": "IP 플랜",
- "text": "Azure에서 이름 확인만 필요한 환경의 경우 이름 확인을 위해 위임된 영역(예: 'azure.contoso.com')을 사용하여 확인을 위해 Azure 프라이빗 DNS를 사용합니다.",
+ "text": "Azure의 이름 확인만 필요한 환경의 경우 이름 확인을 위해 위임된 영역(예: 'azure.contoso.com')을 사용하여 Azure 프라이빗 DNS를 확인합니다.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "id": "D03.06",
+ "id": "D03.07",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "보통",
"subcategory": "IP 플랜",
- "text": "Azure 및 온-프레미스에서 이름 확인이 필요한 환경의 경우 Azure DNS Private Resolver를 사용하는 것이 좋습니다.",
+ "text": "Azure 및 온-프레미스에서 이름 확인이 필요하고 Active Directory와 같은 기존 엔터프라이즈 DNS 서비스가 없는 환경의 경우 Azure DNS Private Resolver를 사용하여 DNS 요청을 Azure 또는 온-프레미스 DNS 서버로 라우팅합니다.",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "id": "D03.07",
+ "id": "D03.08",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "낮다",
"subcategory": "IP 플랜",
"text": "자체 DNS(예: Red Hat OpenShift)를 요구하고 배포하는 특수 워크로드는 선호하는 DNS 솔루션을 사용해야 합니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "작업"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
- "id": "D03.08",
+ "id": "D03.09",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
"service": "DNS",
"severity": "높다",
@@ -879,18 +956,31 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "id": "D03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "보통",
+ "subcategory": "IP 플랜",
+ "text": "여러 Azure 지역 간의 DNS 확인을 관리하기 위한 계획과 서비스가 다른 지역으로 장애 조치(failover)되는 경우 계획 구현",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"id": "D05.01",
"link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
"service": "Bastion",
"severity": "보통",
"subcategory": "인터넷",
- "text": "Azure Bastion을 사용하여 네트워크에 안전하게 연결하는 것이 좋습니다.",
+ "text": "Azure Bastion을 사용하여 네트워크에 안전하게 연결합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
"guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
"id": "D05.02",
@@ -899,22 +989,23 @@
"severity": "보통",
"subcategory": "인터넷",
"text": "서브넷 /26 이상에서 Azure Bastion을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
"id": "D05.03",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "WAF",
"severity": "보통",
"subcategory": "인터넷",
- "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역에서 전역 보호를 제공합니다.",
+ "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역 전체에서 글로벌 보호를 제공합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"id": "D05.04",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -926,46 +1017,43 @@
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"id": "D05.05",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "높다",
"subcategory": "인터넷",
- "text": "WAF 및 기타 역방향 프록시 배포는 인바운드 HTTP/S 연결에 필요하며, 랜딩 존 가상 네트워크 내에 배포하고 보호하고 인터넷에 노출하는 앱과 함께 배포합니다.",
+ "text": "인바운드 HTTP/S 연결에 WAF 및 기타 역방향 프록시가 필요한 경우 랜딩 존 가상 네트워크 내에 배포하고 보호하고 인터넷에 노출하는 앱과 함께 배포합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"id": "D05.06",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "높다",
"subcategory": "인터넷",
- "text": "Azure DDoS 네트워크 또는 IP 보호 계획을 사용하여 가상 네트워크 내에서 공용 IP 주소 엔드포인트를 보호할 수 있습니다.",
+ "text": "Azure DDoS 네트워크 또는 IP 보호 계획을 사용하여 가상 네트워크 내의 공용 IP 주소 엔드포인트를 보호할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"id": "D05.07",
"link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
"service": "VNet",
"severity": "높다",
"subcategory": "인터넷",
- "text": "예정된 호환성이 손상되는 변경 전에 네트워크 아웃바운드 트래픽 구성 및 전략을 평가하고 검토합니다. 2025년 9월 30일에 새 배포에 대한 기본 아웃바운드 액세스가 사용 중지되고 명시적 액세스 구성만 허용됩니다",
+ "text": "예정된 호환성이 손상되는 변경 전에 네트워크 아웃바운드 트래픽 구성 및 전략을 관리하는 방법을 계획합니다. 2025년 9월 30일에 새 배포에 대한 기본 아웃바운드 액세스가 사용 중지되고 명시적 액세스 구성만 허용됩니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"id": "D05.08",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
@@ -977,19 +1065,31 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "id": "D05.08",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "높다",
+ "subcategory": "인터넷",
+ "text": "Virtual Machines에 직접 연결된 공용 IP 주소를 거부하는 정책 할당이 있는지 확인합니다. 특정 VM에서 공용 IP가 필요한 경우 제외를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "안전"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
"id": "D06.01",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "ExpressRoute를 Azure에 대한 기본 연결로 사용할 수 있는지 조사했는지 확인합니다.",
+ "text": "ExpressRoute를 Azure에 대한 기본 연결로 사용합니다. VPN을 백업 연결의 소스로 사용합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"description": "AS-path 접두사 및 연결 가중치를 사용하여 Azure에서 온-프레미스로의 트래픽에 영향을 주고, 자체 라우터의 전체 BGP 특성 범위를 사용하여 온-프레미스에서 Azure로의 트래픽에 영향을 줄 수 있습니다.",
"guid": "f29812b2-363c-4efe-879b-599de0d5973c",
"id": "D06.02",
@@ -997,26 +1097,25 @@
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "여러 ExpressRoute 회로 또는 여러 온-프레미스 위치를 사용하는 경우 특정 경로를 선호하는 경우 BGP 특성을 사용하여 라우팅을 최적화해야 합니다.",
+ "text": "여러 ExpressRoute 회로 또는 여러 온-프레미스 위치를 사용하는 경우 BGP 특성을 사용하여 라우팅을 최적화합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
"id": "D06.03",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "대역폭 및 성능 요구 사항에 따라 ExpressRoute/VPN 게이트웨이에 적합한 SKU를 사용하고 있는지 확인합니다.",
+ "text": "대역폭 및 성능 요구 사항에 따라 ExpressRoute/VPN 게이트웨이에 적합한 SKU를 선택합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "공연"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
"guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
"id": "D06.04",
@@ -1024,12 +1123,12 @@
"service": "ExpressRoute",
"severity": "높다",
"subcategory": "잡종",
- "text": "비용을 정당화하는 대역폭에 도달하는 경우에만 무제한 데이터 ExpressRoute 회로를 사용해야 합니다.",
+ "text": "비용을 정당화하는 대역폭에 도달하는 경우에만 무제한 데이터 ExpressRoute 회로를 사용하고 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "비용"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
"guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
"id": "D06.05",
@@ -1037,11 +1136,12 @@
"service": "ExpressRoute",
"severity": "높다",
"subcategory": "잡종",
- "text": "회로의 피어링 위치가 로컬 SKU에 대한 Azure 지역을 지원하는 경우 ExpressRoute의 로컬 SKU를 활용하여 회로 비용을 줄입니다.",
+ "text": "회로 피어링 위치가 로컬 SKU에 대한 Azure 지역을 지원하는 경우 ExpressRoute의 로컬 SKU를 활용하여 회로 비용을 줄입니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "비용"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
"id": "D06.06",
@@ -1054,7 +1154,7 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
"id": "D06.07",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
@@ -1066,19 +1166,19 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
"id": "D06.08",
"link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "짧은 대기 시간이 필요하거나 온-프레미스에서 Azure로의 처리량이 10Gbps보다 커야 하는 경우 FastPath를 사용하여 데이터 경로에서 ExpressRoute 게이트웨이를 우회합니다.",
+ "text": "짧은 대기 시간이 필요하거나 온-프레미스에서 Azure로의 처리량이 10Gbps보다 커야 하는 경우 FastPath를 사용하여 데이터 경로에서 ExpressRoute 게이트웨이를 우회할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
"guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
"id": "D06.09",
@@ -1086,12 +1186,12 @@
"service": "VPN",
"severity": "보통",
"subcategory": "잡종",
- "text": "영역 중복 VPN Gateway를 사용하여 분기 또는 원격 위치를 Azure(사용 가능한 경우)에 연결합니다.",
+ "text": "영역 중복 VPN 게이트웨이를 사용하여 분기 또는 원격 위치를 Azure(사용 가능한 경우)에 연결합니다.",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
"id": "D06.10",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
@@ -1103,32 +1203,31 @@
"waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"id": "D06.11",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
"service": "ExpressRoute",
"severity": "높다",
"subcategory": "잡종",
- "text": "ExpressRoute Direct를 사용하는 경우 비용을 절감하기 위해 로컬 Azure 지역에 대한 ExpressRoute 로컬 회로를 사용하는 것이 좋습니다",
+ "text": "ExpressRoute Direct를 사용하는 경우 비용을 절감하기 위해 로컬 Azure 지역에 대한 ExpressRoute 로컬 회로를 사용하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "비용"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
"id": "D06.12",
"link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "트래픽 격리 또는 전용 대역폭이 필요한 경우(예: 프로덕션 환경과 비프로덕션 환경을 분리하기 위해) 다른 ExpressRoute 회로를 사용합니다. 격리된 라우팅 도메인을 보장하고 시끄러운 이웃 위험을 완화하는 데 도움이 됩니다.",
+ "text": "트래픽 격리 또는 전용 대역폭이 필요한 경우(예: 프로덕션 환경과 비프로덕션 환경을 분리하기 위해) 다른 ExpressRoute 회로를 사용합니다. 이는 격리된 라우팅 도메인을 보장하고 시끄러운 이웃 위험을 완화하는 데 도움이 됩니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b30e38c3-f298-412b-8363-cefe179b599d",
"id": "D06.13",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
@@ -1140,23 +1239,23 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
"id": "D06.14",
"link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "네트워크 전체, 특히 온-프레미스와 Azure 간의 연결을 모니터링하려면 연결 모니터를 사용합니다.",
+ "text": "네트워크를 통한 연결, 특히 온-프레미스와 Azure 간의 연결을 모니터링하기 위해 연결 모니터를 사용합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
"id": "D06.15",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
@@ -1165,19 +1264,19 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
"id": "D06.16",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "잡종",
- "text": "특히 단일 ExpressRoute 회로만 사용하는 경우 사이트 간 VPN을 ExpressRoute의 장애 조치(failover)로 사용합니다.",
+ "text": "단일 ExpressRoute 회로만 사용하는 경우 사이트 간 VPN을 ExpressRoute의 장애 조치(failover)로 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
"guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
"id": "D06.17",
@@ -1189,19 +1288,19 @@
"waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"id": "D06.18",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
"service": "ExpressRoute",
"severity": "높다",
"subcategory": "잡종",
- "text": "ExpressRoute를 사용하는 경우 온-프레미스 라우팅은 동적이어야 하며, 연결 오류가 발생할 경우 회로의 나머지 연결로 수렴되어야 합니다. 로드는 두 연결 모두에서 이상적으로는 액티브/액티브로 공유되어야 하지만 액티브/패시브도 지원됩니다.",
+ "text": "ExpressRoute를 사용하는 경우 온-프레미스 라우팅은 동적이어야 하며, 연결 오류가 발생할 경우 회로의 나머지 연결로 수렴해야 합니다. 로드는 두 연결 모두에서 액티브/액티브로 이상적으로 공유되어야 하지만 액티브/패시브도 지원됩니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
"id": "D06.19",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
@@ -1213,7 +1312,7 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
"id": "D06.20",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
@@ -1225,19 +1324,19 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
"id": "D06.22",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "ExpressRoute",
"severity": "높다",
"subcategory": "잡종",
- "text": "복원력을 높이기 위해 서로 다른 피어링 위치에서 둘 이상의 회로에 ExpressRoute 게이트웨이를 연결합니다.",
+ "text": "복원력을 높이기 위해 ExpressRoute 게이트웨이를 서로 다른 피어링 위치에서 둘 이상의 회로에 연결합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
"id": "D06.23",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
@@ -1249,7 +1348,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5234c93f-b651-41dd-80c1-234177b91ced",
"id": "D06.24",
"link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
@@ -1261,23 +1360,33 @@
"waf": "공연"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "id": "D06.25",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "낮다",
+ "subcategory": "잡종",
+ "text": "검사를 위해 Azure 트래픽을 하이브리드 위치로 보내지 마세요. 대신 'Azure의 트래픽이 Azure에 유지' 원칙을 따라 Azure의 리소스 간 통신이 Microsoft 백본 네트워크를 통해 발생하도록 합니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
"id": "D07.01",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "높다",
"subcategory": "방화벽",
- "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다",
+ "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
"id": "D07.02",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
@@ -1286,20 +1395,19 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
"id": "D07.03",
"link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
"service": "Firewall",
"severity": "낮다",
"subcategory": "방화벽",
- "text": "조직에서 이러한 솔루션을 사용하여 아웃바운드 연결을 보호하려는 경우 Firewall Manager 내에서 지원되는 파트너 SaaS 보안 공급자를 구성합니다.",
+ "text": "조직에서 아웃바운드 연결을 보호하기 위해 이러한 솔루션을 사용하려는 경우 Firewall Manager 내에서 지원되는 파트너 SaaS 보안 공급자를 구성합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"id": "D07.04",
@@ -1307,12 +1415,12 @@
"service": "Firewall",
"severity": "높다",
"subcategory": "방화벽",
- "text": "FQDN 기반 네트워크 규칙 및 DNS 프록시와 함께 Azure Firewall을 사용하여 애플리케이션 규칙에서 지원하지 않는 프로토콜을 통해 인터넷으로의 송신 트래픽을 필터링합니다.",
+ "text": "응용 프로그램 규칙을 사용하여 지원되는 프로토콜에 대한 대상 호스트 이름에서 아웃바운드 트래픽을 필터링합니다. FQDN 기반 네트워크 규칙 및 DNS 프록시와 함께 Azure Firewall을 사용하여 다른 프로토콜을 통해 인터넷으로의 송신 트래픽을 필터링합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"id": "D07.05",
@@ -1320,16 +1428,16 @@
"service": "Firewall",
"severity": "높다",
"subcategory": "방화벽",
- "text": "추가 보안 및 보호를 위해 Azure Firewall 프리미엄을 사용합니다.",
+ "text": "Azure Firewall 프리미엄을 사용하여 추가 보안 기능을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
"id": "D07.06",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "높다",
"subcategory": "방화벽",
@@ -1337,8 +1445,7 @@
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
"id": "D07.07",
@@ -1347,11 +1454,11 @@
"severity": "높다",
"subcategory": "방화벽",
"text": "추가 보호를 위해 Azure Firewall IDPS 모드를 거부로 구성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"id": "D07.08",
@@ -1359,12 +1466,11 @@
"service": "Firewall",
"severity": "높다",
"subcategory": "방화벽",
- "text": "Virtual WAN에 연결되지 않은 VNet의 서브넷의 경우 인터넷 트래픽이 Azure Firewall 또는 네트워크 가상 어플라이언스로 리디렉션되도록 경로 테이블을 연결합니다",
+ "text": "Virtual WAN에 연결되지 않은 VNet의 서브넷의 경우 인터넷 트래픽이 Azure Firewall 또는 네트워크 가상 어플라이언스로 리디렉션되도록 경로 테이블을 연결합니다.",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"id": "D07.09",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
@@ -1376,21 +1482,19 @@
"waf": "작업"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"id": "D07.10",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
"service": "Firewall",
- "severity": "중요하다",
+ "severity": "높다",
"subcategory": "방화벽",
"text": "Azure Firewall 클래식 규칙(있는 경우)에서 방화벽 정책으로 마이그레이션합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "작업"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
"id": "D07.11",
@@ -1399,65 +1503,69 @@
"severity": "높다",
"subcategory": "세분화",
"text": "Azure Firewall 서브넷에 /26 접두사를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
- "text": "방화벽 정책 내의 규칙을 Rule Collection Groups(규칙 컬렉션 그룹) 및 Rule Collections(규칙 컬렉션)로 정렬하고 사용 빈도에 따라 정렬합니다",
+ "text": "방화벽 정책 내의 규칙을 Rule Collection Groups(규칙 수집 그룹) 및 Rule Collections(규칙 컬렉션)로 정렬하고 사용 빈도에 따라 정렬합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall/ip-groups",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
- "text": "IP 그룹 또는 IP 접두사를 사용하여 IP 테이블 규칙 수 줄이기",
+ "text": "IP 그룹 또는 IP 접두사를 사용하여 IP 테이블 규칙의 수를 줄입니다.",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"id": "D07.13",
"link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
- "text": "와일드카드를 DNAT의 소스 IP로 사용하지 않으려면 * 또는 any와 같이 수신 DNAT에 대한 소스 IP를 지정해야 합니다",
+ "text": "와일드카드를 DNAT의 소스 IP로 사용하지 마십시오(예: * 또는 any). 들어오는 DNAT에 대한 소스 IP를 지정해야 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
"id": "D07.14",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
- "text": "SNAT 포트 사용량을 모니터링하고, NAT 게이트웨이 설정을 평가하고, 원활한 장애 조치(failover)를 보장하여 SNAT 포트 소모를 방지합니다. 포트 수가 제한에 가까워지면 SNAT 소모가 임박했다는 신호입니다.",
+ "text": "SNAT 포트 사용량을 모니터링하고, NAT 게이트웨이 설정을 평가하고, 원활한 장애 조치(failover)를 보장하여 SNAT 포트 고갈을 방지합니다. 포트 수가 제한에 가까워지면 SNAT 고갈이 임박했을 수 있다는 신호입니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
"id": "D07.15",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
"service": "Firewall",
"severity": "높다",
"subcategory": "방화벽",
- "text": "TLS 검사 활성화",
+ "text": "Azure Firewall 프리미엄을 사용하는 경우 TLS 검사를 사용하도록 설정합니다.",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
"id": "D07.16",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
@@ -1468,124 +1576,141 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"id": "D07.17",
"link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
- "text": "TLS 검사의 일환으로 검사를 위해 Azure App Gateway에서 트래픽을 수신하도록 계획합니다.",
+ "text": "TLS 검사의 일환으로 검사를 위해 Azure App Gateway에서 트래픽 수신을 계획합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"id": "D07.18",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "보통",
"subcategory": "방화벽",
- "text": "Azure Firewall DNS 프록시 구성 사용 ",
+ "text": "Azure Firewall DNS 프록시 구성을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"id": "D07.19",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "방화벽",
- "text": "Virtual Machines에 직접 연결된 공용 IP 주소를 거부하는 정책 할당이 있는지 확인합니다.",
- "waf": "안전"
+ "text": "Azure Firewall을 Azure Monitor와 통합하고 진단 로깅을 사용하도록 설정하여 방화벽 로그 및 메트릭을 저장하고 분석합니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"id": "D07.20",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "낮다",
"subcategory": "방화벽",
- "text": "Azure Firewall을 Azure Monitor와 통합하고 진단 로깅을 사용하도록 설정하여 방화벽 로그를 저장하고 분석합니다.",
+ "text": "방화벽 규칙에 대한 백업 구현Implement backups for your firewall rules",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
"id": "D07.21",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
"service": "Firewall",
- "severity": "낮다",
+ "severity": "높다",
"subcategory": "방화벽",
- "text": "방화벽 규칙에 대한 백업 구현",
- "waf": "작업"
+ "text": "여러 가용성 영역에 Azure Firewall을 배포합니다. Azure Firewall은 배포에 따라 다른 SLA를 제공합니다. 단일 가용 영역 또는 여러 가용 영역에서 작동하여 안정성과 성능을 향상시킬 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
"id": "D07.22",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "높다",
+ "subcategory": "방화벽",
+ "text": "Azure Firewall VNet에서 DDoS Protection을 구성하고, DDoS 보호 계획을 Azure Firewall을 호스트하는 가상 네트워크와 연결하여 DDoS 공격에 대한 향상된 완화를 제공합니다. Azure Firewall Manager는 방화벽 인프라 및 DDoS 보호 계획 생성을 통합합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "네트워크 토폴로지 및 연결성",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "id": "D07.23",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "높다",
"subcategory": "PaaS (영문)",
- "text": "가상 네트워크에 삽입된 Azure PaaS 서비스에 대한 컨트롤 플레인 통신이 중단되지 않았는지 확인합니다(예: 0.0.0.0/0 경로 또는 컨트롤 플레인 트래픽을 차단하는 NSG 규칙).",
+ "text": "컨트롤 플레인 트래픽을 차단하는 0.0.0.0/0 경로 또는 NSG 규칙과 같이 가상 네트워크에 삽입된 Azure PaaS 서비스에 대한 컨트롤 플레인 통신을 중단하지 마세요.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
"id": "D08.02",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"severity": "보통",
"subcategory": "PaaS (영문)",
- "text": "사용 가능한 경우 공유 Azure PaaS 서비스에 Private Link를 사용합니다.",
+ "text": "사용 가능한 경우 공유 Azure PaaS 서비스에 대해 Private Link를 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
"id": "D08.03",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "보통",
"subcategory": "PaaS (영문)",
- "text": "프라이빗 엔드포인트 및 ExpressRoute 프라이빗 피어링을 통해 온-프레미스에서 Azure PaaS 서비스에 액세스합니다. 이 방법을 사용하면 공용 인터넷을 통한 전송을 방지할 수 있습니다.",
+ "text": "프라이빗 엔드포인트 및 ExpressRoute 프라이빗 피어링을 통해 온-프레미스에서 Azure PaaS 서비스에 액세스하세요. 이 방법을 사용하면 공용 인터넷을 통해 전송하지 않아도 됩니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
"id": "D08.04",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "PaaS (영문)",
"text": "모든 서브넷에서 기본적으로 가상 네트워크 서비스 엔드포인트를 사용하도록 설정하지 마세요.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
"id": "D08.05",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "보통",
"subcategory": "PaaS (영문)",
- "text": "데이터 반출을 방지하기 위해 Azure Firewall 또는 NVA의 IP 주소 대신 FQDN을 사용하여 Azure PaaS 서비스에 대한 송신 트래픽을 필터링합니다. Private Link를 사용하는 경우 모든 FQDN을 차단할 수 있으며, 그렇지 않으면 필요한 PaaS 서비스만 허용할 수 있습니다.",
+ "text": "Azure Firewall 또는 NVA의 IP 주소 대신 FQDN을 사용하여 Azure PaaS 서비스에 대한 송신 트래픽을 필터링하여 데이터 반출을 방지합니다. Private Link를 사용하는 경우 모든 FQDN을 차단할 수 있으며, 그렇지 않으면 필요한 PaaS 서비스만 허용할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "안전"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
"id": "D09.01",
@@ -1593,209 +1718,196 @@
"service": "ExpressRoute",
"severity": "높다",
"subcategory": "세분화",
- "text": "게이트웨이 서브넷에 /27 이상의 접두사를 사용합니다",
+ "text": "게이트웨이 서브넷에 /27 접두사 이상을 사용합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"id": "D09.02",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "세분화",
- "text": "VirtualNetwork 서비스 태그를 사용하여 연결을 제한하는 NSG 인바운드 기본 규칙을 사용하지 마세요.",
+ "text": "VirtualNetwork 서비스 태그를 사용하여 연결을 제한하는 NSG 인바운드 기본 규칙에 의존하지 마세요.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
"id": "D09.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"severity": "보통",
"subcategory": "세분화",
- "text": "landing zone 소유자에게 서브넷 생성을 위임합니다.",
+ "text": "랜딩 존 소유자에게 서브넷 생성을 위임합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"id": "D09.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"service": "NSG",
"severity": "보통",
"subcategory": "세분화",
- "text": "NSG를 사용하여 서브넷 간의 트래픽과 플랫폼 전체의 East/West 트래픽(랜딩 존 간 트래픽)을 보호할 수 있습니다.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "id": "D09.05",
- "service": "NSG",
- "severity": "보통",
- "subcategory": "세분화",
- "text": "애플리케이션 팀은 서브넷 수준 NSG에서 애플리케이션 보안 그룹을 사용하여 랜딩 존 내의 다중 계층 VM을 보호해야 합니다.",
+ "text": "NSG를 사용하여 서브넷 전체의 트래픽과 플랫폼 전체의 동쪽/서쪽 트래픽(랜딩 존 간 트래픽)을 보호할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "id": "D09.06",
+ "id": "D09.05",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "보통",
"subcategory": "세분화",
- "text": "NSG 및 애플리케이션 보안 그룹을 사용하여 랜딩 존 내에서 트래픽을 마이크로 세그먼트화하고 중앙 NVA를 사용하여 트래픽 흐름을 필터링하지 않도록 합니다.",
+ "text": "NSG 및 애플리케이션 보안 그룹을 사용하여 랜딩 존 내의 트래픽을 마이크로 세그먼트화하고 중앙 NVA를 사용하여 트래픽 흐름을 필터링하지 않도록 합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "id": "D09.07",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "id": "D09.06",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "보통",
"subcategory": "세분화",
- "text": "VNet 흐름 로그를 사용하도록 설정하고 트래픽 분석에 제공하여 내부 및 외부 트래픽 흐름에 대한 인사이트를 얻습니다.",
+ "text": "VNet 흐름 로그를 사용하도록 설정하고 트래픽 분석에 제공하여 내부 및 외부 트래픽 흐름에 대한 인사이트를 얻을 수 있습니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "id": "D09.08",
+ "id": "D09.07",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "보통",
"subcategory": "세분화",
- "text": "NSG당 NSG 규칙의 제한(1000)을 고려합니다.",
+ "text": "1,000개의 규칙 제한으로 인해 NSG당 900개 이상의 NSG 규칙을 구현하지 마세요.",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
"id": "D10.01",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
- "text": "간소화된 Azure 네트워킹 관리를 위해 Virtual WAN을 고려하고 시나리오가 Virtual WAN 라우팅 디자인 목록에 명시적으로 설명되어 있는지 확인합니다",
+ "text": "시나리오가 Virtual WAN 라우팅 디자인 목록에 명시적으로 설명된 경우 Virtual WAN을 사용합니다.",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
"id": "D10.02",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
"text": "Azure 지역당 Virtual WAN 허브를 사용하여 공통 글로벌 Azure Virtual WAN을 통해 Azure 지역 간에 여러 랜딩 존을 함께 연결합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "id": "D10.03",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "낮다",
- "subcategory": "가상 WAN",
- "text": "Azure의 리소스 간 통신이 Microsoft 백본 네트워크를 통해 발생하도록 'Azure의 트래픽은 Azure에 유지' 원칙에 따라",
- "waf": "공연"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "id": "D10.04",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "id": "D10.03",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
- "text": "아웃바운드 인터넷 트래픽 보호 및 필터링을 위해 보안 허브에 Azure Firewall을 배포합니다",
+ "text": "아웃바운드 인터넷 트래픽 보호 및 필터링을 위해 보안 허브에 Azure Firewall을 배포합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "id": "D10.05",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "id": "D10.04",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
- "text": "네트워크 아키텍처가 Azure Virtual WAN 제한 내에 있는지 확인합니다.",
+ "text": "Virtual WAN 네트워크 아키텍처가 식별된 아키텍처 시나리오에 맞는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "id": "D10.06",
+ "id": "D10.05",
"link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
"text": "Virtual WAN용 Azure Monitor Insights를 사용하여 Virtual WAN의 엔드투엔드 토폴로지, 상태 및 주요 메트릭을 모니터링합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "id": "D10.07",
+ "id": "D10.06",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
- "text": "이러한 흐름을 명시적으로 차단해야 하는 경우가 아니면 IaC 배포가 Virtual WAN에서 분기 간 트래픽을 사용하지 않도록 설정하지 않는지 확인합니다.",
+ "text": "이러한 흐름을 명시적으로 차단해야 하는 경우가 아니면 Virtual WAN에서 분기 간 트래픽을 사용하지 않도록 설정하지 마세요.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "id": "D10.08",
+ "id": "D10.07",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
"text": "AS-Path는 ExpressRoute 또는 VPN보다 유연하므로 허브 라우팅 기본 설정으로 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "id": "D10.09",
+ "id": "D10.08",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "보통",
"subcategory": "가상 WAN",
- "text": "IaC 배포가 Virtual WAN에서 레이블 기반 전파를 구성하는지 확인하며, 그렇지 않으면 가상 허브 간의 연결이 손상됩니다.",
+ "text": "Virtual WAN에서 레이블 기반 전파를 구성하지 않으면 가상 허브 간의 연결이 손상됩니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
- "id": "D10.10",
+ "id": "D10.09",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "높다",
"subcategory": "가상 WAN",
- "text": "가상 허브에 충분한 IP 공간(이상적으로는 /23 접두사)을 할당합니다.",
+ "text": "가상 허브에 /23 이상의 접두사를 할당하여 충분한 IP 공간을 사용할 수 있도록 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "ammp": true,
"category": "지배구조",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"id": "E01.01",
@@ -1803,7 +1915,8 @@
"service": "Policy",
"severity": "높다",
"subcategory": "지배구조",
- "text": "Azure Policy를 전략적으로 활용하고, 정책 이니셔티브를 사용하여 관련 정책을 그룹화하고, 환경에 대한 컨트롤을 정의합니다.",
+ "text": "Azure Policy를 전략적으로 활용하고, 정책 이니셔티브를 사용하여 관련 정책을 그룹화하여 환경에 대한 컨트롤을 정의합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
@@ -1815,6 +1928,7 @@
"severity": "보통",
"subcategory": "지배구조",
"text": "규정 및 규정 준수 요구 사항을 Azure Policy 정의 및 Azure 역할 할당에 매핑합니다.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "안전"
},
{
@@ -1826,6 +1940,7 @@
"severity": "보통",
"subcategory": "지배구조",
"text": "상속된 범위에서 할당할 수 있도록 중간 루트 관리 그룹에서 Azure Policy 정의를 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
@@ -1834,9 +1949,10 @@
"id": "E01.05",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "지배구조",
"text": "필요한 경우 최하위 수준에서 제외를 사용하여 가장 적절한 수준에서 정책 할당을 관리합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
@@ -1847,7 +1963,8 @@
"service": "Policy",
"severity": "낮다",
"subcategory": "지배구조",
- "text": "Azure Policy를 사용하여 사용자가 구독/관리 그룹 수준에서 프로비전할 수 있는 서비스 제어",
+ "text": "Azure Policy를 사용하여 사용자가 구독/관리 그룹 수준에서 프로비전할 수 있는 서비스를 제어합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
@@ -1856,21 +1973,23 @@
"id": "E01.07",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "지배구조",
"text": "가능한 경우 기본 제공 정책을 사용하여 운영 오버헤드를 최소화합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
"category": "지배구조",
- "description": "특정 범위에 Resource Policy Contributor 역할을 할당하면 관련 팀에 정책 관리를 위임할 수 있습니다. 예를 들어 중앙 IT 팀은 관리 그룹 수준 정책을 감독하고 응용 프로그램 팀은 구독에 대한 정책을 처리하여 조직 표준을 준수하는 분산 거버넌스를 가능하게 할 수 있습니다.",
+ "description": "Resource Policy Contributor 역할을 특정 범위에 할당하면 정책 관리를 관련 팀에 위임할 수 있습니다. 예를 들어 중앙 IT 팀은 관리 그룹 수준 정책을 감독할 수 있고, 응용 프로그램 팀은 구독에 대한 정책을 처리하여 조직 표준을 준수하는 분산 거버넌스를 가능하게 할 수 있습니다.",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"id": "E01.08",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "보통",
"subcategory": "지배구조",
- "text": "특정 범위에서 기본 제공 Resource Policy 기여자 역할을 할당하여 응용 프로그램 수준 거버넌스를 사용하도록 설정합니다.",
+ "text": "특정 범위에서 기본 제공 Resource Policy Contributor 역할을 할당하여 응용 프로그램 수준 거버넌스를 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
@@ -1882,6 +2001,7 @@
"severity": "보통",
"subcategory": "지배구조",
"text": "상속된 범위에서 제외를 통해 관리하지 않도록 루트 관리 그룹 범위에서 수행된 Azure Policy 할당 수를 제한합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
@@ -1892,7 +2012,7 @@
"service": "Policy",
"severity": "보통",
"subcategory": "지배구조",
- "text": "데이터 주권 요구 사항이 있는 경우 Azure Policy를 배포하여 적용할 수 있습니다",
+ "text": "데이터 주권 요구 사항이 있는 경우 이를 적용하기 위해 Azure 정책을 배포해야 합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "안전"
},
@@ -1904,7 +2024,7 @@
"service": "Policy",
"severity": "보통",
"subcategory": "지배구조",
- "text": "Sovereign Landing Zone의 경우 주권 정책 기준의 정책 이니셔티브가 배포되고 올바른 MG 수준에서 할당됩니다.",
+ "text": "Sovereign Landing Zone의 경우 주권 정책 기준을 배포하고 올바른 관리 그룹 수준에서 할당합니다.",
"waf": "안전"
},
{
@@ -1915,17 +2035,18 @@
"service": "Policy",
"severity": "보통",
"subcategory": "지배구조",
- "text": "Sovereign Landing Zone의 경우 정책 매핑에 대한 주권 제어 목표가 문서화되어 있습니다.",
+ "text": "Sovereign Landing Zone의 경우 정책 매핑에 대한 Sovereign Control 목표를 문서화합니다.",
"waf": "안전"
},
{
"category": "지배구조",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
"id": "E01.13",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "보통",
"subcategory": "지배구조",
- "text": "Sovereign Landing Zone의 경우 '정책 매핑에 대한 Sovereign Control 목표'의 CRUD에 대한 프로세스가 마련되어 있습니다.",
+ "text": "Sovereign Landing Zone의 경우 'Sovereign Control 목표를 정책 매핑에 적용'을 관리하기 위한 프로세스가 마련되어 있는지 확인합니다.",
"waf": "안전"
},
{
@@ -1936,36 +2057,49 @@
"severity": "보통",
"subcategory": "클라우드 투자 최적화",
"text": "'실제' 및 '예측' 예산 경고를 구성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "비용"
},
{
"category": "경영",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
"id": "F01.01",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "보통",
"subcategory": "모니터링",
- "text": "Azure RBAC(Azure 역할 기반 액세스 제어), 데이터 주권 요구 사항 또는 데이터 보존 정책에 별도의 작업 영역이 필요한 경우를 제외하고 단일 모니터 로그 작업 영역을 사용하여 플랫폼을 중앙에서 관리합니다.",
+ "text": "Azure RBAC(Azure 역할 기반 액세스 제어), 데이터 주권 요구 사항 또는 데이터 보존 정책에 따라 별도의 작업 영역이 필요한 경우를 제외하고 단일 모니터 로그 작업 영역을 사용하여 플랫폼을 중앙에서 관리합니다.",
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "작업"
},
+ {
+ "category": "경영",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "id": "F01.02",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "보통",
+ "subcategory": "모니터링",
+ "text": "모든 지역에 대해 단일 Azure Monitor 로그 작업 영역을 사용할지 또는 다양한 지리적 지역을 포괄하는 여러 작업 영역을 만들지 여부를 결정합니다. 각 접근 방식에는 잠재적인 지역 간 네트워킹 요금을 포함하여 장점과 단점이 있습니다",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "신뢰도"
+ },
{
"category": "경영",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"id": "F01.03",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "보통",
+ "severity": "높다",
"subcategory": "모니터링",
- "text": "로그 보존 요구 사항이 12년을 초과하는 경우 로그를 Azure Storage로 내보냅니다. 변경 불가능한 스토리지를 한 번 쓰기, 여러 번 읽기 정책과 함께 사용하여 사용자가 지정한 간격 동안 데이터를 지우거나 수정할 수 없도록 합니다.",
+ "text": "로그 보존 요구 사항이 12년을 초과하는 경우 로그를 Azure Storage로 내보냅니다. Write-Once, Read-Many 정책과 함께 변경할 수 없는 스토리지를 사용하여 사용자가 지정한 간격 동안 데이터를 지우거나 수정할 수 없도록 합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "작업"
},
{
"category": "경영",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "id": "F01.05",
+ "id": "F01.04",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"service": "VM",
"severity": "보통",
@@ -1977,154 +2111,186 @@
{
"category": "경영",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "id": "F01.06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "id": "F01.05",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "보통",
"subcategory": "운영 규정 준수",
- "text": "Azure에서 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure Update Manager를 사용합니다.",
+ "text": "Azure에서 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure 업데이트 관리자를 사용합니다.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "작업"
},
{
"category": "경영",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "id": "F01.07",
+ "id": "F01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "보통",
"subcategory": "운영 규정 준수",
- "text": "Azure Arc를 사용하여 Azure 외부의 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure Update Manager를 사용합니다.",
+ "text": "Azure Arc를 사용하여 Azure 외부의 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure 업데이트 관리자를 사용합니다.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "작업"
},
{
"category": "경영",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "id": "F01.08",
+ "id": "F01.07",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "보통",
"subcategory": "모니터링",
- "text": "Network Watcher를 사용하여 트래픽 흐름을 사전에 모니터링",
+ "text": "Network Watcher를 사용하여 트래픽 흐름을 사전에 모니터링합니다.",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "작업"
},
{
"category": "경영",
"guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "id": "F01.09",
+ "id": "F01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"severity": "보통",
"subcategory": "모니터링",
- "text": "리소스 잠금을 사용하여 중요한 공유 서비스가 실수로 삭제되는 것을 방지할 수 있습니다.",
+ "text": "리소스 잠금을 사용하여 중요한 공유 서비스가 실수로 삭제되는 것을 방지합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "작업"
},
{
"category": "경영",
"guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "id": "F01.10",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "id": "F01.09",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
"severity": "낮다",
"subcategory": "모니터링",
- "text": "거부 정책을 사용하여 Azure 역할 할당을 보완합니다. 거부 정책과 Azure 역할 할당의 조합은 리소스를 배포하고 구성할 수 있는 사용자와 배포 및 구성할 수 있는 리소스를 적용하기 위한 적절한 가드레일을 제공합니다.",
+ "text": "거부 정책을 사용하여 Azure 역할 할당을 보완합니다. 거부 정책과 Azure 역할 할당의 조합은 리소스를 배포 및 구성할 수 있는 사용자와 배포 및 구성할 수 있는 리소스를 적용하기 위한 적절한 가드레일이 마련되어 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal",
"waf": "작업"
},
{
"category": "경영",
"guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "id": "F01.11",
+ "id": "F01.10",
"link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
"severity": "보통",
"subcategory": "모니터링",
"text": "서비스 및 리소스 상태 이벤트를 전체 플랫폼 모니터링 솔루션의 일부로 포함합니다. 플랫폼 관점에서 서비스 및 리소스 상태를 추적하는 것은 Azure에서 리소스 관리의 중요한 구성 요소입니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/",
"waf": "작업"
},
{
"category": "경영",
"guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "id": "F01.12",
+ "id": "F01.11",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
"severity": "보통",
"subcategory": "모니터링",
- "text": "경고 또는 문제를 실행할 수 있도록 Azure Service Health 플랫폼의 일부로 경고 및 작업 그룹을 포함합니다.",
+ "text": "경고 또는 문제를 처리할 수 있도록 Azure Service Health 플랫폼의 일부로 경고 및 작업 그룹을 포함합니다.",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules",
"waf": "작업"
},
{
"category": "경영",
"guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "id": "F01.13",
+ "id": "F01.12",
"link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"severity": "보통",
"subcategory": "모니터링",
"text": "원시 로그 항목을 온-프레미스 모니터링 시스템으로 다시 보내지 마세요. 대신 Azure에서 생성된 데이터가 Azure에 유지된다는 원칙을 채택합니다. 온-프레미스 SIEM 통합이 필요한 경우 로그 대신 중요한 경고를 보냅니다.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/",
"waf": "작업"
},
{
"category": "경영",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "id": "F01.15",
+ "id": "F01.13",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "보통",
"subcategory": "모니터링",
"text": "인사이트 및 보고를 위해 Azure Monitor 로그를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "작업"
},
{
"category": "경영",
"guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "id": "F01.16",
+ "id": "F01.14",
"link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"severity": "보통",
"subcategory": "모니터링",
- "text": "필요한 경우 Azure 진단 확장 로그 스토리지에 대한 랜딩 존 내에서 공유 스토리지 계정을 사용합니다.",
+ "text": "필요한 경우 Azure 진단 확장 로그 스토리지의 랜딩 존 내에서 공유 스토리지 계정을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/",
"waf": "작업"
},
{
"category": "경영",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "id": "F01.17",
+ "id": "F01.15",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
"severity": "보통",
"subcategory": "모니터링",
"text": "Azure Monitor 경고를 사용하여 운영 경고를 생성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "작업"
},
{
"category": "경영",
"guid": "859c3900-4514-41eb-b010-475d695abd74",
- "id": "F01.18",
+ "id": "F01.16",
"link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
"severity": "보통",
"subcategory": "모니터링",
- "text": "모니터링 요구 사항이 평가되고 적절한 데이터 수집 및 경고 구성이 적용되었는지 확인합니다",
+ "text": "모니터링 요구 사항이 평가되었고 적절한 데이터 수집 및 경고 구성이 적용되었는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/",
"waf": "작업"
},
{
"category": "경영",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "id": "F01.19",
+ "id": "F01.17",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "보통",
"subcategory": "모니터링",
- "text": "Azure Automation 계정을 통해 변경 및 인벤토리 추적을 사용하는 경우 Log Analytics 작업 영역과 자동화 계정을 함께 연결하기 위해 지원되는 지역을 선택했는지 확인합니다.",
+ "text": "Azure Automation 계정을 통해 변경 및 인벤토리 추적을 사용하는 경우 Log Analytics 작업 영역과 자동화 계정을 함께 연결하는 데 지원되는 지역을 선택했는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "작업"
},
{
"category": "경영",
"guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "id": "F01.19",
+ "id": "F01.18",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
"severity": "보통",
"subcategory": "모니터링",
- "text": "랜딩 존의 플랫폼 구성 요소에 대한 모니터링을 설정하는 AMBA는 사용할 수 있는 프레임워크 솔루션이며 Azure Policy를 사용하여 경고의 크기를 조정하는 쉬운 방법을 제공합니다",
+ "text": "AMBA를 배포하여 랜딩 존의 플랫폼 구성 요소에 대한 모니터링 설정 - AMBA는 사용할 수 있는 프레임워크 솔루션으로, Azure Policy를 사용하여 경고를 쉽게 확장할 수 있는 방법을 제공합니다.",
"training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
"waf": "작업"
},
+ {
+ "category": "경영",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "id": "F01.19",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
+ "severity": "보통",
+ "subcategory": "모니터링",
+ "text": "AMA(Azure Monitoring Agent)를 사용합니다. Log Analytics 에이전트는 2024년 8월 31일부터 더 이상 사용되지 않습니다.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation",
+ "waf": "작업"
+ },
+ {
+ "category": "경영",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "id": "F01.20",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
+ "severity": "높다",
+ "subcategory": "데이터 보호",
+ "text": "스토리지 계정이 영역 또는 지역이 중복되는지 확인하고, 중복성은 스토리지 계정이 오류 발생 시 가용성 및 내구성 목표를 충족하도록 하여 더 낮은 비용과 더 높은 가용성을 비교합니다. 로컬 중복 저장소는 가장 낮은 비용으로 최소한의 내구성을 제공합니다.",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "waf": "신뢰도"
+ },
{
"category": "경영",
"guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
@@ -2132,7 +2298,8 @@
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"severity": "보통",
"subcategory": "데이터 보호",
- "text": "쌍을 이루는 지역이 있는 BCDR에 대해 Azure에서 지역 간 복제 고려",
+ "text": "쌍을 이루는 지역이 있는 BCDR에 대해 Azure에서 지역 간 복제를 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/",
"waf": "신뢰도"
},
{
@@ -2141,9 +2308,10 @@
"id": "F02.02",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "보통",
+ "severity": "낮다",
"subcategory": "데이터 보호",
- "text": "Azure Backup을 사용하는 경우 기본 설정은 GRS이므로 다양한 백업 유형(GRS, ZRS & LRS)을 고려합니다",
+ "text": "Azure Backup을 사용하는 경우 기본 설정은 GRS이므로 백업에 올바른 백업 유형(GRS, ZRS & LRS)을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "신뢰도"
},
{
@@ -2154,12 +2322,12 @@
"service": "VM",
"severity": "보통",
"subcategory": "운영 규정 준수",
- "text": "Azure 정책을 사용하여 VM 확장을 통해 소프트웨어 구성을 자동으로 배포하고 규격 기준 VM 구성을 적용합니다.",
+ "text": "Azure 게스트 정책을 사용하여 VM 확장을 통해 소프트웨어 구성을 자동으로 배포하고 규격 기준 VM 구성을 적용합니다.",
"waf": "안전"
},
{
"category": "경영",
- "description": "Azure Policy의 게스트 구성 기능은 컴퓨터 설정(예: OS, 애플리케이션, 환경)을 감사하고 수정하여 리소스가 예상 구성에 맞는지 확인할 수 있으며, 업데이트 관리는 VM에 대한 패치 관리를 적용할 수 있습니다.",
+ "description": "Azure Policy의 게스트 구성 기능을 사용하여 컴퓨터 설정(예: OS, 애플리케이션, 환경)을 감사하고 수정하여 리소스가 예상 구성에 맞는지 확인하고, 업데이트 관리는 VM에 대한 패치 관리를 적용할 수 있습니다.",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"id": "F03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
@@ -2167,6 +2335,7 @@
"severity": "보통",
"subcategory": "운영 규정 준수",
"text": "Azure Policy를 통해 VM 보안 구성 드리프트를 모니터링합니다.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
{
@@ -2177,7 +2346,8 @@
"service": "VM",
"severity": "보통",
"subcategory": "보호 및 복구",
- "text": "Azure-Azure Virtual Machines 재해 복구 시나리오에 Azure Site Recovery를 사용합니다. 이렇게 하면 지역 간에 워크로드를 복제할 수 있습니다.",
+ "text": "Azure-to-Azure Virtual Machines 재해 복구 시나리오에는 Azure Site Recovery를 사용합니다. 이렇게 하면 지역 간에 워크로드를 복제할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "작업"
},
{
@@ -2187,7 +2357,8 @@
"link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
"severity": "보통",
"subcategory": "보호 및 복구",
- "text": "네이티브 PaaS 서비스 재해 복구 기능을 사용하고 테스트해야 합니다.",
+ "text": "기본 PaaS 서비스 재해 복구 기능을 사용합니다. 이러한 기능을 사용하여 장애 조치(failover) 테스트를 수행합니다.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/",
"waf": "작업"
},
{
@@ -2198,54 +2369,20 @@
"service": "Backup",
"severity": "보통",
"subcategory": "보호 및 복구",
- "text": "Azure 네이티브 백업 기능 또는 Azure 호환 제3자 백업 솔루션을 사용합니다.",
+ "text": "Azure 네이티브 백업 기능 또는 Azure 호환 타사 백업 솔루션을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "작업"
},
{
- "ammp": true,
- "category": "경영",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "id": "F05.01",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "높다",
- "subcategory": "내결함성",
- "text": "VM이 지원되는 지역에서 VM에 대한 가용성 영역을 활용합니다.",
- "waf": "신뢰도"
- },
- {
- "ammp": true,
- "category": "경영",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "id": "F05.02",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "높다",
- "subcategory": "내결함성",
- "text": "단일 VM에서 프로덕션 워크로드를 실행하지 마세요.",
- "waf": "신뢰도"
- },
- {
- "category": "경영",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "id": "F05.03",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "보통",
- "subcategory": "내결함성",
- "text": "Azure Load Balancer 및 Application Gateway는 들어오는 네트워크 트래픽을 여러 리소스에 분산합니다.",
- "waf": "신뢰도"
- },
- {
- "ammp": true,
"category": "경영",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"id": "F06.01",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"service": "WAF",
"severity": "높다",
- "subcategory": "앱 제공",
- "text": "Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 WAF 로그를 저장하는 진단 설정을 추가합니다. 로그를 정기적으로 검토하여 공격 및 가양성 탐지를 확인합니다.",
+ "subcategory": "앱 배송",
+ "text": "진단 설정을 추가하여 Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 WAF 로그를 저장합니다. 로그를 정기적으로 검토하여 공격 및 가양성 탐지를 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "작업"
},
{
@@ -2255,8 +2392,9 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
"service": "WAF",
"severity": "보통",
- "subcategory": "앱 제공",
- "text": "Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 Microsoft Sentinel로 WAF 로그를 보냅니다. 공격을 감지하고 WAF 원격 분석을 전체 Azure 환경에 통합합니다.",
+ "subcategory": "앱 배송",
+ "text": "Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 Microsoft Sentinel로 WAF 로그를 보냅니다. 공격을 탐지하고 WAF 텔레메트리를 전체 Azure 환경에 통합합니다.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "작업"
},
{
@@ -2267,6 +2405,7 @@
"severity": "보통",
"subcategory": "출입 통제",
"text": "프로덕션에 허용하기 전에 Azure 서비스에 대한 인시던트 대응 계획을 결정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/",
"waf": "안전"
},
{
@@ -2276,11 +2415,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
"severity": "보통",
"subcategory": "출입 통제",
- "text": "적절한 경우 Azure 플랫폼에 대한 액세스에 대한 제로 트러스트 접근 방식을 구현합니다.",
+ "text": "Azure 플랫폼에 대한 액세스에 제로 트러스트 접근 방식을 적용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"id": "G02.01",
@@ -2288,7 +2427,8 @@
"service": "Key Vault",
"severity": "높다",
"subcategory": "암호화 및 키",
- "text": "Azure Key Vault를 사용하여 비밀 및 자격 증명 저장",
+ "text": "Azure Key Vault를 사용하여 비밀과 자격 증명을 저장합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
@@ -2300,7 +2440,8 @@
"service": "Key Vault",
"severity": "보통",
"subcategory": "암호화 및 키",
- "text": "다양한 애플리케이션 및 지역에 대해 서로 다른 Azure Key Vault를 사용하여 트랜잭션 규모 제한을 방지하고 비밀에 대한 액세스를 제한합니다.",
+ "text": "서로 다른 애플리케이션 및 지역에 대해 서로 다른 Azure Key Vault를 사용하여 트랜잭션 규모 제한을 방지하고 비밀에 대한 액세스를 제한합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
@@ -2312,6 +2453,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "삭제된 개체에 대한 보존 보호를 허용하기 위해 일시 삭제 및 제거 정책을 사용하도록 설정된 Azure Key Vault를 프로비전합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
@@ -2323,6 +2465,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "키, 비밀 및 인증서를 영구적으로 삭제할 수 있는 권한 부여를 특수 사용자 지정 Microsoft Entra ID 역할로 제한하여 최소 권한 모델을 따릅니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
@@ -2334,6 +2477,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "공용 인증 기관을 통해 인증서 관리 및 갱신 프로세스를 자동화하여 관리를 용이하게 합니다.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
@@ -2345,6 +2489,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "키 및 인증서 교체를 위한 자동화된 프로세스를 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
@@ -2356,6 +2501,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "자격 증명 모음에서 방화벽 및 가상 네트워크 서비스 엔드포인트 또는 프라이빗 엔드포인트를 사용하도록 설정하여 키 자격 증명 모음에 대한 액세스를 제어합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "안전"
},
{
@@ -2367,6 +2513,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "플랫폼 중앙 Azure Monitor Log Analytics 작업 영역을 사용하여 Key Vault의 각 인스턴스 내에서 키, 인증서 및 비밀 사용을 감사합니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "안전"
},
{
@@ -2378,6 +2525,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "Key Vault 인스턴스화 및 권한 있는 액세스를 위임하고 Azure Policy를 사용하여 일관된 규정 준수 구성을 적용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "안전"
},
{
@@ -2388,6 +2536,7 @@
"severity": "보통",
"subcategory": "암호화 및 키",
"text": "보안 주체 암호화 기능을 위해 기본적으로 Microsoft 관리형 키를 사용하고 필요한 경우 고객 관리형 키를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
@@ -2398,7 +2547,8 @@
"service": "Key Vault",
"severity": "보통",
"subcategory": "암호화 및 키",
- "text": "애플리케이션, 환경, 지역당 Azure Key Vault를 사용합니다.",
+ "text": "애플리케이션당 환경, 지역별 Azure Key Vault를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
@@ -2409,7 +2559,8 @@
"service": "Key Vault",
"severity": "보통",
"subcategory": "암호화 및 키",
- "text": "자체 키를 가져오려는 경우 고려되는 모든 서비스에서 지원되지 않을 수 있습니다. 불일치가 원하는 결과를 방해하지 않도록 관련 완화를 구현합니다. 대기 시간을 최소화하는 적절한 지역 쌍과 재해 복구 지역을 선택합니다.",
+ "text": "사용자 고유의 키를 가져오려는 경우 고려되는 모든 서비스에서 지원되지 않을 수 있습니다. 불일치가 원하는 결과를 방해하지 않도록 관련 완화를 구현합니다. 대기 시간을 최소화하는 적절한 지역 쌍 및 재해 복구 지역을 선택합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
@@ -2420,7 +2571,8 @@
"service": "Key Vault",
"severity": "보통",
"subcategory": "암호화 및 키",
- "text": "Sovereign Landing Zone의 경우 Azure Key Vault 관리형 HSM을 사용하여 비밀 및 자격 증명을 저장합니다.",
+ "text": "Sovereign Landing Zone의 경우 Azure Key Vault 관리형 HSM을 사용하여 비밀과 자격 증명을 저장합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
@@ -2432,6 +2584,7 @@
"severity": "보통",
"subcategory": "작업",
"text": "Microsoft Entra ID 보고 기능을 사용하여 액세스 제어 감사 보고서를 생성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "안전"
},
{
@@ -2441,11 +2594,11 @@
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
"severity": "보통",
"subcategory": "작업",
- "text": "장기 데이터 보존을 위해 Azure 활동 로그를 Azure Monitor 로그로 내보냅니다. 필요한 경우 2년 이상의 장기 보관을 위해 Azure Storage로 내보냅니다.",
+ "text": "장기 데이터 보존을 위해 Azure 활동 로그를 Azure Monitor 로그로 내보냅니다. 필요한 경우 2년 이상의 장기 저장을 위해 Azure Storage로 내보냅니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"id": "G03.03",
@@ -2454,10 +2607,10 @@
"severity": "높다",
"subcategory": "작업",
"text": "모든 구독에 대해 Defender 클라우드 보안 태세 관리를 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"id": "G03.04",
@@ -2465,11 +2618,11 @@
"service": "Defender",
"severity": "높다",
"subcategory": "작업",
- "text": "모든 구독에서 서버에 대한 Defender 클라우드 워크로드 보호 계획을 사용하도록 설정합니다.",
+ "text": "모든 구독의 서버에 대해 Defender 클라우드 워크로드 보호 계획을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"id": "G03.05",
@@ -2478,10 +2631,10 @@
"severity": "높다",
"subcategory": "작업",
"text": "모든 구독에서 Azure 리소스에 대한 Defender 클라우드 워크로드 보호 계획을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"id": "G03.06",
@@ -2490,6 +2643,7 @@
"severity": "높다",
"subcategory": "작업",
"text": "IaaS 서버에서 Endpoint Protection을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "안전"
},
{
@@ -2501,6 +2655,7 @@
"severity": "보통",
"subcategory": "작업",
"text": "Azure Monitor 로그 및 클라우드용 Defender를 통해 기본 운영 체제 패치 드리프트를 모니터링합니다.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "안전"
},
{
@@ -2512,42 +2667,55 @@
"severity": "보통",
"subcategory": "작업",
"text": "기본 리소스 구성을 중앙 집중식 Azure Monitor Log Analytics 작업 영역에 연결합니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "안전"
},
{
"category": "안전",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
"id": "G03.09",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "높다",
+ "subcategory": "작업",
+ "text": "상관 관계가 있는 로그를 통한 중앙 집중식 위협 탐지 - SIEM(보안 정보 및 이벤트 관리)을 통해 다양한 서비스 간에 상관 관계를 파악할 수 있는 중앙 위치에 보안 데이터를 통합합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "id": "G03.10",
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "보통",
"subcategory": "작업",
- "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 투명 로그가 사용하도록 설정됩니다.",
+ "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 투명 로그를 사용하도록 설정합니다.",
"waf": "안전"
},
{
"category": "안전",
"guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "id": "G03.10",
+ "id": "G03.11",
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "보통",
"subcategory": "작업",
- "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 고객 Lockbox를 사용할 수 있습니다.",
+ "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 고객 Lockbox를 사용하도록 설정합니다.",
"waf": "안전"
},
{
"category": "안전",
"guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "id": "G03.11",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security",
+ "id": "G03.12",
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
"severity": "낮다",
"subcategory": "작업",
- "text": "로그 지향 실시간 경고에 Azure Event Grid 기반 솔루션 사용Use an Azure Event Grid-based solution for log-oriented, real-time alerts",
+ "text": "로그 지향 실시간 경고를 위해 Azure Event Grid 기반 솔루션을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"id": "G04.01",
@@ -2555,11 +2723,11 @@
"service": "Storage",
"severity": "높다",
"subcategory": "개요",
- "text": "스토리지 계정에 대한 보안 전송을 사용하도록 설정해야 함",
+ "text": "스토리지 계정에 대한 보안 전송을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"id": "G04.02",
@@ -2571,7 +2739,6 @@
"waf": "안전"
},
{
- "ammp": true,
"category": "안전",
"guid": "6f704104-85c1-441f-96d3-c9819911645e",
"id": "G05.01",
@@ -2579,6 +2746,7 @@
"severity": "높다",
"subcategory": "권한 있는 액세스 보호",
"text": "Azure 관리 작업에 대한 권한 있는 관리자 계정을 분리합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/",
"waf": "안전"
},
{
@@ -2588,7 +2756,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "보통",
"subcategory": "서비스 지원 프레임워크",
- "text": "새 Azure 서비스 구현 방법 계획",
+ "text": "새 Azure 서비스를 구현하는 방법을 계획합니다.",
"waf": "안전"
},
{
@@ -2598,11 +2766,10 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "보통",
"subcategory": "서비스 지원 프레임워크",
- "text": "Azure 서비스에 대한 서비스 요청을 이행하는 방법 계획",
+ "text": "Azure 서비스에 대한 서비스 요청을 이행하는 방법을 계획합니다.",
"waf": "안전"
},
{
- "ammp": true,
"category": "플랫폼 자동화 및 DevOps",
"guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
"id": "H01.01",
@@ -2610,6 +2777,7 @@
"severity": "높다",
"subcategory": "DevOps 팀 토폴로지",
"text": "Azure 랜딩 존 아키텍처를 빌드, 관리 및 유지 관리할 수 있는 교차 기능 DevOps 플랫폼 팀이 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/",
"waf": "작업"
},
{
@@ -2619,7 +2787,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "낮다",
"subcategory": "DevOps 팀 토폴로지",
- "text": "Azure 랜딩 존 플랫폼 팀의 함수를 정의하는 것을 목표로 합니다.",
+ "text": "Azure Landing Zone Platform 팀을 위한 함수를 정의하는 것을 목표로 합니다.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "작업"
},
{
@@ -2629,18 +2798,19 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "낮다",
"subcategory": "DevOps 팀 토폴로지",
- "text": "애플리케이션 워크로드 팀이 자급자족하고 DevOps 플랫폼 팀 지원이 필요하지 않도록 기능을 정의하는 것을 목표로 합니다. 사용자 지정 RBAC 역할을 사용하여 이 작업을 수행합니다.",
+ "text": "애플리케이션 워크로드 팀이 자급자족하고 DevOps 플랫폼 팀 지원이 필요하지 않도록 기능을 정의하는 것을 목표로 합니다. 사용자 지정 RBAC 역할을 사용하여 이를 달성합니다.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "작업"
},
{
- "ammp": true,
"category": "플랫폼 자동화 및 DevOps",
"guid": "165eb5e9-b434-448a-9e24-178632186212",
"id": "H01.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "severity": "높다",
+ "severity": "보통",
"subcategory": "DevOps 팀 토폴로지",
"text": "CI/CD 파이프라인을 사용하여 IaC 아티팩트를 배포하고 배포 및 Azure 환경의 품질을 보장합니다.",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/",
"waf": "작업"
},
{
@@ -2650,11 +2820,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"severity": "보통",
"subcategory": "DevOps 팀 토폴로지",
- "text": "IaC 및 애플리케이션 코드에 대한 단위 테스트를 빌드 프로세스의 일부로 포함합니다.",
+ "text": "IaC 및 응용 프로그램 코드에 대한 단위 테스트를 빌드 프로세스의 일부로 포함합니다.",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/",
"waf": "작업"
},
{
- "ammp": true,
"category": "플랫폼 자동화 및 DevOps",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"id": "H01.06",
@@ -2663,6 +2833,7 @@
"severity": "높다",
"subcategory": "DevOps 팀 토폴로지",
"text": "Key Vault 비밀을 사용하여 자격 증명(가상 머신 사용자 암호), 인증서 또는 키와 같은 중요한 정보를 하드 코딩하지 않도록 합니다.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "작업"
},
{
@@ -2672,11 +2843,10 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
"severity": "낮다",
"subcategory": "DevOps 팀 토폴로지",
- "text": "구독 자판기를 통해 응용 프로그램 및 워크로드에 대한 새로운 랜딩 존에 대한 자동화 구현Implement automation for new landing zone for applications and workloads through subscription vending",
+ "text": "서브스크립션 벤딩을 통해 애플리케이션 및 워크로드에 대한 새로운 랜딩 존에 대한 자동화를 구현합니다.",
"waf": "작업"
},
{
- "ammp": true,
"category": "플랫폼 자동화 및 DevOps",
"guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
"id": "H02.01",
@@ -2684,6 +2854,7 @@
"severity": "높다",
"subcategory": "개발 수명 주기",
"text": "버전 제어 시스템이 개발된 애플리케이션 및 IaC의 소스 코드에 사용되는지 확인합니다. Microsoft는 Git을 권장합니다.",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/",
"waf": "작업"
},
{
@@ -2693,7 +2864,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "낮다",
"subcategory": "개발 수명 주기",
- "text": "팀이 더 잘 협업하고 IaC 및 애플리케이션 코드의 버전 제어를 효율적으로 관리할 수 있도록 분기 전략을 따릅니다. Github Flow와 같은 옵션을 검토합니다.",
+ "text": "브랜치 전략을 따라 팀이 더 효과적으로 협업하고 IaC 및 애플리케이션 코드의 버전 제어를 효율적으로 관리할 수 있도록 합니다. Github Flow와 같은 옵션을 검토합니다.",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/",
"waf": "작업"
},
{
@@ -2703,7 +2875,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "보통",
"subcategory": "개발 수명 주기",
- "text": "분기에 병합된 코드 변경 내용을 제어하는 데 도움이 되는 끌어오기 요청 전략을 채택합니다.",
+ "text": "분기에 병합된 코드 변경 내용을 계속 제어하는 데 도움이 되는 끌어오기 요청 전략을 채택합니다.",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/",
"waf": "작업"
},
{
@@ -2713,22 +2886,22 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
"severity": "보통",
"subcategory": "개발 수명 주기",
- "text": "코드를 사용하여 빠른 수정을 구현하기 위한 프로세스를 설정합니다. 항상 팀의 백로그에 빠른 수정을 등록하여 각 수정을 나중에 다시 작업할 수 있도록 하고 기술 부채를 제한할 수 있습니다.",
+ "text": "코드를 사용하여 빠른 수정을 구현하는 프로세스를 설정합니다. 항상 팀의 백로그에 빠른 수정을 등록하여 각 수정 사항을 나중에 다시 작업할 수 있고 기술 부채를 제한할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/",
"waf": "작업"
},
{
- "ammp": true,
"category": "플랫폼 자동화 및 DevOps",
"guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
"id": "H03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "높다",
"subcategory": "개발 전략",
- "text": "Azure Bicep, ARM 템플릿 또는 Terraform과 같은 선언적 인프라를 코드 도구로 활용하여 Azure 랜딩 존 아키텍처를 빌드하고 유지 관리합니다. 플랫폼 및 응용 프로그램 워크로드 관점에서Both from a Platform and Application workload perspective.",
+ "text": "Azure Bicep, ARM 템플릿 또는 Terraform과 같은 선언적 인프라 코드 도구를 활용하여 Azure 랜딩 존 아키텍처를 빌드하고 유지 관리할 수 있습니다. 플랫폼 및 응용 프로그램 워크로드 관점에서모두에서.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/",
"waf": "작업"
},
{
- "ammp": true,
"category": "플랫폼 자동화 및 DevOps",
"guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
"id": "H04.01",
@@ -2736,13 +2909,14 @@
"severity": "높다",
"subcategory": "안전",
"text": "DevOps에서 이미 결합된 개발 및 운영 프로세스에 보안을 통합하여 혁신 프로세스의 위험을 완화합니다.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/",
"waf": "작업"
}
],
"metadata": {
"name": "Azure Landing Zone Review",
"state": "GA",
- "timestamp": "June 17, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -2770,7 +2944,7 @@
"name": "성취"
},
{
- "description": "권장 사항은 이해되었지만 현재 요구 사항에 필요하지 않음",
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
"name": "필요 없음"
},
{
diff --git a/checklists/alz_checklist.pt.json b/checklists/alz_checklist.pt.json
index e8c94165d..7f5c1b181 100644
--- a/checklists/alz_checklist.pt.json
+++ b/checklists/alz_checklist.pt.json
@@ -4,10 +4,10 @@
"name": "Locatários de Cobrança do Azure e ID do Microsoft Entra"
},
{
- "name": "Gerenciamento de identidades e acesso"
+ "name": "Gerenciamento de identidade e acesso"
},
{
- "name": "Topologia de rede e conectividade"
+ "name": "Topologia e conectividade de rede"
},
{
"name": "Segurança"
@@ -16,16 +16,28 @@
"name": "Gestão"
},
{
- "name": "Organização de Recursos"
+ "name": "Organização de recursos"
},
{
- "name": "Automação de Plataforma e DevOps"
+ "name": "Automação de plataforma e DevOps"
},
{
"name": "Governança"
}
],
"items": [
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "id": "",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "Média",
+ "subcategory": "Hub e spoke",
+ "text": "Implante seus recursos de conectividade de zona de destino do Azure em várias regiões, para que você possa dar suporte rapidamente a zonas de destino de aplicativos de várias regiões e cenários de recuperação de desastre.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidade"
+ },
{
"category": "Locatários de Cobrança do Azure e ID do Microsoft Entra",
"guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
@@ -33,8 +45,9 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
"service": "Entra",
"severity": "Média",
- "subcategory": "Locatários do Microsoft Entra ID",
- "text": "Use um locatário do Entra para gerenciar seus recursos do Azure, a menos que você tenha um requisito regulamentar ou comercial claro para multilocatários.",
+ "subcategory": "Locatários de ID do Microsoft Entra",
+ "text": "Use um locatário do Entra para gerenciar seus recursos do Azure, a menos que você tenha um requisito regulatório ou comercial claro para multilocatários.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "Operações"
},
{
@@ -44,8 +57,9 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
"service": "Entra",
"severity": "Baixo",
- "subcategory": "Locatários do Microsoft Entra ID",
- "text": "Verifique se você tem uma abordagem de automação multilocatário para gerenciar seus locatários do Microsoft Entra ID",
+ "subcategory": "Locatários de ID do Microsoft Entra",
+ "text": "Use a abordagem de Automação Multilocatário para gerenciar seus locatários de ID do Microsoft Entra.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "Operações"
},
{
@@ -54,9 +68,10 @@
"id": "A01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "Baixo",
- "subcategory": "Locatários do Microsoft Entra ID",
- "text": "Aproveite o Farol do Azure para gerenciamento multilocatário",
+ "severity": "Alto",
+ "subcategory": "Locatários de ID do Microsoft Entra",
+ "text": "Use o Azure Lighthouse para gerenciamento de vários locatários com as mesmas IDs.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "Operações"
},
{
@@ -65,9 +80,10 @@
"id": "A02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Provedor de Soluções na Nuvem",
- "text": "Verifique se o Farol do Azure é usado para administrar o locatário por parceiro",
+ "text": "Se você conceder a um parceiro acesso para administrar seu locatário, use o Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "Custar"
},
{
@@ -77,7 +93,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
"severity": "Baixo",
"subcategory": "Provedor de Soluções na Nuvem",
- "text": "Discutir a solicitação de suporte e o processo de escalonamento com o parceiro CSP",
+ "text": "Se você tiver um parceiro CSP, defina e documente sua solicitação de suporte e processo de escalonamento.",
"waf": "Custar"
},
{
@@ -87,7 +103,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Média",
"subcategory": "Provedor de Soluções na Nuvem",
- "text": "Configurar relatórios de custos e exibições com o Gerenciamento de Custos do Azure",
+ "text": "Configure relatórios de custos e exibições com o Gerenciamento de Custos do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "Custar"
},
{
@@ -96,8 +113,8 @@
"id": "A03.01",
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"severity": "Média",
- "subcategory": "Acordo de Empresa",
- "text": "Configurar contatos de notificação para uma caixa de correio de grupo",
+ "subcategory": "Contrato Enterprise",
+ "text": "Configure os Contatos de Notificação para uma caixa de correio de grupo.",
"waf": "Custar"
},
{
@@ -106,18 +123,20 @@
"id": "A03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "Baixo",
- "subcategory": "Acordo de Empresa",
- "text": "Use departamentos e contas para mapear a estrutura da sua organização para a hierarquia de registros, o que pode ajudar na separação do faturamento.",
+ "subcategory": "Contrato Enterprise",
+ "text": "Use departamentos e contas para mapear a estrutura da sua organização para sua hierarquia de registro, o que pode ajudar a separar o faturamento.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles",
"waf": "Custar"
},
{
"category": "Locatários de Cobrança do Azure e ID do Microsoft Entra",
"guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
"id": "A03.04",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
"severity": "Média",
- "subcategory": "Acordo de Empresa",
- "text": "Habilite os Encargos de Exibição de DA e os Encargos de Exibição de AO em suas Inscrições EA para permitir que os usuários com os permanentes corretos revisem os Dados de Custo e Faturamento.",
+ "subcategory": "Contrato Enterprise",
+ "text": "Habilite as Cobranças de Exibição de DA e as Cobranças de Exibição de AO em suas Inscrições de EA para permitir que os usuários com as permissões corretas revisem os Dados de Custo e Cobrança.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal",
"waf": "Segurança"
},
{
@@ -126,8 +145,9 @@
"id": "A03.05",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "Baixo",
- "subcategory": "Acordo de Empresa",
- "text": "Faça uso de assinaturas corporativas de desenvolvimento/teste para reduzir os custos de cargas de trabalho que não são de produção",
+ "subcategory": "Contrato Enterprise",
+ "text": "Uso de assinaturas de desenvolvimento/teste Enterprise para reduzir custos de cargas de trabalho que não são de produção.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest",
"waf": "Custar"
},
{
@@ -136,8 +156,9 @@
"id": "A04.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Baixo",
- "subcategory": "Contrato de Cliente Microsoft",
- "text": "Configurar email de contato de notificação de conta de faturamento do contrato",
+ "subcategory": "Contrato de Cliente da Microsoft",
+ "text": "Configurar o email de contato de notificação da conta de cobrança do contrato.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account",
"waf": "Custar"
},
{
@@ -146,8 +167,9 @@
"id": "A04.02",
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
"severity": "Baixo",
- "subcategory": "Contrato de Cliente Microsoft",
- "text": "Use as seções Perfis de faturamento e Fatura para estruturar o faturamento de seus contratos para um gerenciamento de custos eficaz",
+ "subcategory": "Contrato de Cliente da Microsoft",
+ "text": "Use as seções Perfis de faturamento e Fatura para estruturar o faturamento de seus contratos para um gerenciamento de custos eficaz.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles",
"waf": "Custar"
},
{
@@ -156,8 +178,9 @@
"id": "A04.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Baixo",
- "subcategory": "Contrato de Cliente Microsoft",
- "text": "Use o plano do Microsoft Azure para oferta de desenvolvimento/teste para reduzir os custos de cargas de trabalho que não são de produção",
+ "subcategory": "Contrato de Cliente da Microsoft",
+ "text": "Use o plano do Microsoft Azure para oferta de desenvolvimento/teste para reduzir os custos de cargas de trabalho de não produção.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio",
"waf": "Custar"
},
{
@@ -166,646 +189,688 @@
"id": "A04.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "Média",
- "subcategory": "Contrato de Cliente Microsoft",
- "text": "Audite periodicamente as atribuições de função RBAC de faturamento do contrato para analisar quem tem acesso à sua conta de faturamento MCA",
+ "subcategory": "Contrato de Cliente da Microsoft",
+ "text": "Defina e documente um processo para auditar periodicamente as atribuições de função RBAC de faturamento do contrato para revisar quem tem acesso à sua conta de faturamento do MCA.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles",
"waf": "Custar"
},
{
- "ammp": true,
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"id": "B03.01",
"link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"service": "Entra",
"severity": "Alto",
"subcategory": "Identidade",
- "text": "Aplique um modelo RBAC que se alinhe ao seu modelo operacional de nuvem. Escopo e atribuição entre grupos de gerenciamento e assinaturas.",
+ "text": "Aplique um modelo RBAC que se alinhe ao seu modelo operacional de nuvem. Escopo e Atribuição entre Grupos de Gerenciamento e Assinaturas.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "4348bf81-7573-4512-8f46-9061cc198fea",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
"severity": "Alto",
- "subcategory": "ID do Microsoft Entra e Identidade Híbrida",
- "text": "Use identidades gerenciadas em vez de entidades de serviço para autenticação nos serviços do Azure. Você pode verificar se há entidades de serviço existentes por meio do ID do Entra > Logs de Login > logins da entidade de serviço.",
+ "subcategory": "ID do Microsoft Entra e identidade híbrida",
+ "text": "Use identidades gerenciadas em vez de entidades de serviço para autenticação nos serviços do Azure. Você pode verificar se há entidades de serviço existentes por meio da ID do Entra > Logs de login > Logons da entidade de serviço.",
"training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "Alto",
+ "severity": "Média",
"subcategory": "Identidade",
"text": "Use apenas o tipo de autenticação Conta corporativa ou de estudante para todos os tipos de conta. Evite usar a conta da Microsoft",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
"id": "B03.03",
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
"service": "Entra",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Use apenas grupos para atribuir permissões. Adicione grupos locais ao grupo Entra ID somente se um sistema de gerenciamento de grupo já estiver em vigor.",
+ "text": "Use apenas grupos para atribuir permissões. Adicione grupos locais ao grupo Somente ID do Entra se um sistema de gerenciamento de grupo já estiver em vigor.",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
"id": "B03.04",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "Baixo",
+ "severity": "Alto",
"subcategory": "Identidade",
- "text": "Impor políticas de acesso condicional do Microsoft Entra ID para qualquer usuário com direitos a ambientes do Azure",
+ "text": "Imponha políticas de Acesso Condicional da ID do Microsoft Entra para qualquer usuário com direitos a ambientes do Azure.",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"id": "B03.05",
"link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
"service": "Entra",
"severity": "Alto",
"subcategory": "Identidade",
- "text": "Impor a autenticação multifator para qualquer usuário com direitos aos ambientes do Azure",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Imponha a autenticação multifator para qualquer usuário com direitos aos ambientes do Azure.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
"id": "B03.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Identidade",
- "text": "Impor responsabilidades centralizadas e delegadas para gerenciar recursos implantados dentro da zona de aterrissagem, com base nos requisitos de função e segurança",
+ "text": "Imponha responsabilidades centralizadas e delegadas para gerenciar recursos implantados dentro da zona de destino, com base nos requisitos de função e segurança.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "14658d35-58fd-4772-99b8-21112df27ee4",
"id": "B03.07",
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"service": "Entra",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Impor o Microsoft Entra ID Privileged Identity Management (PIM) para estabelecer acesso permanente zero e privilégio mínimo",
+ "text": "Imponha o Microsoft Entra ID Privileged Identity Management (PIM) para estabelecer acesso permanente zero e privilégios mínimos.",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
"id": "B03.09",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
+ "severity": "Alto",
+ "subcategory": "Identidade",
+ "text": "Ao implantar Controladores de Domínio do Active Directory, use um local com Zonas de Disponibilidade e implante pelo menos duas VMs nessas zonas. Se não estiver disponível, implante em um conjunto de disponibilidade.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gerenciamento de identidade e acesso",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "id": "B03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Ao implantar o Active Directory no Windows Server, use um local com zonas de disponibilidade e implante pelo menos duas VMs nessas zonas. Se não estiver disponível, implante em um Conjunto de Disponibilidade",
+ "text": "Implante seus recursos de identidade da zona de destino do Azure em várias regiões. Se estiver usando controladores de domínio, associe cada região a um site do Active Directory para que os recursos possam ser resolvidos para seus controladores de domínio locais.",
"training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"waf": "Fiabilidade"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "id": "B03.10",
+ "id": "B03.11",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Use as funções RBAC personalizadas do Azure para as seguintes funções-chave para fornecer acesso refinado em sua ALZ: proprietário da plataforma Azure, gerenciamento de rede, operações de segurança, proprietário da assinatura, proprietário do aplicativo. Alinhe essas funções às equipes e responsabilidades dentro da sua empresa.",
+ "text": "Use as funções RBAC personalizadas do Azure para as seguintes funções principais para fornecer acesso refinado em sua ALZ: proprietário da plataforma do Azure, gerenciamento de rede, operações de segurança, proprietário da assinatura, proprietário do aplicativo. Alinhe essas funções às equipes e responsabilidades dentro de sua empresa.",
"training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "Segurança"
},
{
+ "category": "Gerenciamento de identidade e acesso",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "id": "B03.10",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "id": "B03.12",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "Média",
- "subcategory": "Gerenciamento de identidades e acesso",
- "text": "Se estiver planejando mudar de Serviços de Domínio do Active Directory para serviços de domínio Entra, avalie a compatibilidade de todas as cargas de trabalho",
+ "subcategory": "Identidade",
+ "text": "Se estiver planejando alternar dos Serviços de Domínio Active Directory para os serviços de domínio Entra, avalie a compatibilidade de todas as cargas de trabalho.",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "id": "B03.13",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "Média",
+ "subcategory": "Identidade",
+ "text": "Ao usar o Microsoft Entra Domain Services, use conjuntos de réplicas. Os conjuntos de réplicas melhorarão a resiliência do domínio gerenciado e permitirão que você implante em regiões adicionais. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gerenciamento de identidade e acesso",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "id": "B03.11",
+ "id": "B03.14",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "Média",
"subcategory": "Identidade",
"text": "Integre os logs de ID do Microsoft Entra com o Azure Monitor central da plataforma. O Azure Monitor permite uma única fonte de verdade sobre dados de log e monitoramento no Azure, oferecendo às organizações opções nativas de nuvem para atender aos requisitos de coleta e retenção de logs.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "id": "B03.12",
+ "id": "B03.15",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "Alto",
"subcategory": "Identidade",
- "text": "Implementar um acesso de emergência ou contas de quebra-vidro para evitar o bloqueio de contas em todo o locatário",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "Implemente um acesso de emergência ou contas de emergência para evitar o bloqueio de conta em todo o locatário. A MFA será ativada por padrão para todos os usuários em outubro de 2024. Recomendamos atualizar essas contas para usar a chave de acesso (FIDO2) ou configurar a autenticação baseada em certificado para MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "id": "B03.13",
+ "id": "B03.16",
"link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"severity": "Média",
"subcategory": "Microsoft Entra ID",
- "text": "Ao implantar um Microsoft Entra Connect, aproveite um servidor de preparo para alta disponibilidade / recuperação de desastres",
+ "text": "Ao implantar o Microsoft Entra Connect, use um servidor de preparo para alta disponibilidade/recuperação de desastre.",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies",
"waf": "Fiabilidade"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "id": "B03.14",
+ "id": "B03.17",
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Evite usar contas sincronizadas locais para atribuições de função de ID do Microsoft Entra.",
+ "text": "Não use contas sincronizadas locais para atribuições de função de ID do Microsoft Entra, a menos que você tenha um cenário que exija isso especificamente.",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "id": "B03.15",
+ "id": "B03.18",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Quando necessário, use o Microsoft Entra ID Application Proxy para dar aos usuários remotos acesso seguro e autenticado a aplicativos internos (hospedados na nuvem ou no local).",
+ "text": "Ao usar o Proxy de Aplicativo de ID do Microsoft Entra para fornecer acesso de usuários remotos a aplicativos, gerencie-o como um recurso da plataforma, pois você só pode ter uma instância por locatário.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
"id": "B04.01",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
- "severity": "Média",
- "subcategory": "Zonas de desembarque",
- "text": "Configure a segmentação de rede de identidade por meio do uso de uma rede virtual e faça peer back para o hub. Fornecendo autenticação dentro da zona de aterrissagem do aplicativo (legado).",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "severity": "Alto",
+ "subcategory": "Zonas de pouso",
+ "text": "Configure a segmentação de rede de identidade por meio do uso de uma rede virtual e emparelhe de volta para o hub. Fornecer autenticação dentro da zona de destino do aplicativo (herdada).",
"training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "d4d1ad54-1abc-4919-b267-3f342d3b49e4",
"id": "B04.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"severity": "Média",
- "subcategory": "Zonas de desembarque",
- "text": "Use o RBAC do Azure para gerenciar o acesso do plano de dados aos recursos, se possível. Ex.: - Operações de dados no Cofre de Chaves, Conta de Armazenamento e Serviços de Banco de Dados.",
+ "subcategory": "Zonas de pouso",
+ "text": "Use o RBAC do Azure para gerenciar o acesso do plano de dados aos recursos, se possível. Por exemplo, operações de dados no Key Vault, na conta de armazenamento e nos serviços de banco de dados.",
"training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"waf": "Segurança"
},
{
- "category": "Gerenciamento de identidades e acesso",
+ "category": "Gerenciamento de identidade e acesso",
"guid": "d505ebcb-79b1-4274-9c0d-a27c8bea489c",
"id": "B04.03",
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
"severity": "Média",
- "subcategory": "Zonas de desembarque",
- "text": "Use as revisões de acesso do PIM do Microsoft Entra ID para validar periodicamente os direitos de recurso.",
+ "subcategory": "Zonas de pouso",
+ "text": "Use as revisões de acesso PIM da ID do Microsoft Entra para validar periodicamente os direitos de recursos.",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"description": "Considere usar a ferramenta de nomenclatura do Azure disponível em https://aka.ms/azurenamingtool",
"guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
"id": "C01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
"severity": "Alto",
- "subcategory": "Nomeação e marcação",
- "text": "Recomenda-se seguir os padrões de nomenclatura de práticas recomendadas da Microsoft",
+ "subcategory": "Nomenclatura e marcação",
+ "text": "Use um esquema de nomenclatura bem definido para recursos, como os Padrões de Nomenclatura de Práticas Recomendadas da Microsoft.",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "2df27ee4-12e7-4f98-9f63-04722dd69c5b",
"id": "C02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Impor hierarquia de grupo de gerenciamento razoavelmente simples com no máximo quatro níveis.",
+ "text": "Imponha uma hierarquia de grupo de gerenciamento razoavelmente plana com no máximo quatro níveis.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "667313b4-f566-44b5-b984-a859c773e7d2",
"id": "C02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Impor um grupo de gerenciamento de área restrita para permitir que os usuários experimentem imediatamente o Azure",
+ "text": "Imponha um grupo de gerenciamento de área restrita para permitir que os usuários experimentem imediatamente o Azure.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
"id": "C02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Impor um grupo de gerenciamento de plataforma sob o grupo de gerenciamento raiz para dar suporte à política de plataforma comum e à atribuição de função do Azure",
+ "text": "Imponha um grupo de gerenciamento de plataforma no grupo de gerenciamento raiz para dar suporte à política de plataforma comum e à atribuição de função do Azure.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
"id": "C02.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Aplique uma assinatura de conectividade dedicada no grupo de gerenciamento de Conectividade para hospedar um hub de WAN Virtual do Azure, DNS (Sistema de Nomes de Domínio) privado, circuito de Rota Expressa e outros recursos de rede.",
+ "text": "Imponha uma assinatura de conectividade dedicada no grupo de gerenciamento de conectividade para hospedar um hub da WAN Virtual do Azure, DNS (Sistema de Nomes de Domínio) privado não AD, circuito do ExpressRoute e outros recursos de rede.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant = (array_length(mgmtChain) > 1)",
"guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
"id": "C02.05",
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Impor que nenhuma assinatura seja colocada no grupo de gerenciamento raiz",
+ "text": "Imponha que nenhuma assinatura seja colocada no grupo de gerenciamento raiz.",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
"id": "C02.06",
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Impor que apenas usuários privilegiados possam operar grupos de gerenciamento no locatário habilitando a autorização RBAC do Azure nas configurações de hierarquia do grupo de gerenciamento",
+ "text": "Imponha que somente usuários privilegiados possam operar grupos de gerenciamento no locatário habilitando a autorização RBAC do Azure nas configurações de hierarquia do grupo de gerenciamento.",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "92481607-d5d1-4e4e-9146-58d3558fd772",
"id": "C02.07",
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Aplique grupos de gerenciamento sob o grupo de gerenciamento de nível raiz para representar os tipos de cargas de trabalho, com base em suas necessidades de segurança, conformidade, conectividade e recursos.",
+ "text": "Imponha grupos de gerenciamento no grupo de gerenciamento de nível raiz para representar os tipos de cargas de trabalho, com base em suas necessidades de segurança, conformidade, conectividade e recursos.",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "49b82111-2df2-47ee-912e-7f983f630472",
"id": "C02.08",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
"severity": "Alto",
"subcategory": "Assinaturas",
- "text": "Aplique um processo para conscientizar os proprietários de recursos sobre suas funções e responsabilidades, acessar a revisão, revisar o orçamento, a conformidade com a política e corrigir quando necessário.",
+ "text": "Aplique um processo para conscientizar os proprietários de recursos sobre suas funções e responsabilidades, acessar a revisão, a revisão do orçamento, a conformidade com a política e corrigir quando necessário.",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
"id": "C02.09",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Certifique-se de que todos os proprietários de assinaturas e a equipe principal de TI estejam cientes das cotas de assinatura e do impacto que elas têm nos recursos de provisionamento para uma determinada assinatura.",
+ "text": "Verifique se todos os proprietários de assinatura e a equipe principal de TI estão cientes das cotas de assinatura e do impacto que elas têm nos recursos de provisionamento para uma determinada assinatura.",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
"id": "C02.10",
"link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
"severity": "Alto",
"subcategory": "Assinaturas",
- "text": "Use instâncias reservadas quando apropriado para otimizar o custo e garantir a capacidade disponível nas regiões de destino. Imponha o uso de SKUs de VM de Instância Reservada compradas por meio da Política do Azure.",
+ "text": "Use instâncias reservadas quando apropriado para otimizar custos e garantir a capacidade disponível nas regiões de destino.",
"training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
"id": "C02.11",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/design-capacity",
- "severity": "Alto",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards",
+ "severity": "Média",
"subcategory": "Assinaturas",
- "text": "Impor um painel, pasta de trabalho ou processo manual para monitorar os níveis de capacidade usados",
- "training": "https://learn.microsoft.com/learn/paths/monitor-usage-performance-availability-resources-azure-monitor/",
+ "text": "Estabeleça painéis e/ou visualizações para monitorar as métricas de capacidade de computação e armazenamento. (ou seja, CPU, memória, espaço em disco)",
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
"id": "C02.12",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs",
"severity": "Alto",
"subcategory": "Assinaturas",
- "text": "Impor um processo para gerenciamento de custos",
+ "text": "Como parte da adoção da nuvem, implemente um plano detalhado de gerenciamento de custos usando o processo \"Custos gerenciados da nuvem\".",
"training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "3a923c34-74d0-4001-aac6-a9e01e6a83de",
"id": "C02.13",
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Se os servidores forem usados para serviços de identidade, como controladores de domínio, estabeleça uma assinatura de identidade dedicada no grupo de gerenciamento de identidades para hospedar esses serviços. Verifique se os recursos estão definidos para usar os controladores de domínio disponíveis em sua região.",
+ "text": "Se os servidores forem usados para serviços de identidade, como controladores de domínio, estabeleça uma assinatura de identidade dedicada no grupo de gerenciamento de identidades para hospedar esses serviços. Verifique se os recursos estão configurados para usar os controladores de domínio disponíveis em sua região.",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
"id": "C02.14",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Garantir que as tags sejam usadas para faturamento e gerenciamento de custos",
+ "text": "Certifique-se de que as tags sejam usadas para faturamento e gerenciamento de custos.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
"id": "C02.15",
"link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "Para a Sovereign Landing Zone, tenha um grupo de gestão \"confidencial\" e \"confidencial online\" diretamente sob as \"zonas de pouso\" MG.",
+ "text": "Para a Zona de Aterrissagem Soberana, tenha um grupo de gerenciamento de 'corporações confidenciais' e 'confidencial online' diretamente sob o MG de 'zonas de pouso'.",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview",
"waf": "Segurança"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
"id": "C03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
"severity": "Alto",
"subcategory": "Regiões",
- "text": "Selecione a(s) região(ões) do Azure certa para sua implantação. O Azure é uma plataforma de nuvem de escala global que fornece cobertura global em muitas regiões e geografias. Diferentes regiões do Azure têm diferentes características, modelos de acesso e disponibilidade, custos, capacidade e serviços oferecidos, por isso é importante considerar todos os critérios e requisitos",
+ "text": "Selecione as regiões do Azure corretas para sua implantação. O Azure é uma plataforma de nuvem em escala global que fornece cobertura global em várias regiões e geografias. Diferentes regiões do Azure têm diferentes características, modelos de acesso e disponibilidade, custos, capacidade e serviços oferecidos, portanto, é importante considerar todos os critérios e requisitos.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Fiabilidade"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
"id": "C03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
"severity": "Média",
"subcategory": "Regiões",
- "text": "Considere uma implantação de várias regiões. Dependendo do tamanho do cliente, locais e presença de usuários, operar em várias regiões pode ser uma escolha comum para fornecer serviços e executar aplicativos mais próximos a eles. O uso de uma implantação de várias regiões também é importante para fornecer recursos de recuperação de desastres geográficos, eliminar a dependência de uma capacidade de uma única região e diminuir o risco de uma restrição de capacidade de recursos temporária e localizada",
+ "text": "Implante sua zona de destino do Azure em uma implantação de várias regiões. Dependendo do tamanho do cliente, locais e presença de usuários, operar em várias regiões pode ser uma escolha comum para fornecer serviços e executar aplicativos mais próximos a eles. O uso de uma implantação de várias regiões também é importante para fornecer recursos de recuperação de desastre geográfico, para eliminar a dependência de uma única capacidade de região e diminuir o risco de uma restrição temporária e localizada de capacidade de recursos.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Fiabilidade"
},
{
- "category": "Organização de Recursos",
+ "category": "Organização de recursos",
"guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
"id": "C03.03",
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
"severity": "Média",
"subcategory": "Regiões",
- "text": "Verifique se os serviços e recursos necessários estão disponíveis nas regiões de implantação escolhidas",
+ "text": "Verifique se os serviços e recursos necessários estão disponíveis nas regiões de implantação escolhidas.",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
"severity": "Média",
"subcategory": "Entrega de aplicativos",
- "text": "Desenvolva um plano para proteger o conteúdo do aplicativo de entrega de seus raios de carga de trabalho usando o Gateway de Aplicativo e o Azure Front door. Você pode usar a lista de verificação de entrega de aplicativos para obter recomendações.",
+ "text": "Documente um padrão para proteger o conteúdo do aplicativo de entrega de seus spokes de carga de trabalho usando o Gateway de Aplicativo e o Azure Front Door. Você pode usar a lista de verificação de entrega de aplicativos para obter recomendações.",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
"id": "D01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "Média",
- "subcategory": "Hub e falou",
- "text": "Aproveite um design de rede baseado na topologia de rede hub-and-spoke tradicional para cenários de rede que exigem flexibilidade máxima.",
+ "subcategory": "Hub e spoke",
+ "text": "Use uma topologia de rede hub-and-spoke para cenários de rede que exigem flexibilidade máxima.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "id": "D01.02",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "severity": "Média",
- "subcategory": "Entrega de aplicativos",
- "text": "Execute a entrega de aplicativos dentro das zonas de aterrissagem para aplicativos internos (corp) e externos (online).",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
"id": "D01.02",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "Alto",
- "subcategory": "Hub e falou",
- "text": "Verifique se os serviços de rede compartilhados, incluindo gateways de Rota Expressa, gateways VPN e Firewall do Azure ou NVAs de parceiros na rede virtual de hub central. Se necessário, implante também servidores DNS.",
+ "subcategory": "Hub e spoke",
+ "text": "Implante serviços de rede compartilhados, incluindo gateways do ExpressRoute, gateways de VPN e Firewall do Azure ou NVAs de parceiros na rede virtual do hub central. Se necessário, implante também serviços DNS.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Custar"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Entrega de aplicativos",
- "text": "Use uma rede DDoS ou planos de proteção IP para todos os endereços IP públicos nas zonas de aterrissagem do aplicativo.",
+ "text": "Use um plano de proteção de IP ou rede DDoS para todos os endereços IP públicos nas zonas de destino do aplicativo.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "Média",
- "subcategory": "Hub e falou",
- "text": "Ao implantar tecnologias de rede de parceiros ou NVAs, siga as orientações do fornecedor parceiro",
+ "subcategory": "Hub e spoke",
+ "text": "Ao implantar tecnologias de rede de parceiros ou NVAs, siga as diretrizes do fornecedor do parceiro.",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
"id": "D01.04",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
"service": "ExpressRoute",
"severity": "Baixo",
- "subcategory": "Hub e falou",
- "text": "Se você precisar transitar entre gateways ExpressRoute e VPN em cenários de hub e spoke, use o Servidor de Rota do Azure.",
+ "subcategory": "Hub e spoke",
+ "text": "Se você precisar de trânsito entre o ExpressRoute e os gateways de VPN em cenários hub e spoke, use o Servidor de Rota do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
"id": "D01.05",
"link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
"service": "ARS",
"severity": "Baixo",
- "subcategory": "Hub e falou",
- "text": "Se estiver usando o Servidor de Rotas, use um prefixo /27 para a sub-rede do Servidor de Rotas.",
+ "subcategory": "Hub e spoke",
+ "text": "Se estiver usando o Servidor de Roteamento, use um prefixo /27 para a sub-rede do Servidor de Roteamento.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
"id": "D01.06",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "Média",
- "subcategory": "Hub e falou",
- "text": "Para arquiteturas de rede com várias topologias de hub e spoke em regiões do Azure, use emparelhamentos de rede virtual global entre as VNets de hub para conectar as regiões umas às outras.",
+ "subcategory": "Hub e spoke",
+ "text": "Para arquiteturas de rede com várias topologias hub-and-spoke em regiões do Azure, use emparelhamentos de rede virtual global entre as VNets do hub para conectar as regiões entre si.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
"id": "D01.07",
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
"service": "VNet",
"severity": "Média",
- "subcategory": "Hub e falou",
- "text": "Use o Azure Monitor for Networks para monitorar o estado de ponta a ponta das redes no Azure.",
+ "subcategory": "Hub e spoke",
+ "text": "Use o Azure Monitor para Redes para monitorar o estado de ponta a ponta das redes no Azure.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"id": "D01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "Média",
- "subcategory": "Hub e falou",
- "text": "Ao conectar redes virtuais spoke à rede virtual do hub central, considere os limites de emparelhamento de VNet (500), o número máximo de prefixos que podem ser anunciados via Rota Expressa (1000)",
+ "subcategory": "Hub e spoke",
+ "text": "Se você tiver mais de 400 redes spoke em uma região, implante um hub adicional para ignorar os limites de emparelhamento VNet (500) e o número máximo de prefixos que podem ser anunciados por meio do ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"id": "D01.09",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "Média",
- "subcategory": "Hub e falou",
- "text": "Considere o limite de rotas por tabela de rotas (400).",
+ "subcategory": "Hub e spoke",
+ "text": "Limite o número de rotas por tabela de rotas a 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"id": "D01.10",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
"service": "VNet",
"severity": "Alto",
- "subcategory": "Hub e falou",
- "text": "Use a configuração 'Permitir tráfego para rede virtual remota' ao configurar emparelhamentos de rede virtual",
+ "subcategory": "Hub e spoke",
+ "text": "Use a configuração 'Permitir tráfego para rede virtual remota' ao configurar emparelhamentos VNet.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "id": "D01.11",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "Alto",
+ "subcategory": "Hub e spoke",
+ "text": "Use o SKU do Standard Load Balancer com uma implantação com redundância de zona, a seleção do SKU Standard Load Balancer aumenta a confiabilidade por meio de zonas de disponibilidade e resiliência de zona, garantindo que as implantações resistam a falhas de zona e região. Ao contrário do Basic, ele oferece suporte ao balanceamento de carga global e oferece um SLA.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "id": "D01.12",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "Alto",
+ "subcategory": "Hub e spoke",
+ "text": "Verifique se os pools de back-end do balanceador de carga contêm pelo menos duas instâncias, a implantação de Azure Load Balancers com pelo menos duas instâncias no back-end evita um único ponto de falha e dá suporte à escalabilidade.",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
"id": "D02.01",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Encriptação",
- "text": "Quando você estiver usando o ExpressRoute Direct, configure o MACsec para criptografar o tráfego no nível de camada dois entre os roteadores da organização e o MSEE. O diagrama mostra essa criptografia no fluxo.",
+ "text": "Quando você estiver usando o ExpressRoute Direct, configure o MACsec para criptografar o tráfego no nível da camada dois entre os roteadores da organização e o MSEE. O diagrama mostra essa criptografia no fluxo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
"id": "D02.02",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "Baixo",
+ "severity": "Média",
"subcategory": "Encriptação",
- "text": "Para cenários em que MACsec não é uma opção (por exemplo, não usar o ExpressRoute Direct), use um gateway VPN para estabelecer túneis IPsec sobre emparelhamento privado da Rota Expressa.",
+ "text": "Para cenários em que o MACsec não é uma opção (por exemplo, não usando o ExpressRoute Direct), use um gateway de VPN para estabelecer túneis IPsec no emparelhamento privado do ExpressRoute.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"id": "D03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Plano IP",
- "text": "Certifique-se de que nenhum espaço de endereço IP sobreposto entre regiões do Azure e locais locais seja usado",
+ "text": "Verifique se nenhum espaço de endereço IP sobreposto entre regiões do Azure e locais é usado.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"id": "D03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "Baixo",
+ "severity": "Média",
"subcategory": "Plano IP",
- "text": "Use endereços IP dos intervalos de alocação de endereços para internets privadas (RFC 1918).",
+ "text": "Use endereços IP dos intervalos de alocação de endereços para Internets privadas (RFC 1918).",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
"id": "D03.03",
@@ -813,28 +878,40 @@
"service": "VNet",
"severity": "Alto",
"subcategory": "Plano IP",
- "text": "Certifique-se de que o espaço de endereço IP não seja desperdiçado, não crie redes virtuais desnecessariamente grandes (por exemplo, /16)",
+ "text": "Certifique-se de que o espaço de endereço IP não seja desperdiçado, não crie redes virtuais desnecessariamente grandes (por exemplo, /16).",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Desempenho"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"id": "D03.04",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "Alto",
"subcategory": "Plano IP",
- "text": "Evite usar intervalos de endereços IP sobrepostos para sites de produção e DR.",
+ "text": "Não use intervalos de endereços IP sobrepostos para sites de produção e recuperação de desastres.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "category": "Topologia e conectividade de rede",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
"id": "D03.05",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "Alto",
+ "subcategory": "Plano IP",
+ "text": "Use SKU Standard e IPs com redundância de zona quando aplicável, os endereços IP públicos no Azure podem ser de SKU padrão, disponíveis como não zonal, zonal ou com redundância de zona. Os IPs com redundância de zona podem ser acessados em todas as zonas, resistindo a qualquer falha de zona única, fornecendo assim maior resiliência. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "id": "D03.06",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "Média",
"subcategory": "Plano IP",
@@ -843,33 +920,33 @@
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "id": "D03.06",
+ "id": "D03.07",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "Média",
"subcategory": "Plano IP",
- "text": "Para ambientes em que a resolução de nomes no Azure e no local é necessária, considere usar o Resolvedor Privado de DNS do Azure.",
+ "text": "Para ambientes em que a resolução de nomes no Azure e no local é necessária e não há nenhum serviço DNS corporativo existente, como o Active Directory, use o Resolvedor Privado de DNS do Azure para rotear solicitações de DNS para o Azure ou para servidores DNS locais.",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "id": "D03.07",
+ "id": "D03.08",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "Baixo",
"subcategory": "Plano IP",
- "text": "Cargas de trabalho especiais que exigem e implantam seu próprio DNS (como o Red Hat OpenShift) devem usar sua solução DNS preferida.",
+ "text": "Cargas de trabalho especiais que exigem e implantam seu próprio DNS (como o Red Hat OpenShift) devem usar sua solução de DNS preferida.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
- "id": "D03.08",
+ "id": "D03.09",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
"service": "DNS",
"severity": "Alto",
@@ -879,18 +956,31 @@
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "id": "D03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "Média",
+ "subcategory": "Plano IP",
+ "text": "Implementar um plano para gerenciar a resolução de DNS entre várias regiões do Azure e quando os serviços fazem failover para outra região",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"id": "D05.01",
"link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
"service": "Bastion",
"severity": "Média",
"subcategory": "Internet",
- "text": "Considere usar o Bastião do Azure para se conectar com segurança à sua rede.",
+ "text": "Use o Azure Bastion para se conectar com segurança à sua rede.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
"guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
"id": "D05.02",
@@ -898,74 +988,72 @@
"service": "Bastion",
"severity": "Média",
"subcategory": "Internet",
- "text": "Use o Bastião do Azure em uma sub-rede /26 ou maior.",
+ "text": "Use o Azure Bastion em uma sub-rede /26 ou maior.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
"id": "D05.03",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "WAF",
"severity": "Média",
"subcategory": "Internet",
- "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre as regiões do Azure para conexões HTTP/S de entrada para uma zona de aterrissagem.",
+ "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre regiões do Azure para conexões HTTP/S de entrada para uma zona de destino.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"id": "D05.04",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "Baixo",
"subcategory": "Internet",
- "text": "Ao usar o Azure Front Door e o Gateway de Aplicativo do Azure para ajudar a proteger aplicativos HTTP/S, use políticas de WAF no Azure Front Door. Bloqueie o Gateway de Aplicativo do Azure para receber tráfego somente do Azure Front Door.",
+ "text": "Ao usar o Azure Front Door e o Gateway de Aplicativo do Azure para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Azure Front Door. Bloqueie o Gateway de Aplicativo do Azure para receber tráfego somente do Azure Front Door.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"id": "D05.05",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "Alto",
"subcategory": "Internet",
- "text": "Implantar WAFs e outros proxies reversos são necessários para conexões HTTP/S de entrada, implantá-los em uma rede virtual de zona de aterrissagem e junto com os aplicativos que eles estão protegendo e expondo à Internet.",
+ "text": "Quando WAFs e outros proxies reversos forem necessários para conexões HTTP/S de entrada, implante-os em uma rede virtual de zona de destino e junto com os aplicativos que eles estão protegendo e expondo à Internet.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"id": "D05.06",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "Alto",
"subcategory": "Internet",
- "text": "Use os planos de Proteção de IP ou Rede DDoS do Azure para ajudar a proteger os pontos de extremidade de Endereços IP Públicos nas redes virtuais.",
+ "text": "Use os planos de Rede ou Proteção de IP do Azure contra DDoS para ajudar a proteger os pontos de extremidade de endereços IP públicos nas redes virtuais.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"id": "D05.07",
"link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
"service": "VNet",
"severity": "Alto",
"subcategory": "Internet",
- "text": "Avalie e analise a configuração e a estratégia do tráfego de saída da rede antes da próxima mudança de ruptura. Em 30 de setembro de 2025, o acesso de saída padrão para novas implantações será desativado e somente as configurações de acesso explícito serão permitidas",
+ "text": "Planeje como gerenciar a configuração e a estratégia de tráfego de saída da rede antes da próxima alteração significativa. Em 30 de setembro de 2025, o acesso de saída padrão para novas implantações será desativado e somente configurações de acesso explícito serão permitidas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"id": "D05.08",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
@@ -977,46 +1065,57 @@
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "id": "D05.08",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "Alto",
+ "subcategory": "Internet",
+ "text": "Verifique se há uma atribuição de política para negar endereços IP públicos diretamente vinculados a máquinas virtuais. Use exclusões se IPs públicos forem necessários em VMs específicas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
"id": "D06.01",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Verifique se você investigou a possibilidade de usar a Rota Expressa como conexão primária com o Azure.",
+ "text": "Use o ExpressRoute como a conexão principal com o Azure. Use VPNs como fonte de conectividade de backup.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
- "description": "Você pode usar os pesos de conexão e prependente de caminho AS para influenciar o tráfego do Azure para o local e toda a gama de atributos BGP em seus próprios roteadores para influenciar o tráfego do local para o Azure.",
+ "category": "Topologia e conectividade de rede",
+ "description": "Você pode usar o prefixo AS-path e pesos de conexão para influenciar o tráfego do Azure para o local e toda a gama de atributos BGP em seus próprios roteadores para influenciar o tráfego do local para o Azure.",
"guid": "f29812b2-363c-4efe-879b-599de0d5973c",
"id": "D06.02",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Ao usar vários circuitos de Rota Expressa ou vários locais locais, certifique-se de otimizar o roteamento com atributos BGP, se determinados caminhos forem preferidos.",
+ "text": "Ao usar vários circuitos do ExpressRoute ou vários locais locais, use atributos BGP para otimizar o roteamento.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
"id": "D06.03",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Verifique se você está usando a SKU certa para os gateways ExpressRoute/VPN com base nos requisitos de largura de banda e desempenho.",
+ "text": "Selecione o SKU correto para os gateways ExpressRoute/VPN com base nos requisitos de largura de banda e desempenho.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Desempenho"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
"guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
"id": "D06.04",
@@ -1024,12 +1123,12 @@
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Certifique-se de que você está usando circuitos de Rota Expressa de dados ilimitados somente se atingir a largura de banda que justifica seu custo.",
+ "text": "Verifique se você está usando circuitos do ExpressRoute de dados ilimitados somente se atingir a largura de banda que justifica seu custo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Custar"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
"guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
"id": "D06.05",
@@ -1037,11 +1136,12 @@
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Aproveite a SKU Local da Rota Expressa para reduzir o custo de seus circuitos, se o local de emparelhamento de seus circuitos oferecer suporte às regiões do Azure para a SKU Local.",
+ "text": "Aproveite o SKU local do ExpressRoute para reduzir o custo de seus circuitos, se o local de emparelhamento de circuito der suporte às regiões do Azure para o SKU Local.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Custar"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
"id": "D06.06",
@@ -1049,12 +1149,12 @@
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Implante um gateway de Rota Expressa com redundância de zona nas regiões do Azure com suporte.",
+ "text": "Implante um gateway do ExpressRoute com redundância de zona nas regiões do Azure com suporte.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
"id": "D06.07",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
@@ -1066,19 +1166,19 @@
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
"id": "D06.08",
"link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Quando a baixa latência for necessária ou a taxa de transferência do local para o Azure precisar ser maior que 10 Gbps, habilite o FastPath para ignorar o gateway da Rota Expressa a partir do caminho de dados.",
+ "text": "Quando a baixa latência for necessária ou a taxa de transferência do local para o Azure precisar ser maior que 10 Gbps, habilite o FastPath para ignorar o gateway do ExpressRoute do caminho de dados.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
"guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
"id": "D06.09",
@@ -1086,98 +1186,97 @@
"service": "VPN",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Use gateways VPN com redundância de zona para conectar filiais ou locais remotos ao Azure (quando disponível).",
+ "text": "Use gateways de VPN com redundância de zona para conectar branches ou locais remotos ao Azure (quando disponível).",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
"id": "D06.10",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
"service": "VPN",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Use dispositivos VPN redundantes no local (ativo/ativo ou ativo/passivo).",
+ "text": "Use dispositivos VPN redundantes locais (ativo/ativo ou ativo/passivo).",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"id": "D06.11",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Se estiver usando o ExpressRoute Direct, considere usar circuitos locais do ExpressRoute para as regiões locais do Azure para economizar custos",
+ "text": "Se estiver usando o ExpressRoute Direct, considere usar circuitos locais do ExpressRoute para as regiões locais do Azure para economizar custos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Custar"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
"id": "D06.12",
"link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Quando o isolamento de tráfego ou a largura de banda dedicada forem necessários, como para separar ambientes de produção e de não produção, use circuitos de Rota Expressa diferentes. Ele ajudará você a garantir domínios de roteamento isolados e aliviar os riscos de vizinhos barulhentos.",
+ "text": "Quando o isolamento de tráfego ou a largura de banda dedicada for necessária, como para separar ambientes de produção e não produção, use circuitos diferentes do ExpressRoute. Ele ajudará você a garantir domínios de roteamento isolados e aliviar os riscos de vizinhos barulhentos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b30e38c3-f298-412b-8363-cefe179b599d",
"id": "D06.13",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Monitore a disponibilidade e a utilização do ExpressRoute usando o Express Route Insights integrado.",
+ "text": "Monitore a disponibilidade e a utilização do ExpressRoute usando o Express Route Insights interno.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
"id": "D06.14",
"link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Use o Monitor de Conexão para monitoramento de conectividade na rede, especialmente entre o local e o Azure.",
+ "text": "Use o Monitor da Conexão para monitoramento de conectividade em toda a rede, especialmente entre o local e o Azure.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
"id": "D06.15",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Use circuitos de Rota Expressa de diferentes locais de emparelhamento para redundância.",
+ "text": "Use circuitos do ExpressRoute de diferentes locais de emparelhamento para redundância.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
"id": "D06.16",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Use VPN site a site como failover da Rota Expressa, especialmente se estiver usando apenas um único circuito da Rota Expressa.",
+ "text": "Use a VPN site a site como failover do ExpressRoute, se estiver usando apenas um único circuito do ExpressRoute.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
"guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
"id": "D06.17",
@@ -1185,121 +1284,130 @@
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Se você estiver usando uma tabela de rotas na GatewaySubnet, verifique se as rotas de gateway são propagadas.",
+ "text": "Se você estiver usando uma tabela de rotas no GatewaySubnet, certifique-se de que as rotas de gateway sejam propagadas.",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"id": "D06.18",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Se estiver usando a Rota Expressa, seu roteamento local deve ser dinâmico: no caso de uma falha de conexão, ele deve convergir para a conexão restante do circuito. A carga deve ser compartilhada entre ambas as conexões idealmente como ativa/ativa, embora ativa/passiva também seja suportada.",
+ "text": "Se estiver usando o ExpressRoute, o roteamento local deverá ser dinâmico: no caso de uma falha de conexão, ele deverá convergir para a conexão restante do circuito. A carga deve ser compartilhada entre ambas as conexões, idealmente como ativa/ativa, embora ativa/passiva também seja suportada.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
"id": "D06.19",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Verifique se os dois links físicos do circuito da Rota Expressa estão conectados a dois dispositivos de borda distintos na rede.",
+ "text": "Verifique se os dois links físicos do circuito do ExpressRoute estão conectados a dois dispositivos de borda distintos em sua rede.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
"id": "D06.20",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Verifique se o BFD (Bidirectional Forwarding Detection) está habilitado e configurado em dispositivos de roteamento de borda do cliente ou provedor.",
+ "text": "Certifique-se de que a Detecção de Encaminhamento Bidirecional (BFD) esteja habilitada e configurada em dispositivos de roteamento de borda do cliente ou provedor.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
"id": "D06.22",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "Conecte o ExpressRoute Gateway a dois ou mais circuitos de locais de emparelhamento diferentes para maior resiliência.",
+ "text": "Conecte o Gateway do ExpressRoute a dois ou mais circuitos de diferentes locais de emparelhamento para maior resiliência.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
"id": "D06.23",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Configure logs e alertas de diagnóstico para o gateway de rede virtual da Rota Expressa.",
+ "text": "Configure logs de diagnóstico e alertas para o gateway de rede virtual do ExpressRoute.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5234c93f-b651-41dd-80c1-234177b91ced",
"id": "D06.24",
"link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Evite usar circuitos de Rota Expressa para comunicação de VNet-to-VNet.",
+ "text": "Não use circuitos do ExpressRoute para comunicação VNet para VNet.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Desempenho"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "id": "D06.25",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "Baixo",
+ "subcategory": "Híbrido",
+ "text": "Não envie o tráfego do Azure para locais híbridos para inspeção. Em vez disso, siga o princípio \"o tráfego no Azure permanece no Azure\" para que a comunicação entre os recursos no Azure ocorra por meio da rede de backbone da Microsoft.",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
"id": "D07.01",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Usar o Firewall do Azure para controlar o tráfego de saída do Azure para a Internet, conexões de entrada não HTTP/S e filtragem de tráfego Leste/Oeste (se a organização exigir)",
+ "text": "Use o Firewall do Azure para controlar o tráfego de saída do Azure para a Internet, conexões de entrada não HTTP/S e filtragem de tráfego Leste/Oeste (se a organização exigir).",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
"id": "D07.02",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "Média",
"subcategory": "Firewall",
- "text": "Crie uma política global do Firewall do Azure para controlar a postura de segurança no ambiente de rede global e atribua-a a todas as instâncias do Firewall do Azure. Permita que as políticas granulares atendam aos requisitos de regiões específicas delegando políticas de firewall incrementais a equipes de segurança locais por meio do controle de acesso baseado em função do Azure.",
+ "text": "Crie uma política global de Firewall do Azure para controlar a postura de segurança em todo o ambiente de rede global e atribua-a a todas as instâncias do Firewall do Azure. Permita que políticas granulares atendam aos requisitos de regiões específicas delegando políticas de firewall incrementais às equipes de segurança locais por meio do controle de acesso baseado em função do Azure.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
"id": "D07.03",
"link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
"service": "Firewall",
"severity": "Baixo",
"subcategory": "Firewall",
- "text": "Configure provedores de segurança SaaS de parceiros com suporte no Firewall Manager se a organização quiser usar essas soluções para ajudar a proteger as conexões de saída.",
+ "text": "Configure provedores de segurança SaaS de parceiros compatíveis no Firewall Manager se a organização quiser usar essas soluções para ajudar a proteger as conexões de saída.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"id": "D07.04",
@@ -1307,12 +1415,12 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Use regras de rede baseadas em FQDN e o Firewall do Azure com proxy DNS para filtrar o tráfego de saída para a Internet em protocolos sem suporte pelas regras de aplicativo.",
+ "text": "Use regras de aplicativo para filtrar o tráfego de saída no nome do host de destino para protocolos com suporte. Use regras de rede baseadas em FQDN e Firewall do Azure com proxy DNS para filtrar o tráfego de saída para a Internet em outros protocolos.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"id": "D07.05",
@@ -1320,25 +1428,24 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Use o Firewall do Azure Premium para segurança e proteção adicionais.",
+ "text": "Use o Firewall do Azure Premium para habilitar recursos de segurança adicionais.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
"id": "D07.06",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Configure o modo de Inteligência de Ameaças do Firewall do Azure para Alertar e Negar para obter proteção adicional.",
+ "text": "Configure o modo de Inteligência contra Ameaças do Firewall do Azure como Alerta e Negação para proteção adicional.",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
"id": "D07.07",
@@ -1346,12 +1453,12 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Configure o modo IDPS do Firewall do Azure para Negar para obter proteção adicional.",
+ "text": "Configure o modo IDPS do Firewall do Azure como Negar para proteção adicional.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"id": "D07.08",
@@ -1359,12 +1466,11 @@
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Para sub-redes em redes virtuais não conectadas à WAN Virtual, anexe uma tabela de rotas para que o tráfego da Internet seja redirecionado para o Firewall do Azure ou para um Dispositivo Virtual de Rede",
+ "text": "Para sub-redes em VNets não conectadas à WAN Virtual, anexe uma tabela de rotas para que o tráfego da Internet seja redirecionado para o Firewall do Azure ou uma Solução de Virtualização de Rede.",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"id": "D07.09",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
@@ -1376,21 +1482,19 @@
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"id": "D07.10",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
"service": "Firewall",
- "severity": "Importante",
+ "severity": "Alto",
"subcategory": "Firewall",
- "text": "Migre das regras clássicas do Firewall do Azure (se existirem) para a Política de Firewall.",
+ "text": "Migre das regras clássicas do Firewall do Azure (se houver) para a Política de Firewall.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
"id": "D07.11",
@@ -1399,76 +1503,80 @@
"severity": "Alto",
"subcategory": "Segmentação",
"text": "Use um prefixo /26 para suas sub-redes do Firewall do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
"service": "Firewall",
"severity": "Média",
"subcategory": "Firewall",
- "text": "Organizar regras dentro da diretiva de firewall em Grupos de Coleta de Regras e Coleções de Regras e com base em sua frequência de uso",
+ "text": "Organize as regras dentro da política de firewall em Grupos de Coleção de Regras e Coleções de Regras e com base em sua frequência de uso.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
"id": "D07.12",
"link": "https://learn.microsoft.com/azure/firewall/ip-groups",
"service": "Firewall",
"severity": "Média",
"subcategory": "Firewall",
- "text": "Usar grupos de IP ou prefixos IP para reduzir o número de regras de tabela de IP",
+ "text": "Use grupos de IP ou prefixos de IP para reduzir o número de regras de tabela de IP.",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"id": "D07.13",
"link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
"service": "Firewall",
"severity": "Média",
"subcategory": "Firewall",
- "text": "Evite curingas como um IP de origem para DNATS, como * ou qualquer, você deve especificar IPs de origem para DNATs de entrada",
+ "text": "Não use curingas como um IP de origem para DNATS, como * ou any, você deve especificar IPs de origem para DNATs de entrada.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
"id": "D07.14",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "Média",
"subcategory": "Firewall",
- "text": "Evite o esgotamento da porta SNAT monitorando o uso da porta SNAT, avaliando as configurações do gateway NAT e garantindo failover contínuo. Se a contagem de portas se aproximar do limite, é um sinal de que a exaustão do SNAT pode ser iminente.",
+ "text": "Evite o esgotamento da porta SNAT monitorando o uso da porta SNAT, avaliando as configurações do NAT Gateway e garantindo um failover contínuo. Se a contagem de portas se aproximar do limite, é um sinal de que o esgotamento do SNAT pode ser iminente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
"id": "D07.15",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
"service": "Firewall",
"severity": "Alto",
"subcategory": "Firewall",
- "text": "Habilitar a inspeção TLS",
+ "text": "Se você estiver usando o Firewall do Azure Premium, habilite a Inspeção TLS.",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
"id": "D07.16",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
"service": "Firewall",
"severity": "Baixo",
"subcategory": "Firewall",
- "text": "Use categorias da Web para permitir ou negar acesso de saída a tópicos específicos.",
+ "text": "Use categorias da Web para permitir ou negar o acesso de saída a tópicos específicos.",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"id": "D07.17",
"link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
@@ -1476,116 +1584,133 @@
"severity": "Média",
"subcategory": "Firewall",
"text": "Como parte da inspeção TLS, planeje o recebimento de tráfego dos Gateways de Aplicativo do Azure para inspeção.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"id": "D07.18",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "Média",
"subcategory": "Firewall",
- "text": "Habilitar a configuração de proxy DNS do Firewall do Azure ",
+ "text": "Habilite a configuração de proxy DNS do Firewall do Azure.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "category": "Topologia e conectividade de rede",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"id": "D07.19",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Firewall",
- "text": "Verifique se há uma atribuição de diretiva para negar endereços IP públicos diretamente vinculados a Máquinas Virtuais",
- "waf": "Segurança"
+ "text": "Integre o Firewall do Azure ao Azure Monitor e habilite o log de diagnóstico para armazenar e analisar logs e métricas de firewall.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "category": "Topologia e conectividade de rede",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"id": "D07.20",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "Baixo",
"subcategory": "Firewall",
- "text": "Integre o Firewall do Azure ao Azure Monitor e habilite o log de diagnóstico para armazenar e analisar logs de firewall.",
+ "text": "Implementar backups para suas regras de firewall",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
"id": "D07.21",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
"service": "Firewall",
- "severity": "Baixo",
+ "severity": "Alto",
"subcategory": "Firewall",
- "text": "Implementar backups para suas regras de firewall",
- "waf": "Operações"
+ "text": "Implante o Firewall do Azure em várias zonas de disponibilidade. O Firewall do Azure oferece SLAs diferentes, dependendo de sua implantação; em uma única zona de disponibilidade ou em várias, melhorando potencialmente a confiabilidade e o desempenho.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
"id": "D07.22",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "Alto",
+ "subcategory": "Firewall",
+ "text": "Configure a Proteção contra DDoS na VNet do Firewall do Azure, associe um plano de proteção contra DDoS à rede virtual que hospeda o Firewall do Azure para fornecer mitigação aprimorada contra ataques de DDoS. O Gerenciador de Firewall do Azure integra a criação de infraestrutura de firewall e planos de proteção contra DDoS. ",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Topologia e conectividade de rede",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "id": "D07.23",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Paas",
- "text": "Verifique se a comunicação do plano de controle para serviços de PaaS do Azure injetados em uma rede virtual não está interrompida, por exemplo, com uma rota 0.0.0.0/0 ou uma regra NSG que bloqueia o tráfego do plano de controle.",
+ "text": "Não interrompa a comunicação do painel de controle para serviços de PaaS do Azure injetados em redes virtuais, como com uma rota 0.0.0.0/0 ou uma regra NSG que bloqueia o tráfego do painel de controle.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
"id": "D08.02",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"severity": "Média",
"subcategory": "Paas",
- "text": "Use o Link Privado, quando disponível, para serviços de PaaS compartilhados do Azure.",
+ "text": "Use o Link Privado, quando disponível, para serviços compartilhados de PaaS do Azure.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
"id": "D08.03",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "Média",
"subcategory": "Paas",
- "text": "Acesse os serviços de PaaS do Azure locais por meio de pontos de extremidade privados e emparelhamento privado da Rota Expressa. Esse método evita o trânsito pela internet pública.",
+ "text": "Acesse os serviços de PaaS do Azure localmente por meio de pontos de extremidade privados e emparelhamento privado do ExpressRoute. Esse método evita o trânsito pela Internet pública.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
"id": "D08.04",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Paas",
"text": "Não habilite pontos de extremidade de serviço de rede virtual por padrão em todas as sub-redes.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
"id": "D08.05",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "Média",
"subcategory": "Paas",
- "text": "Filtre o tráfego de saída para os serviços de PaaS do Azure usando FQDNs em vez de endereços IP no Firewall do Azure ou em um NVA para impedir a exfiltração de dados. Se estiver usando o Private Link, você poderá bloquear todos os FQDNs, caso contrário, permita apenas os serviços de PaaS necessários.",
+ "text": "Filtre o tráfego de saída para os serviços de PaaS do Azure usando FQDNs em vez de endereços IP no Firewall do Azure ou em uma NVA para evitar a exfiltração de dados. Se estiver usando o Link Privado, você poderá bloquear todos os FQDNs, caso contrário, permita apenas os serviços de PaaS necessários.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
"id": "D09.01",
@@ -1593,209 +1718,196 @@
"service": "ExpressRoute",
"severity": "Alto",
"subcategory": "Segmentação",
- "text": "Use pelo menos um prefixo /27 para suas sub-redes do Gateway",
+ "text": "Utilize pelo menos um prefixo /27 para as sub-redes do Gateway.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"id": "D09.02",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Segmentação",
"text": "Não confie nas regras padrão de entrada do NSG usando a marca de serviço VirtualNetwork para limitar a conectividade.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
"id": "D09.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Delegue a criação da sub-rede ao proprietário da zona de aterrissagem.",
+ "text": "Delegue a criação de sub-rede ao proprietário da zona de destino.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"id": "D09.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"service": "NSG",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Use NSGs para ajudar a proteger o tráfego entre sub-redes, bem como o tráfego leste/oeste através da plataforma (tráfego entre zonas de pouso).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "id": "D09.05",
- "service": "NSG",
- "severity": "Média",
- "subcategory": "Segmentação",
- "text": "A equipe de aplicativos deve usar grupos de segurança de aplicativos nos NSGs de nível de sub-rede para ajudar a proteger VMs de várias camadas dentro da zona de aterrissagem.",
+ "text": "Use NSGs para ajudar a proteger o tráfego entre sub-redes, bem como o tráfego leste/oeste na plataforma (tráfego entre zonas de destino).",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "id": "D09.06",
+ "id": "D09.05",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Use NSGs e grupos de segurança de aplicativos para microssegmentar o tráfego dentro da zona de aterrissagem e evite usar um NVA central para filtrar os fluxos de tráfego.",
+ "text": "Use NSGs e grupos de segurança de aplicativos para microssegmentar o tráfego dentro da zona de destino e evite usar uma NVA central para filtrar fluxos de tráfego.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "id": "D09.07",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "id": "D09.06",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Habilite os Logs de Fluxo de Rede Virtual e alimente-os na Análise de Tráfego para obter insights sobre os fluxos de tráfego internos e externos.",
+ "text": "Habilite os Logs de Fluxo de VNet e alimente-os na Análise de Tráfego para obter insights sobre fluxos de tráfego internos e externos.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "id": "D09.08",
+ "id": "D09.07",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Considere o limite de regras NSG por NSG (1000).",
+ "text": "Não implemente mais de 900 regras de NSG por NSG, devido ao limite de 1000 regras.",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
"id": "D10.01",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Considere a WAN Virtual para gerenciamento simplificado de rede do Azure e verifique se seu cenário está explicitamente descrito na lista de designs de roteamento de WAN Virtual",
+ "text": "Use a WAN Virtual se o cenário estiver explicitamente descrito na lista de designs de roteamento da WAN Virtual.",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
"id": "D10.02",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Use um hub de WAN Virtual por região do Azure para conectar várias zonas de aterrissagem entre regiões do Azure por meio de uma WAN Virtual do Azure global comum.",
+ "text": "Use um hub de WAN Virtual por região do Azure para conectar várias zonas de destino entre regiões do Azure por meio de uma WAN Virtual do Azure global comum.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "id": "D10.03",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "Baixo",
- "subcategory": "Virtual WAN",
- "text": "Siga o princípio 'o tráfego no Azure permanece no Azure' para que a comunicação entre recursos no Azure ocorra por meio da rede de backbone da Microsoft",
- "waf": "Desempenho"
- },
- {
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "id": "D10.04",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "id": "D10.03",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Para proteção e filtragem de tráfego de Internet de saída, implante o Firewall do Azure em hubs seguros",
+ "text": "Para proteção e filtragem de tráfego de saída da Internet, implante o Firewall do Azure em hubs seguros.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "id": "D10.05",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "id": "D10.04",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Verifique se a arquitetura de rede está dentro dos limites da WAN Virtual do Azure.",
+ "text": "Verifique se a arquitetura de rede da WAN virtual está alinhada a um cenário de arquitetura identificado.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "id": "D10.06",
+ "id": "D10.05",
"link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
"text": "Use o Azure Monitor Insights para WAN Virtual para monitorar a topologia de ponta a ponta da WAN Virtual, o status e as principais métricas.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "id": "D10.07",
+ "id": "D10.06",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Certifique-se de que suas implantações de IaC não desabilitem o tráfego de ramificação para filial na WAN Virtual, a menos que esses fluxos devam ser explicitamente bloqueados.",
+ "text": "Não desabilite o tráfego branch a branch na WAN Virtual, a menos que esses fluxos devam ser bloqueados explicitamente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "id": "D10.08",
+ "id": "D10.07",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Use o AS-Path como preferência de roteamento de hub, já que ele é mais flexível do que o ExpressRoute ou o VPN.",
+ "text": "Use AS-Path como preferência de roteamento de hub, pois é mais flexível que ExpressRoute ou VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "id": "D10.09",
+ "id": "D10.08",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "Média",
"subcategory": "Virtual WAN",
- "text": "Certifique-se de que suas implantações IaC estejam configurando a propagação baseada em rótulo na WAN Virtual, caso contrário, a conectividade entre hubs virtuais será prejudicada.",
+ "text": "Configure a propagação baseada em rótulos na WAN Virtual, caso contrário, a conectividade entre hubs virtuais será prejudicada.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
- "id": "D10.10",
+ "id": "D10.09",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "Alto",
"subcategory": "Virtual WAN",
- "text": "Atribua espaço IP suficiente a hubs virtuais, idealmente um prefixo /23.",
+ "text": "Atribua pelo menos um prefixo /23 a hubs virtuais para garantir que haja espaço IP suficiente disponível.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
"category": "Governança",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"id": "E01.01",
@@ -1803,7 +1915,8 @@
"service": "Policy",
"severity": "Alto",
"subcategory": "Governança",
- "text": "Aproveite a Política do Azure estrategicamente, defina controles para seu ambiente, usando Iniciativas de Política para agrupar políticas relacionadas.",
+ "text": "Aproveite o Azure Policy estrategicamente, defina controles para seu ambiente, usando Iniciativas de Política para agrupar políticas relacionadas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
@@ -1814,7 +1927,8 @@
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Mapeie os requisitos normativos e de conformidade para definições de Política do Azure e atribuições de função do Azure.",
+ "text": "Mapeie os requisitos regulatórios e de conformidade para definições do Azure Policy e atribuições de função do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "Segurança"
},
{
@@ -1825,7 +1939,8 @@
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Estabelecer definições de Política do Azure no grupo de gerenciamento raiz intermediário para que possam ser atribuídas em escopos herdados",
+ "text": "Estabeleça definições do Azure Policy no grupo de gerenciamento raiz intermediário para que elas possam ser atribuídas em escopos herdados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
@@ -1834,9 +1949,10 @@
"id": "E01.05",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Governança",
- "text": "Gerencie atribuições de política no nível mais alto apropriado, com exclusões nos níveis inferiores, se necessário.",
+ "text": "Gerencie atribuições de política no nível apropriado mais alto com exclusões nos níveis inferiores, se necessário.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
@@ -1847,7 +1963,8 @@
"service": "Policy",
"severity": "Baixo",
"subcategory": "Governança",
- "text": "Usar a Política do Azure para controlar quais serviços os usuários podem provisionar no nível do grupo de assinatura/gerenciamento",
+ "text": "Use o Azure Policy para controlar quais serviços os usuários podem provisionar no nível da assinatura/grupo de gerenciamento.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
@@ -1856,21 +1973,23 @@
"id": "E01.07",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Governança",
"text": "Use políticas internas sempre que possível para minimizar a sobrecarga operacional.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
"category": "Governança",
- "description": "A atribuição da função Colaborador de Política de Recursos a escopos específicos permite delegar o gerenciamento de políticas a equipes relevantes. Por exemplo, uma equipe central de TI pode supervisionar políticas de nível de grupo de gerenciamento, enquanto as equipes de aplicativos lidam com políticas para suas assinaturas, permitindo a governança distribuída com aderência aos padrões organizacionais.",
+ "description": "Atribuir a função Colaborador de Política de Recursos a escopos específicos permite delegar o gerenciamento de políticas a equipes relevantes. Por exemplo, uma equipe central de TI pode supervisionar as políticas no nível do grupo de gerenciamento, enquanto as equipes de aplicativos lidam com as políticas de suas assinaturas, permitindo a governança distribuída com adesão aos padrões organizacionais.",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"id": "E01.08",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Atribua a função interna de Colaborador de Política de Recursos em um escopo específico para habilitar a governança em nível de aplicativo.",
+ "text": "Atribua a função interna de Colaborador de Política de Recursos em um escopo específico para habilitar a governança no nível do aplicativo.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
@@ -1881,7 +2000,8 @@
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Limite o número de atribuições da Política do Azure feitas no escopo do grupo de gerenciamento raiz para evitar o gerenciamento por meio de exclusões em escopos herdados.",
+ "text": "Limite o número de atribuições do Azure Policy feitas no escopo do grupo de gerenciamento raiz para evitar o gerenciamento por meio de exclusões em escopos herdados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
@@ -1892,7 +2012,7 @@
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Se existirem requisitos de soberania de dados, as Políticas do Azure podem ser implantadas para impô-los",
+ "text": "Se houver requisitos de soberania de dados, as Políticas do Azure deverão ser implantadas para aplicá-los.",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "Segurança"
},
@@ -1904,7 +2024,7 @@
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Para a Zona de Desembarque Soberano, a iniciativa política de base da política de soberania é implantada e atribuída no nível correto de MG.",
+ "text": "Para a Zona de Destino Soberana, implante a linha de base da política de soberania e atribua no nível correto do grupo de gerenciamento.",
"waf": "Segurança"
},
{
@@ -1915,17 +2035,18 @@
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Para a Zona de Desembarque Soberano, os objetivos de Controle Soberano para o mapeamento de políticas são documentados.",
+ "text": "Para Zona de Aterrissagem Soberana, documente os objetivos de Controle Soberano para mapeamento de políticas.",
"waf": "Segurança"
},
{
"category": "Governança",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
"id": "E01.13",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "Média",
"subcategory": "Governança",
- "text": "Para a Zona de Desembarque Soberano, está em vigor o processo para CRUD de \"Objetivos de Controle Soberano para mapeamento de políticas\".",
+ "text": "Para a Zona de Aterrissagem Soberana, certifique-se de que o processo esteja em vigor para o gerenciamento de 'Objetivos de Controle Soberano para mapeamento de políticas'.",
"waf": "Segurança"
},
{
@@ -1934,86 +2055,99 @@
"id": "E02.02",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
"severity": "Média",
- "subcategory": "Otimize seu investimento em nuvem",
- "text": "Configure alertas de orçamento 'Real' e 'Previsto'.",
+ "subcategory": "Otimize seu investimento na nuvem",
+ "text": "Configure alertas de orçamento 'real' e 'previsto'.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "Custar"
},
{
"category": "Gestão",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
"id": "F01.01",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Use um único espaço de trabalho de logs de monitor para gerenciar plataformas centralmente, exceto onde o controle de acesso baseado em função do Azure (RBAC do Azure), os requisitos de soberania de dados ou as políticas de retenção de dados exigem espaços de trabalho separados.",
+ "text": "Use um workspace de logs de monitor único para gerenciar plataformas centralmente, exceto quando o RBAC (controle de acesso baseado em função) do Azure, os requisitos de soberania de dados ou as políticas de retenção de dados exigirem workspaces separados.",
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "Operações"
},
+ {
+ "category": "Gestão",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "id": "F01.02",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "Média",
+ "subcategory": "Monitorização",
+ "text": "Decida se deseja usar um único workspace de Logs do Azure Monitor para todas as regiões ou criar vários workspaces para abranger várias regiões geográficas. Cada abordagem tem vantagens e desvantagens, incluindo possíveis cobranças de rede entre regiões",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Fiabilidade"
+ },
{
"category": "Gestão",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"id": "F01.03",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "Média",
+ "severity": "Alto",
"subcategory": "Monitorização",
- "text": "Exporte logs para o Armazenamento do Azure se seus requisitos de retenção de log excederem doze anos. Use o armazenamento imutável com uma política de gravação única e leitura de muitos para tornar os dados não apagáveis e não modificáveis por um intervalo especificado pelo usuário.",
+ "text": "Exporte logs para o Armazenamento do Azure se os requisitos de retenção de log excederem doze anos. Use o armazenamento imutável com uma política de gravação única e leitura múltipla para tornar os dados não apagáveis e não modificáveis por um intervalo especificado pelo usuário.",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "id": "F01.05",
+ "id": "F01.04",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"service": "VM",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Monitore o desvio de configuração da máquina virtual (VM) no nível do sistema operacional usando a Política do Azure. Habilitar os recursos de auditoria de Configuração de Máquina do Azure Automanage por meio da política ajuda as cargas de trabalho da equipe de aplicativos a consumir imediatamente os recursos de recursos com pouco esforço.",
+ "text": "Monitore o descompasso de configuração da VM (máquina virtual) no nível do sistema operacional usando o Azure Policy. Habilitar os recursos de auditoria da Configuração de Computador do Gerenciamento Automatizado do Azure por meio da política ajuda as cargas de trabalho da equipe de aplicativos a consumir imediatamente os recursos de recursos com pouco esforço.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "id": "F01.06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "id": "F01.05",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "Média",
"subcategory": "Conformidade operacional",
- "text": "Use o Azure Update Manager como um mecanismo de aplicação de patches para VMs do Windows e Linux no Azure.",
+ "text": "Use o Azure Update Manager como um mecanismo de aplicação de patch para VMs Windows e Linux no Azure.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "id": "F01.07",
+ "id": "F01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "Média",
"subcategory": "Conformidade operacional",
- "text": "Use o Azure Update Manager como um mecanismo de aplicação de patches para VMs Windows e Linux fora do Azure usando o Azure Arc.",
+ "text": "Use o Gerenciador de Atualizações do Azure como um mecanismo de aplicação de patch para VMs do Windows e do Linux fora do Azure usando o Azure Arc.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "id": "F01.08",
+ "id": "F01.07",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Use o Inspetor de Rede para monitorar proativamente os fluxos de tráfego",
+ "text": "Use o Observador de Rede para monitorar proativamente os fluxos de tráfego.",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "id": "F01.09",
+ "id": "F01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"severity": "Média",
"subcategory": "Monitorização",
@@ -2024,115 +2158,148 @@
{
"category": "Gestão",
"guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "id": "F01.10",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "id": "F01.09",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
"severity": "Baixo",
"subcategory": "Monitorização",
- "text": "Use políticas de negação para complementar as atribuições de função do Azure. A combinação de políticas de negação e atribuições de função do Azure garante que os guardrails apropriados estejam em vigor para impor quem pode implantar e configurar recursos e quais recursos eles podem implantar e configurar.",
+ "text": "Use políticas de negação para complementar as atribuições de função do Azure. A combinação de políticas de negação e atribuições de função do Azure garante que as proteções apropriadas estejam em vigor para impor quem pode implantar e configurar recursos e quais recursos eles podem implantar e configurar.",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "id": "F01.11",
+ "id": "F01.10",
"link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Inclua eventos de integridade de serviços e recursos como parte da solução geral de monitoramento de plataforma. Controlar a integridade do serviço e do recurso da perspectiva da plataforma é um componente importante do gerenciamento de recursos no Azure.",
+ "text": "Inclua eventos de integridade de serviço e recurso como parte da solução geral de monitoramento da plataforma. Acompanhar a integridade do serviço e do recurso da perspectiva da plataforma é um componente importante do gerenciamento de recursos no Azure.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "id": "F01.12",
+ "id": "F01.11",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Inclua alertas e grupos de ação como parte da plataforma de Integridade de Serviço do Azure para garantir que alertas ou problemas possam ser acionados",
+ "text": "Inclua alertas e grupos de ações como parte da plataforma de Integridade do Serviço do Azure para garantir que alertas ou problemas possam ser acionados.",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "id": "F01.13",
+ "id": "F01.12",
"link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Não envie entradas de log brutas de volta para sistemas de monitoramento locais. Em vez disso, adote um princípio de que os dados nascidos no Azure permanecem no Azure. Se a integração SIEM local for necessária, envie alertas críticos em vez de logs.",
+ "text": "Não envie entradas de log brutas de volta para sistemas de monitoramento locais. Em vez disso, adote um princípio de que os dados nascidos no Azure permanecem no Azure. Se a integração do SIEM local for necessária, envie alertas críticos em vez de logs.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "id": "F01.15",
+ "id": "F01.13",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Use os Logs do Azure Monitor para insights e relatórios.",
+ "text": "Use os Logs do Azure Monitor para obter insights e relatórios.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "id": "F01.16",
+ "id": "F01.14",
"link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Quando necessário, use contas de armazenamento compartilhado na zona de aterrissagem para armazenamento de log de extensão de diagnóstico do Azure.",
+ "text": "Quando necessário, use contas de armazenamento compartilhado na zona de destino para o armazenamento de log da extensão de diagnóstico do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "id": "F01.17",
+ "id": "F01.15",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
"severity": "Média",
"subcategory": "Monitorização",
"text": "Use alertas do Azure Monitor para a geração de alertas operacionais.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "859c3900-4514-41eb-b010-475d695abd74",
- "id": "F01.18",
+ "id": "F01.16",
"link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Garantir que os requisitos de monitoramento tenham sido avaliados e que as configurações apropriadas de coleta de dados e alertas sejam aplicadas",
+ "text": "Certifique-se de que os requisitos de monitoramento tenham sido avaliados e que as configurações apropriadas de coleta de dados e alertas sejam aplicadas.",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "id": "F01.19",
+ "id": "F01.17",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Ao usar o Controle de Alterações e Inventário por meio de Contas de Automação do Azure, verifique se você selecionou regiões com suporte para vincular seu espaço de trabalho do Log Analytics e contas de automação.",
+ "text": "Ao usar o Acompanhamento de Alterações e Inventário por meio de Contas de Automação do Azure, verifique se você selecionou regiões com suporte para vincular seu workspace do Log Analytics e contas de automação.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "Operações"
},
{
"category": "Gestão",
"guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "id": "F01.19",
+ "id": "F01.18",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Estabeleça monitoramento para componentes de plataforma de sua zona de aterrissagem, o AMBA é uma solução de estrutura que está disponível e fornece uma maneira fácil de dimensionar alertas usando a Política do Azure",
+ "text": "Implantar o AMBA para estabelecer o monitoramento dos componentes da plataforma da sua zona de destino – o AMBA é uma solução de estrutura disponível e fornece uma maneira fácil de dimensionar alertas usando o Azure Policy.",
"training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
"waf": "Operações"
},
+ {
+ "category": "Gestão",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "id": "F01.19",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
+ "severity": "Média",
+ "subcategory": "Monitorização",
+ "text": "Use o AMA (Agente de Monitoramento do Azure). O agente do Log Analytics foi preterido desde 31 de agosto de 2024",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation",
+ "waf": "Operações"
+ },
+ {
+ "category": "Gestão",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "id": "F01.20",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
+ "severity": "Alto",
+ "subcategory": "Proteção de dados",
+ "text": "Certifique-se de que as contas de armazenamento tenham redundância de zona ou região, a redundância garante que as contas de armazenamento atendam às metas de disponibilidade e durabilidade em meio a falhas, ponderando custos mais baixos em relação a maior disponibilidade. O armazenamento com redundância local oferece a menor durabilidade com o menor custo.",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "waf": "Fiabilidade"
+ },
{
"category": "Gestão",
"guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
"id": "F02.01",
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"severity": "Média",
- "subcategory": "Proteção de Dados",
- "text": "Considere a replicação entre regiões no Azure para BCDR com regiões emparelhadas",
+ "subcategory": "Proteção de dados",
+ "text": "Habilite a replicação entre regiões no Azure para BCDR com regiões emparelhadas.",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/",
"waf": "Fiabilidade"
},
{
@@ -2141,9 +2308,10 @@
"id": "F02.02",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "Média",
- "subcategory": "Proteção de Dados",
- "text": "Ao usar o Backup do Azure, considere os diferentes tipos de backup (GRS, ZRS E LRS), pois a configuração padrão é GRS",
+ "severity": "Baixo",
+ "subcategory": "Proteção de dados",
+ "text": "Ao usar o Backup do Azure, use os tipos de backup corretos (GRS, ZRS E LRS) para o backup, pois a configuração padrão é GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Fiabilidade"
},
{
@@ -2154,19 +2322,20 @@
"service": "VM",
"severity": "Média",
"subcategory": "Conformidade operacional",
- "text": "Use as políticas do Azure para implantar automaticamente configurações de software por meio de extensões de VM e impor uma configuração de VM de linha de base compatível.",
+ "text": "Use as políticas de convidado do Azure para implantar automaticamente as configurações de software por meio de extensões de VM e impor uma configuração de VM de linha de base compatível.",
"waf": "Segurança"
},
{
"category": "Gestão",
- "description": "Os recursos de configuração de convidado da Política do Azure podem auditar e corrigir as configurações do computador (por exemplo, sistema operacional, aplicativo, ambiente) para garantir que os recursos estejam alinhados com as configurações esperadas, e o Gerenciamento de Atualizações pode impor o gerenciamento de patches para VMs.",
+ "description": "Use os recursos de configuração de convidado do Azure Policy para auditar e corrigir as configurações do computador (por exemplo, sistema operacional, aplicativo, ambiente) para garantir que os recursos estejam alinhados com as configurações esperadas e que o Gerenciamento de Atualizações possa impor o gerenciamento de patches para VMs.",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"id": "F03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
"service": "VM",
"severity": "Média",
"subcategory": "Conformidade operacional",
- "text": "Monitore o desvio de configuração de segurança da VM por meio da Política do Azure.",
+ "text": "Monitore o descompasso de configuração de segurança da VM por meio do Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Segurança"
},
{
@@ -2176,8 +2345,9 @@
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
"service": "VM",
"severity": "Média",
- "subcategory": "Proteja e recupere",
- "text": "Use o Azure Site Recovery para cenários de recuperação de desastres de Máquinas Virtuais do Azure para Azure. Isso permite que você replique cargas de trabalho entre regiões.",
+ "subcategory": "Proteger e recuperar",
+ "text": "Use o Azure Site Recovery para cenários de recuperação de desastre de Máquinas Virtuais do Azure para o Azure. Isso permite replicar cargas de trabalho entre regiões.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "Operações"
},
{
@@ -2186,8 +2356,9 @@
"id": "F04.02",
"link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
"severity": "Média",
- "subcategory": "Proteja e recupere",
- "text": "Certifique-se de usar e testar os recursos nativos de recuperação de desastres do serviço PaaS.",
+ "subcategory": "Proteger e recuperar",
+ "text": "Use recursos nativos de recuperação de desastre do serviço PaaS. Execute testes de failover com esses recursos.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/",
"waf": "Operações"
},
{
@@ -2197,47 +2368,12 @@
"link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
"service": "Backup",
"severity": "Média",
- "subcategory": "Proteja e recupere",
- "text": "Use os recursos de backup nativos do Azure ou uma solução de backup de terceiros de terceiros compatível com o Azure.",
+ "subcategory": "Proteger e recuperar",
+ "text": "Use recursos de backup nativos do Azure ou uma solução de backup de terceiros compatível com o Azure.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Operações"
},
- {
- "ammp": true,
- "category": "Gestão",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "id": "F05.01",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "Alto",
- "subcategory": "Tolerância a falhas",
- "text": "Aproveite as zonas de disponibilidade para suas VMs em regiões onde elas são suportadas.",
- "waf": "Fiabilidade"
- },
- {
- "ammp": true,
- "category": "Gestão",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "id": "F05.02",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "Alto",
- "subcategory": "Tolerância a falhas",
- "text": "Evite executar uma carga de trabalho de produção em uma única VM.",
- "waf": "Fiabilidade"
- },
{
- "category": "Gestão",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "id": "F05.03",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "Média",
- "subcategory": "Tolerância a falhas",
- "text": "O Balanceador de Carga do Azure e o Gateway de Aplicativo distribuem o tráfego de rede de entrada em vários recursos.",
- "waf": "Fiabilidade"
- },
- {
- "ammp": true,
"category": "Gestão",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"id": "F06.01",
@@ -2245,7 +2381,8 @@
"service": "WAF",
"severity": "Alto",
"subcategory": "Entrega de aplicativos",
- "text": "Adicione configurações de diagnóstico para salvar logs WAF de serviços de entrega de aplicativos, como o Azure Front Door e o Azure Application Gateway. Analise regularmente os logs para verificar se há ataques e detecções de falsos positivos.",
+ "text": "Adicione configurações de diagnóstico para salvar logs do WAF de serviços de entrega de aplicativos, como o Azure Front Door e o Gateway de Aplicativo do Azure. Revise regularmente os logs para verificar se há ataques e detecções de falsos positivos.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "Operações"
},
{
@@ -2256,7 +2393,8 @@
"service": "WAF",
"severity": "Média",
"subcategory": "Entrega de aplicativos",
- "text": "Envie logs do WAF de seus serviços de entrega de aplicativos, como o Azure Front Door e o Azure Application Gateway, para o Microsoft Sentinel. Detecte ataques e integre a telemetria WAF ao seu ambiente geral do Azure.",
+ "text": "Envie logs do WAF de seus serviços de entrega de aplicativos, como o Azure Front Door e o Gateway de Aplicativo do Azure, para o Microsoft Sentinel. Detecte ataques e integre a telemetria do WAF ao seu ambiente geral do Azure.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "Operações"
},
{
@@ -2267,6 +2405,7 @@
"severity": "Média",
"subcategory": "Controle de acesso",
"text": "Determine o plano de resposta a incidentes para os serviços do Azure antes de permitir que ele entre em produção.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/",
"waf": "Segurança"
},
{
@@ -2276,11 +2415,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
"severity": "Média",
"subcategory": "Controle de acesso",
- "text": "Implemente uma abordagem de confiança zero para acesso à plataforma Azure, quando apropriado.",
+ "text": "Aplique uma abordagem de confiança zero para acesso à plataforma do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"id": "G02.01",
@@ -2288,7 +2427,8 @@
"service": "Key Vault",
"severity": "Alto",
"subcategory": "Criptografia e chaves",
- "text": "Usar o Cofre de Chaves do Azure para armazenar seus segredos e credenciais",
+ "text": "Use o Azure Key Vault para armazenar seus segredos e credenciais.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2300,7 +2440,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Use diferentes Cofres de Chaves do Azure para diferentes aplicativos e regiões para evitar limites de escala de transação e restringir o acesso a segredos.",
+ "text": "Use diferentes Azure Key Vaults para diferentes aplicativos e regiões para evitar limites de escala de transação e restringir o acesso a segredos.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2311,7 +2452,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Provisione o Cofre de Chaves do Azure com as políticas de exclusão e limpeza suaves habilitadas para permitir a proteção de retenção para objetos excluídos.",
+ "text": "Provisione o Azure Key Vault com as políticas de exclusão reversível e limpeza habilitadas para permitir a proteção de retenção para objetos excluídos.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2322,7 +2464,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Siga um modelo de privilégios mínimos, limitando a autorização para excluir permanentemente chaves, segredos e certificados para funções personalizadas especializadas do Microsoft Entra ID.",
+ "text": "Siga um modelo de privilégios mínimos limitando a autorização para excluir permanentemente chaves, segredos e certificados a funções personalizadas especializadas de ID do Microsoft Entra.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2334,6 +2477,7 @@
"severity": "Média",
"subcategory": "Criptografia e chaves",
"text": "Automatize o processo de gerenciamento e renovação de certificados com autoridades de certificação públicas para facilitar a administração.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2345,6 +2489,7 @@
"severity": "Média",
"subcategory": "Criptografia e chaves",
"text": "Estabeleça um processo automatizado para rotação de chaves e certificados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2355,7 +2500,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Habilite o firewall e o ponto de extremidade do serviço de rede virtual ou o ponto de extremidade privado no cofre para controlar o acesso ao cofre de chaves.",
+ "text": "Habilite o firewall e o ponto de extremidade de serviço de rede virtual ou o ponto de extremidade privado no cofre para controlar o acesso ao cofre de chaves.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "Segurança"
},
{
@@ -2366,7 +2512,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Use o espaço de trabalho central do Azure Monitor Log Analytics para auditar o uso de chaves, certificados e segredos em cada instância do Cofre de Chaves.",
+ "text": "Use o workspace do Log Analytics do Azure Monitor central da plataforma para auditar o uso de chave, certificado e segredo em cada instância do Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Segurança"
},
{
@@ -2377,7 +2524,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Delegue instanciação do Cofre da Chave e acesso privilegiado e use a Política do Azure para impor uma configuração consistente e compatível.",
+ "text": "Delegue a instanciação e o acesso privilegiado do Key Vault e use o Azure Policy para impor uma configuração consistente e compatível.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "Segurança"
},
{
@@ -2387,7 +2535,8 @@
"link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "O padrão é chaves gerenciadas pela Microsoft para a funcionalidade de criptografia principal e use chaves gerenciadas pelo cliente quando necessário.",
+ "text": "Padrão para chaves gerenciadas pela Microsoft para funcionalidade de criptografia principal e use chaves gerenciadas pelo cliente quando necessário.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2398,7 +2547,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Use um Cofre de Chaves do Azure por aplicativo, por ambiente, por região.",
+ "text": "Use um Azure Key Vault por aplicativo por ambiente por região.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2409,7 +2559,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Se você quiser trazer suas próprias chaves, isso pode não ser suportado em todos os serviços considerados. Implemente mitigações relevantes para que as inconsistências não prejudiquem os resultados desejados. Escolha pares de regiões apropriados e regiões de recuperação de desastres que minimizem a latência.",
+ "text": "Se você quiser trazer suas próprias chaves, isso pode não ser compatível com todos os serviços considerados. Implemente mitigação relevante para que as inconsistências não prejudiquem os resultados desejados. Escolha pares de regiões apropriados e regiões de recuperação de desastre que minimizem a latência.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2420,7 +2571,8 @@
"service": "Key Vault",
"severity": "Média",
"subcategory": "Criptografia e chaves",
- "text": "Para Sovereign Landing Zone, use o HSM gerenciado pelo Cofre de Chaves do Azure para armazenar seus segredos e credenciais.",
+ "text": "Para a Zona de Destino Soberana, use o HSM gerenciado do Azure Key Vault para armazenar seus segredos e credenciais.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
@@ -2431,7 +2583,8 @@
"service": "Entra",
"severity": "Média",
"subcategory": "Operações",
- "text": "Use os recursos de relatório do Microsoft Entra ID para gerar relatórios de auditoria de controle de acesso.",
+ "text": "Use os recursos de relatório de ID do Microsoft Entra para gerar relatórios de auditoria de controle de acesso.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "Segurança"
},
{
@@ -2441,11 +2594,11 @@
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
"severity": "Média",
"subcategory": "Operações",
- "text": "Exporte logs de atividade do Azure para logs do Azure Monitor para retenção de dados de longo prazo. Exporte para o Armazenamento do Azure para armazenamento de longo prazo além de dois anos, se necessário.",
+ "text": "Exporte os logs de atividades do Azure para os Logs do Azure Monitor para retenção de dados de longo prazo. Exporte para o Armazenamento do Azure para armazenamento de longo prazo além de dois anos, se necessário.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"id": "G03.03",
@@ -2453,11 +2606,11 @@
"service": "Defender",
"severity": "Alto",
"subcategory": "Operações",
- "text": "Habilite o Defender Cloud Security Posture Management para todas as assinaturas.",
+ "text": "Habilite o Gerenciamento de Postura de Segurança de Nuvem do Defender para todas as assinaturas.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"id": "G03.04",
@@ -2465,11 +2618,11 @@
"service": "Defender",
"severity": "Alto",
"subcategory": "Operações",
- "text": "Habilite um Plano de Proteção de Carga de Trabalho do Defender Cloud para Servidores em todas as assinaturas.",
+ "text": "Habilite um Plano de Proteção de Carga de Trabalho de Nuvem do Defender para Servidores em todas as assinaturas.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"id": "G03.05",
@@ -2477,11 +2630,11 @@
"service": "Defender",
"severity": "Alto",
"subcategory": "Operações",
- "text": "Habilite os Planos de Proteção de Carga de Trabalho do Defender Cloud para Recursos do Azure em todas as assinaturas.",
+ "text": "Habilite os Planos de Proteção de Carga de Trabalho de Nuvem do Defender para Recursos do Azure em todas as assinaturas.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"id": "G03.06",
@@ -2490,6 +2643,7 @@
"severity": "Alto",
"subcategory": "Operações",
"text": "Habilite o Endpoint Protection em servidores IaaS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "Segurança"
},
{
@@ -2500,7 +2654,8 @@
"service": "VM",
"severity": "Média",
"subcategory": "Operações",
- "text": "Monitore o desvio de patches do sistema operacional base por meio do Azure Monitor Logs e do Defender for Cloud.",
+ "text": "Monitore o descompasso de aplicação de patch do sistema operacional base por meio dos Logs do Azure Monitor e do Defender para Nuvem.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "Segurança"
},
{
@@ -2511,43 +2666,56 @@
"service": "Monitor",
"severity": "Média",
"subcategory": "Operações",
- "text": "Conecte configurações de recursos padrão a um espaço de trabalho centralizado do Azure Monitor Log Analytics.",
+ "text": "Conecte as configurações de recursos padrão a um workspace centralizado do Log Analytics do Azure Monitor.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Segurança"
},
{
"category": "Segurança",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
"id": "G03.09",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "Alto",
+ "subcategory": "Operações",
+ "text": "Detecção centralizada de ameaças com logs correlacionados - consolide os dados de segurança em um local central onde possam ser correlacionados em vários serviços via SIEM (gerenciamento de eventos e informações de segurança)",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "id": "G03.10",
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "Média",
"subcategory": "Operações",
- "text": "Para a Zona de Pouso Soberano, os logs de transparência são habilitados no locatário do ID do Entra.",
+ "text": "Para Zona de Destino Soberana, habilite os logs de transparência no locatário da ID do Entra.",
"waf": "Segurança"
},
{
"category": "Segurança",
"guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "id": "G03.10",
+ "id": "G03.11",
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "Média",
"subcategory": "Operações",
- "text": "Para Sovereign Landing Zone, o Customer Lockbox está habilitado no locatário do Entra ID.",
+ "text": "Para Zona de Destino Soberana, habilite o Sistema de Proteção de Dados do cliente no locatário da ID do Entra.",
"waf": "Segurança"
},
{
"category": "Segurança",
"guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "id": "G03.11",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security",
+ "id": "G03.12",
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
"severity": "Baixo",
"subcategory": "Operações",
- "text": "Usar uma solução baseada em Grade de Eventos do Azure para alertas em tempo real orientados a log",
+ "text": "Use uma solução baseada na Grade de Eventos do Azure para alertas em tempo real orientados a log.",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"id": "G04.01",
@@ -2555,11 +2723,11 @@
"service": "Storage",
"severity": "Alto",
"subcategory": "Visão geral",
- "text": "A transferência segura para contas de armazenamento deve ser habilitada",
+ "text": "Habilite a transferência segura para contas de armazenamento.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"id": "G04.02",
@@ -2567,18 +2735,18 @@
"service": "Storage",
"severity": "Alto",
"subcategory": "Visão geral",
- "text": "Habilite a exclusão flexível do contêiner para que a conta de armazenamento recupere um contêiner excluído e seu conteúdo.",
+ "text": "Habilite a exclusão reversível do contêiner para a conta de armazenamento para recuperar um contêiner excluído e seu conteúdo.",
"waf": "Segurança"
},
{
- "ammp": true,
"category": "Segurança",
"guid": "6f704104-85c1-441f-96d3-c9819911645e",
"id": "G05.01",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning",
"severity": "Alto",
"subcategory": "Acesso privilegiado seguro",
- "text": "Separe contas de administrador privilegiadas para tarefas administrativas do Azure.",
+ "text": "Separe contas de administrador com privilégios para tarefas administrativas do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/",
"waf": "Segurança"
},
{
@@ -2587,8 +2755,8 @@
"id": "G06.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "Média",
- "subcategory": "Estrutura de habilitação de serviço",
- "text": "Planejar como os novos serviços do azure serão implementados",
+ "subcategory": "Estrutura de ativação de serviço",
+ "text": "Planeje como os novos serviços do Azure serão implementados.",
"waf": "Segurança"
},
{
@@ -2597,152 +2765,158 @@
"id": "G06.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "Média",
- "subcategory": "Estrutura de habilitação de serviço",
- "text": "Planejar como a solicitação de serviço será atendida para os serviços do Azure",
+ "subcategory": "Estrutura de ativação de serviço",
+ "text": "Planeje como a solicitação de serviço será atendida para os serviços do Azure.",
"waf": "Segurança"
},
{
- "ammp": true,
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
"id": "H01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
"severity": "Alto",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Verifique se você tem uma equipe de plataforma de DevOps multifuncional para criar, gerenciar e manter sua arquitetura de zona de aterrissagem do Azure.",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Verifique se você tem uma equipe multifuncional da plataforma DevOps para criar, gerenciar e manter sua arquitetura de Zona de Destino do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "634146bf-7085-4419-a7b5-f96d2726f6da",
"id": "H01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "Baixo",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Objetivo de definir funções para a equipe da Plataforma de Zona de Aterrissagem do Azure.",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Objetivo de definir funções para a equipe da Plataforma da Zona de Destino do Azure.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "a9e65070-c59e-4112-8bf6-c11364d4a2a5",
"id": "H01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "Baixo",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Objetivo de definir funções para que as equipes de carga de trabalho de aplicativos sejam autossuficientes e não exijam suporte da equipe da plataforma DevOps. Consiga isso por meio do uso da função RBAC personalizada.",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Procure definir funções para que as equipes de carga de trabalho do aplicativo sejam autossuficientes e não exijam suporte da equipe da plataforma DevOps. Consiga isso por meio do uso da função RBAC personalizada.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "165eb5e9-b434-448a-9e24-178632186212",
"id": "H01.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "severity": "Alto",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Use um pipeline de CI/CD para implantar artefatos IaC e garantir a qualidade de sua implantação e ambientes do Azure.",
+ "severity": "Média",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Use um pipeline de CI/CD para implantar artefatos de IaC e garantir a qualidade de sua implantação e ambientes do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "0cadb8c7-8fa5-4fbf-8f39-d1fadb3b0460",
"id": "H01.05",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"severity": "Média",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Inclua testes de unidade para IaC e código de aplicativo como parte do processo de compilação.",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Inclua testes de unidade para IaC e código do aplicativo como parte do processo de compilação.",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"id": "H01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"service": "Key Vault",
"severity": "Alto",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Use segredos do Cofre de Chaves para evitar a codificação de informações confidenciais, como credenciais (máquinas virtuais, senhas de usuário), certificados ou chaves.",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Use segredos do Key Vault para evitar codificar informações confidenciais, como credenciais (máquinas virtuais, senhas de usuário), certificados ou chaves.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "a52e0c98-76b9-4a09-a1c9-6b2babf22ac4",
"id": "H01.07",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
"severity": "Baixo",
- "subcategory": "Topologias de equipe de DevOps",
- "text": "Implementar automação para nova zona de aterrissagem para aplicativos e cargas de trabalho por meio de venda automática de assinatura",
+ "subcategory": "Topologias da equipe de DevOps",
+ "text": "Implemente a automação para a nova zona de destino para aplicativos e cargas de trabalho por meio da venda automática de assinaturas.",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
"id": "H02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "Alto",
- "subcategory": "Ciclo de vida do desenvolvimento",
- "text": "Garantir que um sistema de controle de versão seja usado para o código-fonte das aplicações e IaC desenvolvido. A Microsoft recomenda o Git.",
+ "subcategory": "Ciclo de vida de desenvolvimento",
+ "text": "Certifique-se de que um sistema de controle de versão seja usado para o código-fonte dos aplicativos e IaC desenvolvidos. A Microsoft recomenda o Git.",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "c7245dd4-af8a-403a-8bb7-890c1a7cfa9d",
"id": "H02.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "Baixo",
- "subcategory": "Ciclo de vida do desenvolvimento",
- "text": "Siga uma estratégia de ramificação para permitir que as equipes colaborem melhor e gerenciem com eficiência o controle de versão do IaC e do código do aplicativo. Revise opções como o Github Flow.",
+ "subcategory": "Ciclo de vida de desenvolvimento",
+ "text": "Siga uma estratégia de ramificação para permitir que as equipes colaborem melhor e gerenciem com eficiência o controle de versão da IaC e do código do aplicativo. Revise opções como o Github Flow.",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "12aeea20-9165-4b3e-bdf2-6795fcd3cdbe",
"id": "H02.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "Média",
- "subcategory": "Ciclo de vida do desenvolvimento",
- "text": "Adote uma estratégia de solicitação pull para ajudar a manter o controle das alterações de código mescladas em ramificações.",
+ "subcategory": "Ciclo de vida de desenvolvimento",
+ "text": "Adote uma estratégia de solicitação de pull para ajudar a manter o controle das alterações de código mescladas em branches.",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/",
"waf": "Operações"
},
{
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "2676ae46-65ca-444e-8695-fdddeace4cb1",
"id": "H02.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
"severity": "Média",
- "subcategory": "Ciclo de vida do desenvolvimento",
- "text": "Estabeleça um processo para usar código para implementar correções rápidas. Sempre registre correções rápidas na lista de pendências da sua equipe para que cada correção possa ser retrabalhada em um ponto posterior e você possa limitar a dívida técnica.",
+ "subcategory": "Ciclo de vida de desenvolvimento",
+ "text": "Estabeleça um processo para usar o código para implementar correções rápidas. Sempre registre correções rápidas na lista de pendências de sua equipe para que cada correção possa ser retrabalhada posteriormente e você possa limitar a dívida técnica.",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
"id": "H03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "Alto",
"subcategory": "Estratégia de Desenvolvimento",
- "text": "Aproveite a Infraestrutura Declarativa como Ferramentas de Código, como o Azure Bicep, Modelos ARM ou Terraform para criar e manter sua arquitetura de Zona de Aterrissagem do Azure. Tanto do ponto de vista da carga de trabalho da plataforma quanto do aplicativo.",
+ "text": "Aproveite as ferramentas de infraestrutura declarativa como código, como o Azure Bicep, os modelos do ARM ou o Terraform, para criar e manter sua arquitetura de zona de destino do Azure. Tanto do ponto de vista da carga de trabalho da plataforma quanto do aplicativo.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/",
"waf": "Operações"
},
{
- "ammp": true,
- "category": "Automação de Plataforma e DevOps",
+ "category": "Automação de plataforma e DevOps",
"guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
"id": "H04.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure",
"severity": "Alto",
"subcategory": "Segurança",
"text": "Integre a segurança ao processo já combinado de desenvolvimento e operações em DevOps para mitigar riscos no processo de inovação.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/",
"waf": "Operações"
}
],
"metadata": {
"name": "Azure Landing Zone Review",
"state": "GA",
- "timestamp": "June 17, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -2766,7 +2940,7 @@
"name": "Abrir"
},
{
- "description": "Essa verificação foi verificada e não há outros itens de ação associados a ela",
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
"name": "Cumprido"
},
{
@@ -2774,7 +2948,7 @@
"name": "Não é necessário"
},
{
- "description": "Não aplicável ao projeto atual",
+ "description": "Não aplicável para o projeto atual",
"name": "N/A"
}
],
diff --git a/checklists/alz_checklist.zh-Hant.json b/checklists/alz_checklist.zh-Hant.json
index 4213b7826..3a32f2e82 100644
--- a/checklists/alz_checklist.zh-Hant.json
+++ b/checklists/alz_checklist.zh-Hant.json
@@ -26,6 +26,18 @@
}
],
"items": [
+ {
+ "category": "網路拓撲和連接",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "id": "",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "中等",
+ "subcategory": "Hub and spoke",
+ "text": "在多個區域中部署 Azure 登陸區域連接資源,以便可以快速支援多區域應用程式登陸區域和災難恢復方案。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "可靠性"
+ },
{
"category": "Azure 計費和 Microsoft Entra ID 租戶",
"guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
@@ -34,7 +46,8 @@
"service": "Entra",
"severity": "中等",
"subcategory": "Microsoft Entra ID 租戶",
- "text": "使用一個 Entra 租戶來管理 Azure 資源,除非你對多租戶有明確的法規或業務要求。",
+ "text": "使用一個 Entra 租戶來管理 Azure 資源,除非對多租戶有明確的法規或業務要求。",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "操作"
},
{
@@ -45,7 +58,8 @@
"service": "Entra",
"severity": "低",
"subcategory": "Microsoft Entra ID 租戶",
- "text": "確保採用多租戶自動化方法來管理 Microsoft Entra ID 租戶",
+ "text": "使用多租戶自動化方法管理您的 Microsoft Entra ID 租戶。",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "操作"
},
{
@@ -54,9 +68,10 @@
"id": "A01.03",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "低",
+ "severity": "高",
"subcategory": "Microsoft Entra ID 租戶",
- "text": "利用 Azure Lighthouse 進行多租戶管理",
+ "text": "使用具有相同 ID 的 Azure Lighthouse 進行多租戶管理。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "操作"
},
{
@@ -65,9 +80,10 @@
"id": "A02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "中等",
+ "severity": "高",
"subcategory": "雲解決方案供應商",
- "text": "確保合作夥伴使用 Azure Lighthouse 管理租戶",
+ "text": "如果向合作夥伴授予管理租戶的許可權,請使用 Azure Lighthouse。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "成本"
},
{
@@ -77,7 +93,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
"severity": "低",
"subcategory": "雲解決方案供應商",
- "text": "與 CSP 合作夥伴討論支援請求和升級過程",
+ "text": "如果您有 CSP 合作夥伴,請定義並記錄您的支援請求和升級流程。",
"waf": "成本"
},
{
@@ -87,7 +103,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "中等",
"subcategory": "雲解決方案供應商",
- "text": "使用 Azure 成本管理設置成本報告和檢視",
+ "text": "使用 Azure 成本管理設置成本報告和檢視。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "成本"
},
{
@@ -97,7 +114,7 @@
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"severity": "中等",
"subcategory": "企業協定",
- "text": "將通知連絡人配置到組郵箱",
+ "text": "將通知連絡人配置到組郵箱。",
"waf": "成本"
},
{
@@ -108,16 +125,18 @@
"severity": "低",
"subcategory": "企業協定",
"text": "使用部門和帳戶將組織的結構映射到註冊層次結構,這有助於分離計費。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles",
"waf": "成本"
},
{
"category": "Azure 計費和 Microsoft Entra ID 租戶",
"guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
"id": "A03.04",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
"severity": "中等",
"subcategory": "企業協定",
- "text": "在EA註冊上啟用DA查看費用和AO查看費用,以允許具有正確許可權的使用者查看成本和計費數據。",
+ "text": "在您的EA註冊上啟用DA View Charges和 AO View Charges,以允許具有正確許可權的使用者查看成本和帳單數據。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal",
"waf": "安全"
},
{
@@ -127,7 +146,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"severity": "低",
"subcategory": "企業協定",
- "text": "利用企業開發/測試訂閱來降低非生產工作負載的成本",
+ "text": "使用 Enterprise Dev/Test 訂閱來降低非生產工作負載的成本。",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest",
"waf": "成本"
},
{
@@ -137,7 +157,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "低",
"subcategory": "Microsoft 客戶協定",
- "text": "配置協定計費帳戶通知聯繫人電子郵件",
+ "text": "配置協定計費帳戶通知聯繫人電子郵件。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account",
"waf": "成本"
},
{
@@ -147,7 +168,8 @@
"link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
"severity": "低",
"subcategory": "Microsoft 客戶協定",
- "text": "使用「計費配置檔」和「發票」部分構建協定計費,以實現有效的成本管理",
+ "text": "使用「計費配置檔」和「發票」部分來構建協定計費,以實現有效的成本管理。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles",
"waf": "成本"
},
{
@@ -157,7 +179,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "低",
"subcategory": "Microsoft 客戶協定",
- "text": "利用 Microsoft Azure 開發/測試計劃產品/服務來降低非生產工作負載的成本",
+ "text": "利用 Microsoft Azure 開發/測試計劃產品/服務來降低非生產工作負載的成本。",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio",
"waf": "成本"
},
{
@@ -167,11 +190,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"severity": "中等",
"subcategory": "Microsoft 客戶協定",
- "text": "定期審核協定計費 RBAC 角色分配,以查看誰有權訪問你的 MCA 計費帳戶",
+ "text": "定義並記錄定期審核協定計費 RBAC 角色分配的流程,以審查誰有權訪問您的 MCA 計費帳戶。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles",
"waf": "成本"
},
{
- "ammp": true,
"category": "身份和訪問管理",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"id": "B03.01",
@@ -179,12 +202,11 @@
"service": "Entra",
"severity": "高",
"subcategory": "身份",
- "text": "強制實施與雲運營模型一致的 RBAC 模型。跨管理組和訂閱的範圍和分配。",
+ "text": "實施與您的雲操作模型相一致的 RBAC 模型。跨管理組和訂閱確定範圍和分配。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
- "ammp": true,
"category": "身份和訪問管理",
"guid": "4348bf81-7573-4512-8f46-9061cc198fea",
"id": "B03.02",
@@ -196,15 +218,14 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "身份和訪問管理",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"id": "B03.02",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "高",
+ "severity": "中等",
"subcategory": "身份",
- "text": "僅對所有帳戶類型使用身份驗證類型「工作或學校帳戶」。避免使用 Microsoft 帳戶",
+ "text": "僅對所有帳戶類型使用身份驗證類型 Work or school account。避免使用 Microsoft 帳戶",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "安全"
},
@@ -216,7 +237,7 @@
"service": "Entra",
"severity": "中等",
"subcategory": "身份",
- "text": "僅使用組來分配許可權。如果組管理系統已到位,則將本地組添加到僅 Entra ID 組。",
+ "text": "僅使用組來分配許可權。如果組管理系統已就位,請將本地組添加到僅 Entra ID 組。",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "安全"
},
@@ -226,14 +247,13 @@
"id": "B03.04",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "低",
+ "severity": "高",
"subcategory": "身份",
- "text": "對任何有權訪問 Azure 環境的用戶強制實施 Microsoft Entra ID 條件訪問策略",
+ "text": "對 Azure 環境具有許可權的任何使用者強制實施 Microsoft Entra ID 條件訪問策略。",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "安全"
},
{
- "ammp": true,
"category": "身份和訪問管理",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"id": "B03.05",
@@ -241,8 +261,8 @@
"service": "Entra",
"severity": "高",
"subcategory": "身份",
- "text": "對有權訪問 Azure 環境的任何使用者強制實施多重身份驗證",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "對有權訪問 Azure 環境的任何使用者強制實施多重身份驗證。",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "安全"
},
{
@@ -250,9 +270,9 @@
"guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
"id": "B03.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "severity": "中等",
+ "severity": "高",
"subcategory": "身份",
- "text": "根據角色和安全要求,強制實施集中式和委派的職責,以管理登陸區域內部署的資源",
+ "text": "根據角色和安全要求,強制實施集中和委派的職責,以管理部署在 landing zone 內的資源。",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "安全"
},
@@ -264,7 +284,7 @@
"service": "Entra",
"severity": "中等",
"subcategory": "身份",
- "text": "強制實施 Microsoft Entra ID 特權身份管理 (PIM) 以建立零長期訪問許可權和最低許可權",
+ "text": "強制實施 Microsoft Entra ID Privileged Identity Management (PIM) 以建立零長期訪問和最低許可權。",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "安全"
},
@@ -273,89 +293,116 @@
"guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
"id": "B03.09",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
+ "severity": "高",
+ "subcategory": "身份",
+ "text": "部署 Active Directory 域控制器時,請使用具有可用區的位置,並在這些區域中部署至少兩個 VM。如果不可用,請在可用性集中部署。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "可靠性"
+ },
+ {
+ "category": "身份和訪問管理",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "id": "B03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity",
"severity": "中等",
"subcategory": "身份",
- "text": "在 Windows Server 上部署 Active Directory 時,請使用具有可用性區域的位置,並在這些區域中部署至少兩個 VM。如果不可用,請在可用性集中部署",
+ "text": "在多個區域中部署 Azure 登陸區域標識資源。 如果使用域控制器,請將每個區域與一個 Active Directory 網站相關聯,以便資源可以解析到其本地域控制器。",
"training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"waf": "可靠性"
},
{
"category": "身份和訪問管理",
"guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "id": "B03.10",
+ "id": "B03.11",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
"severity": "中等",
"subcategory": "身份",
- "text": "將 Azure 自定義 RBAC 角色用於以下關鍵角色,以跨 ALZ 提供精細訪問:Azure 平臺擁有者、網路管理、安全操作、訂閱擁有者、應用程式擁有者。使這些角色與企業中的團隊和職責保持一致。",
+ "text": "將 Azure 自定義 RBAC 角色用於以下關鍵角色,以提供跨 ALZ 的精細訪問:Azure 平臺擁有者、網路管理、安全操作、訂閱擁有者、應用程式擁有者。使這些角色與您企業內的團隊和職責保持一致。",
"training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "安全"
},
{
+ "category": "身份和訪問管理",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "id": "B03.10",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "id": "B03.12",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "中等",
- "subcategory": "身份和訪問管理",
- "text": "如果計劃從 Active Directory 域服務切換到 Entra 域服務,請評估所有工作負載的相容性",
+ "subcategory": "身份",
+ "text": "如果計劃從 Active Directory 域服務切換到 Entra 域服務,請評估所有工作負載的相容性。",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "安全"
},
+ {
+ "category": "身份和訪問管理",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "id": "B03.13",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "中等",
+ "subcategory": "身份",
+ "text": "使用 Microsoft Entra 域服務時,請使用副本集。副本集將提高託管域的復原能力,並允許您部署到其他區域。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "可靠性"
+ },
{
"category": "身份和訪問管理",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "id": "B03.11",
+ "id": "B03.14",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "中等",
"subcategory": "身份",
- "text": "將 Microsoft Entra ID 日誌與平臺中心 Azure Monitor 集成。Azure Monitor 允許圍繞 Azure 中的日誌和監視數據提供單一事實源,從而為組織提供雲原生選項,以滿足有關日誌收集和保留的要求。",
+ "text": "將 Microsoft Entra ID 紀錄與平臺中心的 Azure Monitor 集成。Azure Monitor 允許 Azure 中日誌和監視數據的單一事實來源,為組織提供雲原生選項來滿足日誌收集和保留的要求。",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "安全"
},
{
"ammp": true,
"category": "身份和訪問管理",
"guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "id": "B03.12",
+ "id": "B03.15",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "高",
"subcategory": "身份",
- "text": "實施緊急訪問或打破玻璃帳戶,以防止租戶範圍的帳戶鎖定",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "實施緊急訪問或不受限帳戶,以防止租戶範圍的帳戶鎖定。默認情況下,MFA 將於 2024 年 10 月為所有用戶開啟。我們建議更新這些帳戶以使用密鑰 (FIDO2) 或為 MFA 配置基於證書的身份驗證。",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "安全"
},
{
"category": "身份和訪問管理",
"guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "id": "B03.13",
+ "id": "B03.16",
"link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"severity": "中等",
"subcategory": "Microsoft Entra ID",
- "text": "部署 Microsoft Entra Connect 時,利用暫存伺服器實現高可用性/災難恢復",
+ "text": "部署 Microsoft Entra Connect 時,請使用暫存伺服器實現高可用性/災難恢復。",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies",
"waf": "可靠性"
},
{
"category": "身份和訪問管理",
"guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "id": "B03.14",
+ "id": "B03.17",
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "中等",
"subcategory": "身份",
- "text": "避免將本地同步帳戶用於 Microsoft Entra ID 角色分配。",
+ "text": "請勿將本地同步帳戶用於 Microsoft Entra ID 角色分配,除非你的方案特別需要它。",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "安全"
},
{
"category": "身份和訪問管理",
"guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "id": "B03.15",
+ "id": "B03.18",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "中等",
"subcategory": "身份",
- "text": "如果需要,請使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對內部應用程式(託管在雲中或本地)的安全和經過身份驗證的訪問。",
+ "text": "使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對應用程式的訪問許可權時,請將其作為平臺資源進行管理,因為每個租戶只能有一個實例。",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "安全"
},
@@ -363,10 +410,10 @@
"category": "身份和訪問管理",
"guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
"id": "B04.01",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
- "severity": "中等",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "severity": "高",
"subcategory": "登陸區域",
- "text": "通過使用虛擬網路配置標識網路分段,並對等回中心。在應用程式登陸區域(舊版)內提供身份驗證。",
+ "text": "通過使用虛擬網路配置身份網路分段,並對等互連回中心。在應用程式登錄區域(舊版)內提供身份驗證。",
"training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "安全"
},
@@ -377,7 +424,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"severity": "中等",
"subcategory": "登陸區域",
- "text": "如果可能,請使用 Azure RBAC 管理對資源的數據平面訪問。例如,跨 Key Vault、存儲帳戶和資料庫服務的數據操作。",
+ "text": "如果可能,請使用 Azure RBAC 管理數據平面對資源的訪問。例如,跨 Key Vault、存儲帳戶和資料庫服務的數據操作。",
"training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"waf": "安全"
},
@@ -389,10 +436,10 @@
"severity": "中等",
"subcategory": "登陸區域",
"text": "使用 Microsoft Entra ID PIM 訪問評審定期驗證資源權利。",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review",
"waf": "安全"
},
{
- "ammp": true,
"category": "資源組織",
"description": "請考慮使用 https://aka.ms/azurenamingtool 上提供的 Azure 命名工具",
"guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
@@ -400,7 +447,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
"severity": "高",
"subcategory": "命名和標記",
- "text": "建議遵循 Microsoft 最佳實踐命名標準",
+ "text": "對資源使用定義明確的命名方案,例如 Microsoft 最佳實踐命名標準。",
"waf": "安全"
},
{
@@ -411,7 +458,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"severity": "中等",
"subcategory": "訂閱",
- "text": "強制實施不超過四個級別的合理扁平化管理組層次結構。",
+ "text": "強制實施不超過四個級別的合理扁平管理組層次結構。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "安全"
},
@@ -422,7 +469,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "中等",
"subcategory": "訂閱",
- "text": "強制實施沙箱管理組,允許使用者立即試驗 Azure",
+ "text": "強制實施沙箱管理組,以允許使用者立即試用 Azure。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
@@ -433,7 +480,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "中等",
"subcategory": "訂閱",
- "text": "在根管理組下強制實施平臺管理組,以支援通用平臺策略和 Azure 角色分配",
+ "text": "在根管理組下強制實施平臺管理組,以支援通用平臺策略和 Azure 角色分配。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
@@ -444,7 +491,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"severity": "中等",
"subcategory": "訂閱",
- "text": "在連接管理組中強制實施專用連接訂閱,以託管 Azure 虛擬 WAN 中心、專用域名系統 (DNS)、ExpressRoute 線路和其他網路資源。",
+ "text": "在連接管理組中強制實施專用連接訂閱,以託管 Azure 虛擬 WAN 中心、專用非 AD 功能變數名稱系統 (DNS)、ExpressRoute 線路和其他網路資源。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
@@ -456,7 +503,8 @@
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
"severity": "中等",
"subcategory": "訂閱",
- "text": "強制在根管理組下放置任何訂閱",
+ "text": "強制不將任何訂閱放置在根管理組下。",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"waf": "安全"
},
{
@@ -466,7 +514,8 @@
"link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"severity": "中等",
"subcategory": "訂閱",
- "text": "通過在管理組層次結構設置中啟用 Azure RBAC 授權,強制只有特權使用者才能在租戶中操作管理組",
+ "text": "通過在管理組層次結構設置中啟用 Azure RBAC 授權,強制只有特權使用者才能操作租戶中的管理組。",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/",
"waf": "安全"
},
{
@@ -480,14 +529,14 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "資源組織",
"guid": "49b82111-2df2-47ee-912e-7f983f630472",
"id": "C02.08",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
"severity": "高",
"subcategory": "訂閱",
- "text": "強制執行流程,使資源擁有者瞭解其角色和職責、訪問審查、預算審查、策略合規性,並在必要時進行修正。",
+ "text": "實施一個流程,讓資源擁有者了解他們的角色和職責、訪問審查、預算審查、策略合規性,並在必要時進行補救。",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/",
"waf": "安全"
},
{
@@ -497,18 +546,18 @@
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"severity": "中等",
"subcategory": "訂閱",
- "text": "確保所有訂閱擁有者和IT核心團隊都瞭解訂閱配額及其對給定訂閱預配資源的影響。",
+ "text": "確保所有訂閱擁有者和IT核心團隊都瞭解訂閱配額及其對給定訂閱的預置資源的影響。",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/",
"waf": "安全"
},
{
- "ammp": true,
"category": "資源組織",
"guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
"id": "C02.10",
"link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
"severity": "高",
"subcategory": "訂閱",
- "text": "在適當的情況下使用預留實例來優化成本並確保目標區域的可用容量。通過 Azure Policy 強制使用已購買的預留實例 VM SKU。",
+ "text": "在適當的情況下使用預留實例來優化成本並確保目標區域中的可用容量。",
"training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
"waf": "安全"
},
@@ -517,22 +566,21 @@
"category": "資源組織",
"guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
"id": "C02.11",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/design-capacity",
- "severity": "高",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards",
+ "severity": "中等",
"subcategory": "訂閱",
- "text": "強制實施儀錶板、工作簿或手動過程以監控已用容量級別",
- "training": "https://learn.microsoft.com/learn/paths/monitor-usage-performance-availability-resources-azure-monitor/",
+ "text": "建立控制面板和/或可視化效果,以監控計算和存儲容量指標。(即 CPU、記憶體、磁碟空間)",
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
"waf": "安全"
},
{
- "ammp": true,
"category": "資源組織",
"guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
"id": "C02.12",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs",
"severity": "高",
"subcategory": "訂閱",
- "text": "強制執行成本管理流程",
+ "text": "作為雲採用的一部分,請使用“託管雲成本”流程實施詳細的成本管理計劃。",
"training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
"waf": "安全"
},
@@ -543,7 +591,7 @@
"link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"severity": "中等",
"subcategory": "訂閱",
- "text": "如果伺服器將用於標識服務(如域控制器),請在標識管理組中建立專用標識訂閱,以託管這些服務。請確保將資源設置為使用其區域中可用的域控制器。",
+ "text": "如果伺服器將用於 Identity 服務(如域控制器),請在 Identity Management 組中建立專用 Identity Subscription 來託管這些服務。確保將資源設置為使用其區域中可用的域控制器。",
"training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
"waf": "安全"
},
@@ -555,7 +603,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
"severity": "中等",
"subcategory": "訂閱",
- "text": "確保標籤用於計費和成本管理",
+ "text": "確保使用標籤進行計費和成本管理。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
@@ -566,7 +614,8 @@
"link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
"severity": "中等",
"subcategory": "訂閱",
- "text": "對於主權登陸區,在「登陸區」MG下有一個「機密公司」和「機密在線」管理組。",
+ "text": "對於 Sovereign 登陸區域,請在「登陸區域」MG 下直接擁有「機密公司」和「機密聯機」管理組。",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview",
"waf": "安全"
},
{
@@ -576,7 +625,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
"severity": "高",
"subcategory": "地區",
- "text": "為部署選擇正確的 Azure 區域。Azure 是一個全球規模的雲平臺,可通過許多區域和地理位置提供全球覆蓋。不同的 Azure 區域具有不同的特徵、訪問和可用性模型、成本、容量和提供的服務,因此必須考慮所有條件和要求",
+ "text": "為您的部署選擇合適的 Azure 區域。Azure 是一個全球規模的雲平臺,通過許多區域和地理位置提供全球覆蓋。不同的 Azure 區域具有不同的特徵、訪問和可用性模型、成本、容量和提供的服務,因此考慮所有標準和要求非常重要。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "可靠性"
},
@@ -587,7 +636,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
"severity": "中等",
"subcategory": "地區",
- "text": "請考慮多區域部署。根據客戶規模、位置和用戶狀態,在多個區域運營可能是交付服務和運行更靠近這些區域的應用程式的常見選擇。使用多區域部署對於提供異地災難恢復功能、消除單個區域容量的依賴關係以及降低臨時和當地語系化資源容量限制的風險也很重要",
+ "text": "在多區域部署中部署 Azure 登陸區域。根據客戶規模、位置和用戶數量,在多個區域運營可能是在更靠近他們的地方提供服務和運行應用程式的常見選擇。使用多區域部署對於提供異地災難恢復功能也很重要,可以消除對單個區域容量的依賴性,並降低臨時和局部資源容量限制的風險。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "可靠性"
},
@@ -598,7 +647,7 @@
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
"severity": "中等",
"subcategory": "地區",
- "text": "確保所需的服務和功能在所選部署區域中可用",
+ "text": "確保所需的服務和功能在所選部署區域中可用。",
"training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
"waf": "可靠性"
},
@@ -609,7 +658,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
"severity": "中等",
"subcategory": "應用交付",
- "text": "制定計劃,使用應用程式閘道和 Azure Front door 保護工作負載分支中的交付應用程式內容。 您可以使用應用程式交付清單來獲取建議。",
+ "text": "記錄使用應用程式閘道和 Azure Front Door 保護來自工作負載分支的交付應用程式內容的標準。 您可以使用 Application Delivery checklist 來獲取建議。",
"waf": "操作"
},
{
@@ -619,32 +668,21 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "中等",
- "subcategory": "輪輻式",
- "text": "利用基於傳統中心輻射型網路拓撲的網路設計,滿足需要最大靈活性的網路方案。",
+ "subcategory": "Hub and spoke",
+ "text": "對於需要最大靈活性的網路方案,請使用中心輻射型網路拓撲。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "category": "網路拓撲和連接",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "id": "D01.02",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "severity": "中等",
- "subcategory": "應用交付",
- "text": "在面向內部 (corp) 和面向外部的應用 (online) 的登陸區域內執行應用交付。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
- },
- {
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
"id": "D01.02",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "高",
- "subcategory": "輪輻式",
- "text": "確保共用網路服務(包括 ExpressRoute 閘道、VPN 閘道和 Azure 防火牆或合作夥伴 NVA)位於中心虛擬網路中。如有必要,還可以部署 DNS 伺服器。",
+ "subcategory": "Hub and spoke",
+ "text": "在中心虛擬網路中部署共用網路服務,包括 ExpressRoute 閘道、VPN 閘道和 Azure 防火牆或合作夥伴 NVA。如有必要,還要部署 DNS 服務。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "成本"
},
{
@@ -653,9 +691,9 @@
"id": "D01.03",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "中等",
+ "severity": "高",
"subcategory": "應用交付",
- "text": "對應用程式登陸區域中的所有公共IP位址使用 DDoS 網路或IP防護計畫。",
+ "text": "對應用程式登陸區域中的所有公共IP位址使用 DDoS 網路或IP保護計畫。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
@@ -666,8 +704,8 @@
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "中等",
- "subcategory": "輪輻式",
- "text": "部署合作夥伴網路技術或 NVA 時,請遵循合作夥伴供應商的指導",
+ "subcategory": "Hub and spoke",
+ "text": "部署合作夥伴網路技術或 NVA 時,請遵循合作夥伴供應商的指導。",
"waf": "可靠性"
},
{
@@ -677,8 +715,9 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
"service": "ExpressRoute",
"severity": "低",
- "subcategory": "輪輻式",
- "text": "如果需要在中心輻射型方案中的 ExpressRoute 和 VPN 閘道之間傳輸,請使用 Azure 路由伺服器。",
+ "subcategory": "Hub and spoke",
+ "text": "如果需要在中心輻射型方案中在 ExpressRoute 和 VPN 閘道之間傳輸,請使用 Azure 路由伺服器。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
@@ -689,8 +728,9 @@
"link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
"service": "ARS",
"severity": "低",
- "subcategory": "輪輻式",
- "text": "如果使用 Route Server,請對 Route Server 子網使用 /27 前置綴。",
+ "subcategory": "Hub and spoke",
+ "text": "如果使用路由伺服器,請對路由伺服器子網使用 /27 前置綴。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
@@ -700,8 +740,8 @@
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "中等",
- "subcategory": "輪輻式",
- "text": "對於跨 Azure 區域具有多個中心輻射型拓撲的網路體系結構,請使用中心 VNet 之間的全域虛擬網路對等互連將區域相互連接。",
+ "subcategory": "Hub and spoke",
+ "text": "對於跨 Azure 區域具有多個中心輻射型拓撲的網路體系結構,請在中心 VNet 之間使用全域虛擬網路對等互連將區域相互連接。",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "性能"
},
@@ -712,8 +752,8 @@
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
"service": "VNet",
"severity": "中等",
- "subcategory": "輪輻式",
- "text": "使用用於網路的 Azure Monitor 監視 Azure 上網路的端到端狀態。",
+ "subcategory": "Hub and spoke",
+ "text": "使用適用於網路的 Azure Monitor 監視 Azure 上網路的端到端狀態。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "操作"
},
@@ -725,8 +765,9 @@
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "中等",
- "subcategory": "輪輻式",
- "text": "將分支虛擬網路連接到中央中心虛擬網路時,請考慮 VNet 對等互連限制 (500),即可通過 ExpressRoute 播發的最大前綴數 (1000)",
+ "subcategory": "Hub and spoke",
+ "text": "如果一個區域中的分支網路超過 400 個,請部署一個額外的中心以繞過 VNet 對等互連限制 (500) 和可通過 ExpressRoute 播發的最大前綴數 (1000)。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "可靠性"
},
{
@@ -737,12 +778,12 @@
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "中等",
- "subcategory": "輪輻式",
- "text": "考慮每個路由表的路由限制 (400)。",
+ "subcategory": "Hub and spoke",
+ "text": "將每個路由表的路由數限制為 400。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
@@ -750,8 +791,33 @@
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
"service": "VNet",
"severity": "高",
- "subcategory": "輪輻式",
- "text": "配置 VNet 對等互連時,使用「允許流量流向遠端虛擬網路」設置",
+ "subcategory": "Hub and spoke",
+ "text": "配置 VNet 對等互連時,請使用「允許流量流向遠端虛擬網路」設置。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "id": "D01.11",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高",
+ "subcategory": "Hub and spoke",
+ "text": "將標準負載均衡器 SKU 與區域冗餘部署配合使用,選擇標準 SKU 負載均衡器可通過可用性區域和區域復原能力增強可靠性,確保部署能夠承受區域和區域故障。與 Basic 不同,它支援全域負載平衡並提供 SLA。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "id": "D01.12",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高",
+ "subcategory": "Hub and spoke",
+ "text": "確保負載均衡器後端池至少包含兩個實例,在後端部署至少包含兩個實例的 Azure 負載均衡器可以防止單點故障並支援可伸縮性。",
"waf": "可靠性"
},
{
@@ -762,31 +828,31 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "加密",
- "text": "使用 ExpressRoute Direct 時,請配置 MACsec,以便加密組織路由器和 MSEE 之間的第二層級別的流量。該圖顯示了流中的此加密。",
+ "text": "使用 ExpressRoute Direct 時,請配置 MACsec,以便在組織路由器和 MSEE 之間的第二層加密流量。該圖顯示了這種加密流程。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
"id": "D02.02",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "低",
+ "severity": "中等",
"subcategory": "加密",
- "text": "對於無法使用MACsec的方案(例如,不使用ExpressRoute Direct),請使用 VPN 閘道通過 ExpressRoute 專用對等互連建立 IPsec 隧道。",
+ "text": "對於無法使用MACsec的情況(例如,不使用ExpressRoute Direct),請使用 VPN 閘道通過 ExpressRoute 專用對等互連建立 IPsec 隧道。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"id": "D03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "ExpressRoute",
"severity": "高",
- "subcategory": "知識產權計劃",
- "text": "確保在 Azure 區域和本地位置之間不使用重疊的 IP 位址空間",
+ "subcategory": "IP 計劃",
+ "text": "確保 Azure 區域和本地位置之間沒有使用重疊的 IP 位址空間。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
@@ -797,14 +863,13 @@
"id": "D03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "低",
- "subcategory": "知識產權計劃",
- "text": "使用專用 Internet 位址分配範圍 (RFC 1918) 中的 IP 位址。",
+ "severity": "中等",
+ "subcategory": "IP 計劃",
+ "text": "使用私有互聯網的位址分配範圍 (RFC 1918) 中的IP位址。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
@@ -812,72 +877,96 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
"severity": "高",
- "subcategory": "知識產權計劃",
- "text": "確保IP位址空間不被浪費,不要創建不必要的大型虛擬網路(例如 /16)Ensure that that IP address space is not disdised, don't create un不必要的大型虛擬網路(例如 /16)Ensure that that IP address space is not waste, don't create un不必要的大型虛擬網络(例如 /16)Ensure that that IP address space is",
+ "subcategory": "IP 計劃",
+ "text": "確保IP位址空間不會浪費,不要創建不必要的大型虛擬網路(例如/16)。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "性能"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"id": "D03.04",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "高",
- "subcategory": "知識產權計劃",
- "text": "避免對生產網站和DR網站使用重疊的IP位址範圍。",
+ "subcategory": "IP 計劃",
+ "text": "不要對生產和災難恢復網站使用重疊的IP位址範圍。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "可靠性"
},
{
"category": "網路拓撲和連接",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
"id": "D03.05",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "高",
+ "subcategory": "IP 計劃",
+ "text": "使用標準 SKU 和區域冗餘 IP(如果適用),Azure 中的公共 IP 位址可以是標準 SKU,以非區域、區域或區域冗餘的形式提供。區域冗餘IP可跨所有區域訪問,可抵禦任何單個區域故障,從而提供更高的彈性。",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "id": "D03.06",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "中等",
- "subcategory": "知識產權計劃",
- "text": "對於只需要在 Azure 中進行名稱解析的環境,請使用 Azure 專用 DNS 進行解析,並使用委派區域進行名稱解析(例如“azure.contoso.com”)。",
+ "subcategory": "IP 計劃",
+ "text": "對於只需要在 Azure 中進行名稱解析的環境,請使用 Azure 專用 DNS 進行解析,並使用委託區域進行名稱解析(例如“azure.contoso.com”)。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "操作"
},
{
"category": "網路拓撲和連接",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "id": "D03.06",
+ "id": "D03.07",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "中等",
- "subcategory": "知識產權計劃",
- "text": "對於需要跨 Azure 和本地進行名稱解析的環境,請考慮使用 Azure DNS 專用解析程式。",
+ "subcategory": "IP 計劃",
+ "text": "對於需要跨 Azure 和本地進行名稱解析且沒有 Active Directory 等現有企業 DNS 服務的環境,請使用 Azure DNS 專用解析程式將 DNS 請求路由到 Azure 或本地 DNS 伺服器。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "id": "D03.07",
+ "id": "D03.08",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "低",
- "subcategory": "知識產權計劃",
- "text": "需要並部署自己的 DNS(例如 Red Hat OpenShift)的特殊工作負載應使用其首選的 DNS 解決方案。",
+ "subcategory": "IP 計劃",
+ "text": "需要並部署自己的 DNS 的特殊工作負載(例如 Red Hat OpenShift)應使用其首選的 DNS 解決方案。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "操作"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
- "id": "D03.08",
+ "id": "D03.09",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
"service": "DNS",
"severity": "高",
- "subcategory": "知識產權計劃",
- "text": "啟用 Azure DNS 的自動註冊,以自動管理虛擬網路中部署的虛擬機的 DNS 記錄的生命週期。",
+ "subcategory": "IP 計劃",
+ "text": "為 Azure DNS 啟用自動註冊,以自動管理虛擬網路中部署的虛擬機的 DNS 記錄的生命週期。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "操作"
},
+ {
+ "category": "網路拓撲和連接",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "id": "D03.10",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "中等",
+ "subcategory": "IP 計劃",
+ "text": "實施一個計劃,用於管理多個 Azure 區域之間的 DNS 解析以及服務故障轉移到另一個區域時",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "可靠性"
+ },
{
"category": "網路拓撲和連接",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
@@ -886,7 +975,8 @@
"service": "Bastion",
"severity": "中等",
"subcategory": "互聯網",
- "text": "請考慮使用 Azure Bastion 安全地連接到網路。",
+ "text": "使用 Azure Bastion 安全地連接到您的網路。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "安全"
},
{
@@ -898,7 +988,8 @@
"service": "Bastion",
"severity": "中等",
"subcategory": "互聯網",
- "text": "在子網 /26 或更大範圍內使用 Azure Bastion。",
+ "text": "在子網 /26 或更大的子網中使用 Azure Bastion。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "安全"
},
{
@@ -909,7 +1000,7 @@
"service": "WAF",
"severity": "中等",
"subcategory": "互聯網",
- "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為與登陸區域的入站 HTTP/S 連接提供全域保護。",
+ "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為到登陸區域的入站 HTTP/S 連接提供全域保護。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
@@ -921,12 +1012,11 @@
"service": "WAF",
"severity": "低",
"subcategory": "互聯網",
- "text": "使用 Azure Front Door 和 Azure 應用程式閘道幫助保護 HTTP/S 應用時,請使用 Azure Front Door 中的 WAF 策略。鎖定 Azure 應用程式閘道,以便僅接收來自 Azure Front Door 的流量。",
+ "text": "使用 Azure Front Door 和 Azure 應用程式閘道幫助保護 HTTP/S 應用時,請使用 Azure Front Door 中的 WAF 策略。鎖定 Azure 應用程式閘道以僅接收來自 Azure Front Door 的流量。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"id": "D05.05",
@@ -934,12 +1024,11 @@
"service": "WAF",
"severity": "高",
"subcategory": "互聯網",
- "text": "部署 WAF 和其他反向代理是入站 HTTP/S 連接所必需的,將它們部署在登陸區域虛擬網路中,並與它們保護並公開給 Internet 的應用一起部署。",
+ "text": "當入站 HTTP/S 連接需要 WAF 和其他反向代理時,請將它們部署在登陸區虛擬網路中,並與它們保護並公開給 Internet 的應用程式一起部署。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"id": "D05.06",
@@ -952,7 +1041,6 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"id": "D05.07",
@@ -960,11 +1048,11 @@
"service": "VNet",
"severity": "高",
"subcategory": "互聯網",
- "text": "在即將到來的重大更改之前,評估和審查網路出站流量配置和策略。2025 年 9 月 30 日,新部署的預設出站訪問將停用,僅允許顯式訪問配置",
+ "text": "規劃如何在即將到來的重大更改之前管理您的網路出站流量配置和策略。2025 年 9 月 30 日,新部署的預設出站訪問將停用,僅允許顯式訪問配置。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"id": "D05.08",
@@ -972,32 +1060,44 @@
"service": "VNet",
"severity": "高",
"subcategory": "互聯網",
- "text": "添加診斷設置以保存所有受保護的公共IP位址(DDoS IP或網路保護)的 DDoS 相關日誌。",
+ "text": "添加診斷設置以保存所有受保護的公有IP位址(DDoS IP或網路保護)的 DDoS 相關日誌。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
+ {
+ "category": "網路拓撲和連接",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "id": "D05.08",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "高",
+ "subcategory": "互聯網",
+ "text": "確保有一個策略分配來拒絕直接連接到虛擬機的公有IP位址。 如果特定 VM 上需要公共 IP,請使用排除項。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
+ },
{
"category": "網路拓撲和連接",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
"id": "D06.01",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "確保已調查使用 ExpressRoute 作為與 Azure 的主要連接的可能性。",
+ "text": "使用 ExpressRoute 作為與 Azure 的主要連接。 使用 VPN 作為備份連接的源。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "性能"
},
{
"category": "網路拓撲和連接",
- "description": "可以使用 AS 路徑前置和連接權重來影響從 Azure 到本地的流量,並使用自己的路由器中的全部 BGP 屬性來影響從本地到 Azure 的流量。",
+ "description": "您可以使用 AS 路徑預置和連接權重來影響從 Azure 到本地的流量,並使用您自己的路由器中的所有 BGP 屬性來影響從本地到 Azure 的流量。",
"guid": "f29812b2-363c-4efe-879b-599de0d5973c",
"id": "D06.02",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "使用多條 ExpressRoute 線路或多個本地位置時,請確保使用 BGP 屬性優化路由(如果首選某些路徑)。",
+ "text": "使用多個 ExpressRoute 線路或多個本地位置時,請使用 BGP 屬性來優化路由。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
@@ -1006,16 +1106,15 @@
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
"id": "D06.03",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "確保根據頻寬和性能要求為 ExpressRoute/VPN 閘道使用正確的 SKU。",
+ "text": "根據頻寬和性能要求為 ExpressRoute/VPN 閘道選擇正確的 SKU。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "性能"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
"guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
@@ -1024,11 +1123,11 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "混合",
- "text": "確保僅當達到證明其成本合理的頻寬時,才使用無限數據的ExpressRoute線路。",
+ "text": "確保僅在達到與成本相稱的頻寬時才使用無限數據 ExpressRoute 線路。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "成本"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
"guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
@@ -1037,7 +1136,8 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "混合",
- "text": "如果線路的對等互連位置支援本地 SKU 的 Azure 區域,則利用 ExpressRoute 的本地 SKU 來降低線路的成本。",
+ "text": "如果你的線路對等互連位置支援本地 SKU 的 Azure 區域,請利用 ExpressRoute 的本地 SKU 來降低線路的成本。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "成本"
},
{
@@ -1049,7 +1149,7 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "在受支援的 Azure 區域中部署區域冗餘 ExpressRoute 閘道。",
+ "text": "在支援的 Azure 區域中部署區域冗餘 ExpressRoute 閘道。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
@@ -1073,7 +1173,7 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "如果需要低延遲,或者從本地到 Azure 的輸送量必須大於 10 Gbps,請啟用 FastPath 以繞過數據路徑的 ExpressRoute 閘道。",
+ "text": "當需要低延遲,或者從本地到 Azure 的輸送量必須大於 10 Gbps 時,請啟用 FastPath 以從數據路徑繞過 ExpressRoute 閘道。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "性能"
},
@@ -1103,7 +1203,6 @@
"waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"id": "D06.11",
@@ -1111,7 +1210,7 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "混合",
- "text": "如果使用 ExpressRoute Direct,請考慮使用本地 Azure 區域的 ExpressRoute 本地線路來節省成本",
+ "text": "如果使用 ExpressRoute Direct,請考慮使用連接到本地 Azure 區域的 ExpressRoute 本地線路以節省成本。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "成本"
},
@@ -1123,7 +1222,7 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "當需要流量隔離或專用頻寬時(例如,用於分離生產環境和非生產環境),請使用不同的 ExpressRoute 線路。它將幫助您確保隔離的路由域並減輕干擾鄰居風險。",
+ "text": "當需要流量隔離或專用頻寬時(例如用於分離生產和非生產環境),請使用不同的 ExpressRoute 線路。它將幫助您確保隔離的路由域並減輕嘈雜的鄰居風險。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
@@ -1135,7 +1234,7 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "使用內置的 Express Route Insights 監視 ExpressRoute 的可用性和利用率。",
+ "text": "使用內置的 Express Route Insights 監控 ExpressRoute 的可用性和利用率。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "操作"
},
@@ -1147,7 +1246,7 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "使用連接監視器進行跨網路的連接監視,尤其是在本地和 Azure 之間。",
+ "text": "使用連接監視器進行跨網路的連接監控,尤其是本地和 Azure 之間的連接。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "操作"
},
@@ -1156,11 +1255,11 @@
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
"id": "D06.15",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "使用來自不同對等互連位置的 ExpressRoute 線路實現冗餘。",
+ "text": "使用來自不同對等互連位置的 ExpressRoute 線路以實現冗餘。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
@@ -1172,11 +1271,11 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "使用網站到網站 VPN 作為 ExpressRoute 的故障轉移,尤其是在僅使用單個 ExpressRoute 線路時。",
+ "text": "如果僅使用單個 ExpressRoute 線路,請使用網站到網站 VPN 作為 ExpressRoute 的故障轉移。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
"guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
@@ -1185,11 +1284,10 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "混合",
- "text": "如果在 GatewaySubnet 中使用路由表,請確保傳播閘道路由。",
+ "text": "如果您在 GatewaySubnet 中使用路由表,請確保傳播閘道路由。",
"waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"id": "D06.18",
@@ -1197,7 +1295,8 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "混合",
- "text": "如果使用 ExpressRoute,則本地路由應是動態的:如果連接失敗,它應收斂到線路的剩餘連接。理想情況下,負載應在兩個連接之間共用為主動/主動,但也支持主動/被動。",
+ "text": "如果使用 ExpressRoute,則本地路由應該是動態的:如果連接失敗,它應收斂到線路的剩餘連接。理想情況下,負載應在兩個連接之間共用,即主動/主動,但也支持主動/被動。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
{
@@ -1220,7 +1319,7 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "確保在客戶或供應商邊緣路由設備上啟用並配置雙向轉發檢測 (BFD)。",
+ "text": "確保在客戶或供應商邊緣路由設備上啟用和配置雙向轉發檢測 (BFD)。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
@@ -1232,7 +1331,7 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "混合",
- "text": "將 ExpressRoute 閘道連接到來自不同對等互連位置的兩條或多條線路,以提高復原能力。",
+ "text": "將 ExpressRoute 閘道連接到來自不同對等互連位置的兩條或多條線路,以獲得更高的復原能力。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "可靠性"
},
@@ -1256,20 +1355,30 @@
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "混合",
- "text": "避免使用 ExpressRoute 線路進行 VNet 到 VNet 通信。",
+ "text": "不要使用 ExpressRoute 線路進行 VNet 到 VNet 通信。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "性能"
},
{
- "ammp": true,
+ "category": "網路拓撲和連接",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "id": "D06.25",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "低",
+ "subcategory": "混合",
+ "text": "不要將 Azure 流量發送到混合位置進行檢查。 相反,請遵循“Azure 中的流量保留在 Azure 中”的原則,以便通過 Microsoft 主幹網络進行 Azure 中資源的通信。",
+ "waf": "性能"
+ },
+ {
"category": "網路拓撲和連接",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
"id": "D07.01",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "使用 Azure 防火牆管理發往 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)",
+ "text": "使用 Azure 防火牆來管理到 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
@@ -1277,11 +1386,11 @@
"category": "網路拓撲和連接",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
"id": "D07.02",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "創建全域 Azure 防火牆策略以管理全球網路環境中的安全狀況,並將其分配給所有 Azure 防火牆實例。通過 Azure 基於角色的訪問控制將增量防火牆策略委託給本地安全團隊,允許精細策略滿足特定區域的要求。",
+ "text": "創建全域 Azure 防火牆策略以管理全球網路環境中的安全狀況,並將其分配給所有 Azure 防火牆實例。通過 Azure 基於角色的訪問控制將增量防火牆策略委派給本地安全團隊,從而允許精細策略以滿足特定區域的要求。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
@@ -1298,7 +1407,6 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
@@ -1307,11 +1415,11 @@
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "使用基於 FQDN 的網路規則和具有 DNS 代理的 Azure 防火牆,通過應用程式規則不支援的協定篩選到 Internet 的出口流量。",
+ "text": "使用應用程式規則篩選目標主機名上的出站流量,以瞭解支持的協定。 使用基於 FQDN 的網路規則和帶有 DNS 代理的 Azure 防火牆,通過其他協議篩選到 Internet 的出口流量。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
@@ -1320,24 +1428,23 @@
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "使用 Azure 防火牆高級版提供額外的安全性和保護。",
+ "text": "使用 Azure 防火牆高級版啟用其他安全功能。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
"id": "D07.06",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "將 Azure 防火牆威脅情報模式配置為「警報」和「拒絕」,以獲得額外保護。",
+ "text": "將 Azure 防火牆威脅情報模式配置為 Alert 和 Deny 以獲得額外的保護。",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
@@ -1346,11 +1453,11 @@
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "將 Azure 防火牆 IDPS 模式配置為「拒絕」 ,以獲得額外的保護。",
+ "text": "將 Azure 防火牆 IDPS 模式配置為 Deny 以獲得額外保護。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
@@ -1359,11 +1466,10 @@
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "對於未連接到虛擬 WAN 的 VNet 中的子網,請附加路由表,以便將 Internet 流量重定向到 Azure 防火牆或網路虛擬設備",
+ "text": "對於 VNet 中未連接到虛擬 WAN 的子網,請附加路由表,以便將 Internet 流量重定向到 Azure 防火牆或網路虛擬設備。",
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"id": "D07.09",
@@ -1371,25 +1477,23 @@
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "添加診斷設置,以使用「特定於資源」的目標表保存所有 Azure 防火牆部署的日誌。",
+ "text": "添加診斷設置,以使用特定於資源的目標表保存所有 Azure 防火牆部署的日誌。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "操作"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"id": "D07.10",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
"service": "Firewall",
- "severity": "重要",
+ "severity": "高",
"subcategory": "防火牆",
"text": "從 Azure 防火牆經典規則(如果存在)遷移到防火牆策略。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "操作"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
@@ -1399,6 +1503,7 @@
"severity": "高",
"subcategory": "分割",
"text": "對 Azure 防火牆子網使用 /26 前置綴。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
@@ -1409,7 +1514,8 @@
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "將防火牆策略中的規則排列到規則集合組和規則集合中,並根據它們的使用頻率",
+ "text": "根據規則的使用頻率,將防火牆策略中的規則排列到規則集合組和規則集合中。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "性能"
},
{
@@ -1420,7 +1526,7 @@
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "使用IP組或IP前置綴來減少IP表規則的數量",
+ "text": "使用IP組或IP前置綴來減少IP表規則的數量。",
"waf": "性能"
},
{
@@ -1431,18 +1537,20 @@
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "避免將通配符作為DNATS的源IP,例如*或任何通配符,您應該為傳入的DNAT指定源IP",
+ "text": "請勿使用通配符作為DNAT的源IP,例如*或任何,您應該為傳入的DNAT指定源IP。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "性能"
},
{
"category": "網路拓撲和連接",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
"id": "D07.14",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "通過監控 SNAT 埠使用方式、評估 NAT 閘道設置和確保無縫故障轉移來防止 SNAT 埠耗盡。如果埠計數接近限制,則表明 SNAT 耗盡可能迫在眉睫。",
+ "text": "通過監控 SNAT 埠使用方式、評估 NAT 閘道設置並確保無縫故障轉移,防止 SNAT 埠耗盡。如果埠計數接近限制,則表明 SNAT 耗儘可能即將耗盡。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "性能"
},
{
@@ -1453,7 +1561,7 @@
"service": "Firewall",
"severity": "高",
"subcategory": "防火牆",
- "text": "啟用 TLS 檢查",
+ "text": "如果使用的是 Azure 防火牆高級版,請啟用 TLS 檢查。",
"waf": "性能"
},
{
@@ -1475,63 +1583,81 @@
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "作為 TLS 檢查的一部分,請計劃從 Azure 應用閘道接收流量以進行檢查。",
+ "text": "作為 TLS 檢查的一部分,請規劃從 Azure 應用程式閘道接收流量進行檢查。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "性能"
},
{
"category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"id": "D07.18",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "中等",
"subcategory": "防火牆",
- "text": "啟用 Azure 防火牆 DNS 代理配置",
+ "text": "啟用 Azure 防火牆 DNS 代理配置。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"id": "D07.19",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "中等",
+ "severity": "高",
"subcategory": "防火牆",
- "text": "確保有策略分配來拒絕直接綁定到虛擬機的公共IP位址",
- "waf": "安全"
+ "text": "將 Azure 防火牆與 Azure Monitor 集成,並啟用診斷日誌記錄來存儲和分析防火牆日誌和指標。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "操作"
},
{
"category": "網路拓撲和連接",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"id": "D07.20",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "低",
"subcategory": "防火牆",
- "text": "將 Azure 防火牆與 Azure Monitor 集成,並啟用診斷日誌記錄來存儲和分析防火牆日誌。",
+ "text": "為防火牆規則實施備份",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "操作"
},
{
"category": "網路拓撲和連接",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
"id": "D07.21",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
"service": "Firewall",
- "severity": "低",
+ "severity": "高",
"subcategory": "防火牆",
- "text": "為防火牆規則實施備份",
- "waf": "操作"
+ "text": "跨多個可用性區域部署 Azure 防火牆。Azure 防火牆根據其部署提供不同的 SLA;在單個可用區或跨多個可用區,從而可能提高可靠性和性能。",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
"id": "D07.22",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "高",
+ "subcategory": "防火牆",
+ "text": "在 Azure 防火牆 VNet 上配置 DDoS 防護,將 DDoS 防護計劃與託管 Azure 防火牆的虛擬網路相關聯,以提供針對 DDoS 攻擊的增強緩解。Azure 防火牆管理器集成了防火牆基礎結構和 DDoS 防護計劃的創建。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "網路拓撲和連接",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "id": "D07.23",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "高",
"subcategory": "PaaS 的",
- "text": "確保注入虛擬網路的 Azure PaaS 服務的控制平面通信不會中斷,例如,使用 0.0.0.0/0 路由或阻止控制平面流量的 NSG 規則。",
+ "text": "不要中斷注入虛擬網路的 Azure PaaS 服務的控制平面通信,例如使用 0.0.0.0/0 路由或阻止控制平面流量的 NSG 規則。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
@@ -1539,7 +1665,7 @@
"category": "網路拓撲和連接",
"guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
"id": "D08.02",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"severity": "中等",
"subcategory": "PaaS 的",
"text": "將專用連結(如果可用)用於共用的 Azure PaaS 服務。",
@@ -1550,11 +1676,11 @@
"category": "網路拓撲和連接",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
"id": "D08.03",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "中等",
"subcategory": "PaaS 的",
- "text": "通過專用終結點和 ExpressRoute 專用對等互連從本地訪問 Azure PaaS 服務。此方法可避免通過公共 Internet 進行傳輸。",
+ "text": "通過專用終結點和 ExpressRoute 專用對等互連從本地訪問 Azure PaaS 服務。此方法可避免通過公共 Internet 傳輸。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
@@ -1563,11 +1689,11 @@
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
"id": "D08.04",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "中等",
+ "severity": "高",
"subcategory": "PaaS 的",
- "text": "默認情況下,不要在所有子網上啟用虛擬網路服務終結點。",
+ "text": "默認情況下,不要在所有子網上啟用虛擬網路服務終端節點。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
@@ -1575,7 +1701,7 @@
"category": "網路拓撲和連接",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
"id": "D08.05",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "中等",
"subcategory": "PaaS 的",
@@ -1584,7 +1710,6 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
@@ -1593,7 +1718,7 @@
"service": "ExpressRoute",
"severity": "高",
"subcategory": "分割",
- "text": "至少對閘道子網使用 /27 前置綴",
+ "text": "至少為您的閘道子網使用 /27 前置綴。",
"waf": "安全"
},
{
@@ -1603,7 +1728,7 @@
"id": "D09.02",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "中等",
+ "severity": "高",
"subcategory": "分割",
"text": "不要依賴使用 VirtualNetwork 服務標記的 NSG 入站預設規則來限制連接。",
"waf": "安全"
@@ -1615,51 +1740,41 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"severity": "中等",
"subcategory": "分割",
- "text": "將子網創建委託給登陸區域擁有者。",
+ "text": "將子網創建委託給landing zone 擁有者。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"id": "D09.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"service": "NSG",
"severity": "中等",
"subcategory": "分割",
- "text": "使用 NSG 説明保護跨子網的流量,以及跨平台的東/西流量(登陸區域之間的流量)。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "id": "D09.05",
- "service": "NSG",
- "severity": "中等",
- "subcategory": "分割",
- "text": "應用程式團隊應使用子網級別 NSG 的應用程式安全組來幫助保護登陸區域內的多層 VM。",
+ "text": "使用 NSG 説明保護跨子網的流量,以及跨平台的東西向流量(登陸區域之間的流量)。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "id": "D09.06",
+ "id": "D09.05",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "中等",
"subcategory": "分割",
- "text": "使用 NSG 和應用程式安全組對登陸區域內的流量進行微分段,並避免使用中央 NVA 篩選流量。",
+ "text": "使用 NSG 和應用程式安全組對登陸區域內的流量進行微分段,並避免使用中央 NVA 來篩選流量。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "id": "D09.07",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "id": "D09.06",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "中等",
"subcategory": "分割",
@@ -1671,12 +1786,12 @@
"category": "網路拓撲和連接",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "id": "D09.08",
+ "id": "D09.07",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "中等",
"subcategory": "分割",
- "text": "考慮每個 NSG 的 NSG 規則限制 (1000)。",
+ "text": "由於規則數限制為 1000 個,因此每個 NSG 實施的 NSG 規則不要超過 900 個。",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "可靠性"
},
@@ -1687,8 +1802,8 @@
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "請考慮使用虛擬 WAN 簡化 Azure 網路管理,並確保在虛擬 WAN 路由設計清單中明確描述你的方案",
+ "subcategory": "虛擬 WAN",
+ "text": "如果您的方案在虛擬 WAN 路由設計清單中明確描述,請使用虛擬 WAN。",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "操作"
},
@@ -1696,106 +1811,103 @@
"category": "網路拓撲和連接",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
"id": "D10.02",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "使用每個 Azure 區域的虛擬 WAN 中心,通過通用的全域 Azure 虛擬 WAN 跨 Azure 區域將多個登陸區域連接在一起。",
- "waf": "性能"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "id": "D10.03",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "低",
- "subcategory": "虛擬廣域網",
- "text": "遵循“Azure 中的流量保留在 Azure 中”原則,以便通過 Microsoft 主幹網络在 Azure 中跨資源進行通信",
+ "subcategory": "虛擬 WAN",
+ "text": "使用每個 Azure 區域的虛擬 WAN 中心,透過通用的全球 Azure 虛擬 WAN 跨 Azure 區域將多個登陸區域連接在一起。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "性能"
},
{
"category": "網路拓撲和連接",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "id": "D10.04",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "id": "D10.03",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "對於出站 Internet 流量保護和篩選,請在安全中心部署 Azure 防火牆",
+ "subcategory": "虛擬 WAN",
+ "text": "對於出站 Internet 流量保護和篩選,請在安全中心部署 Azure 防火牆。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "id": "D10.05",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "id": "D10.04",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "確保網路體系結構在 Azure 虛擬 WAN 限制範圍內。",
+ "subcategory": "虛擬 WAN",
+ "text": "確保您的虛擬 WAN 網路架構與已確定的架構方案保持一致。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "可靠性"
},
{
"category": "網路拓撲和連接",
"guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "id": "D10.06",
+ "id": "D10.05",
"link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "使用適用於虛擬 WAN 的 Azure Monitor 見解監視虛擬 WAN 的端到端拓撲、狀態和關鍵指標。",
+ "subcategory": "虛擬 WAN",
+ "text": "使用適用於虛擬 WAN 的 Azure Monitor Insights 來監視虛擬 WAN 的端到端拓撲、狀態和關鍵指標。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "操作"
},
{
"category": "網路拓撲和連接",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "id": "D10.07",
+ "id": "D10.06",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "請確保 IaC 部署不會在虛擬 WAN 中禁用分支到分支通信,除非應顯式阻止這些流。",
+ "subcategory": "虛擬 WAN",
+ "text": "不要在虛擬 WAN 中禁用分支到分支流量,除非應明確阻止這些流。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "可靠性"
},
{
"category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "id": "D10.08",
+ "id": "D10.07",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
+ "subcategory": "虛擬 WAN",
"text": "使用 AS-Path 作為中心路由首選項,因為它比 ExpressRoute 或 VPN 更靈活。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "可靠性"
},
{
"category": "網路拓撲和連接",
"guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "id": "D10.09",
+ "id": "D10.08",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "中等",
- "subcategory": "虛擬廣域網",
- "text": "請確保 IaC 部署在虛擬 WAN 中配置基於標籤的傳播,否則虛擬中心之間的連接將受到損害。",
+ "subcategory": "虛擬 WAN",
+ "text": "在虛擬 WAN 中配置基於標籤的傳播,否則虛擬中心之間的連接將受到影響。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "可靠性"
},
{
- "ammp": true,
"category": "網路拓撲和連接",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
- "id": "D10.10",
+ "id": "D10.09",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "高",
- "subcategory": "虛擬廣域網",
- "text": "為虛擬中心分配足夠的IP空間,最好是 /23前置綴。",
+ "subcategory": "虛擬 WAN",
+ "text": "為虛擬中心分配至少 /23 前置綴,以確保有足夠的IP空間可用。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "可靠性"
},
{
- "ammp": true,
"category": "統轄",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"id": "E01.01",
@@ -1803,7 +1915,8 @@
"service": "Policy",
"severity": "高",
"subcategory": "統轄",
- "text": "戰略性地利用 Azure Policy,為環境定義控制,使用策略計劃對相關策略進行分組。",
+ "text": "戰略性地利用 Azure Policy,使用策略計劃對相關策略進行分組,為您的環境定義控制措施。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1815,6 +1928,7 @@
"severity": "中等",
"subcategory": "統轄",
"text": "將法規和合規性要求映射到 Azure Policy 定義和 Azure 角色分配。",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "安全"
},
{
@@ -1825,7 +1939,8 @@
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "在中間根管理組建立 Azure Policy 定義,以便可以在繼承的範圍內分配這些定義",
+ "text": "在中間根管理組建立 Azure Policy 定義,以便可以在繼承的範圍內分配這些定義。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1834,9 +1949,10 @@
"id": "E01.05",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "中等",
+ "severity": "高",
"subcategory": "統轄",
- "text": "如果需要,在最高適當級別管理策略分配,在最低級別管理排除項。",
+ "text": "如果需要,在最高適當的級別管理策略分配,並在最低級別管理排除項。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1847,7 +1963,8 @@
"service": "Policy",
"severity": "低",
"subcategory": "統轄",
- "text": "使用 Azure Policy 控制使用者可以在訂閱/管理組級別預配哪些服務",
+ "text": "使用 Azure Policy 控制使用者可以在訂閱/管理組級別預配哪些服務。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1856,21 +1973,23 @@
"id": "E01.07",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "中等",
+ "severity": "高",
"subcategory": "統轄",
- "text": "盡可能使用內置策略,以最大程度地減少操作開銷。",
+ "text": "盡可能使用內置策略,以最大程度地減少運營開銷。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
"category": "統轄",
- "description": "通過將「資源策略參與者」角色分配給特定範圍,可以將策略管理委派給相關團隊。例如,中央IT團隊可以監督管理組級別的策略,而應用程式團隊則處理其訂閱的策略,從而在遵守組織標準的情況下實現分散式治理。",
+ "description": "通過將 Resource Policy Contributor 角色分配給特定範圍,您可以將策略管理委派給相關團隊。例如,中央IT團隊可以監督管理組級別的策略,而應用程式團隊則處理其訂閱的策略,從而在遵守組織標準的情況下實現分散式治理。",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"id": "E01.08",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "在特定範圍內分配內置的「資源策略參與者」角色,以啟用應用程式級治理。",
+ "text": "在特定範圍內分配內置的 Resource Policy Contributor 角色,以啟用應用程式級監管。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1881,7 +2000,8 @@
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "限制在根管理組範圍內進行的 Azure Policy 分配數,以避免在繼承範圍內通過排除項進行管理。",
+ "text": "限制在根管理組範圍內進行的 Azure Policy 分配的數量,以避免通過繼承範圍內的排除項進行管理。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
@@ -1892,7 +2012,7 @@
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "如果存在任何數據主權要求,可以部署 Azure 策略來強制實施這些要求",
+ "text": "如果存在任何數據主權要求,則應部署 Azure 策略來強制實施這些要求。",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "安全"
},
@@ -1904,7 +2024,7 @@
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "對於主權登陸區,主權政策基線的政策計劃將在正確的 MG 級別部署和分配。",
+ "text": "對於 Sovereign Landing Zone,請部署主權策略基線並在正確的管理組級別進行分配。",
"waf": "安全"
},
{
@@ -1915,17 +2035,18 @@
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "對於主權登陸區,記錄了“主權控制目標”到策略映射“。",
+ "text": "對於 Sovereign Landing Zone,將 Sovereign Control 目標記錄到策略映射。",
"waf": "安全"
},
{
"category": "統轄",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
"id": "E01.13",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "中等",
"subcategory": "統轄",
- "text": "對於主權登陸區,CRUD的“主權控制目標到政策映射”的流程已經到位。",
+ "text": "對於 Sovereign Landing Zone,請確保已制定管理“主權控制目標到策略映射”的流程。",
"waf": "安全"
},
{
@@ -1934,38 +2055,51 @@
"id": "E02.02",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
"severity": "中等",
- "subcategory": "優化雲投資",
+ "subcategory": "優化您的雲投資",
"text": "配置“實際”和“預測”預算警報。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
"waf": "成本"
},
{
"category": "管理",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
"id": "F01.01",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "中等",
"subcategory": "監測",
- "text": "使用單個監視器日誌工作區集中管理平臺,但 Azure 基於角色的訪問控制 (Azure RBAC)、數據主權要求或數據保留策略要求使用單獨的工作區的情況除外。",
+ "text": "使用單個監視器日誌工作區集中管理平臺,除非 Azure 基於角色的訪問控制 (Azure RBAC)、數據主權要求或數據保留策略要求單獨的工作區。",
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "操作"
},
+ {
+ "category": "管理",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "id": "F01.02",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "中等",
+ "subcategory": "監測",
+ "text": "決定是對所有區域使用單個 Azure Monitor 日誌工作區,還是創建多個工作區以涵蓋不同的地理區域。每種方法都有優點和缺點,包括潛在的跨區域網路費用",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "可靠性"
+ },
{
"category": "管理",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"id": "F01.03",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "中等",
+ "severity": "高",
"subcategory": "監測",
- "text": "如果日誌保留要求超過 12 年,請將日誌匯出到 Azure 存儲。將不可變存儲與一次寫入、多次讀取策略結合使用,使數據在使用者指定的時間間隔內不可擦除和不可修改。",
+ "text": "如果您的日誌保留要求超過 12 年,請將日誌匯出到 Azure 存儲。將不可變存儲與一次寫入、多次讀取策略結合使用,使數據在使用者指定的時間間隔內不可擦除且不可修改。",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "操作"
},
{
"category": "管理",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "id": "F01.05",
+ "id": "F01.04",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"service": "VM",
"severity": "中等",
@@ -1977,8 +2111,8 @@
{
"category": "管理",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "id": "F01.06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "id": "F01.05",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "中等",
"subcategory": "運營合規性",
@@ -1989,142 +2123,174 @@
{
"category": "管理",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "id": "F01.07",
+ "id": "F01.06",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "中等",
"subcategory": "運營合規性",
- "text": "使用 Azure Arc 將 Azure Update Manager 用作 Azure 外部 Windows 和 Linux VM 的修補機制。",
+ "text": "使用 Azure Update Manager 作為使用 Azure Arc 的 Azure 外部 Windows 和 Linux VM 的修補機制。",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "操作"
},
{
"category": "管理",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "id": "F01.08",
+ "id": "F01.07",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "中等",
"subcategory": "監測",
- "text": "使用網路觀察程序主動監視流量",
+ "text": "使用網路觀察程序主動監控流量。",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "操作"
},
{
"category": "管理",
"guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "id": "F01.09",
+ "id": "F01.08",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"severity": "中等",
"subcategory": "監測",
- "text": "使用資源鎖防止意外刪除關鍵共享服務。",
+ "text": "使用資源鎖來防止意外刪除關鍵共享服務。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "操作"
},
{
"category": "管理",
"guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "id": "F01.10",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "id": "F01.09",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
"severity": "低",
"subcategory": "監測",
- "text": "使用拒絕策略來補充 Azure 角色分配。拒絕策略和 Azure 角色分配的組合可確保適當的防護措施到位,以強制實施誰可以部署和配置資源以及他們可以部署和配置哪些資源。",
+ "text": "使用拒絕策略來補充 Azure 角色分配。拒絕策略和 Azure 角色分配的組合可確保適當的防護機制到位,以強制誰可以部署和配置資源以及他們可以部署和配置哪些資源。",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal",
"waf": "操作"
},
{
"category": "管理",
"guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "id": "F01.11",
+ "id": "F01.10",
"link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
"severity": "中等",
"subcategory": "監測",
- "text": "將服務和資源運行狀況事件作為整體平臺監視解決方案的一部分。從平臺角度跟蹤服務和資源運行狀況是 Azure 中資源管理的重要組成部分。",
+ "text": "將服務和資源運行狀況事件作為整個平台監控解決方案的一部分。從平臺角度跟蹤服務和資源運行狀況是 Azure 中資源管理的重要組成部分。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/",
"waf": "操作"
},
{
"category": "管理",
"guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "id": "F01.12",
+ "id": "F01.11",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
"severity": "中等",
"subcategory": "監測",
- "text": "將警報和操作組作為 Azure 服務運行狀況平臺的一部分,以確保可以對警報或問題進行操作",
+ "text": "將警報和操作組作為 Azure 服務運行狀況平臺的一部分,以確保可以處理警報或問題。",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules",
"waf": "操作"
},
{
"category": "管理",
"guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "id": "F01.13",
+ "id": "F01.12",
"link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"severity": "中等",
"subcategory": "監測",
- "text": "不要將原始日誌條目發送回本地監視系統。相反,請採用在 Azure 中生成的數據保留在 Azure 中的原則。如果需要本地 SIEM 集成,請發送關鍵警報而不是日誌。",
+ "text": "不要將原始日誌條目發送回本地監控系統。相反,請採用 Azure 中產生的數據保留在 Azure 中的原則。如果需要本地 SIEM 集成,請發送關鍵警報而不是日誌。",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/",
"waf": "操作"
},
{
"category": "管理",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "id": "F01.15",
+ "id": "F01.13",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "中等",
"subcategory": "監測",
"text": "使用 Azure Monitor 紀錄獲取見解和報告。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "操作"
},
{
"category": "管理",
"guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "id": "F01.16",
+ "id": "F01.14",
"link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"severity": "中等",
"subcategory": "監測",
- "text": "必要時,請使用登陸區域內的共用存儲帳戶進行 Azure 診斷擴展日誌存儲。",
+ "text": "必要時,請在登陸區域中使用共用存儲帳戶進行 Azure 診斷擴展日誌存儲。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/",
"waf": "操作"
},
{
"category": "管理",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "id": "F01.17",
+ "id": "F01.15",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
"severity": "中等",
"subcategory": "監測",
"text": "使用 Azure Monitor 警報生成操作警報。",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "操作"
},
{
"category": "管理",
"guid": "859c3900-4514-41eb-b010-475d695abd74",
- "id": "F01.18",
+ "id": "F01.16",
"link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
"severity": "中等",
"subcategory": "監測",
- "text": "確保已評估監視要求,並應用適當的數據收集和警報配置",
+ "text": "確保已評估監控要求,並應用適當的數據收集和警報配置。",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/",
"waf": "操作"
},
{
"category": "管理",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "id": "F01.19",
+ "id": "F01.17",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "中等",
"subcategory": "監測",
- "text": "通過 Azure 自動化帳戶使用更改和清單跟蹤時,請確保已選擇支援的區域來將 Log Analytics 工作區和自動化帳戶連結在一起。",
+ "text": "通過 Azure 自動化帳戶使用更改和清單跟蹤時,請確保已選擇受支持的區域,以便將 Log Analytics 工作區和自動化帳戶連結在一起。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "操作"
},
{
"category": "管理",
"guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "id": "F01.19",
+ "id": "F01.18",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
"severity": "中等",
"subcategory": "監測",
- "text": "為登陸區域的平臺元件建立監視,AMBA 是一種可用的框架解決方案,它提供了一種使用 Azure Policy 縮放警報的簡單方法",
+ "text": "部署AMBA以建立對登陸區域的平臺元件的監視 - AMBA 是一個可用的框架解決方案,它提供了一種使用 Azure Policy 縮放警報的簡單方法。",
"training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
"waf": "操作"
},
+ {
+ "category": "管理",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "id": "F01.19",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
+ "severity": "中等",
+ "subcategory": "監測",
+ "text": "使用 Azure Monitoring Agent (AMA)。Log Analytics 代理自 2024 年 8 月 31 日起已棄用",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation",
+ "waf": "操作"
+ },
+ {
+ "category": "管理",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "id": "F01.20",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
+ "severity": "高",
+ "subcategory": "數據保護",
+ "text": "確保存儲帳戶是區域或區域冗餘的,冗餘可確保存儲帳戶在故障中滿足可用性和持久性目標,從而在降低成本與高可用性之間權衡。本地冗餘存儲以最低的成本提供最低的持久性。",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "waf": "可靠性"
+ },
{
"category": "管理",
"guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
@@ -2132,7 +2298,8 @@
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"severity": "中等",
"subcategory": "數據保護",
- "text": "考慮在 Azure 中為具有配對區域的 BCDR 進行跨區域複製",
+ "text": "在 Azure 中為具有配對區域的 BCDR 啟用跨區域複製。",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/",
"waf": "可靠性"
},
{
@@ -2141,9 +2308,10 @@
"id": "F02.02",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "中等",
+ "severity": "低",
"subcategory": "數據保護",
- "text": "使用 Azure 備份時,請考慮不同的備份類型(GRS、ZRS 和 LRS),因為預設設置為 GRS",
+ "text": "使用Azure備份時,請使用正確的備份類型(GRS,ZRS和LRS)進行備份,因為預設設置是GRS。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "可靠性"
},
{
@@ -2154,12 +2322,12 @@
"service": "VM",
"severity": "中等",
"subcategory": "運營合規性",
- "text": "使用 Azure 策略通過 VM 擴展自動部署軟體配置,並強制實施符合標準的基線 VM 配置。",
+ "text": "使用 Azure 來賓策略通過 VM 擴展自動部署軟體配置,並強制實施合規的基線 VM 配置。",
"waf": "安全"
},
{
"category": "管理",
- "description": "Azure Policy 的來賓配置功能可以審核和修正計算機設置(例如,操作系統、應用程式、環境),以確保資源與預期配置一致,更新管理可以對 VM 強制實施修補程式管理。",
+ "description": "使用 Azure Policy 的來賓配置功能來審核和修正電腦設置(例如,操作系統、應用程式、環境),以確保資源與預期配置保持一致,並且更新管理可以對 VM 強制實施修補程式管理。",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"id": "F03.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
@@ -2167,6 +2335,7 @@
"severity": "中等",
"subcategory": "運營合規性",
"text": "通過 Azure Policy 監視 VM 安全配置偏移。",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
@@ -2178,6 +2347,7 @@
"severity": "中等",
"subcategory": "保護和恢復",
"text": "將 Azure Site Recovery 用於 Azure 到 Azure 虛擬機的災難恢復方案。這使您能夠跨區域複製工作負載。",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "操作"
},
{
@@ -2187,7 +2357,8 @@
"link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
"severity": "中等",
"subcategory": "保護和恢復",
- "text": "確保使用和測試本機 PaaS 服務容災功能。",
+ "text": "使用原生 PaaS 服務容災能力。 使用這些功能執行故障轉移測試。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/",
"waf": "操作"
},
{
@@ -2198,46 +2369,11 @@
"service": "Backup",
"severity": "中等",
"subcategory": "保護和恢復",
- "text": "使用 Azure 本機備份功能或與 Azure 相容的第三方備份解決方案。",
+ "text": "使用 Azure 原生備份功能或與 Azure 相容的第三方備份解決方案。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "操作"
},
{
- "ammp": true,
- "category": "管理",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "id": "F05.01",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "高",
- "subcategory": "容錯",
- "text": "在支援可用性區域的區域中對 VM 利用可用性區域。",
- "waf": "可靠性"
- },
- {
- "ammp": true,
- "category": "管理",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "id": "F05.02",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "高",
- "subcategory": "容錯",
- "text": "避免在單個 VM 上運行生產工作負載。",
- "waf": "可靠性"
- },
- {
- "category": "管理",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "id": "F05.03",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "中等",
- "subcategory": "容錯",
- "text": "Azure 負載均衡器和應用程式閘道在多個資源之間分配傳入的網路流量。",
- "waf": "可靠性"
- },
- {
- "ammp": true,
"category": "管理",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"id": "F06.01",
@@ -2245,7 +2381,8 @@
"service": "WAF",
"severity": "高",
"subcategory": "應用交付",
- "text": "添加診斷設置以保存來自 Azure Front Door 和 Azure 應用程式閘道等應用程式交付服務的 WAF 紀錄。定期查看日誌,以檢查攻擊和誤報檢測。",
+ "text": "添加診斷設置以保存來自應用程式交付服務(如 Azure Front Door 和 Azure 應用程式閘道)的 WAF 日誌。定期查看日誌以檢查是否存在攻擊和誤報檢測。",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "操作"
},
{
@@ -2257,6 +2394,7 @@
"severity": "中等",
"subcategory": "應用交付",
"text": "將 WAF 日誌從應用程式交付服務(如 Azure Front Door 和 Azure 應用程式閘道)發送到 Microsoft Sentinel。檢測攻擊並將 WAF 遙測集成到整個 Azure 環境中。",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "操作"
},
{
@@ -2267,6 +2405,7 @@
"severity": "中等",
"subcategory": "存取控制",
"text": "在允許 Azure 服務投入生產之前,確定 Azure 服務的事件響應計劃。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/",
"waf": "安全"
},
{
@@ -2276,11 +2415,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
"severity": "中等",
"subcategory": "存取控制",
- "text": "在適當的情況下,實施零信任方法來訪問 Azure 平臺。",
+ "text": "應用零信任方法來訪問 Azure 平臺。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"id": "G02.01",
@@ -2288,7 +2427,8 @@
"service": "Key Vault",
"severity": "高",
"subcategory": "加密和金鑰",
- "text": "使用 Azure Key Vault 儲存機密和憑據",
+ "text": "使用 Azure Key Vault 儲存機密和憑據。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2301,6 +2441,7 @@
"severity": "中等",
"subcategory": "加密和金鑰",
"text": "對不同的應用程式和區域使用不同的 Azure Key Vault,以避免事務規模限制並限制對機密的訪問。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2311,7 +2452,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "預配啟用軟刪除和清除策略的 Azure Key Vault,以允許對已刪除物件進行保留保護。",
+ "text": "預配 Azure Key Vault 並啟用軟刪除和清除策略,以允許對已刪除的物件進行保留保護。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2322,7 +2464,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "通過將永久刪除密鑰、機密和證書的授權限制為專用的自定義 Microsoft Entra ID 角色,遵循最低特權模型。",
+ "text": "通過將永久刪除密鑰、機密和證書的授權限制為專門的自定義 Microsoft Entra ID 角色,遵循最低許可權模型。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2333,7 +2476,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "使用公共證書頒發機構自動執行證書管理和續訂過程,以簡化管理。",
+ "text": "與公共證書頒發機構一起自動執行證書管理和續訂流程,以簡化管理。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2345,6 +2489,7 @@
"severity": "中等",
"subcategory": "加密和金鑰",
"text": "建立金鑰和證書輪換的自動化流程。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2356,6 +2501,7 @@
"severity": "中等",
"subcategory": "加密和金鑰",
"text": "在保管庫上啟用防火牆和虛擬網路服務終結點或專用終結點,以控制對密鑰保管庫的訪問。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "安全"
},
{
@@ -2366,7 +2512,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "使用平臺中心 Azure Monitor Log Analytics 工作區審核每個 Key Vault 實例中的金鑰、證書和機密使用方式。",
+ "text": "使用平臺中心的 Azure Monitor Log Analytics 工作區來審核 Key Vault 的每個實例中的密鑰、證書和機密使用方式。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
@@ -2378,6 +2525,7 @@
"severity": "中等",
"subcategory": "加密和金鑰",
"text": "委託 Key Vault 實例化和特權訪問,並使用 Azure Policy 強制實施一致的合規配置。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "安全"
},
{
@@ -2387,7 +2535,8 @@
"link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "對於主體加密功能,預設使用 Microsoft 管理的金鑰,並在需要時使用客戶管理的密鑰。",
+ "text": "預設使用 Microsoft 管理的金鑰來實現主體加密功能,並在需要時使用客戶管理的金鑰。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2398,7 +2547,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "對每個應用程式、每個環境、每個區域使用 Azure Key Vault。",
+ "text": "每個區域每個環境的每個應用程式使用 Azure Key Vault。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
@@ -2409,7 +2559,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "如果要自帶密鑰,則並非所有考慮的服務都支援此功能。實施相關的緩解措施,以免不一致阻礙預期結果。選擇適當的區域對和災難恢復區域,以最大程度地減少延遲。",
+ "text": "如果您想使用自己的金鑰,則可能並非所有考慮的服務都支援此功能。實施相關的緩解措施,以便不一致不會妨礙預期的結果。選擇適當的區域對和災難恢復區域,以最大限度地減少延遲。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2420,7 +2571,8 @@
"service": "Key Vault",
"severity": "中等",
"subcategory": "加密和金鑰",
- "text": "對於主權登陸區域,請使用 Azure Key Vault 託管的 HSM 來儲存機密和憑據。",
+ "text": "對於主權登陸區域,請使用 Azure Key Vault 託管 HSM 來儲存機密和憑據。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -2432,6 +2584,7 @@
"severity": "中等",
"subcategory": "操作",
"text": "使用 Microsoft Entra ID 報告功能生成訪問控制審核報告。",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "安全"
},
{
@@ -2441,11 +2594,11 @@
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
"severity": "中等",
"subcategory": "操作",
- "text": "將 Azure 活動日誌匯出到 Azure Monitor 紀錄,以便長期保留數據。如有必要,導出到 Azure 存儲,以獲得超過兩年的長期存儲。",
+ "text": "將 Azure 活動日誌匯出到 Azure Monitor 紀錄,以便長期保留數據。如有必要,導出到 Azure 存儲,以便長期存儲超過兩年。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"id": "G03.03",
@@ -2453,11 +2606,11 @@
"service": "Defender",
"severity": "高",
"subcategory": "操作",
- "text": "為所有訂閱啟用Defender雲安全態勢管理。",
+ "text": "為所有訂閱啟用Defender Cloud安全態勢管理。",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"id": "G03.04",
@@ -2465,11 +2618,11 @@
"service": "Defender",
"severity": "高",
"subcategory": "操作",
- "text": "在所有訂閱上為伺服器啟用Defender雲工作負載保護計劃。",
+ "text": "為所有訂閱上的伺服器啟用Defender雲工作負載保護計劃。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"id": "G03.05",
@@ -2477,11 +2630,11 @@
"service": "Defender",
"severity": "高",
"subcategory": "操作",
- "text": "在所有訂閱上為 Azure 資源啟用 Defender 雲工作負載保護計劃。",
+ "text": "在所有訂閱上為 Azure 資源啟用 Defender Cloud 工作負載保護計劃。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"id": "G03.06",
@@ -2490,6 +2643,7 @@
"severity": "高",
"subcategory": "操作",
"text": "在 IaaS 伺服器上啟用 Endpoint Protection。",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "安全"
},
{
@@ -2500,7 +2654,8 @@
"service": "VM",
"severity": "中等",
"subcategory": "操作",
- "text": "通過 Azure Monitor 紀錄和 Defender for Cloud 監視基本作業系統修補偏移。",
+ "text": "通過 Azure Monitor 紀錄和 Defender for Cloud 監視基本作業系統修補偏差。",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "安全"
},
{
@@ -2512,42 +2667,55 @@
"severity": "中等",
"subcategory": "操作",
"text": "將預設資源配置連接到集中式 Azure Monitor Log Analytics 工作區。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
"category": "安全",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
"id": "G03.09",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "高",
+ "subcategory": "操作",
+ "text": "使用關聯日誌進行集中威脅檢測 - 將安全數據整合到一個中心位置,以便通過SIEM(安全資訊和事件管理)在各種服務之間關聯數據",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "id": "G03.10",
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "中等",
"subcategory": "操作",
- "text": "對於主權登陸區域,在 Entra ID 租戶上啟用透明日誌。",
+ "text": "對於 Sovereign Landing Zone,請在 Entra ID 租戶上啟用透明度日誌。",
"waf": "安全"
},
{
"category": "安全",
"guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "id": "G03.10",
+ "id": "G03.11",
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "中等",
"subcategory": "操作",
- "text": "對於 Sovereign Landing Zone,在 Entra ID 租戶上啟用了客戶密碼箱。",
+ "text": "對於 Sovereign Landing Zone,請在 Entra ID 租戶上啟用客戶密碼箱。",
"waf": "安全"
},
{
"category": "安全",
"guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "id": "G03.11",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security",
+ "id": "G03.12",
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
"severity": "低",
"subcategory": "操作",
- "text": "使用基於 Azure 事件網格的解決方案獲取面向日誌的即時警報",
+ "text": "使用基於 Azure 事件網格的解決方案實現面向日誌的即時警報。",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"id": "G04.01",
@@ -2555,11 +2723,11 @@
"service": "Storage",
"severity": "高",
"subcategory": "概述",
- "text": "應啟用安全傳輸到存儲帳戶",
+ "text": "啟用到存儲帳戶的安全傳輸。",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"id": "G04.02",
@@ -2571,14 +2739,14 @@
"waf": "安全"
},
{
- "ammp": true,
"category": "安全",
"guid": "6f704104-85c1-441f-96d3-c9819911645e",
"id": "G05.01",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning",
"severity": "高",
- "subcategory": "安全特權訪問",
- "text": "為 Azure 管理任務單獨設置特權管理員帳戶。",
+ "subcategory": "安全的特權訪問",
+ "text": "為 Azure 管理任務提供單獨的特權管理員帳戶。",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/",
"waf": "安全"
},
{
@@ -2588,7 +2756,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "中等",
"subcategory": "服務支援框架",
- "text": "規劃如何實現新的 Azure 服務",
+ "text": "規劃如何實施新的 Azure 服務。",
"waf": "安全"
},
{
@@ -2598,18 +2766,18 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
"severity": "中等",
"subcategory": "服務支援框架",
- "text": "規劃如何滿足 Azure 服務的服務請求",
+ "text": "規劃如何滿足 Azure 服務的服務請求。",
"waf": "安全"
},
{
- "ammp": true,
"category": "平臺自動化和DevOps",
"guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
"id": "H01.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
"severity": "高",
"subcategory": "DevOps 團隊拓撲",
- "text": "確保你有一個跨職能的DevOps平臺團隊來構建、管理和維護 Azure 登陸區域體系結構。",
+ "text": "確保您有一個跨職能的DevOps平臺團隊來構建、管理和維護您的 Azure 登陸區域體系結構。",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/",
"waf": "操作"
},
{
@@ -2619,7 +2787,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "低",
"subcategory": "DevOps 團隊拓撲",
- "text": "旨在為 Azure 登陸區域平台團隊定義函數。",
+ "text": "旨在為 Azure 登陸區域平台團隊定義功能。",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "操作"
},
{
@@ -2629,18 +2798,19 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"severity": "低",
"subcategory": "DevOps 團隊拓撲",
- "text": "旨在為應用程式工作負載團隊定義功能,使其自給自足,並且不需要 DevOps 平台團隊支援。通過使用自定義 RBAC 角色來實現此目的。",
+ "text": "旨在為應用程式工作負載團隊定義自給自足的功能,並且不需要 DevOps 平台團隊的支援。通過使用自定義 RBAC 角色來實現此目的。",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "操作"
},
{
- "ammp": true,
"category": "平臺自動化和DevOps",
"guid": "165eb5e9-b434-448a-9e24-178632186212",
"id": "H01.04",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "severity": "高",
+ "severity": "中等",
"subcategory": "DevOps 團隊拓撲",
"text": "使用 CI/CD 管道部署 IaC 專案,並確保部署和 Azure 環境的品質。",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/",
"waf": "操作"
},
{
@@ -2650,11 +2820,11 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"severity": "中等",
"subcategory": "DevOps 團隊拓撲",
- "text": "在生成過程中包括 IaC 和應用程式代碼的單元測試。",
+ "text": "在構建過程中包括 IaC 和應用程式代碼的單元測試。",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/",
"waf": "操作"
},
{
- "ammp": true,
"category": "平臺自動化和DevOps",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"id": "H01.06",
@@ -2662,7 +2832,8 @@
"service": "Key Vault",
"severity": "高",
"subcategory": "DevOps 團隊拓撲",
- "text": "使用 Key Vault 機密可避免對敏感資訊(如憑據(虛擬機器用戶密碼)、證書或密鑰)進行硬編碼。",
+ "text": "使用 Key Vault 機密來避免對敏感資訊進行硬編碼,例如憑據(虛擬機用戶密碼)、證書或密鑰。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "操作"
},
{
@@ -2672,18 +2843,18 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
"severity": "低",
"subcategory": "DevOps 團隊拓撲",
- "text": "通過訂閱自動售貨為應用程式和工作負載的新登陸區域實現自動化",
+ "text": "通過訂閱自動售貨機為應用程式和工作負載的新登錄區實施自動化。",
"waf": "操作"
},
{
- "ammp": true,
"category": "平臺自動化和DevOps",
"guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
"id": "H02.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "高",
"subcategory": "開發生命週期",
- "text": "確保版本控制系統用於應用程式的原始程式碼和開發的 IaC。Microsoft 推薦 Git。",
+ "text": "確保將版本控制系統用於應用程式的原始程式碼和開發的 IaC。Microsoft 建議使用 Git。",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/",
"waf": "操作"
},
{
@@ -2693,7 +2864,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "低",
"subcategory": "開發生命週期",
- "text": "遵循分支策略,使團隊能夠更好地協作,並有效地管理 IaC 和應用程式代碼的版本控制。查看 Github Flow 等選項。",
+ "text": "遵循分支策略,使團隊能夠更好地協作並有效地管理 IaC 和應用程式代碼的版本控制。查看 Github Flow 等選項。",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/",
"waf": "操作"
},
{
@@ -2703,7 +2875,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
"severity": "中等",
"subcategory": "開發生命週期",
- "text": "採用拉取請求策略來説明控制合併到分支中的代碼更改。",
+ "text": "採用拉取請求策略來説明保持對合併到分支中的代碼更改的控制。",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/",
"waf": "操作"
},
{
@@ -2713,36 +2886,37 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
"severity": "中等",
"subcategory": "開發生命週期",
- "text": "建立使用代碼實現快速修復的流程。始終在團隊的待辦事項中註冊快速修復,以便以後可以重新設計每個修復程式,並且可以限制技術債務。",
+ "text": "建立使用代碼實現快速修復的流程。始終在團隊的積壓工作中註冊快速修復,以便以後可以重新處理每個修復,並且可以限制技術債務。",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/",
"waf": "操作"
},
{
- "ammp": true,
"category": "平臺自動化和DevOps",
"guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
"id": "H03.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
"severity": "高",
"subcategory": "發展戰略",
- "text": "利用聲明性基礎結構即代碼工具(如 Azure Bicep、ARM 範本或 Terraform)來構建和維護 Azure 登陸區域體系結構。從平臺和應用程式工作負載的角度來看。",
+ "text": "利用 Azure Bicep、ARM 範本或 Terraform 等聲明性基礎結構即代碼工具來構建和維護 Azure 登陸區域體系結構。從平臺和應用程式工作負載的角度來看都是如此。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/",
"waf": "操作"
},
{
- "ammp": true,
"category": "平臺自動化和DevOps",
"guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
"id": "H04.01",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure",
"severity": "高",
"subcategory": "安全",
- "text": "將安全性集成到 DevOps 中已經合併的開發和運營流程中,以降低創新流程中的風險。",
+ "text": "將安全性集成到 DevOps 中已經組合的開發和運營流程中,以降低創新流程中的風險。",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/",
"waf": "操作"
}
],
"metadata": {
"name": "Azure Landing Zone Review",
"state": "GA",
- "timestamp": "June 17, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -2758,19 +2932,19 @@
],
"status": [
{
- "description": "此檢查尚未查看",
+ "description": "尚未查看此檢查",
"name": "未驗證"
},
{
- "description": "有一個與此檢查關聯的操作項",
+ "description": "存在與此檢查關聯的操作項",
"name": "打開"
},
{
- "description": "此檢查已通過驗證,並且沒有與之關聯的進一步操作項",
+ "description": "此檢查已經過驗證,沒有與之關聯的其他操作項",
"name": "實現"
},
{
- "description": "建議已理解,但當前需求不需要",
+ "description": "建議已理解,但當前要求不需要",
"name": "不需要"
},
{
diff --git a/checklists/aoai_checklist.en.json b/checklists/aoai_checklist.en.json
new file mode 100644
index 000000000..c7b4b9dbf
--- /dev/null
+++ b/checklists/aoai_checklist.en.json
@@ -0,0 +1,1070 @@
+{
+ "items": [
+ {
+ "category": "Responsible AI",
+ "subcategory": "Metaprompting",
+ "text": "Follow Metaprompting guardrails for resonsible AI",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "id": "AOAI.1",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Load Balancing",
+ "text": "Consider Gateway patterns with APIM or solutions like AI central for better rate limiting, load balancing, authentication and logging",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "id": "AOAI.10",
+ "severity": "High",
+ "link": "https://github.com/Azure-Samples/AI-Gateway"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Monitoring",
+ "text": "Enable monitoring for your AOAI instances",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "id": "AOAI.11",
+ "severity": "High",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Alerts",
+ "text": "Create alerts to notify teams of events such as an entry in the activity log created by an action performed on the resource, such as regenerating its subscription keys or a metric threshold such as the number of errors exceeding 10 in an hour",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "id": "AOAI.12",
+ "graph": "resources | where type == 'microsoft.insights/metricalerts' | extend compliant = (properties.targetResourceType =~ 'Microsoft.CognitiveServices/accounts') | project id, compliant",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Monitoring",
+ "text": "Monitor token usage to prevent service disruptions due to capacity",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "id": "AOAI.13",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Observability",
+ "text": "observe metrics like processed inference tokens, generated completion tokens monitor for rate limit",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "id": "AOAI.14",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Observability",
+ "text": "Enable and configure Diagnostics for the Azure OpenAI Service. If not sufficient, consider using a gateway such as Azure API Managements in front of Azure OpenAI to log both incoming prompts and outgoing responses, where permitted",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "id": "AOAI.15",
+ "severity": "Low",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Infrastructure Deployment",
+ "text": "Use Infrastructure as code to deploy the Azure OpenAI Service, model deployments, and all related resources",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "AOAI.16",
+ "severity": "High",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Authentication",
+ "text": "Use Microsoft Entra Authentication with Managed Identity instead of API Key",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "AOAI.17",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity"
+ },
+ {
+ "category": "Responsible AI",
+ "subcategory": "Evaluation",
+ "text": "Evaluate the performance/accuracy of the system with a known golden dataset which has the inputs and the correct answers. Leverage capabilities in PromptFlow for Evaluation.",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "id": "AOAI.18",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Hosting model",
+ "text": "Evaluate usage of Provisioned throughput model ",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "id": "AOAI.19",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency"
+ },
+ {
+ "category": "Responsible AI",
+ "subcategory": "Content Safety",
+ "text": "Review and implement Azure AI content safety",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "id": "AOAI.2",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Throughput definition",
+ "text": "Define and evaluate the throughput of the system based on tokens & response per minute and align with requirements",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "id": "AOAI.20",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Latency improvement",
+ "text": "Improve latency of the system by limiting token sizes, streaming options for applications like chatbots or conversational interfaces. Streaming can enhance the perceived performance of Azure OpenAI applications by delivering responses to users in an incremental manner",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "AOAI.21",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Elasticity segregation",
+ "text": "Estimate elasticity demands to determine synchronous and batch request segregation based on priority. For high priority, use synchronous approach and for low priority, asynchronous batch processing with queue is preferred",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "id": "AOAI.22",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Benchmarking",
+ "text": "Benchmark token consumption requirements based on estimated demands from consumers. Consider using the Azure OpenAI benchmarking tool to help you validate the throughput if you are using Provisioned Throughput Unit deployments",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "id": "AOAI.23",
+ "severity": "High",
+ "link": "https://github.com/Azure/azure-openai-benchmark/"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Elasticity ",
+ "text": "If you are using Provisioned Throughput Units (PTUs), consider deploying a token-per-minute (TPM) deployment for overflow requests. Use a gateway to route requests to the TPM deployment when the PTU limits are reached.",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "id": "AOAI.24",
+ "severity": "Medium",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Model choice",
+ "text": "Choose the right model for the right task. Pick models with right tradeoff between speed, quality of response and output complexity",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "id": "AOAI.25",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Fine tuning",
+ "text": "Have a baseline for performance without fine-tuning for knowing whether or not fine-tuning has improved model performance",
+ "waf": "Performance",
+ "service": "Azure OpenAI",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "id": "AOAI.26",
+ "severity": "Medium",
+ "link": "https://github.com/Azure/azure-openai-benchmark/"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Multi-region architecture",
+ "text": "Deploy multiple OAI instances across regions",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "id": "AOAI.27",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Load balancing",
+ "text": "Implement retry & healthchecks with Gateway pattern like APIM",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "id": "AOAI.28",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Quotas",
+ "text": "Ensure having adequate quotas of TPM & RPM for the workload",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "id": "AOAI.29",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota"
+ },
+ {
+ "category": "Responsible AI",
+ "subcategory": "UX best practice",
+ "text": "Review the considerations in HAI toolkit guidance and apply those interaction practices for the slution",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "id": "AOAI.3",
+ "severity": "Medium",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Load balancing",
+ "text": "Deploy separate fine tuned models across regions if finetuning is employed",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "id": "AOAI.30",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Data Backup and Disaster Recovery",
+ "text": "Regularly backup and replicate critical data to ensure data availability and recoverability in case of data loss or system failures. Leverage Azure's backup and disaster recovery services to protect your data.",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "id": "AOAI.31",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "SLA considerations",
+ "text": "Azure AI search service tiers should be choosen to have a SLA ",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "id": "AOAI.32",
+ "graph": "resources | where type == 'microsoft.search/searchservices' | extend compliant = (sku.name != 'free' and properties.replicaCount >= 3) | project id, compliant",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Data Sensitivity",
+ "text": "Classify data and sensitivity, labeling with Microsoft Purview before generating the embeddings and make sure to treat the embeddings generated with same sensitivity and classification",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "id": "AOAI.33",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/purview/purview"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Encryption at Rest",
+ "text": "Encrypt data used for RAG with SSE/Disk encryption with optional BYOK",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "id": "AOAI.34",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Transit Encryption",
+ "text": "Ensure TLS is enforced for data in transit across data sources, AI search used for Retrieval-Augmented Generation (RAG) and LLM communication",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "id": "AOAI.35",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Access Control",
+ "text": "Use RBAC to manage access to Azure OpenAI services. Assign appropriate permissions to users and restrict access based on their roles and responsibilities",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "id": "AOAI.36",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Data Masking and Redaction",
+ "text": "Implement data encryption, masking or redaction techniques to hide sensitive data or replace it with obfuscated values in non-production environments or when sharing data for testing or troubleshooting purposes",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "id": "AOAI.37",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Threat Detection and Monitoring",
+ "text": "Utilize Azure Defender to detect and respond to security threats and set up monitoring and alerting mechanisms to identify suspicious activities or breaches. Leverage Azure Sentinel for advanced threat detection and response",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "id": "AOAI.38",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/ai-onboarding"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Data Retention and Disposal",
+ "text": "Establish data retention and disposal policies to adhere to compliance regulations. Implement secure deletion methods for data that is no longer required and maintain an audit trail of data retention and disposal activities",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "id": "AOAI.39",
+ "severity": "Medium",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791"
+ },
+ {
+ "category": "Responsible AI",
+ "subcategory": "Jail break Safety",
+ "text": "Implement Prompt shields and groundedness detection using Content Safety ",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "id": "AOAI.4",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Data Privacy and Compliance",
+ "text": "Ensure compliance with relevant data protection regulations, such as GDPR or HIPAA, by implementing privacy controls and obtaining necessary consents or permissions for data processing activities.",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "id": "AOAI.40",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/compliance/"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Employee Awareness and Training",
+ "text": "Educate your employees about data security best practices, the importance of handling data securely, and potential risks associated with data breaches. Encourage them to follow data security protocols diligently.",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "id": "AOAI.41",
+ "severity": "Medium"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Environment segregation",
+ "text": "Keep production data separate from development and testing data. Only use real sensitive data in production and utilize anonymized or synthetic data in development and test environments.",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "id": "AOAI.42",
+ "severity": "High"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Index Segregation",
+ "text": "If you have varying levels of data sensitivity, consider creating separate indexes for each level. For instance, you could have one index for general data and another for sensitive data, each governed by different access protocols",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "id": "AOAI.43",
+ "severity": "Medium"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Sensitive Data in Separate Instances",
+ "text": "Take segregation a step further by placing sensitive datasets in different instances of the service. Each instance can be controlled with its own specific set of RBAC policies",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "id": "AOAI.44",
+ "severity": "Medium"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Embedding and Vector handling",
+ "text": "Recognize that embeddings and vectors generated from sensitive information are themselves sensitive. This data should be afforded the same protective measures as the source material",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "id": "AOAI.45",
+ "severity": "High"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Access control",
+ "text": "Apply RBAC to th data stores having embeddings and vectors and scope access based on role's access requirements",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "id": "AOAI.46",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Network security",
+ "text": "Configure private endpoint for AI services to restrict service access within your network",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "id": "AOAI.47",
+ "graph": "resources | where type =~ 'Microsoft.CognitiveServices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (properties.privateEndpointConnections != '[]' and properties.publicNetworkAccess !~ 'enabled')",
+ "severity": "High",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Network security",
+ "text": "Enforce strict inbound and outbound traffic control with Azure Firewall and UDRs and limit the external integration points",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "id": "AOAI.48",
+ "severity": "High"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Control Network Access",
+ "text": "Implement network segmentation and access controls to restrict access to the LLM application only to authorized users and systems and prevent lateral movement",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "id": "AOAI.49",
+ "severity": "High"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Token Optimization",
+ "text": "Use prompt compression tools like LLMLingua or gprtrim",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "id": "AOAI.5",
+ "severity": "Medium",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Secure APIs and Endpoints",
+ "text": "Ensure that APIs and endpoints used by the LLM application are properly secured with authentication and authorization mechanisms, such as Managed identities, API keys or OAuth, to prevent unauthorized access.",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "id": "AOAI.50",
+ "graph": "resources | where type =~ 'Microsoft.CognitiveServices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (isnotnull(identity))",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Implement Strong Authentication",
+ "text": "Enforce strong end user authentication mechanisms, such as multi-factor authentication, to prevent unauthorized access to the LLM application and associated network resources",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "id": "AOAI.51",
+ "severity": "Medium",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Use Network Monitoring",
+ "text": "Implement network monitoring tools to detect and analyze network traffic for any suspicious or malicious activities. Enable logging to capture network events and facilitate forensic analysis in case of security incidents",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "id": "AOAI.52",
+ "severity": "Medium"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Security Audits and Penetration Testing",
+ "text": "Conduct security audits and penetration testing to identify and address any network security weaknesses or vulnerabilities in the LLM application's network infrastructure",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "id": "AOAI.53",
+ "severity": "Medium"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Infrastructure Deployment",
+ "text": "Azure AI Services are properly tagged for better management",
+ "waf": "Operational Excellence",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "id": "AOAI.54",
+ "graph": "resources | where type == 'microsoft.cognitiveservices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (tags != '{}')",
+ "service": "Azure OpenAI",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Infrastructure Deployment",
+ "text": "Azure AI Service accounts follows organizational naming conventions",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "AOAI.55",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Diagnostics Logging",
+ "text": "Diagnostic logs in Azure AI services resources should be enabled",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "AOAI.56",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": "Entra ID based access",
+ "text": "Key access (local authentication) is recommended to be disabled for security. After disabling key based access, Microsoft Entra ID becomes the only access method, which allows maintaining minimum privilege principle and granular control. ",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "AOAI.57",
+ "graph": "resources | where type =~ 'Microsoft.CognitiveServices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (properties.disableLocalAuth == true)",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Secure Key Management",
+ "text": "Store and manage keys securely using Azure Key Vault. Avoid hard-coding or embedding sensitive keys within your LLM application's code and retrieve them securely from Azure Key Vault using managed identities",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "AOAI.58",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Key Rotation and Expiration",
+ "text": "Regularly rotate and expire keys stored in Azure Key Vault to minimize the risk of unauthorized access.",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "id": "AOAI.59",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Token Optimization",
+ "text": "Use tiktoken to understand token sizes for token optimizations in conversational mode",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "id": "AOAI.6",
+ "severity": "High",
+ "link": "https://github.com/openai/tiktoken"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Secure coding practice",
+ "text": "Follow secure coding practices to prevent common vulnerabilities such as injection attacks, cross-site scripting (XSS), or security misconfigurations",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "id": "AOAI.60",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Patching and updates",
+ "text": "Setup a process to regularly update and patch the LLM libraries and other system components",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "id": "AOAI.61",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops"
+ },
+ {
+ "category": "Responsible AI",
+ "subcategory": "Governance",
+ "text": "Adhere to Azure OpenAI or other LLMs terms of use, policies and guidance and allowed use cases",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "id": "AOAI.62",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Cost familiarization",
+ "text": "Understand difference in cost of base models and fine tuned models and token step sizes",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "id": "AOAI.63",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Batch processing",
+ "text": "Batch requests, where possible, to minimize the per-call overhead which can reduce overall costs. Ensure you optimize batch size",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "id": "AOAI.64",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Cost monitoring",
+ "text": "Set up a cost tracking system that monitors model usage and use that information to help inform model choices and prompt sizes",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "id": "AOAI.65",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Token limit",
+ "text": "Set a maximum limit on the number of tokens per model response (max_tokens and the number of completions to generate). Optimize the size to ensure it is large enough for a valid response",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "id": "AOAI.66",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "AI Search Vector Limits",
+ "text": "Plan and manage AI Search Vector storage",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "id": "AOAI.68",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "DevOps",
+ "text": "Ensure deployment of Azure OpenAI instances across your various environments, such as development, test, and production supporting lrarning & experimentation. Apply LLMOps practices to automate the lifecycle management of your GenAI applications",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "id": "AOAI.69",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Costing Model",
+ "text": "Evaluate usage of billing models - PAYG vs PTU. Start with PAYG and consider PTU when the usage is predictable in production since it offers dedicated memory and compute, reserved capacity, and consistent maximum latency for the specified model version",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "id": "AOAI.7",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "DevOps",
+ "text": "Evaluate the quality of prompts and applications when switching between model versions",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "id": "AOAI.70",
+ "severity": "Medium",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Development",
+ "text": "Evaluate, monitor and refine your GenAI apps for features like groundedness, relevance, accuracy, coherence and fluency",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "id": "AOAI.71",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Development",
+ "text": "Evaluate your Azure AI Search results based on different search parameters",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "id": "AOAI.72",
+ "severity": "Medium"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Development",
+ "text": "Look at fine tuning models as way of increasing accuracy only when you have tried other basic approaches like prompt engineering and RAG with your data",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "id": "AOAI.73",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Development",
+ "text": "Use prompt engineering techniques to improve the accuracy of LLM responses",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "id": "AOAI.74",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Security Audits and Penetration Testing",
+ "text": "Red team your GenAI applications",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "id": "AOAI.75",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "End user feedback",
+ "text": "Provide end users with scoring options for LLM responses and track these scores. ",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "id": "AOAI.76",
+ "severity": "Medium",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Quota Management",
+ "text": "Consider Quota management practices. Use dynamic quota for certain use cases when your application can use extra capacity opportunistically or the application itself is driving the rate at which the Azure OpenAI API is called",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "id": "AOAI.8",
+ "severity": "High",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Load Balancing",
+ "text": "Use Load balancer solutions like APIM based gateway for balancing load and capacity across services and regions",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "id": "AOAI.9",
+ "severity": "Medium",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Fine tuning",
+ "text": "Follow the guidance for fine-tuning with large data files and import the data from an Azure blob store. Large files, 100 MB or larger, can become unstable when uploaded through multipart forms because the requests are atomic and can't be retried or resumed",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc411",
+ "id": "AOAI.77",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython-new&pivots=programming-language-studio#import-training-data-from-azure-blob-store"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Monitoring",
+ "text": "Manage rate limits for your model deployments and monitor usage of tokens per minute (TPM) and requests per minute (RPM) for pay-as-you-go deployments",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc412",
+ "id": "AOAI.78",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Monitoring",
+ "text": "Monitor provision-managed utilization if you're using the provisioned throughput payment model",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc413",
+ "id": "AOAI.79",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai"
+ },
+ {
+ "category": "Responsible AI",
+ "subcategory": "Content Safety",
+ "text": "Tune content filters to minimize false positives from overly aggressive filters",
+ "waf": "Reliability",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc414",
+ "id": "AOAI.80",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/content-filters"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Key Management",
+ "text": "Use customer-managed keys for fine-tuned models and training data that's uploaded to Azure OpenAI",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc415",
+ "id": "AOAI.81",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/encrypt-data-at-rest"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Jailbreak protection",
+ "text": "Implement jailbreak risk detection to safeguard your language model deployments against prompt injection attacks",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc416",
+ "id": "AOAI.82",
+ "graph": "resources | where type == 'microsoft.cognitiveservices/accounts' and kind =~ 'contentsafety' | project id, compliant = 1",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Quota exhaustion",
+ "text": "Use security controls like throttling, service isolation and gateway pattern to prevent attacks that might exhaust model usage quotas",
+ "waf": "Security",
+ "service": "Azure OpenAI",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc417",
+ "id": "AOAI.83",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Cost estimation",
+ "text": "Develop your cost model, considering prompt sizes. Understanding prompt input and response sizes and how text translates into tokens helps you create a viable cost model",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a9",
+ "id": "AOAI.84",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Model selection",
+ "text": "Consider model pricing and capabilities when you choose models. Start with less-costly models for less-complex tasks like text generation or completion tasks and for complex tasks like language translation or content understanding, consider using more advanced models. Optimize costs while still achieving the desired application performance",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a1",
+ "id": "AOAI.85",
+ "severity": "Medium",
+ "link": "https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Usage Optimization",
+ "text": "Maximize Azure OpenAI price breakpoints like fine-tuning and model breakpoints like image generation to your advantage. Fine-tuning is charged per hour, use as much time as you have available per hour to improve results without slipping into the next billing period. The cost for generating 100 images is the same as the cost for 1 image",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a2",
+ "id": "AOAI.86",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Usage Optimization",
+ "text": "Remove unused fine-tuned models when they're no longer being consumed to avoid incurring an ongoing hosting fee",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a3",
+ "id": "AOAI.87",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs"
+ },
+ {
+ "category": "Cost Optimization",
+ "subcategory": "Token Optimization",
+ "text": "Create concise prompts that provide enough context for the model to generate a useful response. Also ensure that you optimize the limit of the response length.",
+ "waf": "Cost Optimization",
+ "service": "Azure OpenAI",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8g",
+ "id": "AOAI.88",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "IaC",
+ "text": "Use infrastructure as code (IaC) to deploy Azure OpenAI, model deployments, and other infrastructure required for fine-tuning models",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec219",
+ "id": "AOAI.89",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/ai-services/create-account-bicep"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Development",
+ "text": "Consider using dedicated model deployments per consumer group to provide per-model usage isolation that can help prevent noisy neighbors between your consumer groups",
+ "waf": "Operational Excellence",
+ "service": "Azure OpenAI",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5855",
+ "id": "AOAI.90",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/service/openai"
+ }
+ ],
+ "categories": [
+ {
+ "name": "Identity and Access Management"
+ },
+ {
+ "name": "Network Topology and Connectivity"
+ },
+ {
+ "name": "BC and DR"
+ },
+ {
+ "name": "Governance and Security"
+ },
+ {
+ "name": "Cost Governance"
+ },
+ {
+ "name": "Operations Management"
+ },
+ {
+ "name": "Application Deployment"
+ },
+ {
+ "name": "Responsible AI"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Security"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Performance"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "status": [
+ {
+ "name": "Not verified",
+ "description": "This check has not been looked at yet"
+ },
+ {
+ "name": "Open",
+ "description": "There is an action item associated to this check"
+ },
+ {
+ "name": "Fulfilled",
+ "description": "This check has been verified, and there are no further action items associated to it"
+ },
+ {
+ "name": "Not required",
+ "description": "Recommendation understood, but not needed by current requirements"
+ },
+ {
+ "name": "N/A",
+ "description": "Not applicable for current design"
+ }
+ ],
+ "severities": [
+ {
+ "name": "High"
+ },
+ {
+ "name": "Medium"
+ },
+ {
+ "name": "Low"
+ }
+ ],
+ "metadata": {
+ "name": "Azure OpenAI Review",
+ "state": "Preview",
+ "waf": "all",
+ "timestamp": "July 24, 2024"
+ }
+}
diff --git a/checklists/aoai_checklist.es.json b/checklists/aoai_checklist.es.json
new file mode 100644
index 000000000..0144987c6
--- /dev/null
+++ b/checklists/aoai_checklist.es.json
@@ -0,0 +1,920 @@
+{
+ "categories": [
+ {
+ "name": "Gestión de identidades y accesos"
+ },
+ {
+ "name": "Topología de red y conectividad"
+ },
+ {
+ "name": "BC y RD"
+ },
+ {
+ "name": "Gobernanza y seguridad"
+ },
+ {
+ "name": "Gobernanza de costos"
+ },
+ {
+ "name": "Gestión de Operaciones"
+ },
+ {
+ "name": "Implementación de aplicaciones"
+ },
+ {
+ "name": "IA responsable"
+ }
+ ],
+ "items": [
+ {
+ "category": "IA responsable",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "id": "AOAI.1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Metaprompting (Metaincitación)",
+ "text": "Siga las barreras de seguridad de Metaprompting para una IA responsable",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "id": "AOAI.10",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Equilibrio de carga",
+ "text": "Considere la posibilidad de crear patrones de puerta de enlace con APIM o soluciones como AI Central para mejorar la limitación de velocidad, el equilibrio de carga, la autenticación y el registro",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "id": "AOAI.11",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Monitorización",
+ "text": "Habilitación de la supervisión para las instancias de AOAI",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "id": "AOAI.12",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Alertas",
+ "text": "Cree alertas para notificar a los equipos de eventos, como una entrada en el registro de actividad creada por una acción realizada en el recurso, como la regeneración de sus claves de suscripción, o un umbral de métrica, como el número de errores que superan los 10 en una hora",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "id": "AOAI.13",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Monitorización",
+ "text": "Supervise el uso de tokens para evitar interrupciones del servicio debido a la capacidad",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "id": "AOAI.14",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Observancia",
+ "text": "Observe métricas como tokens de inferencia procesados, tokens de finalización generados, monitoree el límite de velocidad",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "id": "AOAI.15",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "subcategory": "Observancia",
+ "text": "Si los diagnósticos no son suficientes para usted, considere la posibilidad de usar una puerta de enlace como Azure API Managements frente a Azure OpenAI para registrar tanto los mensajes entrantes como las respuestas salientes, cuando esté permitido",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "AOAI.16",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Despliegue de infraestructura",
+ "text": "Use la infraestructura como código para implementar el servicio Azure OpenAI, las implementaciones de modelos y todos los recursos relacionados",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "AOAI.17",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Autenticación",
+ "text": "Uso de la autenticación de Microsoft Entra con identidad administrada en lugar de clave de API",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "IA responsable",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "id": "AOAI.18",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Evaluación",
+ "text": "Evalúe el rendimiento/precisión del sistema con un conjunto de datos dorado conocido que tenga las entradas y las respuestas correctas. Aproveche las capacidades de PromptFlow para la evaluación.",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "id": "AOAI.19",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Modelo de alojamiento",
+ "text": "Evaluación del uso del modelo de rendimiento aprovisionado ",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "IA responsable",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "id": "AOAI.2",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Seguridad del contenido",
+ "text": "Revisión e implementación de la seguridad del contenido de Azure AI",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "id": "AOAI.20",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Definición de rendimiento",
+ "text": "Defina y evalúe el rendimiento del sistema en función de los tokens y la respuesta por minuto y alinee con los requisitos",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "AOAI.21",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Mejora de la latencia",
+ "text": "Mejore la latencia del sistema limitando el tamaño de los tokens, las opciones de transmisión",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "id": "AOAI.22",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Segregación por elasticidad",
+ "text": "Calcule las demandas de elasticidad para determinar la segregación de solicitudes sincrónicas y por lotes en función de la prioridad. Para la prioridad alta, utilice el enfoque sincrónico y para la prioridad baja, se prefiere el procesamiento por lotes asincrónico con cola",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "id": "AOAI.23",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Evaluación comparativa",
+ "text": "Compare los requisitos de consumo de tokens en función de las demandas estimadas de los consumidores. Considere la posibilidad de usar la herramienta de pruebas comparativas de Azure OpenAI para ayudarle a validar el rendimiento si usa implementaciones de unidades de rendimiento aprovisionadas",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "id": "AOAI.24",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Elasticidad ",
+ "text": "Si usa unidades de rendimiento aprovisionadas (PTU), considere la posibilidad de implementar una implementación de token por minuto (TPM) para las solicitudes de desbordamiento. Use una puerta de enlace para enrutar las solicitudes a la implementación de TPM cuando se alcancen los límites de PTU.",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "id": "AOAI.25",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Elección del modelo",
+ "text": "Elija el modelo adecuado para la tarea correcta. Elija modelos con el equilibrio adecuado entre velocidad, calidad de respuesta y complejidad de salida",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "id": "AOAI.26",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Puesta a punto",
+ "text": "Tener una línea de base para el rendimiento sin ajuste fino para saber si el ajuste fino ha mejorado o no el rendimiento del modelo",
+ "waf": "Rendimiento"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "id": "AOAI.27",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "subcategory": "Arquitectura multirregional",
+ "text": "Implementación de varias instancias de OAI en todas las regiones",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "id": "AOAI.28",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Equilibrio de carga",
+ "text": "Implemente reintentos y comprobaciones de estado con el patrón de puerta de enlace como APIM",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "id": "AOAI.29",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Cuotas",
+ "text": "Asegúrese de tener cuotas adecuadas de TPM y RPM para la carga de trabajo",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "IA responsable",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "id": "AOAI.3",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Mejores prácticas de UX",
+ "text": "Revise las consideraciones de la guía del kit de herramientas de HAI y aplique esas prácticas de interacción para el slution",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "id": "AOAI.30",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Equilibrio de carga",
+ "text": "Implemente modelos de ajuste de precisión independientes en todas las regiones si se emplea el ajuste de precisión",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "id": "AOAI.31",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Copia de seguridad de datos y recuperación ante desastres",
+ "text": "Realice copias de seguridad y replique regularmente los datos críticos para garantizar la disponibilidad y la capacidad de recuperación de los datos en caso de pérdida de datos o fallos del sistema. Aproveche los servicios de copia de seguridad y recuperación ante desastres de Azure para proteger sus datos.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "id": "AOAI.32",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Consideraciones sobre el SLA",
+ "text": "Los niveles de servicio de búsqueda de Azure AI deben elegirse para tener un Acuerdo de Nivel de Servicio ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "id": "AOAI.33",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "subcategory": "Confidencialidad de los datos",
+ "text": "Clasifique los datos y la confidencialidad, etiquetando con Microsoft Purview antes de generar las incrustaciones y asegúrese de tratar las incrustaciones generadas con la misma confidencialidad y clasificación",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "id": "AOAI.34",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Cifrado en reposo",
+ "text": "Cifre los datos utilizados para RAG con cifrado SSE/Disk con BYOK opcional",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "id": "AOAI.35",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Encriptación de tránsito",
+ "text": "Asegúrese de que TLS se aplica a los datos en tránsito a través de fuentes de datos, la búsqueda de IA utilizada para la generación aumentada de recuperación (RAG) y la comunicación de LLM",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "id": "AOAI.36",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Control de acceso",
+ "text": "Use RBAC para administrar el acceso a los servicios de Azure OpenAI. Asigne los permisos adecuados a los usuarios y restrinja el acceso en función de sus funciones y responsabilidades",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "id": "AOAI.37",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Enmascaramiento y redacción de datos",
+ "text": "Implemente técnicas de cifrado, enmascaramiento o redacción de datos para ocultar datos confidenciales o reemplazarlos con valores ofuscados en entornos que no sean de producción o al compartir datos con fines de prueba o solución de problemas",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "id": "AOAI.38",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Detección y monitoreo de amenazas",
+ "text": "Use Azure Defender para detectar y responder a las amenazas de seguridad y configurar mecanismos de supervisión y alerta para identificar actividades sospechosas o infracciones. Aproveche Azure Sentinel para la detección y respuesta a amenazas avanzadas",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "id": "AOAI.39",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Retención y eliminación de datos",
+ "text": "Establezca políticas de retención y eliminación de datos para cumplir con las regulaciones de cumplimiento. Implemente métodos de eliminación seguros para los datos que ya no son necesarios y mantenga un registro de auditoría de las actividades de retención y eliminación de datos",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "IA responsable",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "id": "AOAI.4",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Seguridad en la fuga de la cárcel",
+ "text": "Implemente los escudos de aviso y la detección de conexión a tierra mediante Content Safety ",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "id": "AOAI.40",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Privacidad de datos y cumplimiento",
+ "text": "Garantice el cumplimiento de las normativas de protección de datos pertinentes, como el RGPD o la HIPAA, mediante la implementación de controles de privacidad y la obtención de los consentimientos o permisos necesarios para las actividades de tratamiento de datos.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "id": "AOAI.41",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Concienciación y formación de los empleados",
+ "text": "Eduque a sus empleados sobre las mejores prácticas de seguridad de datos, la importancia de manejar los datos de forma segura y los riesgos potenciales asociados con las violaciones de datos. Anímelos a seguir diligentemente los protocolos de seguridad de datos.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "id": "AOAI.42",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Segregación del medio ambiente",
+ "text": "Mantenga los datos de producción separados de los datos de desarrollo y pruebas. Utilice únicamente datos confidenciales reales en producción y utilice datos anónimos o sintéticos en entornos de desarrollo y prueba.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "id": "AOAI.43",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Segregación de índices",
+ "text": "Si tiene distintos niveles de confidencialidad de datos, considere la posibilidad de crear índices independientes para cada nivel. Por ejemplo, podría tener un índice para los datos generales y otro para los datos confidenciales, cada uno gobernado por diferentes protocolos de acceso",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "id": "AOAI.44",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Datos confidenciales en instancias separadas",
+ "text": "Lleve la segregación un paso más allá colocando conjuntos de datos confidenciales en diferentes instancias del servicio. Cada instancia se puede controlar con su propio conjunto específico de políticas RBAC",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "id": "AOAI.45",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Incrustación y manejo de vectores",
+ "text": "Reconozca que las incrustaciones y los vectores generados a partir de información confidencial son en sí mismos confidenciales. Estos datos deben recibir las mismas medidas de protección que el material de origen",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "id": "AOAI.46",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Control de acceso",
+ "text": "Aplique RBAC a los almacenes de datos que tienen incrustaciones y vectores y alcance el acceso en función de los requisitos de acceso del rol",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "id": "AOAI.47",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Seguridad de la red",
+ "text": "Configure un punto de conexión privado para que los servicios de IA restrinjan el acceso al servicio dentro de su red",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "id": "AOAI.48",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Seguridad de la red",
+ "text": "Aplique un estricto control del tráfico entrante y saliente con Azure Firewall y UDR, y limite los puntos de integración externos",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "id": "AOAI.49",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Controlar el acceso a la red",
+ "text": "Implemente la segmentación de la red y los controles de acceso para restringir el acceso a la aplicación LLM solo a los usuarios y sistemas autorizados y evitar el movimiento lateral",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "id": "AOAI.5",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Optimización de tokens",
+ "text": "Utilice herramientas de compresión rápida como LLMLingua o gprtrim",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "id": "AOAI.50",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "API y endpoints seguros",
+ "text": "Asegúrese de que las API y los puntos finales utilizados por la aplicación LLM estén correctamente protegidos con mecanismos de autenticación y autorización, como identidades administradas, claves de API u OAuth, para evitar el acceso no autorizado.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "id": "AOAI.51",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Implementación de una autenticación sólida",
+ "text": "Aplique mecanismos sólidos de autenticación de usuario final, como la autenticación multifactor, para evitar el acceso no autorizado a la aplicación LLM y a los recursos de red asociados",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "id": "AOAI.52",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Uso de la supervisión de red",
+ "text": "Implemente herramientas de monitoreo de red para detectar y analizar el tráfico de red en busca de actividades sospechosas o maliciosas. Habilite el registro para capturar eventos de red y facilitar el análisis forense en caso de incidentes de seguridad",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "id": "AOAI.53",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Auditorías de seguridad y pruebas de penetración",
+ "text": "Realizar auditorías de seguridad y pruebas de penetración para identificar y abordar cualquier debilidad o vulnerabilidad de seguridad de red en la infraestructura de red de la aplicación LLM",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "id": "AOAI.54",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "subcategory": "Despliegue de infraestructura",
+ "text": "Los servicios de Azure AI están etiquetados correctamente para una mejor administración",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "AOAI.55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "subcategory": "Despliegue de infraestructura",
+ "text": "Las cuentas de Azure AI Service siguen las convenciones de nomenclatura de la organización",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "AOAI.56",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Registro de diagnósticos",
+ "text": "Los registros de diagnóstico en los recursos de servicios de Azure AI deben estar habilitados",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de identidades y accesos",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "AOAI.57",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Acceso basado en ID de Entra",
+ "text": "Se recomienda deshabilitar el acceso a claves (autenticación local) por seguridad. Después de deshabilitar el acceso basado en claves, el identificador de Microsoft Entra se convierte en el único método de acceso, lo que permite mantener el principio de privilegio mínimo y el control granular. ",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "AOAI.58",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Gestión segura de claves",
+ "text": "Almacene y administre claves de forma segura con Azure Key Vault. Evite codificar de forma rígida o incrustar claves confidenciales en el código de la aplicación de LLM y recupérelas de forma segura de Azure Key Vault mediante identidades administradas",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "id": "AOAI.59",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Rotación y caducidad de claves",
+ "text": "Rotar y expirar periódicamente las claves almacenadas en Azure Key Vault para minimizar el riesgo de acceso no autorizado.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "id": "AOAI.6",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Optimización de tokens",
+ "text": "Use tiktoken para comprender los tamaños de los tokens para las optimizaciones de tokens en el modo conversacional",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "id": "AOAI.60",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Práctica de codificación segura",
+ "text": "Siga prácticas de codificación seguras para evitar vulnerabilidades comunes, como ataques de inyección, secuencias de comandos entre sitios (XSS) o errores de configuración de seguridad.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "id": "AOAI.61",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Aplicación de parches y actualizaciones",
+ "text": "Configurar un proceso para actualizar y parchear regularmente las bibliotecas de LLM y otros componentes del sistema",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "IA responsable",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "id": "AOAI.62",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Gobernanza",
+ "text": "Cumplir con los términos de uso, las directivas y las directrices de Azure OpenAI u otros LLM, así como con los casos de uso permitidos.",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "id": "AOAI.63",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Familiarización con los costos",
+ "text": "Comprenda la diferencia en el costo de los modelos base y los modelos ajustados y los tamaños de paso de token",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "id": "AOAI.64",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Procesamiento por lotes",
+ "text": "Solicitudes por lotes, siempre que sea posible, para minimizar la sobrecarga por llamada, lo que puede reducir los costos generales. Asegúrese de optimizar el tamaño del lote",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "id": "AOAI.65",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Seguimiento de costes",
+ "text": "Configure un sistema de seguimiento de costos que supervise el uso del modelo y use esa información para ayudar a informar las opciones de modelos y los tamaños indicados",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "id": "AOAI.66",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Límite de tokens",
+ "text": "Establezca un límite máximo en el número de tokens por respuesta de modelo. Optimice el tamaño para asegurarse de que sea lo suficientemente grande para una respuesta válida",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "id": "AOAI.67",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Fiabilidad de la búsqueda con IA",
+ "text": "Revise las instrucciones proporcionadas sobre la configuración de la búsqueda de IA para la confiabilidad",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "id": "AOAI.68",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Límites del vector de búsqueda de IA",
+ "text": "Planifique y administre el almacenamiento de vectores de búsqueda de IA",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "id": "AOAI.69",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "DevOps (Operaciones de desarrollo)",
+ "text": "Aplique prácticas de LLMOps para automatizar la gestión del ciclo de vida de sus aplicaciones GenAI",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "id": "AOAI.7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Modelo de cálculo de costes",
+ "text": "Evalúe el uso de los modelos de facturación: PAYG frente a PTU",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "id": "AOAI.70",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "DevOps (Operaciones de desarrollo)",
+ "text": "Evalúe la calidad de los mensajes y las aplicaciones al cambiar entre versiones de modelo",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "id": "AOAI.71",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Desarrollo",
+ "text": "Evalúe, supervise y perfeccione sus aplicaciones GenAI para características como la fundamentación, la relevancia, la precisión, la coherencia, la fluidez,",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "id": "AOAI.72",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Desarrollo",
+ "text": "Evalúe los resultados de búsqueda de Azure AI en función de diferentes parámetros de búsqueda",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "id": "AOAI.73",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Desarrollo",
+ "text": "Considere los modelos de ajuste fino como una forma de aumentar la precisión solo cuando haya probado otros enfoques básicos como la ingeniería de avisos y RAG con sus datos",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "id": "AOAI.74",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Desarrollo",
+ "text": "Utilice técnicas de ingeniería rápida para mejorar la precisión de las respuestas de LLM",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Gobernanza y seguridad",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "id": "AOAI.75",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Auditorías de seguridad y pruebas de penetración",
+ "text": "Equipo rojo con sus aplicaciones GenAI",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "id": "AOAI.76",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Comentarios de los usuarios finales",
+ "text": "Proporcione a los usuarios finales opciones de puntuación para las respuestas de LLM y realice un seguimiento de estas puntuaciones. ",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "category": "Optimización de costes",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "id": "AOAI.8",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Gestión de cuotas",
+ "text": "Considere las prácticas de administración de cuotas",
+ "waf": "Optimización de costes"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "id": "AOAI.9",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "subcategory": "Equilibrio de carga",
+ "text": "Utilice soluciones de equilibrador de carga, como la puerta de enlace basada en APIM, para equilibrar la carga y la capacidad entre servicios y regiones",
+ "waf": "Excelencia Operacional"
+ }
+ ],
+ "metadata": {
+ "name": "Azure OpenAI Review",
+ "state": "Preview",
+ "timestamp": "July 24, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Medio"
+ },
+ {
+ "name": "Bajo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Este control aún no se ha examinado",
+ "name": "No verificado"
+ },
+ {
+ "description": "Hay un elemento de acción asociado a esta comprobación",
+ "name": "Abrir"
+ },
+ {
+ "description": "Esta comprobación se ha verificado y no hay más elementos de acción asociados a ella",
+ "name": "Cumplido"
+ },
+ {
+ "description": "Recomendación entendida, pero no necesaria por los requisitos actuales",
+ "name": "No es necesario"
+ },
+ {
+ "description": "No aplicable para el diseño actual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidad"
+ },
+ {
+ "name": "Seguridad"
+ },
+ {
+ "name": "Costar"
+ },
+ {
+ "name": "Operaciones"
+ },
+ {
+ "name": "Rendimiento"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sí"
+ },
+ {
+ "name": "No"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/aoai_checklist.ja.json b/checklists/aoai_checklist.ja.json
new file mode 100644
index 000000000..38d3c59a4
--- /dev/null
+++ b/checklists/aoai_checklist.ja.json
@@ -0,0 +1,920 @@
+{
+ "categories": [
+ {
+ "name": "ID およびアクセス管理"
+ },
+ {
+ "name": "ネットワーク トポロジと接続性"
+ },
+ {
+ "name": "BC と DR"
+ },
+ {
+ "name": "ガバナンスとセキュリティ"
+ },
+ {
+ "name": "コストガバナンス"
+ },
+ {
+ "name": "オペレーションマネジメント"
+ },
+ {
+ "name": "アプリケーションのデプロイメント"
+ },
+ {
+ "name": "責任あるAI"
+ }
+ ],
+ "items": [
+ {
+ "category": "責任あるAI",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "id": "AOAI.1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "メタプロンプティング",
+ "text": "共鳴可能なAIのためのメタプロンプトガードレールに従う",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "id": "AOAI.10",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ロードバランシング",
+ "text": "APIM や AI Central などのソリューションを使用したゲートウェイ パターンを検討して、レート制限、負荷分散、認証、ログ記録を改善します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "id": "AOAI.11",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "モニタリング",
+ "text": "AOAI インスタンスの監視を有効にする",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "id": "AOAI.12",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "アラート",
+ "text": "リソースに対して実行されたアクション (サブスクリプション キーの再生成など) によって作成されたアクティビティ ログのエントリや、1 時間に 10 を超えるエラー数などのメトリックしきい値によって作成されたアクティビティ ログのエントリなど、イベントを通知するアラートを作成します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "id": "AOAI.13",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "モニタリング",
+ "text": "トークンの使用状況を監視して、容量によるサービスの中断を防ぎます",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "id": "AOAI.14",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "オブザーバビリティ",
+ "text": "処理された推論トークン、生成された完了トークンなどのメトリックを観察し、レート制限を監視します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "id": "AOAI.15",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "低い",
+ "subcategory": "オブザーバビリティ",
+ "text": "診断が十分でない場合は、Azure OpenAI の前で Azure API Management などのゲートウェイを使用して、受信プロンプトと送信応答の両方をログに記録することを検討してください (許可されている場合)",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "AOAI.16",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "インフラストラクチャの展開",
+ "text": "コードとしてのインフラストラクチャを使用して、Azure OpenAI Service、モデル デプロイ、およびすべての関連リソースをデプロイします",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "AOAI.17",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "認証",
+ "text": "API キーの代わりにマネージド ID で Microsoft Entra 認証を使用する",
+ "waf": "安全"
+ },
+ {
+ "category": "責任あるAI",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "id": "AOAI.18",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "評価",
+ "text": "入力と正しい答えを持つ既知のゴールデンデータセットを使用して、システムのパフォーマンス/精度を評価します。PromptFlowの機能を評価に活用します。",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "id": "AOAI.19",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ホスティングモデル",
+ "text": "プロビジョニング済みスループットモデルの使用状況の評価",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "責任あるAI",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "id": "AOAI.2",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "コンテンツの安全性",
+ "text": "Azure AI コンテンツの安全性を確認して実装する",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "id": "AOAI.20",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "スループットの定義",
+ "text": "トークンと1分あたりのレスポンスに基づいてシステムのスループットを定義および評価し、要件に合わせます",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "AOAI.21",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "レイテンシーの改善",
+ "text": "トークンサイズ、ストリーミングオプションを制限することにより、システムのレイテンシーを改善します",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "id": "AOAI.22",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "弾力性の分離",
+ "text": "弾力性の要求を見積もり、優先順位に基づいて同期要求とバッチ要求の分離を決定します。優先度が高い場合は同期アプローチを使用し、優先度が低い場合はキューを使用した非同期バッチ処理が推奨されます",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "id": "AOAI.23",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ベンチマーク",
+ "text": "消費者からの推定需要に基づくトークン消費要件のベンチマーク。プロビジョニングされたスループット ユニットのデプロイを使用している場合は、Azure OpenAI ベンチマーク ツールを使用してスループットを検証することを検討してください",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "id": "AOAI.24",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "弾性",
+ "text": "プロビジョニングされたスループットユニット (PTU) を使用している場合は、オーバーフローリクエストに対して Token-Per Minute (TPM) デプロイメントをデプロイすることを検討してください。ゲートウェイを使用して、PTU の制限に達したときに要求を TPM デプロイにルーティングします。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "id": "AOAI.25",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "モデルの選択",
+ "text": "適切なタスクに適したモデルを選択してください。速度、応答の品質、出力の複雑さの間で適切なトレードオフを持つモデルを選択する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "id": "AOAI.26",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "微調整",
+ "text": "微調整によってモデルのパフォーマンスが向上したかどうかを知るための微調整を行わずに、パフォーマンスのベースラインを設定する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "id": "AOAI.27",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "低い",
+ "subcategory": "マルチリージョン アーキテクチャ",
+ "text": "複数のOAIインスタンスを複数のリージョンにデプロイする",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "id": "AOAI.28",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ロードバランシング",
+ "text": "APIM のようなゲートウェイ パターンを使用した再試行とヘルスチェックの実装",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "id": "AOAI.29",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "クォータ",
+ "text": "ワークロードに対してTPMとRPMの適切なクォータがあることを確認します",
+ "waf": "確実"
+ },
+ {
+ "category": "責任あるAI",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "id": "AOAI.3",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "UX のベスト プラクティス",
+ "text": "HAIツールキットガイダンスの考慮事項を確認し、それらの相互作用の実践をslutionに適用します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "id": "AOAI.30",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "ロードバランシング",
+ "text": "ファインチューニングが採用されている場合は、リージョン間で個別の微調整モデルをデプロイします",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "id": "AOAI.31",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "データバックアップとディザスタリカバリ",
+ "text": "重要なデータを定期的にバックアップおよびレプリケートして、データの損失やシステム障害が発生した場合のデータの可用性と回復性を確保します。Azure のバックアップおよびディザスター リカバリー サービスを活用して、データを保護します。",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "id": "AOAI.32",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "SLA に関する考慮事項",
+ "text": "Azure AI Search サービス レベルは、SLA を持つために選択する必要があります",
+ "waf": "確実"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "id": "AOAI.33",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "低い",
+ "subcategory": "データの機密性",
+ "text": "データと機密性を分類し、埋め込みを生成する前に Microsoft Purview でラベル付けし、生成された埋め込みを同じ感度と分類で処理するようにしてください",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "id": "AOAI.34",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "保存時の暗号化",
+ "text": "SSE/ディスク暗号化(オプションのBYOKを使用)を使用してRAGに使用されるデータを暗号化",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "id": "AOAI.35",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "トランジット暗号化",
+ "text": "データソース間で転送されるデータ、Retrieval-Augmented Generation(RAG)およびLLM通信に使用されるAI検索にTLSが適用されていることを確認します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "id": "AOAI.36",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "アクセス制御",
+ "text": "RBAC を使用して、Azure OpenAI サービスへのアクセスを管理します。ユーザーに適切な権限を割り当て、ユーザーの役割と責任に基づいてアクセスを制限します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "id": "AOAI.37",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "データマスキングとリダクション",
+ "text": "データの暗号化、マスキング、または編集技術を実装して、機密データを非表示にしたり、非本番環境で難読化された値に置き換えたり、テストやトラブルシューティングの目的でデータを共有する場合",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "id": "AOAI.38",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "脅威の検出と監視",
+ "text": "Azure Defender を利用して、セキュリティの脅威を検出して対応し、監視とアラートのメカニズムを設定して、疑わしいアクティビティや侵害を特定します。Azure Sentinel を活用して高度な脅威の検出と対応を実現",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "id": "AOAI.39",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "データの保持と廃棄",
+ "text": "コンプライアンス規制を遵守するためのデータ保持および廃棄ポリシーを確立します。不要になったデータに対して安全な削除方法を実装し、データの保持と廃棄活動の監査証跡を維持します",
+ "waf": "安全"
+ },
+ {
+ "category": "責任あるAI",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "id": "AOAI.4",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "脱獄の安全性",
+ "text": "Content Safety を使用した Prompt シールドと接地検出の実装",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "id": "AOAI.40",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "データのプライバシーとコンプライアンス",
+ "text": "GDPRやHIPAAなどの関連するデータ保護規制への準拠を確保するには、プライバシー制御を実装し、データ処理活動に必要な同意または許可を取得します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "id": "AOAI.41",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "従業員の意識向上と教育",
+ "text": "データセキュリティのベストプラクティス、データの安全な取り扱いの重要性、データ侵害に関連する潜在的なリスクについて、従業員を教育します。データセキュリティプロトコルに熱心に従うように促します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "id": "AOAI.42",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "環境の分離",
+ "text": "運用データを開発データやテストデータから分離します。本番環境では実際の機密データのみを使用し、開発環境やテスト環境では匿名化されたデータや合成データを利用します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "id": "AOAI.43",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "インデックスの分離",
+ "text": "データの機密性のレベルが異なる場合は、レベルごとに個別のインデックスを作成することを検討してください。たとえば、一般的なデータ用に 1 つのインデックスを作成し、機密データ用に別のインデックスを作成し、それぞれ異なるアクセス プロトコルで管理することができます",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "id": "AOAI.44",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "個別のインスタンス内の機密データ",
+ "text": "分離をさらに一歩進めて、機密性の高いデータセットをサービスの異なるインスタンスに配置します。各インスタンスは、独自のRBACポリシーのセットで制御できます",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "id": "AOAI.45",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "埋め込みとベクター処理",
+ "text": "機密情報から生成された埋め込みとベクトルは、それ自体が機密性が高いことを認識します。このデータには、ソースマテリアルと同じ保護対策を提供する必要があります",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "id": "AOAI.46",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "アクセス制御",
+ "text": "埋め込みとベクトルを持つデータストアに RBAC を適用し、ロールのアクセス要件に基づいてアクセスのスコープを設定します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "id": "AOAI.47",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ネットワークセキュリティ",
+ "text": "AI サービスのプライベート エンドポイントを構成して、ネットワーク内のサービス アクセスを制限します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "id": "AOAI.48",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ネットワークセキュリティ",
+ "text": "Azure Firewall と UDR を使用して受信と送信のトラフィック制御を厳密に適用し、外部統合ポイントを制限します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "id": "AOAI.49",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "ネットワークアクセスの制御",
+ "text": "ネットワークのセグメンテーションとアクセス制御を実装して、LLMアプリケーションへのアクセスを許可されたユーザーとシステムのみに制限し、横方向の移動を防ぎます",
+ "waf": "安全"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "id": "AOAI.5",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "トークンの最適化",
+ "text": "LLMLingua や gprtrim などのプロンプト圧縮ツールを使用します",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "id": "AOAI.50",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "安全なAPIとエンドポイント",
+ "text": "LLM アプリケーションで使用される API とエンドポイントが、マネージド ID、API キー、OAuth などの認証および承認メカニズムで適切に保護され、不正アクセスを防止します。",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "id": "AOAI.51",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "強力な認証の実装",
+ "text": "多要素認証などの強力なエンドユーザー認証メカニズムを適用して、LLMアプリケーションおよび関連するネットワークリソースへの不正アクセスを防止します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "id": "AOAI.52",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "ネットワーク監視を使用する",
+ "text": "ネットワーク監視ツールを実装して、疑わしいアクティビティや悪意のあるアクティビティのネットワークトラフィックを検出および分析します。ロギングを有効にしてネットワークイベントをキャプチャし、セキュリティインシデントが発生した場合のフォレンジック分析を容易にします",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "id": "AOAI.53",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "セキュリティ監査と侵入テスト",
+ "text": "セキュリティ監査と侵入テストを実施して、LLMアプリケーションのネットワークインフラストラクチャのネットワークセキュリティの弱点または脆弱性を特定して対処します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "id": "AOAI.54",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "低い",
+ "subcategory": "インフラストラクチャの展開",
+ "text": "Azure AI Services は、管理を改善するために適切にタグ付けされています",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "AOAI.55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "低い",
+ "subcategory": "インフラストラクチャの展開",
+ "text": "Azure AI Service アカウントは、組織の名前付け規則に従います",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "AOAI.56",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "診断のログ",
+ "text": "Azure AI サービス リソースの診断ログを有効にする必要がある",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "ID およびアクセス管理",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "AOAI.57",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "Entra IDベースのアクセス",
+ "text": "セキュリティのため、キーアクセス(ローカル認証)を無効にすることをお勧めします。 キーベースのアクセスを無効にすると、Microsoft Entra IDが唯一のアクセス方法になり、最小限の特権原則ときめ細かな制御を維持できます。",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "AOAI.58",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "セキュアなキー管理",
+ "text": "Azure Key Vault を使用して、キーを安全に保存および管理します。LLM アプリケーションのコード内で機密性の高いキーをハードコーディングしたり埋め込んだりすることを避け、マネージド ID を使用して Azure Key Vault から安全に取得します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "id": "AOAI.59",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "キーのローテーションと有効期限",
+ "text": "Azure Key Vault に格納されているキーを定期的にローテーションして期限切れにすることで、不正アクセスのリスクを最小限に抑えます。",
+ "waf": "安全"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "id": "AOAI.6",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "トークンの最適化",
+ "text": "tiktokenを使用して、会話モードでのトークン最適化のためのトークンサイズを理解します",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "id": "AOAI.60",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "安全なコーディングの実践",
+ "text": "安全なコーディング手法に従って、インジェクション攻撃、クロスサイトスクリプティング(XSS)、セキュリティ設定の誤りなどの一般的な脆弱性を防止します",
+ "waf": "安全"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "id": "AOAI.61",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "パッチ適用と更新",
+ "text": "LLM ライブラリとその他のシステム コンポーネントを定期的に更新し、パッチを適用するプロセスを設定します",
+ "waf": "安全"
+ },
+ {
+ "category": "責任あるAI",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "id": "AOAI.62",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "統治",
+ "text": "Azure OpenAI またはその他の LLM の利用規約、ポリシー、ガイダンス、および許可されたユース ケースを順守する",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "id": "AOAI.63",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "コストの習熟度",
+ "text": "基本モデルと微調整されたモデルおよびトークンのステップサイズのコストの違いを理解する",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "id": "AOAI.64",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "バッチ処理",
+ "text": "可能であれば、呼び出しごとのオーバーヘッドを最小限に抑え、全体的なコストを削減できるバッチ要求。バッチサイズを確実に最適化する",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "id": "AOAI.65",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "コスト監視",
+ "text": "モデルの使用状況を監視するコスト追跡システムを設定し、その情報を使用してモデルの選択とプロンプトのサイズを通知します",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "id": "AOAI.66",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "トークン制限",
+ "text": "モデル応答あたりのトークン数に上限を設定します。サイズを最適化して、有効な応答に十分な大きさになるようにします",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "id": "AOAI.67",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "AI検索の信頼性",
+ "text": "信頼性のための AI 検索の設定に関するガイダンスを確認します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "id": "AOAI.68",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "AI 検索ベクトルの制限",
+ "text": "AI Search Vector ストレージの計画と管理",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "id": "AOAI.69",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "DevOpsの",
+ "text": "LLMOpsプラクティスを適用して、GenAIアプリケーションのライフサイクル管理を自動化します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "id": "AOAI.7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "原価計算モデル",
+ "text": "請求モデルの使用状況の評価 - PAYG と PTU の比較",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "id": "AOAI.70",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "DevOpsの",
+ "text": "モデルバージョンを切り替える際のプロンプトとアプリケーションの品質を評価する",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "id": "AOAI.71",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "発達",
+ "text": "GenAIアプリを評価、監視、改良して、接地性、関連性、精度、一貫性、流暢さなどの機能を確認します。",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "id": "AOAI.72",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "発達",
+ "text": "さまざまな検索パラメーターに基づいて Azure AI Search の結果を評価する",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "id": "AOAI.73",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "発達",
+ "text": "精度を向上させる方法としてモデルの微調整を検討するのは、データを使用してプロンプトエンジニアリングやRAGなどの他の基本的なアプローチを試した場合のみです",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "id": "AOAI.74",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "発達",
+ "text": "プロンプトエンジニアリング手法を使用して、LLM応答の精度を向上させる",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "ガバナンスとセキュリティ",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "id": "AOAI.75",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "セキュリティ監査と侵入テスト",
+ "text": "GenAIアプリケーションをレッドチーム化",
+ "waf": "安全"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "id": "AOAI.76",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "エンドユーザーのフィードバック",
+ "text": "エンドユーザーにLLM応答のスコアリングオプションを提供し、これらのスコアを追跡します。",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "category": "コストの最適化",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "id": "AOAI.8",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "subcategory": "クォータ管理",
+ "text": "クォータ管理の実践を検討する",
+ "waf": "コストの最適化"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "id": "AOAI.9",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "subcategory": "ロードバランシング",
+ "text": "APIM ベースのゲートウェイなどのロード バランサー ソリューションを使用して、サービスやリージョン間で負荷と容量を分散します",
+ "waf": "オペレーショナルエクセレンス"
+ }
+ ],
+ "metadata": {
+ "name": "Azure OpenAI Review",
+ "state": "Preview",
+ "timestamp": "July 24, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高い"
+ },
+ {
+ "name": "中程度"
+ },
+ {
+ "name": "低い"
+ }
+ ],
+ "status": [
+ {
+ "description": "このチェックはまだ見ていません",
+ "name": "未確認"
+ },
+ {
+ "description": "このチェックにはアクションアイテムが関連付けられています",
+ "name": "開ける"
+ },
+ {
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
+ "name": "達成"
+ },
+ {
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
+ },
+ {
+ "description": "現在のデザインには適用されません",
+ "name": "該当なし"
+ }
+ ],
+ "waf": [
+ {
+ "name": "確実"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "費用"
+ },
+ {
+ "name": "オペレーションズ"
+ },
+ {
+ "name": "パフォーマンス"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "はい"
+ },
+ {
+ "name": "いいえ"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/aoai_checklist.ko.json b/checklists/aoai_checklist.ko.json
new file mode 100644
index 000000000..c7af3b9b2
--- /dev/null
+++ b/checklists/aoai_checklist.ko.json
@@ -0,0 +1,920 @@
+{
+ "categories": [
+ {
+ "name": "ID 및 액세스 관리"
+ },
+ {
+ "name": "네트워크 토폴로지 및 연결성"
+ },
+ {
+ "name": "BC 및 DR"
+ },
+ {
+ "name": "거버넌스 및 보안"
+ },
+ {
+ "name": "비용 관리"
+ },
+ {
+ "name": "운영 관리"
+ },
+ {
+ "name": "응용 프로그램 배포"
+ },
+ {
+ "name": "책임감 있는 AI"
+ }
+ ],
+ "items": [
+ {
+ "category": "책임감 있는 AI",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "id": "AOAI.1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "메타프롬프트",
+ "text": "공명형 AI를 위한 Metaprompting 가드레일 따르기",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "id": "AOAI.10",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "로드 밸런싱",
+ "text": "더 나은 속도 제한, 부하 분산, 인증 및 로깅을 위해 APIM 또는 AI Central과 같은 솔루션을 사용하여 게이트웨이 패턴을 고려합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "id": "AOAI.11",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "모니터링",
+ "text": "AOAI 인스턴스에 대한 모니터링 활성화",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "id": "AOAI.12",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "경고",
+ "text": "리소스에 대해 수행된 작업(예: 구독 키 다시 생성) 또는 메트릭 임계값(예: 한 시간에 10을 초과하는 오류 수)에 의해 생성된 활동 로그의 항목과 같은 이벤트를 팀에 알리는 경고를 만듭니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "id": "AOAI.13",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "모니터링",
+ "text": "용량으로 인한 서비스 중단을 방지하기 위해 토큰 사용량을 모니터링합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "id": "AOAI.14",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "관찰 가능성",
+ "text": "처리된 추론 토큰, 생성된 완료 토큰, 속도 제한 모니터링과 같은 메트릭 관찰",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "id": "AOAI.15",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "subcategory": "관찰 가능성",
+ "text": "진단이 충분하지 않은 경우 Azure OpenAI 앞에 있는 Azure API Managements와 같은 게이트웨이를 사용하여 허용되는 경우 들어오는 프롬프트와 나가는 응답을 모두 기록하는 것이 좋습니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "AOAI.16",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "인프라스트럭처 구축",
+ "text": "Infrastructure as code를 사용하여 Azure OpenAI Service, 모델 배포 및 모든 관련 리소스를 배포합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "AOAI.17",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "인증",
+ "text": "API 키 대신 관리 ID로 Microsoft Entra 인증 사용",
+ "waf": "안전"
+ },
+ {
+ "category": "책임감 있는 AI",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "id": "AOAI.18",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "평가",
+ "text": "입력과 정답이 있는 알려진 골든 데이터 세트를 사용하여 시스템의 성능/정확도를 평가합니다. 평가를 위해 PromptFlow의 기능을 활용합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "id": "AOAI.19",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "호스팅 모델",
+ "text": "프로비저닝된 처리량 모델의 사용 평가 ",
+ "waf": "공연"
+ },
+ {
+ "category": "책임감 있는 AI",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "id": "AOAI.2",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "콘텐츠 안전성",
+ "text": "Azure AI 콘텐츠 안전성 검토 및 구현",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "id": "AOAI.20",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "처리량 정의",
+ "text": "분당 토큰 및 응답을 기반으로 시스템의 처리량을 정의 및 평가하고 요구 사항에 맞춥니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "AOAI.21",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "지연 시간 개선",
+ "text": "토큰 크기, 스트리밍 옵션을 제한하여 시스템의 대기 시간을 개선합니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "id": "AOAI.22",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "탄력성 분리",
+ "text": "탄력성 요구를 예측하여 우선 순위에 따라 동기 및 일괄 처리 요청 분리를 결정합니다. 우선 순위가 높은 경우 동기 접근 방식을 사용하고 낮은 우선 순위의 경우 큐를 사용한 비동기 일괄 처리가 선호됩니다",
+ "waf": "공연"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "id": "AOAI.23",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "벤치마킹",
+ "text": "소비자의 예상 수요를 기반으로 토큰 사용 요구 사항을 벤치마킹합니다. 프로비저닝된 처리량 단위 배포를 사용하는 경우 처리량의 유효성을 검사하는 데 도움이 되도록 Azure OpenAI 벤치마킹 도구를 사용하는 것이 좋습니다",
+ "waf": "공연"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "id": "AOAI.24",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "탄력 ",
+ "text": "PTU(프로비저닝된 처리량 단위)를 사용하는 경우 오버플로 요청에 대한 TPM(분당 토큰) 배포를 배포하는 것이 좋습니다. 게이트웨이를 사용하여 PTU 제한에 도달할 때 TPM 배포로 요청을 라우팅합니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "id": "AOAI.25",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "모델 선택",
+ "text": "올바른 작업에 적합한 모델을 선택하십시오. 속도, 응답 품질 및 출력 복잡성 간에 적절한 절충점이 있는 모델 선택",
+ "waf": "공연"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "id": "AOAI.26",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "미세 조정",
+ "text": "미세 조정으로 모델 성능이 향상되었는지 여부를 파악하기 위해 미세 조정 없이 성능에 대한 기준이 있습니다.",
+ "waf": "공연"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "id": "AOAI.27",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "subcategory": "다중 지역 아키텍처Multi-region architecture",
+ "text": "여러 지역에 여러 OAI 인스턴스 배포",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "id": "AOAI.28",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "로드 밸런싱",
+ "text": "APIM과 같은 게이트웨이 패턴을 사용하여 재시도 및 상태 확인 구현Implement retry & healthchecks with gateway pattern like APIM",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "id": "AOAI.29",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "할당량",
+ "text": "워크로드에 대한 TPM 및 RPM의 적절한 할당량이 있는지 확인합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "책임감 있는 AI",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "id": "AOAI.3",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "UX 모범 사례",
+ "text": "HAI 도구 키트 지침의 고려 사항을 검토하고 slution에 대한 이러한 상호 작용 방법을 적용합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "id": "AOAI.30",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "로드 밸런싱",
+ "text": "미세 조정이 사용되는 경우 지역 간에 별도의 미세 조정된 모델을 배포합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "id": "AOAI.31",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "데이터 백업 및 재해 복구",
+ "text": "중요한 데이터를 정기적으로 백업 및 복제하여 데이터 손실 또는 시스템 장애 발생 시 데이터 가용성과 복구 가능성을 보장합니다. Azure의 백업 및 재해 복구 서비스를 활용하여 데이터를 보호하세요.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "id": "AOAI.32",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "SLA 고려 사항",
+ "text": "SLA를 갖도록 Azure AI 검색 서비스 계층을 선택해야 합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "id": "AOAI.33",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "subcategory": "데이터 민감도",
+ "text": "임베딩을 생성하기 전에 데이터 및 민감도를 분류하고 Microsoft Purview를 사용하여 레이블을 지정하고 생성된 임베딩을 동일한 민감도 및 분류로 처리해야 합니다",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "id": "AOAI.34",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "저장 데이터 암호화",
+ "text": "BYOK(옵션)를 사용한 SSE/디스크 암호화로 RAG에 사용되는 데이터 암호화",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "id": "AOAI.35",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "트랜짓 암호화",
+ "text": "데이터 소스 간 전송 중인 데이터, RAG(Retrieval-Augmented Generation) 및 LLM 통신에 사용되는 AI 검색에 TLS가 적용되는지 확인합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "id": "AOAI.36",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "출입 통제",
+ "text": "RBAC를 사용하여 Azure OpenAI 서비스에 대한 액세스를 관리합니다. 사용자에게 적절한 권한을 할당하고 사용자의 역할과 책임에 따라 액세스를 제한합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "id": "AOAI.37",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "데이터 마스킹 및 수정",
+ "text": "데이터 암호화, 마스킹 또는 수정 기술을 구현하여 비프로덕션 환경에서 또는 테스트 또는 문제 해결을 위해 데이터를 공유할 때 민감한 데이터를 숨기거나 난독화된 값으로 대체합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "id": "AOAI.38",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "위협 탐지 및 모니터링",
+ "text": "Azure Defender를 활용하여 보안 위협을 탐지 및 대응하고 의심스러운 활동 또는 위반을 식별하기 위한 모니터링 및 경고 메커니즘을 설정합니다. 고급 위협 탐지 및 대응을 위해 Azure Sentinel 활용",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "id": "AOAI.39",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "데이터 보유 및 폐기",
+ "text": "규정 준수 규정을 준수하기 위해 데이터 보존 및 폐기 정책을 수립합니다. 더 이상 필요하지 않은 데이터에 대한 안전한 삭제 방법을 구현하고 데이터 보존 및 폐기 활동에 대한 감사 추적을 유지 관리합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "책임감 있는 AI",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "id": "AOAI.4",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "탈옥 안전",
+ "text": "Content Safety를 사용하여 Prompt shields 및 groundedness detection 구현 ",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "id": "AOAI.40",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "데이터 개인 정보 보호 및 규정 준수",
+ "text": "개인 정보 보호 제어를 구현하고 데이터 처리 활동에 필요한 동의 또는 권한을 얻어 GDPR 또는 HIPAA와 같은 관련 데이터 보호 규정을 준수하도록 합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "id": "AOAI.41",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "직원 인식 제고 및 교육",
+ "text": "데이터 보안 모범 사례, 데이터 안전한 처리의 중요성, 데이터 침해와 관련된 잠재적 위험에 대해 직원을 교육합니다. 데이터 보안 프로토콜을 성실히 따르도록 권장합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "id": "AOAI.42",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "환경 분리",
+ "text": "생산 데이터를 개발 및 테스트 데이터와 분리합니다. 프로덕션에서는 실제 민감한 데이터만 사용하고 개발 및 테스트 환경에서는 익명 또는 합성 데이터를 활용합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "id": "AOAI.43",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "인덱스 분리",
+ "text": "데이터 민감도 수준이 다양하다면 각 수준에 대해 별도의 인덱스를 만드는 것이 좋습니다. 예를 들어, 일반 데이터에 대한 인덱스와 민감한 데이터에 대한 인덱스가 있을 수 있으며, 각각 다른 액세스 프로토콜에 의해 제어됩니다",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "id": "AOAI.44",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "별도의 인스턴스에 있는 민감한 데이터Sensitive Data in separate instances",
+ "text": "한 단계 더 나아가 중요한 데이터 세트를 서비스의 다른 인스턴스에 배치합니다. 각 인스턴스는 고유한 특정 RBAC 정책 집합으로 제어할 수 있습니다",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "id": "AOAI.45",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "임베딩 및 벡터 처리",
+ "text": "민감한 정보에서 생성된 임베딩과 벡터는 그 자체로 민감하다는 점을 인식해야 합니다. 이 데이터에는 원본 자료와 동일한 보호 조치가 제공되어야 합니다",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "id": "AOAI.46",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "출입 통제",
+ "text": "임베딩 및 벡터가 있는 데이터 저장소에 RBAC를 적용하고 역할의 액세스 요구 사항에 따라 액세스 범위를 지정합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "id": "AOAI.47",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "네트워크 보안",
+ "text": "AI 서비스에 대한 프라이빗 엔드포인트를 구성하여 네트워크 내 서비스 액세스를 제한합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "id": "AOAI.48",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "네트워크 보안",
+ "text": "Azure Firewall 및 UDR을 사용하여 엄격한 인바운드 및 아웃바운드 트래픽 제어를 적용하고 외부 통합 지점을 제한합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "id": "AOAI.49",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "네트워크 액세스 제어",
+ "text": "네트워크 세분화 및 액세스 제어를 구현하여 LLM 애플리케이션에 대한 액세스를 인증된 사용자 및 시스템으로만 제한하고 측면 이동을 방지합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "id": "AOAI.5",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "토큰 최적화",
+ "text": "LLMLingua 또는 gprtrim과 같은 프롬프트 압축 도구 사용",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "id": "AOAI.50",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "API 및 엔드포인트 보안",
+ "text": "LLM 애플리케이션에서 사용하는 API 및 엔드포인트가 관리 ID, API 키 또는 OAuth와 같은 인증 및 권한 부여 메커니즘으로 적절하게 보호되어 무단 액세스를 방지해야 합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "id": "AOAI.51",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "강력한 인증 구현",
+ "text": "다단계 인증(multi-factor authentication)과 같은 강력한 최종 사용자 인증 메커니즘을 적용하여 LLM 애플리케이션 및 관련 네트워크 리소스에 대한 무단 액세스를 방지합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "id": "AOAI.52",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "네트워크 모니터링 사용",
+ "text": "네트워크 모니터링 도구를 구현하여 의심스럽거나 악의적인 활동에 대한 네트워크 트래픽을 탐지하고 분석합니다. 로깅을 활성화하여 네트워크 이벤트를 캡처하고 보안 사고 발생 시 포렌식 분석을 용이하게 합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "id": "AOAI.53",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "보안 감사 및 침투 테스트",
+ "text": "보안 감사 및 침투 테스트를 수행하여 LLM 애플리케이션의 네트워크 인프라에서 네트워크 보안 약점 또는 취약성을 식별하고 해결합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "id": "AOAI.54",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "subcategory": "인프라스트럭처 구축",
+ "text": "Azure AI 서비스는 더 나은 관리를 위해 적절하게 태그가 지정됩니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "AOAI.55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "subcategory": "인프라스트럭처 구축",
+ "text": "Azure AI Service 계정은 조직의 명명 규칙을 따릅니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "AOAI.56",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "진단 로깅",
+ "text": "Azure AI Services 리소스의 진단 로그를 사용하도록 설정해야 함",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "ID 및 액세스 관리",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "AOAI.57",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "Entra ID 기반 액세스",
+ "text": "키 액세스(로컬 인증)는 보안을 위해 사용하지 않도록 설정하는 것이 좋습니다. 키 기반 액세스를 사용하지 않도록 설정하면 Microsoft Entra ID가 유일한 액세스 방법이 되어 최소 권한 원칙과 세분화된 제어를 유지할 수 있습니다. ",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "AOAI.58",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "보안 키 관리",
+ "text": "Azure Key Vault를 사용하여 키를 안전하게 저장하고 관리하세요. LLM 애플리케이션의 코드 내에 중요한 키를 하드 코딩하거나 포함하지 않도록 하고 관리 ID를 사용하여 Azure Key Vault에서 안전하게 검색합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "id": "AOAI.59",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "키 순환 및 만료Key Rotation and Expiration",
+ "text": "Azure Key Vault에 저장된 키를 정기적으로 회전하고 만료하여 무단 액세스의 위험을 최소화합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "id": "AOAI.6",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "토큰 최적화",
+ "text": "tiktoken을 사용하여 대화 모드에서 토큰 최적화를 위한 토큰 크기 이해",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "id": "AOAI.60",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "안전한 코딩 연습",
+ "text": "보안 코딩 관행에 따라 주입 공격, XSS(교차 사이트 스크립팅) 또는 보안 구성 오류와 같은 일반적인 취약성을 방지합니다",
+ "waf": "안전"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "id": "AOAI.61",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "패치 및 업데이트",
+ "text": "LLM 라이브러리와 다른 시스템 컴포넌트를 정기적으로 업데이트하고 패치하는 프로세스를 설정합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "책임감 있는 AI",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "id": "AOAI.62",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "지배구조",
+ "text": "Azure OpenAI 또는 기타 LLM 사용 약관, 정책 및 지침, 허용되는 사용 사례 준수",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "id": "AOAI.63",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "비용 숙지",
+ "text": "기본 모델과 미세 조정된 모델 및 토큰 단계 크기의 비용 차이를 이해합니다.",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "id": "AOAI.64",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "배치 처리",
+ "text": "가능한 경우 호출당 오버헤드를 최소화하여 전체 비용을 줄일 수 있는 일괄 처리 요청. 배치 크기를 최적화해야 합니다.",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "id": "AOAI.65",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "비용 모니터링",
+ "text": "모델 사용을 모니터링하는 비용 추적 시스템을 설정하고 해당 정보를 사용하여 모델 선택 및 프롬프트 크기를 알립니다",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "id": "AOAI.66",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "토큰 한도",
+ "text": "모델 응답당 토큰 수에 대한 최대 제한을 설정합니다. 유효한 응답에 사용할 수 있을 만큼 충분히 큰지 확인하기 위해 크기를 최적화합니다",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "id": "AOAI.67",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "AI 검색 신뢰성",
+ "text": "안정성을 위한 AI 검색 설정에 대해 제공된 지침을 검토합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "id": "AOAI.68",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "AI 검색 벡터 한계",
+ "text": "AI Search Vector 스토리지 계획 및 관리",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "id": "AOAI.69",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "데브옵스",
+ "text": "LLMOps 사례를 적용하여 GenAI 애플리케이션의 라이프사이클 관리를 자동화합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "id": "AOAI.7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "원가 계산 모델",
+ "text": "청구 모델 사용 평가 - PAYG 대 PTU",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "id": "AOAI.70",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "데브옵스",
+ "text": "모델 버전 간에 전환할 때 프롬프트와 응용 프로그램의 품질을 평가합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "id": "AOAI.71",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "발달",
+ "text": "GenAI 앱을 평가, 모니터링 및 개선하여 근거, 관련성, 정확성, 일관성, 유창성 등의 기능을 제공합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "id": "AOAI.72",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "발달",
+ "text": "다양한 검색 매개 변수를 기반으로 Azure AI Search 결과를 평가합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "id": "AOAI.73",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "발달",
+ "text": "데이터를 사용하여 프롬프트 엔지니어링 및 RAG와 같은 다른 기본 접근 방식을 시도한 경우에만 모델을 미세 조정하여 정확도를 높이는 방법으로 살펴보십시오",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "id": "AOAI.74",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "발달",
+ "text": "프롬프트 엔지니어링 기법을 사용하여 LLM 응답의 정확도 향상",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "거버넌스 및 보안",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "id": "AOAI.75",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "보안 감사 및 침투 테스트",
+ "text": "GenAI 애플리케이션을 위한 레드 팀",
+ "waf": "안전"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "id": "AOAI.76",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "최종 사용자 피드백",
+ "text": "최종 사용자에게 LLM 응답에 대한 점수 매기기 옵션을 제공하고 이러한 점수를 추적합니다. ",
+ "waf": "운영 우수성"
+ },
+ {
+ "category": "비용 최적화",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "id": "AOAI.8",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "subcategory": "할당량 관리",
+ "text": "할당량 관리 방법 고려",
+ "waf": "비용 최적화"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "id": "AOAI.9",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "subcategory": "로드 밸런싱",
+ "text": "APIM 기반 게이트웨이와 같은 Load Balancer 솔루션을 사용하여 서비스 및 지역 간에 부하와 용량을 분산합니다",
+ "waf": "운영 우수성"
+ }
+ ],
+ "metadata": {
+ "name": "Azure OpenAI Review",
+ "state": "Preview",
+ "timestamp": "July 24, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "높다"
+ },
+ {
+ "name": "보통"
+ },
+ {
+ "name": "낮다"
+ }
+ ],
+ "status": [
+ {
+ "description": "이 검사는 아직 검토되지 않았습니다",
+ "name": "확인되지 않음"
+ },
+ {
+ "description": "이 검사와 연관된 작업 항목이 있습니다",
+ "name": "열다"
+ },
+ {
+ "description": "이 검사는 확인되었으며 이와 관련된 추가 작업 항목이 없습니다",
+ "name": "성취"
+ },
+ {
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
+ "name": "필요 없음"
+ },
+ {
+ "description": "현재 설계에는 적용되지 않습니다.",
+ "name": "해당 없음"
+ }
+ ],
+ "waf": [
+ {
+ "name": "신뢰도"
+ },
+ {
+ "name": "안전"
+ },
+ {
+ "name": "비용"
+ },
+ {
+ "name": "작업"
+ },
+ {
+ "name": "공연"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "예"
+ },
+ {
+ "name": "아니요"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/aoai_checklist.pt.json b/checklists/aoai_checklist.pt.json
new file mode 100644
index 000000000..62f7d383f
--- /dev/null
+++ b/checklists/aoai_checklist.pt.json
@@ -0,0 +1,920 @@
+{
+ "categories": [
+ {
+ "name": "Gerenciamento de identidade e acesso"
+ },
+ {
+ "name": "Topologia e conectividade de rede"
+ },
+ {
+ "name": "BC e DR"
+ },
+ {
+ "name": "Governança e segurança"
+ },
+ {
+ "name": "Governança de custos"
+ },
+ {
+ "name": "Gestão de Operações"
+ },
+ {
+ "name": "Implantação de aplicativos"
+ },
+ {
+ "name": "IA responsável"
+ }
+ ],
+ "items": [
+ {
+ "category": "IA responsável",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "id": "AOAI.1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Metaprompting",
+ "text": "Siga as proteções do Metaprompting para uma IA razoável",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "id": "AOAI.10",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Balanceamento de carga",
+ "text": "Considere padrões de gateway com APIM ou soluções como AI central para melhor limitação de taxa, balanceamento de carga, autenticação e registro",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "id": "AOAI.11",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Monitorização",
+ "text": "Habilitar o monitoramento para suas instâncias AOAI",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "id": "AOAI.12",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Alertas",
+ "text": "Crie alertas para notificar as equipes sobre eventos, como uma entrada no log de atividades criada por uma ação executada no recurso, como regenerar suas chaves de assinatura ou um limite de métrica, como o número de erros que excedem 10 em uma hora",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "id": "AOAI.13",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Monitorização",
+ "text": "Monitore o uso do token para evitar interrupções de serviço devido à capacidade",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "id": "AOAI.14",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Observabilidade",
+ "text": "Observe métricas como tokens de inferência processados, monitoramento de tokens de conclusão gerados para limite de taxa",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "id": "AOAI.15",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "subcategory": "Observabilidade",
+ "text": "Se o diagnóstico não for suficiente para você, considere usar um gateway como o Gerenciamento de API do Azure na frente do Azure OpenAI para registrar prompts de entrada e respostas de saída, quando permitido",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "AOAI.16",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Implantação de infraestrutura",
+ "text": "Usar a infraestrutura como código para implantar o serviço OpenAI do Azure, implantações de modelo e todos os recursos relacionados",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "AOAI.17",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Autenticação",
+ "text": "Usar a autenticação do Microsoft Entra com identidade gerenciada em vez de chave de API",
+ "waf": "Segurança"
+ },
+ {
+ "category": "IA responsável",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "id": "AOAI.18",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Avaliação",
+ "text": "Avalie o desempenho/precisão do sistema com um conjunto de dados dourado conhecido que tenha as entradas e as respostas corretas. Aproveite os recursos do PromptFlow para avaliação.",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "id": "AOAI.19",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Modelo de hospedagem",
+ "text": "Avaliar o uso do modelo de taxa de transferência provisionada ",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "IA responsável",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "id": "AOAI.2",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Segurança de conteúdo",
+ "text": "Examinar e implementar a segurança de conteúdo do Azure AI",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "id": "AOAI.20",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Definição de taxa de transferência",
+ "text": "Defina e avalie a taxa de transferência do sistema com base em tokens e resposta por minuto e alinhe-se aos requisitos",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "AOAI.21",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Melhoria da latência",
+ "text": "Melhore a latência do sistema limitando os tamanhos dos tokens, as opções de streaming",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "id": "AOAI.22",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Segregação de elasticidade",
+ "text": "Estime as demandas de elasticidade para determinar a segregação de solicitações síncronas e em lote com base na prioridade. Para alta prioridade, use a abordagem síncrona e, para baixa prioridade, o processamento em lote assíncrono com fila é preferível",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "id": "AOAI.23",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Avaliação comparativa",
+ "text": "Compare os requisitos de consumo de token com base nas demandas estimadas dos consumidores. Considere usar a ferramenta de benchmarking OpenAI do Azure para ajudá-lo a validar a taxa de transferência se você estiver usando implantações de Unidade de Produtividade Provisionada",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "id": "AOAI.24",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Elasticidade ",
+ "text": "Se você estiver usando PTUs (Unidades de Produtividade Provisionadas), considere implantar uma implantação de token por minuto (TPM) para solicitações de estouro. Use um gateway para rotear solicitações para a implantação do TPM quando os limites de PTU forem atingidos.",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "id": "AOAI.25",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Escolha do modelo",
+ "text": "Escolha o modelo certo para a tarefa certa. Escolha modelos com a compensação certa entre velocidade, qualidade de resposta e complexidade de saída",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "id": "AOAI.26",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Afinar",
+ "text": "Tenha uma linha de base para o desempenho sem ajuste fino para saber se o ajuste fino melhorou ou não o desempenho do modelo",
+ "waf": "Desempenho"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "id": "AOAI.27",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "subcategory": "Arquitetura multirregional",
+ "text": "Implantar várias instâncias de OAI em regiões",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "id": "AOAI.28",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Balanceamento de carga",
+ "text": "Implemente novas tentativas e verificações de integridade com o padrão de Gateway como APIM",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "id": "AOAI.29",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Quotas",
+ "text": "Garantir que tenha cotas adequadas de TPM e RPM para a carga de trabalho",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "IA responsável",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "id": "AOAI.3",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Prática recomendada de UX",
+ "text": "Revise as considerações nas diretrizes do kit de ferramentas HAI e aplique essas práticas de interação para a análise",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "id": "AOAI.30",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Balanceamento de carga",
+ "text": "Implantar modelos ajustados separados entre regiões se o ajuste fino for empregado",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "id": "AOAI.31",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Backup de dados e recuperação de desastres",
+ "text": "Faça backup e replique regularmente dados críticos para garantir a disponibilidade e a capacidade de recuperação dos dados em caso de perda de dados ou falhas do sistema. Aproveite os serviços de backup e recuperação de desastre do Azure para proteger seus dados.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "id": "AOAI.32",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Considerações sobre SLA",
+ "text": "As camadas de serviço de pesquisa de IA do Azure devem ser escolhidas para ter um SLA ",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "id": "AOAI.33",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "subcategory": "Sensibilidade de dados",
+ "text": "Classifique os dados e a confidencialidade, rotulando com o Microsoft Purview antes de gerar as inserções e certifique-se de tratar as inserções geradas com a mesma confidencialidade e classificação",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "id": "AOAI.34",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Criptografia em repouso",
+ "text": "Criptografar dados usados para RAG com criptografia SSE/Disco com BYOK opcional",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "id": "AOAI.35",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Criptografia de trânsito",
+ "text": "Certifique-se de que o TLS seja aplicado para dados em trânsito entre fontes de dados, pesquisa de IA usada para RG (Geração Aumentada por Recuperação) e comunicação LLM",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "id": "AOAI.36",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Controle de acesso",
+ "text": "Use o RBAC para gerenciar o acesso aos serviços do OpenAI do Azure. Atribua permissões apropriadas aos usuários e restrinja o acesso com base em suas funções e responsabilidades",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "id": "AOAI.37",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Mascaramento e redação de dados",
+ "text": "Implemente técnicas de criptografia, mascaramento ou redação de dados para ocultar dados confidenciais ou substituí-los por valores ofuscados em ambientes de não produção ou ao compartilhar dados para fins de teste ou solução de problemas",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "id": "AOAI.38",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Detecção e monitoramento de ameaças",
+ "text": "Utilize o Azure Defender para detectar e responder a ameaças de segurança e configurar mecanismos de monitoramento e alerta para identificar atividades suspeitas ou violações. Aproveite o Azure Sentinel para detecção e resposta avançadas a ameaças",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "id": "AOAI.39",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Retenção e descarte de dados",
+ "text": "Estabeleça políticas de retenção e descarte de dados para cumprir os regulamentos de conformidade. Implemente métodos de exclusão segura para dados que não são mais necessários e mantenha uma trilha de auditoria das atividades de retenção e descarte de dados",
+ "waf": "Segurança"
+ },
+ {
+ "category": "IA responsável",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "id": "AOAI.4",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Segurança de fuga da prisão",
+ "text": "Implementar proteções imediatas e detecção de aterramento usando a Segurança de conteúdo ",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "id": "AOAI.40",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Privacidade e conformidade de dados",
+ "text": "Garanta a conformidade com os regulamentos de proteção de dados relevantes, como GDPR ou HIPAA, implementando controles de privacidade e obtendo os consentimentos ou permissões necessários para atividades de processamento de dados.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "id": "AOAI.41",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Conscientização e treinamento de funcionários",
+ "text": "Eduque seus funcionários sobre as melhores práticas de segurança de dados, a importância de lidar com dados com segurança e os possíveis riscos associados a violações de dados. Incentive-os a seguir os protocolos de segurança de dados diligentemente.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "id": "AOAI.42",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Segregação ambiental",
+ "text": "Mantenha os dados de produção separados dos dados de desenvolvimento e teste. Use apenas dados confidenciais reais na produção e utilize dados anônimos ou sintéticos em ambientes de desenvolvimento e teste.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "id": "AOAI.43",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Segregação de índice",
+ "text": "Se você tiver níveis variados de confidencialidade de dados, considere criar índices separados para cada nível. Por exemplo, você pode ter um índice para dados gerais e outro para dados confidenciais, cada um regido por diferentes protocolos de acesso",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "id": "AOAI.44",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Dados confidenciais em instâncias separadas",
+ "text": "Leve a segregação um passo adiante, colocando conjuntos de dados confidenciais em diferentes instâncias do serviço. Cada instância pode ser controlada com seu próprio conjunto específico de políticas RBAC",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "id": "AOAI.45",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Incorporação e manipulação de vetores",
+ "text": "Reconheça que incorporações e vetores gerados a partir de informações confidenciais são eles próprios sensíveis. Esses dados devem receber as mesmas medidas de proteção que o material de origem",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "id": "AOAI.46",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Controle de acesso",
+ "text": "Aplique o RBAC aos armazenamentos de dados com incorporações e vetores e acesso ao escopo com base nos requisitos de acesso da função",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "id": "AOAI.47",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Segurança de rede",
+ "text": "Configurar o ponto de extremidade privado para serviços de IA para restringir o acesso ao serviço em sua rede",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "id": "AOAI.48",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Segurança de rede",
+ "text": "Imponha um controle estrito de tráfego de entrada e saída com o Firewall do Azure e UDRs e limite os pontos de integração externos",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "id": "AOAI.49",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Controle o acesso à rede",
+ "text": "Implemente segmentação de rede e controles de acesso para restringir o acesso ao aplicativo LLM apenas a usuários e sistemas autorizados e evitar movimentos laterais",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "id": "AOAI.5",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Otimização de token",
+ "text": "Use ferramentas de compactação imediatas como LLMLingua ou gprtrim",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "id": "AOAI.50",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "APIs e endpoints seguros",
+ "text": "Certifique-se de que as APIs e os endpoints usados pelo aplicativo LLM estejam devidamente protegidos com mecanismos de autenticação e autorização, como identidades gerenciadas, chaves de API ou OAuth, para impedir o acesso não autorizado.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "id": "AOAI.51",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Implementar autenticação forte",
+ "text": "Aplique mecanismos fortes de autenticação do usuário final, como autenticação multifator, para impedir o acesso não autorizado ao aplicativo LLM e aos recursos de rede associados",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "id": "AOAI.52",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Usar o monitoramento de rede",
+ "text": "Implemente ferramentas de monitoramento de rede para detectar e analisar o tráfego de rede em busca de atividades suspeitas ou maliciosas. Habilite o registro para capturar eventos de rede e facilitar a análise forense em caso de incidentes de segurança",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "id": "AOAI.53",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Auditorias de segurança e testes de penetração",
+ "text": "Realize auditorias de segurança e testes de penetração para identificar e resolver quaisquer pontos fracos ou vulnerabilidades de segurança de rede na infraestrutura de rede do aplicativo LLM",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "id": "AOAI.54",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "subcategory": "Implantação de infraestrutura",
+ "text": "Os Serviços de IA do Azure são marcados corretamente para melhor gerenciamento",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "AOAI.55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "subcategory": "Implantação de infraestrutura",
+ "text": "As contas do Serviço de IA do Azure seguem as convenções de nomenclatura organizacional",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "AOAI.56",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Log de diagnóstico",
+ "text": "Os logs de diagnóstico nos recursos de serviços de IA do Azure devem ser habilitados",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gerenciamento de identidade e acesso",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "AOAI.57",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Acesso baseado em ID de entrada",
+ "text": "Recomenda-se que o acesso à chave (autenticação local) seja desabilitado por segurança. Depois de desabilitar o acesso baseado em chave, o Microsoft Entra ID se torna o único método de acesso, o que permite manter o princípio de privilégio mínimo e o controle granular. ",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "AOAI.58",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento seguro de chaves",
+ "text": "Armazene e gerencie chaves com segurança usando o Azure Key Vault. Evite codificar ou inserir chaves confidenciais no código do aplicativo LLM e recuperá-las com segurança do Azure Key Vault usando identidades gerenciadas",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "id": "AOAI.59",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Rotação e expiração de chaves",
+ "text": "Gire e expire regularmente as chaves armazenadas no Azure Key Vault para minimizar o risco de acesso não autorizado.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "id": "AOAI.6",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Otimização de token",
+ "text": "Use tiktoken para entender os tamanhos de token para otimizações de token no modo de conversação",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "id": "AOAI.60",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Prática de codificação segura",
+ "text": "Siga práticas de codificação segura para evitar vulnerabilidades comuns, como ataques de injeção, cross-site scripting (XSS) ou configurações incorretas de segurança",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "id": "AOAI.61",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Patches e atualizações",
+ "text": "Configure um processo para atualizar e corrigir regularmente as bibliotecas LLM e outros componentes do sistema",
+ "waf": "Segurança"
+ },
+ {
+ "category": "IA responsável",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "id": "AOAI.62",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Governança",
+ "text": "Aderir aos termos de uso, políticas e diretrizes do Azure OpenAI ou de outros LLMs e casos de uso permitidos",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "id": "AOAI.63",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Familiarização com custos",
+ "text": "Entender a diferença no custo de modelos básicos e modelos ajustados e tamanhos de etapa de token",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "id": "AOAI.64",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Processamento em lote",
+ "text": "Solicitações em lote, sempre que possível, para minimizar a sobrecarga por chamada, o que pode reduzir os custos gerais. Certifique-se de otimizar o tamanho do lote",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "id": "AOAI.65",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Monitoramento de custos",
+ "text": "Configure um sistema de rastreamento de custos que monitore o uso do modelo e use essas informações para ajudar a informar as escolhas do modelo e solicitar tamanhos",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "id": "AOAI.66",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Limite de token",
+ "text": "Defina um limite máximo para o número de tokens por resposta do modelo. Otimize o tamanho para garantir que seja grande o suficiente para uma resposta válida",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "id": "AOAI.67",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Confiabilidade da pesquisa de IA",
+ "text": "Examine as diretrizes fornecidas sobre como configurar a pesquisa de IA para confiabilidade",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "id": "AOAI.68",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Limites de vetor de pesquisa de IA",
+ "text": "Planejar e gerenciar o armazenamento de vetores do AI Search",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "id": "AOAI.69",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "DevOps",
+ "text": "Aplique as práticas do LLMOps para automatizar o gerenciamento do ciclo de vida de seus aplicativos GenAI",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "id": "AOAI.7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Modelo de Custeio",
+ "text": "Avalie o uso de modelos de faturamento - PAYG vs PTU",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "id": "AOAI.70",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "DevOps",
+ "text": "Avaliar a qualidade de prompts e aplicativos ao alternar entre versões de modelo",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "id": "AOAI.71",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Desenvolvimento",
+ "text": "Avalie, monitore e refine seus aplicativos GenAI para recursos como fundamentação, relevância, precisão, coerência, fluência,",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "id": "AOAI.72",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Desenvolvimento",
+ "text": "Avaliar os resultados do Azure AI Search com base em diferentes parâmetros de pesquisa",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "id": "AOAI.73",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Desenvolvimento",
+ "text": "Olhe para os modelos de ajuste fino como forma de aumentar a precisão somente quando você tiver tentado outras abordagens básicas, como engenharia rápida e RAG com seus dados",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "id": "AOAI.74",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Desenvolvimento",
+ "text": "Use técnicas de engenharia rápida para melhorar a precisão das respostas do LLM",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Governança e segurança",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "id": "AOAI.75",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Auditorias de segurança e testes de penetração",
+ "text": "Equipe vermelha de seus aplicativos GenAI",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "id": "AOAI.76",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Feedback do usuário final",
+ "text": "Forneça aos usuários finais opções de pontuação para respostas LLM e acompanhe essas pontuações. ",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "category": "Otimização de custos",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "id": "AOAI.8",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de cotas",
+ "text": "Considere as práticas de gerenciamento de cotas",
+ "waf": "Otimização de custos"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "id": "AOAI.9",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "subcategory": "Balanceamento de carga",
+ "text": "Use soluções de balanceador de carga, como gateway baseado em APIM, para balancear carga e capacidade entre serviços e regiões",
+ "waf": "Excelência Operacional"
+ }
+ ],
+ "metadata": {
+ "name": "Azure OpenAI Review",
+ "state": "Preview",
+ "timestamp": "July 24, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Média"
+ },
+ {
+ "name": "Baixo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta verificação ainda não foi analisada",
+ "name": "Não verificado"
+ },
+ {
+ "description": "Há um item de ação associado a essa verificação",
+ "name": "Abrir"
+ },
+ {
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
+ "name": "Cumprido"
+ },
+ {
+ "description": "Recomendação compreendida, mas não necessária pelos requisitos atuais",
+ "name": "Não é necessário"
+ },
+ {
+ "description": "Não aplicável para o projeto atual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidade"
+ },
+ {
+ "name": "Segurança"
+ },
+ {
+ "name": "Custar"
+ },
+ {
+ "name": "Operações"
+ },
+ {
+ "name": "Desempenho"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sim"
+ },
+ {
+ "name": "Não"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/aoai_checklist.zh-Hant.json b/checklists/aoai_checklist.zh-Hant.json
new file mode 100644
index 000000000..0f017814a
--- /dev/null
+++ b/checklists/aoai_checklist.zh-Hant.json
@@ -0,0 +1,920 @@
+{
+ "categories": [
+ {
+ "name": "身份和訪問管理"
+ },
+ {
+ "name": "網路拓撲和連接"
+ },
+ {
+ "name": "BC 和DR"
+ },
+ {
+ "name": "治理與安全"
+ },
+ {
+ "name": "成本治理"
+ },
+ {
+ "name": "運營管理"
+ },
+ {
+ "name": "應用程式部署"
+ },
+ {
+ "name": "負責任的 AI"
+ }
+ ],
+ "items": [
+ {
+ "category": "負責任的 AI",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "id": "AOAI.1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "元提示",
+ "text": "遵循 Metaprompting 護欄,實現 realible AI",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "id": "AOAI.10",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "負載均衡",
+ "text": "考慮使用APIM或 AI central 等解決方案的閘道模式,以實現更好的速率限制、負載均衡、身份驗證和日誌記錄",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "id": "AOAI.11",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "監測",
+ "text": "為您的 AOAI 實例啟用監控",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "id": "AOAI.12",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "警報",
+ "text": "建立警報以通知團隊有關事件的通知,例如由對資源執行的操作(例如重新生成其訂閱金閜)創建的活動日誌中的條目或指標閾值(例如一小時內超過 10 的錯誤數)",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "id": "AOAI.13",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "監測",
+ "text": "監控令牌使用方式,防止由於容量導致服務中斷",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "id": "AOAI.14",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "可觀察性",
+ "text": "觀察已處理的推理令牌、生成的完成令牌等指標,監視速率限制",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "id": "AOAI.15",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "subcategory": "可觀察性",
+ "text": "如果診斷對你來說還不夠,請考慮在 Azure OpenAI 前面使用閘道(例如 Azure API 管理)來記錄傳入提示和傳出回應(如果允許)",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "AOAI.16",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "基礎設施部署",
+ "text": "使用基礎結構即代碼部署 Azure OpenAI 服務、模型部署和所有相關資源",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "AOAI.17",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "認證",
+ "text": "將 Microsoft Entra 身份驗證與託管標識(而不是 API 金鑰)配合使用",
+ "waf": "安全"
+ },
+ {
+ "category": "負責任的 AI",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "id": "AOAI.18",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "評估",
+ "text": "使用已知的黃金數據集評估系統的性能/準確性,該數據集具有輸入和正確答案。利用 PromptFlow 中的功能進行評估。",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "id": "AOAI.19",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "託管模型",
+ "text": "評估預配輸送量模型的使用方式",
+ "waf": "性能"
+ },
+ {
+ "category": "負責任的 AI",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "id": "AOAI.2",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "內容安全",
+ "text": "查看和實施 Azure AI 內容安全性",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "id": "AOAI.20",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "輸送量定義",
+ "text": "根據令牌數和每分鐘的回應來定義和評估系統的輸送量,並符合要求",
+ "waf": "性能"
+ },
+ {
+ "category": "運營管理",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "AOAI.21",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "延遲改善",
+ "text": "通過限制令牌大小、流式處理選項來改善系統的延遲",
+ "waf": "性能"
+ },
+ {
+ "category": "運營管理",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "id": "AOAI.22",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "彈性分離",
+ "text": "估計彈性需求,以根據優先順序確定同步和批量請求分離。對於高優先順序,使用同步方法,對於低優先順序,首選使用佇列的異步批處理",
+ "waf": "性能"
+ },
+ {
+ "category": "運營管理",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "id": "AOAI.23",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "標杆",
+ "text": "根據消費者的估計需求對代幣消費要求進行基準測試。如果使用的是預設輸送量單元部署,請考慮使用 Azure OpenAI 基準測試工具來幫助驗證輸送量",
+ "waf": "性能"
+ },
+ {
+ "category": "運營管理",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "id": "AOAI.24",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "彈性",
+ "text": "如果您使用的是預設輸送量單位 (PTU),請考慮為溢出請求部署每分鐘令牌 (TPM) 部署。當達到 PTU 限制時,使用閘道將請求路由到 TPM 部署。",
+ "waf": "性能"
+ },
+ {
+ "category": "運營管理",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "id": "AOAI.25",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "型號選擇",
+ "text": "為正確的任務選擇正確的模型。選擇在速度、回應質量和輸出複雜性之間做出正確權衡的模型",
+ "waf": "性能"
+ },
+ {
+ "category": "運營管理",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "id": "AOAI.26",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "微調",
+ "text": "有一個性能基線,而不進行微調,以瞭解微調是否提高了模型性能",
+ "waf": "性能"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "id": "AOAI.27",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "subcategory": "多區域架構",
+ "text": "跨區域部署多個 OAI 實例",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "id": "AOAI.28",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "負載均衡",
+ "text": "使用閘道模式(如 APIM)實現重試和運行狀況檢查",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "id": "AOAI.29",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "配額",
+ "text": "確保為工作負載提供足夠的 TPM 和 RPM 配額",
+ "waf": "可靠性"
+ },
+ {
+ "category": "負責任的 AI",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "id": "AOAI.3",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "UX 最佳實踐",
+ "text": "查看 HAI 工具包指南中的注意事項,並將這些交互實踐應用於 slution",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "id": "AOAI.30",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "負載均衡",
+ "text": "如果採用微調,則跨區域部署單獨的微調模型",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "id": "AOAI.31",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "數據備份和災難恢復",
+ "text": "定期備份和複製關鍵數據,以確保數據丟失或系統故障時的數據可用性和可恢復性。利用 Azure 的備份和災難恢復服務來保護數據。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "id": "AOAI.32",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "SLA 注意事項",
+ "text": "應選擇 Azure AI 搜索服務層級以具有 SLA",
+ "waf": "可靠性"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "id": "AOAI.33",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "subcategory": "數據敏感度",
+ "text": "對數據和敏感度進行分類,在生成嵌入之前使用 Microsoft Purview 進行標記,並確保以相同的敏感度和分類處理生成的嵌入",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "id": "AOAI.34",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "靜態加密",
+ "text": "使用 SSE/磁碟加密和可選的 BYOK 加密來加密用於 RAG 的數據",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "id": "AOAI.35",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "傳輸加密",
+ "text": "確保對跨數據源傳輸的數據實施 TLS,用於檢索增強生成 (RAG) 和 LLM 通信的 AI 搜索",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "id": "AOAI.36",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "存取控制",
+ "text": "使用 RBAC 管理對 Azure OpenAI 服務的訪問。為使用者分配適當的許可權,並根據其角色和職責限制訪問許可權",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "id": "AOAI.37",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "數據遮罩和編輯",
+ "text": "實施數據加密、遮罩或編輯技術,以在非生產環境中或出於測試或故障排除目的共用數據時隱藏敏感數據或將其替換為混淆值",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "id": "AOAI.38",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "威脅檢測和監控",
+ "text": "利用 Azure Defender 來檢測和回應安全威脅,並設置監視和警報機制來識別可疑活動或違規行為。利用 Azure Sentinel 進行高級威脅檢測和回應",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "id": "AOAI.39",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "數據保留和處置",
+ "text": "制定數據保留和處置策略,以遵守合規性法規。對不再需要的數據實施安全刪除方法,並維護數據保留和處置活動的審計跟蹤",
+ "waf": "安全"
+ },
+ {
+ "category": "負責任的 AI",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "id": "AOAI.4",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "越獄安全",
+ "text": "使用 Content Safety 實施 Prompt shields 和接地檢測",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "id": "AOAI.40",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "數據隱私與合規",
+ "text": "通過實施隱私控制並獲得數據處理活動所需的同意或許可,確保遵守相關的數據保護法規,例如GDPR或HIPAA。",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "id": "AOAI.41",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "員工意識和培訓",
+ "text": "對員工進行有關數據安全最佳實踐、安全處理數據的重要性以及與數據洩露相關的潛在風險的教育。鼓勵他們勤奮地遵循數據安全協定。",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "id": "AOAI.42",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "環境隔離",
+ "text": "將生產數據與開發和測試數據分開。僅在生產中使用真實的敏感數據,並在開發和測試環境中使用匿名或合成數據。",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "id": "AOAI.43",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "索引分離",
+ "text": "如果您具有不同級別的數據敏感度,請考慮為每個級別創建單獨的索引。例如,您可以有一個用於常規數據的索引,另一個用於敏感數據的索引,每個索引都由不同的訪問協定管理",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "id": "AOAI.44",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "不同實例中的敏感數據",
+ "text": "通過將敏感數據集放置在服務的不同實例中,進一步實現隔離。每個實例都可以使用其自己的特定 RBAC 策略集進行控制",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "id": "AOAI.45",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "嵌入和向量處理",
+ "text": "認識到從敏感資訊生成的嵌入和向量本身就是敏感的。這些數據應得到與源材料相同的保護措施",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "id": "AOAI.46",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "存取控制",
+ "text": "將 RBAC 應用於具有嵌入和向量的數據存儲,並根據角色的訪問要求確定存取範圍",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "id": "AOAI.47",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "網路安全",
+ "text": "為 AI 服務配置專用終結點,以限制網路內的服務訪問",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "id": "AOAI.48",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "網路安全",
+ "text": "使用 Azure 防火牆和 UDR 強制實施嚴格的入站和出站流量控制,並限制外部集成點",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "id": "AOAI.49",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "控制網路訪問",
+ "text": "實施網路分段和訪問控制,將 LLM 應用程式的存取限製為僅授權使用者和系統,並防止橫向行動",
+ "waf": "安全"
+ },
+ {
+ "category": "成本優化",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "id": "AOAI.5",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "代幣優化",
+ "text": "使用提示壓縮工具,如 LLMLingua 或 gprtrim",
+ "waf": "成本優化"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "id": "AOAI.50",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "保護 API 和端點",
+ "text": "確保 LLM 應用程式使用的 API 和端點使用身份驗證和授權機制(例如託管標識、API 金鑰或 OAuth)得到適當保護,以防止未經授權的訪問。",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "id": "AOAI.51",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "實施強身份驗證",
+ "text": "實施強大的最終使用者身份驗證機制,例如多因素身份驗證,以防止對 LLM 應用程式和相關網路資源的未經授權的訪問",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "id": "AOAI.52",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "使用網路監控",
+ "text": "實施網路監控工具,以檢測和分析網路流量中的任何可疑或惡意活動。啟用日誌記錄以捕獲網路事件,並在發生安全事件時促進取證分析",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "id": "AOAI.53",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "安全審計和滲透測試",
+ "text": "進行安全審計和滲透測試,以識別和解決LLM應用程式的網路基礎設施中的任何網路安全弱點或漏洞",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "id": "AOAI.54",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "subcategory": "基礎設施部署",
+ "text": "Azure AI 服務已正確標記,以便更好地管理",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "AOAI.55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "subcategory": "基礎設施部署",
+ "text": "Azure AI 服務帳戶遵循組織命名約定",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "AOAI.56",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "診斷記錄",
+ "text": "應啟用 Azure AI 服務資源中的診斷日誌",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "身份和訪問管理",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "AOAI.57",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "基於 Entra ID 的訪問",
+ "text": "為了安全起見,建議禁用密鑰訪問(本地身份驗證)。 禁用基於密鑰的訪問后,Microsoft Entra ID 將成為唯一的訪問方法,該方法允許保持最小許可權原則和精細控制。",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "AOAI.58",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "安全金鑰管理",
+ "text": "使用 Azure Key Vault 安全地存儲和管理密鑰。避免在 LLM 應用程式的代碼中硬編碼或嵌入敏感密鑰,並使用託管標識從 Azure Key Vault 中安全地檢索它們",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "id": "AOAI.59",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "密鑰輪換和過期",
+ "text": "定期輪換和過期存儲在 Azure Key Vault 中的密鑰,以最大程度地降低未經授權訪問的風險。",
+ "waf": "安全"
+ },
+ {
+ "category": "成本優化",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "id": "AOAI.6",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "代幣優化",
+ "text": "使用 tiktoken 了解對話模式下令牌優化的令牌大小",
+ "waf": "成本優化"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "id": "AOAI.60",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "安全編碼實踐",
+ "text": "遵循安全編碼做法,以防止常見漏洞,例如注入攻擊、跨網站腳本 (XSS) 或安全配置錯誤",
+ "waf": "安全"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "id": "AOAI.61",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "修補和更新",
+ "text": "設置一個流程來定期更新和修補 LLM 庫和其他系統元件",
+ "waf": "安全"
+ },
+ {
+ "category": "負責任的 AI",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "id": "AOAI.62",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "統轄",
+ "text": "遵守 Azure OpenAI 或其他 LLM 的使用條款、策略和指南以及允許的用例",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "成本優化",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "id": "AOAI.63",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "熟悉成本",
+ "text": "了解基礎模型和微調模型的成本差異以及令牌步長",
+ "waf": "成本優化"
+ },
+ {
+ "category": "成本優化",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "id": "AOAI.64",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "批處理",
+ "text": "在可能的情況下,批量請求,以最大程度地減少每次調用的開銷,從而降低總體成本。確保優化批量大小",
+ "waf": "成本優化"
+ },
+ {
+ "category": "成本優化",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "id": "AOAI.65",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "成本監控",
+ "text": "設置成本跟蹤系統,用於監視模型使用方式,並使用該資訊來説明通知模型選擇和提示大小",
+ "waf": "成本優化"
+ },
+ {
+ "category": "成本優化",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "id": "AOAI.66",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "令牌限制",
+ "text": "為每個模型回應的令牌數設置最大限制。優化大小以確保其足夠大以實現有效的回應",
+ "waf": "成本優化"
+ },
+ {
+ "category": "運營管理",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "id": "AOAI.67",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "AI 搜尋可靠性",
+ "text": "查看提供的有關設置 AI 搜索以實現可靠性的指南",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "id": "AOAI.68",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "AI 搜索向量限制",
+ "text": "規劃和管理 AI 搜索向量存儲",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "id": "AOAI.69",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "DevOps的",
+ "text": "應用 LLMOps 實踐來自動化 GenAI 應用程式的生命週期管理",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "成本優化",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "id": "AOAI.7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "成本核算模型",
+ "text": "評估計費模型的使用方式 - PAYG 與 PTU",
+ "waf": "成本優化"
+ },
+ {
+ "category": "運營管理",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "id": "AOAI.70",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "DevOps的",
+ "text": "在模型版本之間切換時評估提示和應用程式的品質",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "id": "AOAI.71",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "發展",
+ "text": "評估、監控和優化您的 GenAI 應用程式的特性,如接地氣、相關性、準確性、連貫性、流暢性、",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "id": "AOAI.72",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "發展",
+ "text": "根據不同的搜索參數評估 Azure AI 搜尋結果",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "id": "AOAI.73",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "發展",
+ "text": "只有在嘗試了其他基本方法(如提示工程和RAG處理數據)時,才將微調模型視為提高準確性的方法",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "運營管理",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "id": "AOAI.74",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "發展",
+ "text": "使用提示工程技術來提高 LLM 回應的準確性",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "治理與安全",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "id": "AOAI.75",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "安全審計和滲透測試",
+ "text": "紅隊您的 GenAI 應用程式",
+ "waf": "安全"
+ },
+ {
+ "category": "運營管理",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "id": "AOAI.76",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "最終用戶反饋",
+ "text": "為最終使用者提供 LLM 回應的評分選項並跟蹤這些分數。",
+ "waf": "卓越運營"
+ },
+ {
+ "category": "成本優化",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "id": "AOAI.8",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "subcategory": "配額管理",
+ "text": "考慮配額管理做法",
+ "waf": "成本優化"
+ },
+ {
+ "category": "運營管理",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "id": "AOAI.9",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "subcategory": "負載均衡",
+ "text": "使用負載均衡器解決方案(如基於APIM的閘道)在服務和區域之間平衡負載和容量",
+ "waf": "卓越運營"
+ }
+ ],
+ "metadata": {
+ "name": "Azure OpenAI Review",
+ "state": "Preview",
+ "timestamp": "July 24, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高"
+ },
+ {
+ "name": "中等"
+ },
+ {
+ "name": "低"
+ }
+ ],
+ "status": [
+ {
+ "description": "此檢查尚未查看",
+ "name": "未驗證"
+ },
+ {
+ "description": "有一個與此檢查關聯的操作項",
+ "name": "打開"
+ },
+ {
+ "description": "此檢查已經過驗證,並且沒有與之關聯的其他操作項",
+ "name": "實現"
+ },
+ {
+ "description": "建議已理解,但當前要求不需要",
+ "name": "不需要"
+ },
+ {
+ "description": "不適用於當前設計",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "可靠性"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "成本"
+ },
+ {
+ "name": "操作"
+ },
+ {
+ "name": "性能"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "是的"
+ },
+ {
+ "name": "不"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/appsvc_checklist.en.json b/checklists/appsvc_checklist.en.json
index 318035d0a..f3737b344 100644
--- a/checklists/appsvc_checklist.en.json
+++ b/checklists/appsvc_checklist.en.json
@@ -3,134 +3,146 @@
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Refer to baseline highly available zone-redundant web application architecture for best practices",
+ "text": "Implement a baseline highly available zone-redundant web application architecture. Ensure your Azure App Service is on Premium V2/V3 or Isolated v2 tiers for zone-redundant support.",
+ "description": "Leverage zone-redundancy to ensure high availability in the event of zone-level failures. Use Premium V2/V3 or Isolated v2 tiers, which provide support for zone-redundant deployments and ensure minimal downtime during disasters.",
"waf": "Reliability",
"service": "App Services",
"guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
"id": "01.01.01",
"cost": 1,
"severity": "Low",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations"
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations"
},
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Use Premium and Standard tiers. These tiers support staging slots and automated backups.",
+ "text": "Use Premium and Standard tiers for staging slots and automated backups. Align your backup retention period with disaster recovery needs.",
+ "description": "Leverage staging slots for zero-downtime deployments and automated backups to ensure disaster recovery. Choose the appropriate tier (Standard or Premium) based on the number of slots and disaster recovery requirements.",
"waf": "Reliability",
"service": "App Services",
"guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
"id": "01.01.02",
"cost": 1,
"severity": "Medium",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans"
+ "graph": "resources | where type =~ 'microsoft.web/serverfarms' | extend compliant = (sku.tier == 'Premium' or sku.tier == 'Standard') | distinct id,compliant",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans"
},
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Leverage Availability Zones where regionally applicable (requires Premium v2 or v3 tier)",
+ "text": "Leverage Availability Zones where regionally applicable (Premium V2/V3 tier required). Check region support for Availability Zones.",
+ "description": "Availability Zones provide physical isolation across datacenters in a region, reducing downtime during outages. Verify your region supports Availability Zones and use Premium V2/V3 tiers for zone-redundant deployments.",
"waf": "Reliability",
"service": "App Services",
"guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
"id": "01.01.03",
"cost": 1,
"severity": "High",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service"
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-service"
},
{
"category": "Operations",
"subcategory": "Monitoring",
- "text": "Implement health checks",
+ "text": "Implement health checks to monitor and detect issues with App Service instances. Health checks enable automatic instance replacement on failure.",
+ "description": "Enable health checks to detect unhealthy instances in real-time and automatically replace them to maintain high availability and application reliability.",
"waf": "Reliability",
"service": "App Services",
"guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
"id": "01.01.04",
"cost": 1,
"severity": "Medium",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check"
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.HealthCheckPath != '') | distinct id,compliant",
+ "link": "https://learn.microsoft.com/azure/app-service/monitor-instances-health-check"
},
{
"category": "Operations",
"subcategory": "Multi-tenant service",
- "text": "Refer to backup and restore best practices for Azure App Service",
+ "text": "Refer to backup and restore best practices for Azure App Service and App Service Environments (ASE) to ensure data availability and recovery.",
+ "description": "Follow best practices for configuring backups and restores in Azure App Service and ASE to guarantee data availability and ensure recovery during disaster scenarios.",
"waf": "Reliability",
"service": "App Services",
"guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
"id": "01.01.05",
"cost": 1,
"severity": "High",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup"
+ "link": "https://learn.microsoft.com/azure/app-service/manage-backup"
},
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Implement Azure App Service reliability best practices",
+ "text": "Implement Azure App Service reliability best practices, including auto-scaling, fault tolerance, health checks, and zone redundancy.",
+ "description": "Ensure high availability by incorporating scaling, fault tolerance, monitoring, and zone redundancy into your App Service architecture. Leverage health checks and availability zones to maintain uptime.",
"waf": "Reliability",
"service": "App Services",
"guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
"id": "01.01.06",
"cost": 1,
"severity": "High",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability"
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/compute/azure-app-service/reliability"
},
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Familiarize with how to move an App Service app to another region During a disaster",
+ "text": "Familiarize with App Service region failover, including active-active and active-passive configurations, automated failover, and IaC deployment.",
+ "description": "Prepare for disaster recovery by implementing region failover strategies. Utilize active-active and active-passive configurations, automated failover, and Infrastructure as Code (IaC) for seamless failover during outages.",
"waf": "Reliability",
"service": "App Services",
"guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
"id": "01.01.07",
"cost": 1,
"severity": "Low",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only"
+ "link": "https://learn.microsoft.com/azure/app-service/manage-disaster-recovery#recover-app-content-only"
},
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Familiarize with reliability support in Azure App Service",
+ "text": "Familiarize with reliability support in Azure App Service, including scaling options, SLAs, and automated recovery mechanisms.",
+ "description": "Azure App Service offers built-in reliability features, including scaling, fault tolerance, and service-level agreements (SLAs). Leverage these features to maintain consistent performance during outages.",
"waf": "Reliability",
"service": "App Services",
"guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
"id": "01.02.02",
"cost": 1,
"severity": "High",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service"
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-app-service"
},
{
"category": "BC and DR",
"subcategory": "High Availability",
- "text": "Ensure \"Always On\" is enabled for Function Apps running on a app service plan",
+ "text": "Ensure 'Always On' is enabled for Function Apps running on App Service plans to prevent idling and ensure continuous availability.",
+ "description": "Enabling 'Always On' for Function Apps ensures that the app does not go idle, maintaining its availability and responsiveness at all times.",
"waf": "Reliability",
"service": "App Services",
"guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
"id": "01.02.03",
"cost": 1,
"severity": "Medium",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on"
+ "link": "https://learn.microsoft.com/azure/azure-functions/dedicated-plan#always-on"
},
{
"category": "Operations",
"subcategory": "Monitoring",
- "text": "Monitor App Service instances using Health checks",
+ "text": "Monitor App Service instances using Health checks to detect unhealthy instances and automatically replace them.",
+ "description": "Health checks monitor the health of App Service instances, enabling automatic replacement of unhealthy instances to maintain high availability.",
"waf": "Reliability",
"service": "App Services",
"guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
"id": "01.02.04",
"cost": 1,
"severity": "Medium",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check"
+ "link": "https://learn.microsoft.com/azure/app-service/monitor-instances-health-check"
},
{
"category": "Operations",
"subcategory": "Monitoring",
- "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests",
+ "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests, ensuring proactive detection of performance issues and downtime.",
"waf": "Reliability",
"service": "App Services",
"guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
"id": "01.03.01",
"cost": 1,
"severity": "Medium",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/availability-overview"
},
{
"category": "Operations",
@@ -142,13 +154,13 @@
"id": "01.03.01.01",
"cost": 1,
"severity": "Low",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests"
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/availability-standard-tests"
},
{
"category": "Security",
"subcategory": "Data Protection",
- "text": "Use Key Vault to store secrets",
- "description": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a safe and audited environment for storing secrets and is well-integrated with App Service through the Key Vault SDK or App Service Key Vault References.",
+ "text": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a secure, managed, and audited environment for storing secrets, and integrates seamlessly with App Service via App Service Key Vault References for enhanced security.",
+ "description": "Azure Key Vault ensures secrets are encrypted, securely stored, and accessed only by authorized applications. It supports audit logging, and secret versioning, and reduces the risk of accidental exposure of sensitive information.",
"waf": "Security",
"service": "App Services",
"guid": "834ac932-223e-4ce8-8b12-3071a5416415",
@@ -159,8 +171,8 @@
{
"category": "Security",
"subcategory": "Data Protection",
- "text": "Use Managed Identity to connect to Key Vault",
- "description": "Use a Managed Identity to connect to Key Vault either using the Key Vault SDK or through App Service Key Vault References.",
+ "text": "Use Managed Identity to securely connect to Azure Key Vault for accessing secrets, through App Service Key Vault References.",
+ "description": "Managed Identity eliminates the need for hard-coded credentials by allowing App Service to authenticate to Azure Key Vault securely. This reduces the risk of credential exposure and simplifies secret management for enhanced security.",
"waf": "Security",
"service": "App Services",
"guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
@@ -171,8 +183,8 @@
{
"category": "Security",
"subcategory": "Data Protection",
- "text": "Use Key Vault to store TLS certificate.",
- "description": "Store the App Service TLS certificate in Key Vault.",
+ "text": "Use Azure Key Vault to securely store and manage TLS certificates for App Service.",
+ "description": "Storing TLS certificates in Azure Key Vault enhances security by providing centralized, secure management and automated renewal of certificates. This reduces the risk of manual handling errors and certificate expiration.",
"waf": "Security",
"service": "App Services",
"guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
@@ -183,8 +195,8 @@
{
"category": "Security",
"subcategory": "Data Protection",
- "text": "Isolate systems that process sensitive information",
- "description": "Systems that process sensitive information should be isolated. To do so, use separate App Service Plans or App Service Environments and consider the use of different subscriptions or management groups.",
+ "text": "Isolate systems that process sensitive information using separate App Service Plans, App Service Environments (ASE), and consider different subscriptions or management groups for enhanced security.",
+ "description": "To minimize exposure and improve security, isolate systems processing sensitive data. Leverage separate App Service Plans or App Service Environments for isolation, and use different subscriptions or management groups to enforce stricter boundaries and governance.",
"waf": "Security",
"service": "App Services",
"guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
@@ -207,8 +219,8 @@
{
"category": "Security",
"subcategory": "Identity and Access Control",
- "text": "Use an established Identity Provider for authentication",
- "description": "For authenticated web application, use a well established Identity Provider like Azure AD or Azure AD B2C. Leverage the application framework of your choice to integrate with this provider or use the App Service Authentication / Authorization feature.",
+ "text": "Use Microsoft Entra ID or B2C for secure authentication and Single Sign-On (SSO).",
+ "description": "Use Microsoft Entra ID or B2C for secure user authentication and Single Sign-On (SSO) across applications. Integrate using the built-in App Service Authentication/Authorization feature for streamlined security and compliance with modern authentication protocols like OpenID Connect.",
"waf": "Security",
"service": "App Services",
"guid": "919ca0b2-c121-459e-814b-933df574eccc",
@@ -219,8 +231,8 @@
{
"category": "Security",
"subcategory": "Identity and Access Control",
- "text": "Deploy from a trusted environment",
- "description": "Deploy code to App Service from a controlled and trusted environment, like a well-managed and secured DevOps deployment pipeline. This avoids code that was not version controlled and verified to be deployed from a malicious host.",
+ "text": "Deploy code to App Service from a trusted and secure environment.",
+ "description": "Ensure all code deployments to App Service originate from a controlled, secured environment, such as a well-managed DevOps pipeline. This practice mitigates the risk of deploying unauthorized or malicious code by enforcing version control, code verification, and secure hosting.",
"waf": "Security",
"service": "App Services",
"guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
@@ -231,8 +243,8 @@
{
"category": "Security",
"subcategory": "Identity and Access Control",
- "text": "Disable basic authentication",
- "description": "Disable basic authentication for both FTP/FTPS and for WebDeploy/SCM. This disables access to these services and enforces the use of Azure AD secured endpoints for deployment. Note that the SCM site can also be opened using Azure AD credentials.",
+ "text": "Disable basic authentication for FTP/FTPS and WebDeploy/SCM.",
+ "description": "Disable basic authentication for FTP/FTPS and WebDeploy/SCM to enhance security by enforcing Microsoft Entra ID secured endpoints for deployment. This ensures that only authenticated users using Microsoft Entra ID credentials can access deployment services, including the SCM site.",
"waf": "Security",
"service": "App Services",
"guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
@@ -243,8 +255,8 @@
{
"category": "Security",
"subcategory": "Identity and Access Control",
- "text": "Use Managed Identity to connect to resources",
- "description": "Where possible use Managed Identity to connect to Azure AD secured resources. If this is not possible, store secrets in Key Vault and connect to Key Vault using a Managed Identity instead.",
+ "text": "Use Managed Identity to connect to Microsoft Entra ID secured resources.",
+ "description": "Wherever possible, use Managed Identity to securely connect to Microsoft Entra ID-secured resources without storing credentials. If this is not feasible, store secrets in Azure Key Vault and access them using Managed Identity to maintain security and reduce the risk of credential exposure.",
"waf": "Security",
"service": "App Services",
"guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
@@ -255,8 +267,8 @@
{
"category": "Security",
"subcategory": "Identity and Access Control",
- "text": "Pull containers using a Managed Identity",
- "description": "Where using images stored in Azure Container Registry, pull these using a Managed Identity.",
+ "text": "Pull container images from Azure Container Registry using a Managed Identity.",
+ "description": "When using images stored in Azure Container Registry, pull these images using a Managed Identity to avoid storing credentials. This ensures secure access to container images and reduces the risk of credential exposure.",
"waf": "Security",
"service": "App Services",
"guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
@@ -267,8 +279,8 @@
{
"category": "Security",
"subcategory": "Logging and Monitoring",
- "text": "Send App Service runtime logs to Log Analytics",
- "description": "By configuring the diagnostic settings of App Service, you can send all telemetry to Log Analytics as the central destination for logging and monitoring. This allows you to monitor runtime activity of App Service such as HTTP logs, application logs, platform logs, ...",
+ "text": "Send App Service runtime and security logs to Log Analytics for centralized monitoring and alerting.",
+ "description": "Configure diagnostic settings to send telemetry and security logs (including HTTP, platform, and audit logs) to Log Analytics. Centralized logging enhances monitoring, threat detection, and compliance reporting.",
"waf": "Security",
"service": "App Services",
"guid": "47768314-c115-4775-a2ea-55b46ad48408",
@@ -291,8 +303,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Outbound network access should be controlled",
- "description": "Control outbound network access using a combination of regional VNet integration, network security groups and UDR's. Traffic should be routed to an NVA such as Azure Firewall. Ensure to monitor the Firewall's logs.",
+ "text": "Control outbound network access for App Service using VNet integration, NSGs, UDRs, and firewalls.",
+ "description": "Use regional VNet integration, Network Security Groups (NSGs), and User-Defined Routes (UDRs) to control outbound network access. Route traffic through a Network Virtual Appliance (NVA), such as Azure Firewall, and monitor firewall logs to ensure traffic is properly controlled and secure.",
"waf": "Security",
"service": "App Services",
"guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
@@ -303,8 +315,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Ensure a stable IP for outbound communications towards internet addresses",
- "description": "You can provide a stable outbound IP by using VNet integration and using a VNet NAT Gateway or an NVA like Azure Firewall. This allows the receiving party to allow-list based on IP, should that be needed. Note that for communications towards Azure Services often there's no need to depend on the IP address and mechanics like Service Endpoints should be used instead. (Also the use of private endpoints on the receiving end avoids for SNAT to happen and provides a stable outbound IP range.)",
+ "text": "Ensure a stable IP for outbound communications by using VNet NAT Gateway or Azure Firewall.",
+ "description": "Provide a stable outbound IP by using VNet integration with a NAT Gateway or Network Virtual Appliance (NVA) like Azure Firewall. This enables the receiving party to allow-list based on IP, if necessary. For communications with Azure services, use mechanisms like Service Endpoints or private endpoints to avoid relying on static IPs, ensuring secure and efficient connectivity.",
"waf": "Security",
"service": "App Services",
"guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
@@ -315,8 +327,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Inbound network access should be controlled",
- "description": "Control inbound network access using a combination of App Service Access Restrictions, Service Endpoints or Private Endpoints. Different access restrictions can be required and configured for the web app itself and the SCM site.",
+ "text": "Control inbound network access using Access Restrictions, Service Endpoints, or Private Endpoints.",
+ "description": "Control inbound network access by configuring App Service Access Restrictions, Service Endpoints, or Private Endpoints. Ensure appropriate restrictions are set for both the web app and the SCM (deployment) site to limit unauthorized access and enhance security.",
"waf": "Security",
"service": "App Services",
"guid": "0725769e-e669-41a4-a34a-c932223ece80",
@@ -327,8 +339,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Use a WAF in front of App Service",
- "description": "Protect against malicious inbound traffic using a Web Application Firewall like Application Gateway or Azure Front Door. Make sure to monitor the WAF's logs.",
+ "text": "Use a Web Application Firewall (WAF) in front of App Service.",
+ "description": "Protect App Service from malicious inbound traffic by deploying a Web Application Firewall (WAF) using Azure Application Gateway or Azure Front Door. Ensure WAF logs are monitored regularly to detect and respond to security threats.",
"waf": "Security",
"service": "App Services",
"guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
@@ -339,8 +351,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Avoid for WAF to be bypassed",
- "description": "Make sure the WAF cannot be bypassed by locking down access to only the WAF. Use a combination of Access Restrictions, Service Endpoints and Private Endpoints.",
+ "text": "Ensure the WAF cannot be bypassed by securing access to App Service.",
+ "description": "To prevent the Web Application Firewall (WAF) from being bypassed, lock down access to App Service by using Access Restrictions, Service Endpoints, and Private Endpoints. This ensures that all traffic is routed through the WAF, providing a secure front layer of protection.",
"waf": "Security",
"service": "App Services",
"guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
@@ -351,8 +363,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Set minimum TLS policy to 1.2",
- "description": "Set minimum TLS policy to 1.2 in App Service configuration.",
+ "text": "Set minimum TLS policy to 1.2 or higher, preferably 1.3, in App Service configuration.",
+ "description": "Ensure that the minimum TLS policy is set to 1.2 or higher, with a preference for TLS 1.3, to enhance security through stronger encryption protocols. TLS 1.3 provides additional security improvements and faster handshake times, reducing vulnerabilities associated with older versions.",
"waf": "Security",
"service": "App Services",
"guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
@@ -364,8 +376,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Use HTTPS only",
- "description": "Configure App Service to use HTTPS only. This causes App Service to redirect from HTTP to HTTPS. Strongly consider the use of HTTP Strict Transport Security (HSTS) in your code or from your WAF, which informs browsers that the site should only be accessed using HTTPS.",
+ "text": "Use HTTPS only and consider enabling HTTP Strict Transport Security (HSTS).",
+ "description": "Configure App Service to enforce HTTPS-only, automatically redirecting all HTTP traffic to HTTPS. Additionally, implement HTTP Strict Transport Security (HSTS) in your code or via a Web Application Firewall (WAF) to ensure browsers only access the site over HTTPS, enhancing security by preventing downgrade attacks.",
"waf": "Security",
"service": "App Services",
"guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
@@ -377,9 +389,9 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Wildcards must not be used for CORS",
- "description": "Do not use wildcards in your CORS configuration, as this allows all origins to access the service (thereby defeating the purpose of CORS). Specifically only allow the origins that you expect to be able to access the service.",
- "waf": "Security",
+ "text": "Avoid using wildcards for CORS; specify allowed origins explicitly.",
+ "description": "Do not use wildcards (*) in your CORS configuration, as this permits unrestricted access from any origin, compromising security. Instead, explicitly specify trusted origins that are allowed to access the service, ensuring controlled access.",
+ "waf": "Security",
"service": "App Services",
"guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
"id": "A04.08",
@@ -389,8 +401,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Turn off remote debugging",
- "description": "Remote debugging must not be turned on in production as this opens additional ports on the service which increases the attack surface. Note that the service does turn of remote debugging automatically after 48 hours.",
+ "text": "Turn off remote debugging in production environments.",
+ "description": "Remote debugging should not be enabled in production as it opens additional ports, increasing the attack surface. Although App Service automatically turns off remote debugging after 48 hours, it is recommended to disable it manually in production to maintain a secure environment.",
"waf": "Security",
"service": "App Services",
"guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
@@ -426,8 +438,8 @@
{
"category": "Security",
"subcategory": "Network Security",
- "text": "Pull containers over a Virtual Network",
- "description": "Where using images stored in Azure Container Registry, pull these over a virtual network from Azure Container Registry using its private endpoint and the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
+ "text": "Pull container images over a Virtual Network from Azure Container Registry.",
+ "description": "When using images stored in Azure Container Registry, ensure they are pulled over a virtual network by using a private endpoint and configuring the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'. This ensures secure communication between App Service and the registry, preventing exposure to the public internet.",
"waf": "Security",
"service": "App Services",
"guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
@@ -438,8 +450,8 @@
{
"category": "Security",
"subcategory": "Penetration Testing",
- "text": "Conduct a penetration test",
- "description": "Conduct a penetration test on the web application following the penetration testing rules of engagement.",
+ "text": "Conduct a penetration test on the web application.",
+ "description": "Perform a penetration test on the web application in accordance with Azure's penetration testing rules of engagement. This helps identify vulnerabilities and security weaknesses that can be addressed before they are exploited.",
"waf": "Security",
"service": "App Services",
"guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
@@ -450,8 +462,8 @@
{
"category": "Security",
"subcategory": "Vulnerability Management",
- "text": "Deploy validated code",
- "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
+ "text": "Deploy validated and vulnerability-scanned code.",
+ "description": "Ensure that only trusted code, which has been validated and scanned for vulnerabilities, is deployed to production following DevSecOps practices. This minimizes the risk of introducing security vulnerabilities into the application environment.",
"waf": "Security",
"service": "App Services",
"guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
@@ -463,13 +475,77 @@
"category": "Security",
"subcategory": "Vulnerability Management",
"text": "Use up-to-date platforms, languages, protocols and frameworks",
- "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
+ "description": "Ensure that the latest versions of supported platforms, programming languages, protocols, and frameworks are used. Regular updates mitigate the risk of security vulnerabilities and ensure compatibility with security patches.",
"waf": "Security",
"service": "App Services",
"guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
"id": "A06.02",
"severity": "High",
"link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime"
+ },
+ {
+ "category": "Operations",
+ "subcategory": "High Availability",
+ "text": "Use Auto-Healing with custom rules to restart App Service instances automatically when failures occur.",
+ "description": "Leverage Auto-Healing in Azure App Service to automatically restart instances or trigger custom actions based on pre-defined failure conditions like memory thresholds, HTTP errors, or specific event logs.",
+ "waf": "Reliability",
+ "service": "App Services",
+ "guid": "60b3a935-33e5-45c9-87c7-53882e395b46",
+ "id": "01.02.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-diagnostics"
+ },
+ {
+ "category": "Operations",
+ "subcategory": "Monitoring",
+ "text": "Set up alerts for critical Application Insights metrics, such as response time and failure rates.",
+ "description": "Configure Azure Monitor alerts based on Application Insights metrics for response times, failure rates, and overall availability. Alerts help detect issues proactively and reduce mean-time-to-recovery (MTTR).",
+ "waf": "Reliability",
+ "service": "App Services",
+ "guid": "e52e4514-02a7-4e81-a98e-88ce1b18e557",
+ "id": "01.03.02",
+ "cost": 1,
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/alerts"
+ },
+ {
+ "category": "Governance and Security",
+ "subcategory": "Compliance",
+ "text": "Apply Azure Policy to enforce compliance across App Service configurations.",
+ "description": "Use Azure Policy to enforce security, compliance, and governance configurations for App Service. Policies can ensure that critical settings such as TLS versions, backup configurations, and network restrictions are enforced across all App Service instances.",
+ "waf": "Governance",
+ "service": "App Services",
+ "guid": "361e886f-ca40-4ead-a8e9-1379c642ae9c",
+ "id": "G01.01",
+ "cost": 2,
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview"
+ },
+ {
+ "category": "Cost Governance",
+ "subcategory": "Cost Monitoring",
+ "text": "Monitor App Service costs using Azure Cost Management and create cost alerts.",
+ "description": "Leverage Azure Cost Management to track and forecast App Service expenses. Set up alerts for budget thresholds to avoid overspending, and optimize costs based on resource utilization trends.",
+ "waf": "Cost",
+ "service": "App Services",
+ "guid": "42eb48f0-28ff-497c-b2c0-a8fa1f989832",
+ "id": "C01.01",
+ "cost": 1,
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/"
+ },
+ {
+ "category": "Cost Governance",
+ "subcategory": "Cost Optimization",
+ "text": "Purchase reserved instances for App Service plans to optimize long-term costs.",
+ "description": "If you have predictable and steady usage of App Service, purchasing Reserved Instances can significantly reduce long-term costs. Commit to one or three years for lower pricing compared to pay-as-you-go.",
+ "waf": "Cost",
+ "service": "App Services",
+ "guid": "e489221b-487e-48a3-aaab-48e3d205ca12",
+ "id": "C01.02",
+ "cost": 3,
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/"
}
],
"categories": [
@@ -559,4 +635,4 @@
"waf": "all",
"timestamp": "March 07, 2024"
}
-}
\ No newline at end of file
+}
diff --git a/checklists/avs_checklist.en.json b/checklists/avs_checklist.en.json
index dabaf1373..9cf0513ec 100644
--- a/checklists/avs_checklist.en.json
+++ b/checklists/avs_checklist.en.json
@@ -269,7 +269,8 @@
"service": "AVS",
"guid": "334fdf91-c234-4182-a652-75269440b4be",
"id": "C02.05",
- "severity": "Medium"
+ "severity": "Medium",
+ "graph": "resources| where type =~ 'Microsoft.Network/virtualNetworkGateways'| mv-expand ipConfigurations=properties.ipConfigurations| project subnetId=tostring(ipConfigurations.properties.subnet.id)| where isnotempty(subnetId)| join (resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | project id, compliant = (enableDdosProtection == 'true')"
},
{
"category": "Governance",
@@ -539,7 +540,8 @@
"service": "AVS",
"guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
"id": "D01.02",
- "severity": "High"
+ "severity": "High",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id"
},
{
"category": "Management",
@@ -549,7 +551,8 @@
"service": "AVS",
"guid": "9659e396-80e7-4828-ac93-5657d02bff45",
"id": "D01.03",
- "severity": "High"
+ "severity": "High",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id"
},
{
"category": "Management",
@@ -559,7 +562,8 @@
"service": "AVS",
"guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
"id": "D01.04",
- "severity": "High"
+ "severity": "High",
+ "graph": "resources| distinct subscriptionId| join kind=leftouter( resources | where type =~ 'microsoft.insights/activitylogalerts' | mv-expand condition1 = properties.condition.allOf | mv-expand condition2 = condition1.anyOf | extend alertEnabled = tostring(properties.enabled) | summarize set_condition1=make_set(condition1.equals), set_condition2=make_set(condition2.equals) by id, name,type,tenantId,resourceGroup,subscriptionId, alertEnabled | where set_has_element(set_condition1, 'ServiceHealth') | extend category = 'ServiceHealth' | extend all = iff(set_has_element(set_condition1, 'ServiceHealth') and array_length(set_condition2) == 0, true, false) | extend incident = iff(all, true, iff(set_has_element(set_condition1, 'Incident'), true, set_has_element(set_condition2, 'Incident'))) | extend maintenance = iff(all, true, iff(set_has_element(set_condition1, 'Maintenance'), true, set_has_element(set_condition2, 'Maintenance'))) | extend informational = iff(all, true, iff(set_has_element(set_condition1, 'Informational') or set_has_element(set_condition1, 'ActionRequired'), true, set_has_element(set_condition2, 'Informational') or set_has_element(set_condition2, 'ActionRequired'))) | extend security = iff(all, true, iff(set_has_element(set_condition1, 'Security'), true, set_has_element(set_condition2, 'Security'))) | project id, name, subscriptionId, category, tostring(alertEnabled), tostring(incident), tostring(maintenance), tostring(informational), tostring(security) | summarize count_alertEnabled=countif(alertEnabled == 'true'), count_incident=countif(incident == 'True'), count_maintenance=countif(maintenance == 'True'), count_informational=countif(informational == 'True'), count_security=countif(security == 'True') by subscriptionId) on subscriptionId| project subscriptionId, alertEnabled=iff(isnotnull(count_alertEnabled), count_alertEnabled, 0), incident=iff(isnotnull(count_incident), count_incident, 0), security=iff(isnotnull(count_security), count_security, 0), maintenance=iff(isnotnull(count_maintenance), count_maintenance, 0), informational=iff(isnotnull(count_informational), count_informational, 0)| order by incident, maintenance, informational, security desc| project id=subscriptionId, compliant=(alertEnabled > 0 and incident > 0 and security > 0 and maintenance > 0 and informational > 0)"
},
{
"category": "Management",
@@ -1148,4 +1152,4 @@
"waf": "all",
"timestamp": "January 09, 2024"
}
-}
\ No newline at end of file
+}
diff --git a/checklists/azfun_checklist.en.json b/checklists/azfun_checklist.en.json
index 401858e7e..2deceee1f 100644
--- a/checklists/azfun_checklist.en.json
+++ b/checklists/azfun_checklist.en.json
@@ -22,6 +22,7 @@
"id": "A01.02",
"cost": 1,
"severity": "High",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' and tolower(kind) !contains 'workflow' | extend aspResourceId = tostring(properties.serverFarmId), managedEnvId = tostring(properties.managedEnvironmentId), sku = tostring(properties.sku) | extend sku = iif(isnotempty(sku), sku, iif(isnotempty(managedEnvId), 'ContainerApps', '')) | where sku !in ('Dynamic', 'FlexConsumption', '') | extend aspName = tostring(split(aspResourceId, '/').[-1]), managedEnvName = tostring(split(managedEnvId, '/').[-1]) | extend HostingPlan = tostring(iif(isnotempty(aspName), aspName, managedEnvName)) | project functionAppName = name, functionAppId = id, HostingPlan, sku | join kind=inner ( resources | where type =~ 'Microsoft.Web/serverfarms' or type =~ 'Microsoft.App/managedEnvironments' | extend HostingPlan = tostring(name), zoneRedundant = tostring(properties.zoneRedundant), compliant = tobool(properties.zoneRedundant) | project HostingPlan, resourceId = id, zoneRedundant, compliant ) on HostingPlan | project functionAppName, functionAppId, sku, HostingPlan, resourceId, zoneRedundant, compliant",
"link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans"
},
{
@@ -58,6 +59,7 @@
"id": "A01.05",
"cost": 1,
"severity": "High",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' | where tolower(kind) !contains 'workflow' | where isnotempty(properties.serverFarmId) | extend sku = tostring(properties.sku) | where isnotempty(sku) | where sku !in ('Dynamic', 'FlexConsumption', 'ElasticPremium') | extend alwaysOn = properties.siteConfig.alwaysOn | project functionAppName = name, functionAppId = id, serverFarmId = tostring(properties.serverFarmId), sku, alwaysOn, compliant = tobool(alwaysOn)",
"link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on"
},
{
@@ -172,4 +174,4 @@
"waf": "all",
"timestamp": "April 09, 2024"
}
-}
\ No newline at end of file
+}
diff --git a/checklists/azure_arc_checklist.en.json b/checklists/azure_arc_checklist.en.json
index d6b7511c3..e46326489 100644
--- a/checklists/azure_arc_checklist.en.json
+++ b/checklists/azure_arc_checklist.en.json
@@ -184,6 +184,7 @@
"description": "Use automatic upgrades where available and define an update strategy for all extensions not supporting automatic upgrades.",
"guid": "4c2bd463-cbbb-4c86-a195-abb91a4ed90d",
"severity": "High",
+ "graph": "resources | where type =~ 'microsoft.hybridcompute/machines/extensions'| extend compliant = (properties.enableAutomaticUpgrade == 'true') | distinct id, compliant",
"link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-automatic-vm-extension-upgrade?tabs=azure-portal"
},
{
diff --git a/checklists/azure_storage_checklist.en.json b/checklists/azure_storage_checklist.en.json
index 76d1a6313..ecb101fbf 100644
--- a/checklists/azure_storage_checklist.en.json
+++ b/checklists/azure_storage_checklist.en.json
@@ -1,551 +1,570 @@
{
- "items": [
- {
- "category": "Security",
- "subcategory": " Overview",
- "text": "Consider the 'Azure security baseline for storage'",
- "description": "Apply guidance from the Microsoft cloud security benchmark related to Storage",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "id": "A01.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "Consider using private endpoints for Azure Storage",
- "description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "id": "A02.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints"
- },
- {
- "category": "Security",
- "subcategory": "Governance",
- "text": "Ensure older storage accounts are not using 'classic deployment model'",
- "description": "Newly created storage accounts are created using the ARM deployment model, so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage accounts with classic deployment model in a subscription",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "id": "A03.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts"
- },
- {
- "category": "Security",
- "subcategory": "Governance",
- "text": "Enable Microsoft Defender for all of your storage accounts",
- "description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "id": "A03.02",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure"
- },
- {
- "category": "Security",
- "subcategory": "Data Availability",
- "text": "Enable 'soft delete' for blobs",
- "description": "The soft-delete mechanism allows to recover accidentally deleted blobs.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "id": "A04.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview"
- },
- {
- "category": "Security",
- "subcategory": "Confidentiality",
- "text": "Disable 'soft delete' for blobs",
- "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "id": "A05.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable"
- },
- {
- "category": "Security",
- "subcategory": "Data Availability",
- "text": "Enable 'soft delete' for containers",
- "description": "Soft delete for containers enables you to recover a container after it has been deleted, for example recover from an accidental delete operation.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "id": "A06.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview"
- },
- {
- "category": "Security",
- "subcategory": "Confidentiality",
- "text": "Disable 'soft delete' for containers",
- "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "id": "A07.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable"
- },
- {
- "category": "Security",
- "subcategory": "Data Availability",
- "text": "Enable resource locks on storage accounts",
- "description": "Prevents accidental deletion of a storage account, by forcing the user to first remove the deletion lock, prior to deletion",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "id": "A08.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource"
- },
- {
- "category": "Security",
- "subcategory": "Data Availability, Compliance",
- "text": "Consider immutable blobs",
- "description": "Consider 'legal hold' or 'time-based retention' policies for blobs, so that is is impossible to delete the blob, the container, or the storage account. Please note that 'impossible' actually means 'impossible'; once a storage account contains an immutable blob, the only way to 'get rid' of that storage account is by cancelling the Azure subscription.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "id": "A09.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "Require HTTPS, i.e. disable port 80 on the storage account",
- "description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "id": "A10.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "When enforcing HTTPS (disabling HTTP), check that you do not use custom domains (CNAME) for the storage account.",
- "description": "When configuring a custom domain (hostname) on a storage account, check whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your storage account.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "id": "A10.02",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "Limit shared access signature (SAS) tokens to HTTPS connections only",
- "description": "Requiring HTTPS when a client uses a SAS token to access blob data helps to minimize the risk of credential loss.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "id": "A10.03",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Use Azure Active Directory (Azure AD) tokens for blob access",
- "description": "AAD tokens should be favored over shared access signatures, wherever possible",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "id": "A11.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Least privilege in IaM permissions",
- "description": "When assigning a role to a user, group, or application, grant that security principal only those permissions that are necessary for them to perform their tasks. Limiting access to resources helps prevent both unintentional and malicious misuse of your data.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "id": "A11.02",
- "severity": "Medium"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "When using SAS, prefer 'user delegation SAS' over storage-account-key based SAS.",
- "description": "A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. A user delegation SAS is analogous to a service SAS in terms of its scope and function, but offers security benefits over the service SAS. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "id": "A11.03",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider disabling storage account keys, so that only AAD access (and user delegation SAS) is supported.",
- "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on AAD authentication makes it easier to tie storage access to a user. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "id": "A11.04",
- "severity": "High",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key"
- },
- {
- "category": "Security",
- "subcategory": "Monitoring",
- "text": "Consider using Azure Monitor to audit control plane operations on the storage account",
- "description": "Use Activity Log data to identify 'when', 'who', 'what' and 'how' the security of your storage account is being viewed or changed (i.e. storage account keys, access policies, etc.).",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "id": "A12.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "When using storage account keys, consider enabling a 'key expiration policy'",
- "description": "A key expiration policy enables you to set a reminder for the rotation of the account access keys. The reminder is displayed if the specified interval has elapsed and the keys have not yet been rotated.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "id": "A13.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider configuring an SAS expiration policy",
- "description": "A SAS expiration policy specifies a recommended interval over which the SAS is valid. SAS expiration policies apply to a service SAS or an account SAS. When a user generates service SAS or an account SAS with a validity interval that is larger than the recommended interval, they'll see a warning.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "id": "A13.02",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider linking SAS to a stored access policy",
- "description": "Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "id": "A13.03",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy"
- },
- {
- "category": "Security",
- "subcategory": "CI/CD",
- "text": "Consider configuring your application's source code repository to detect checked-in connection strings and storage account keys.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "id": "A14.01",
- "severity": "Medium",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider storing connection strings in Azure KeyVault (in scenarios where managed identities are not possible)",
- "description": "Ideally, your application should be using a managed identity to authenticate to Azure Storage. If that is not possible, consider having the storage credential (connection string, storage account key, SAS, service principal credential) in Azure KeyVault or an equivalent service.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "id": "A15.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Strive for short validity periods for ad-hoc SAS",
- "description": "Use near-term expiration times on an ad hoc SAS service SAS or account SAS. In this way, even if a SAS is compromised, it's valid only for a short time. This practice is especially important if you cannot reference a stored access policy. Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "id": "A15.02",
- "severity": "High",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Apply a narrow scope to a SAS",
- "description": "When creating a SAS, be as specific and restrictive as possible. Prefer a SAS for a single resource and operation over a SAS which gives much broader access.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "id": "A15.03",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider scoping SAS to a specific client IP address, wherever possible",
- "description": "A SAS can include parameters on which client IP addresses or address ranges are authorized to request a resource using the SAS. ",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "id": "A15.04",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider checking uploaded data, after clients used a SAS to upload a file. ",
- "description": "A SAS cannot constrain how much data a client uploads; given the pricing model of amount of storage over time, it might make sense to validate whether clients uploaded maliciously large contents.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "id": "A15.05",
- "severity": "Low"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "SFTP: Limit the amount of 'local users' for SFTP access, and audit whether access is needed over time.",
- "description": "When accessing blob storage via SFTP using a 'local user account', the 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive than SFTP access. Unfortunately, as of early 2023, local users are the only form of identity management that is currently supported for the SFTP endpoint",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "id": "A15.06",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "SFTP: The SFTP endpoint does not support POSIX-like ACLs.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "id": "A15.07",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "Avoid overly broad CORS policies",
- "description": "Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature that enables web apps from a different domain to loosen the same-origin policy. When enabling CORS, keep the CorsRules to the least privilege.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "id": "A16.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services"
- },
- {
- "category": "Security",
- "subcategory": "Confidentiality and Encryption",
- "text": "Determine how data at rest should be encrypted. Understand the thread model for data.",
- "description": "Data at rest is always encrypted server-side, and in addition might be encrypted client-side as well. Server-side encryption might happen using a platform-managed key (default) or customer-managed key. Client-side encryption might happen by either having the client supply an encryption/decryption key on a per-blob basis to Azure storage, or by completely handling encryption on the client-side. thus not relying on Azure Storage at all for confidentiality guarantees.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "id": "A17.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption"
- },
- {
- "category": "Security",
- "subcategory": "Confidentiality and Encryption",
- "text": "Determine which/if platform encryption should be used.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "id": "A17.02",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json"
- },
- {
- "category": "Security",
- "subcategory": "Confidentiality and Encryption",
- "text": "Determine which/if client-side encryption should be used.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "id": "A17.03",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Consider whether public blob access is needed, or whether it can be disabled for certain storage accounts. ",
- "description": "Leverage Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) to find storage accounts which allow anonymous blob access.",
- "waf": "Security",
- "service": "Azure Storage",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "id": "A18.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account"
- },
- {
- "category": "Operations Management",
- "subcategory": "Platform Version",
- "text": "Leverage a storagev2 account type for better performance and reliability",
- "waf": "Reliability",
- "service": "Azure Storage",
- "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
- "id": "B01.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal"
- },
- {
- "category": "BC and DR",
- "subcategory": "Availablity",
- "text": "Leverage GRS, ZRS or GZRS storage for the highest availability",
- "waf": "Reliability",
- "service": "Azure Storage",
- "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
- "id": "C01.01",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy"
- },
- {
- "category": "BC and DR",
- "subcategory": "Failover",
- "text": "For write operation after failover, use customer-Managed Failover ",
- "waf": "Reliability",
- "service": "Azure Storage",
- "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
- "id": "C01.02",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance"
- },
- {
- "category": "Operations Management",
- "subcategory": "Failover",
- "text": "Understand Microsoft-Managed Failover details",
- "waf": "Reliability",
- "service": "Azure Storage",
- "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
- "id": "C01.03",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover"
- },
- {
- "category": "Operations Management",
- "subcategory": "Data Protection",
- "text": "Enable Soft Delete",
- "waf": "Reliability",
- "service": "Azure Storage",
- "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
- "id": "C01.04",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal"
+ "items": [
+ {
+ "category": "Security",
+ "subcategory": " Overview",
+ "text": "Consider the 'Azure security baseline for storage'",
+ "description": "Apply guidance from the Microsoft cloud security benchmark related to Storage",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "id": "A01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Consider using private endpoints for Azure Storage",
+ "description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "id": "A02.01",
+ "severity": "High",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != ('Succeeded') or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled') | extend compliant = (isnotnull(properties.privateEndpointConnections) and properties.privateEndpointConnections[0].properties.provisioningState == 'Succeeded' and properties.publicNetworkAccess == 'Disabled') | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Governance",
+ "text": "Ensure older storage accounts are not using 'classic deployment model'",
+ "description": "Newly created storage accounts are created using the ARM deployment model, so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage accounts with classic deployment model in a subscription",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "id": "A03.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Governance",
+ "text": "Enable Microsoft Defender for all of your storage accounts",
+ "description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "id": "A03.02",
+ "severity": "High",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | project storageAccountId = id | join kind=leftouter (resourceContainers | where type == 'microsoft.security/pricings' | where name == 'StorageAccounts' | project resourceId = id, pricingTier = properties.pricingTier) on $left.storageAccountId == $right.resourceId | where isnull(pricingTier) or pricingTier != 'Standard' | extend compliant = false | distinct storageAccountId, compliant",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Data Availability",
+ "text": "Enable 'soft delete' for blobs",
+ "description": "The soft-delete mechanism allows to recover accidentally deleted blobs.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "id": "A04.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Confidentiality",
+ "text": "Disable 'soft delete' for blobs",
+ "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "id": "A05.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Data Availability",
+ "text": "Enable 'soft delete' for containers",
+ "description": "Soft delete for containers enables you to recover a container after it has been deleted, for example recover from an accidental delete operation.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "id": "A06.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Confidentiality",
+ "text": "Disable 'soft delete' for containers",
+ "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "id": "A07.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Data Availability",
+ "text": "Enable resource locks on storage accounts",
+ "description": "Prevents accidental deletion of a storage account, by forcing the user to first remove the deletion lock, prior to deletion",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "id": "A08.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Data Availability, Compliance",
+ "text": "Consider immutable blobs",
+ "description": "Consider 'legal hold' or 'time-based retention' policies for blobs, so that is is impossible to delete the blob, the container, or the storage account. Please note that 'impossible' actually means 'impossible'; once a storage account contains an immutable blob, the only way to 'get rid' of that storage account is by cancelling the Azure subscription.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "id": "A09.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Require HTTPS, i.e. disable port 80 on the storage account",
+ "description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "id": "A10.01",
+ "severity": "High",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (properties.supportsHttpsTrafficOnly == false) | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "When enforcing HTTPS (disabling HTTP), check that you do not use custom domains (CNAME) for the storage account.",
+ "description": "When configuring a custom domain (hostname) on a storage account, check whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your storage account.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "id": "A10.02",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Limit shared access signature (SAS) tokens to HTTPS connections only",
+ "description": "Requiring HTTPS when a client uses a SAS token to access blob data helps to minimize the risk of credential loss.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "id": "A10.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Enforce the latest TLS version for a storage account",
+ "description": ". Enforcing the latest TLS version will reject request from clients using the older version. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "id": "A10.4",
+ "severity": "High",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Use Microsoft Entra ID tokens for blob access",
+ "description": "Microsoft Entra ID tokens should be favored over shared access signatures, wherever possible",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "id": "A11.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Least privilege in IaM permissions",
+ "description": "When assigning a role to a user, group, or application, grant that security principal only those permissions that are necessary for them to perform their tasks. Limiting access to resources helps prevent both unintentional and malicious misuse of your data.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "id": "A11.02",
+ "severity": "Medium"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "When using SAS, prefer 'user delegation SAS' over storage-account-key based SAS.",
+ "description": "A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. A user delegation SAS is analogous to a service SAS in terms of its scope and function, but offers security benefits over the service SAS. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "id": "A11.03",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider disabling storage account keys, so that only Microsoft Entra ID access (and user delegation SAS) is supported.",
+ "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on Entra ID authentication makes it easier to tie storage access to a user. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "id": "A11.04",
+ "severity": "High",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Monitoring",
+ "text": "Consider using Azure Monitor to audit control plane operations on the storage account",
+ "description": "Use Activity Log data to identify 'when', 'who', 'what' and 'how' the security of your storage account is being viewed or changed (i.e. storage account keys, access policies, etc.).",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "A12.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "When using storage account keys, consider enabling a 'key expiration policy'",
+ "description": "A key expiration policy enables you to set a reminder for the rotation of the account access keys. The reminder is displayed if the specified interval has elapsed and the keys have not yet been rotated.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "A13.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider configuring an SAS expiration policy",
+ "description": "A SAS expiration policy specifies a recommended interval over which the SAS is valid. SAS expiration policies apply to a service SAS or an account SAS. When a user generates service SAS or an account SAS with a validity interval that is larger than the recommended interval, they'll see a warning.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "id": "A13.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider linking SAS to a stored access policy",
+ "description": "Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "A13.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy"
+ },
+ {
+ "category": "Security",
+ "subcategory": "CI/CD",
+ "text": "Consider configuring your application's source code repository to detect checked-in connection strings and storage account keys.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "A14.01",
+ "severity": "Medium",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider storing connection strings in Azure KeyVault (in scenarios where managed identities are not possible)",
+ "description": "Ideally, your application should be using a managed identity to authenticate to Azure Storage. If that is not possible, consider having the storage credential (connection string, storage account key, SAS, service principal credential) in Azure KeyVault or an equivalent service.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "A15.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Strive for short validity periods for ad-hoc SAS",
+ "description": "Use near-term expiration times on an ad hoc SAS service SAS or account SAS. In this way, even if a SAS is compromised, it's valid only for a short time. This practice is especially important if you cannot reference a stored access policy. Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "id": "A15.02",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Apply a narrow scope to a SAS",
+ "description": "When creating a SAS, be as specific and restrictive as possible. Prefer a SAS for a single resource and operation over a SAS which gives much broader access.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "id": "A15.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider scoping SAS to a specific client IP address, wherever possible",
+ "description": "A SAS can include parameters on which client IP addresses or address ranges are authorized to request a resource using the SAS. ",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "id": "A15.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider checking uploaded data, after clients used a SAS to upload a file. ",
+ "description": "A SAS cannot constrain how much data a client uploads; given the pricing model of amount of storage over time, it might make sense to validate whether clients uploaded maliciously large contents.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "id": "A15.05",
+ "severity": "Low"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "SFTP: Limit the amount of 'local users' for SFTP access, and audit whether access is needed over time.",
+ "description": "When accessing blob storage via SFTP using a 'local user account', the 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive than SFTP access. Unfortunately, as of early 2023, local users are the only form of identity management that is currently supported for the SFTP endpoint",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "id": "A15.06",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "SFTP: The SFTP endpoint does not support POSIX-like ACLs.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "id": "A15.07",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Avoid overly broad CORS policies",
+ "description": "Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature that enables web apps from a different domain to loosen the same-origin policy. When enabling CORS, keep the CorsRules to the least privilege.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "id": "A16.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Confidentiality and Encryption",
+ "text": "Determine how data at rest should be encrypted. Understand the thread model for data.",
+ "description": "Data at rest is always encrypted server-side, and in addition might be encrypted client-side as well. Server-side encryption might happen using a platform-managed key (default) or customer-managed key. Client-side encryption might happen by either having the client supply an encryption/decryption key on a per-blob basis to Azure storage, or by completely handling encryption on the client-side. thus not relying on Azure Storage at all for confidentiality guarantees.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "id": "A17.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Confidentiality and Encryption",
+ "text": "Determine which/if platform encryption should be used.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "id": "A17.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Confidentiality and Encryption",
+ "text": "Determine which/if client-side encryption should be used.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "id": "A17.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider whether public blob anonymous access is needed, or whether it can be disabled for certain storage accounts. ",
+ "description": "Anonymous access may present a security risk. We recommend that you disable anonymous access for optimal security. Disallowing anonymous access helps to prevent data breaches caused by undesired anonymous access.",
+ "waf": "Security",
+ "service": "Azure Storage",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "id": "A18.01",
+ "severity": "High",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Platform Version",
+ "text": "Leverage a storagev2 account type for better performance and reliability",
+ "waf": "Reliability",
+ "service": "Azure Storage",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "id": "B01.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Availablity",
+ "text": "Leverage GRS, ZRS or GZRS storage for the highest availability",
+ "waf": "Reliability",
+ "service": "Azure Storage",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "id": "C01.01",
+ "severity": "High",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (sku.name != 'Standard_LRS' and sku.name != 'Premium_LRS') | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy"
+ },
+ {
+ "category": "BC and DR",
+ "subcategory": "Failover",
+ "text": "For write operation after failover, use customer-Managed Failover ",
+ "waf": "Reliability",
+ "service": "Azure Storage",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "id": "C01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Failover",
+ "text": "Understand Microsoft-Managed Failover details",
+ "waf": "Reliability",
+ "service": "Azure Storage",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "id": "C01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Data Protection",
+ "text": "Enable Soft Delete",
+ "waf": "Reliability",
+ "service": "Azure Storage",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "id": "C01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal"
+ }
+ ],
+ "categories": [
+ {
+ "name": "Identity and Access Management"
+ },
+ {
+ "name": "Network Topology and Connectivity"
+ },
+ {
+ "name": "BC and DR"
+ },
+ {
+ "name": "Governance and Security"
+ },
+ {
+ "name": "Cost Governance"
+ },
+ {
+ "name": "Operations Management"
+ },
+ {
+ "name": "Application Deployment"
+ },
+ {
+ "name": "Security"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Security"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Performance"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "status": [
+ {
+ "name": "Not verified",
+ "description": "This check has not been looked at yet"
+ },
+ {
+ "name": "Open",
+ "description": "There is an action item associated to this check"
+ },
+ {
+ "name": "Fulfilled",
+ "description": "This check has been verified, and there are no further action items associated to it"
+ },
+ {
+ "name": "Not required",
+ "description": "Recommendation understood, but not needed by current requirements"
+ },
+ {
+ "name": "N/A",
+ "description": "Not applicable for current design"
+ }
+ ],
+ "severities": [
+ {
+ "name": "High"
+ },
+ {
+ "name": "Medium"
+ },
+ {
+ "name": "Low"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Storage Review Checklist",
+ "state": "Preview",
+ "waf": "all",
+ "timestamp": "August 12, 2024"
}
- ],
- "categories": [
- {
- "name": "Identity and Access Management"
- },
- {
- "name": "Network Topology and Connectivity"
- },
- {
- "name": "BC and DR"
- },
- {
- "name": "Governance and Security"
- },
- {
- "name": "Cost Governance"
- },
- {
- "name": "Operations Management"
- },
- {
- "name": "Application Deployment"
- },
- {
- "name": "Security"
- }
- ],
- "waf": [
- {
- "name": "Reliability"
- },
- {
- "name": "Security"
- },
- {
- "name": "Cost"
- },
- {
- "name": "Operations"
- },
- {
- "name": "Performance"
- }
- ],
- "yesno": [
- {
- "name": "Yes"
- },
- {
- "name": "No"
- }
- ],
- "status": [
- {
- "name": "Not verified",
- "description": "This check has not been looked at yet"
- },
- {
- "name": "Open",
- "description": "There is an action item associated to this check"
- },
- {
- "name": "Fulfilled",
- "description": "This check has been verified, and there are no further action items associated to it"
- },
- {
- "name": "Not required",
- "description": "Recommendation understood, but not needed by current requirements"
- },
- {
- "name": "N/A",
- "description": "Not applicable for current design"
- }
- ],
- "severities": [
- {
- "name": "High"
- },
- {
- "name": "Medium"
- },
- {
- "name": "Low"
- }
- ],
- "metadata": {
- "name": "Azure Storage Review Checklist",
- "state": "Preview",
- "waf": "all",
- "timestamp": "April 19, 2024"
- }
-}
+}
\ No newline at end of file
diff --git a/checklists/azure_storage_checklist.es.json b/checklists/azure_storage_checklist.es.json
new file mode 100644
index 000000000..b0c270576
--- /dev/null
+++ b/checklists/azure_storage_checklist.es.json
@@ -0,0 +1,566 @@
+{
+ "categories": [
+ {
+ "name": "Gestión de identidades y accesos"
+ },
+ {
+ "name": "Topología de red y conectividad"
+ },
+ {
+ "name": "BC y RD"
+ },
+ {
+ "name": "Gobernanza y seguridad"
+ },
+ {
+ "name": "Gobernanza de costos"
+ },
+ {
+ "name": "Gestión de Operaciones"
+ },
+ {
+ "name": "Implementación de aplicaciones"
+ },
+ {
+ "name": "Seguridad"
+ }
+ ],
+ "items": [
+ {
+ "category": "Seguridad",
+ "description": "Aplicación de las instrucciones del banco de pruebas de seguridad en la nube de Microsoft relacionadas con el almacenamiento",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": " Visión general",
+ "text": "Tenga en cuenta la \"Línea base de seguridad de Azure para el almacenamiento\"",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "De forma predeterminada, Azure Storage tiene una dirección IP pública y es accesible desde Internet. Los puntos de conexión privados permiten exponer de forma segura Azure Storage solo a los recursos de Azure Compute que necesitan acceso, lo que elimina la exposición a la Internet pública",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de redes",
+ "text": "Considere la posibilidad de usar puntos de conexión privados para Azure Storage",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Las cuentas de almacenamiento recién creadas se crean mediante el modelo de implementación de ARM, de modo que RBAC, etcétera de auditoría, estén habilitados. Asegúrese de que no haya cuentas de almacenamiento antiguas con el modelo de implementación clásico en una suscripción",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gobernanza",
+ "text": "Asegúrese de que las cuentas de almacenamiento más antiguas no usen el \"modelo de implementación clásica\"",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Aproveche Microsoft Defender para obtener información sobre actividades sospechosas y configuraciones incorrectas.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "id": "A03.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gobernanza",
+ "text": "Habilitación de Microsoft Defender para todas las cuentas de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "El mecanismo de eliminación temporal permite recuperar blobs eliminados accidentalmente.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Disponibilidad de datos",
+ "text": "Habilitación de la \"eliminación temporal\" para blobs",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Considere la posibilidad de deshabilitar selectivamente la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimine inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "id": "A05.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Confidencialidad",
+ "text": "Deshabilitación de la \"eliminación temporal\" para blobs",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "La eliminación temporal de contenedores permite recuperar un contenedor después de que se haya eliminado, por ejemplo, recuperarse de una operación de eliminación accidental.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "id": "A06.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidad de datos",
+ "text": "Habilitación de la \"eliminación temporal\" para contenedores",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Considere la posibilidad de deshabilitar selectivamente la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimine inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "id": "A07.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Confidencialidad",
+ "text": "Deshabilitar la \"eliminación temporal\" para contenedores",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Evita la eliminación accidental de una cuenta de almacenamiento, obligando al usuario a quitar primero el bloqueo de eliminación, antes de la eliminación",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "id": "A08.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidad de datos",
+ "text": "Habilitación de bloqueos de recursos en cuentas de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Considere la posibilidad de aplicar directivas de \"retención legal\" o \"retención basada en tiempo\" para los blobs, de modo que sea imposible eliminar el blob, el contenedor o la cuenta de almacenamiento. Tenga en cuenta que 'imposible' en realidad significa 'imposible'; una vez que una cuenta de almacenamiento contiene un blob inmutable, la única manera de \"deshacerse\" de esa cuenta de almacenamiento es cancelando la suscripción de Azure.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "id": "A09.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidad de datos, cumplimiento",
+ "text": "Considere la posibilidad de blobs inmutables",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Considere la posibilidad de deshabilitar el acceso HTTP/80 no protegido a la cuenta de almacenamiento, de modo que todas las transferencias de datos estén cifradas, protegidas contra la integridad y el servidor esté autenticado. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "id": "A10.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de redes",
+ "text": "Requerir HTTPS, es decir, deshabilitar el puerto 80 en la cuenta de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Al configurar un dominio personalizado (nombre de host) en una cuenta de almacenamiento, compruebe si necesita TLS/HTTPS; si es así, es posible que tenga que colocar Azure CDN delante de la cuenta de almacenamiento.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "id": "A10.02",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de redes",
+ "text": "Al aplicar HTTPS (deshabilitar HTTP), compruebe que no usa dominios personalizados (CNAME) para la cuenta de almacenamiento.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Requerir HTTPS cuando un cliente usa un token de SAS para acceder a los datos de blob ayuda a minimizar el riesgo de pérdida de credenciales.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "id": "A10.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de redes",
+ "text": "Limitar los tokens de firma de acceso compartido (SAS) solo a las conexiones HTTPS",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": ". Al aplicar la versión más reciente de TLS, se rechazarán las solicitudes de los clientes que utilicen la versión anterior. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "id": "A10.4",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de redes",
+ "text": "Aplicación de la versión más reciente de TLS para una cuenta de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Los tokens de identificador de Microsoft Entra deben favorecerse sobre las firmas de acceso compartido, siempre que sea posible",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "id": "A11.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Uso de tokens de identificador de Microsoft Entra para el acceso a blobs",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Al asignar un rol a un usuario, grupo o aplicación, conceda a esa entidad de seguridad solo los permisos necesarios para que pueda realizar sus tareas. Limitar el acceso a los recursos ayuda a evitar el uso indebido no intencionado y malintencionado de los datos.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "id": "A11.02",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Privilegio mínimo en los permisos de IaM",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Una SAS de delegación de usuarios está protegida con credenciales de Azure Active Directory (Azure AD) y también con los permisos especificados para la SAS. Una SAS de delegación de usuarios es análoga a una SAS de servicio en cuanto a su ámbito y función, pero ofrece ventajas de seguridad con respecto a la SAS de servicio. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "id": "A11.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Al usar SAS, prefiera \"SAS de delegación de usuarios\" en lugar de SAS basada en clave de cuenta de almacenamiento.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Las claves de la cuenta de almacenamiento ('claves compartidas') tienen muy pocas capacidades de auditoría. Si bien se puede monitorear quién o cuándo obtuvo una copia de las claves, una vez que las claves están en manos de varias personas, es imposible atribuir el uso a un usuario específico. Confiar únicamente en la autenticación de ID de Entra facilita la vinculación del acceso al almacenamiento de un usuario. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "id": "A11.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere la posibilidad de deshabilitar las claves de la cuenta de almacenamiento, de modo que solo se admita el acceso a Microsoft Entra ID (y SAS de delegación de usuarios).",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Utilice los datos del registro de actividad para identificar \"cuándo\", \"quién\", \"qué\" y \"cómo\" se está viendo o cambiando la seguridad de la cuenta de almacenamiento (es decir, claves de cuenta de almacenamiento, directivas de acceso, etcétera).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "A12.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Monitorización",
+ "text": "Considere la posibilidad de usar Azure Monitor para auditar las operaciones del plano de control en la cuenta de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Una política de caducidad de claves le permite establecer un recordatorio para la rotación de las claves de acceso de la cuenta. El recordatorio se muestra si ha transcurrido el intervalo especificado y las teclas aún no se han girado.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "A13.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Al usar claves de cuenta de almacenamiento, considere la posibilidad de habilitar una \"directiva de expiración de claves\"",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Una directiva de expiración de SAS especifica un intervalo recomendado durante el cual la SAS es válida. Las directivas de caducidad de SAS se aplican a una SAS de servicio o a una SAS de cuenta. Cuando un usuario genera una SAS de servicio o una SAS de cuenta con un intervalo de validez mayor que el intervalo recomendado, verá una advertencia.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "id": "A13.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere la posibilidad de configurar una directiva de expiración de SAS",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Las directivas de acceso almacenadas ofrecen la opción de revocar los permisos de una SAS de servicio sin tener que volver a generar las claves de la cuenta de almacenamiento. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "A13.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere la posibilidad de vincular SAS a una directiva de acceso almacenada",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "A14.01",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "CI/CD",
+ "text": "Considere la posibilidad de configurar el repositorio de código fuente de la aplicación para detectar cadenas de conexión protegidas y claves de cuenta de almacenamiento.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Lo ideal es que la aplicación use una identidad administrada para autenticarse en Azure Storage. Si eso no es posible, considere la posibilidad de tener la credencial de almacenamiento (cadena de conexión, clave de cuenta de almacenamiento, SAS, credencial de entidad de servicio) en Azure KeyVault o un servicio equivalente.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "A15.01",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere la posibilidad de almacenar cadenas de conexión en Azure KeyVault (en escenarios en los que las identidades administradas no son posibles)",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Utilice los tiempos de caducidad a corto plazo en una SAS de servicio SAS ad hoc o en una SAS de cuenta. De esta manera, incluso si una SAS se ve comprometida, solo es válida durante un corto período de tiempo. Esta práctica es especialmente importante si no puede hacer referencia a una política de acceso almacenada. Los tiempos de expiración a corto plazo también limitan la cantidad de datos que se pueden escribir en un blob al limitar el tiempo disponible para cargarlos en él.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "id": "A15.02",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Esfuércese por períodos de validez cortos para SAS ad-hoc",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Al crear una SAS, sea lo más específico y restrictivo posible. Prefiera una SAS para un solo recurso y operación en lugar de una SAS que proporciona un acceso mucho más amplio.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "id": "A15.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Aplicación de un ámbito limitado a una SAS",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Una SAS puede incluir parámetros sobre las direcciones IP de cliente o los intervalos de direcciones que están autorizados a solicitar un recurso mediante la SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "id": "A15.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere la posibilidad de definir el ámbito de SAS a una dirección IP de cliente específica, siempre que sea posible",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Una SAS no puede restringir la cantidad de datos que carga un cliente; Dado el modelo de precios de la cantidad de almacenamiento a lo largo del tiempo, podría tener sentido validar si los clientes cargaron contenidos malintencionados de gran tamaño.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "id": "A15.05",
+ "service": "Azure Storage",
+ "severity": "Bajo",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere la posibilidad de comprobar los datos cargados, después de que los clientes hayan utilizado una SAS para cargar un archivo. ",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Al acceder al almacenamiento de blobs a través de SFTP mediante una \"cuenta de usuario local\", no se aplican los controles RBAC \"habituales\". El acceso a blobs a través de NFS o REST puede ser más restrictivo que el acceso SFTP. Desafortunadamente, a partir de principios de 2023, los usuarios locales son la única forma de administración de identidades que actualmente es compatible con el punto de conexión SFTP",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "id": "A15.06",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "SFTP: Limite la cantidad de \"usuarios locales\" para el acceso SFTP y audite si el acceso es necesario a lo largo del tiempo.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "id": "A15.07",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "SFTP: El punto de conexión SFTP no admite ACL similares a POSIX.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "El almacenamiento es compatible con CORS (Cross-Origin Resource Sharing), es decir, una función HTTP que permite a las aplicaciones web de un dominio diferente aflojar la política del mismo origen. Al habilitar CORS, mantenga CorsRules con el mínimo privilegio.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "id": "A16.01",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de redes",
+ "text": "Evite las políticas de CORS demasiado amplias",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Los datos en reposo siempre se cifran en el lado del servidor y, además, también pueden estar cifrados en el lado del cliente. El cifrado del lado del servidor puede producirse mediante una clave administrada por la plataforma (valor predeterminado) o una clave administrada por el cliente. El cifrado del lado cliente puede producirse haciendo que el cliente proporcione una clave de cifrado y descifrado por blob al almacenamiento de Azure o controlando completamente el cifrado en el lado cliente. por lo tanto, no depende en absoluto de Azure Storage para obtener garantías de confidencialidad.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "id": "A17.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Confidencialidad y encriptación",
+ "text": "Determine cómo se deben cifrar los datos en reposo. Comprender el modelo de subprocesos para los datos.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "id": "A17.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Confidencialidad y encriptación",
+ "text": "Determine cuál o si se debe utilizar el cifrado de la plataforma.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "id": "A17.03",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Confidencialidad y encriptación",
+ "text": "Determine qué cifrado del lado del cliente se debe usar, si se debe usar.",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Aproveche el Explorador de Resource Graph (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para buscar cuentas de almacenamiento que permitan el acceso anónimo a blobs.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "id": "A18.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Considere si es necesario el acceso anónimo de blob público o si se puede deshabilitar para determinadas cuentas de almacenamiento. ",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "id": "B01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Versión de la plataforma",
+ "text": "Aproveche un tipo de cuenta storagev2 para mejorar el rendimiento y la confiabilidad",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "id": "C01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidad",
+ "text": "Aproveche el almacenamiento GRS, ZRS o GZRS para obtener la máxima disponibilidad",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "id": "C01.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Conmutación por error",
+ "text": "Para la operación de escritura después de la conmutación por error, use la conmutación por error administrada por el cliente ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "id": "C01.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Conmutación por error",
+ "text": "Descripción de los detalles de la conmutación por error administrada por Microsoft",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "id": "C01.04",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "subcategory": "Protección de datos",
+ "text": "Habilitar eliminación temporal",
+ "waf": "Fiabilidad"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Storage Review Checklist",
+ "state": "Preview",
+ "timestamp": "August 12, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Medio"
+ },
+ {
+ "name": "Bajo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Este control aún no se ha examinado",
+ "name": "No verificado"
+ },
+ {
+ "description": "Hay un elemento de acción asociado a esta comprobación",
+ "name": "Abrir"
+ },
+ {
+ "description": "Esta comprobación se ha verificado y no hay más elementos de acción asociados a ella",
+ "name": "Cumplido"
+ },
+ {
+ "description": "Recomendación entendida, pero no necesaria por los requisitos actuales",
+ "name": "No es necesario"
+ },
+ {
+ "description": "No aplicable para el diseño actual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidad"
+ },
+ {
+ "name": "Seguridad"
+ },
+ {
+ "name": "Costar"
+ },
+ {
+ "name": "Operaciones"
+ },
+ {
+ "name": "Rendimiento"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sí"
+ },
+ {
+ "name": "No"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/azure_storage_checklist.ja.json b/checklists/azure_storage_checklist.ja.json
new file mode 100644
index 000000000..ec33393dd
--- /dev/null
+++ b/checklists/azure_storage_checklist.ja.json
@@ -0,0 +1,566 @@
+{
+ "categories": [
+ {
+ "name": "ID およびアクセス管理"
+ },
+ {
+ "name": "ネットワーク トポロジと接続性"
+ },
+ {
+ "name": "BC と DR"
+ },
+ {
+ "name": "ガバナンスとセキュリティ"
+ },
+ {
+ "name": "コストガバナンス"
+ },
+ {
+ "name": "オペレーションマネジメント"
+ },
+ {
+ "name": "アプリケーションのデプロイメント"
+ },
+ {
+ "name": "安全"
+ }
+ ],
+ "items": [
+ {
+ "category": "安全",
+ "description": "ストレージに関連する Microsoft クラウド セキュリティ ベンチマークのガイダンスを適用する",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "概要",
+ "text": "「ストレージの Azure セキュリティ ベースライン」を検討する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Azure Storage は、既定ではパブリック IP アドレスを持ち、インターネットからアクセスできます。プライベート エンドポイントを使用すると、アクセスが必要な Azure コンピューティング リソースのみに Azure Storage を安全に公開できるため、パブリック インターネットへの露出がなくなります",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ネットワーキング",
+ "text": "Azure Storage のプライベート エンドポイントの使用を検討する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "新しく作成されたストレージ アカウントは ARM デプロイ モデルを使用して作成されるため、RBAC、監査などがすべて有効になります。サブスクリプションにクラシック デプロイ モデルの古いストレージ アカウントがないことを確認します",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "統治",
+ "text": "古いストレージ アカウントが \"クラシック デプロイ モデル\" を使用していないことを確認する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Microsoft Defender を活用して、不審なアクティビティや構成ミスについて学習します。",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "id": "A03.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "統治",
+ "text": "すべてのストレージ アカウントで Microsoft Defender を有効にする",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "論理的な削除メカニズムにより、誤って削除されたブロブを回復できます。",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "データの可用性",
+ "text": "BLOB の '論理的な削除' を有効にする",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由など、削除された情報をすぐに削除するようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナに対して「論理的な削除」を選択的に無効にすることを検討してください。",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "id": "A05.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "機密性",
+ "text": "BLOB の '論理的な削除' を無効にする",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "コンテナの論理的な削除を使用すると、コンテナが削除された後に、たとえば、誤って削除した操作から回復するなどして、コンテナを回復できます。",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "id": "A06.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "データの可用性",
+ "text": "コンテナの「論理的な削除」を有効にする",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由など、削除された情報をすぐに削除するようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナに対して「論理的な削除」を選択的に無効にすることを検討してください。",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "id": "A07.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "機密性",
+ "text": "コンテナの「論理的な削除」を無効にする",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "削除する前に、ユーザーに削除ロックを最初に解除するように強制することで、ストレージ アカウントが誤って削除されるのを防ぎます",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "id": "A08.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "データの可用性",
+ "text": "ストレージ アカウントでのリソース ロックの有効化",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "BLOB の \"訴訟ホールド\" または \"時間ベースの保持\" ポリシーを検討して、BLOB、コンテナー、またはストレージ アカウントを削除できないようにします。「不可能」は実際には「不可能」を意味することに注意してください。ストレージ アカウントに不変 BLOB が含まれている場合、そのストレージ アカウントを \"削除\" する唯一の方法は、Azure サブスクリプションをキャンセルすることです。",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "id": "A09.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "データの可用性、コンプライアンス",
+ "text": "不変ブロブについて考える",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "ストレージ アカウントへの保護されていない HTTP/80 アクセスを無効にして、すべてのデータ転送が暗号化され、整合性が保護され、サーバーが認証されるようにすることを検討してください。",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "id": "A10.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ネットワーキング",
+ "text": "HTTPS を要求する (つまり、ストレージ アカウントのポート 80 を無効にする)",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "ストレージ アカウントでカスタム ドメイン (ホスト名) を構成する場合は、TLS/HTTPS が必要かどうかを確認します。その場合は、ストレージ アカウントの前に Azure CDN を配置する必要がある場合があります。",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "id": "A10.02",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ネットワーキング",
+ "text": "HTTPS を適用する (HTTP を無効にする) 場合は、ストレージ アカウントにカスタム ドメイン (CNAME) を使用していないことを確認します。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "クライアントが SAS トークンを使用して BLOB データにアクセスするときに HTTPS を要求すると、資格情報の損失リスクを最小限に抑えるのに役立ちます。",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "id": "A10.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ネットワーキング",
+ "text": "Shared Access Signature (SAS) トークンを HTTPS 接続のみに制限する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": ".最新の TLS バージョンを適用すると、古いバージョンを使用しているクライアントからの要求が拒否されます。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "id": "A10.4",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ネットワーキング",
+ "text": "ストレージ アカウントに最新の TLS バージョンを適用する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Microsoft Entra ID トークンは、可能な限り、共有アクセス署名よりも優先する必要があります",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "id": "A11.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "BLOB アクセスに Microsoft Entra ID トークンを使用する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "ユーザー、グループ、またはアプリケーションにロールを割り当てる場合は、タスクの実行に必要なアクセス許可のみをそのセキュリティ プリンシパルに付与します。リソースへのアクセスを制限することで、意図しないデータの誤用と悪意のある誤用の両方を防ぐことができます。",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "id": "A11.02",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "IaM アクセス許可の最小特権",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "ユーザー委任 SAS は、Azure Active Directory (Azure AD) 資格情報と、SAS に指定されたアクセス許可によって保護されます。ユーザー委任 SAS は、そのスコープと機能の点でサービス SAS に似ていますが、サービス SAS よりもセキュリティ上の利点があります。",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "id": "A11.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "SAS を使用する場合は、ストレージ アカウント キー ベースの SAS よりも \"ユーザー委任 SAS\" を優先します。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "ストレージ アカウント キー (\"共有キー\") には、監査機能がほとんどありません。誰が/いつキーのコピーをフェッチしたかを監視することはできますが、キーが複数の人の手に渡ると、特定のユーザーに使用状況を帰属させることはできなくなります。Entra ID認証のみに依存すると、ストレージアクセスをユーザーに結び付けることが容易になります。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "id": "A11.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "Microsoft Entra ID アクセス (およびユーザー委任 SAS) のみがサポートされるように、ストレージ アカウント キーを無効にすることを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "アクティビティ ログ データを使用して、ストレージ アカウントのセキュリティが (ストレージ アカウント キー、アクセス ポリシーなど) 表示または変更されているのは「いつ」、「誰が」、「何を」、「どのように」特定します。",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "A12.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "モニタリング",
+ "text": "Azure Monitor を使用して、ストレージ アカウントでのコントロール プレーン操作を監査することを検討してください",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "キーの有効期限ポリシーを使用すると、アカウント アクセス キーのローテーションのリマインダーを設定できます。リマインダーは、指定した間隔が経過し、キーがまだローテーションされていない場合に表示されます。",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "A13.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "ストレージ アカウント キーを使用する場合は、\"キーの有効期限ポリシー\" を有効にすることを検討してください",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SAS 有効期限ポリシーは、SAS が有効である推奨間隔を指定します。SAS 有効期限ポリシーは、サービス SAS またはアカウント SAS に適用されます。ユーザーが、推奨間隔よりも長い有効期間でサービス SAS またはアカウント SAS を生成すると、警告が表示されます。",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "id": "A13.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "SAS 有効期限ポリシーの構成を検討する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "保存されているアクセス ポリシーでは、ストレージ アカウント キーを再生成しなくても、サービス SAS のアクセス許可を取り消すことができます。",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "A13.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "SASを保存されたアクセスポリシーにリンクすることを検討する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "A14.01",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "CI/CD",
+ "text": "チェックインされた接続文字列とストレージ アカウント キーを検出するように、アプリケーションのソース コード リポジトリを構成することを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "理想的には、アプリケーションでマネージド ID を使用して Azure Storage に対する認証を行う必要があります。それが不可能な場合は、ストレージ資格情報 (接続文字列、ストレージ アカウント キー、SAS、サービス プリンシパル資格情報) を Azure KeyVault または同等のサービスに持つことを検討してください。",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "A15.01",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "Azure KeyVault に接続文字列を格納することを検討してください (マネージド ID が不可能なシナリオの場合)",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "アドホック SAS サービス SAS またはアカウント SAS で短期的な有効期限を使用します。このように、SASが侵害された場合でも、SASは短時間しか有効ではありません。この方法は、保存されたアクセス ポリシーを参照できない場合に特に重要です。有効期限が近いと、BLOB にアップロードできる時間を制限することで、BLOB に書き込むことができるデータの量も制限されます。",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "id": "A15.02",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "アドホックSASの有効期間を短くするよう努める",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SASを作成するときは、できるだけ具体的で制限的にしてください。1 つのリソースと操作には、より広範なアクセスを提供する SAS よりも SAS を優先します。",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "id": "A15.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "SAS に狭いスコープを適用する",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SAS には、SAS を使用してリソースを要求する権限を与えられたクライアントの IP アドレスまたはアドレス範囲のパラメーターを含めることができます。",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "id": "A15.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "可能な限り、SAS のスコープを特定のクライアント IP アドレスに設定することを検討してください",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SAS は、クライアントがアップロードするデータの量を制限することはできません。時間の経過に伴うストレージ量の価格設定モデルを考えると、クライアントが悪意を持って大きなコンテンツをアップロードしたかどうかを検証することは理にかなっているかもしれません。",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "id": "A15.05",
+ "service": "Azure Storage",
+ "severity": "低い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "クライアントが SAS を使用してファイルをアップロードした後、アップロードされたデータを確認することを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "「ローカル ユーザー アカウント」を使用して SFTP 経由で BLOB ストレージにアクセスする場合、「通常の」RBAC コントロールは適用されません。NFS または REST 経由の BLOB アクセスは、SFTP アクセスよりも制限が厳しい場合があります。残念ながら、2023 年初頭の時点で、SFTP エンドポイントで現在サポートされている ID 管理の形式は、ローカル ユーザーのみです",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "id": "A15.06",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "SFTP: SFTP アクセスの「ローカル ユーザー」の数を制限し、アクセスが必要かどうかを経時的に監査します。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "id": "A15.07",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "SFTP: SFTP エンドポイントは POSIX のような ACL をサポートしていません。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "ストレージは、CORS(Cross-Origin Resource Sharing)、つまり、異なるドメインのWebアプリが同一生成元ポリシーを緩和できるようにするHTTP機能をサポートしています。CORS を有効にするときは、CorsRules を最小限の特権に保ちます。",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "id": "A16.01",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ネットワーキング",
+ "text": "過度に広範なCORSポリシーを避ける",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "保存データは常にサーバー側で暗号化され、さらにクライアント側でも暗号化される場合があります。サーバー側の暗号化は、プラットフォーム管理キー (デフォルト) またはカスタマー管理キーを使用して行われる場合があります。クライアント側の暗号化は、クライアントが BLOB ごとに暗号化/暗号化解除キーを Azure ストレージに提供するか、クライアント側で暗号化を完全に処理することによって行われます。したがって、機密性の保証については Azure Storage にまったく依存しません。",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "id": "A17.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "機密性と暗号化",
+ "text": "保存データの暗号化方法を決定します。データのスレッドモデルを理解する。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "id": "A17.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "機密性と暗号化",
+ "text": "プラットフォームの暗号化を使用するかどうかを決定します。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "id": "A17.03",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "機密性と暗号化",
+ "text": "クライアント側の暗号化を使用するかどうかを決定します。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Resource Graph エクスプローラー (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) を利用して、匿名 BLOB アクセスを許可するストレージ アカウントを見つけます。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "id": "A18.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "パブリック BLOB の匿名アクセスが必要かどうか、または特定のストレージ アカウントに対して無効にできるかどうかを検討します。",
+ "waf": "安全"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "id": "B01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "プラットフォームバージョン",
+ "text": "storagev2 アカウントタイプを活用して、パフォーマンスと信頼性を向上させます",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "id": "C01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "subcategory": "可用性",
+ "text": "GRS、ZRS、またはGZRSストレージを活用して、最高の可用性を実現",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "id": "C01.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "フェイルオーバー",
+ "text": "フェールオーバー後の書き込み操作には、顧客管理のフェールオーバーを使用します",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "id": "C01.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "フェイルオーバー",
+ "text": "Microsoft マネージド フェールオーバーの詳細を理解する",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "id": "C01.04",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "subcategory": "データ保護",
+ "text": "ソフト削除を有効にする",
+ "waf": "確実"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Storage Review Checklist",
+ "state": "Preview",
+ "timestamp": "August 12, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高い"
+ },
+ {
+ "name": "中程度"
+ },
+ {
+ "name": "低い"
+ }
+ ],
+ "status": [
+ {
+ "description": "このチェックはまだ見ていません",
+ "name": "未確認"
+ },
+ {
+ "description": "このチェックにはアクションアイテムが関連付けられています",
+ "name": "開ける"
+ },
+ {
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
+ "name": "達成"
+ },
+ {
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
+ },
+ {
+ "description": "現在のデザインには適用されません",
+ "name": "該当なし"
+ }
+ ],
+ "waf": [
+ {
+ "name": "確実"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "費用"
+ },
+ {
+ "name": "オペレーションズ"
+ },
+ {
+ "name": "パフォーマンス"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "はい"
+ },
+ {
+ "name": "いいえ"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/azure_storage_checklist.ko.json b/checklists/azure_storage_checklist.ko.json
new file mode 100644
index 000000000..dabfa75af
--- /dev/null
+++ b/checklists/azure_storage_checklist.ko.json
@@ -0,0 +1,566 @@
+{
+ "categories": [
+ {
+ "name": "ID 및 액세스 관리"
+ },
+ {
+ "name": "네트워크 토폴로지 및 연결성"
+ },
+ {
+ "name": "BC 및 DR"
+ },
+ {
+ "name": "거버넌스 및 보안"
+ },
+ {
+ "name": "비용 관리"
+ },
+ {
+ "name": "운영 관리"
+ },
+ {
+ "name": "응용 프로그램 배포"
+ },
+ {
+ "name": "안전"
+ }
+ ],
+ "items": [
+ {
+ "category": "안전",
+ "description": "스토리지와 관련된 Microsoft 클라우드 보안 벤치마크의 지침 적용",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": " 개요",
+ "text": "'스토리지에 대한 Azure 보안 기준'을 고려합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Azure Storage는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 액세스가 필요한 Azure Compute 리소스에만 Azure Storage를 안전하게 노출할 수 있으므로 공용 인터넷에 노출되지 않습니다",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "네트워킹",
+ "text": "Azure Storage에 프라이빗 엔드포인트를 사용하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "새로 만든 스토리지 계정은 ARM 배포 모델을 사용하여 생성되므로 RBAC, 감사 등이 모두 활성화됩니다. 구독에 클래식 배포 모델을 사용하는 이전 저장소 계정이 없는지 확인합니다.",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "지배구조",
+ "text": "이전 스토리지 계정이 '클래식 배포 모델'을 사용하지 않는지 확인",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Microsoft Defender를 활용하여 의심스러운 활동 및 잘못된 구성에 대해 알아보세요.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "id": "A03.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "지배구조",
+ "text": "모든 스토리지 계정에 대해 Microsoft Defender 사용",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "일시 삭제 메커니즘을 사용하면 실수로 삭제된 Blob을 복구할 수 있습니다.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "데이터 가용성",
+ "text": "Blob에 대해 '일시 삭제' 사용Enable 'soft delete' for blobs",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "id": "A05.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "기밀성",
+ "text": "Blob에 대해 '일시 삭제' 사용 안 함",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "컨테이너에 대한 일시 삭제를 사용하면 컨테이너가 삭제된 후 복구할 수 있습니다(예: 실수로 삭제한 작업에서 복구).",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "id": "A06.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "데이터 가용성",
+ "text": "컨테이너에 대해 '일시 삭제' 사용Enable 'soft delete' for containers",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "id": "A07.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "기밀성",
+ "text": "컨테이너에 대해 '일시 삭제' 사용 안 함",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "사용자가 삭제하기 전에 먼저 삭제 잠금을 제거하도록 강제하여 스토리지 계정의 우발적인 삭제를 방지합니다.",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "id": "A08.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "데이터 가용성",
+ "text": "스토리지 계정에 대한 리소스 잠금 사용Enable resource locks on storage accounts",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Blob에 대한 '법적 보존' 또는 '시간 기반 보존' 정책을 고려하면 Blob, 컨테이너 또는 스토리지 계정을 삭제할 수 없습니다. '불가능한'은 실제로 '불가능한'을 의미합니다. 스토리지 계정에 변경할 수 없는 Blob이 포함되면 해당 스토리지 계정을 '제거'하는 유일한 방법은 Azure 구독을 취소하는 것입니다.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "id": "A09.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "데이터 가용성, 규정 준수",
+ "text": "변경할 수 없는 Blob 고려",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "스토리지 계정에 대한 보호되지 않는 HTTP/80 액세스를 사용하지 않도록 설정하여 모든 데이터 전송이 암호화되고 무결성이 보호되며 서버가 인증되도록 하는 것이 좋습니다. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "id": "A10.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "네트워킹",
+ "text": "HTTPS 필요, 즉 스토리지 계정에서 포트 80 사용 안 함Require HTTPS, i.e. disable port 80 on the storage account",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "스토리지 계정에서 사용자 지정 도메인(호스트 이름)을 구성할 때 TLS/HTTPS가 필요한지 확인합니다. 이 경우 스토리지 계정 앞에 Azure CDN을 배치해야 할 수 있습니다.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "id": "A10.02",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "네트워킹",
+ "text": "HTTPS를 적용(HTTP 사용 안 함)할 때 스토리지 계정에 사용자 지정 도메인(CNAME)을 사용하지 않는지 확인합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "클라이언트가 SAS 토큰을 사용하여 Blob 데이터에 액세스할 때 HTTPS를 요구하면 자격 증명 손실 위험을 최소화하는 데 도움이 됩니다.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "id": "A10.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "네트워킹",
+ "text": "SAS(공유 액세스 서명) 토큰을 HTTPS 연결로만 제한",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": ". 최신 TLS 버전을 적용하면 이전 버전을 사용하는 클라이언트의 요청이 거부됩니다. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "id": "A10.4",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "네트워킹",
+ "text": "스토리지 계정에 대한 최신 TLS 버전 적용Enforce the latest TLS version for a storage account",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "가능한 경우 Microsoft Entra ID 토큰을 공유 액세스 서명보다 선호해야 합니다",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "id": "A11.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "Blob 액세스에 Microsoft Entra ID 토큰 사용Use Microsoft Entra ID tokens for blob access",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "사용자, 그룹 또는 응용 프로그램에 역할을 할당할 때 해당 보안 주체가 작업을 수행하는 데 필요한 권한만 부여합니다. 리소스에 대한 액세스를 제한하면 의도하지 않은 데이터 오용과 악의적인 데이터 오용을 모두 방지할 수 있습니다.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "id": "A11.02",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "IaM 권한의 최소 권한",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "사용자 위임 SAS는 Azure AD(Azure Active Directory) 자격 증명과 SAS에 대해 지정된 권한으로 보호됩니다. 사용자 위임 SAS는 범위와 기능 측면에서 서비스 SAS와 유사하지만 서비스 SAS에 비해 보안상의 이점을 제공합니다. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "id": "A11.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "SAS를 사용하는 경우 스토리지 계정 키 기반 SAS보다 '사용자 위임 SAS'를 선호합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "스토리지 계정 키('공유 키')에는 감사 기능이 거의 없습니다. 누가/언제 키 복사본을 가져왔는지 모니터링할 수 있지만 키가 여러 사람의 손에 들어가면 특정 사용자의 사용을 귀속시킬 수 없습니다. Entra ID 인증에만 의존하면 스토리지 액세스를 사용자에게 더 쉽게 연결할 수 있습니다. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "id": "A11.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "Microsoft Entra ID 액세스(및 사용자 위임 SAS)만 지원되도록 스토리지 계정 키를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "활동 로그 데이터를 사용하여 스토리지 계정의 보안을 '언제', '누가', '무엇을' 및 '어떻게' 확인하거나 변경합니다(예: 스토리지 계정 키, 액세스 정책 등).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "A12.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "모니터링",
+ "text": "Azure Monitor를 사용하여 스토리지 계정에 대한 컨트롤 플레인 작업을 감사하는 것이 좋습니다",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "키 만료 정책을 사용하면 계정 액세스 키의 교체에 대한 미리 알림을 설정할 수 있습니다. 지정된 간격이 경과하고 키가 아직 회전되지 않은 경우 알림이 표시됩니다.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "A13.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "스토리지 계정 키를 사용하는 경우 '키 만료 정책'을 사용하도록 설정하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "SAS 만료 정책은 SAS가 유효한 권장 간격을 지정합니다. SAS 만료 정책은 서비스 SAS 또는 계정 SAS에 적용됩니다. 사용자가 권장 간격보다 큰 유효성 간격으로 서비스 SAS 또는 계정 SAS를 생성하면 경고가 표시됩니다.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "id": "A13.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "SAS 만료 정책을 구성하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "저장된 액세스 정책은 스토리지 계정 키를 다시 생성할 필요 없이 서비스 SAS에 대한 사용 권한을 취소할 수 있는 옵션을 제공합니다. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "A13.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "SAS를 저장된 액세스 정책에 연결하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "A14.01",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "CI/CD (영문)",
+ "text": "체크 인된 연결 문자열 및 저장소 계정 키를 검색하도록 응용 프로그램의 소스 코드 리포지토리를 구성하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "이상적으로 애플리케이션은 관리 ID를 사용하여 Azure Storage에 인증해야 합니다. 가능하지 않은 경우 Azure KeyVault 또는 동등한 서비스에 스토리지 자격 증명(연결 문자열, 스토리지 계정 키, SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "A15.01",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "Azure KeyVault에 연결 문자열을 저장하는 것이 좋습니다(관리 ID를 사용할 수 없는 시나리오에서).",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "임시 SAS 서비스 SAS 또는 계정 SAS에서 가까운 만료 시간을 사용합니다. 이러한 방식으로 SAS가 손상되더라도 짧은 시간 동안만 유효합니다. 이 방법은 저장된 액세스 정책을 참조할 수 없는 경우에 특히 중요합니다. 또한 단기 만료 시간은 Blob에 업로드할 수 있는 시간을 제한하여 Blob에 쓸 수 있는 데이터의 양을 제한합니다.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "id": "A15.02",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "임시 SAS의 유효 기간을 단축하기 위해 노력",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "SAS를 만들 때는 가능한 한 구체적이고 제한적이어야 합니다. 훨씬 더 광범위한 액세스를 제공하는 SAS보다 단일 리소스 및 작업에 대해 SAS를 선호합니다.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "id": "A15.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "SAS에 좁은 범위 적용",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "SAS에는 SAS를 사용하여 리소스를 요청할 수 있는 권한이 있는 클라이언트 IP 주소 또는 주소 범위에 대한 매개 변수가 포함될 수 있습니다. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "id": "A15.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "가능한 경우 SAS 범위를 특정 클라이언트 IP 주소로 지정하는 것이 좋습니다",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "SAS는 클라이언트가 업로드하는 데이터의 양을 제한할 수 없습니다. 시간 경과에 따른 스토리지 양의 가격 책정 모델을 감안할 때 클라이언트가 악의적으로 큰 콘텐츠를 업로드했는지 여부를 확인하는 것이 합리적일 수 있습니다.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "id": "A15.05",
+ "service": "Azure Storage",
+ "severity": "낮다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "클라이언트가 SAS를 사용하여 파일을 업로드한 후 업로드된 데이터를 확인하는 것이 좋습니다. ",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "'로컬 사용자 계정'을 사용하여 SFTP를 통해 Blob Storage에 액세스하는 경우 '일반적인' RBAC 컨트롤이 적용되지 않습니다. NFS 또는 REST를 통한 Blob 액세스는 SFTP 액세스보다 더 제한적일 수 있습니다. 안타깝게도 2023년 초부터 로컬 사용자는 현재 SFTP 엔드포인트에 대해 지원되는 유일한 ID 관리 형태입니다",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "id": "A15.06",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "SFTP: SFTP 액세스를 위한 '로컬 사용자'의 수를 제한하고 시간이 지남에 따라 액세스가 필요한지 여부를 감사합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "id": "A15.07",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "SFTP: SFTP 엔드포인트는 POSIX와 유사한 ACL을 지원하지 않습니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "스토리지는 CORS(Cross-Origin Resource Sharing), 즉 다른 도메인의 웹 앱이 동일 출처 정책을 완화할 수 있도록 하는 HTTP 기능을 지원합니다. CORS를 사용하도록 설정하는 경우 CorsRules를 최소 권한으로 유지합니다.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "id": "A16.01",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "네트워킹",
+ "text": "지나치게 광범위한 CORS 정책 방지",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "미사용 데이터는 항상 서버 쪽에서 암호화되며 클라이언트 쪽에서도 암호화될 수 있습니다. 서버 쪽 암호화는 플랫폼 관리형 키(기본값) 또는 고객 관리형 키를 사용하여 발생할 수 있습니다. 클라이언트 쪽 암호화는 클라이언트가 Azure Storage에 Blob별로 암호화/암호 해독 키를 제공하도록 하거나 클라이언트 쪽에서 암호화를 완전히 처리하여 발생할 수 있습니다. 따라서 기밀 보장을 위해 Azure Storage에 전혀 의존하지 않습니다.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "id": "A17.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "기밀성 및 암호화",
+ "text": "미사용 데이터를 암호화하는 방법을 결정합니다. 데이터에 대한 스레드 모델을 이해합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "id": "A17.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "기밀성 및 암호화",
+ "text": "어떤 플랫폼 암호화를 사용해야 하는지 확인합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "id": "A17.03",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "기밀성 및 암호화",
+ "text": "클라이언트 쪽 암호화를 사용해야 하는지 여부를 결정합니다.",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "리소스 그래프 탐색기(리소스 | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true)를 활용하여 익명 Blob 액세스를 허용하는 스토리지 계정을 찾습니다.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "id": "A18.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "공용 Blob 익명 액세스가 필요한지 또는 특정 스토리지 계정에 대해 사용하지 않도록 설정할 수 있는지 여부를 고려합니다. ",
+ "waf": "안전"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "id": "B01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "플랫폼 버전",
+ "text": "성능 및 안정성 향상을 위해 storagev2 계정 유형 활용",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "id": "C01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "subcategory": "가용성",
+ "text": "최고의 가용성을 위해 GRS, ZRS 또는 GZRS 스토리지 활용",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "id": "C01.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "페일오버",
+ "text": "장애 조치(failover) 후 쓰기 작업의 경우 고객 관리 장애 조치(failover)를 사용합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "id": "C01.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "페일오버",
+ "text": "Microsoft 관리 장애 조치(failover) 세부 정보 이해",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "id": "C01.04",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "subcategory": "데이터 보호",
+ "text": "일시 삭제 사용",
+ "waf": "신뢰도"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Storage Review Checklist",
+ "state": "Preview",
+ "timestamp": "August 12, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "높다"
+ },
+ {
+ "name": "보통"
+ },
+ {
+ "name": "낮다"
+ }
+ ],
+ "status": [
+ {
+ "description": "이 검사는 아직 검토되지 않았습니다",
+ "name": "확인되지 않음"
+ },
+ {
+ "description": "이 검사와 연관된 작업 항목이 있습니다",
+ "name": "열다"
+ },
+ {
+ "description": "이 검사는 확인되었으며 이와 관련된 추가 작업 항목이 없습니다",
+ "name": "성취"
+ },
+ {
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
+ "name": "필요 없음"
+ },
+ {
+ "description": "현재 설계에는 적용되지 않습니다.",
+ "name": "해당 없음"
+ }
+ ],
+ "waf": [
+ {
+ "name": "신뢰도"
+ },
+ {
+ "name": "안전"
+ },
+ {
+ "name": "비용"
+ },
+ {
+ "name": "작업"
+ },
+ {
+ "name": "공연"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "예"
+ },
+ {
+ "name": "아니요"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/azure_storage_checklist.pt.json b/checklists/azure_storage_checklist.pt.json
new file mode 100644
index 000000000..0f2972ca6
--- /dev/null
+++ b/checklists/azure_storage_checklist.pt.json
@@ -0,0 +1,566 @@
+{
+ "categories": [
+ {
+ "name": "Gerenciamento de identidade e acesso"
+ },
+ {
+ "name": "Topologia e conectividade de rede"
+ },
+ {
+ "name": "BC e DR"
+ },
+ {
+ "name": "Governança e segurança"
+ },
+ {
+ "name": "Governança de custos"
+ },
+ {
+ "name": "Gestão de Operações"
+ },
+ {
+ "name": "Implantação de aplicativos"
+ },
+ {
+ "name": "Segurança"
+ }
+ ],
+ "items": [
+ {
+ "category": "Segurança",
+ "description": "Aplicar as diretrizes do parâmetro de comparação de segurança de nuvem da Microsoft relacionado ao armazenamento",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": " Visão geral",
+ "text": "Considere a 'linha de base de segurança do Azure para armazenamento'",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Por padrão, o Armazenamento do Azure tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem expor com segurança o Armazenamento do Azure apenas aos recursos de Computação do Azure que precisam de acesso, eliminando assim a exposição à Internet pública",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Rede",
+ "text": "Considere usar pontos de extremidade privados para o Armazenamento do Azure",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "As contas de armazenamento recém-criadas são criadas usando o modelo de implantação do ARM, para que o RBAC, a auditoria etc. estejam habilitados. Verifique se não há contas de armazenamento antigas com o modelo de implantação clássico em uma assinatura",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Governança",
+ "text": "Verifique se as contas de armazenamento mais antigas não estão usando o \"modelo de implantação clássico\"",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Aproveite o Microsoft Defender para saber mais sobre atividades suspeitas e configurações incorretas.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "id": "A03.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Governança",
+ "text": "Habilitar o Microsoft Defender para todas as suas contas de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "O mecanismo de exclusão reversível permite recuperar blobs excluídos acidentalmente.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Disponibilidade de dados",
+ "text": "Habilitar 'exclusão reversível' para blobs",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Considere desabilitar seletivamente a \"exclusão reversível\" para determinados contêineres de blob, por exemplo, se o aplicativo precisar garantir que as informações excluídas sejam excluídas imediatamente, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "id": "A05.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Confidencialidade",
+ "text": "Desabilitar a 'exclusão reversível' para blobs",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "A exclusão reversível para contêineres permite que você recupere um contêiner depois que ele foi excluído, por exemplo, recuperar de uma operação de exclusão acidental.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "id": "A06.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidade de dados",
+ "text": "Habilitar 'exclusão reversível' para contêineres",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Considere desabilitar seletivamente a \"exclusão reversível\" para determinados contêineres de blob, por exemplo, se o aplicativo precisar garantir que as informações excluídas sejam excluídas imediatamente, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "id": "A07.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Confidencialidade",
+ "text": "Desabilitar a 'exclusão reversível' para contêineres",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Impede a exclusão acidental de uma conta de armazenamento, forçando o usuário a remover primeiro o bloqueio de exclusão, antes da exclusão",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "id": "A08.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidade de dados",
+ "text": "Habilitar bloqueios de recursos em contas de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Considere as políticas de 'retenção legal' ou 'retenção baseada em tempo' para blobs, de modo que seja impossível excluir o blob, o contêiner ou a conta de armazenamento. Observe que 'impossível' na verdade significa 'impossível'; depois que uma conta de armazenamento contém um blob imutável, a única maneira de \"se livrar\" dessa conta de armazenamento é cancelando a assinatura do Azure.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "id": "A09.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidade de dados, conformidade",
+ "text": "Considere blobs imutáveis",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Considere desabilitar o acesso HTTP/80 desprotegido à conta de armazenamento, para que todas as transferências de dados sejam criptografadas, protegidas por integridade e o servidor seja autenticado. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "id": "A10.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Rede",
+ "text": "Exigir HTTPS, ou seja, desabilitar a porta 80 na conta de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Ao configurar um domínio personalizado (nome do host) em uma conta de armazenamento, verifique se você precisa de TLS/HTTPS; nesse caso, talvez seja necessário colocar a CDN do Azure na frente de sua conta de armazenamento.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "id": "A10.02",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Rede",
+ "text": "Ao impor HTTPS (desabilitando o HTTP), verifique se você não usa domínios personalizados (CNAME) para a conta de armazenamento.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Exigir HTTPS quando um cliente usa um token SAS para acessar dados de blob ajuda a minimizar o risco de perda de credenciais.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "id": "A10.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Rede",
+ "text": "Limitar tokens de assinatura de acesso compartilhado (SAS) apenas a conexões HTTPS",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": ". A imposição da versão mais recente do TLS rejeitará a solicitação de clientes que usam a versão mais antiga. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "id": "A10.4",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Rede",
+ "text": "Impor a versão mais recente do TLS para uma conta de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Os tokens de ID do Microsoft Entra devem ser favorecidos em relação às assinaturas de acesso compartilhado, sempre que possível",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "id": "A11.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Usar tokens de ID do Microsoft Entra para acesso a blobs",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Ao atribuir uma função a um usuário, grupo ou aplicativo, conceda a essa entidade de segurança apenas as permissões necessárias para que ela execute suas tarefas. Limitar o acesso aos recursos ajuda a evitar o uso indevido não intencional e mal-intencionado de seus dados.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "id": "A11.02",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Privilégios mínimos em permissões de IaM",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Uma SAS de delegação de usuário é protegida com credenciais do Azure Active Directory (Azure AD) e também pelas permissões especificadas para a SAS. Uma SAS de delegação de usuário é análoga a uma SAS de serviço em termos de escopo e função, mas oferece benefícios de segurança em relação à SAS de serviço. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "id": "A11.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Ao usar SAS, prefira 'SAS de delegação de usuário' em vez de SAS baseada em chave de conta de armazenamento.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "As chaves da conta de armazenamento (\"chaves compartilhadas\") têm muito poucos recursos de auditoria. Embora possa ser monitorado em quem/quando buscou uma cópia das chaves, uma vez que as chaves estão nas mãos de várias pessoas, é impossível atribuir o uso a um usuário específico. Confiar apenas na autenticação do Entra ID facilita o acesso ao armazenamento a um usuário. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "id": "A11.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere desabilitar as chaves da conta de armazenamento, para que haja suporte apenas para o acesso à ID do Microsoft Entra (e à SAS de delegação de usuário).",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Use os dados do Log de Atividades para identificar \"quando\", \"quem\", \"o quê\" e \"como\" a segurança da sua conta de armazenamento está sendo exibida ou alterada (ou seja, chaves da conta de armazenamento, políticas de acesso etc.).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "A12.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Monitorização",
+ "text": "Considere usar o Azure Monitor para auditar as operações do painel de controle na conta de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Uma política de expiração de chave permite que você defina um lembrete para a rotação das chaves de acesso da conta. O lembrete é exibido se o intervalo especificado tiver decorrido e as teclas ainda não tiverem sido giradas.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "A13.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Ao usar chaves de conta de armazenamento, considere habilitar uma 'política de expiração de chave'",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Uma política de expiração de SAS especifica um intervalo recomendado durante o qual a SAS é válida. As políticas de expiração de SAS se aplicam a uma SAS de serviço ou a uma SAS de conta. Quando um usuário gera SAS de serviço ou uma SAS de conta com um intervalo de validade maior que o intervalo recomendado, ele verá um aviso.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "id": "A13.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere configurar uma política de expiração de SAS",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "As políticas de acesso armazenadas oferecem a opção de revogar permissões para uma SAS de serviço sem precisar regenerar as chaves da conta de armazenamento. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "A13.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere vincular SAS a uma política de acesso armazenada",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "A14.01",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "CI/CD",
+ "text": "Considere configurar o repositório de código-fonte do aplicativo para detectar cadeias de conexão e chaves de conta de armazenamento com check-in.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Idealmente, seu aplicativo deve usar uma identidade gerenciada para autenticar no Armazenamento do Azure. Se isso não for possível, considere ter a credencial de armazenamento (cadeia de conexão, chave da conta de armazenamento, SAS, credencial da entidade de serviço) no Azure KeyVault ou em um serviço equivalente.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "A15.01",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere armazenar cadeias de conexão no Azure KeyVault (em cenários em que as identidades gerenciadas não são possíveis)",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Use tempos de expiração de curto prazo em uma SAS de serviço SAS ad hoc ou SAS de conta. Dessa forma, mesmo que uma SAS seja comprometida, ela é válida apenas por um curto período de tempo. Essa prática é especialmente importante se você não puder fazer referência a uma política de acesso armazenada. Os tempos de expiração de curto prazo também limitam a quantidade de dados que podem ser gravados em um blob, limitando o tempo disponível para carregar nele.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "id": "A15.02",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Esforce-se por períodos de validade curtos para SAS ad-hoc",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Ao criar uma SAS, seja o mais específico e restritivo possível. Prefira uma SAS para um único recurso e operação em vez de uma SAS que oferece acesso muito mais amplo.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "id": "A15.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Aplicar um escopo restrito a uma SAS",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Uma SAS pode incluir parâmetros nos quais os endereços IP do cliente ou intervalos de endereços estão autorizados a solicitar um recurso usando a SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "id": "A15.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere definir o escopo da SAS para um endereço IP de cliente específico, sempre que possível",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Uma SAS não pode restringir a quantidade de dados que um cliente carrega; Dado o modelo de preços da quantidade de armazenamento ao longo do tempo, pode fazer sentido validar se os clientes carregaram conteúdos maliciosamente grandes.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "id": "A15.05",
+ "service": "Azure Storage",
+ "severity": "Baixo",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere verificar os dados carregados depois que os clientes usaram uma SAS para carregar um arquivo. ",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Ao acessar o armazenamento de blobs por meio do SFTP usando uma \"conta de usuário local\", os controles RBAC \"usuais\" não se aplicam. O acesso a blobs via NFS ou REST pode ser mais restritivo do que o acesso SFTP. Infelizmente, a partir do início de 2023, os usuários locais são a única forma de gerenciamento de identidade com suporte atual para o endpoint SFTP",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "id": "A15.06",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "SFTP: limite a quantidade de \"usuários locais\" para acesso SFTP e audite se o acesso é necessário ao longo do tempo.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "id": "A15.07",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "SFTP: o endpoint SFTP não oferece suporte a ACLs semelhantes a POSIX.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "O armazenamento oferece suporte ao CORS (Cross-Origin Resource Sharing), ou seja, um recurso HTTP que permite que aplicativos Web de um domínio diferente afrouxem a política de mesma origem. Ao habilitar o CORS, mantenha as CorsRules com o menor privilégio.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "id": "A16.01",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Rede",
+ "text": "Evite políticas de CORS excessivamente amplas",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Os dados em repouso são sempre criptografados no lado do servidor e, além disso, também podem ser criptografados no lado do cliente. A criptografia do lado do servidor pode ocorrer usando uma chave gerenciada pela plataforma (padrão) ou uma chave gerenciada pelo cliente. A criptografia do lado do cliente pode acontecer fazendo com que o cliente forneça uma chave de criptografia/descriptografia por blob para o armazenamento do Azure ou manipulando completamente a criptografia no lado do cliente. portanto, não dependendo do Armazenamento do Azure para garantias de confidencialidade.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "id": "A17.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Confidencialidade e Criptografia",
+ "text": "Determine como os dados em repouso devem ser criptografados. Entenda o modelo de thread para dados.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "id": "A17.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Confidencialidade e Criptografia",
+ "text": "Determine qual/se a criptografia de plataforma deve ser usada.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "id": "A17.03",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Confidencialidade e Criptografia",
+ "text": "Determine qual/se a criptografia do lado do cliente deve ser usada.",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Aproveite o Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para localizar contas de armazenamento que permitem acesso anônimo a blobs.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "id": "A18.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Considere se o acesso anônimo de blob público é necessário ou se ele pode ser desabilitado para determinadas contas de armazenamento. ",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "id": "B01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Versão da plataforma",
+ "text": "Aproveite um tipo de conta storagev2 para melhor desempenho e confiabilidade",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "id": "C01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "subcategory": "Disponibilidade",
+ "text": "Aproveite o armazenamento GRS, ZRS ou GZRS para obter a mais alta disponibilidade",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "id": "C01.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Failover",
+ "text": "Para operação de gravação após o failover, use o failover gerenciado pelo cliente ",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "id": "C01.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Failover",
+ "text": "Entender os detalhes do failover gerenciado pela Microsoft",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "id": "C01.04",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "subcategory": "Proteção de dados",
+ "text": "Habilitar exclusão reversível",
+ "waf": "Fiabilidade"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Storage Review Checklist",
+ "state": "Preview",
+ "timestamp": "August 12, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Média"
+ },
+ {
+ "name": "Baixo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta verificação ainda não foi analisada",
+ "name": "Não verificado"
+ },
+ {
+ "description": "Há um item de ação associado a essa verificação",
+ "name": "Abrir"
+ },
+ {
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
+ "name": "Cumprido"
+ },
+ {
+ "description": "Recomendação compreendida, mas não necessária pelos requisitos atuais",
+ "name": "Não é necessário"
+ },
+ {
+ "description": "Não aplicável para o projeto atual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidade"
+ },
+ {
+ "name": "Segurança"
+ },
+ {
+ "name": "Custar"
+ },
+ {
+ "name": "Operações"
+ },
+ {
+ "name": "Desempenho"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sim"
+ },
+ {
+ "name": "Não"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/azure_storage_checklist.zh-Hant.json b/checklists/azure_storage_checklist.zh-Hant.json
new file mode 100644
index 000000000..dbf496cf5
--- /dev/null
+++ b/checklists/azure_storage_checklist.zh-Hant.json
@@ -0,0 +1,566 @@
+{
+ "categories": [
+ {
+ "name": "身份和訪問管理"
+ },
+ {
+ "name": "網路拓撲和連接"
+ },
+ {
+ "name": "BC 和DR"
+ },
+ {
+ "name": "治理與安全"
+ },
+ {
+ "name": "成本治理"
+ },
+ {
+ "name": "運營管理"
+ },
+ {
+ "name": "應用程式部署"
+ },
+ {
+ "name": "安全"
+ }
+ ],
+ "items": [
+ {
+ "category": "安全",
+ "description": "應用與存儲相關的 Microsoft 雲安全基準中的指導",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "概述",
+ "text": "請考慮「存儲的 Azure 安全基線”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "默認情況下,Azure 儲存具有公共IP位址,並且可通過Internet訪問。專用終結點允許僅向需要訪問的 Azure 計算資源安全地公開 Azure 存儲,從而消除對公共 Internet 的暴露",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "聯網",
+ "text": "考慮將專用終結點用於 Azure 存儲",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "新創建的存儲帳戶是使用ARM部署模型創建的,因此 RBAC、審核等都已啟用。確保訂閱中沒有具有經典部署模型的舊存儲帳戶",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "統轄",
+ "text": "確保較舊的存儲帳戶未使用“經典部署模型”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "利用 Microsoft Defender 瞭解可疑活動和錯誤配置。",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "id": "A03.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "統轄",
+ "text": "為所有存儲帳戶啟用 Microsoft Defender",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "軟刪除機制允許恢復意外刪除的 blob。",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "數據可用性",
+ "text": "為 blob 啟用“軟刪除”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "id": "A05.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "保密性",
+ "text": "禁用 blob 的“軟刪除”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "容器的軟刪除使您能夠在刪除容器后恢復容器,例如從意外刪除操作中恢復。",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "id": "A06.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "數據可用性",
+ "text": "為容器啟用“軟刪除”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "id": "A07.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "保密性",
+ "text": "禁用容器的“軟刪除”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "通過強制使用者先刪除刪除鎖,然後再刪除存儲帳戶,防止意外刪除存儲帳戶",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "id": "A08.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "數據可用性",
+ "text": "在存儲帳戶上啟用資源鎖定",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "請考慮對 blob 使用“合法保留”或“基于時間的保留”策略,以便無法刪除 blob、容器或存儲帳戶。請注意,「不可能」實際上意味著「不可能」;一旦存儲帳戶包含不可變的 blob,「擺脫」該存儲帳戶的唯一方法是取消 Azure 訂閱。",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "id": "A09.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "數據可用性、合規性",
+ "text": "考慮不可變的 blob",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "請考慮禁用對存儲帳戶的未受保護的 HTTP/80 訪問,以便對所有數據傳輸進行加密、完整性保護,並且對伺服器進行身份驗證。",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "id": "A10.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "聯網",
+ "text": "需要 HTTPS,即在儲存帳戶上禁用埠 80",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "在儲存帳戶上配置自定義域(主機名)時,請檢查是否需要 TLS/HTTPS;如果是這樣,可能需要將 Azure CDN 放在存儲帳戶的前面。",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "id": "A10.02",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "聯網",
+ "text": "強制執行 HTTPS(禁用 HTTP)時,請檢查是否不要對儲存帳戶使用自定義域 (CNAME)。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "當用戶端使用SAS令牌訪問 blob 資料時,要求使用 HTTPS 有助於最大程度地降低憑據丟失的風險。",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "id": "A10.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "聯網",
+ "text": "將共享訪問簽名 (SAS) 令牌限製為僅 HTTPS 連接",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": ".強制執行最新的 TLS 版本將拒絕來自使用舊版本的用戶端的請求。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "id": "A10.4",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "聯網",
+ "text": "強制實施存儲帳戶的最新 TLS 版本",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "在可能的情況下,應優先使用 Microsoft Entra ID 令牌,而不是共用訪問簽名",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "id": "A11.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "使用 Microsoft Entra ID 令牌進行 blob 訪問",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "為使用者、組或應用程式分配角色時,請僅授予該安全主體執行任務所需的許可權。限制對資源的訪問有助於防止無意和惡意濫用數據。",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "id": "A11.02",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "IaM 許可權中的最小特權",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "使用者委派 SAS 使用 Azure Active Directory (Azure AD) 憑據以及為 SAS 指定的許可權進行保護。使用者委派 SAS 在範圍和功能方面類似於服務 SAS,但與服務 SAS 相比,它提供了安全優勢。",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "id": "A11.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "使用 SAS 時,首選「使用者委派 SAS」,而不是基於存儲帳戶密鑰的 SAS。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "存儲帳戶金鑰(“共用金鑰”)幾乎沒有審核功能。雖然可以監控誰/何時獲取了密鑰的副本,但一旦密鑰掌握在多人手中,就不可能將使用方式歸因於特定使用者。僅依賴 Entra ID 身份驗證可以更輕鬆地將存儲訪問許可權與用戶綁定。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "id": "A11.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "請考慮禁用存儲帳戶密鑰,以便僅支援 Microsoft Entra ID 訪問(和使用者委派 SAS)。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "使用活動日誌數據來確定查看或更改存儲帳戶安全性的“時間”、“人員”、“內容”和“方式”(即存儲帳戶密鑰、訪問策略等)。",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "A12.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "監測",
+ "text": "請考慮使用 Azure Monitor 審核存儲帳戶上的控制平面操作",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "通過金鑰過期策略,您可以設置帳戶訪問金鑰輪換的提醒。如果已過指定的時間間隔且尚未旋轉鍵,則會顯示提醒。",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "A13.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "使用存儲帳戶密鑰時,請考慮啟用“金鑰過期策略”",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SAS 過期策略指定了 SAS 的有效時間間隔。SAS 過期策略適用於服務 SAS 或帳戶 SAS。當使用者生成的服務 SAS 或帳戶 SAS 的有效期間隔大於建議的時間間隔時,他們將看到警告。",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "id": "A13.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "考慮配置 SAS 過期策略",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "通過存儲訪問策略,可以選擇撤銷服務 SAS 的許可權,而無需重新生成存儲帳戶密鑰。",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "id": "A13.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "考慮將 SAS 連結到儲存存取策略",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "id": "A14.01",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "CI/CD",
+ "text": "請考慮配置應用程式的原始程式碼儲存庫,以檢測簽入的連接字串和存儲帳戶密鑰。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "理想情況下,應用程式應使用託管標識向 Azure 儲存進行身份驗證。如果無法做到這一點,請考慮在 Azure KeyVault 或等效服務中擁有存儲憑據(連接字串、存儲帳戶密鑰、SAS、服務主體憑據)。",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "id": "A15.01",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "請考慮在 Azure KeyVault 中儲存連接字串(在無法使用託管標識的情況下)",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "在臨時 SAS 服務 SAS 或帳戶 SAS 上使用近期過期時間。這樣,即使 SAS 遭到入侵,它也只會在短時間內有效。如果無法引用存儲訪問策略,則這種做法尤為重要。近期過期時間還通過限制可用於上傳到 blob 的時間來限制可以寫入 blob 的數據量。",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "id": "A15.02",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "爭取縮短臨時 SAS 的有效期",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "創建 SAS 時,請盡可能具體且具有限制性。首選單一資源和操作的 SAS,而不是提供更廣泛訪問許可權的 SAS。",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "id": "A15.03",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "對SAS應用窄範圍",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SAS 可以包含用戶端 IP 位址或位址範圍有權使用 SAS 請求資源的參數。",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "id": "A15.04",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "盡可能考慮將SAS的範圍限定為特定的用戶端IP位址",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "SAS無法限制用戶端上傳的數據量;考慮到存儲量隨時間變化的定價模型,驗證用戶端是否惡意上傳了大量內容可能很有意義。",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "id": "A15.05",
+ "service": "Azure Storage",
+ "severity": "低",
+ "subcategory": "身份和訪問管理",
+ "text": "在用戶端使用SAS上傳檔后,請考慮檢查上傳的數據。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "使用「本地使用者帳戶」通過 SFTP 訪問 blob 儲存時,“通常”的 RBAC 控制不適用。通過 NFS 或 REST 進行的 Blob 訪問可能比 SFTP 訪問更具限制性。遺憾的是,截至 2023 年初,本地使用者是 SFTP 端點目前支援的唯一身份管理形式",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "id": "A15.06",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "SFTP:限制 SFTP 訪問的「本地使用者」數量,並審核隨著時間的推移是否需要訪問。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "id": "A15.07",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "SFTP:SFTP 端點不支持類似 POSIX 的 ACL。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "存儲支援 CORS(跨源資源分享),即一種 HTTP 功能,使來自不同域的 Web 應用程式能夠放鬆同源策略。啟用 CORS 時,請將 CorsRules 保留為最低許可權。",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "id": "A16.01",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "聯網",
+ "text": "避免過於寬泛的 CORS 策略",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "靜態數據始終在伺服器端加密,此外也可能在用戶端加密。伺服器端加密可能使用平臺管理的金鑰(預設)或客戶管理的金鑰進行。用戶端加密可以通過讓用戶端按 blob 向 Azure 儲存提供加密/解密金鑰,或者完全在用戶端處理加密來實現。因此,完全不依賴 Azure 存儲來保證機密性。",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "id": "A17.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "保密性和加密",
+ "text": "確定應如何加密靜態數據。了解數據的線程模型。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "id": "A17.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "保密性和加密",
+ "text": "確定應使用哪種/是否應使用平臺加密。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "id": "A17.03",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "保密性和加密",
+ "text": "確定應使用哪種/是否應使用用戶端加密。",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "利用 Resource Graph 資源管理器 (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) 查找允許匿名 blob 訪問的存儲帳戶。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "id": "A18.01",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "考慮是否需要公共 blob 匿名訪問,或者是否可以對某些存儲帳戶禁用公共 blob 匿名訪問。",
+ "waf": "安全"
+ },
+ {
+ "category": "運營管理",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "id": "B01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "平臺版本",
+ "text": "利用 storagev2 帳戶類型獲得更好的性能和可靠性",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "id": "C01.01",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "高",
+ "subcategory": "可用性",
+ "text": "利用 GRS、ZRS 或 GZRS 儲存實現最高可用性",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "id": "C01.02",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "故障轉移",
+ "text": "對於故障轉移后的寫入操作,請使用客戶管理的故障轉移",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "id": "C01.03",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "故障轉移",
+ "text": "瞭解 Microsoft 託管的故障轉移詳細資訊",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "id": "C01.04",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "subcategory": "數據保護",
+ "text": "啟用軟刪除",
+ "waf": "可靠性"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Storage Review Checklist",
+ "state": "Preview",
+ "timestamp": "August 12, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高"
+ },
+ {
+ "name": "中等"
+ },
+ {
+ "name": "低"
+ }
+ ],
+ "status": [
+ {
+ "description": "此檢查尚未查看",
+ "name": "未驗證"
+ },
+ {
+ "description": "有一個與此檢查關聯的操作項",
+ "name": "打開"
+ },
+ {
+ "description": "此檢查已經過驗證,並且沒有與之關聯的其他操作項",
+ "name": "實現"
+ },
+ {
+ "description": "建議已理解,但當前要求不需要",
+ "name": "不需要"
+ },
+ {
+ "description": "不適用於當前設計",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "可靠性"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "成本"
+ },
+ {
+ "name": "操作"
+ },
+ {
+ "name": "性能"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "是的"
+ },
+ {
+ "name": "不"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/checklist.en.master.json b/checklists/checklist.en.master.json
index e1f464776..db42e3e6d 100644
--- a/checklists/checklist.en.master.json
+++ b/checklists/checklist.en.master.json
@@ -1,40638 +1,43401 @@
{
"items": [
{
- "category": "Operations Management",
- "checklist": "Stream Analytics Review Checklist",
- "guid": "32e52e36-11c8-418b-8a0b-c511e43a18a9",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-stream_analytics_v1.docx",
- "services": [],
- "severity": "High",
- "subcategory": "High Availablity ",
- "text": "Leverage FTA Resiliency Handbook for Stream Analytics",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Stream Analytics Review Checklist",
- "description": "Azure Stream Analytics provides high availability (99.9% SLA) for jobs and clusters within a region, the details of which are transparent to the end customer. If failures occur within the service, per the documentation �Azure Stream Analytics guarantees exactly once event processing and at-least-once delivery of events, so events are never lost.�",
- "guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
- "link": "https://azure.microsoft.com/en-in/products/stream-analytics",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity ",
- "text": "Understand High Availability 99% SLA and use it to plan your DR strategy",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Stream Analytics Review Checklist",
- "description": "Azure Stream Analytics resources (jobs, clusters, etc.) are regional and do not provide automatic geo-failover. However, you can achieve geo-redundancy by deploying identical Stream Analytics jobs in multiple Azure regions. Each job connects to local input and output sources. It is the responsibility of your application to both send input data into the two regional inputs and reconcile between the two regional outputs.",
- "guid": "fc833934-8b26-42d6-ac5f-512925498e6d",
- "link": "https://learn.microsoft.com/azure/stream-analytics/geo-redundancy",
- "services": [],
- "severity": "Medium",
- "subcategory": "Geo Redundancy",
- "text": "Plan for Geo Redudancy of the service",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Stream Analytics Review Checklist",
- "guid": "b9d37dac-43bc-46cd-8d7a-a9b24604489a",
- "link": "https://learn.microsoft.com/azure/stream-analytics/geo-redundancy",
- "services": [],
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "9f519499-5820-4060-88fe-cab4538c9dd0",
+ "link": "https://learn.microsoft.com/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements",
+ "services": [
+ "Storage"
+ ],
"severity": "Medium",
- "subcategory": "Geo Redundancy",
- "text": "Depending on your availablity requirement, configure Active/Active configuration or Active/Passive configuration ",
- "waf": "Reliability"
+ "subcategory": "Physical",
+ "text": "All planned storage pools should use direct-attached storage (SATA, SAS, NVMe)",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Services Review Checklist",
- "guid": "21c30d25-ffb7-4f6a-b9ea-b3fec328f787",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-cog_svcs_v1.docx",
- "service": "Cognitive Services",
- "services": [],
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "f7c015e0-7d97-4283-b006-567afeb2b5ca",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/drive-symmetry-considerations#understand-capacity-imbalance",
+ "services": [
+ "ACR",
+ "Storage"
+ ],
"severity": "Medium",
- "subcategory": "Best Practice",
- "text": "Leverage FTA HandBook for Cognitive Services",
- "waf": "Reliability"
+ "subcategory": "Physical",
+ "text": "Disks are symmetrical across all nodes",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Services Review Checklist",
- "guid": "78c34698-16b2-4763-aefe-1b9b599de0d5",
- "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
- "service": "Cognitive Services",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "f785b143-2c1e-4466-9baa-dde8ba4c7aaa",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/fault-tolerance#parity",
"services": [
+ "Storage",
"Backup"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup Your Prompts",
- "waf": "Reliability"
+ "subcategory": "S2D",
+ "text": "Parity type disk redundancy should only be used for low I/O volumes (backup/archive)",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Services Review Checklist",
- "guid": "750ab2ab-039d-4a6d-95d7-c892adb107d5",
- "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
- "service": "Cognitive Services",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8a705965-9840-43cc-93b3-06d089406bb4",
+ "link": "https://learn.microsoft.com/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements#physical-deployments",
"services": [
- "ASR",
- "Backup"
+ "Storage"
],
- "severity": "High",
- "subcategory": "Backup",
- "text": "Business Continuity and Disaster Recovery (BCDR) considerations with Azure OpenAI Service",
+ "severity": "Medium",
+ "subcategory": "S2D",
+ "text": "Ensure there at least 2 capacity disks with available capacity in the Storage Pool",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Services Review Checklist",
- "guid": "325af625-ca44-4e46-a5e2-223ace8bb123",
- "link": "https://github.com/abacaj/chatgpt-backup#backup-your-chatgpt-conversations",
- "service": "Cognitive Services",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "2a4f629a-d623-4610-a8e3-d6fd66057d8e",
+ "link": "https://learn.microsoft.com/windows-server/storage/storage-spaces/delimit-volume-allocation",
"services": [
- "Backup"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup Your ChatGPT conversations",
+ "severity": "Low",
+ "subcategory": "S2D",
+ "text": "'Delimited allocation' has been considered to improve volume resiliency in a multi-node failure",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Services Review Checklist",
- "guid": "07ca5f17-f154-4e3a-a369-2829e7e31618",
- "link": "https://learn.microsoft.com/azure/ai-services/speech-service/how-to-custom-speech-continuous-integration-continuous-deployment",
- "service": "Cognitive Services",
- "services": [],
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "960eb9be-1f0f-4fc1-9b31-fcf1cf9e34e6",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/plan-volumes#choosing-how-many-volumes-to-create",
+ "services": [
+ "Storage"
+ ],
"severity": "Medium",
- "subcategory": "DevOps",
- "text": "CI/CD for custom speech",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Cognitive Services Review Checklist",
- "guid": "3687a046-7a1f-4893-9bda-43324f248116",
- "link": "https://learn.microsoft.com/azure/ai-services/qnamaker/tutorials/export-knowledge-base",
- "service": "Cognitive Services",
- "services": [],
- "severity": "Low",
- "subcategory": "QnA Service",
- "text": "Move a knowledge base using export-import",
- "waf": "Reliability"
+ "subcategory": "S2D",
+ "text": "CSVs are created in multiples of node count",
+ "waf": "Performance"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
- "service": "Entra",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "859ba2b9-a3a8-4ca1-bb61-165effbf1c03",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/cache",
"services": [
- "Entra"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Microsoft Entra ID Tenants",
- "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
- "waf": "Operations"
+ "subcategory": "S2D",
+ "text": "If a cache tier is implemented, the number of capacity drives is a multiple of the number of cache drives",
+ "waf": "Performance"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Entra",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "d8a65f05-db06-461d-81dc-7899ad3f8f1e",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/plan-volumes#reserve-capacity",
"services": [
- "Entra"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Microsoft Entra ID Tenants",
- "text": "Ensure you have a Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "S2D",
+ "text": "A minimum of 1 type of each disk type per node has been factored as a reserve disk",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "Entra",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "description": "VMFleet is a tool that can be used to measure the performance of a storage subsystem, best used to baseline performance prior to workload deployment",
+ "guid": "9d138f1d-5363-476e-bbd7-acfa500bdc0c",
+ "link": "https://github.com/microsoft/diskspd/wiki/VMFleet",
"services": [
- "Entra"
+ "Storage"
],
"severity": "Low",
- "subcategory": "Microsoft Entra ID Tenants",
- "text": "Leverage Azure Lighthouse for Multi-Tenant Management",
- "waf": "Operations"
+ "subcategory": "S2D",
+ "text": "VMFleet has been run prior to workload deployment to baseline storage performance",
+ "waf": "Performance"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Entra",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "13c12e2a-c938-4dd1-9223-507d5e17f9c5",
"services": [
- "Entra"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Cloud Solution Provider",
- "text": "Ensure that Azure Lighthouse is used for administering the tenant by partner",
- "waf": "Cost"
+ "subcategory": "Host OS",
+ "text": "OS drives use a dedicated storage controller",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
+ "category": "Storage",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "a631e7dc-8879-45bd-b0a7-e5927b805428",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/use-csv-cache",
"services": [
- "Entra"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Cloud Solution Provider",
- "text": "Discuss support request and escalation process with CSP partner",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Host OS",
+ "text": "CSV in-memory read caching is enabled and properly configured",
+ "waf": "Performance"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "32952499-58c8-4e6f-ada5-972e67893d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "c062cd9a-f1db-4f83-aab3-9cb03f56c140",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/host-network-requirements#switch-embedded-teaming-set",
"services": [
- "Entra",
- "Cost"
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Cloud Solution Provider",
- "text": "Setup Cost Reporting and Views with Azure Cost Management",
- "waf": "Cost"
+ "subcategory": "Host",
+ "text": "NICs are symmetrical across nodes",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "685cb4f2-ac9c-4b19-9167-993ed0b32415",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "ea8054db-a558-4533-80c8-5d9cf447ba19",
"services": [
- "Entra",
- "LoadBalancer"
+ "Storage"
],
+ "severity": "High",
+ "subcategory": "Host",
+ "text": "Storage networking is redundant",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "15d976c5-e267-49a1-8b00-62010bfa5188",
+ "link": "https://learn.microsoft.com/azure-stack/hci/deploy/network-atc",
+ "services": [],
"severity": "Medium",
- "subcategory": "Enterprise Agreement",
- "text": "Configure Notification Contacts to a group mailbox",
- "waf": "Cost"
+ "subcategory": "Host",
+ "text": "Host networking configuration is managed by Network ATC and intents are healthy",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "12cd499f-96e2-4e41-a243-231fb3245a1c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "services": [
- "Entra",
- "TrafficManager"
- ],
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "676c53ad-b29a-4de1-9d03-d7d2674405b8",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/network-hud-overview",
+ "services": [],
"severity": "Low",
- "subcategory": "Enterprise Agreement",
- "text": "Use departments and accounts to map your organization's structure to your enrollment hierarchy which can help with separating billing.",
- "waf": "Cost"
+ "subcategory": "Host",
+ "text": "Network HUD has been configured",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8f6d58d9-6c1a-4ec1-b2d7-b2c6ba8f3949",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/host-network-requirements",
"services": [
- "Entra",
- "Cost"
+ "Storage",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Enterprise Agreement",
- "text": "Enable both DA View Charges and AO View Charges on your EA Enrollments to allow users with the correct perms review Cost and Billing Data.",
- "waf": "Security"
+ "subcategory": "Host",
+ "text": "Storage NICs are assigned static IP addresses on separate subnets and VLANs",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "5cf9f485-2784-49b3-9824-75d9b8bdb57b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "services": [
- "Entra",
- "Subscriptions",
- "Cost"
- ],
- "severity": "Low",
- "subcategory": "Enterprise Agreement",
- "text": "Make use of Enterprise Dev/Test Subscriptions to reduce costs for non-production workloads",
- "waf": "Cost"
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "824e53ec-953e-40c2-a6b8-52970b5b0f74",
+ "link": "https://learn.microsoft.com/azure-stack/hci/plan/two-node-switched-converged",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Host",
+ "text": "For switchless designs, dual link full mesh connectivity has been implemented",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "dbc85d0e-0ebd-4589-a789-0fa8ceb1d0f0",
+ "link": "https://learn.microsoft.com/azure-stack/hci/concepts/physical-network-requirements#using-switchless",
"services": [
- "Entra"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Microsoft Customer Agreement",
- "text": "Configure Agreement billing account notification contact email",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Host",
+ "text": "If the cluster is made up of more than 3 nodes, a switched storage network has been implemented",
+ "waf": "Reliability"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "90e87802-602f-4dfb-acea-67c60689f1d7",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "603c6d71-59d2-419c-a312-8edc6e799c6a",
"services": [
- "Storage",
- "Entra",
- "Cost"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Microsoft Customer Agreement",
- "text": "Use Billing Profiles and Invoice sections to structure your agreements billing for effective cost management",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Host",
+ "text": "RDMA is enabled on the Storage networking",
+ "waf": "Performance"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "e81a73f0-84c4-4641-b406-14db3b4d1f50",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "9e260eae-bca1-4827-a259-76ee63fda8d6",
+ "link": "https://github.com/microsoft/SDN/blob/master/Diagnostics/Test-Rdma.ps1",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Host",
+ "text": "Test-RDMA.ps1 has been run to validate the RDMA configuration",
+ "waf": "Performance"
+ },
+ {
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "description": "This ensures that Management traffic is not exposed to the VM traffic",
+ "guid": "abc85d0e-0ebd-4589-a777-0fa8ceb1d0f0",
+ "link": "",
"services": [
- "Entra",
- "Cost"
+ "VM"
],
- "severity": "Low",
- "subcategory": "Microsoft Customer Agreement",
- "text": "Make use of Microsoft Azure plan for dev/test offer to reduce costs for non-production workloads",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Host",
+ "text": "If a VMSwitch is shared for Compute and Management traffic, require that Management traffic is tagged with a VLAN ID",
+ "waf": "Security"
},
{
- "category": "Azure Billing and Microsoft Entra ID Tenants",
- "checklist": "Azure Landing Zone Review",
- "guid": "ae757485-92a4-482a-8bc9-eefe6f5b5ec3",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "description": "This ensures you have at least 3 NCs active at all times during NC upgrades.",
+ "guid": "eb36f5f4-0fa7-4a2c-85f3-1b1c7c7817c0",
"services": [
- "Entra",
- "RBAC"
+ "VM"
],
"severity": "Medium",
- "subcategory": "Microsoft Customer Agreement",
- "text": "Periodically audit the agreement billing RBAC role assignments to review who has access to your MCA billing account",
- "waf": "Cost"
+ "subcategory": "SDN",
+ "text": "There are at least 3 Network Controller VMs deployed",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "348ef254-c27d-442e-abba-c7571559ab91",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "service": "Entra",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8bc78c85-6028-4a43-af2d-082a0a344909",
+ "link": "https://learn.microsoft.com/windows-server/networking/sdn/manage/update-backup-restore",
"services": [
- "ACR",
- "Entra",
- "RBAC",
- "Subscriptions"
+ "Backup"
],
"severity": "High",
- "subcategory": "Identity",
- "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "subcategory": "SDN",
+ "text": "Backups of SDN infrastructure are configured and tested",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "4348bf81-7573-4512-8f46-9061cc198fea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "51eaa4b6-b9a7-43e1-a7dc-634d3107bc6d",
"services": [
- "Entra"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Microsoft Entra ID and Hybrid Identity",
- "text": "Use managed identities instead of service principals for authentication to Azure services. You can check for existing service principals via Entra ID > Sign in Logs > Service principal logins.",
- "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Cluster",
+ "text": "SCOM Managed Instance has been considered for more complex monitoring and alerting scenarios",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "service": "Entra",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "831f5aca-99ef-41e7-8263-9509f5093b43",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/setup-hci-system-alerts",
"services": [
- "Entra"
+ "Monitor"
],
"severity": "High",
- "subcategory": "Identity",
- "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Security"
+ "subcategory": "Cluster",
+ "text": "Alerts have been configured for the cluster, either using Azure Monitor, SCOM, or a third-party solution",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "Entra",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "f95d0e7e-9f61-476d-bf65-59f2454d1d39",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/monitor-hci-single?tabs=22h2-and-later",
"services": [
- "Entra"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Security"
+ "subcategory": "Cluster",
+ "text": "Insights has been enabled at the cluster level and all nodes are reporting data",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
- "service": "Entra",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "f4250fcb-ff53-40c9-b304-3560464fd90c",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/monitor-hci-single?tabs=22h2-and-later",
"services": [
- "Entra",
- "AzurePolicy"
+ "Monitor"
],
- "severity": "Low",
- "subcategory": "Identity",
- "text": "Enforce Microsoft Entra ID conditional-access policies for any user with rights to Azure environments",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Cluster",
+ "text": "Azure Monitoring Agent has been deployed to hosts and an appropriate Data Collection Rule has been configured",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
- "service": "Entra",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "6143af1d-0d1a-4163-b1c9-662f7459bb98",
"services": [
- "Entra"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Enforce multi-factor authentication for any user with rights to the Azure environments",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Hardware",
+ "text": "Relevant hardware monitoring has been configured",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "9cbdf225-549a-41cf-9c97-794766a6f2b0",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/health-service-overview",
"services": [
- "Entra",
- "RBAC"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Enforce centralized and delegated responsibilities to manage resources deployed inside the landing zone, based on role and security requirements",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "waf": "Security"
+ "subcategory": "Hardware",
+ "text": "Relevant hardware alerting has been configured",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "Entra",
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "c0da5bbd-0f0d-4a26-98ec-38c9cc42b323",
"services": [
- "Entra"
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "VM Management - Resource Bridge",
+ "text": "The Azure CLI has been installed on every node to enable RB management from WAC",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "a8ecf23c-c048-4fa9-b87b-51ebfb409863",
"services": [
- "Entra",
- "ACR",
"VM"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "When deploying Active Directory on Windows Server, use a location with Availability Zones and deploy at least two VMs across these zones. If not available, deploy in an Availability Set",
- "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "VM Management - Resource Bridge",
+ "text": "DHCP is available in the cluster to support Guest Configuration at VM deployment from Azure",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "f5664b5e-984a-4859-a773-e7d261623a76",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "category": "Backup and Disaster Recovery",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "074541e3-fe08-458a-8062-32d13dcc10c6",
+ "link": "https://learn.microsoft.com/azure/backup/back-up-azure-stack-hyperconverged-infrastructure-virtual-machines",
"services": [
- "ACR",
- "Entra",
- "RBAC",
- "Subscriptions"
+ "Backup",
+ "VM",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Use Azure custom RBAC roles for the following key roles to provide fine-grain access across your ALZ: Azure platform owner, network management, security operations, subscription owner, application owner. Align these roles to teams and responsibilities within your business.",
- "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "VM",
+ "text": "Backups of HCI VMs have been configured using MABS or a third-party solution",
+ "waf": "Operations"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "Entra",
- "services": [
- "Entra"
- ],
- "severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "If planning to switch from Active Directory Domain Serivces to Entra domain services, evaluate the compatibility of all workloads",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
- "waf": "Security"
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "48f7ae57-1035-4101-8a38-fbe163d03e8a",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Cluster Configuration",
+ "text": "Cluster configuration or a configuration script has been documented and maintained",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
- "service": "Entra",
- "services": [
- "Entra",
- "Monitor"
- ],
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "f2a6a19a-ffe6-444d-badb-cb336c8e7b50",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/witness",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Cluster Configuration",
+ "text": "A cluster witness has been configured for clusters with less than 5 nodes",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "a47339fe-62c5-44a0-bb83-3d46ef16292f",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/update-cluster",
+ "services": [],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
- "waf": "Security"
+ "subcategory": "Cluster Configuration",
+ "text": "Cluster-Aware Updating has been configured for Windows and hardware updates (if available)",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
- "service": "Entra",
- "services": [
- "Entra"
- ],
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "7f1d6fe8-3079-44ea-8ea6-14494d1aa470",
+ "link": "https://learn.microsoft.com/azure-stack/hci/deploy/validate",
+ "services": [],
"severity": "High",
- "subcategory": "Identity",
- "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "subcategory": "Cluster Configuration",
+ "text": "Cluster validation has been run against the configured cluster",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
- "link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "81693af0-5638-4aa2-a153-1d6189df30a7",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/azure-benefits",
"services": [
- "ASR",
- "Entra"
+ "VM"
],
"severity": "Medium",
- "subcategory": "Microsoft Entra ID",
- "text": "When deploying an Microsoft Entra Connect, leverage a staging sever for high availability / Disaster recovery",
+ "subcategory": "Cluster Configuration",
+ "text": "Azure Benefits has been enabled at the cluster and VM levels",
+ "waf": "Cost"
+ },
+ {
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8c967ee8-8170-4537-a28d-33431cd3632a",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/use-environment-checker",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Cluster Configuration",
+ "text": "The Environment Checker module has been run to validate the environment",
"waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "Entra",
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "43ffbfab-766e-4950-a102-78b479136e4d",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/azure-benefits",
"services": [
- "Entra",
- "RBAC"
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Avoid using on-premises synced accounts for Microsoft Entra ID role assignments.",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
- "waf": "Security"
+ "subcategory": "Cluster Configuration",
+ "text": "Group Policy inheritance on the HCI cluster and node Active Directory organizational unit has been blocked or applied policies have been evaluated for compatibility issues (usually WinRM and PowerShell execution policy)",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Entra",
- "services": [
- "Entra"
- ],
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "e6a3f3a7-4a7d-49e2-985a-6e39dd284027",
+ "services": [],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Where required, use Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications (hosted in the cloud or on-premises).",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Security"
+ "subcategory": "Cluster Configuration",
+ "text": "WAC is on the latest release and configured to automatically upgrade extensions",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "d1caa31f-cc26-42b2-b92f-2b667c0e6020",
+ "link": "https://learn.microsoft.com/azure/architecture/hybrid/azure-stack-hci-dr",
"services": [
- "VNet",
"Entra"
],
"severity": "Medium",
- "subcategory": "Landing zones",
- "text": "Configure Identity network segmentation through the use of a virtual Network and peer back to the hub. Providing authentication inside application landing zone (legacy).",
- "training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
- "waf": "Security"
+ "subcategory": "Stretch Clustering",
+ "text": "There is sub 5ms latency between each site if synchronous replication is being configured AAD",
+ "waf": "Performance"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "d4d1ad54-1abc-4919-b267-3f342d3b49e4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "3277558e-3155-4088-b49a-78594cb4ce1a",
"services": [
"Storage",
- "Entra",
- "RBAC",
- "AKV",
+ "VNet"
+ ],
+ "severity": "High",
+ "subcategory": "Stretch Clustering",
+ "text": "Management, Replication and Storage networks excluded from stretched VLANs configurations, are routed, and in different subnets",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "baed6066-8531-44ba-bd94-38cbabbf4099",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Stretch Clustering",
+ "text": "There is a plan detailed for site failure and recovery",
+ "waf": "Operations"
+ },
+ {
+ "category": "Networking",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8e62945f-b9ac-4a5c-a4e4-836f527010b4",
+ "services": [
"ACR"
],
"severity": "Medium",
- "subcategory": "Landing zones",
- "text": "Use Azure RBAC to manage data plane access to resources, if possible. E.G - Data Operations across Key Vault, Storage Account and Database Services.",
- "training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "waf": "Security"
+ "subcategory": "Stretch Clustering",
+ "text": "Separate vLANs and networks are used for each replication network across both sites",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "d505ebcb-79b1-4274-9c0d-a27c8bea489c",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8e62945f-b9ac-4a5c-a4e4-836f527010b5",
+ "link": "https://learn.microsoft.com/azure/architecture/hybrid/azure-stack-hci-dr#cost-optimization",
"services": [
- "Entra"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Landing zones",
- "text": "Use Microsoft Entra ID PIM access reviews to periodically validate resource entitlements.",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Stretch Clustering",
+ "text": "Use either a cloud witness or a file share witness in a third site for cluster quorum for clusters with less than 5 nodes",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "description": "Consider using the Azure naming tool available at https://aka.ms/azurenamingtool",
- "guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8e62945f-b9ac-4a5c-a4e4-836f527010b6",
+ "link": "https://learn.microsoft.com/azure/architecture/hybrid/azure-stack-hci-dr#cost-optimization",
"services": [],
"severity": "High",
- "subcategory": "Naming and tagging",
- "text": "It is recommended to follow Microsoft Best Practice Naming Standards",
- "waf": "Security"
+ "subcategory": "Stretch Clustering",
+ "text": "When using data deduplication, only enable it on the primary/source volumes",
+ "waf": "Reliability"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
- "guid": "2df27ee4-12e7-4f98-9f63-04722dd69c5b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "category": "Operations",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "ac527887-f6f4-40a3-b883-e04d704f013b",
+ "link": "https://learn.microsoft.com/windows-server/storage/storage-replica/stretch-cluster-replication-using-shared-storage#provision-operating-system-features-roles-storage-and-network",
"services": [
- "Subscriptions"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce reasonably flat management group hierarchy with no more than four levels.",
- "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Stretch Clustering",
+ "text": "Storage backing log volumes must be faster (ideally) or at least as fast as capacity storage",
+ "waf": "Reliability"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "667313b4-f566-44b5-b984-a859c773e7d2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
+ "category": "Backup and Disaster Recovery",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8ea49f70-1038-4283-b0c4-230165d3eabc",
+ "link": "https://learn.microsoft.com/azure-stack/hci/manage/azure-site-recovery",
"services": [
- "Subscriptions"
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce a sandbox management group to allow users to immediately experiment with Azure",
- "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "subcategory": "Disaster Recovery",
+ "text": "Azure Site Recovery has been considered for DR purposes",
+ "waf": "Operations"
+ },
+ {
+ "category": "Security",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "03e65fdc-2628-4a1a-ba2e-a5174340ba52",
+ "link": "https://learn.microsoft.com/windows/security/operating-system-security/data-protection/bitlocker/protecting-cluster-shared-volumes-and-storage-area-networks-with-bitlocker",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Host",
+ "text": "BitLocker has been enabled on CSVs for volume encryption, where appropriate",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
- "services": [
- "RBAC",
- "Subscriptions",
- "AzurePolicy"
- ],
+ "category": "Security",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "9645d2e6-ba28-453c-b6d5-d9ef29fc34be",
+ "link": "https://learn.microsoft.com/windows-server/storage/file-server/smb-security",
+ "services": [],
"severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce a platform management group under the root management group to support common platform policy and Azure role assignment",
- "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "subcategory": "Host",
+ "text": "SMB encryption has been enabled, where appropriate",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
+ "category": "Security",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "8f03437a-5068-4486-9a78-0402ce771298",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-antivirus-on-windows-server",
"services": [
- "DNS",
- "Subscriptions",
- "ExpressRoute",
- "VWAN"
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce a dedicated connectivity subscription in the Connectivity management group to host an Azure Virtual WAN hub, private Domain Name System (DNS), ExpressRoute circuit, and other networking resources.",
- "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "subcategory": "Host",
+ "text": "Microsoft Defender Antivirus has been enabled on all nodes",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant = (array_length(mgmtChain) > 1)",
- "guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
- "services": [
- "Subscriptions"
- ],
+ "category": "Security",
+ "checklist": "Azure Stack HCI Review",
+ "guid": "dba6b211-fc02-43b3-b7c8-f163c188332e",
+ "link": "https://learn.microsoft.com/windows/security/identity-protection/credential-guard/credential-guard-manage",
+ "services": [],
"severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce no subscriptions are placed under the root management group",
+ "subcategory": "Host",
+ "text": "Credential Guard has been configured, where appropriate",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Disable image export to prevent data exfiltration. Note that this will prevent image import of images into another ACR instance.",
+ "guid": "ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e",
+ "link": "https://learn.microsoft.com/azure/container-registry/data-loss-prevention",
+ "service": "ACR",
"services": [
- "RBAC",
- "Subscriptions"
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce that only privileged users can operate management groups in the tenant by enabling Azure RBAC authorization in the management group hierarchy settings",
+ "severity": "High",
+ "subcategory": "Data Protection",
+ "text": "Disable Azure Container Registry image export",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "92481607-d5d1-4e4e-9146-58d3558fd772",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Enable audit compliance visibility by enabling Azure Policy for Azure Container Registry",
+ "guid": "d503547c-d447-4e82-9128-a7100f1cac6d",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-azure-policy",
+ "service": "ACR",
"services": [
- "Subscriptions"
+ "ACR",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Enforce management groups under the root-level management group to represent the types of workloads, based on their security, compliance, connectivity, and feature needs.",
+ "severity": "High",
+ "subcategory": "Data Protection",
+ "text": "Enable Azure Policies for Azure Container Registry",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "49b82111-2df2-47ee-912e-7f983f630472",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "The Azure Key Vault (AKV) is used to store a signing key that can be utilized by?notation?with the notation AKV plugin (azure-kv) to sign and verify container images and other artifacts. The Azure Container Registry (ACR) allows you to attach these signatures using the?az?or?oras?CLI commands.",
+ "guid": "d345293c-7639-4637-a551-c5c04e401955",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push",
+ "service": "ACR",
"services": [
- "RBAC",
- "Subscriptions",
- "AzurePolicy",
- "Cost"
+ "ACR",
+ "AKV"
],
"severity": "High",
- "subcategory": "Subscriptions",
- "text": "Enforce a process to make resource owners aware of their roles and responsibilities, access review, budget review, policy compliance and remediate when necessary.",
+ "subcategory": "Data Protection",
+ "text": "Sign and Verify containers with notation (Notary v2)",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Azure Container Registry automatically encrypts images and other artifacts that you store. By default, Azure automatically encrypts the registry content at rest by using service-managed keys. By using a customer-managed key, you can supplement default encryption with an additional encryption layer.",
+ "guid": "0bd05dc2-efd5-4d76-8d41-d2500cc47b49",
+ "link": "https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys",
+ "service": "ACR",
"services": [
- "Subscriptions"
+ "ACR",
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Ensure that all subscription owners and IT core team are aware of subscription quotas and the impact they have on provision resources for a given subscription.",
+ "subcategory": "Data Protection",
+ "text": "Encrypt registry with a customer managed key",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Use managed identities to secure ACRPull/Push RBAC access from client applications",
+ "guid": "8f42d78e-79dc-47b3-9bd2-a1a27e7a8e90",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
+ "service": "ACR",
"services": [
- "VM",
- "Subscriptions",
- "AzurePolicy",
- "Cost"
+ "ACR",
+ "Entra",
+ "RBAC"
],
"severity": "High",
- "subcategory": "Subscriptions",
- "text": "Use Reserved Instances where appropriate to optimize cost and ensure available capacity in target regions. Enforce the use of purchased Reserved Instance VM SKUs via Azure Policy.",
- "training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
- "waf": "Security"
- },
- {
- "ammp": true,
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/design-capacity",
- "services": [
- "Monitor",
- "Subscriptions"
- ],
- "severity": "High",
- "subcategory": "Subscriptions",
- "text": "Enforce a dashboard, workbook, or manual process to monitor used capacity levels",
- "training": "https://learn.microsoft.com/learn/paths/monitor-usage-performance-availability-resources-azure-monitor/",
+ "subcategory": "Identity and Access Control",
+ "text": "Use Managed Identities to connect instead of Service Principals",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "The local Administrator account is disabled by default and should not be enabled. Use either Token or RBAC-based access methods instead",
+ "guid": "be0e38ce-e297-411b-b363-caaab79b198d",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
+ "service": "ACR",
"services": [
- "Subscriptions",
- "Cost"
+ "ACR",
+ "Entra",
+ "RBAC"
],
"severity": "High",
- "subcategory": "Subscriptions",
- "text": "Enforce a process for cost management",
- "training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
+ "subcategory": "Identity and Access Control",
+ "text": "Disable local authentication for management plane access",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "3a923c34-74d0-4001-aac6-a9e01e6a83de",
- "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Disable Administrator account and assign RBAC roles to principals for ACR Pull/Push operations",
+ "guid": "387e5ced-126c-4d13-8af5-b20c6998a646",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli",
+ "service": "ACR",
"services": [
+ "ACR",
"Entra",
- "Subscriptions"
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "If servers will be used for Identity services, like domain controllers, establish a dedicated identity subscription in the identity management group, to host these services. Make sure that resources are set to use the domain controllers available in their region.",
- "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "severity": "High",
+ "subcategory": "Identity and Access Control",
+ "text": "Assign AcrPull & AcrPush RBAC roles rather than granting Administrative access to identity principals",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
- "guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Disable anonymous pull/push access",
+ "guid": "e338997e-41c7-47d7-acf6-a62a1194956d",
+ "link": "https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access",
+ "service": "ACR",
"services": [
- "Subscriptions",
- "Cost"
+ "ACR",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "Ensure tags are used for billing and cost management",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "subcategory": "Identity and Access Control",
+ "text": "Disable Anonymous pull access",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
- "link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Token authentication doesn't support assignment to an AAD principal. Any tokens provided are able to be used by anyone who can access the token",
+ "guid": "698dc3a2-fd27-4b2e-8870-1a1252beedf6",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication?tabs=azure-cli",
+ "service": "ACR",
"services": [
- "Subscriptions"
+ "ACR",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Subscriptions",
- "text": "For Sovereign Landing Zone, have a 'confidential corp' and 'confidential online' management group directly under the 'landing zones' MG.",
+ "severity": "High",
+ "subcategory": "Identity and Access Control",
+ "text": "Disable repository-scoped access tokens",
"waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Deploy container images to an ACR behind a Private endpoint within a trusted network",
+ "guid": "b3bec3d4-f343-47c1-936d-b55f27a71eee",
+ "service": "ACR",
"services": [
- "Cost"
+ "ACR",
+ "Entra",
+ "PrivateLink",
+ "EventHubs"
],
"severity": "High",
- "subcategory": "Regions",
- "text": "Select the right Azure region/s for your deployment. Azure is a global-scale cloud platform that provide global coverage through many regions and geographies. Different Azure regions have different characteristics, access and availability models, costs, capacity, and services offered, then it is important to consider all criteria and requirements",
- "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Control",
+ "text": "Deploy images from a trusted environment",
+ "waf": "Security"
},
{
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Only tokens with an ACR audience can be used for authentication. Used when enabling Conditional access policies for ACR",
+ "guid": "3a041fd3-2947-498b-8288-b3c6a56ceb54",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-enable-conditional-access-policy",
+ "service": "ACR",
"services": [
- "ASR"
+ "ACR",
+ "Entra",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Regions",
- "text": "Consider a multi-region deployment. Depending on customer size, locations, and users presence, operating in multiple regions can be a common choice to deliver services and run applications closer to them. Using a multi-region deployment is also important to provide geo disaster recovery capabilities, to eliminate the dependency from a single region capacity and diminish the risk of a temporary and localized resource capacity constraint",
- "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
- "waf": "Reliability"
- },
- {
- "category": "Resource Organization",
- "checklist": "Azure Landing Zone Review",
- "guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
- "services": [],
- "severity": "Medium",
- "subcategory": "Regions",
- "text": "Ensure required services and features are available within the chosen deployment regions",
- "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Control",
+ "text": "Disable Azure ARM audience tokens for authentication",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Set up a diagnostic setting to send 'repositoryEvents' & 'LoginEvents' to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the ACR resource itself.",
+ "guid": "8a488cde-c486-42bc-9bd2-1be77f26e5e6",
+ "link": "https://learn.microsoft.com/azure/container-registry/monitor-service",
+ "service": "ACR",
"services": [
- "FrontDoor",
- "AppGW"
+ "ACR",
+ "Monitor",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "Develop a plan for securing the delivery application content from your Workload spokes using Application Gateway and Azure Front door. You can use the Application Delivery checklist to for recommendations.",
- "waf": "Operations"
+ "subcategory": "Logging and Monitoring",
+ "text": "Enable diagnostics logging",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
- "service": "VNet",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Service supports disabling public network access either through using service-level IP ACL filtering rule (not NSG or Azure Firewall) or using a 'Disable Public Network Access' toggle switch",
+ "guid": "21d41d25-00b7-407a-b9ea-b40fd3290798",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
+ "service": "ACR",
"services": [
+ "ACR",
+ "Firewall",
+ "PrivateLink",
"VNet"
],
"severity": "Medium",
- "subcategory": "Hub and spoke",
- "text": "Leverage a network design based on the traditional hub-and-spoke network topology for network scenarios that require maximum flexibility.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "services": [],
- "severity": "Medium",
- "subcategory": "App delivery",
- "text": "Perform app delivery within landing zones for both internal-facing (corp) and external-facing apps (online).",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "subcategory": "Network Security",
+ "text": "Control inbound network access with Private Link",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
- "service": "VNet",
- "services": [
- "VNet",
- "Entra",
- "DNS",
- "ExpressRoute",
- "Firewall",
- "VPN",
- "NVA"
- ],
- "severity": "High",
- "subcategory": "Hub and spoke",
- "text": "Ensure that shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS servers.",
- "waf": "Cost"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "VNet",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Disable public network access if inbound network access is secured using Private Link",
+ "guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access",
+ "service": "ACR",
"services": [
- "DDoS"
+ "ACR",
+ "PrivateLink"
],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "subcategory": "Network Security",
+ "text": "Disable Public Network access",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Only the ACR Premium SKU supports Private Link access",
+ "guid": "fc833934-8b26-42d6-ac5f-512925498f6d",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-skus",
+ "service": "ACR",
"services": [
- "NVA"
+ "ACR",
+ "PrivateLink"
],
"severity": "Medium",
- "subcategory": "Hub and spoke",
- "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance",
- "waf": "Reliability"
+ "subcategory": "Network Security",
+ "text": "Use an Azure Container Registry SKU that supports Private Link (Premium SKU)",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
- "service": "ExpressRoute",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Azure Defender for containers or equivalent service should be used to scan container images for vulnerabilities",
+ "guid": "bad37dac-43bc-46ce-8d7a-a9b24604489a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
+ "service": "ACR",
"services": [
- "VPN",
- "ARS",
- "ExpressRoute"
+ "ACR",
+ "Defender"
],
"severity": "Low",
- "subcategory": "Hub and spoke",
- "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "subcategory": "Network Security",
+ "text": "Enable Defender for Containers to scan Azure Container Registry for vulnerabilities",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
- "service": "ARS",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
+ "guid": "4451e1a2-d345-4293-a763-9637a551c5c0",
+ "service": "ACR",
"services": [
- "VNet",
- "ARS"
+ "ACR"
],
- "severity": "Low",
- "subcategory": "Hub and spoke",
- "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "severity": "Medium",
+ "subcategory": "Vulnerability Management",
+ "text": "Deploy validated container images",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
- "service": "VNet",
+ "category": "Security",
+ "checklist": "Azure Container Registry Security Review",
+ "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
+ "guid": "4e401955-387e-45ce-b126-cd132af5b20c",
+ "service": "ACR",
"services": [
- "VNet",
"ACR"
],
- "severity": "Medium",
- "subcategory": "Hub and spoke",
- "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Vulnerability Management",
+ "text": "Use up-to-date platforms, languages, protocols and frameworks",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "65285269-440c-44be-9d3e-0844276d4bdc",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foudations-playbooks-ADB_v1.docx",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Reference Databricks HA/DR playbook",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "89d558b9-37d3-4974-b111-2dbd7aaf12e6",
+ "link": "https://learn.microsoft.com/azure/databricks/security/secrets/secret-scopes",
"services": [
- "Monitor"
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Hub and spoke",
- "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Operations"
+ "subcategory": "Backup",
+ "text": "Backup Your Workspace Configuration including ARM templates and Secret Scopes",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "b94ee5ef-47d2-4d92-a81b-1cd6d1f54b29",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/sharing-metadata-across-different-databricks-workspaces-using/ba-p/3679757",
"services": [
- "VNet",
- "Entra",
- "ExpressRoute"
+ "ACR",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Hub and spoke",
- "text": "When connecting spoke virtual networks to the central hub virtual network, consider VNet peering limits (500), the maximum number of prefixes that can be advertised via ExpressRoute (1000)",
+ "subcategory": "Backup",
+ "text": "Share MetaData Across different Databricks Workspaces using Hive External Metastore",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "769e3969-0e78-428a-a936-657d03b0f466",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/disaster-recovery-strategy-in-azure-databricks-using-the-hive/ba-p/3684581",
"services": [
- "Storage"
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Hub and spoke",
- "text": "Consider the limit of routes per route table (400).",
+ "subcategory": "Backup",
+ "text": "Plan Disaster Recovery Strategy in Databricks using the Hive External Metastore",
"waf": "Reliability"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "4b1d944a-3598-437e-b79d-6c6d3a364a5b",
+ "link": "https://www.databricks.com/blog/2021/04/20/attack-of-the-delta-clones-against-disaster-recovery-availability-complexity.html",
"services": [
- "VNet"
+ "Backup"
],
- "severity": "High",
- "subcategory": "Hub and spoke",
- "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings",
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "Backup your data with deep and shallow clones",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
- "service": "ExpressRoute",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "description": "Download the blob using Secondary Endpoint in RAGRS Storage Account",
+ "guid": "7abae48a-bd54-4cd7-ae2e-86768357c559",
+ "link": "https://techcommunity.microsoft.com/t5/azure-paas-blog/download-the-blob-using-secondary-endpoint-in-ragrs-storage/ba-p/2403750",
"services": [
- "ExpressRoute"
+ "Storage",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Encryption",
- "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
- "waf": "Security"
+ "subcategory": "Backup",
+ "text": "Backup your data to Azure Storage RA-GRS",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "675c5ee8-5b85-49c7-944c-e3b1a28b875a",
+ "link": "https://learn.microsoft.com/azure/databricks/dev-tools/index-ci-cd",
"services": [
- "VPN",
- "ExpressRoute"
+ "Backup"
],
- "severity": "Low",
- "subcategory": "Encryption",
- "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Backup",
+ "text": "Backup your code with DevOps",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "ExpressRoute",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "a1bf1038-9f03-4a4d-8ce4-63dbbbc8682a",
+ "link": "https://learn.microsoft.com/azure/databricks/administration-guide/disaster-recovery",
"services": [
- "VNet",
- "ACR"
+ "ASR"
],
"severity": "High",
- "subcategory": "IP plan",
- "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Plan for Disaster recovery using Active/Active or Active/Passive Configuration",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
- "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "description": "Migration package to log all Databricks resources for backup and/or migrating to another Databricks workspace",
+ "guid": "5abc92a4-eda1-4dae-8cc8-5c47c6b781cc",
+ "link": "https://github.com/databrickslabs/migrate",
"services": [
- "VNet"
+ "Backup"
],
+ "severity": "Medium",
+ "subcategory": "Migration",
+ "text": "Use Databricks Migration tools",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "DataBricks Review Checklist",
+ "guid": "a0e6c465-89d5-458b-a37d-3974d1112dbd",
+ "link": "https://github.com/databrickslabs/databricks-sync",
+ "services": [],
"severity": "Low",
- "subcategory": "IP plan",
- "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
+ "subcategory": "Migration",
+ "text": "Use Databricks Sync",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
- "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "a96b96ad-8840-48f3-9273-4c876ba28021",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-resiliency",
"services": [
+ "DNS",
"VNet"
],
"severity": "High",
- "subcategory": "IP plan",
- "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16)",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Performance"
+ "subcategory": "Azure Private DNS",
+ "text": "Verify that Zones are linked to Vnets in multiple regions",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
- "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
- "service": "VNet",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "45901465-d38e-453f-accb-d969266acca2",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-resiliency",
"services": [
- "VNet"
+ "DNS"
],
"severity": "High",
- "subcategory": "IP plan",
- "text": "Avoid using overlapping IP address ranges for production and DR sites.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "subcategory": "Azure Private DNS",
+ "text": "If different Zones are used between regions, verify a plan for making sure that Zones are up to date in a DR failover situation",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "74faa19b-f39d-495d-94c7-c8919ca1f6d5",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-traffic-manager?toc=%2Fazure%2Fdns%2Ftoc.json",
"services": [
- "VNet",
- "DNS"
+ "TrafficManager",
+ "DNS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "IP plan",
- "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operations"
+ "subcategory": "Azure DNS",
+ "text": "Plan for disaster recovery with Azure DNS and Traffic Manager",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
- "service": "DNS",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "315ae524-ba34-4d45-a5e1-2139bd7bb012",
+ "link": "https://learn.microsoft.com/azure/dns/private-resolver-reliability#availability-zones",
"services": [
- "VNet",
- "ACR",
"DNS"
],
"severity": "Medium",
- "subcategory": "IP plan",
- "text": "For environments where name resolution across Azure and on-premises is required, consider using Azure DNS Private Resolver.",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
- "waf": "Security"
+ "subcategory": "Azure DNS Resolver",
+ "text": "Enable availability zones with Private Resolver",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "f7b95e06-e154-4e2a-a359-2828e6e20517",
+ "link": "https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover",
"services": [
- "VNet",
- "DNS"
+ "DNS",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "IP plan",
- "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Azure DNS Resolver",
+ "text": "Plan for failover with Private Resolvers in a Disaster Recovery",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "614658d3-558f-4d77-849b-821112df27ee",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
- "service": "DNS",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "2676ae46-691e-4883-9ad9-42223e138105",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-virtual-machines?toc=%2Fazure%2Fvirtual-machines%2Ftoc.json&bc=%2Fazure%2Fvirtual-machines%2Fbreadcrumb%2Ftoc.json&tabs=graph",
"services": [
- "VNet",
"DNS",
"VM"
],
- "severity": "High",
- "subcategory": "IP plan",
- "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "VM Based DNS Service",
+ "text": "Follow VM Guidance for resillency of VM",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
- "service": "Bastion",
+ "category": "Operations Management",
+ "checklist": "DNS Review Checklist",
+ "guid": "23081a94-1741-4583-9ff7-ad7c6d373316",
+ "link": "https://www.windows-active-directory.com/azure-ad-dns-for-custom-domain-names-with-advanced-dns-settings.html",
"services": [
- "Bastion"
+ "DNS",
+ "Entra",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Internet",
- "text": "Consider using Azure Bastion to securely connect to your network.",
- "waf": "Security"
+ "subcategory": "VM Based DNS Service",
+ "text": "IF AD based DNS, follow the Identity -> Windows Server AD path",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
- "service": "Bastion",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Disable image export to prevent data exfiltration. Note that this will prevent image import of images into another ACR instance.",
+ "guid": "ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e",
+ "link": "https://learn.microsoft.com/azure/container-registry/data-loss-prevention",
+ "service": "ACR",
"services": [
- "VNet",
- "Bastion"
+ "WAF",
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "Internet",
- "text": "Use Azure Bastion in a subnet /26 or larger.",
+ "severity": "High",
+ "text": "Disable Azure Container Registry image export",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "WAF",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Enable audit compliance visibility by enabling Azure Policy for Azure Container Registry",
+ "guid": "d503547c-d447-4e82-9128-a7100f1cac6d",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-azure-policy",
+ "service": "ACR",
"services": [
- "FrontDoor",
+ "WAF",
"ACR",
- "AzurePolicy",
- "WAF"
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Internet",
- "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "severity": "High",
+ "text": "Enable Azure Policies for Azure Container Registry",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "The Azure Key Vault (AKV) is used to store a signing key that can be utilized by?notation?with the notation AKV plugin (azure-kv) to sign and verify container images and other artifacts. The Azure Container Registry (ACR) allows you to attach these signatures using the?az?or?oras?CLI commands.",
+ "guid": "d345293c-7639-4637-a551-c5c04e401955",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push",
+ "service": "ACR",
"services": [
- "FrontDoor",
- "AzurePolicy",
"WAF",
- "AppGW"
+ "ACR",
+ "AKV"
],
- "severity": "Low",
- "subcategory": "Internet",
- "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "severity": "High",
+ "text": "Sign and Verify containers with notation (Notary v2)",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Azure Container Registry automatically encrypts images and other artifacts that you store. By default, Azure automatically encrypts the registry content at rest by using service-managed keys. By using a customer-managed key, you can supplement default encryption with an additional encryption layer.",
+ "guid": "0bd05dc2-efd5-4d76-8d41-d2500cc47b49",
+ "link": "https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys",
+ "service": "ACR",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "ACR",
+ "AKV"
],
- "severity": "High",
- "subcategory": "Internet",
- "text": "Deploy WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "severity": "Medium",
+ "text": "Encrypt registry with a customer managed key",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Use managed identities to secure ACRPull/Push RBAC access from client applications",
+ "guid": "8f42d78e-79dc-47b3-9bd2-a1a27e7a8e90",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
+ "service": "ACR",
"services": [
- "DDoS",
- "VNet"
+ "WAF",
+ "ACR",
+ "Entra",
+ "RBAC"
],
"severity": "High",
- "subcategory": "Internet",
- "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Use Managed Identities to connect instead of Service Principals",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
- "service": "VNet",
- "services": [],
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "The local Administrator account is disabled by default and should not be enabled. Use either Token or RBAC-based access methods instead",
+ "guid": "be0e38ce-e297-411b-b363-caaab79b198d",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
+ "service": "ACR",
+ "services": [
+ "WAF",
+ "RBAC"
+ ],
"severity": "High",
- "subcategory": "Internet",
- "text": "Assess and review network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed",
- "waf": "Reliability"
+ "text": "Disable local authentication for management plane access",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Disable Administrator account and assign RBAC roles to principals for ACR Pull/Push operations",
+ "guid": "387e5ced-126c-4d13-8af5-b20c6998a646",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli",
+ "service": "ACR",
"services": [
- "DDoS"
+ "WAF",
+ "ACR",
+ "Entra",
+ "RBAC"
],
"severity": "High",
- "subcategory": "Internet",
- "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Assign AcrPull & AcrPush RBAC roles rather than granting Administrative access to identity principals",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Disable anonymous pull/push access",
+ "guid": "e338997e-41c7-47d7-acf6-a62a1194956d",
+ "link": "https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access",
+ "service": "ACR",
"services": [
- "ExpressRoute"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Ensure that you have investigated the possibility to use ExpressRoute as primary connection to Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Disable Anonymous pull access",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
- "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Token authentication doesn't support assignment to an AAD principal. Any tokens provided are able to be used by anyone who can access the token",
+ "guid": "698dc3a2-fd27-4b2e-8870-1a1252beedf6",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication?tabs=azure-cli",
+ "service": "ACR",
"services": [
- "ExpressRoute"
+ "WAF",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Hybrid",
- "text": "When you use multiple ExpressRoute circuits, or multiple on-prem locations, make sure to optimize routing with BGP attributes, if certain paths are preferred.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Disable repository-scoped access tokens",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
- "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Deploy container images to an ACR behind a Private endpoint within a trusted network",
+ "guid": "b3bec3d4-f343-47c1-936d-b55f27a71eee",
+ "service": "ACR",
"services": [
- "VPN",
- "ExpressRoute"
+ "WAF",
+ "ACR",
+ "PrivateLink",
+ "EventHubs"
],
- "severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Ensure that you're using the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Deploy images from a trusted environment",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Only tokens with an ACR audience can be used for authentication. Used when enabling Conditional access policies for ACR",
+ "guid": "3a041fd3-2947-498b-8288-b3c6a56ceb54",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-enable-conditional-access-policy",
+ "service": "ACR",
"services": [
- "ExpressRoute",
- "Cost"
+ "WAF",
+ "ACR",
+ "Entra",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Hybrid",
- "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "Disable Azure ARM audience tokens for authentication",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Set up a diagnostic setting to send 'repositoryEvents' & 'LoginEvents' to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the ACR resource itself.",
+ "guid": "8a488cde-c486-42bc-9bd2-1be77f26e5e6",
+ "link": "https://learn.microsoft.com/azure/container-registry/monitor-service",
+ "service": "ACR",
"services": [
- "ExpressRoute",
- "Cost"
+ "WAF",
+ "ACR",
+ "Monitor",
+ "Entra"
],
- "severity": "High",
- "subcategory": "Hybrid",
- "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuits' peering location supports your Azure regions for the Local SKU.",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "Enable diagnostics logging",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
- "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Service supports disabling public network access either through using service-level IP ACL filtering rule (not NSG or Azure Firewall) or using a 'Disable Public Network Access' toggle switch",
+ "guid": "21d41d25-00b7-407a-b9ea-b40fd3290798",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
+ "service": "ACR",
"services": [
- "ExpressRoute"
+ "WAF",
+ "Firewall",
+ "PrivateLink",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Control inbound network access with Private Link",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Disable public network access if inbound network access is secured using Private Link",
+ "guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access",
+ "service": "ACR",
"services": [
- "ExpressRoute"
+ "WAF",
+ "PrivateLink"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Disable Public Network access",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Only the ACR Premium SKU supports Private Link access",
+ "guid": "fc833934-8b26-42d6-ac5f-512925498f6d",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-skus",
+ "service": "ACR",
"services": [
- "ExpressRoute"
+ "WAF",
+ "ACR",
+ "PrivateLink"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Use an Azure Container Registry SKU that supports Private Link (Premium SKU)",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
- "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
- "service": "VPN",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Azure Defender for containers or equivalent service should be used to scan container images for vulnerabilities",
+ "guid": "bad37dac-43bc-46ce-8d7a-a9b24604489a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
+ "service": "ACR",
"services": [
- "VPN"
+ "WAF",
+ "ACR",
+ "Defender"
],
- "severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Enable Defender for Containers to scan Azure Container Registry for vulnerabilities",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
- "service": "VPN",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
+ "guid": "4451e1a2-d345-4293-a763-9637a551c5c0",
+ "service": "ACR",
"services": [
- "VPN"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
- "waf": "Reliability"
+ "text": "Deploy validated container images",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
+ "guid": "4e401955-387e-45ce-b126-cd132af5b20c",
+ "service": "ACR",
"services": [
- "ExpressRoute",
- "Cost"
+ "WAF"
],
"severity": "High",
- "subcategory": "Hybrid",
- "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Cost"
+ "text": "Use up-to-date platforms, languages, protocols and frameworks",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant = (sku=~'{\"name\":\"Standard\"}') | distinct id,compliant",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "link": "https://learn.microsoft.com/azure/service-fabric/overview-managed-cluster#service-fabric-managed-cluster-skus",
+ "service": "Azure Service Fabric",
"services": [
- "ExpressRoute"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Security"
+ "text": "Use Standard SKU for production scenarios.",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/clusters' | extend nodeTypes= array_concat(properties.nodeTypes) | mv-expand nodeTypes | summarize BronzeDurabilityCount = countif(nodeTypes.durabilityLevel == 'Bronze') by id | extend compliant = (BronzeDurabilityCount == 0) | distinct id,compliant",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity#durability-characteristics-of-the-cluster",
+ "service": "Azure Service Fabric",
"services": [
- "Monitor",
- "ExpressRoute"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operations"
+ "text": "Use durability level Silver (5 VMs) or greater for production scenarios",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
- "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant= ( properties.zonalResiliency =~ 'true') | distinct id,compliant",
+ "guid": "2363878d-55c4-4cbd-9bc2-94523c85f12e",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-availability-zones",
+ "service": "Azure Service Fabric",
"services": [
- "ACR",
- "Monitor",
- "NetworkWatcher"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operations"
+ "text": "Consider using Availability Zones for your Service Fabric clusters. Service Fabric managed cluster supports deployments that span across multiple Availability Zones to provide zone resiliency. This configuration will ensure high-availability of the critical system services and your applications to protect from single-points-of-failure.",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
- "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "guid": "5ba74cc8-3ca2-44d5-9a67-bdc8e102e7b4",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-api-management-overview",
+ "service": "Azure Service Fabric",
"services": [
- "ExpressRoute"
+ "WAF",
+ "APIM"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Consider using Azure API Management to expose and offload cross-cutting functionality for APIs hosted on the cluster. API Management can integrate with Service Fabric directly.",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "guid": "ef17bb8f-4e2c-488b-8ceb-a07c3d750dd3",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-reliable-services-introduction",
+ "service": "Azure Service Fabric",
"services": [
- "VPN",
- "ExpressRoute"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Use site-to-site VPN as failover of ExpressRoute, especially if only using a single ExpressRoute circuit.",
+ "text": "For stateful workload scenarios, consider using Reliable Services. The Reliable Services model allows your services to stay up even in unreliable environments where your machines fail or hit network issues, or in cases where the services themselves encounter errors and crash or fail. For stateful services, your state is preserved even in the presence of network or other failures.",
"waf": "Reliability"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
- "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | summarize compliant = countif(sku.name matches regex '^Standard_[^d]*$' ) by id",
+ "guid": "4da21268-f775-4c89-a271-eb80543c8df7",
+ "service": "Azure Service Fabric",
"services": [
- "Storage",
- "VNet"
+ "WAF",
+ "VM"
],
- "severity": "High",
- "subcategory": "Hybrid",
- "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Avoid VM SKUs with temp disk offerings. Service Fabric uses managed disks by default, so avoiding temp disk offerings ensures you don't pay for unneeded resources.",
+ "waf": "Cost"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "d581a947-69a2-4783-942e-9df3664324c8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "guid": "1890b796-f300-41a3-a8d4-29738c1f4ad0",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-stateless-node-type#temporary-disk-support",
+ "service": "Azure Service Fabric",
"services": [
- "ACR",
- "ExpressRoute"
+ "WAF",
+ "VM"
],
- "severity": "High",
- "subcategory": "Hybrid",
- "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "If you need to select a certain VM SKU for capacity reasons and it happens to offer temp disk, consider using temporary disk support for your stateless workloads.",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "guid": "5247bb32-6778-49c7-8b40-e171c9a3ce1e",
+ "service": "Azure Service Fabric",
"services": [
- "ExpressRoute"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
- "service": "ExpressRoute",
- "services": [],
- "severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Align SKU selection and managed disk size with workload requirements. Matching your selection to your workload demands ensures you don't pay for unneeded resources.",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "guid": "6028759b-446a-41bc-8b0e-7728e61ca704",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-networking#manage-nsg-rules",
+ "service": "Azure Service Fabric",
"services": [
- "ExpressRoute"
+ "WAF",
+ "APIM",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Hybrid",
- "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Ensure Network Security Groups (NSG) are configured to restrict traffic flow between subnets and node types. For example, you may have an API Management instance (one subnet), a frontend subnet (exposing a website directly), and a backend subnet (accessible only to frontend).",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | extend compliant = (isnotnull(properties.virtualMachineProfile.osProfile.secrets))",
+ "guid": "4e98c903-14cf-4c72-9c45-b8b23bc4cbd8",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#deploy-key-vault-certificates-to-service-fabric-cluster-virtual-machine-scale-sets",
+ "service": "Azure Service Fabric",
"services": [
- "VNet",
- "Monitor",
- "ExpressRoute"
+ "Storage",
+ "VM",
+ "WAF",
+ "Entra",
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operations"
+ "text": "Deploy Key Vault certificates to Service Fabric cluster virtual machine scale sets. Centralizing storage of application secrets in Azure Key Vault allows you to control their distribution. Key Vault greatly reduces the chances that secrets may be accidentally leaked.",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
- "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
- "service": "ExpressRoute",
+ "checklist": "WAF checklist",
+ "guid": "001cbb6f-d88d-4431-8434-d01333397776",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#apply-an-access-control-list-acl-to-your-certificate-for-your-service-fabric-cluster",
+ "service": "Azure Service Fabric",
"services": [
- "VNet",
- "ExpressRoute"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Avoid using ExpressRoute circuits for VNet-to-VNet communication.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Apply an Access Control List (ACL) to your client certificate for your Service Fabric cluster. Using an ACL provides an additional level of authentication.",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "4b74b7a5-bb1e-4fca-948c-037ba95fb73b",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-resource-governance#resource-governance-mechanism",
+ "service": "Azure Service Fabric",
"services": [
- "Firewall"
+ "WAF",
+ "ACR"
],
- "severity": "High",
- "subcategory": "Firewall",
- "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "severity": "Medium",
+ "text": "Use resource requests and limits to govern resource usage across the nodes in your cluster. Enforcing resource limits helps ensure that one service doesn't consume too many resources and starve other services.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "cd9233ba-f3aa-4353-8d2f-7ea4a64160e6",
+ "link": "",
+ "service": "Azure Service Fabric",
"services": [
- "ACR",
- "RBAC",
- "AzurePolicy",
- "Firewall"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Firewall",
- "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Encrypt Service Fabric package secret values. Encryption on your secret values provides an additional level of security.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
- "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "44b989d4-9f72-42b6-99da-ec2a79f83299",
+ "link": "",
+ "service": "Azure Service Fabric",
"services": [
- "Firewall"
+ "WAF",
+ "AKV"
],
- "severity": "Low",
- "subcategory": "Firewall",
- "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "severity": "Medium",
+ "text": "Include client certificates in Service Fabric applications. Having your applications use client certificates for authentication provides opportunities for security at both the cluster and workload level.",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "28e66ff7-4a77-4b2c-910d-0335f141208a",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-identity-managed-cluster-virtual-machine-scale-sets",
+ "service": "Azure Service Fabric",
"services": [
- "DNS",
- "Firewall"
+ "WAF",
+ "Entra"
],
- "severity": "High",
- "subcategory": "Firewall",
- "text": "Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over protocols not supported by application rules.",
+ "severity": "Medium",
+ "text": "Authenticate Service Fabric applications to Azure Resources using Managed Identity. Using Managed Identity allow you to securely manage the credentials in your code for authenticating to various services without saving them locally on a developer workstation or in source control.",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "f16c413c-00a6-43aa-852c-b97292c33a56",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#hosting-untrusted-applications-in-a-service-fabric-cluster",
+ "service": "Azure Service Fabric",
"services": [
- "Firewall"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Firewall",
- "text": "Use Azure Firewall Premium for additional security and protection.",
+ "severity": "Medium",
+ "text": "Follow Service Fabric best practices when hosting untrusted applications. Following the best practices provides a security standard to follow.",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
"services": [
- "Firewall"
+ "WAF",
+ "AppGW"
],
- "severity": "High",
- "subcategory": "Firewall",
- "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
+ "severity": "Medium",
+ "text": "Ensure you are using Application Gateway v2 SKU",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
- "service": "Firewall",
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
"services": [
- "Firewall"
+ "WAF",
+ "LoadBalancer"
],
- "severity": "High",
- "subcategory": "Firewall",
- "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
+ "severity": "Medium",
+ "text": "Ensure you are using the Standard SKU for your Azure Load Balancers",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
- "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
- "service": "Firewall",
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "WAF checklist",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
"services": [
- "Storage",
- "VNet",
- "VWAN",
- "Firewall",
- "NVA"
+ "WAF",
+ "LoadBalancer"
],
- "severity": "High",
- "subcategory": "Firewall",
- "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance",
+ "severity": "Medium",
+ "text": "Ensure your Load Balancers frontend IP addresses are zone-redundant (unless you require zonal frontends).",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
"services": [
- "Storage",
- "Firewall"
+ "WAF",
+ "AppGW",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Firewall",
- "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Operations"
+ "text": "Your Application Gateways v2 should be deployed in subnets with IP prefixes equal or larger than /24",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
- "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "description": "Administration of reverse proxies in general and WAF in particular is closer to the application than to networking, so they belong in the same subscription as the app. Centralizing the Application Gateway and WAF in the connectivity subscription might be OK if it is managed by one single team.",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
"services": [
- "AzurePolicy",
- "Firewall"
+ "NVA",
+ "WAF",
+ "Entra",
+ "AppGW",
+ "Subscriptions",
+ "VNet"
],
- "severity": "Important",
- "subcategory": "Firewall",
- "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound HTTP(S) connections within the landing-zone virtual network and with the apps that they're securing.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
"services": [
- "VNet",
- "Firewall"
+ "WAF",
+ "DDoS"
],
- "severity": "High",
- "subcategory": "Segmentation",
- "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "severity": "Medium",
+ "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
"services": [
- "AzurePolicy"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Firewall",
- "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use",
- "waf": "Performance"
+ "text": "Configure autoscaling with a minimum amount of instances of two.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
- "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
"services": [
- "Storage"
+ "WAF",
+ "ACR",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "Firewall",
- "text": "Use IP Groups or IP prefixes to reduce number of IP table rules",
- "waf": "Performance"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
- "service": "Firewall",
- "services": [],
- "severity": "Medium",
- "subcategory": "Firewall",
- "text": "Avoid wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs",
- "waf": "Performance"
+ "text": "Deploy Application Gateway across Availability Zones",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
- "service": "Firewall",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "WAF checklist",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
"services": [
- "Monitor"
+ "WAF",
+ "AppGW",
+ "AzurePolicy",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Firewall",
- "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it’s a sign that SNAT exhaustion might be imminent.",
- "waf": "Performance"
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "346840b8-1064-496e-8396-4b1340172d52",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
- "service": "Firewall",
- "services": [],
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
+ "checklist": "WAF checklist",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "services": [
+ "WAF",
+ "TrafficManager"
+ ],
"severity": "High",
- "subcategory": "Firewall",
- "text": "Enable TLS Inspection",
- "waf": "Performance"
+ "text": "Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"services": [
- "ServiceBus"
+ "WAF",
+ "AVD",
+ "Entra"
],
"severity": "Low",
- "subcategory": "Firewall",
- "text": "Use web categories to allow or deny outbound access to specific topics.",
- "waf": "Performance"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
- "service": "Firewall",
- "services": [],
- "severity": "Medium",
- "subcategory": "Firewall",
- "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
- "waf": "Performance"
+ "text": "If users only need access to internal applications, has Microsoft Entra ID Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details",
- "service": "Firewall",
+ "checklist": "WAF checklist",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"services": [
- "DNS",
- "Firewall"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Firewall",
- "text": "Enable Azure Firewall DNS proxy configuration ",
+ "text": "To reduce the number of firewall ports open for incoming connections in your network, consider using Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
"services": [
- "VM",
- "AzurePolicy"
+ "WAF",
+ "LoadBalancer"
],
- "severity": "Medium",
- "subcategory": "Firewall",
- "text": "Ensure there is a policy assignment to deny Public IP addresses directly tied to Virtual Machines",
- "waf": "Security"
+ "severity": "High",
+ "text": "Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT scalability",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
- "service": "Firewall",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
"services": [
- "Monitor",
- "Firewall"
+ "WAF",
+ "AppGW"
],
- "severity": "Low",
- "subcategory": "Firewall",
- "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable the Azure Application Gateway WAF bot protection rule set. The bot rules detect good and bad bots.",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | extend compliant = (properties['policySettings']['requestBodyCheck'] == 'true' and properties['policySettings']['state'] =~ 'Enabled') | distinct id, name, compliant",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
"services": [
- "Backup"
+ "WAF",
+ "AppGW",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Firewall",
- "text": "Implement backups for your firewall rules",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Ensure if request body inspection feature is enabled in Azure Application Gateway WAF policy.",
+ "waf": "Security"
},
{
"ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
"service": "App Gateway",
"services": [
- "VNet"
+ "WAF",
+ "AppGW"
],
"severity": "High",
- "subcategory": "PaaS",
- "text": "Ensure that control-plane communication for Azure PaaS services injected into a virtual network is not broken, for example with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "text": "Tune the Azure Application Gateway WAF in detection mode for your workload. Reduce false positive detections.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
"services": [
- "PrivateLink"
+ "WAF",
+ "AppGW",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "PaaS",
- "text": "Use Private Link, where available, for shared Azure PaaS services.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "severity": "High",
+ "text": "Deploy your WAF policy for Application Gateway in 'Prevention' mode.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
"services": [
- "ExpressRoute",
- "PrivateLink"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "PaaS",
- "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Add rate limiting to the Azure Application Gateway WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
- "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "VNet",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
"services": [
- "VNet"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "PaaS",
- "text": "Don't enable virtual network service endpoints by default on all subnets.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "text": "Use a high threshold for Azure Application Gateway WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
"services": [
- "DNS",
- "NVA",
- "PrivateLink",
- "Firewall"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "PaaS",
- "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "severity": "Low",
+ "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
"services": [
- "VPN",
- "VNet",
- "ExpressRoute"
+ "WAF",
+ "AppGW"
],
- "severity": "High",
- "subcategory": "Segmentation",
- "text": "Use at least a /27 prefix for your Gateway subnets",
+ "severity": "Medium",
+ "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Application Gateway WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
- "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
- "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
- "service": "NSG",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
"services": [
- "VNet"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
+ "text": "Use the latest Azure Application Gateway WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
"services": [
- "VNet"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Delegate subnet creation to the landing zone owner.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "text": "Add diagnostic settings to save your Azure Application Gateway WAF logs.",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
- "service": "NSG",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
"services": [
- "VNet",
- "ACR"
+ "WAF",
+ "Sentinel",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Send Azure Application Gateway WAF logs to Microsoft Sentinel.",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
"services": [
- "VNet",
- "VM"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "The application team should use application security groups at the subnet-level NSGs to help protect multi-tier VMs within the landing zone.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Define your Azure Application Gateway WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
"services": [
- "VNet",
- "Entra",
- "NVA"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Use WAF Policies instead of the legacy WAF configuration.",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
"services": [
- "VNet",
- "NetworkWatcher"
+ "VPN",
+ "WAF",
+ "ExpressRoute",
+ "AppGW",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "text": "Filter inbound traffic in the backends so that they only accept connections from the Application Gateway subnet, for example with NSGs.",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
- "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "NSG",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
"services": [
- "VNet"
+ "WAF"
+ ],
+ "severity": "High",
+ "text": "You should encrypt traffic to the backend servers.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
+ "services": [
+ "WAF"
+ ],
+ "severity": "High",
+ "text": "You should use a Web Application Firewall.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
+ "services": [
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Consider the limit of NSG rules per NSG (1000).",
- "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "waf": "Reliability"
+ "text": "Redirect HTTP to HTTPS",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
"services": [
- "VWAN"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Consider Virtual WAN for simplified Azure networking management, and make sure your scenario is explicitly described in the list of Virtual WAN routing designs",
- "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "text": "Use gateway-managed cookies to direct traffic from a user session to the same server for processing",
"waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
"services": [
- "ACR",
- "VWAN"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Enable connection draining during planned service updates to prevent connection loss to existing members of the backend pool",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
"services": [
- "ACR",
- "VWAN"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Virtual WAN",
- "text": "Follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network",
- "waf": "Performance"
+ "text": "Create custom error pages to display a personalized user experience",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
- "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
"services": [
- "VWAN",
- "Firewall"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Edit HTTP requests and response headers for easier routing and information exchange between the client and server",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
"services": [
- "VWAN"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Ensure that the network architecture is within the Azure Virtual WAN limits.",
- "waf": "Reliability"
+ "text": "Configure Front Door to optimize global web traffic routing and top-tier end-user performance, and reliability through quick global failover",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
"services": [
- "Monitor",
- "VWAN"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
- "waf": "Operations"
+ "text": "Use transport layer load balancing",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
"services": [
- "VWAN"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Make sure that your IaC deployments does not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
- "waf": "Reliability"
+ "text": "Configure routing based on host or domain name for multiple web applications on a single gateway",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
"services": [
- "VPN",
- "ExpressRoute",
- "VWAN"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
- "waf": "Reliability"
+ "text": "Centralize SSL certificate management to reduce encryption and decryption overhead from a backend server farm",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
- "service": "VWAN",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
"services": [
- "VWAN"
+ "WAF",
+ "AppGW"
],
- "severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Make sure that your IaC deployments are configuring label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Use Application Gateway for native support for WebSocket and HTTP/2 protocols",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Landing Zone Review",
- "guid": "9c75dfef-573c-461c-a698-68598595581a",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
- "service": "VWAN",
+ "arm-service": "Microsoft.DBforPostgreSQL/servers",
+ "checklist": "WAF checklist",
+ "guid": "65285269-441c-44bf-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview",
+ "service": "PostgreSQL",
"services": [
- "VWAN"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Virtual WAN",
- "text": "Assign enough IP space to virtual hubs, ideally a /23 prefix.",
+ "severity": "Medium",
+ "text": "Leverage Flexible Server",
"waf": "Reliability"
},
{
- "ammp": true,
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.DBforPostgreSQL/servers",
+ "checklist": "WAF checklist",
+ "guid": "016ccf31-ae5a-41eb-9888-9535e227896d",
+ "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview#architecture-and-high-availability",
+ "service": "PostgreSQL",
"services": [
- "AzurePolicy"
+ "WAF"
],
"severity": "High",
- "subcategory": "Governance",
- "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
- "waf": "Security"
+ "text": "Leverage Availability Zones where regionally applicable",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.DBforPostgreSQL/servers",
+ "checklist": "WAF checklist",
+ "guid": "31b67c67-be59-4519-8083-845d587cb391",
+ "link": "https://learn.microsoft.com/azure/postgresql/single-server/concepts-business-continuity#cross-region-read-replicas",
+ "service": "PostgreSQL",
"services": [
- "RBAC",
- "AzurePolicy"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Governance",
- "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
- "waf": "Security"
+ "text": "Leverage cross-region read replicas for BCDR",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "21c30d25-ffb7-4f6a-b9ea-b3fec328f787",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-cog_svcs_v1.docx",
+ "service": "Cognitive Services",
"services": [
- "Subscriptions",
- "AzurePolicy"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Governance",
- "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes",
- "waf": "Security"
+ "text": "Leverage FTA HandBook for Cognitive Services",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "78c34698-16b2-4763-aefe-1b9b599de0d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Cognitive Services",
"services": [
- "AzurePolicy"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Governance",
- "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
- "waf": "Security"
+ "text": "Backup Your Prompts",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "43334f24-9116-4341-a2ba-527526944008",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
- "service": "Policy",
- "services": [
- "Subscriptions",
- "AzurePolicy"
- ],
- "severity": "Low",
- "subcategory": "Governance",
- "text": "Use Azure Policy to control which services users can provision at the subscription/management group level",
- "waf": "Security"
- },
- {
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "750ab2ab-039d-4a6d-95d7-c892adb107d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Cognitive Services",
"services": [
- "AzurePolicy"
+ "WAF",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "Use built-in policies where possible to minimize operational overhead.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Business Continuity and Disaster Recovery (BCDR) considerations with Azure OpenAI Service",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
- "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "325af625-ca44-4e46-a5e2-223ace8bb123",
+ "link": "https://github.com/abacaj/chatgpt-backup#backup-your-chatgpt-conversations",
+ "service": "Cognitive Services",
"services": [
- "Entra",
- "RBAC",
- "Subscriptions",
- "AzurePolicy"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Governance",
- "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
- "waf": "Security"
+ "text": "Backup Your ChatGPT conversations",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "19048384-5c98-46cb-8913-156a12476e49",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "07ca5f17-f154-4e3a-a369-2829e7e31618",
+ "link": "https://learn.microsoft.com/azure/ai-services/speech-service/how-to-custom-speech-continuous-integration-continuous-deployment",
+ "service": "Cognitive Services",
"services": [
- "Subscriptions",
- "AzurePolicy"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Governance",
- "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
- "waf": "Security"
+ "text": "CI/CD for custom speech",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
- "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "3687a046-7a1f-4893-9bda-43324f248116",
+ "link": "https://learn.microsoft.com/azure/ai-services/qnamaker/tutorials/export-knowledge-base",
+ "service": "Cognitive Services",
"services": [
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "If any data sovereignty requirements exist, Azure Policies can be deployed to enforce them",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Move a knowledge base using export-import",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
- "service": "Policy",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
"services": [
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "For Sovereign Landing Zone, sovereignty policy baseline' policy initiative is deployed and and assigned at correct MG level.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
- "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
- "service": "Policy",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
"services": [
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "For Sovereign Landing Zone, sovereign Control objectives to policy mapping' is documented.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Protect logic apps from region failures with zone redundancy and availability zones",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
- "service": "Policy",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
"services": [
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "For Sovereign Landing Zone, process is in place for CRUD of 'Sovereign Control objectives to policy mapping'.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure Landing Zone Review",
- "guid": "29fd366b-a180-452b-9bd7-954b7700c667",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
"services": [
- "TrafficManager",
- "Monitor",
- "Cost"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Optimize your cloud investment",
- "text": "Configure 'Actual' and 'Forecasted' Budget Alerts.",
- "waf": "Cost"
+ "severity": "High",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
"services": [
- "Entra",
- "RBAC",
- "AzurePolicy",
- "Monitor"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
"waf": "Operations"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Monitor",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
"services": [
- "Storage",
- "ARS",
- "AzurePolicy",
- "Monitor"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Select the right Function hosting plan based on your business & SLO requirements",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "service": "VM",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' and tolower(kind) !contains 'workflow' | extend aspResourceId = tostring(properties.serverFarmId), managedEnvId = tostring(properties.managedEnvironmentId), sku = tostring(properties.sku) | extend sku = iif(isnotempty(sku), sku, iif(isnotempty(managedEnvId), 'ContainerApps', '')) | where sku !in ('Dynamic', 'FlexConsumption', '') | extend aspName = tostring(split(aspResourceId, '/').[-1]), managedEnvName = tostring(split(managedEnvId, '/').[-1]) | extend HostingPlan = tostring(iif(isnotempty(aspName), aspName, managedEnvName)) | project functionAppName = name, functionAppId = id, HostingPlan, sku | join kind=inner ( resources | where type =~ 'Microsoft.Web/serverfarms' or type =~ 'Microsoft.App/managedEnvironments' | extend HostingPlan = tostring(name), zoneRedundant = tostring(properties.zoneRedundant), compliant = tobool(properties.zoneRedundant) | project HostingPlan, resourceId = id, zoneRedundant, compliant ) on HostingPlan | project functionAppName, functionAppId, sku, HostingPlan, resourceId, zoneRedundant, compliant",
+ "service": "Azure Functions",
"services": [
- "VM",
- "Monitor",
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Leverage Availability Zones where regionally applicable (not available for Consumption tier)",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
"services": [
- "VM"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Operational compliance",
- "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operations"
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
"services": [
- "VM"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Operational compliance",
- "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operations"
+ "severity": "High",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Network Watcher",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' | where tolower(kind) !contains 'workflow' | where isnotempty(properties.serverFarmId) | extend sku = tostring(properties.sku) | where isnotempty(sku) | where sku !in ('Dynamic', 'FlexConsumption', 'ElasticPremium') | extend alwaysOn = properties.siteConfig.alwaysOn | project functionAppName = name, functionAppId = id, serverFarmId = tostring(properties.serverFarmId), sku, alwaysOn, compliant = tobool(alwaysOn)",
+ "service": "Azure Functions",
"services": [
- "Monitor",
- "NetworkWatcher"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Network Watcher to proactively monitor traffic flows",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Ensure 'Always On' is enabled for all Function Apps running on App Service Plan",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
"services": [
- "Monitor"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use resource locks to prevent accidental deletion of critical shared services.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "text": "Pair a Function App to its own storage account. Try not to re-use storage accounts for Function Apps unless they are tightly coupled",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "WAF checklist",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
"services": [
- "RBAC",
- "AzurePolicy",
- "Monitor"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Monitoring",
- "text": "Use deny policies to supplement Azure role assignments. The combination of deny policies and Azure role assignments ensures the appropriate guardrails are in place to enforce who can deploy and configure resources and what resources they can deploy and configure.",
+ "severity": "Medium",
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Function App code",
"waf": "Operations"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "guid": "43e52f47-22d9-428c-8b1c-d521e54a29a9",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foundations-playbooks-CosmosDB_v1.docx",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Include service and resource health events as part of the overall platform monitoring solution. Tracking service and resource health from the platform perspective is an important component of resource management in Azure.",
- "waf": "Operations"
+ "text": "FTA Resiliency Playbook",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "guid": "de39ac0e-7c28-4dc9-9565-7202bff4564b",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Include alerts and action groups as part of the Azure Service Health platform to ensure that alerts or issues can be actioned",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Leverage Availablity Zones where regionally applicable and ofcourse if the service offers it",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
- "link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "guid": "0d934a34-8b26-43e7-bd60-513a3649906e",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#replica-outages",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Don't send raw log entries back to on-premises monitoring systems. Instead, adopt a principle that data born in Azure stays in Azure. If on-premises SIEM integration is required, then send critical alerts instead of logs.",
- "waf": "Operations"
+ "text": "Run multiple replicas of the database (>1 ) in Prod",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Monitor",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "Multi-region writes capability allows you to take advantage of the provisioned throughput for your databases and containers across the globe",
+ "guid": "bad38ead-53cc-47de-8d8a-aab3571449ab",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#multiple-write-regions",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Azure Monitor Logs for insights and reporting.",
- "waf": "Operations"
+ "text": "Leverage Multi-Region Writes",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
- "link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "Span Cosmos account across two or more regions with multi-region writes",
+ "guid": "8153d89f-89dc-47b3-9be2-b1a27f7b9e91",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
+ "service": "CosmosDB",
"services": [
- "Storage",
- "Monitor"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "When necessary, use shared storage accounts within the landing zone for Azure diagnostic extension log storage.",
- "waf": "Operations"
+ "text": "Distribute your data globally",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
- "service": "Monitor",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "Choose from various consistency levels such as Eventual, Consistent Prefix, Session, Bounded Staleness and strong",
+ "guid": "9f8ea848-25ec-4140-bc32-2758e6ee9ac0",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/consistency-levels",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Azure Monitor alerts for the generation of operational alerts.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Choose from several well-defined consistency models",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "859c3900-4514-41eb-b010-475d695abd74",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "Maintain business continuity during regional outages. Azure Cosmos DB supports service-managed failover during a regional outage. During a regional outage, Azure Cosmos DB continues to maintain its latency, availability, consistency, and throughput SLAs. To help make sure that your entire application is highly available, Azure Cosmos DB offers a manual failover API to simulate a regional outage. By using this API, you can carry out regular business continuity drills.",
+ "guid": "a47e4d1e-bb79-43f9-bf87-69e1032b72fe",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/how-to-manage-database-account#automatic-failover",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF",
+ "CosmosDB"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Ensure that monitoring requirements have been assessed and that appropriate data collection and alerting configurations are applied",
- "waf": "Operations"
+ "text": "Enable Service managed failover",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "Monitor",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "Azure Cosmos DB automatically takes backups of your data at regular intervals. The automatic backups are taken without affecting the performance or availability of the database operations. All the backups are stored separately in a storage service.",
+ "guid": "3499c9c1-133d-42f7-a4b1-a5bd06ff1a90",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/online-backup-and-restore",
+ "service": "CosmosDB",
"services": [
- "Monitor"
+ "WAF",
+ "CosmosDB",
+ "Storage",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
- "waf": "Operations"
+ "text": "Enable Automatic Backups",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "This mode is the default backup mode for all existing accounts. In this mode, backup is taken at a periodic interval and the data is restored by creating a request with the support team. In this mode, you configure a backup interval and retention for your account. The maximum retention period extends to a month. The minimum backup interval can be one hour.",
+ "guid": "a6eb33f6-005c-4d92-9286-7655672d6121",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/periodic-backup-restore-introduction",
+ "service": "CosmosDB",
"services": [
- "Monitor",
- "AzurePolicy"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Establish monitoring for platform components of your landing zone, AMBA is a framework solution that is available and provides an easy way to scale alerting by using Azure Policy",
- "training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
- "waf": "Operations"
- },
- {
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Consider cross-region replication in Azure for BCDR with paired regions",
+ "text": "Perform Periodic Backups",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Backup",
+ "arm-service": "microsoft.documentdb/databaseAccounts",
+ "checklist": "WAF checklist",
+ "description": "Continous 7 day retention and 30 day retention backups. Azure Cosmos DB performs data backup in the background without consuming any extra provisioned throughput (RUs) or affecting the performance and availability of your database. Continuous backups are taken in every region where the account exists.",
+ "guid": "d43918a8-cd28-49be-b6b1-7cb8245461e1",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction",
+ "service": "CosmosDB",
"services": [
+ "WAF",
+ "CosmosDB",
"Backup"
],
"severity": "Medium",
- "subcategory": "Data Protection",
- "text": "When using Azure Backup, consider the different backup types (GRS, ZRS & LRS) as the default setting is GRS",
+ "text": "Continous Backup with point-in-time restore in Azure Cosmos DB",
+ "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "VM",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Event Hub provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
+ "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
+ "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
+ "service": "Event Hubs",
"services": [
- "VM",
- "AzurePolicy"
+ "WAF",
+ "EventHubs"
],
- "severity": "Medium",
- "subcategory": "Operational compliance",
- "text": "Use Azure policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "severity": "Low",
+ "text": "Use customer-managed key option in data at rest encryption when required",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "description": "Azure Policy's guest configuration features can audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
- "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "VM",
- "services": [
- "VM",
- "Monitor",
- "AzurePolicy"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Event Hubs namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Event Hubs namespace to require that clients send and receive data with a newer version of TLS. If an Event Hubs namespace requires a minimum version of TLS, then any requests made with an older version will fail. ",
+ "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
+ "service": "Event Hubs",
+ "services": [
+ "WAF",
+ "EventHubs"
],
"severity": "Medium",
- "subcategory": "Operational compliance",
- "text": "Monitor VM security configuration drift via Azure Policy.",
+ "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
"waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "When you create an Event Hubs namespace, a policy rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has manage permissions for the entire namespace. It�s recommended that you treat this rule like an administrative root account and don�t use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
+ "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
+ "service": "Event Hubs",
"services": [
- "ASR",
- "ACR",
- "VM"
+ "TrafficManager",
+ "AzurePolicy",
+ "EventHubs",
+ "WAF",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Protect and Recover",
- "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
- "waf": "Operations"
+ "text": "Avoid using root account when it is not necessary",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "b2ab13ad-a6e5-45d7-b8a2-adb117d6326a",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Managed identities for Azure resources can authorize access to Event Hubs resources using Azure AD credentials from applications running in Azure Virtual Machines (VMs), Function apps, Virtual Machine Scale Sets, and other services. By using managed identities for Azure resources together with Azure AD authentication, you can avoid storing credentials with your applications that run in the cloud. ",
+ "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
+ "service": "Event Hubs",
"services": [
- "ASR"
+ "Storage",
+ "VM",
+ "EventHubs",
+ "WAF",
+ "Entra",
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Protect and Recover",
- "text": "Ensure to use and test native PaaS service disaster recovery capabilities.",
- "waf": "Operations"
+ "text": "When possible, your application should be using a managed identity to authenticate to Azure Event Hub. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "Backup",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "When creating permissions, provide fine-grained control over a client's access to Azure Event Hub. Permissions in Azure Event Hub can and should be scoped to the individual resource level e.g. consumer group, event hub entity, event hub namespaces, etc.",
+ "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
+ "service": "Event Hubs",
"services": [
- "Backup"
+ "WAF",
+ "RBAC",
+ "EventHubs"
+ ],
+ "severity": "High",
+ "text": "Use least privilege data plane RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Event Hub resource logs include operational logs, virtual network and Kafka logs. Runtime audit logs capture aggregated diagnostic information for all data plane access operations (such as send or receive events) in Event Hubs.",
+ "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
+ "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
+ "service": "Event Hubs",
+ "services": [
+ "WAF",
+ "EventHubs",
+ "Monitor",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Protect and Recover",
- "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
- "waf": "Operations"
+ "text": "Enable logging for security investigation. Use Azure Monitor to captured metrics and logs such as resource logs, runtime audit logs and Kafka logs",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Event Hub by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Event Hub traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
+ "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
+ "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
+ "service": "Event Hubs",
"services": [
- "VM"
+ "WAF",
+ "VNet",
+ "PrivateLink",
+ "EventHubs"
],
- "severity": "High",
- "subcategory": "Fault Tolerance",
- "text": "Leverage Availability Zones for your VMs in regions where they are supported.",
+ "severity": "Medium",
+ "text": "Consider using private endpoints to access Azure Event Hub and disable public network access when applicable.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "With IP firewall, you can restrict public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
+ "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
+ "service": "Event Hubs",
+ "services": [
+ "WAF",
+ "EventHubs"
+ ],
+ "severity": "Medium",
+ "text": "Consider only allowing access to Azure Event Hub namespace from specific IP addresses or ranges",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
+ "service": "Event Hubs",
+ "services": [
+ "WAF"
+ ],
+ "severity": "Medium",
+ "text": "Leverage FTA Resillency HandBook",
"waf": "Reliability"
},
{
- "ammp": true,
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": " This will be turned on automatically for a new EH namespace created from the portal with Premium, Dedicated, or Standard SKUs in a zone-enabled region. Both the EH metadata and the event data itself are replicated across zones",
+ "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
+ "service": "Event Hubs",
"services": [
- "VM"
+ "WAF",
+ "ACR",
+ "EventHubs"
],
"severity": "High",
- "subcategory": "Fault Tolerance",
- "text": "Avoid running a production workload on a single VM.",
+ "text": "Leverage Availability Zones if regionally applicable",
"waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
+ "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
+ "service": "Event Hubs",
"services": [
- "ACR",
- "LoadBalancer",
- "AppGW"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Fault Tolerance",
- "text": "Azure Load Balancer and Application Gateway distribute incoming network traffic across multiple resources.",
+ "text": "Use the Premium or Dedicated SKUs for predicable performance",
"waf": "Reliability"
},
{
- "ammp": true,
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "WAF",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "The built-in geo-disaster recovery feature, when enabled, ensures that the entire configuration of anamespace (Event Hubs, Consumer Groups and settings) is continuously replicated from a primary namespace to a secondary namespace, and it allows a once-only failover move from the primary to the secondary at any time. Active/Passive feature is designed to make it easier to recover from and abandon a failed Azure region without having to change application configurations",
+ "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
+ "service": "Event Hubs",
"services": [
- "FrontDoor",
"WAF",
- "AppGW"
+ "ASR",
+ "EventHubs"
],
"severity": "High",
- "subcategory": "App delivery",
- "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
- "waf": "Operations"
+ "text": "Plan for Geo Disaster Recovery using Active Passive configuration",
+ "waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure Landing Zone Review",
- "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "WAF",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Should be used for DR configurations where an outage or loss of event data in the downed region cannot be tolerated. For these cases, follow the replication guidance and do not use the built-in geo-disaster recovery capability (active/passive). With Active/Active, Maintain multiple Event Hubs in different regions and namespaces, and events will be replicated between the hubs",
+ "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
+ "service": "Event Hubs",
"services": [
- "AppGW",
- "FrontDoor",
"WAF",
- "Sentinel"
+ "ASR",
+ "EventHubs"
],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
- "waf": "Operations"
+ "text": "For Business Critical Applications, use Active Active configuration",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "b86ad884-08e3-4727-94b8-75ba18f20459",
- "link": "https://learn.microsoft.com/security/benchmark/azure/security-control-incident-response",
- "services": [],
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "WAF checklist",
+ "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
+ "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
+ "service": "Event Hubs",
+ "services": [
+ "WAF",
+ "EventHubs"
+ ],
"severity": "Medium",
- "subcategory": "Access control",
- "text": "Determine the incident response plan for Azure services before allowing it into production.",
- "waf": "Security"
+ "text": "Design Resilient Event Hubs",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "01365d38-e43f-49cc-ad86-8266abca264f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
- "services": [],
- "severity": "Medium",
- "subcategory": "Access control",
- "text": "Implement a zero-trust approach for access to the Azure platform, where appropriate.",
- "waf": "Security"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "AKS"
+ ],
+ "severity": "Low",
+ "text": "If required for AKS Windows workloads HostProcess containers can be used",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "5017f154-e3ab-4369-9829-e7e316183687",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
"services": [
- "AKV"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Encryption and keys",
- "text": "Use Azure Key Vault to store your secrets and credentials",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use KEDA if running event-driven workloads",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "guid": "a0477a20-9945-4bda-9333-4f2491163418",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
"services": [
- "AKV"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use Dapr to ease microservice development",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
"services": [
- "AKV",
- "AzurePolicy"
+ "WAF",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Use the SLA-backed AKS offering",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"services": [
- "Entra",
- "RBAC",
- "AKV"
+ "WAF",
+ "Cost"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use Disruption Budgets in your pod and deployment definitions",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
"services": [
- "AKV"
+ "WAF",
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
- "waf": "Security"
+ "severity": "High",
+ "text": "If using a private registry, configure region replication to store images in multiple regions",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "913156a1-2476-4e49-b541-acdce979377b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
"services": [
- "AKV"
+ "WAF",
+ "Cost"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Establish an automated process for key and certificate rotation.",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use an external application such as kubecost to allocate costs to different users",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
"services": [
- "VNet",
- "AKV",
- "PrivateLink"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use scale down mode to delete/deallocate nodes",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
"services": [
- "Entra",
- "Monitor",
- "AKV"
+ "WAF",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
- "waf": "Security"
+ "text": "When required use multi-instance partitioning GPU on AKS Clusters",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
"services": [
- "AKV",
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
- "waf": "Security"
+ "severity": "Low",
+ "text": "If running a Dev/Test cluster use NodePool Start/Stop",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "16183687-a047-47a2-8994-5bda43334f24",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
"services": [
- "AKV"
+ "WAF",
+ "AKS",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
+ "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
"services": [
- "AKV"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "Use an Azure Key Vault per application per environment per region.",
+ "text": "Separate applications from the control plane with user/system node pools",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
"services": [
- "ASR",
- "ACR",
- "AKV"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
+ "severity": "Low",
+ "text": "Add taint to your system nodepool to make it dedicated",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
"services": [
- "AKV"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Encryption and keys",
- "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
+ "text": "Use a private registry for your images, such as ACR",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
- "service": "Entra",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "WAF checklist",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
"services": [
- "Entra"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
+ "text": "Scan your images for vulnerabilities",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "4e3ab369-3829-4e7e-9161-83687a0477a2",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
"services": [
- "Storage",
- "ARS",
- "Monitor"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Export Azure activity logs to Azure Monitor Logs for long-term data retention. Export to Azure Storage for long-term storage beyond two years, if necessary.",
+ "severity": "High",
+ "text": "Define app separation requirements (namespace/nodepool/cluster)",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "09945bda-4333-44f2-9911-634182ba5275",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
- "service": "Defender",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
"services": [
- "Subscriptions",
- "Defender"
+ "WAF",
+ "AKV"
],
- "severity": "High",
- "subcategory": "Operations",
- "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
+ "severity": "Medium",
+ "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
- "service": "Defender",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
"services": [
- "Subscriptions",
- "Defender"
+ "WAF"
],
"severity": "High",
- "subcategory": "Operations",
- "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
+ "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
- "service": "Defender",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
"services": [
- "Subscriptions",
- "Defender"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Operations",
- "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
- "waf": "Security"
- },
- {
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
- "service": "VM",
- "services": [],
- "severity": "High",
- "subcategory": "Operations",
- "text": "Enable Endpoint Protection on IaaS Servers.",
+ "severity": "Medium",
+ "text": "If required add Key Management Service etcd encryption",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
- "link": "https://learn.microsoft.com/azure/security-center/",
- "service": "VM",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
"services": [
- "Monitor",
- "Defender"
+ "WAF",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
+ "severity": "Low",
+ "text": "If required consider using Confidential Compute for AKS",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
"services": [
- "Entra",
- "Monitor"
+ "WAF",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
+ "text": "Consider using Defender for Containers",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
- "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
"services": [
+ "WAF",
"Entra"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "For Sovereign Landing Zone, transparancy logs is enabled on the Entra ID tenant.",
+ "severity": "High",
+ "text": "Use managed identities instead of Service Principals",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
"services": [
+ "WAF",
"Entra"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "For Sovereign Landing Zone, customer Lockbox is enabled on the Entra ID tenant.",
+ "text": "Integrate authentication with AAD (using the managed integration)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
"services": [
- "Monitor"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Operations",
- "text": "Use an Azure Event Grid-based solution for log-oriented, real-time alerts",
+ "severity": "Medium",
+ "text": "Limit access to admin kubeconfig (get-credentials --admin)",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Storage",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
"services": [
- "Storage"
+ "WAF",
+ "Entra",
+ "RBAC"
],
- "severity": "High",
- "subcategory": "Overview",
- "text": "Secure transfer to storage accounts should be enabled",
+ "severity": "Medium",
+ "text": "Integrate authorization with AAD RBAC",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
- "service": "Storage",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
"services": [
- "Storage"
+ "WAF",
+ "AKS",
+ "RBAC"
],
"severity": "High",
- "subcategory": "Overview",
- "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
+ "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "6f704104-85c1-441f-96d3-c9819911645e",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
+ "service": "AKS",
"services": [
+ "WAF",
"Entra"
],
- "severity": "High",
- "subcategory": "Secure privileged access",
- "text": "Separate privileged admin accounts for Azure administrative tasks.",
+ "severity": "Medium",
+ "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "9a19bf39-c95d-444c-9c89-19ca1f6d5215",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "AKS"
+ ],
"severity": "Medium",
- "subcategory": "Service enablement framework",
- "text": "Plan how new azure services will be implemented",
+ "text": "For AKS non-interactive logins use kubelogin (preview)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Landing Zone Review",
- "guid": "ae514b93-3d45-485e-8112-9bd7ba012f7b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "AKS"
+ ],
"severity": "Medium",
- "subcategory": "Service enablement framework",
- "text": "Plan how service request will be fulfilled for Azure services",
+ "text": "Disable AKS local accounts",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
- "services": [],
- "severity": "High",
- "subcategory": "DevOps Team Topologies",
- "text": "Ensure you have a cross functional DevOps Platform Team to build, manage and maintain your Azure Landing Zone architecture.",
- "waf": "Operations"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "services": [
+ "WAF"
+ ],
+ "severity": "Low",
+ "text": "Configure if required Just-in-time cluster access",
+ "waf": "Security"
},
{
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "634146bf-7085-4419-a7b5-f96d2726f6da",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "AKS",
+ "Entra"
+ ],
"severity": "Low",
- "subcategory": "DevOps Team Topologies",
- "text": "Aim to define functions for Azure Landing Zone Platform team.",
- "waf": "Operations"
+ "text": "Configure if required AAD conditional access for AKS",
+ "waf": "Security"
},
{
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "a9e65070-c59e-4112-8bf6-c11364d4a2a5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "service": "AKS",
"services": [
- "RBAC"
+ "WAF",
+ "AKS"
],
"severity": "Low",
- "subcategory": "DevOps Team Topologies",
- "text": "Aim to define functions for application workload teams to be self-sufficient and not require DevOps Platform Team support. Achieve this through the use of custom RBAC role.",
- "waf": "Operations"
+ "text": "If required for Windows AKS workloads configure gMSA ",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "165eb5e9-b434-448a-9e24-178632186212",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "services": [],
- "severity": "High",
- "subcategory": "DevOps Team Topologies",
- "text": "Use a CI/CD pipeline to deploy IaC artifacts and ensure the quality of your deployment and Azure environments.",
- "waf": "Operations"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "Entra"
+ ],
+ "severity": "Medium",
+ "text": "For finer control consider using a managed Kubelet Identity",
+ "waf": "Security"
},
{
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "0cadb8c7-8fa5-4fbf-8f39-d1fadb3b0460",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "ACR",
+ "AppGW"
+ ],
"severity": "Medium",
- "subcategory": "DevOps Team Topologies",
- "text": "Include unit tests for IaC and application code as part of your build process.",
- "waf": "Operations"
+ "text": "If using AGIC, do not share an AppGW across clusters",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "service": "Key Vault",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "service": "AKS",
"services": [
- "VM",
- "AKV"
+ "WAF",
+ "AKS"
],
"severity": "High",
- "subcategory": "DevOps Team Topologies",
- "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
- "waf": "Operations"
+ "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "a52e0c98-76b9-4a09-a1c9-6b2babf22ac4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "service": "AKS",
"services": [
- "Subscriptions"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "DevOps Team Topologies",
- "text": "Implement automation for new landing zone for applications and workloads through subscription vending",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "For Windows workloads use Accelerated Networking",
+ "waf": "Performance"
},
{
- "ammp": true,
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "LoadBalancer"
+ ],
"severity": "High",
- "subcategory": "Development Lifecycle",
- "text": "Ensure a version control system is used for source code of applications and IaC developed. Microsoft recommends Git.",
- "waf": "Operations"
- },
- {
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "c7245dd4-af8a-403a-8bb7-890c1a7cfa9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
- "services": [],
- "severity": "Low",
- "subcategory": "Development Lifecycle",
- "text": "Follow a branching strategy to allow teams to collaborate better and efficiently manage version control of IaC and application Code. Review options such as Github Flow.",
- "waf": "Operations"
+ "text": "Use the standard ALB (as opposed to the basic one)",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "12aeea20-9165-4b3e-bdf2-6795fcd3cdbe",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Development Lifecycle",
- "text": "Adopt a pull request strategy to help keep control of code changes merged into branches.",
- "waf": "Operations"
+ "text": "If using Azure CNI, consider using different Subnets for NodePools",
+ "waf": "Security"
},
{
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "2676ae46-65ca-444e-8695-fdddeace4cb1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "PrivateLink",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Development Lifecycle",
- "text": "Establish a process for using code to implement quick fixes. Always register quick fixes in your team's backlog so each fix can be reworked at a later point, and you can limit technical debt.",
- "waf": "Operations"
+ "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "services": [
+ "WAF"
+ ],
"severity": "High",
- "subcategory": "Development Strategy",
- "text": "Leverage Declarative Infrastructure as Code Tools such as Azure Bicep, ARM Templates or Terraform to build and maintain your Azure Landing Zone architecture. Both from a Platform and Application workload perspective.",
- "waf": "Operations"
+ "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "category": "Platform Automation and DevOps",
- "checklist": "Azure Landing Zone Review",
- "guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure",
- "services": [],
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "services": [
+ "WAF",
+ "VNet"
+ ],
"severity": "High",
- "subcategory": "Security",
- "text": "Integrate security into the already combined process of development and operations in DevOps to mitigate risks in the innovation process.",
- "waf": "Operations"
+ "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "Recovery Services Vault Checklist",
- "guid": "cb7da8cf-aa62-4a15-a495-6da97dc3a242",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-plan-capacity-vmware",
- "services": [],
- "severity": "High",
- "subcategory": "Replication",
- "text": "Capacity planning is required to make sure you have sufficient bandwidth for replication and an estimated number of CPU cores & disk types that will be needed in Azure for failover",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Recovery Services Vault Checklist",
- "guid": "67b23587-05a1-4652-aded-fa8a488cdec4",
- "link": "https://learn.microsoft.com/azure/site-recovery/azure-to-azure-how-to-enable-policy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "ASR",
- "VM",
- "AzurePolicy"
+ "WAF"
],
"severity": "High",
- "subcategory": "Replication",
- "text": "Use Azure Policy to ensure that all critical Azure VMs are protected with ASR",
- "waf": "Reliability"
+ "text": "If using Azure CNI, check the maximum pods/node (default 30)",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "Recovery Services Vault Checklist",
- "guid": "862bc3bc-14be-4b7f-96e8-d9b3bec228e7",
- "link": "https://learn.microsoft.com/azure/site-recovery/recovery-plan-overview",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "service": "AKS",
"services": [
- "VM"
+ "WAF",
+ "AKS",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Replication",
- "text": "Define recovery plans to automate the failover sequence for VMs. You can also include automation scripts to reduce manual steps and improve recovery time",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Recovery Services Vault Checklist",
- "guid": "437b1736-db55-4f67-a613-334bd09dc234",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-how-to-manage?tabs=recovery-services-vault",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Enable and LOCK immutability for vaults. This ensures recovery points cannot be deleted before their intended expiry",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Recovery Services Vault Checklist",
- "guid": "19db6128-1265-404b-a47a-493a08042729",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Enable 'Always-on soft delete' for vaults protecting critical workloads",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Recovery Services Vault Checklist",
- "guid": "4798b158-8b31-4aa5-9ceb-54445135a227",
- "link": "https://learn.microsoft.com/azure/backup/backup-create-recovery-services-vault#set-storage-redundancy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "Storage"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Redudancy",
- "text": "When creating Recovery Service Vaults choose the best storage redundancy option for your requirements. Vaults support local, geo and zone redundancy but this setting cannot be changed once the vault is protecting one or more resources",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "Device Update Review",
- "guid": "0e03f5ee-4648-423c-bb86-7239480f9171",
- "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
- "service": "Device Update for IoT Hub",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled).",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "Device Update Review",
- "guid": "c0c273bd-00ad-419a-9f2f-fc72fb181e55",
- "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
- "service": "Device Update for IoT Hub",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the DPS instances from an affected region to the corresponding geo-paired region.",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "Device Update Review",
- "guid": "3af8abe6-07eb-4287-b393-6c4abe3702eb",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Device Update for IoT Hub",
- "services": [],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Device Update Review",
- "guid": "bd91245c-fe32-4e98-a085-794a40f4bfe1",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Device Update for IoT Hub",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
+ "service": "AKS",
"services": [
- "AppSvc"
+ "WAF"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "If required add your own CNI plugin",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD control plane does not offer a financially backed service level agreement. We strive to attain at least 99.9% availability for the Azure Virtual Desktop service URLs. The availability of the session host virtual machines in your subscription is covered by the Virtual Machines SLA. Dependent resources/services and infrastructure availability must be also considered to properly satisfy global high-availability requirements.",
- "guid": "56c57ba5-9119-4bf8-b8f5-c586c7d9cdc1",
- "link": "https://azure.microsoft.com/support/legal/sla/virtual-desktop/v1_0/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "service": "AKS",
"services": [
- "ASR",
- "Subscriptions",
- "VM",
- "AVD"
+ "WAF",
+ "AKS"
],
- "severity": "High",
- "subcategory": "Compute",
- "text": "Determine the expected High Availability SLA for applications/desktops published through AVD",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "If required configure Public IP per node in AKS",
+ "waf": "Performance"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "'Active-Active' model can be achieved with multiple host pools in different regions. A single Host Pool with VMs from different regions is not recommended. If multiple pools for same users will be used, the problem of how to synchronize/replicate user profiles must be solved. FSLogix Cloud Cache could be used, but need to be carefully reviewed and planned, or customers can decide to do not synchronize/replicate at all. 'Active-Passive' can be achieved using Azure Site Recovery (ASR) or on-demand Pool deployment with automated mechanism. For a detailed discussion on multi-region BCDR, please read the companion article in the 'More Info' column and this FSLogix related page: https://learn.microsoft.com/fslogix/concepts-container-recovery-business-continuity.",
- "guid": "6acc076e-f9b1-441a-a989-579e76b897e7",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/azure-virtual-desktop-multi-region-bcdr",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "service": "AKS",
"services": [
- "ASR",
- "Storage",
- "VM",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Compute",
- "text": "Assess Geo Disaster Recovery requirements for AVD Host Pools",
+ "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Before approaching Azure Virtual Desktop BCDR planning and design, it is important to initially consider which applications consumed through AVD are critical. You may want to separate them from non-critical apps and use a separate Host Pool with a different disaster recovery approach and capabilities.",
- "guid": "10a7da7b-e996-46e1-9d3c-4ada97cc3d13",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "service": "AKS",
"services": [
- "ASR",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Compute",
- "text": "Separate critical applications in different AVD Host Pools",
+ "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Each Host Pool can be deployed using Availability Zones (AZ) or Availability Set (AS). To maximize resiliency, usage of AZ is recommended: at Host Pool creation time you can decide to spread Host Pool Session Hosts across all available AZ. Usage of AS will not protect from single datacenter failure, then should be used only in regions where AZ are not available. More details on AZ and AVD in the companion article. For a comparison between AZ and AS you can read here: https://learn.microsoft.com/azure/virtual-machines/availability.",
- "guid": "25ab225c-6f4e-4168-9fdd-dea8a4b7cdeb",
- "link": "https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/announcing-general-availability-of-support-for-azure/ba-p/3636262",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "service": "AKS",
"services": [
- "ASR",
- "ACR",
- "AVD"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Compute",
- "text": "Plan the best resiliency option for AVD Host Pool deployment",
+ "severity": "Medium",
+ "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure Backup can be used to protect Host Pool VMs. For Pooled Pools, this is not necessary since should be stateless. Instead, this option can be considered for Personal Host Pools.",
- "guid": "4c61fc3f-c14e-4ea6-b69e-8d9a3eec218e",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "service": "AKS",
"services": [
- "ASR",
- "VM",
- "Backup",
- "AVD"
+ "WAF",
+ "NVA"
],
- "severity": "Medium",
- "subcategory": "Compute",
- "text": "Assess the requirement to backup AVD Session Host VMs",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Even for Personal Pools, usage of Availability Zones, when available, is recommended. Three possible in-region DR strategies are possible, it is recommended to select the best one based on cost, RTO/RPO, and if it is really necessary to save the entire VM OS disk: (1) create each session host in a specific zone (AZ) and then use Azure Site Recovery (ASR) to replicate to a different zone. (2) Use Azure Backup to backup and restore the specific session host in a different AZ. (3) Create a new session host in a different AZ and rely on FSLogix and/or OneDrive to make data and settings available on the new machine. All options require administrator intervention for DR and direct user assignment at Host Pool level, then must be planned and configured in advance.",
- "guid": "5da58639-ca3a-4961-890b-29663c5e10d",
- "link": "https://learn.microsoft.com/azure/site-recovery/azure-to-azure-how-to-enable-zone-to-zone-disaster-recovery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "service": "AKS",
"services": [
- "Backup",
- "Cost",
- "ASR",
- "VM",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Compute",
- "text": "Prepare a local DR strategy for Personal Host Pool Session Hosts",
- "waf": "Reliability"
+ "text": "If using a public API endpoint, restrict the IP addresses that can access it",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If custom images are used to deploy AVD Host Pool VMs, it is important to ensure those artifacts are available in all regions where AVD is deployed. Azure Compute Gallery service can be used to replicate images across all regions where a Host Pool is deployed, with redundant storage and in multiple copies. Please be aware that the Azure Compute Gallery service isn't a global resource. For disaster recovery scenarios, the best practice is to have at least two galleries, in different regions.",
- "guid": "dd2e0d5d-771d-441e-9610-cc57b4a4a141",
- "link": "https://learn.microsoft.com/azure/virtual-machines/azure-compute-gallery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "service": "AKS",
"services": [
- "Storage",
- "ASR",
- "ACR",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Dependencies",
- "text": "Plan for Golden Image cross-region availability",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use private clusters if your requirements mandate it",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If users of the AVD infrastructure need on-premises resource access, high availability of network infrastructure required to connect is also critical and should be considered. Resiliency of authentication infrastructure needs to be assessed and evaluated. BCDR aspects for dependent applications and other resources need to be considered to ensure availability in the secondary DR location.",
- "guid": "fd339489-8c12-488b-9c6a-57cfb644451e",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"services": [
- "ASR",
- "AVD"
+ "WAF",
+ "AKS",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Dependencies",
- "text": "Assess Infrastructure & Application dependencies ",
- "waf": "Reliability"
+ "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Not all data inside FSLogix user profiles may deserve protection from disaster. Additionally, if external storage is used, for example OneDrive or File Servers/Shares, what is remaining in the FSLogix profile is minimal and could be lost in some extreme circumstances. In other cases, data inside the profile can be rebuilt from other storages (for example Outlook Inbox in cached mode).",
- "guid": "687ab077-adb5-49e5-a960-3334fdf8cc23",
- "link": "https://docs.microsoft.com/fslogix/manage-profile-content-cncpt",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"services": [
- "Storage",
- "ASR",
- "AVD"
+ "WAF",
+ "AKS",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Assess which data need to be protected in the Profile and Office Containers",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Preventing data loss for critical user data is important, first step is to assess which data need to be saved and protected. If using OneDrive or other external storage, saving user Profile and/or Office Containers data maybe not necessary. Appropriate mechanism must be considered to provide protection for critical user data. Azure Backup service can be used to protect Profile and Office Containers data when stored on Azure Files Standard and Premium tiers. Azure NetApp Files Snapshots and Policies can be used for Azure NetApp Files (all tiers).",
- "guid": "fc4972cc-3cd2-45bf-a707-6e9eab4bed32",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"services": [
- "Storage",
- "Backup",
- "ASR",
- "AzurePolicy",
- "AVD"
+ "WAF",
+ "AKS",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Build a backup protection strategy for Profile and Office Containers",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use Kubernetes network policies to increase intra-cluster security",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "In AVD, multiple replication mechanisms and strategies can be used for user data residing in FSLogix containers: [Profile Pattern #1]: Native Azure storage replication mechanisms, for example Azure Files Standard GRS replication, Azure NetApp Files Cross Region Replication. Use Zone Replicated Storage (ZRS) or Geo replicated storage (GRS) for Azure Files is recommended. LRS with local-only resiliency can be used if no zone/region protection is required. NOTE: Azure Files Share Standard is LRS/ZRS/GRS, but with 100TB large support enabled only LRS/ZRS are supported. [Profile Pattern #2]: FSLogix Cloud Cache is built in automatic mechanism to replicate containers between different (up to 4) storage accounts. Cloud Cache should be used only when:(1) User Profile or Office containers data availability required high-availability SLA is critical and need to be resilient to region failure. (2) Selected storage option is not able to satisfy BCDR requirements. For example, with Azure File Share Premium tier, or Azure File Share Standard with Large File Support enabled, GRS is not available. (3) When replication between disparate storage is required. [Profile Pattern #3]: Only set up geo disaster recovery for application data and not for user data/profile containers: store important application data in separate storages, like OneDrive or other external storage with its own built-in DR mechanism.",
- "guid": "9f7547c1-746d-4c56-868a-714435bd09dd",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"services": [
- "Storage",
- "ASR",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Assess Profile Container storage replication requirements and resiliency for BCDR purpose",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use a WAF for web workloads (UIs or APIs)",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "For local disaster recovery, Azure Backup for Azure Files can be used. For cross-region geo disaster recovery: GRS for Azure Files is only available with standard SKU and no large share support, then not suitable in most customer scenarios. If geo-replication is required with Azure File Share Premium, replication with FSLogix Cloud Cache can be evaluated, or 'in-region' Availability Zone (AZ) only resiliency should be considered.",
- "guid": "3d4f3537-c134-46dc-9602-7a71efe1bd05",
- "link": "https://docs.microsoft.com/azure/backup/backup-afs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "service": "AKS",
"services": [
- "Storage",
- "ASR",
- "Backup",
- "AVD"
+ "WAF",
+ "DDoS",
+ "AKS",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Review Azure Files disaster recovery strategy",
- "waf": "Reliability"
+ "text": "Use DDoS Standard in the AKS Virtual Network",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Zone Redundant Storage will maximize in-region resiliency for the user profile data. ZRS is supported for premium file shares through the 'FileStorage' storage account kind. ZRS is supported in standard general-purpose v2 storage accounts. Usage of zone redundant storage must be paired with zone redundant deployment of Session Hosts in each Host Pool. ",
- "guid": "10d4e875-d502-4142-a795-f2b6eff34f88",
- "link": "https://learn.microsoft.com/azure/storage/files/files-redundancy#zone-redundant-storage",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "service": "AKS",
"services": [
- "Storage",
- "ASR",
- "AVD"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "Use Zone Redundant Storage (ZRS) for Azure Files to maximize resiliency",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "If required add company HTTP Proxy",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "Azure Virtual Desktop Review",
- "description": "For local disaster recovery, Azure NetApp Files (ANF) native backup is available. ANF is essentially locally redundant, then for cross-region geo disaster recovery it is necessary to use an additional mechanism that is Cross-Region Replication (CRR) https://learn.microsoft.com/azure/azure-netapp-files/cross-region-replication-create-peering. Currently, ANF does not provide replication nor redundancy across different Availability Zones (AZ), only the possibility to select in which single AZ to place the ANF volume: https://learn.microsoft.com/azure/azure-netapp-files/manage-availability-zone-volume-placement.",
- "guid": "23429db7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/cross-region-replication-create-peering",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "service": "AKS",
"services": [
- "Storage",
- "Backup",
- "ASR",
- "ACR",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Review Azure NetApp Files disaster recovery strategy",
- "waf": "Reliability"
+ "text": "Consider using a service mesh for advanced microservice communication management",
+ "waf": "Security"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Applications can be preinstalled in the golden image/s, can be attached using MSIX & AppAttach feature or distributed to the session hosts after host pool deployment using traditional software distribution methods.",
- "guid": "86ba2802-1459-4014-95d3-8e5309ccbd97",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-golden-image",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "Monitor"
],
"severity": "High",
- "subcategory": "Golden Images",
- "text": "Determine how applications will be deployed in AVD Host Pools",
+ "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
"waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Multiple golden images can be required to support different OS versions and/or settings, different groups of applications that must be separated and cannot be included in a single image.",
- "guid": "9266bcca-274f-4aa1-abf3-9d95d44c7c89",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-golden-image",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Golden Images",
- "text": "Estimate the number of golden images that will be required",
+ "severity": "Low",
+ "text": "Check regularly Azure Advisor for recommendations on your cluster",
"waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Determine which Guest OS will be used to deploy each Host Pool: Windows 10 vs. Windows Server, Marketplace vs. Custom images",
- "guid": "19ca1f6d-5315-4ae5-84ba-34d4585e2213",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#operating-systems-and-licenses",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Golden Images",
- "text": "Determine which OS image/s you will use for Host Pool deployment",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Enable AKS auto-certificate rotation",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure VM custom images can be created and stored in different ways: in an Azure Compute Gallery, as a managed image object or as a managed disk in the storage. The recommended way is to use Azure Compute Gallery.",
- "guid": "5a2adb2c-3e23-426b-b225-ca44e1696fdd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/shared-image-galleries",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "service": "AKS",
"services": [
- "Storage",
- "VM",
- "AVD"
+ "WAF",
+ "AKS"
],
- "severity": "Low",
- "subcategory": "Golden Images",
- "text": "Select the proper store for custom images",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If custom images will be used, plan for an automated build process. If no pre-existing software factory exists, consider using Custom Image Templates and/or Azure Image Builder to automate the build process.",
- "guid": "9bd7bb01-2f7b-495e-86e1-54e2aa359282",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/create-custom-image-templates",
- "services": [
- "AVD"
- ],
- "severity": "Low",
- "subcategory": "Golden Images",
- "text": "Design your build process for custom images",
- "waf": "Operations"
- },
- {
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "There are some known best practices and recommendations for the golden image customization, be sure to check the referenced article.",
- "guid": "deace4cb-1dec-44c6-90c3-fc14eebb36a3",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-golden-image",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Golden Images",
- "text": "If custom image will be used, check recommended best practices for AVD on how to build custom image",
+ "severity": "High",
+ "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
"waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "FSLogix stack installed in AVD session hosts does not provide auto-update capability. For this reason, it is recommended to download the latest version of FSLogix and include in the golden image update process.",
- "guid": "ed5c9027-dd1a-4343-86ca-52b199223186",
- "link": "https://learn.microsoft.com/fslogix/how-to-install-fslogix",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
"severity": "High",
- "subcategory": "Golden Images",
- "text": "Include the latest version of FSLogix in the golden image update process",
- "waf": "Reliability"
+ "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "This tool-set has been created to automatically apply setting referenced in white paper 'Optimizing Windows 10, version 2004 for a Virtual Desktop Infrastructure (VDI) role': https://docs.microsoft.com/windows-server/remote/remote-desktop-services/rds-vdi-recommendations-2004. Usage of the tool and/or optimizations mentioned in the white-paper should be considered. ",
- "guid": "829e3fec-2183-4687-a017-7a2b5945bda4",
- "link": "https://github.com/The-Virtual-Desktop-Team/Virtual-Desktop-Optimization-Tool",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "service": "AKS",
"services": [
- "RBAC",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Golden Images",
- "text": "Evaluate the usage of Virtual-Desktop-Optimization-Tool",
- "waf": "Performance"
+ "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If OneDrive is used and included in a golden image, be sure to follow the configuration procedure reported in the companion article in the 'More Info' section. Not in scope in this AVD checklist, but OneDrive optimizations like 'Known Folder Redirection' and 'Files On-Demand' should be evaluated used to reduce the space used in FSLogix profiles and provide a better user experience. OneDrive today is not supported for Remote Apps.",
- "guid": "e3d3e084-4276-4d4b-bc01-5bcf219e4a1e",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/install-office-on-wvd-master-image#install-onedrive-in-per-machine-mode",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "service": "AKS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Low",
- "subcategory": "Golden Images",
- "text": "Determine if Microsoft OneDrive will be part of AVD deployment",
+ "text": "Consider using AKS command invoke on private clusters",
"waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Be sure to review the requirements and configuration procedure contained in the companion article in the 'More Info' column. Since Teams automatic updates will be disabled, it is recommended to check and include Teams latest version in the golden image update process.",
- "guid": "b5887953-5d22-4788-9d30-b66c67be5951",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/teams-on-AVD",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Golden Images",
- "text": "Determine if Microsoft Teams will be part of AVD deployment",
- "waf": "Performance"
+ "text": "For planned events consider using Node Auto Drain",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD can support users with different language and localization requirements in the same host pool. This can be done customizing golden images to ensure users can select whichever language they need. The procedure to configure additional language packs in Windows 11 is documented in the reference article.",
- "guid": "7c336f3b-822a-498e-8cd1-667d1150df4a",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/windows-11-language-packs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Golden Images",
- "text": "Assess the requirement to support multiple languages",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "It is highly recommended to use separate storage accounts/shares to store MSIX packages. If necessary, storage can scale out independently and not being impacted by profile I/O activities. Azure offers multiple storage options that can be used for MISX app attach. We recommend using Azure Files or Azure NetApp Files as those options offer the best value between cost and management overhead. ",
- "guid": "90083845-c587-4cb3-a1ec-16a1d076ef9f",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-file-share",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
"services": [
- "Storage",
- "Cost",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "MSIX & AppAttach",
- "text": "Do not use the same storage account/share as FSLogix profiles",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Use custom Node RG (aka 'Infra RG') name",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "In the referenced article, we reported few but important performance considerations for MSIX usage in AVD context, be sure to carefully review.",
- "guid": "241addce-5793-477b-adb3-751ab2ac1fad",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-file-share",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "MSIX & AppAttach",
- "text": "Review performance considerations for MSIX",
- "waf": "Performance"
+ "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "MSIX app attach requires read-only permissions to access the file share. If you're storing your MSIX applications in Azure Files, then for your session hosts, you'll need to assign all session host VMs both storage account role-based access control (RBAC) and file share New Technology File System (NTFS) permissions on the share.",
- "guid": "66e15d4d-5a2a-4db2-a3e2-326bf225ca41",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-file-share",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "service": "AKS",
"services": [
- "Storage",
- "RBAC",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "MSIX & AppAttach",
- "text": "Check proper session host permissions for MSIX share",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Taint Windows nodes",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "3rd-party software vendor must provide a MSIX package, it is not recommended for customer to attempt the conversion procedure without proper support from the application owner.",
- "guid": "bd362caa-ab79-4b19-adab-81932c9fc9d1",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-faq",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "MSIX & AppAttach",
- "text": "MSIX packages for 3rd-party applications",
- "waf": "Cost"
+ "text": "Keep windows containers patch level in sync with host patch level",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "MSIX app attach doesn't support auto-update for MSIX applications, so they should be disabled.",
- "guid": "bb88037f-5e6b-4fbb-aed5-03547cc447e8",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-faq",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "description": "Via Diagnostic Settings at the cluster level",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "Monitor"
],
"severity": "Low",
- "subcategory": "MSIX & AppAttach",
- "text": "Disable auto-update for MSIX packages",
+ "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
"waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "In order to leverage MSIX & App Attach, guest OS image for AVD Host pool must be Windows 10/11 Enterprise or Windows 10/11 Enterprise Multi-session, version 2004 or later.",
- "guid": "26128a71-f0f1-4cac-9d9e-f1d5e832e42e",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-faq",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "MSIX & AppAttach",
- "text": "Review operating systems support",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "If required use nodePool snapshots",
+ "waf": "Cost"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Once selected the VM SKU that will be used for Host Pool deployment, it is recommended to use Gen2 type of the SKU for higher security and improved capabilities.",
- "guid": "e4633254-3185-40a1-b120-bd563a1c8e9d",
- "link": "https://docs.microsoft.com/azure/virtual-machines/generation-2",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
"services": [
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Session Host",
- "text": "Evaluate the usage of Gen2 VM for Host Pool deployment",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Consider spot node pools for non time-sensitive workloads",
+ "waf": "Operations"
},
{
- "category": "Compute",
- "checklist": "Azure Virtual Desktop Review",
- "description": "MMR redirects the media content from Session Host to your local machine for faster processing and rendering. It only works when you play media content on Microsoft Edge or Google Chrome. See linked URL for more details.",
- "guid": "adecb27f-dc40-40f5-aca2-0090f633b1c9",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/multimedia-redirection",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Low",
- "subcategory": "Session Host",
- "text": "Consider using MMR (MultiMedia Redirection) to get better video performance on browser",
- "waf": "Performance"
+ "text": "Consider AKS virtual node for quick bursting",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "A host pool is a collection of Azure virtual machines that register to Azure Virtual Desktop as session hosts. A host pool can be one of two types: Personal and Pooled. Which type to use, and how many, is a key design decision that must be documented and validated. See companion article in 'More Info' column for more details.",
- "guid": "8468c55a-775c-46ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/terminology#host-pools",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"services": [
- "VM",
- "AVD"
+ "WAF",
+ "Monitor"
],
"severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Determine the Host Pool type to use",
- "waf": "Cost"
+ "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Use your design criteria to determine the number of Host Pools to deploy. This will be based on factors such as different OS images, multi-region support, guest VM hardware differences (such as GPU support or no), different user expectations and uptime requirements (examples might be 'Executives', 'Office Workers', 'Developers', etc.), and Host Pool RDP settings (such as drive redirection support). These will determine the number of host pools as well as how many hosts will be in each pool.",
- "guid": "4e98495f-d3c0-4af2-aa59-a793395a32a7",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/terminology?WT.mc_id=Portal-fx#host-pools",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"services": [
- "VM",
- "AVD"
+ "WAF"
],
"severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Estimate the number of different Host Pools to deploy ",
- "waf": "Performance"
+ "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Confirm that the difference between automatic and direct assignment is well understood and the selected option is appropriate for the scenario in question. Automatic is the default setting.",
- "guid": "b38b875b-a1cf-4204-a901-3a5d3ce474db",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/configure-host-pool-personal-desktop-assignment-type",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "Monitor"
],
- "severity": "Low",
- "subcategory": "Capacity Planning",
- "text": "For Personal Host Pool type, select the proper assignment type",
+ "severity": "Medium",
+ "text": "Monitor CPU and memory utilization of the nodes",
"waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Check which one to use and available options, autoscale ignores existing load-balancing algorithms.",
- "guid": "cbd8682a-6abc-4a2a-9fda-1dbf3dc95d48",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/host-pool-load-balancing",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "Monitor"
],
- "severity": "Low",
- "subcategory": "Capacity Planning",
- "text": "For Pooled Host Pool type, select the best load balancing method",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "The number of cores increase, the system's synchronization overhead also increases. Especially for multiple user's sign-in simultaneously. Make sure not to use a VM that is too large for the session host",
- "guid": "b3724959-4943-4577-a3a9-e10ff6345f24",
- "link": "https://learn.microsoft.com/windows-server/remote/remote-desktop-services/virtual-machine-recs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
"services": [
- "VM",
- "AVD"
+ "Storage",
+ "ServiceBus",
+ "EventHubs",
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Capacity Planning",
- "text": "For Pooled Host Pool type, VMs shouldn't have more than 32 cores",
- "waf": "Performance"
+ "text": "Monitor OS disk queue depth in nodes",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD does not support assigning both the RemoteApp and Desktop Application Group (DAG) in a single host pool to the same set of users. Doing so will cause a single user to have two user sessions in a single host pool. Users aren't supposed to have two active sessions at the same time in the same host pool using the same profile.",
- "guid": "b384b7ed-1cdd-457e-a2cd-c8d4d55bc144",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/terminology?WT.mc_id=Portal-fx#application-groups",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "Monitor",
+ "NVA",
+ "LoadBalancer"
],
- "severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Do not use the same Host Pool to offer both full desktops (DAG) and Remote Apps to the same set of users",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "There is a limit of 500 Application Groups that can be created in AVD for each Microsoft Entra ID (former Azure AD) tenant. The limit can be increased (see the companion link for details) but it is not recommended.",
- "guid": "971cc4a4-b1f7-4c12-90e0-1ad96808f00c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#azure-virtual-desktop-service-limits",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
"services": [
- "Entra",
- "ACR",
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Capacity Planning",
- "text": "Estimate the number of Application Groups required across all Host Pools in the Microsoft Entra ID tenant",
- "waf": "Reliability"
+ "text": "Subscribe to resource health notifications for your AKS cluster",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Applications are grouped under Application Groups as containers for publishing and assigning permissions: we recommend that you do not publish more than 50 applications per application group.",
- "guid": "fa9f2895-473d-439b-ab8e-5a5cf92c7f32",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/windows-virtual-desktop#considerations",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Capacity Planning",
- "text": "Estimate the number of Applications for each Application Group",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Configure requests and limits in your pod specs",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "FSLogix is not required for Personal Host Pools since each VM is statically assigned to a single user, then no immediate needs for a roaming profile solution. In some usage scenarios FSLogix can help. For example, a VM can be re-assigned, or user moved to another desktop, or roaming profile can be used to save user profile in a different location for DR purposes.",
- "guid": "38b19ab6-0693-4992-9394-5590883916ec",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/configure-host-pool-personal-desktop-assignment-type?tabs=azure#reassign-a-personal-desktop",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"services": [
- "Storage",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Capacity Planning",
- "text": "Evaluate the usage of FSLogix for Personal Host Pools",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Enforce resource quotas for namespaces",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Use the link provided to set a starting point for SKU decision, then validate using a performance test. Ensure a minimum of four cores for Production is selected per Session Host (multi-session)",
- "guid": "e1112dbd-7ba0-412e-9b94-ef6e047d2ea2",
- "link": "https://docs.microsoft.com/windows-server/remote/remote-desktop-services/virtual-machine-recs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "AKS",
"services": [
- "VM",
- "AVD"
+ "WAF",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Run workload performance test to determine the best Azure VM SKU and size to use",
- "waf": "Performance"
+ "text": "Ensure your subscription has enough quota to scale out your nodepools",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "It is critical to check AVD capacity and limits reported in the referenced article. Additional limits and thresholds apply for network, compute, storage and service management. ",
- "guid": "992b1cd6-d2f5-44b2-a769-e3a691e8838a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/windows-virtual-desktop#considerations",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
+ "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
+ "service": "AKS",
"services": [
- "Storage",
- "AVD"
+ "WAF"
],
"severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Verify AVD scalability limits for the environment",
- "waf": "Reliability"
+ "text": "Configure Liveness and Readiness probes for all deployments",
+ "waf": "Operations"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Host Pools with GPU require special configuration, please be sure to review the referenced article.",
- "guid": "c936667e-13c0-4056-94b1-e945a459837e",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/configure-vm-gpu",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Capacity Planning",
- "text": "Determine if Session Hosts will require GPU",
+ "severity": "Medium",
+ "text": "Use the Cluster Autoscaler",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Whenever is possible, it is recommended to leverage VM SKUs with Accelerated Networking feature. This feature does require specific VM SKU/size and OS versions, please see the list and requirement in the companion article.",
- "guid": "b47a393a-0803-4272-a479-8b1578b219a4",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
"services": [
- "VM",
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Low",
- "subcategory": "Capacity Planning",
- "text": "Use Azure VM SKUs able to leverage Accelerated Networking",
+ "text": "Customize node configuration for AKS node pools",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "For proper planning and deployment, it is important to assess the maximum number of concurrent and total users for each Host Pool. Additionally, users from different regions may require different Host Pools to ensure the best user experience.",
- "guid": "bb91a33d-90ca-4e2c-a881-3706f7c0cb9f",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/overview",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Clients & Users",
- "text": "Assess how many users will connect to AVD and from which regions",
+ "text": "Use the Horizontal Pod Autoscaler when required",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "The dependencies on resources external to the AVD pool should be assessed and reviewed, for example Active Directory, external file shares or other storage, on-premises services and resources, network infrastructure components like VPN and or ExpressRoute, external services and 3rd-party components. For all these resources, latency from the AVD Host Pool needs to be evaluated and connectivity considered. Additionally, BCDR considerations need to be applied to these dependencies as well.",
- "guid": "6abca2a4-fda1-4dbf-9dc9-5d48c7c791dc",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/windows-virtual-desktop?toc=%2Fazure%2Fvirtual-desktop%2Ftoc.json&bc=%2Fazure%2Fvirtual-desktop%2Fbreadcrumb%2Ftoc.json",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
"services": [
- "VPN",
- "Storage",
- "ExpressRoute",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Clients & Users",
- "text": "Assess external dependencies for each Host Pool",
+ "severity": "High",
+ "text": "Consider an appropriate node size, not too large or too small",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD offers a variety of client types (fat, thin, web) to connect over different platforms (Windows, MacOS, iOS, Android). Review limitations of each client and compare multiple options when possible.",
- "guid": "a1f6d565-99e5-458b-a37d-4985e1112dbd",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/users/connect-windows",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Low",
- "subcategory": "Clients & Users",
- "text": "Review user client OS used and AVD client type",
+ "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Depending on the user locations, and AVD region deployment, users may have a non-optimal experience, hence is important to test as soon as possible in a small PoC environment. Run the 'Azure Virtual Desktop Experience Estimator' tool to select the best Azure region to deploy Host Pools. Beyond 150ms latency, user experience may be not optimal.",
- "guid": "d2f54b29-769e-43a6-a1e8-838ac936667e",
- "link": "https://azure.microsoft.com/services/virtual-desktop/assessment/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
- "severity": "High",
- "subcategory": "Clients & Users",
- "text": "Run a PoC to validate end-to-end user experience and impact of network latency",
+ "severity": "Low",
+ "text": "Consider subscribing to EventGrid Events for AKS automation",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "RDP settings can currently only be configured at the host pool level, not per user/group. If different settings are required for different set of users, it is recommended to create multiple Host Pools.",
- "guid": "3b365a5c-7acb-4e48-abe5-4cd79f2e8776",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/customize-rdp-properties",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
"severity": "Low",
- "subcategory": "Clients & Users",
- "text": "Assess and document RDP settings for all user groups",
- "waf": "Security"
+ "text": "For long running operation on an AKS cluster consider event termination",
+ "waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD is a non-regional service, Host Pools can be created in any region, automatic redirection from closest front-end will happen automatically.",
- "guid": "42e52f47-21d9-428c-8b1b-d521e44a29a9",
- "link": "https://azure.microsoft.com/global-infrastructure/services/?products=virtual-desktop",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
+ ],
+ "severity": "Low",
+ "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "services": [
+ "WAF"
],
"severity": "High",
- "subcategory": "General",
- "text": "Determine in which Azure regions AVD Host Pools will be deployed.",
+ "text": "Use ephemeral OS disks",
"waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD must store metadata to support the service; this is stored in the specified geography. However, this is independent of the regions where Host Pools are located.",
- "guid": "bad37ead-53cc-47ce-8d7a-aab3571449ab",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/data-locations",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
"services": [
- "AVD"
+ "WAF",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "General",
- "text": "Determine metadata location for AVD service",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
+ "waf": "Performance"
},
{
- "category": "Foundation",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Check for specific VM SKUs, especially if you need GPU or high-specs SKUs, and eventually Azure NetApp Files if used.",
- "guid": "8053d89e-89dc-47b3-9be2-a1a27f7a9e91",
- "link": "https://docs.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
"services": [
- "Storage",
- "VM",
- "AVD"
+ "WAF",
+ "AKS",
+ "Storage"
],
"severity": "Low",
- "subcategory": "General",
- "text": "Check Azure quotas and availability for specific VM sizes and types in the selected regions",
- "waf": "Reliability"
+ "text": "For hyper performance storage option use Ultra Disks on AKS",
+ "waf": "Performance"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AD DCs in Azure are recommended (at least two in different AZ) to reduce latency for users logging into AVD session hosts, and eventually for Azure NetApp Files and AD integration. A DC need to be able to talk to DCs for ALL child domains. As alternative, on-premise connectivity must be used to reach AD DCs.",
- "guid": "c14aea7e-65e8-4d9a-9aec-218e6436b073",
- "link": "https://docs.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
"services": [
- "Storage",
- "VNet",
- "Entra",
- "AVD"
+ "WAF",
+ "SQL",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Create at least two Active Directory Domain Controllers (DCs) in Azure VNet environment close to AVD Host Pool",
- "waf": "Reliability"
+ "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
+ "waf": "Performance"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Recommended to create a separate OU per Host Pool under a separate OU hierarchy. These OUs will contain machine accounts of AVD Session Hosts. ",
- "guid": "6db55f57-9603-4334-adf9-cc23418db612",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/create-host-pools-azure-marketplace",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
"services": [
- "Entra",
- "AVD"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Create a specific OU in Active Directory for each Host Pool",
- "waf": "Operations"
+ "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
+ "waf": "Performance"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Carefully review, and potentially block/filter inheritance of GPOs to the OUs containing AVD Host Pools. ",
- "guid": "7126504b-b47a-4393-a080-327294798b15",
- "link": "https://docs.microsoft.com/previous-versions/windows/desktop/Policy/group-policy-hierarchy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "WAF checklist",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
"services": [
- "Entra",
- "AVD"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Review Domain GPOs that will be applied to OU and impacting Host Pool Session Hosts functionalities",
- "waf": "Operations"
+ "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
+ "waf": "Performance"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If Active Directory Domain GPOs are used, it is recommended to configure FSLogix using the built-in provided GPO ADMX template referenced in the companion article in the 'More Info' column",
- "guid": "2226a8e3-50a4-4ac3-8bd6-ee150553051f",
- "link": "https://learn.microsoft.com/fslogix/how-to-use-group-policy-templates",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "1fc2fc14-eea6-4e69-b8d9-a3edc218e687",
+ "link": "https://polite-sea-0995b240f.2.azurestaticapps.net/technical-delivery-playbook/azure-services/analytics/purview/",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Configure FSLogix settings using the built-in provided GPO ADMX template",
- "waf": "Operations"
+ "text": "Leverage FTA Resillency Handbook",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "It is recommended to have a specific dedicated account with minimal permissions, and without the default 10 joins limitation. Review the companion article for more details.",
- "guid": "347dc560-28a7-41ff-b1cd-15dd2f0d5e77",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#session-hosts",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "ab067acb-49e5-4b96-8332-4ecf8cc13318",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Entra",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Create a dedicated user account with only permissions to join VM to the domain",
- "waf": "Security"
+ "severity": "High",
+ "text": "Plan for Data Center level outage",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Avoid granting access per user, instead use AD groups and replicate them using Active Directory Connector (ADC) in Microsoft Entra ID (former Azure AD). ",
- "guid": "2d41e361-1cc5-47b4-a4b1-410d43958a8c",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/manage-app-groups",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "description": "1. Create the new account 2. Migrate configuration items 3. Run scans 4. Migrate custom typedefs and custom assets 5. Migrate relationships 6. Migrate glossary terms 7. Assign classifications to assets 8. Assign contacts to assets",
+ "guid": "da611702-69f4-4fb4-aa3d-3ef7f3176c4b",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Create a domain user group for each set of users that will be granted access to each Host Pool Application Group (DAG or RAG)",
- "waf": "Security"
+ "text": "Practice Failover for BCDR",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If Azure Files Active Directory (AD) integration is used, as part of the configuration procedure, an AD account to represent the storage account (file share) will be created. You can choose to register as a computer account or service logon account, see FAQ for details. For computer accounts, there is a default password expiration age set in AD at 30 days. Similarly, the service logon account may have a default password expiration age set on the AD domain or Organizational Unit (OU). For both account types, we recommend you check the password expiration age configured in your AD environment and plan to update the password of your storage account identity of the AD account before the maximum password age. You can consider creating a new AD Organizational Unit (OU) in AD and disabling password expiration policy on computer accounts or service logon accounts accordingly.",
- "guid": "2289b3d6-b57c-4fc6-9546-1e1a3e3453a3",
- "link": "https://docs.microsoft.com/azure/storage/files/storage-files-identity-ad-ds-enable",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "97b15b8a-219a-44ab-bb57-879024d22678",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Storage",
- "Entra",
- "AzurePolicy",
- "AVD"
+ "WAF",
+ "Backup"
],
"severity": "High",
- "subcategory": "Active Directory",
- "text": "Review your organization password expiration policy for accounts used by Azure Files AD integration",
- "waf": "Security"
+ "text": "Plan a backup strategy and take regular backups",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "You can configure this using Active Directory Connect (ADC) or Azure AD Domain Services (for hybrid or cloud organizations). Microsoft Entra ID is the new name for Azure Active Directory (Azure AD).",
- "guid": "5119bf8e-8f58-4542-a7d9-cec166cd072a",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#identity",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "6d20b56c-56a9-4581-89bf-8d8e5c586b7d",
+ "link": "https://learn.microsoft.com/purview/manage-kafka-dotnet",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF",
+ "EventHubs"
],
- "severity": "High",
- "subcategory": "Active Directory",
- "text": "A Windows Server Active Directory forest/domain must be in sync with Microsoft Entra ID",
+ "severity": "Low",
+ "text": "Use Microsoft Purview's Event Hubs to subscribe and create entities to another account",
"waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If Azure Files is used and pre-requisites can be satisfied, it is recommended to configure (Microsoft Entra ID) Kerberos authentication. This configuration will allow to store FSLogix profiles that can be accessed by hybrid user identities from Azure AD-joined session hosts without requiring network line-of-sight to domain controllers.",
- "guid": "e777fd5e-c5f1-4d6e-8fa9-fc210b88e338",
- "link": "https://learn.microsoft.com/azure/storage/files/storage-files-identity-auth-hybrid-identities-enable",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "8cdc15ac-c075-4ee9-a130-a8889579e76b",
+ "link": "https://learn.microsoft.com/purview/deployment-best-practices",
+ "service": "Purview",
"services": [
- "Storage",
- "Entra",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Microsoft Entra ID",
- "text": "Configure Azure Files share for Microsoft Entra ID (former Azure AD) Kerberos authentication on Microsoft Entra ID Joined scenario",
- "waf": "Security"
+ "text": "Follow Purview accounts architectures and deployment best practices",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "An Azure subscription must be parented to the same Microsoft Entra ID (former Azure AD) tenant, that contains a virtual network that either contains or is connected to the Windows Server Active Directory Domain Services or Microsoft Entra ID Domain Services instance.",
- "guid": "6ceb5443-5125-4922-9442-93bb628537a5",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#identity",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "896e710a-7da7-4be9-a56d-14d3c49d997c",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-collections",
+ "service": "Purview",
"services": [
- "VNet",
- "Entra",
- "Subscriptions",
- "AVD"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Requirements",
- "text": "A Microsoft Entra ID tenant must be available with at least one subscription linked",
+ "severity": "Medium",
+ "text": "Follow Collection Architectures and best practices",
"waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure Virtual Desktop supports different types of identities depending on which configuration you choose. Please review the supported scenarios mentioned in the 'More Info' article and document the design decision accordingly in the 'Comment' column. Critically, external identities (B2B or B2C) are not supported. Be sure to review also the list of supported scenarios in https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#supported-identity-scenarios.",
- "guid": "b4ce4781-7557-4a1f-8043-332ae199d44c",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/authentication",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "b3d1325a-a225-4c6f-9e06-85edddea8a4b",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-asset-lifecycle",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Requirements",
- "text": "Review and document your identity scenario",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Follow Assest lifecycle best practices",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Users need accounts that are in Microsoft Entra ID (former Azure AD). If you're also using AD DS or Azure AD Domain Services in your deployment of Azure Virtual Desktop, these accounts will need to be hybrid identities, which means the user accounts are synchronized. If you're using Microsoft Entra ID with AD DS, you'll need to configure Azure AD Connect to synchronize user identity data between AD DS and Microsoft Entra ID. If you're using Microsoft Entra ID with Azure AD Domain Services, user accounts are synchronized one way from Microsoft Entra ID to Azure AD Domain Services. This synchronization process is automatic. AVD also supports Microsoft Entra ID native accounts with some restrictions. External identities (B2B or B2C) are not supported.",
- "guid": "f9b141a8-98a5-435e-9378-97e71ca7da7b",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#supported-identity-scenarios",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "7cdeb3c6-1fc2-4fc1-9eea-6e69d8d9a3ed",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-automation",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Requirements",
- "text": "Assess User Account types and requirements",
- "waf": "Security"
+ "text": "Follow automation best practices",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD supports SSO using either Active Directory Federation Services (AD FS) or Microsoft Entra ID (former Azure AD) authentication. The latter is recommended, please check the requirements and limitation in the 'More Info' article. Using AD FS could be a viable choice if already present in the customer environment, it is not recommended to deploy a brand new ADFS infrastructure just for AVD SSO implementation.",
- "guid": "5f9f680a-ba07-4429-bbf7-93d7071561f4",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/authentication#single-sign-on-sso",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "c218e687-ab06-47ac-a49e-5b9603324ecf",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Requirements",
- "text": "If Single-Sign On (SSO) is a requirement, review the supported scenarios and prerequisites",
+ "text": "Follow Backup and Migration Best practices",
"waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "VMs can be Windows Active Directory (AD) domain-joined, Hybrid AD-joined, Microsoft Entra ID (former Azure AD) Joined or Azure AD Domain Services joined. Be sure to review supported scenarios, limitations and requirements from the referenced article.",
- "guid": "ea962a15-9394-46da-a7cc-3923266b2258",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#supported-identity-scenarios",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "8cc13318-da61-4170-869f-4fb4aa3d3ef7",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-glossary",
+ "service": "Purview",
"services": [
- "Entra",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Requirements",
- "text": "Select the proper AVD Session Host domain join type",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Follow Purview Glossary Best Practices",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Compare self-managed Windows Active Directory Domain Services, Microsoft Entra ID (former Azure AD), and managed Azure AD Domain Services (AAD-DS)",
- "guid": "6f4a1651-bddd-4ea8-a487-cdeb4861bc3b",
- "link": "https://docs.microsoft.com/azure/active-directory-domain-services/compare-identity-solutions",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "f3176c4b-97b1-45b8-a219-a4abeb578790",
+ "link": "https://learn.microsoft.com/purview/concept-workflow",
+ "service": "Purview",
"services": [
- "Entra",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Requirements",
- "text": "Before using Azure AD Domain Services (AAD-DS) for AVD, be sure to review the limitations.",
+ "text": "Leverage Workflows ",
"waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD provides administrative templates for Intune and Active Directory GPO. Using these templates it is possible to centrally control several AVD configuration settings: Graphics related data logging, Screen capture protection, RDP Shortpath for managed networks, Watermarking. See companion article in 'More Info' colum for details. NOTE: FSLogix has its own separate template.",
- "guid": "5549524b-36c0-4f1a-892b-ab3ca78f5db2",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/administrative-template",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "24d22678-6d20-4b56-a56a-958119bf8d8e",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-security",
+ "service": "Purview",
"services": [
- "Entra",
- "Monitor",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Management",
- "text": "Use built-in provided administrative templates for AVD settings configuration",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Follow Purview Security Best Practices",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Determine if a configuration management tool is already in place to manage Host Pool VM configuration after initial deployment, For example SCCM/SCOM, Intune/ConfigurationManager, 3rd-party solutions.",
- "guid": "3334fdf9-1c23-4418-8b65-285269440b4b",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/management",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "5c586b7d-8cdc-415a-ac07-5ee9b130a888",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-lineage-azure-data-factory",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Management",
- "text": "Plan AVD Session Hosts configuration management strategy",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Follow Purview Data Lineage Best Practices",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "We recommend using Microsoft Intune, if requirements can be satisfied, to manage your Azure Virtual Desktop environment. Review supported scenarios and requirements to enable Intune for AVD Session Host management in the referenced article in the More Info column. Document your choice in the 'Comment' column. In that article, review the different requirements and capabilities for single-session https://learn.microsoft.com/mem/intune/fundamentals/windows-virtual-desktop and multi-session https://learn.microsoft.com/mem/intune/fundamentals/windows-virtual-desktop-multi-session AVD.",
- "guid": "63a08be1-6004-4b4a-a79b-f3239faae113",
- "link": "https://learn.microsoft.com/mem/intune/fundamentals/azure-virtual-desktop",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "9579e76b-896e-4710-a7da-7be9956d14d3",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-scanning",
+ "service": "Purview",
"services": [
- "Monitor",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Evaluate Intune for AVD Session Hosts management",
- "waf": "Operations"
+ "text": "Follow Best Practices for Scanning Registered Sources",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "The scaling tool provides a low-cost automation option for customers who want to optimize their session host VM costs. You can use the scaling tool to schedule VMs to start and stop based on Peak and Off-Peak business hours, scale out VMs based on number of sessions per CPU core, scale in VMs during Off-Peak hours, leaving the minimum number of session host VMs running. Not available yet for Personal Host Pool type.",
- "guid": "7138b820-102c-4e16-be30-1e6e872e52e3",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/autoscale-scenarios",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "c49d997c-b3d1-4325-aa22-5c6f4e0685ed",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-classification",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "Cost",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Assess the requirements for host pool auto-scaling capability",
+ "text": "Follow Classification Best Practices in Governance Portal",
"waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Start VM On Connect lets you reduce costs by enabling end users to turn on their session host virtual machines (VMs) only when they need them. You can then turn off VMs when they're not needed. You can configure Start VM on Connect for personal or pooled host pools using the Azure portal or PowerShell. Start VM on Connect is a host pool wide setting.",
- "guid": "55f612fe-f215-4f0d-a956-10e7dd96bcbc",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/start-virtual-machine-connect",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "ddea8a4b-7cde-4b3c-91fc-2fc14eea6e69",
+ "link": "https://learn.microsoft.com/purview/sensitivity-labels-frequently-asked-questions",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "Cost",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Management",
- "text": "Consider the usage of Start VM on Connect for Personal Host Pools",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "Perform Sensitivity Labelling in the Purview Data Map",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "'Start VM On Connect' provides a smart way to automatically start previously stopped Session Hosts but does not provide a mechanism to shut down when not in used. Administrators are encouraged to configure additional policies to sign users out of their sessions and run Azure automation scripts to de-allocate VMs. Users should be not allowed to shut down their Personal Hosts since will not be able to de-allocate Azure VMs, then billing will still be active with no cost reduction.",
- "guid": "79a686ea-d971-4ea0-a9a8-1aea074c94cb",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/start-virtual-machine-connect-faq#are-vms-automatically-deallocated-when-a-user-stops-using-them",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "d8d9a3ed-c218-4e68-9ab0-67acb49e5b96",
+ "link": "https://learn.microsoft.com/purview/concept-data-share",
+ "service": "Purview",
"services": [
- "Cost",
- "Monitor",
- "VM",
- "AzurePolicy",
- "AVD"
+ "WAF",
+ "Storage"
],
"severity": "Low",
- "subcategory": "Management",
- "text": "Evaluate the implementation of an ad-hoc mechanism to shut down Personal AVD Session Hosts",
- "waf": "Cost"
+ "text": "Leverage Azure Storage in-place data sharing with Microsoft Purview",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure Virtual Desktop billing is mainly based on cost associated to compute, networking and storage resources consumed by Host Pools. In addition to this, costs can be generated by dependent resources, for example VPN or ExpressRoute or vWAN, Active Directory Domain Controllers, DNS, etc. There is no direct cost associated to AVD objects like workspaces, host pools or application groups. To make AVD associated costs more evident and grouped by Host Pool, it is recommended to use 'cm-resource-parent' tag. ",
- "guid": "51bcafca-476a-48fa-9b91-9645a7679f20",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/tag-virtual-desktop-resources",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "03324ecf-8cc1-4331-ada6-1170269f4fb4",
+ "link": "https://learn.microsoft.com/purview/concept-insights",
+ "service": "Purview",
"services": [
- "Storage",
- "VWAN",
- "DNS",
- "ExpressRoute",
- "Cost",
- "VPN",
- "Monitor",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Management",
- "text": "Review and adopt suggested Azure Tags for Azure Virtual Desktop",
- "waf": "Cost"
+ "text": "Leverage Data Estate Insights",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure Advisor analyzes your configurations and telemetry to offer personalized recommendations to solve common problems. With these recommendations, you can optimize your Azure resources for reliability, security, operational excellence, performance, and cost.",
- "guid": "611dd68c-5a4b-4252-8e44-a59a9c2399c4",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/azure-advisor-recommendations",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "aa3d3ef7-f317-46c4-a97b-15b8a219a4ab",
+ "link": "https://learn.microsoft.com/purview/catalog-adoption-insights",
+ "service": "Purview",
"services": [
- "Entra",
- "Monitor",
- "Cost",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Management",
- "text": "Periodically check Azure Advisor recommendations for AVD",
- "waf": "Operations"
+ "text": "Use Data stewardship and Catalog adoption",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Customers have several options: Microsoft Configuration Manager, this article explains how to automatically apply updates to a Azure Virtual Desktop session hosts running Windows 10/11: https://learn.microsoft.com/azure/virtual-desktop/configure-automatic-updates, Microsoft Intune: https://docs.microsoft.com/mem/intune/fundamentals/windows-virtual-desktop-multi-session, Azure Update Management and WSUS for Windows Server OS only (client OS not supported: https://learn.microsoft.com/azure/automation/update-management/operating-system-requirements), 3rd Party tools. Outside an emergency security patching situation, it is recommended to move away from an 'in-place' update strategy patching strategy and adopt a re-imaging approach.",
- "guid": "04722da2-9c2b-41cd-922f-54b29bade3aa",
- "link": "https://learn.microsoft.com/mem/intune/fundamentals/azure-virtual-desktop-multi-session",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "eb578790-24d2-4267-a6d2-0b56c56a9581",
+ "link": "https://learn.microsoft.com/purview/concept-insights",
+ "service": "Purview",
"services": [
- "Monitor",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Plan for a Session Host emergency patching and update strategy",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "Use Inventory and Ownership",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "The Scheduled Agent Updates feature lets you create up to two maintenance windows per Host Pool to update AVD components at a convenient time. It is recommended to specify maintenance windows then upgrading Session Hosts will not happen during peak business hours. Scheduled Agent Updates is disabled by default. This means that, unless you enable this setting, the agent can get updated at any time by the agent update flighting service.",
- "guid": "c067939b-e5ca-4698-b9ce-3bd91843e73f",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/scheduled-agent-updates",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "19bf8d8e-5c58-46b7-b8cd-c15acc075ee9",
+ "link": "https://learn.microsoft.com/purview/glossary-insights",
+ "service": "Purview",
"services": [
- "Monitor",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Management",
- "text": "Configure the Scheduled Agent Updates feature",
+ "text": "Leverage Insights for Glossary, Classifications, Sensitivity Labels",
"waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Host pools are a collection of one or more identical virtual machines within Azure Virtual Desktop environment. We highly recommend you create a validation host pool where service updates are applied first. This allows you to monitor service updates before the service applies them to your standard or non-validation environment.",
- "guid": "d1e8c38e-c936-4667-913c-005674b1e944",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/create-validation-host-pool",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "b130a888-9579-4e76-a896-e710a7da7be9",
+ "link": "https://learn.microsoft.com/purview/compliance-manager",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Create a validation (canary) Host Pool",
- "waf": "Operations"
+ "text": "Generate assessment scores",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "An AVD Host Pool can be deployed in several ways: Azure Portal, ARM templates, Azure CLI tool, Powershell, manual VM creation with registration token, Terraform, 3rd-party tools. It is important to adopt proper method/s to support automatic deployment through automation and CI/CD tools.",
- "guid": "a459c373-e7ed-4616-83b3-65a917ecbe48",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/wvd/eslz-platform-automation-and-devops",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "956d14d3-c49d-4997-ab3d-1325aa225c6f",
+ "link": "https://learn.microsoft.com/purview/compliance-manager-scoring",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Determine Host Pool deployment strategy",
- "waf": "Operations"
+ "text": "Profiling- get summaries of data content",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "After you register a VM to a host pool within the Azure Virtual Desktop service, the agent regularly refreshes the VM's token whenever the VM is active. The certificate for the registration token is valid for 90 days. Because of this 90-day limit, we recommend VMs to be online for 20 minutes every 90 days so that the machine can refresh its tokens and update the agent and side-by-side stack components.",
- "guid": "ebe54cd7-df2e-48bb-ac35-81559bb9153e",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/faq",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "4e0685ed-ddea-48a4-a7cd-eb3c61fc2fc1",
+ "link": "https://learn.microsoft.com/purview/concept-policies-data-owner#microsoft-purview-policy-concepts",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "AVD"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Turn on Session Host VMs at least every 90 days for token refresh",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "Follow Microsoft Purview Data Owner access policies",
+ "waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure Virtual Desktop Insights is a dashboard built on Azure Monitor Workbooks that helps IT professionals understand their Azure Virtual Desktop environments. Read the referenced article to learn how to set up Azure Monitor for Azure Virtual Desktop to monitor your AVD environments.",
- "guid": "63cfff1c-ac59-49ef-8d5a-83dd4de36c1c",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/insights",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "4eea6e69-d8d9-4a3e-bc21-8e687ab067ac",
+ "link": "https://learn.microsoft.com/purview/concept-self-service-data-access-policy",
+ "service": "Purview",
"services": [
- "Monitor",
- "AVD"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Enable monitoring for AVD",
+ "severity": "Low",
+ "text": "Follow Self-service access policies",
"waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Azure Virtual Desktop uses Azure Monitor and Log Analytics for monitoring and alerts like many other Azure services. This lets admins identify issues through a single interface. The service creates activity logs for both user and administrative actions. Each activity log falls under the following categories: Management, Feed, Connections, Host Registration, Errors, Checkpoints. ",
- "guid": "81770afb-c4c0-4e43-a186-58d2857ed671",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/diagnostics-log-analytics",
+ "arm-service": "Microsoft.Purview/accounts",
+ "checklist": "WAF checklist",
+ "guid": "b49e5b96-0332-44ec-b8cc-13318da61170",
+ "link": "https://learn.microsoft.com/purview/concept-policies-devops",
+ "service": "Purview",
"services": [
- "Monitor",
- "VM",
- "AVD"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Enable diagnostic settings for Workspaces, Host Pools, Application Groups and Host VMs to Log Analytics workspace",
+ "severity": "Low",
+ "text": "Follow DevOps policies",
"waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "See the referenced article and this additional one to setup proper monitoring and alerting for storage: https://docs.microsoft.com/azure/storage/files/storage-troubleshooting-files-performance. ",
- "guid": "2463cffe-179c-4599-be0d-5973dd4ce32c",
- "link": "https://docs.microsoft.com/azure/storage/files/storage-files-monitoring?tabs=azure-portal",
+ "arm-service": "Microsoft.App/containerApps",
+ "checklist": "WAF checklist",
+ "guid": "af416482-663c-4ed6-b195-b44c7068e09c",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support",
+ "query": "resources | where type =~ 'Microsoft.App/managedEnvironments' | project name, resourceGroup, location, zoneRedundancy = tolower(tostring(properties.zoneRedundant)) | extend Compliance = iff(zoneRedundancy == 'true', true, false)",
+ "service": "Container Apps",
"services": [
- "Storage",
- "Monitor",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Create alerts on the profile storage to be alerted in case of high usage and throttling",
+ "severity": "High",
+ "text": "Leverage Availability Zones if regionally applicable",
"waf": "Reliability"
},
{
- "category": "Monitoring and Management",
- "checklist": "Azure Virtual Desktop Review",
- "description": "You can use Azure Service Health to monitor service issues and health advisories for Azure Virtual Desktop. Azure Service Health can notify you with different types of alerts (for example, email or SMS), help you understand the effect of an issue, and keep you updated as the issue resolves.",
- "guid": "18813706-f7c4-4c0d-9e51-4548d2457ed6",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/set-up-service-alerts",
+ "arm-service": "Microsoft.App/containerApps",
+ "checklist": "WAF checklist",
+ "guid": "95bc80ec-6499-4d14-a7d2-7d296b1d8abc",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment",
+ "query": "resources | where type =~ 'Microsoft.App/containerApps' | project name, resourceGroup, location, minReplicas = toint(properties.template.scale.minReplicas), maxReplicas = toint(properties.template.scale.maxReplicas) | extend Compliance = iff(minReplicas >= 1, true, false)",
+ "service": "Container Apps",
"services": [
- "Monitor",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Configure Azure Service Health for AVD alerts ",
+ "severity": "High",
+ "text": "Use more than one replica and enable Zone Redundancy.",
"waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If required to connect to on-premises environment, assess the current connectivity option or plan for the required connectivity (ExpressRoute, Azure S2S or 3rd-party NVA VPN). ",
- "guid": "dd399cfd-7b28-4dc8-9555-6202bfe4563b",
- "link": "https://docs.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/",
+ "arm-service": "Microsoft.App/containerApps",
+ "checklist": "WAF checklist",
+ "guid": "ccaa4fc2-fdbc-4432-8bb7-f7e6469e4dc3",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Container Apps",
"services": [
- "VPN",
- "ExpressRoute",
- "NVA",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Determine if hybrid connectivity is required to connect to on-premises environment",
+ "severity": "High",
+ "text": "For cross-region DR, deploy container apps in multiple regions and follow active/active or active/passive application guidance.",
"waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD Host Pools can be deployed in either Azure Virtual WAN or traditional 'Hub & Spoke' network topologies. It is recommended to deploy each Host Pool in a separate 'spoke' VNet, using 'hub' is not recommended.",
- "guid": "c8639648-a652-4d6c-85e5-02965388e5de",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/wvd/eslz-network-topology-and-connectivity",
+ "arm-service": "Microsoft.App/containerApps",
+ "checklist": "WAF checklist",
+ "guid": "2ffada86-c031-4933-bf7d-0c45bc4e5919",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Container Apps",
"services": [
- "VNet",
- "VWAN",
- "AVD"
+ "WAF",
+ "TrafficManager",
+ "FrontDoor"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Determine Azure Virtual Network (VNet) placement for each AVD Host Pool",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Use Front Door or Traffic Manager to route traffic to the closest region",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Evaluate the bandwidth requirements, ensure VPN/ER bandwidth will be enough, ensure proper routing and firewall rules are in place, test end-to-end latency. ",
- "guid": "d227dd14-2b06-4c21-a799-9a646f4389a7",
- "link": "https://docs.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/",
+ "checklist": "WAF checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
"services": [
- "VPN",
- "AVD"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Assess which on-premises resources are required from AVD Host Pools",
+ "text": "Use long-live revocable token, cache your token and acquire your silently using Microsoft Identity Library",
"waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Several options are available. You can use Azure Firewall or equivalent 3rd-party NVA, Network Security Group (NSG) and/or Proxy servers. NSG is not able to enable/disable by URL, only ports and protocols. Proxy should be used only as explicit setting in user browser. Details on using Azure Firewall Premium with AVD are reported in the companion article in the 'More Info' column. Be sure to allow proper access to required AVD URLs. Forced Tunneling to on-premises is not recommended.",
- "guid": "fc4972cd-3cd2-41bf-9703-6e5e6b4bed3d",
- "link": "https://docs.microsoft.com/azure/firewall/protect-windows-virtual-desktop",
+ "checklist": "WAF checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
"services": [
- "VNet",
- "Firewall",
- "NVA",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Need to control/restrict Internet outbound traffic for AVD hosts?",
- "waf": "Security"
- },
- {
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Required URLs for AVD control plane access by session hosts are documented here: https://docs.microsoft.com/azure/virtual-desktop/safe-url-list. A check tool is available to verify connectivity from the session hosts: https://docs.microsoft.com/azure/virtual-desktop/safe-url-list#required-url-check-tool. Forced Tunneling to on-premises is not recommended.",
- "guid": "65c7acbe-45bb-4e60-ad89-f2e87778424d",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/safe-url-list",
- "services": [
- "AVD"
- ],
- "severity": "High",
- "subcategory": "Networking",
- "text": "Ensure AVD control plane endpoints are accessible",
+ "text": "Make sure that your sign-in user flows are backed up and resilient. Make sure that the code that you use to sign-in your users are backed up and recoverable. Resilient interfaces with external processes",
"waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Consider the usage of Azure Defender Endpoint or similar 3rd-party agents to control user web navigation, see the Security section for more details.",
- "guid": "73676ae4-6691-4e88-95ad-a42223e13810",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/onboard-windows-multi-session-device?view=o365-worldwide",
+ "checklist": "WAF checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
"services": [
- "Defender",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Need to control/restrict Internet outbound traffic only for users on AVD hosts? ",
- "waf": "Security"
+ "text": "Custom brand assets should be hosted on a CDN",
+ "waf": "Performance"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Custom UDR and NSG can be applied to AVD Host Pool subnets, for example to redirect to Azure Firewall or NVA, or to filter/block network traffic. In this case is recommended to carefully review to ensure optimal path for outbound traffic to AVD control plane is used. Service Tags can now be used with UDR and NSG, then AVD management plane traffic can be easily allowed: https://learn.microsoft.com/azure/virtual-desktop/safe-url-list.",
- "guid": "523181a9-4174-4158-93ff-7ae7c6d37431",
- "link": "https://docs.microsoft.com/azure/firewall/protect-windows-virtual-desktop",
+ "checklist": "WAF checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
"services": [
- "VNet",
- "Firewall",
- "NVA",
- "AVD"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Networking",
- "text": "Review custom UDR and NSG for AVD Host Pool subnets",
- "waf": "Security"
+ "text": "Have multiple identiy providers (i.e., login with your microsoft, google, facebook accounts)",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Network traffic from AVD Session Host VMs to AVD control plane should be as direct as possible. Redirecting this traffic through a Proxy or Firewall with deep packet inspection and/or SSL termination could cause serious issues and bad customer experience. It is recommended to bypass Proxy and Firewall just for the AVD control plane. User generated traffic surfing the web instead, should be filtered by Firewall and/or redirected to a Proxy. For details and guidelines, please see the companion article in the 'More Info' column.",
- "guid": "cc6edca0-aeca-4566-9e92-cf246f1465af",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/proxy-server-support",
+ "checklist": "WAF checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"services": [
- "VM",
- "AVD"
+ "WAF",
+ "VM"
],
- "severity": "High",
- "subcategory": "Networking",
- "text": "Do not use Proxy servers, SSL termination and Deep Packet Inspection for AVD control plane traffic",
+ "severity": "Medium",
+ "text": "Follow VM rules for high availability on the VM level (premium disks, two or more in a region, in different availability zones)",
"waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "It is recommended to assess and review networking bandwidth requirements for users, based on the specific workload type. The referenced article provide general estimations and recommendations, but specific measure are required for proper sizing. ",
- "guid": "516785c6-fa96-4c96-ad88-408f372734c8",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/rdp-bandwidth",
+ "checklist": "WAF checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"services": [
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Networking",
- "text": "Check the network bandwidth required for each user and in total for the VM SKU",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Don't replicate! Replication can create issues with directory synchronization",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If Azure Files SMB share will be used to store user profiles via FSLogix, the usage of Private Endpoint (PE) for private access to the storage is recommended. AVD Session Hosts will access the storage using a private IP in the same VNet, a separate subnet is recommended. This feature has an additional cost that must be evaluated. If PE will not be used, at least Service Endpoint is recommended (no cost associated).",
- "guid": "ec27d589-9178-426d-8df2-ff60020f30a6",
- "link": "https://learn.microsoft.com/azure/storage/files/storage-files-networking-endpoints",
+ "checklist": "WAF checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"services": [
- "Storage",
- "VNet",
- "Cost",
- "PrivateLink",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Evaluate usage Private Endpoint for Azure Files share",
- "waf": "Security"
+ "text": "Have active-active for multi-regions",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Connections to Azure Virtual Desktop can use TCP or UDP. RDP Shortpath is a feature of AVD that establishes a direct UDP-based transport between a supported Windows Remote Desktop client and session host. if clients have line of sight to AVD session hosts from internal network (VPN usage is not recommended), this feature can provide lower latency and best performances as explained in https://learn.microsoft.com/azure/virtual-desktop/rdp-shortpath?tabs=managed-networks#key-benefits.",
- "guid": "b2074747-d01a-4f61-b1aa-92ad793d9ff4",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/shortpath",
+ "checklist": "WAF checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
"services": [
- "VPN",
- "AVD"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Evaluate usage of RDP ShortPath for clients connecting from managed internal networks",
- "waf": "Performance"
+ "text": "Add Azure AD Domain service stamps to additional regions and locations",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Security mechanisms provided by GPO should be used, if available. For example, it is possible to impose desktop screen lock and idle session disconnection time. Existing GPOs applied to on-premises environment should be reviewed and eventually applied also to secure also AVD Hosts when joined to the domain.",
- "guid": "a135e337-897e-431c-97d6-8cb6a22ac19f",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#establish-maximum-inactive-time-and-disconnection-policies",
+ "checklist": "WAF checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
"services": [
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Active Directory",
- "text": "Review Active Directory GPO to secure RDP sessions",
- "waf": "Security"
+ "text": "Use Replica Sets for DR",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Microsoft Defender for Endpoint supports Azure Virtual Desktop for Windows 10/11 Enterprise multi-session. Check article for onboarding non-persistent virtual desktop infrastructure (VDI) devices: https://docs.microsoft.com/windows/security/threat-protection/microsoft-defender-atp/configure-endpoints-vdi",
- "guid": "b1172576-9ef6-4691-a483-5ac932223ece",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/deployment-vdi-microsoft-defender-antivirus",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
+ "service": "AVS",
"services": [
- "Defender",
- "AVD"
+ "WAF",
+ "Entra",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "Host Configuration",
- "text": "Ensure anti-virus and anti-malware solutions are used",
+ "text": "Ensure ADDS domain controller(s) are deployed in the identity subscription in native Azure",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Disks in Azure are already encrypted at rest by default with Microsoft managed keys. Host VM OS disk encryption is possible and supported using Azure Disk Encryption (ADE - BitLocker) and Disk Encryption Set (DES - Server Side Encryption), the latter is recommended. Encryption of FSLogix storage using Azure Files can be done using SSE on Azure Storage. For OneDrive encryption, see this article: https://docs.microsoft.com/compliance/assurance/assurance-encryption-for-microsoft-365-services.",
- "guid": "0fd32907-98bc-4178-adc5-a06ca7144351",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disk-encryption-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
+ "service": "AVS",
"services": [
- "Storage",
- "VM",
- "AKV",
- "AVD"
+ "WAF",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Host Configuration",
- "text": "Assess disk encryption requirements for AVD Session Hosts",
+ "severity": "Medium",
+ "text": "Ensure ADDS sites and services is configured to keep authentication requests from Azure-based resources (including Azure VMware Solution) local to Azure",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Trusted launch are Gen2 Azure VMs with enhanced security features aimed to protect against bottom of the stack threats through attack vectors such as rootkits, boot kits, and kernel-level malware. Recommended to enable and leverage Secure Boot, Virtual TPM (vTPM) and Integrity Monitoring.",
- "guid": "36a5a67f-bb9e-4d5b-9547-8c4479816b28",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#azure-virtual-desktop-support-for-trusted-launch",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
+ "service": "AVS",
"services": [
- "Monitor",
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Host Configuration",
- "text": "Enable Trusted launch in Azure Gen2 VM Session Hosts",
+ "severity": "High",
+ "text": "Ensure that vCenter is connected to ADDS to enable authentication based on 'named user accounts'",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Trusted Launch and Gen2 VM are not only security and performance enhancing features but also system requirements for Windows 11. When building an AVD environment based on Windows 11, it is essential to enable these features.",
- "guid": "135d3899-4b31-44d3-bc8f-028871a359d8",
- "link": "https://learn.microsoft.com/windows/whats-new/windows-11-requirements",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
+ "service": "AVS",
"services": [
- "VM",
- "AVD"
+ "WAF"
],
- "severity": "High",
- "subcategory": "Host Configuration",
- "text": "Enable Trusted Launch and use Gen2 image are system requirements for Windows 11",
+ "severity": "Medium",
+ "text": "Ensure that the connection from vCenter to ADDS is using a secure protocol (LDAPS)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Displayed content will be automatically blocked or hidden in screenshots. Keep in mind screen sharing will also be blocked when using Teams or other collaboration software which use screen sharing.",
- "guid": "a49dc137-7896-4343-b2bc-1a31bf1d30b6",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/screen-capture-protection",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
+ "service": "AVS",
"services": [
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Host Configuration",
- "text": "Consider enabling screen capture protection to prevent sensitive information from being captured",
+ "severity": "Medium",
+ "text": "CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If not absolutely required, redirecting drives, printers, and USB devices to a user's local device in a remote desktop session should be disabled or highly restricted. Restrict Windows Explorer access by hiding local and remote drive mappings is also a secure measure to adopt preventing users from discovering unwanted information about system configuration and users.",
- "guid": "7ce2cd20-85b4-4f82-828e-6558736ede6a",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#other-security-tips-for-session-hosts",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
+ "service": "AVS",
"services": [
- "AVD"
+ "WAF",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Host Configuration",
- "text": "Restrict device redirection and drive mapping",
+ "severity": "High",
+ "text": "Ensure that NSX-Manager is integrated with an external Identity provider (LDAPS)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "When choosing a deployment model, you can either provide remote users access to entire virtual desktops or only select applications. Remote applications, or RemoteApps, provide a seamless experience as the user works with apps on their virtual desktop. RemoteApps reduce risk by only letting the user work with a subset of the remote machine exposed by the application.",
- "guid": "4e25d70e-3924-44f4-b66f-d6cdd4f4a973",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/web-protection-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
+ "service": "AVS",
"services": [
- "AVD"
+ "WAF",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "When possible, prefer Remote Apps over Full Desktops (DAG)",
+ "text": "Has an RBAC model been created for use within VMware vSphere",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Web content filtering feature provided by Web Protection capability in Microsoft Defender for Endpoint, can be used to to control user web navigation. If this tool is used, configuration of web filtering for user Internet browsing is recommended. Access by the Guest OS system to required AVD control plane URLs must be guaranteed.",
- "guid": "e19dd344-29eb-4722-a237-a151c5bb4e4f",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/web-protection-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
+ "service": "AVS",
"services": [
- "Defender",
- "AVD"
+ "WAF",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Need to control/restrict user Internet navigation from AVD session hosts?",
+ "text": "RBAC permissions should be granted on ADDS groups and not on specific users",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "We recommend you don't grant your users admin access to virtual desktops. If you need software packages, we recommend you make them available through configuration management utilities.",
- "guid": "a0cdb3b5-4eb2-4eb0-9dda-a3592718e2ed",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/security-guide",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
+ "service": "AVS",
"services": [
- "AVD"
+ "WAF",
+ "AVS",
+ "RBAC"
],
"severity": "High",
- "subcategory": "Management",
- "text": "Ensure AVD users will not have local administrator privileges on AVD Hosts",
+ "text": "RBAC permissions on the Azure VMware Solution resource in Azure are 'locked down' to a limited set of owners only",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "We recommend you enable Defender for Cloud for the subscriptions, virtual machines, key vaults, and storage accounts used by AVD. With this tool is possible to assess and manage vulnerabilities, assess compliance with common frameworks like PCI, strengthen the overall security of your AVD environment and measure it over time using 'Secure Score': https://learn.microsoft.com/azure/virtual-desktop/security-guide#improve-your-secure-score.",
- "guid": "1814387e-5ca9-4c26-a9b3-2ab5bdfc6998",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#enable-microsoft-defender-for-cloud",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
+ "service": "AVS",
"services": [
- "Storage",
- "Subscriptions",
- "AKV",
- "VM",
- "Defender",
- "AVD"
+ "WAF",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Enable Microsoft Defender for Cloud to manage AVD Session Hosts security posture",
+ "severity": "High",
+ "text": "Ensure all custom roles are scoped with CloudAdmin permitted authorizations",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Enabling audit log collection lets you view user and admin activity related to Azure Virtual Desktop and store in a central repository like Log Analytics workspace. ",
- "guid": "a0916a76-4980-4ad0-b278-ee293c1bc352",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#collect-audit-logs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
+ "service": "AVS",
"services": [
- "Entra",
+ "WAF",
+ "AVS"
+ ],
+ "severity": "High",
+ "text": "Is the correct Azure VMware Solution connectivity model selected for the customer use case at hand",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
+ "service": "AVS",
+ "services": [
+ "VPN",
+ "WAF",
"Monitor",
- "AVD"
+ "ExpressRoute",
+ "NetworkWatcher"
],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Enable diagnostic and audit logging",
- "waf": "Security"
+ "severity": "High",
+ "text": "Ensure ExpressRoute or VPN connections from on-premises to Azure are monitored using 'connection monitor'",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Assign the least privilege required by defining administrative, operations, and engineering roles to Azure RBAC roles. To limit access to high privilege roles within your Azure Virtual Desktop landing zone, consider integration with Azure Privileged Identity Management (PIM). Maintaining knowledge of which team is responsible for each particular administrative area helps you determine Azure role-based access control (RBAC) roles and configuration.",
- "guid": "baaab757-1849-4ab8-893d-c9fc9d1bb73b",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/rbac",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
+ "service": "AVS",
"services": [
- "Entra",
- "RBAC",
- "AVD"
+ "VM",
+ "WAF",
+ "Monitor",
+ "AVS",
+ "ExpressRoute",
+ "NetworkWatcher"
],
- "severity": "Low",
- "subcategory": "Management",
- "text": "Assess the requirement to use custom RBAC roles for AVD management",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Ensure a connection monitor is created from an Azure native resource to an Azure VMware Solution virtual machine to monitor the Azure VMware Solution back-end ExpressRoute connection",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "AVD users should not have permission to install application. If required, Windows Defender Application Control (WDAC) can be used to control which drivers and applications are allowed to run on their Windows clients. ",
- "guid": "b9ea80c8-0628-49fc-ae63-125aa4c0a284",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#windows-defender-application-control",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
+ "service": "AVS",
"services": [
- "Defender",
- "AVD"
+ "VM",
+ "WAF",
+ "Monitor",
+ "AVS",
+ "NetworkWatcher"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Restrict users from installing un-authorized applications",
- "waf": "Security"
+ "text": "Ensure a connection monitor is created from an on-premises resource to an Azure VMware Solution virtual machine to monitor end-2-end connectivity",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Enabling MFA and CA lets you manage risks before you grant users access to your AVD environment. When deciding which users to grant access to, we recommend you also consider who the user is, how they sign in, and which device they're using. Additional details and configuration procedures are provided in the companion article. Microsoft Entra ID is the new name for Azure Active Directory (Azure AD).",
- "guid": "916d697d-8ead-4ed2-9bdd-186f1ac252b9",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-mfa",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
+ "service": "AVS",
+ "services": [
+ "WAF",
+ "ARS"
+ ],
+ "severity": "High",
+ "text": "When route server is used, ensure no more then 1000 routes are propagated from route server to ExR gateway to on-premises (ARS limit).",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
+ "service": "AVS",
"services": [
+ "WAF",
"Entra",
- "AVD"
+ "AVS",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Microsoft Entra ID",
- "text": "Evaluate the usage of Multi-Factor Authentication (MFA) and Conditional Access (CA) for AVD users",
+ "severity": "High",
+ "text": "Is Privileged Identity Management implemented for roles managing the Azure VMware Solution resource in the Azure Portal (no standing permissions allowed)",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If Zero Trust is a requirement, review the companion article in the 'More Info' column. It provides steps to apply the principles of Zero Trust to an Azure Virtual Desktop deployment.",
- "guid": "221102d0-90af-49fc-b2b7-8d3fe397e43",
- "link": "https://learn.microsoft.com/security/zero-trust/azure-infrastructure-avd",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
+ "service": "AVS",
"services": [
- "AVD"
+ "WAF",
+ "Entra",
+ "AVS",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Zero Trust",
- "text": "Review and Apply Zero Trust principles and guidance",
+ "severity": "High",
+ "text": "Privileged Identity Management audit reporting should be implemented for the Azure VMware Solution PIM roles",
"waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If used, make sure to check the list of best practices and recommendations described in the referenced article.",
- "guid": "9164e990-9ae2-48c8-9c33-b6b7808bafe6",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/fslogix-containers-azure-files#best-practices-for-azure-virtual-desktop",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Azure Files",
- "text": "Check best-practices for Azure Files",
- "waf": "Performance"
+ "text": "If using Privileged Identity Management is being used, ensure that a valid Entra ID enabled account is created with a valid SMTP record for Azure VMware Solution Automatic Host replacement notifications. (standing permissions required)",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "SMB Multichannel enables clients to use multiple network connections that provide increased performance while lowering the cost of ownership. Increased performance is achieved through bandwidth aggregation over multiple NICs and utilizing Receive Side Scaling (RSS) support for NICs to distribute the IO load across multiple CPUs.",
- "guid": "5784b6ca-5e9e-4bcf-8b54-c95459ea7369",
- "link": "https://learn.microsoft.com/azure/storage/files/storage-files-smb-multichannel-performance",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
+ "service": "AVS",
"services": [
- "Storage",
- "ACR",
- "Cost",
- "AVD"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Azure Files",
- "text": "Enable SMB multichannel when using a premium file share to host FSLogix profile containers.",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Limit use of CloudAdmin account to emergency access only",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "If a second region is required for DR purposes verify NetApp availability in there as well.",
- "guid": "4a359836-ee79-4d6c-9d3a-364a5b7abae3",
- "link": "https://azure.microsoft.com/global-infrastructure/services/",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Azure NetApp Files",
- "text": "If NetApp Files storage is required, check storage service availability in your specific region.",
- "waf": "Reliability"
+ "text": "Create custom RBAC roles in vCenter to implement a least-privilege model inside vCenter",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "CA option is a recommended setting in the FSLogix scenario, as it enables a more resilient SMB session between the Session Host and NetApp Files.",
- "guid": "a2661898-866a-4c8d-9d1f-8cfc86e88024",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/create-fslogix-profile-container",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Azure NetApp Files",
- "text": "If NetApp Files storage is used enable CA (Continuous Availability) option to increase resiliency",
- "waf": "Reliability"
+ "text": "Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX) credentials",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "An Active Directory Site should be created for the Azure virtual network environment where Azure NetApp Files (ANF) subnet will be created, and that site name should be specified in the ANF connection property when executing the join procedure as explained in the reference article.",
- "guid": "6647e977-db49-48a8-bc35-743f17499d42",
- "link": "https://docs.microsoft.com/azure/azure-netapp-files/create-active-directory-connections",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
"services": [
- "Storage",
- "VNet",
- "AVD"
+ "WAF",
+ "Entra",
+ "AVS",
+ "VM"
],
"severity": "High",
- "subcategory": "Azure NetApp Files",
- "text": "If Azure NetApp Files storage is used, check Active Directory Site name setting in the Active Directory Connection configuration",
- "waf": "Reliability"
+ "text": "Use a centralized identity provider to be used for workloads (VM's) running on Azure VMware Solution",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Possible options: Standard HDD, Standard SSD, or Premium SSD. Ephemeral disks are not supported, Ultra-Disks not recommended. Recommended to evaluate Premium for OS disk if user density is not low, and if Cloud Cache will be used. ",
- "guid": "3611c818-b0a0-4bc5-80e4-3a18a9cd289c",
- "link": "https://docs.microsoft.com/azure/virtual-machines/disks-types",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Capacity Planning",
- "text": "Determine which type of managed disk will be used for the Session Hosts",
- "waf": "Performance"
+ "text": "Is East-West traffic filtering implemented within NSX-T",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Possible options are: Azure NetApp Files, Azure Files, VM based File Server. File-server it is not recommended. Azure Files Premium typically a good starting point. NetApp usually required for large scale / high-performant environment. For a detailed comparison see the article in the 'More Info' column.",
- "guid": "ed6b17db-8255-4462-b2ae-e4553afc8339",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/store-fslogix-profile",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
+ "service": "AVS",
"services": [
- "Storage",
- "VM",
- "AVD"
+ "WAF",
+ "AppGW",
+ "AVS",
+ "Firewall"
],
"severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Determine which storage backend solution will be used for FSLogix Profiles",
- "waf": "Performance"
+ "text": "Workloads on Azure VMware Solution are not directly exposed to the internet. Traffic is filtered and inspected by Azure Application Gateway, Azure Firewall or 3rd party solutions",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Every Host Pool should use a separate set of storage accounts/volumes (at least one) and shares. Users should have a different profile for each Host Pool since settings and configurations are specific to each Host Pool. Additionally, accessing different Host Pools at the same time can cause errors on the shared user profile VHD/X. Usage of different storage accounts/volumes for multiple shares is also recommended to scale independently.",
- "guid": "2fad62bd-5004-453c-ace4-64d862e7f5a4",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/store-fslogix-profile",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "AVS"
],
"severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Do not share storage and profiles between different Host Pools",
- "waf": "Performance"
+ "text": "Auditing and logging is implemented for inbound internet requests to Azure VMware Solution and Azure VMware Solution based workloads",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "As a starting point for estimating profile container storage performance requirements we recommend to assume 10 IOPS per user in the steady state and 50 IOPS per user during sign-in/sign-out. Space requirements is simply obtained based on the maximum profiles size in FSLogix per the total number of users for each Host Pool. Multiple storage accounts can be used for the same Host Pool if required.",
- "guid": "680e7828-9c93-4665-9d02-bff4564b0d93",
- "link": "https://learn.microsoft.com/azure/virtual-desktop/faq#what-s-the-largest-profile-size-fslogix-can-handle-",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "Monitor",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Capacity Planning",
- "text": "Verify storage scalability limits and Host Pool requirements",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Session monitoring is implemented for outbound internet connections from Azure VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious activity",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Avoid introducing additional latency and costs associated with cross-region network traffic where possible.",
- "guid": "8aad53cc-79e2-4e86-9673-57c549675c5e",
- "link": "https://docs.microsoft.com/azure/virtual-desktop/fslogix-containers-azure-files",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "graph": "resources| where type =~ 'Microsoft.Network/virtualNetworkGateways'| mv-expand ipConfigurations=properties.ipConfigurations| project subnetId=tostring(ipConfigurations.properties.subnet.id)| where isnotempty(subnetId)| join (resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | project id, compliant = (enableDdosProtection == 'true')",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost",
- "AVD"
+ "VPN",
+ "WAF",
+ "ExpressRoute",
+ "DDoS",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Capacity Planning",
- "text": "For optimal performance, the storage solution and the FSLogix profile container should be in the same Azure region.",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Is DDoS standard protection enabled on ExR/VPN Gateway subnet in Azure",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "The recommendation in Azure Virtual Desktop is to use Profile Container without Office Container (ODFC) split unless you are planning for specific Business Continuity and Disaster Recovery (BCDR) scenarios as described in the Disaster Recovery section below. https://docs.microsoft.com/fslogix/profile-container-office-container-cncpt ",
- "guid": "df47d2d9-2881-4b1c-b5d1-e54a29759e39",
- "link": "https://learn.microsoft.com/fslogix/concepts-container-types#when-to-use-profile-and-odfc-containers",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
+ "service": "AVS",
"services": [
- "Storage",
- "ASR",
- "AVD"
+ "WAF",
+ "AVS"
],
- "severity": "High",
- "subcategory": "FSLogix",
- "text": "Do not use Office Containers (ODFC) if not strictly required and justified",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use a dedicated privileged access workstation (PAW) to manage Azure VMware Solution, vCenter, NSX manager and HCX manager",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Make sure to configure the following antivirus exclusions for FSLogix Profile Container virtual hard drives, as documented in the referenced article in the 'More Info' column.",
- "guid": "83f63047-22ee-479d-9b5c-3632054b69ba",
- "link": "https://learn.microsoft.com/fslogix/overview-prerequisites#configure-antivirus-file-and-folder-exclusions",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "AVS",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "FSLogix",
- "text": "Configure the recommended antivirus exclusions for FSLogix (includes not scanning VHD(x) files on connect).",
+ "text": "Enable Advanced Threat Detection (Microsoft Defender for Cloud aka ASC) for workloads running on Azure VMware Solution",
"waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Profile containers have a default max size of 30GB. If large Profile Containers are anticipated, and customers wants to try to keep them small, consider using OneDrive to host Office 365 files outside the FSLogix profile.",
- "guid": "01e6a84d-e5df-443d-8992-481718d5d1e5",
- "link": "https://docs.microsoft.com/fslogix/profile-container-configuration-reference",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF",
+ "Arc",
+ "AVS"
],
- "severity": "High",
- "subcategory": "FSLogix",
- "text": "Review and confirm configured maximum profile size in FSLogix",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "Use Azure ARC for Servers to properly govern workloads running on Azure VMware Solution using Azure native technologies (Azure ARC for Azure VMware Solution is not yet available)",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Defaults and recommended settings are reported in the companion article in the 'More Info' column. If not recommended keys and/or values must be used, be sure to review with a Microsoft AVD expert and clearly document your choices.",
- "guid": "d34aad5e-8c78-4e1d-9666-7313c405674c",
- "link": "https://learn.microsoft.com/fslogix/concepts-configuration-examples",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
+ "service": "AVS",
"services": [
- "Storage",
- "ACR",
- "AKV",
- "AVD"
+ "WAF",
+ "SQL",
+ "AVS"
+ ],
+ "severity": "Low",
+ "text": "Ensure workloads on Azure VMware Solution use sufficient data encryption during run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is default)",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
+ "service": "AVS",
+ "services": [
+ "WAF",
+ "AKV"
+ ],
+ "severity": "Low",
+ "text": "When in-guest encryption is used, store encryption keys in Azure Key vault when possible",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
+ "service": "AVS",
+ "services": [
+ "WAF",
+ "AVS"
+ ],
+ "severity": "Medium",
+ "text": "Consider using extended security update support for workloads running on Azure VMware Solution (Azure VMware Solution is eligible for ESU)",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
+ "service": "AVS",
+ "services": [
+ "WAF"
],
"severity": "High",
- "subcategory": "FSLogix",
- "text": "Review FSLogix registry keys and determine which ones to apply",
+ "text": "Ensure that the appropriate vSAN Data redundancy method is used (RAID specification)",
"waf": "Reliability"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Concurrent or multiple connections are not recommended in Azure Virtual Desktop. Concurrent connections are also not supported by Session Hosts running in an Azure Virtual Desktop Host Pool. OneDrive, if used, doesn't support concurrent or multiple connections using the same container, under any circumstance. For multiple connections, usage of the same profile disk is not recommended.",
- "guid": "5e985b85-9c77-43e7-b261-623b775a917e",
- "link": "https://learn.microsoft.com/fslogix/concepts-multi-concurrent-connections",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
+ "service": "AVS",
"services": [
+ "WAF",
"Storage",
- "AVD"
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "FSLogix",
- "text": "Avoid usage of concurrent or multiple connections",
+ "text": "Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage needs",
"waf": "Reliability"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "Cloud Cache uses OS drive as local cache storage and may generate lot of pressure on the VM disk. Depending on the VM SKU and size used, the VM temporary drive can be a viable and performant solution where to relocate Cloud Cache cached content. Before adopting this solution, tests should be executed to confirm performance and stability. More details on Cloud Cache can be found here: https://learn.microsoft.com/fslogix/concepts-fslogix-cloud-cache. ",
- "guid": "b2d1215a-e114-4ba3-9df5-85ecdcd9bd3b",
- "link": "https://docs.microsoft.com/fslogix/cloud-cache-configuration-reference",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
+ "service": "AVS",
"services": [
- "Storage",
- "VM",
- "AVD"
+ "WAF",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "FSLogix",
- "text": "If FSLogix Cloud Cache is used, consider moving the cache directory to the VM temporary drive.",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Ensure that you have requested enough quota, ensuring you have considered growth and Disaster Recovery requirement",
+ "waf": "Reliability"
},
{
- "category": "Storage",
- "checklist": "Azure Virtual Desktop Review",
- "description": "REDIRECTION.XML file is used to control what folders are redirected out of the profile container to the 'C:' drive. Exclusions should be the exception and should never be used unless the specific exclusion is completely understood by the person configuring the exclusion. Exclusions should always be fully tested in the environment where they are intended to be implemented. Configuring exclusions may impact functionality, stability and performance.",
- "guid": "0b50ca97-b1d2-473c-b4d9-6e98b0f912de",
- "link": "https://docs.microsoft.com/fslogix/manage-profile-content-cncpt#redirectionsxml",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
+ "service": "AVS",
"services": [
- "Storage",
- "AVD"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "FSLogix",
- "text": "Review the usage of FSLogix redirection.",
- "waf": "Cost"
+ "text": "Ensure that access constraints to ESXi are understood, there are access limits which might affect 3rd party solutions.",
+ "waf": "Operations"
},
{
- "category": "BCDR",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Ensure that your backups are protected against attacks. This should include encryption of the backups to protect against loss of confidentiality. For regular Azure service backup, backup data is automatically encrypted using Azure platform-managed keys. You can also choose to encrypt the backup using a customer-managed key. In this case, ensure this customer-managed key in the key vault is also in the backup scope.",
- "guid": "676f6951-0368-49e9-808d-c33a692c9a64",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/sql-database-security-baseline#br-2-encrypt-backup-data",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
+ "service": "AVS",
"services": [
- "Backup",
- "AKV",
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Azure Key Vault",
- "text": "Protect your backup data with encryption and store keys safely in Azure Key Vault",
- "waf": "Security"
+ "text": "Ensure that you have a policy around ESXi host density and efficiency, keeping in mind the lead time for requesting new nodes",
+ "waf": "Operations"
},
{
- "category": "BCDR",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Azure SQL Database uses SQL Server technology to create full backups every week, differential backup every 12-24 hours, and transaction log backup every 5 to 10 minutes. By default, SQL Database stores data in geo-redundant storage blobs that are replicated to a paired region.",
- "guid": "e2518261-b3bc-4bd1-b331-637fb2df833f",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/sql-database-security-baseline#br-1-ensure-regular-automated-backups",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
+ "service": "AVS",
"services": [
- "Storage",
- "Backup",
- "SQL"
+ "WAF",
+ "AVS",
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Configure Azure SQL Database automated backups",
- "waf": "Security"
+ "text": "Ensure a good cost management process is in place for Azure VMware Solution - Azure Cost Management can be used",
+ "waf": "Cost"
},
{
- "category": "BCDR",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "By default, SQL Database stores data in geo-redundant storage blobs that are replicated to a paired region. For SQL Database, the backup storage redundancy can be configured at the time of database creation or can be updated for an existing database; the changes made to an existing database apply to future backups only.",
- "guid": "f8c7cda2-3ed7-43fb-a100-85dcd12a0ee4",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/automated-backups-overview?tabs=single-database&view=azuresql#backup-storage-redundancy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
+ "service": "AVS",
"services": [
- "Storage",
- "Backup",
- "SQL"
+ "WAF",
+ "AVS",
+ "Cost"
],
"severity": "Low",
- "subcategory": "Backup",
- "text": "Enable geo-redundant backup storage to protect against single region failure and data loss",
- "waf": "Security"
+ "text": "Are Azure reserved instances used to optimize cost for using Azure VMware Solution",
+ "waf": "Cost"
},
{
- "category": "Code",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Malicious code can potentially circumvent security controls. Before deploying custom code to production, it is essential to review what's being deployed. Use a database tool like Azure Data Studio that supports source control. Implement tools and logic for code analysis, vulnerability and credential scanning.",
- "guid": "7ca9f006-d2a9-4652-951c-de8e4ac5e76e",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/transparent-data-encryption-byok-create-server",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Source Control and Code Review",
- "text": "Use Source Control systems to store, maintain and review application code deployed inside Azure SQLDB Database",
+ "text": "Consider the use of Azure Private-Link when using other Azure Native Services",
"waf": "Security"
},
{
- "category": "Data Discovery and Classification",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "In case of classification requirements Purview is the preferred option. Only use SQL Data Discovery & Classification in case Purview is not an option. Discover columns that potentially contain sensitive data. What is considered sensitive data heavily depends on the customer, compliance regulation, etc., and needs to be evaluated by the users in charge of that data. Classify the columns to use advanced sensitivity-based auditing and protection scenarios. Review results of automated discovery and finalize the classification if necessary.",
- "guid": "d401509b-2629-4484-9a7f-af0d29a7778f",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/data-discovery-and-classification-overview?view=azuresql#faq---advanced-classification-capabilities",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "Data Discovery and Classification",
- "text": "Plan and configure Data Discovery & Classification to protect the sensitive data",
- "waf": "Security"
+ "severity": "High",
+ "text": "Ensure all required resource reside within the same Azure availability zone(s)",
+ "waf": "Performance"
},
{
- "category": "Data Masking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Usage of this feature is recommended only if column encryption is not an option and there is a specific requirement to preserve data types and formats. Dynamic data masking limits sensitive data exposure by masking it to non-privileged users. Dynamic data masking helps prevent unauthorized access to sensitive data by enabling customers to designate how much of the sensitive data to reveal with minimal impact on the application layer.",
- "guid": "9391fd50-135e-453e-90a7-c1a23f88cc13",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/dynamic-data-masking-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "AVS",
+ "VM",
+ "Defender"
],
- "severity": "Low",
- "subcategory": "Data Masking",
- "text": "Use Data Masking to prevent unauthorized non-admin users data access if no encryption is possible",
+ "severity": "Medium",
+ "text": "Enable Microsoft Defender for Cloud for Azure VMware Solution guest VM workloads",
"waf": "Security"
},
{
- "category": "Defender",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "SQL Advanced Threat Detection (ATP) provides a layer of security that detects potential vulnerabilities and anomalous activity in databases such as SQL injection attacks and unusual behavior patterns. When a potential threat is detected Threat Detection sends an actionable real-time alert by email and in Microsoft Defender for Cloud, which includes clear investigation and remediation steps for the specific threat.",
- "guid": "4e52d73f-5d37-428f-b3a2-e6997e835979",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/threat-detection-configure",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
+ "service": "AVS",
"services": [
- "EventHubs",
- "Defender",
- "SQL"
+ "WAF",
+ "Arc",
+ "AVS",
+ "VM"
],
- "severity": "High",
- "subcategory": "Advanced Threat Protection",
- "text": "Review and complete Advanced Threat Protection (ATP) configuration",
+ "severity": "Medium",
+ "text": "Use Azure Arc enabled servers to manage your Azure VMware Solution guest VM workloads",
"waf": "Security"
},
{
- "category": "Defender",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Enable Microsoft Defender for Azure SQL at the subscription level to automatically onboard and protect all existing and future servers and databases. When you enable on the subscription level, all databases in Azure SQL Database and Azure SQL Managed Instance are protected. You can then disable them individually if you choose. If you want to manually manage which databases are protected, disable at the subscription level and enable each database that you want protected.",
- "guid": "dff87489-9edb-4cef-bdda-86e8212b2aa1",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/azure-defender-for-sql?view=azuresql#enable-microsoft-defender-for-sql ",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "service": "AVS",
"services": [
- "Subscriptions",
- "Defender",
- "SQL"
+ "WAF",
+ "AVS"
],
"severity": "High",
- "subcategory": "Defender for Azure SQL",
- "text": "Enable Microsoft Defender for Azure SQL",
- "waf": "Security"
+ "text": "Enable Diagnostic and metric logging on Azure VMware Solution",
+ "waf": "Operations"
},
{
- "category": "Defender",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Microsoft Defender for Azure SQL ATP detects anomalous activities indicating unusual and potentially harmful attempts to access or exploit databases. Alerts can be configured and generated and will be reported in the Defender for console.",
- "guid": "ca342fdf-d25a-4427-b105-fcd50ff8a0ea",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/threat-detection-configure",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "service": "AVS",
"services": [
+ "WAF",
"Monitor",
- "Defender",
- "SQL"
+ "AVS",
+ "VM"
],
- "severity": "High",
- "subcategory": "Defender for Azure SQL",
- "text": "Prepare a security response plan to promptly react to Microsoft Defender for Azure SQL alerts",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Deploy the Log Analytics Agents to Azure VMware Solution guest VM workloads",
+ "waf": "Operations"
},
{
- "category": "Defender",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Azure SQLDB vulnerability assessment is a service that provides visibility into your security state. Vulnerability assessment includes actionable steps to resolve security issues and enhance your database security. It can help you to monitor a dynamic database environment where changes are difficult to track and improve your SQL security posture.",
- "guid": "a6101ae7-534c-45ab-86fd-b34c55ea21ca",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/sql-azure-vulnerability-assessment-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
"services": [
- "Monitor",
- "Defender",
- "SQL"
+ "AzurePolicy",
+ "VM",
+ "WAF",
+ "AVS",
+ "Backup"
],
- "severity": "High",
- "subcategory": "Vulnerability Assessment",
- "text": "Configure Vulnerability Assessment (VA) findings and review recommendations",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Ensure you have a documented and implemented backup policy and solution for Azure VMware Solution VM workloads",
+ "waf": "Operations"
},
{
- "category": "Defender",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Microsoft Defender for Cloud provides vulnerability assessment for your Azure SQL Databases. Vulnerability assessment scans your databases for software vulnerabilities and provides a list of findings. You can use the findings to remediate software vulnerabilities and disable findings.",
- "guid": "c8c5f112-1e50-4f77-9264-8195b4cd61ac",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/sql-azure-vulnerability-assessment-find?view=azuresql",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
"services": [
- "Defender",
- "SQL"
+ "WAF",
+ "Monitor",
+ "AVS",
+ "Defender"
],
- "severity": "High",
- "subcategory": "Vulnerability Assessment",
- "text": "Regularly review of Vulnerability Assessment (VA) findings and recommendations and prepare a plan to fix",
+ "severity": "Medium",
+ "text": "Use Microsoft Defender for Cloud for compliance monitoring of workloads running on Azure VMware Solution",
"waf": "Security"
},
{
- "category": "Encryption",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Always Encrypted with Secure Enclaves expands confidential computing capabilities of Always Encrypted by enabling in-place encryption and richer confidential queries. Always Encrypted with Secure Enclaves addresses these limitations by allowing some computations on plaintext data inside a secure enclave on the server side. Usage of this feature is recommended for the cases where you need to limit administrator access and need your queries to support more than equality matching of encrypted columns.",
- "guid": "65d7e54a-10a6-4094-b673-9ff3809c9277",
- "link": "https://learn.microsoft.com/sql/relational-databases/security/encryption/always-encrypted-enclaves",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Always Encrypted",
- "text": "If protecting sensitive PII data from admin users is a key requirement, but Column Encryption limitations cannot be tolerated, consider the adoption of Always Encrypted with Secure Enclaves",
+ "text": "Are the applicable compliance baselines added to Microsoft Defender for Cloud",
"waf": "Security"
},
{
- "category": "Encryption",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "With Azure SQL Database, you can apply symmetric encryption to a column of data by using Transact-SQL. This approach is called column encryption, because you can use it to encrypt specific columns with different encryption keys. Doing so gives you more granular encryption capability than TDE, which encrypts data in pages. Using Always Encrypted to ensure sensitive data isn't exposed in plaintext in Azure SQL Database or SQL Managed Instance, even in memory/in use. Always Encrypted protects the data from Database Administrators (DBAs) and cloud admins (or bad actors who can impersonate high-privileged but unauthorized users) and gives you more control over who can access your data.",
- "guid": "c03ce136-e3d5-4e17-bf25-ed955ee480d3",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#control-access-of-application-users-to-sensitive-data-through-encryption",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
"services": [
- "Storage",
- "AKV",
- "SQL"
+ "WAF",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Column Encryption",
- "text": "To protect sensitive PII data from non-admin users in specific table columns, consider using Column Encryption",
+ "severity": "High",
+ "text": "Was data residency evaluated when selecting Azure regions to use for Azure VMware Solution deployment",
"waf": "Security"
},
{
- "category": "Encryption",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Enabled by default, Transparent data encryption (TDE) helps to protect the database files against information disclosure by performing real-time encryption and decryption of the database, associated backups, and transaction log files 'at rest', without requiring changes to the application.",
- "guid": "c614ac47-bebf-4061-b0a1-43e0c6b5e00d",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/transparent-data-encryption-byok-create-server",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
"services": [
- "Storage",
- "Backup",
- "SQL"
+ "WAF"
],
"severity": "High",
- "subcategory": "Transparent Data Encryption",
- "text": "Ensure Transparent Data Encryption (TDE) is kept enabled",
+ "text": "Are data processing implications (service provider / service consumer model) clear and documented",
"waf": "Security"
},
{
- "category": "Encryption",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "If separation of duties in the management of keys and data within the organization is required, leverage Customer Managed Keys (CMK) for Transparent Data Encryption (TDE) for your Azure SQLDB and use Azure Key Vault to store (refer to its checklist). Leverage this feature when you have strict security requirements which cannot be met by the managed service keys.",
- "guid": "2edb4165-4f54-47cc-a891-5c82c2f21e25",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/transparent-data-encryption-byok-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"services": [
- "AKV",
- "SQL"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Transparent Data Encryption",
- "text": "Use customer-managed keys (CMK) in Azure Key Vault (AKV) if you need increased transparency and granular control over the TDE protection",
+ "text": "Consider using CMK (Customer Managed Key) for vSAN only if needed for compliance reason(s).",
"waf": "Security"
},
{
- "category": "Encryption",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The minimal Transport Layer Security (TLS) version setting allows customers to choose which version of TLS their SQL database uses. It's possible to change the minimum TLS version by using the Azure portal, Azure PowerShell, and the Azure CLI.",
- "guid": "7754b605-57fd-4bcb-8213-52c39d8e8225",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/connectivity-settings?source=recommendations&view=azuresql&tabs=azure-portal#minimal-tls-version",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "Monitor",
+ "AVS"
],
"severity": "High",
- "subcategory": "Transport Layer Security",
- "text": "Enforce minimum TLS version to the latest available",
- "waf": "Security"
+ "text": "Create dashboards to enable core Azure VMware Solution monitoring insights",
+ "waf": "Operations"
},
{
- "category": "Identity",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Use Azure Active Directory (Azure AD) authentication for centralized identity management. Use SQL Authentication only if really necessary and document as exceptions.",
- "guid": "c9b8b6bf-2c6b-453d-b400-de9a43a549d7",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/authentication-aad-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
"services": [
- "Entra",
- "SQL"
+ "WAF",
+ "Monitor",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Azure Active Directory",
- "text": "Leverage Azure AD authentication for connections to Azure SQL Databases",
- "waf": "Security"
+ "severity": "High",
+ "text": "Create warning alerts for critical thresholds for automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
+ "waf": "Operations"
},
{
- "category": "Identity",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Using Azure AD groups simplifies permission management and both the group owner, and the resource owner can add/remove members to/from the group. Create a separate group for Azure AD administrators for each logical server. Monitor Azure AD group membership changes using Azure AD audit activity reports.",
- "guid": "29820254-1d14-4778-ae90-ff4aeba504a3",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#central-management-for-identities",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
"services": [
- "Entra",
+ "WAF",
"Monitor",
- "SQL"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Azure Active Directory",
- "text": "Create a separate Azure AD group with two admin accounts for each Azure SQL Database logical server",
- "waf": "Security"
+ "severity": "High",
+ "text": "Ensure critical alert is created to monitor if vSAN consumption is below 75% as this is a support threshold from VMware",
+ "waf": "Operations"
},
{
- "category": "Identity",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Ensure that distinct system and user assigned managed identities, that are dedicated to the function, with least permissions assigned, are used for communication from Azure services and applications to the Azure SQLDB databases.",
- "guid": "df3a09ee-03bb-4198-8637-d141acf5f289",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#minimize-the-use-of-password-based-authentication-for-applications",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "graph": "resources| distinct subscriptionId| join kind=leftouter( resources | where type =~ 'microsoft.insights/activitylogalerts' | mv-expand condition1 = properties.condition.allOf | mv-expand condition2 = condition1.anyOf | extend alertEnabled = tostring(properties.enabled) | summarize set_condition1=make_set(condition1.equals), set_condition2=make_set(condition2.equals) by id, name,type,tenantId,resourceGroup,subscriptionId, alertEnabled | where set_has_element(set_condition1, 'ServiceHealth') | extend category = 'ServiceHealth' | extend all = iff(set_has_element(set_condition1, 'ServiceHealth') and array_length(set_condition2) == 0, true, false) | extend incident = iff(all, true, iff(set_has_element(set_condition1, 'Incident'), true, set_has_element(set_condition2, 'Incident'))) | extend maintenance = iff(all, true, iff(set_has_element(set_condition1, 'Maintenance'), true, set_has_element(set_condition2, 'Maintenance'))) | extend informational = iff(all, true, iff(set_has_element(set_condition1, 'Informational') or set_has_element(set_condition1, 'ActionRequired'), true, set_has_element(set_condition2, 'Informational') or set_has_element(set_condition2, 'ActionRequired'))) | extend security = iff(all, true, iff(set_has_element(set_condition1, 'Security'), true, set_has_element(set_condition2, 'Security'))) | project id, name, subscriptionId, category, tostring(alertEnabled), tostring(incident), tostring(maintenance), tostring(informational), tostring(security) | summarize count_alertEnabled=countif(alertEnabled == 'true'), count_incident=countif(incident == 'True'), count_maintenance=countif(maintenance == 'True'), count_informational=countif(informational == 'True'), count_security=countif(security == 'True') by subscriptionId) on subscriptionId| project subscriptionId, alertEnabled=iff(isnotnull(count_alertEnabled), count_alertEnabled, 0), incident=iff(isnotnull(count_incident), count_incident, 0), security=iff(isnotnull(count_security), count_security, 0), maintenance=iff(isnotnull(count_maintenance), count_maintenance, 0), informational=iff(isnotnull(count_informational), count_informational, 0)| order by incident, maintenance, informational, security desc| project id=subscriptionId, compliant=(alertEnabled > 0 and incident > 0 and security > 0 and maintenance > 0 and informational > 0)",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
"services": [
- "Entra",
- "SQL"
+ "WAF",
+ "Monitor"
+ ],
+ "severity": "High",
+ "text": "Ensure alerts are configured for Azure Service Health alerts and notifications",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
+ "services": [
+ "WAF",
+ "AVS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Azure Active Directory",
- "text": "Minimize the use of password-based authentication for applications",
- "waf": "Security"
+ "text": "Configure Azure VMware Solution logging to be send to an Azure Storage account or Azure EventHub for processing",
+ "waf": "Operations"
},
{
- "category": "Identity",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "System or User assigned managed identities enable Azure SQLDB to authenticate to other cloud services (e.g. Azure Key Vault) without storing credentials in code. Once enabled, all necessary permissions can be granted via Azure role-based-access-control to the specific Azure SQLDB instance. Do not share user assigned managed identities across multiple services if not strictly required.",
- "guid": "69891194-5074-4e30-8f69-4efc3c580900",
- "link": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
"services": [
- "Entra",
- "RBAC",
- "AKV",
- "SQL",
- "ACR"
+ "WAF",
+ "AVS"
],
"severity": "Low",
- "subcategory": "Managed Identities",
- "text": "Assign Azure SQL Database a managed identity for outbound resource access",
- "waf": "Security"
+ "text": "If deep insight in VMware vSphere is required: Is vRealize Operations and/or vRealize Network Insights used in the solution?",
+ "waf": "Operations"
},
{
- "category": "Identity",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Use an Azure AD integrated authentication that eliminates the use of passwords. Password-based authentication methods are a weaker form of authentication. Credentials can be compromised or mistakenly given away. Use single sign-on authentication using Windows credentials. Federate the on-premises AD domain with Azure AD and use integrated Windows authentication (for domain-joined machines with Azure AD).",
- "guid": "88287d4a-8bb8-4640-ad78-03f51354d003",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/authentication-aad-configure?view=azuresql&tabs=azure-powershell#active-directory-integrated-authentication",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
"services": [
- "Entra",
- "SQL"
+ "WAF",
+ "Storage",
+ "AzurePolicy",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Passwords",
- "text": "Minimize the use of password-based authentication for users",
- "waf": "Security"
+ "severity": "High",
+ "text": "Ensure the vSAN storage policy for VM's is NOT the default storage policy as this policy applies thick provisioning",
+ "waf": "Operations"
},
{
- "category": "Ledger",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The hash of the latest block in the database ledger is called the database digest. It represents the state of all ledger tables in the database at the time when the block was generated. Generating a database digest is efficient, because it involves computing only the hashes of the blocks that were recently appended. Azure Confidential Ledger is one of the supported store, it can be used and supports automatic generation and storage of database digests. Azure Ledger provides advanced security features like Blockchain Ledger Proof and Confidential Hardware Enclaves. Use it only if advanced security features are required, otherwise revert to Azure storage.",
- "guid": "0e853380-50ba-4bce-b2fd-5c7391c85ecc",
- "link": "https://learn.microsoft.com/azure/architecture/guide/technology-choices/multiparty-computing-service#confidential-ledger-and-azure-blob-storage",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
"services": [
- "Storage",
- "SQL"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Database Digest",
- "text": "Use Azure Confidential Ledger to store database digests only if advanced security features are required",
- "waf": "Security"
+ "text": "Ensure vSphere content libraries are not placed on vSAN as vSAN is a finite resource",
+ "waf": "Operations"
},
{
- "category": "Ledger",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The hash of the latest block in the database ledger is called the database digest. It represents the state of all ledger tables in the database at the time when the block was generated. Generating a database digest is efficient, because it involves computing only the hashes of the blocks that were recently appended. Azure Blob Storage with Immutable Storage feature can be used and supports automatic generation and storage of database digests. To prevent tampering of your digest files, configure and lock a retention policy for your container.",
- "guid": "afefb2d3-95da-4ac9-acf5-33d18b32ef9a",
- "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-digest-management",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
"services": [
+ "WAF",
"Storage",
- "AzurePolicy",
- "SQL"
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Database Digest",
- "text": "If Azure storage account is used to store database digests, ensure security is properly configured",
- "waf": "Security"
- },
- {
- "category": "Ledger",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Ledger provides a form of data integrity called forward integrity, which provides evidence of data tampering on data in your ledger tables. The database verification process takes as input one or more previously generated database digests. It then recomputes the hashes stored in the database ledger based on the current state of the ledger tables. If the computed hashes don't match the input digests, the verification fails. The failure indicates that the data has been tampered with. The verification process reports all inconsistencies that it detects.",
- "guid": "f8d4ffda-8aac-4cc6-b72b-c81cb8625420",
- "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-database-verification",
- "services": [
- "Storage",
- "SQL"
- ],
- "severity": "Medium",
- "subcategory": "Integrity",
- "text": "Schedule the Ledger verification process regularly to verify data integrity",
- "waf": "Security"
+ "text": "Ensure data repositories for the backup solution are stored outside of vSAN storage. Either in Azure native or on a disk pool-backed datastore",
+ "waf": "Operations"
},
{
- "category": "Ledger",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The Ledger feature provides tamper-evidence capabilities in your database. You can cryptographically attest to other parties, such as auditors or other business parties, that your data hasn't been tampered with. Ledger helps protect data from any attacker or high-privileged user, including database administrators (DBAs), system administrators, and cloud administrators.",
- "guid": "2563f498-e2d3-42ea-9e7b-5517881a06a2",
- "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "Arc",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Ledger",
- "text": "If cryptographic proof of data integrity is a critical requirement, Ledger feature should be considered",
- "waf": "Security"
+ "text": "Ensure workloads running on Azure VMware Solution are hybrid managed using Azure Arc for Servers (Arc for Azure VMware Solution is in preview)",
+ "waf": "Operations"
},
{
- "category": "Ledger",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Depending on the type of tampering, there are cases where you can repair the ledger without losing data. In the article contained in the --More Info-- column, different scenarios and recovery techniques are described.",
- "guid": "804fc554-6554-4842-91c1-713b32f99902",
- "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-how-to-recover-after-tampering",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Recovery",
- "text": "Prepare a response plan to investigate and repair a database after a tampering event",
- "waf": "Security"
+ "text": "Ensure workloads running on Azure VMware Solution are monitored using Azure Log Analytics and Azure Monitor",
+ "waf": "Operations"
},
{
- "category": "Logging",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Azure SQL Database Auditing tracks database events and writes them to an audit log in your Azure storage account. Auditing helps you understand database activity and gain insight into discrepancies and anomalies that could indicate business concerns or suspected security violations as well as helps you meet regulatory compliance. By default auditing policy includes all actions (queries, stored procedures and successful and failed logins) against the databases, which may result in high volume of audit logs. It's recommended for customers to configure auditing for different types of actions and action groups using PowerShell.",
- "guid": "4082e31d-35f4-4a49-8507-d3172cc930a6",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/auditing-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
"services": [
- "Storage",
- "AzurePolicy",
- "SQL"
+ "WAF",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Auditing",
- "text": "Ensure that Azure SQL Database Auditing is enabled at the server level",
- "waf": "Security"
+ "text": "Include workloads running on Azure VMware Solution in existing update management tooling or in Azure Update Management",
+ "waf": "Operations"
},
{
- "category": "Logging",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Azure SQL Database Auditing logs can be written to external storage accounts, Log Analytics workspace or Event Hub. Be sure to protect the target repository using backups and secured configuration. Use Azure SQL Database Managed Identity to access the storage and set an explicit retention period. Do not grant permissions to administrators to the audit log repository. Use a different target storage for --Enabling Auditing of Microsoft support operations--. ",
- "guid": "9b64bc50-b60f-4035-bf7a-28c4806dfb46",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/auditing-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
"services": [
- "Storage",
- "Entra",
- "Backup",
- "EventHubs",
- "SQL",
- "Monitor"
+ "WAF",
+ "Monitor",
+ "AVS",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Auditing",
- "text": "Ensure that Azure SQL Database Auditing logs are backed up and secured in the selected repository type",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management, Monitoring and Security solutions",
+ "waf": "Operations"
},
{
- "category": "Logging",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The Azure Monitor activity log is a platform log in Azure that provides insight into subscription-level events. The activity log includes information like when a resource is modified. It is recommended to send this activity log to the same external storage repository as the Azure SQL Database Audit Log (storage account, Log Analytics workspace, Event Hub).",
- "guid": "fcd34708-87ac-4efc-aaf6-57a47f76644a",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
"services": [
- "Storage",
- "Subscriptions",
- "EventHubs",
- "SQL",
- "Monitor"
+ "WAF",
+ "AVS",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Auditing",
- "text": "Ensure that Azure SQL Database Activity Log is collected and integrated with Auditing logs",
+ "text": "Ensure workloads running on Azure VMware Solution are onboarded to Microsoft Defender for Cloud",
"waf": "Security"
},
{
- "category": "Logging",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Forward any logs from Azure SQL to your Security Information and Event Management (SIEM) and Security Orchestration Automation and Response (SOAR). Ensure that you are monitoring different types of Azure assets for potential threats and anomalies. Focus on getting high-quality alerts to reduce false positives for analysts to sort through. Alerts can be sourced from log data, agents, or other data.",
- "guid": "f96e127e-9572-453a-b325-ff89ae9f6b44",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/auditing-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
"services": [
- "Monitor",
- "SQL"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "SIEM/SOAR",
- "text": "Ensure that Azure SQL Database Auditing logs are being presented in to your organizations SIEM/SOAR",
- "waf": "Security"
+ "text": "Ensure backups are not stored on vSAN as vSAN is a finite resource",
+ "waf": "Reliability"
},
{
- "category": "Logging",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Forward any logs from Azure SQL to your Security Information and Event Management (SIEM) and Security Orchestration Automation and Response (SOAR), which can be used to set up custom threat detections. Ensure that you are monitoring different types of Azure assets for potential threats and anomalies. Focus on getting high-quality alerts to reduce false positives for analysts to sort through. Alerts can be sourced from log data, agents, or other data.",
- "guid": "41503bf8-73da-4a10-af9f-5f7fceb5456f",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
"services": [
- "Monitor",
- "SQL"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "SIEM/SOAR",
- "text": "Ensure that Azure SQL Database Activity Log data is presented in to your SIEM/SOAR",
- "waf": "Security"
+ "text": "Have all DR solutions been considered and a solution that is best for your business been decided upon? [SRM/JetStream/Zerto/Veeam/...]",
+ "waf": "Reliability"
},
{
- "category": "Logging",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Security Operation Center (SOC) team should create an incident response plan (playbooks or manual responses) to investigate and mitigate tampering, malicious activities, and other anomalous behaviors.",
- "guid": "19ec7c97-c563-4e1d-82f0-54d6ec12e754",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
"services": [
- "EventHubs",
- "SQL"
+ "WAF",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "SIEM/SOAR",
- "text": "Ensure that you have response plans for malicious or aberrant audit logging events",
- "waf": "Security"
+ "text": "Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "When you create a logical server from the Azure portal for Azure SQL Database, the result is a public endpoint that is visible and reachable over the public network (Public Access). You can then limit connectivity based on firewall rules and Service Endpoint. You can also configure private connectivity only limiting connections to internal networks using Private Endpoint (Private Access). Private Access using Private Endpoint should be the default unless a business case or performance/technical reason applies that cannot support it. Usage of Private Endpoints has performance implications that need to be considered and assessed.",
- "guid": "2c6d356a-1784-475b-a42c-ec187dc8c925",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
"services": [
- "PrivateLink",
- "SQL"
+ "WAF"
],
"severity": "High",
- "subcategory": "Connectivity",
- "text": "Review Public vs. Private Access connectivity methods and select the appropriate one for the workload",
- "waf": "Security"
+ "text": "Use Automated recovery plans with either of the Disaster solutions, avoid manual tasks as much as possible",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "IMPORTANT: Connections to private endpoint only support Proxy as the connection policy. When using private endpoints connections are proxied via the Azure SQL Database gateway to the database nodes. Clients will not have a direct connection.",
- "guid": "557b3ce5-bada-4296-8d52-a2d447bc1718",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/connectivity-architecture",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
"services": [
- "AzurePolicy",
- "PrivateLink",
- "SQL"
+ "WAF",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "Connectivity",
- "text": "Keep default Azure SQL Database Connection Policy if not differently required and justified",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use the geopolitical region pair as the secondary disaster recovery environment",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "This option configures the firewall to allow all connections from Azure, including connections from the subscriptions of other customers. If you select this option, make sure that your login and user permissions limit access to authorized users only. If not strictly required, keep this setting to OFF.",
- "guid": "f48efacf-4405-4e8d-9dd0-16c5302ed082",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
"services": [
- "Subscriptions",
- "SQL"
+ "WAF"
],
"severity": "High",
- "subcategory": "Connectivity",
- "text": "Ensure Allow Azure Services and Resources to Access this Server setting is disabled in Azure SQL Database firewall",
- "waf": "Security"
+ "text": "Use 2 different address spaces between the regions, for example: 10.0.0.0/16 and 192.168.0.0/16 for the different regions",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Azure SQL Database has a new built-in feature that allows native integration with external REST endpoints. This means that integration of Azure SQL Database with Azure Functions, Azure Logic Apps, Cognitive Services, Event Hubs, Event Grid, Azure Containers, API Management and in general any REST or even GraphQL endpoint. If not properly restricted, code inside an Azure SQL Database database could leverage this mechanism to exfiltrate data. If not strictly required, it is recommended to block or restrict this feature using Outbound Firewall Rules.",
- "guid": "cb3274a7-e36d-46f6-8de5-46d30c8dde8e",
- "link": "https://learn.microsoft.com/sql/relational-databases/system-stored-procedures/sp-invoke-external-rest-endpoint-transact-sql",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"services": [
- "EventHubs",
- "APIM",
- "SQL"
+ "WAF",
+ "ExpressRoute",
+ "AVS",
+ "NVA"
],
"severity": "Medium",
- "subcategory": "Outbound Control",
- "text": "Block or restrict outbound REST API calls to external endpoints",
- "waf": "Security"
+ "text": "Will ExpressRoute Global Reach be used for connectivity between the primary and secondary Azure VMware Solution Private Clouds or is routing done through network virtual appliances?",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Outbound firewall rules limit network traffic from the Azure SQL Database logical server to a customer defined list of Azure Storage accounts and Azure SQL Database logical servers. Any attempt to access storage accounts or databases not in this list is denied.",
- "guid": "a566dd3d-314e-4a94-9378-102c42d82b38",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/outbound-firewall-rule-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Outbound Control",
- "text": "If outbound network access is required, it is recommended to configure outbound networking restrictions using built-in Azure SQL Database control feature",
- "waf": "Security"
+ "text": "Have all Backup solutions been considered and a solution that is best for your business been decided upon? [ MABS/CommVault/Metallic.io/Veeam/�. ]",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Private Endpoint is created inside a subnet in an Azure Virtual Network. Proper security configuration must be applied also to the containing network environment, including NSG/ASG, UDR, firewall, monitoring and auditing.",
- "guid": "246cd832-f550-4af0-9c74-ca9baeeb8860",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/private-endpoint-overview?view=azuresql#disable-public-access-to-your-logical-server",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
"services": [
- "VNet",
- "Firewall",
- "SQL",
- "Monitor",
- "PrivateLink"
+ "WAF",
+ "AVS",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Private Access",
- "text": "If Private Access connectivity is used, ensure that you are using the Private Endpoint, Azure Virtual Network, Azure Firewall, and Azure Network Security Group checklists",
- "waf": "Security"
+ "text": "Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "When adding a Private Endpoint connection, public routing to your logical server isn't blocked by default. In the --Firewall and virtual networks-- pane, the setting --Deny public network access-- is not selected by default. To disable public network access, ensure that you select --Deny public network access--.",
- "guid": "3a0808ee-ea7a-47ab-bdce-920a6a2b3881",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/private-endpoint-overview?view=azuresql#disable-public-access-to-your-logical-server",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
"services": [
- "VNet",
- "PrivateLink",
- "SQL"
+ "WAF",
+ "Backup"
],
- "severity": "High",
- "subcategory": "Private Access",
- "text": "If Private Endpoint (Private Access) is used, consider disabling Public Access connectivity",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Deploy your backup solution outside of vSan, on Azure native components",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Network Security Group (NSG) and Application Security Group (ASG) can be now applied to subnet containing Private Endpoints to restrict connections to Azure SQLDB based on internal source IP ranges.",
- "guid": "8600527e-e8c4-4424-90ef-1f0dca0224f2",
- "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview#network-security-of-private-endpoints",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
"services": [
- "VNet",
- "PrivateLink",
- "SQL"
+ "WAF",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Private Access",
- "text": "If Private Endpoint (Private Access) is used, apply NSG and eventually ASG to limit incoming source IP address ranges",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Is a process in place to request a restore of the VMware components managed by the Azure Platform?",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "A Managed Instance (SQL MI) can be isolated inside a virtual network to prevent external access. Applications and tools that are in the same or peered virtual network in the same region could access it directly. Applications and tools that are in different region could use virtual-network-to-virtual-network connection or ExpressRoute circuit peering to establish connection. Customer should use Network Security Groups (NSG), and eventually internal firewalls, to restrict access over port 1433 only to resources that require access to a managed instance.",
- "guid": "18123ef4-a0a6-45e3-87fe-7f454f65d975",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/connectivity-architecture-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
"services": [
- "VNet",
- "ExpressRoute",
- "SQL"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Private Access",
- "text": "Apply Network Security Groups (NSG) and firewall rules to restrict access to Azure SQL Managed Instance internal subnet",
- "waf": "Security"
+ "severity": "Low",
+ "text": "For manual deployments, all configuration and deployments must be documented",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Azure Virtual Network Service Endpoint is preferred solution if you want to establish a direct connection to the Azure SQL Database backend nodes using Redirect policy. This will allow access in high performance mode and is the recommended approach from a performance perspective.",
- "guid": "55187443-6852-4fbd-99c6-ce303597ca7f",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview?view=azuresql#ip-vs-virtual-network-firewall-rules",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
"services": [
- "VNet",
- "AzurePolicy",
- "SQL"
+ "WAF",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Public Access",
- "text": "If Public Access connectivity is used, leverage Service Endpoint to restrict access from selected Azure Virtual Networks",
- "waf": "Security"
+ "severity": "Low",
+ "text": "For manual deployments, consider implementing resource locks to prevent accidental actions on your Azure VMware Solution Private Cloud",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The Azure SQL Database firewall allows you to specify IP address ranges from which communications are accepted. This approach is fine for stable IP addresses that are outside the Azure private network.",
- "guid": "a73e32da-b3f4-4960-b5ec-2f42a557bf31",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
"services": [
- "Storage",
- "SQL"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Public Access",
- "text": "If Public Access connectivity is used, ensure that only specific known IPs are added to the firewall",
- "waf": "Security"
+ "severity": "Low",
+ "text": "For automated deployments, deploy a minimal private cloud and scale as needed",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "We recommend that you use database-level IP firewall rules whenever possible. This practice enhances security and makes your database more portable. Use server-level IP firewall rules for administrators. Also use them when you have many databases that have the same access requirements, and you don't want to configure each database individually.",
- "guid": "e0f31ac9-35c8-4bfd-9865-edb60ffc6768",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/firewall-configure",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
"services": [
- "Storage",
- "SQL"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Public Access",
- "text": "If Public Access connectivity is used and controlled by Azure SQL Database firewall rules, use database-level over server-level IP rules",
- "waf": "Security"
+ "text": "For automated deployments, request or reserve quota prior to starting the deployment",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "A Managed Instance (SQL MI) can be isolated inside a virtual network to prevent external access. The Managed Instance public endpoint is not enabled by default, must be explicitly enabled, only if strictly required. If company policy disallows the use of public endpoints, use Azure Policy to prevent enabling public endpoints in the first place.",
- "guid": "b8435656-143e-41a8-9922-61d34edb751a",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/public-endpoint-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
"services": [
- "VNet",
- "AzurePolicy",
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Public Access",
- "text": "Do not enable Azure SQL Managed Instance public endpoint",
- "waf": "Security"
+ "severity": "Low",
+ "text": "For automated deployment, ensure that relevant resource locks are created through the automation or through Azure Policy for proper governance",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "A Managed Instance (SQL MI) public endpoint is not enabled by default, must be explicitly enabled, only if strictly required. In this case, it is recommended to apply a Network Security Groups (NSG) to restrict access to port 3342 only to trusted source IP addresses.",
- "guid": "057dd298-8726-4aa6-b590-1f81d2e30421",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/public-endpoint-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
"services": [
- "VNet",
- "SQL"
+ "WAF",
+ "AKV"
],
- "severity": "High",
- "subcategory": "Public Access",
- "text": "Restrict access if Azure SQL Managed Instance public endpoint is required",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Implement human understandable names for ExR authorization keys to allow for easy identification of the keys purpose/use",
+ "waf": "Operations"
},
{
- "category": "Privileged Access",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Most operations, support, and troubleshooting performed by Microsoft personnel and sub-processors do not require access to customer data. In those rare circumstances where such access is required, Customer Lockbox for Microsoft Azure provides an interface for customers to review and approve or reject customer data access requests. In support scenarios where Microsoft needs to access customer data, Azure SQL Database supports Customer Lockbox to provide an interface for you to review and approve or reject customer data access requests.",
- "guid": "37b6eb0f-553d-488f-8a8a-cb9bf97388ff",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "AKV",
+ "ExpressRoute",
+ "AVS"
],
"severity": "Low",
- "subcategory": "Lockbox",
- "text": "Review and enable Customer Lockbox for Azure SQL Database access by Microsoft personnel",
- "waf": "Security"
+ "text": "Use Key vault to store secrets and authorization keys when separate Service Principles are used for deploying Azure VMware Solution and ExpressRoute",
+ "waf": "Operations"
},
{
- "category": "Privileged Access",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "The principle of least privilege states that users shouldn't have more privileges than needed to complete their tasks. High-privileged database and server users can perform many configuration and maintenance activities on the database and can also drop databases in Azure SQL instance. Tracking database owners and privileged accounts is important to avoid having excessive permission.",
- "guid": "5fe5281f-f0f9-4842-a682-8baf18bd8316",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#implement-principle-of-least-privilege",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
"services": [
- "SQL"
+ "WAF",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Permissions",
- "text": "Ensure that users are assigned the minimum level of access necessarily to complete their job functions",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Define resource dependencies for serializing actions in IaC when many resources need to be deployed in/on Azure VMware Solution as Azure VMware Solution only supports a limited number of parallel operations.",
+ "waf": "Operations"
},
{
- "category": "Privileged Access",
- "checklist": "Azure SQLDB Security Checklist (Preview)",
- "description": "Identities (both Users and SPNs) should be scoped to the least amount of access needed to perform the function. A higher number of tightly scoped SPNs should be used, instead of having one SPN with multiple sets of unrelated permissions. For example, if there are three external web applications hosted on-prem that make queries to the Azure SQL Database, they should not all use the same SPN for these activities. Instead, they should each have their own tightly scoped SPN.",
- "guid": "7b5b55e5-4750-4920-be97-eb726c256a5c",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/sql-database-security-baseline#im-3-use-azure-ad-single-sign-on-sso-for-application-access",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
"services": [
- "Entra",
- "SQL"
+ "WAF"
],
"severity": "Low",
- "subcategory": "Permissions",
- "text": "Ensure that distinct applications will be assigned different credentials with minimal permissions to access Azure SQL Database",
- "waf": "Security"
+ "text": "When performing automated configuration of NSX-T segments with a single Tier-1 gateway, use Azure Portal APIs instead of NSX-Manager APIs",
+ "waf": "Operations"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure data repositories for the backup solution are stored outside of vSAN storage. Either in Azure native or on a disk pool-backed datastore",
- "guid": "976f32a7-30d1-6caa-c2a0-207fdc26571b",
- "link": "https://learn.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
"services": [
- "Storage",
+ "WAF",
"AVS",
- "Backup"
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Ensure backups are not stored on vSAN as vSAN is a finite resource",
- "waf": "Reliability"
+ "text": "When intending to use automated scale-out, be sure to apply for sufficient Azure VMware Solution quota for the subscriptions running Azure VMware Solution",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Microsoft backup service",
- "guid": "fc8af7a1-c724-e255-c18d-4ca22a6f27f0",
- "link": "https://docs.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
"services": [
- "AVS",
- "Backup"
+ "WAF",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Use MABS as your backup solution",
- "waf": "Reliability"
+ "text": "When intending to use automated scale-in, be sure to take storage policy requirements into account before performing such action",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Best practice - this is Backup, not disaster recovery",
- "guid": "be28860f-3d29-a79a-1a0e-36f1b23b36ae",
- "link": "Best practice to deploy backup in the same region as your AVS deployment",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS",
- "Backup"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
- "waf": "Reliability"
+ "text": "Scaling operations always need to be serialized within a single SDDC as only one scale operation can be performed at a time (even when multiple clusters are used)",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Best practice - in case AVS is unavailable",
- "guid": "4d2f79a5-4ccf-0dfc-557c-49619b99a540",
- "link": "https://docs.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Preferably deploy MABS outside of the SDDC as native Azure IaaS",
- "waf": "Reliability"
+ "text": "Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Is a process in place to request a restore of the VMware components managed by the Azure Platform?",
- "guid": "ff431c40-962c-5182-d536-0c2f0c4ce9e0",
- "link": "Will Disaster Recovery Site Recovery, HCX Disaster Recovery, SRM or back tools be used?",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Escalation process with Microsoft in the event of a regional DR",
- "waf": "Reliability"
+ "text": "Define and enforce scale in/out maximum limits for your environment in the automations",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Compare SRM with HCX",
- "guid": "f379436d-3051-daa0-01fb-dc4e0e04d677",
- "link": "https://docs.microsoft.com/azure/azure-vmware/disaster-recovery-using-vmware-site-recovery-manager",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Use VMware Site Recovery Manager when both sites are Azure VMware Solution",
- "waf": "Reliability"
+ "text": "Implement monitoring rules to monitor automated scaling operations and monitor success and failure to enable appropriate (automated) responses",
+ "waf": "Operations"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Recovery into Azure instead of Vmware solution",
- "guid": "367f71d8-3cf6-51a0-91a5-3db3d570cc19",
- "link": "https://docs.microsoft.com/azure/site-recovery/avs-tutorial-prepare-azure",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS"
+ "WAF",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
+ "severity": "High",
+ "text": "When using MON, be aware of the limits of simulataneously configured VMs (MON Limit for HCX [400 - standard, 1000 - Larger appliance])",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "Reliability"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Avoid manual tasks as much as possible",
- "guid": "ee02ada0-1887-bb3a-b84c-423f45a09ef9",
- "link": "https://docs.microsoft.com/azure/site-recovery/avs-tutorial-prepare-azure",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Use Automated recovery plans with either of the Disaster solutions,",
+ "severity": "High",
+ "text": "When using MON, you cannot enable MON on more than 100 Network extensions",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Reliability"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Any other datacenter in the same region",
- "guid": "0c2b74e5-9c28-780d-1df3-12d3de4aaa76",
- "link": "https://docs.microsoft.com/azure/azure-vmware/connect-multiple-private-clouds-same-region",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS"
+ "WAF",
+ "VPN"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Configure a secondary disaster recovery environment",
- "waf": "Reliability"
+ "text": "If using a VPN connection for migrations, adjust your MTU size accordingly.",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use 2 different address spaces between the regions, for example: 10.0.0.0/16 and 192.168.0.0/16 for the different regions",
- "guid": "c2a34ec4-2933-4e6c-dc36-e20e67abbe3f",
- "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Assign IP ranges unique to each region",
- "waf": "Reliability"
+ "text": "For low connectivity regions connecting into Azure (500Mbps or less), considering deploying the HCX WAN optimization appliance",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "ExpressRoute Global Reach can be used for connectivity between the primary and secondary Azure VMware Solution Private Clouds or routing must be done through network virtual appliances?",
- "guid": "b44fb6ec-bfc1-3a8e-dba2-ca97f0991d2c",
- "link": "This depends if you have multiple AVS Private Clouds. If so and they are in the same region then use AVS Interconnect. If they are in separate regions then use ExpressRoute Global Reach.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
"services": [
- "ASR",
- "AVS",
- "ExpressRoute",
- "NVA"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Use Global Reach between DR regions",
+ "text": "Ensure that migrations are started from the on-premises appliance and NOT from the Cloud appliance (do NOT perform a reverse migration)",
"waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "An ExR Global Reach connection will be established to the ExR circuit, no other connections",
- "guid": "a2c12df2-07fa-3edd-2cec-fda0b55fb952",
- "link": "https://learn.microsoft.com/azure/azure-vmware/tutorial-expressroute-global-reach-private-cloud",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
"services": [
+ "WAF",
"AVS",
- "VWAN"
+ "VM",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Direct (no vWAN, no H&S)",
- "text": "Global Reach to ExR circuit - no Azure resources",
- "waf": "Performance"
+ "text": "When Azure Netapp Files is used to extend storage for Azure VMware Solution,consider using this as a VMware datastore instead of attaching directly to a VM.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use ExR to connect on-premises (other) location to Azure",
- "guid": "f62ce162-ba5a-429d-674e-fafa1af5f706",
- "link": "https://learn.microsoft.com/azure/azure-vmware/tutorial-expressroute-global-reach-private-cloud",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"services": [
- "AVS",
- "ExpressRoute"
+ "WAF",
+ "ExpressRoute",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "ExpressRoute",
- "text": "Connect to Azure using ExR",
- "waf": "Performance"
+ "text": "Ensure that a dedicated ExpressRoute Gateway is being used for external data storage solutions",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use the migration assesment tool and timeline to determine bandwidth required",
- "guid": "cf01c73b-1247-0a7a-740c-e1ea29bda340",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-introduction",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
"services": [
- "AVS",
- "ExpressRoute"
+ "WAF",
+ "ExpressRoute",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "ExpressRoute",
- "text": "Bandwidth sizing",
- "waf": "Performance"
+ "text": "Ensure that FastPath is enabled on the ExpressRoute Gateway that is being used for external data storage solutions",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "What traffic is routed through a firewall, what goes directly into Azure",
- "guid": "aab216ee-8941-315e-eada-c7e1f2243bd1",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/azure-vmware-solution-foundation-networking",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
"services": [
- "AVS",
- "ExpressRoute"
+ "WAF",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "ExpressRoute",
- "text": "Traffic routing ",
- "waf": "Performance"
+ "severity": "High",
+ "text": "If using stretched cluster, ensure that your selected Disaster Recovery solution is supported by the vendor",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "AVS to ExR circuit, no traffic inspection",
- "guid": "1f956e45-f62d-5c95-3a95-3bab718907f8",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/azure-vmware-solution-foundation-networking",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
"services": [
- "AVS",
- "ExpressRoute"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "ExpressRoute",
- "text": "Global Reach ",
- "waf": "Performance"
+ "severity": "High",
+ "text": "If using stretched cluster, ensure that the SLA provided will meet your requirements",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Name of the vNet and a unique address space /24 minimum",
- "guid": "91f7a87b-21ac-d712-959c-8df2ba034253",
- "link": "https://learn.microsoft.com/azure/virtual-network/quick-create-portal",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
"services": [
- "VNet",
- "AVS"
+ "WAF",
+ "ExpressRoute"
],
- "severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "VNet name & address space",
- "waf": "Performance"
+ "severity": "High",
+ "text": "If using stretched cluster, ensure that both ExpressRoute circuits are connected to your connectivity hub.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Subnet must be called GatewaySubnet",
- "guid": "58a027e2-f37f-b540-45d5-e44843aba26b",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
"services": [
- "VPN",
- "VNet",
- "AVS",
+ "WAF",
"ExpressRoute"
],
- "severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "Gateway subnet",
- "waf": "Performance"
+ "severity": "High",
+ "text": "If using stretched cluster, ensure that both ExpressRoute circuits have GlobalReach enabled.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Create a VPN gateway on the hub Gateway subnet",
- "guid": "d4806549-0913-3e79-b580-ac2d3706e65a",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "WAF checklist",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
"services": [
- "VPN",
- "VNet",
- "AVS",
- "ExpressRoute"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "VPN Gateway",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Have site disaster tolerance settings been properly considered and changed for your business if needed.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Create an ExR Gateway in the hub Gateway subnet.",
- "guid": "864d7a8b-7016-c769-a717-61af6bfb73d2",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "WAF checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
"services": [
- "VPN",
- "VNet",
- "AVS",
- "ExpressRoute"
+ "WAF",
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "ExR Gateway",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Enable zone redundancy for Azure Cache for Redis. Azure Cache for Redis supports zone redundant configurations in the Premium and Enterprise tiers. A zone redundant cache can place its nodes across different Azure Availability Zones in the same region. It eliminates data center or AZ outage as a single point of failure and increases the overall availability of your cache.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "How will Internet traffic be routes, Az Firewall, NVA, Secure Hub, On-Premises firewall?",
- "guid": "cc2e11b9-7911-7da1-458c-d7fcef794aad",
- "link": "https://learn.microsoft.com/azure/azure-vmware/enable-public-internet-access",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "WAF checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
"services": [
- "AVS",
- "NVA"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Internet",
- "text": "Egress point",
- "waf": "Performance"
+ "text": "Configure data persistence for an Azure Cache for Redis instance. Because your cache data is stored in memory, a rare and unplanned failure of multiple nodes can cause all the data to be dropped. To avoid losing data completely, Redis persistence allows you to take periodic snapshots of in-memory data, and store it to your storage account.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Allow remote connectivity to AVS via the portal, specifically to vCenter, NSX-T and HCX",
- "guid": "71e68ce3-982e-5e56-0191-01100ad0e66f",
- "link": "https://learn.microsoft.com/answers/questions/171195/how-to-create-jump-server-in-azure-not-bastion-paa.html",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "WAF checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
"services": [
- "AVS",
- "Bastion"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Jumpbox & Bastion",
- "text": "Remote connectivity to AVS",
- "waf": "Performance"
+ "text": "Use Geo-redundant storage account to persist Azure Cache for Redis data, or zonally redundant where geo-redundancy is not available",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Name the jumpbox and identify the subnet where it will be hosted",
- "guid": "6f8e93a2-44b1-bb1d-28a1-4d5b3c2ea857",
- "link": "https://learn.microsoft.com/azure/bastion/tutorial-create-host-portal",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "WAF checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
"services": [
- "VNet",
- "AVS",
- "Bastion"
+ "WAF",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Jumpbox & Bastion",
- "text": "Configure a jumbox and Azure Bastion",
- "waf": "Performance"
+ "text": "Configure passive geo-replication for Premium Azure Cache for Redis instances. Geo-replication is a mechanism for linking two or more Azure Cache for Redis instances, typically spanning two Azure regions. Geo-replication is designed mainly for cross-region disaster recovery. Two Premium tier cache instances are connected through geo-replication in a way that provides reads and writes to your primary cache, and that data is replicated to the secondary cache.",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Provides secure / seamless RDP/SSH connectivity to your vm's directly through the portal.",
- "guid": "ba430d58-4541-085c-3641-068c00be9bc5",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-groups-overview",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "WAF checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
"services": [
- "AVS",
- "VM",
- "Bastion"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Jumpbox & Bastion",
- "text": "Security measure allowing RDP access via the portal",
- "waf": "Performance"
+ "text": "Leverage FTA Resiliency Playbook for Azure Data Factory",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Using a VPN to connect to Azure to enable VMware communications (HCX) (not recommended)",
- "guid": "9988598f-2a9f-6b12-9b46-488415ceb325",
- "link": "https://learn.microsoft.com/azure/azure-vmware/configure-site-to-site-vpn-gateway",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "WAF checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"services": [
- "VPN",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "VPN",
- "text": "Connect to Azure using a VPN",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Use zone redundant pipelines in regions that support Availability Zones",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use the migration assesment tool and timeline to determine bandwidth required (eg 3rd party tool in link)",
- "guid": "956ce5e9-a862-fe2b-a50d-a22923569357",
- "link": "https://www.omnicalculator.com/other/data-transfer#:~:text=To%20calculate%20the%20data%20transfer%20speed%3A%201%20Download,measured%20time%20to%20find%20the%20data%20transfer%20speed.",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "WAF checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
"services": [
- "VPN",
- "AVS"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "VPN",
- "text": "Bandwidth sizing",
- "waf": "Performance"
+ "text": "Use DevOps to Backup the ARM templates with Github/Azure DevOps integration ",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "What traffic is routed through a firewall, what goes directly into Azure",
- "guid": "e095116f-0bdc-4b51-4d71-b9e469d56f59",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/azure-vmware-solution-foundation-networking",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "WAF checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"services": [
- "VPN",
- "AVS"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "subcategory": "VPN",
- "text": "Traffic routing ",
- "waf": "Performance"
+ "text": "Make sure you replicate the Self-Hosted Integration Runtime VMs in another region ",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Name and unique address space for the vWAN, name for the vWAN hub",
- "guid": "4dc480ac-cecd-39c4-fdc6-680b300716ab",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-site-to-site-portal#openvwan",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "WAF checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"services": [
- "AVS",
- "VWAN"
+ "WAF",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "vWAN hub",
- "text": "vWAN name, hub name and address space",
- "waf": "Performance"
+ "text": "Make sure you replicate or duplicate your network in the sister region. You have to make a copy of your Vnet in another region",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Select either boh or the appropriate connection type.",
- "guid": "51d6affd-8e02-6aea-d3d4-0baf618b3076",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-point-to-site-portal",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "WAF checklist",
+ "description": "If your ADF Pipelines use Key Vault you don't have to do anything to replicate Key Vault. Key Vault is a managed service and Microsoft takes care of it for you",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
"services": [
- "VPN",
- "AVS",
- "VWAN"
+ "WAF",
+ "AKV"
],
- "severity": "Medium",
- "subcategory": "vWAN hub",
- "text": "ExR and/or VPN gateway provisioned",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "If using Keyvault integration, use SLA of Keyvault to understand your availablity",
+ "waf": "Reliability"
},
{
- "category": "Connectivity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Add Azure firewall to vWAN (recommended)",
- "guid": "e32a4c67-3dc0-c134-1c12-52d46dcbab5b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-expressroute-portal",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Service Bus Premium provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
"services": [
- "AVS",
- "VWAN",
- "Firewall"
+ "WAF",
+ "ServiceBus"
],
- "severity": "Medium",
- "subcategory": "vWAN hub",
- "text": "Secure vWAN",
+ "severity": "Low",
+ "text": "Use customer-managed key option in data at rest encryption when required",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Active directory or other identity provider servers",
- "guid": "fbc47fbf-bc96-fa93-ed5d-8c9be63cd5c3",
- "link": "https://learn.microsoft.com/azure/azure-vmware/configure-identity-source-vcenter",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Communication between a client application and an Azure Service Bus namespace is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Service Bus namespace to require that clients send and receive data with a newer version of TLS.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AVS"
+ "WAF",
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Access",
- "text": "External Identity (user accounts)",
+ "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Not required for LDAPS, required for Kerberos",
- "guid": "b5db7975-f6bb-8ba3-ee5f-e3e805887997",
- "link": "https://learn.microsoft.com/windows-server/identity/ad-ds/plan/understanding-active-directory-site-topology",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has Manage permissions for the entire namespace. It's recommended that you treat this rule like an administrative root account and don't use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AVS"
+ "TrafficManager",
+ "ServiceBus",
+ "AzurePolicy",
+ "WAF",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Access",
- "text": "If using AD domain, ensure Sites & Services has been configured",
+ "text": "Avoid using root account when it is not necessary",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Authentication for users, must be secure.",
- "guid": "c30749c4-e2af-558c-2eb9-0b6ae84881d1",
- "link": "https://learn.microsoft.com/azure/azure-vmware/configure-identity-source-vcenter",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Microsoft Entra ID provides superior security and ease of use over shared access signatures (SAS). With Microsoft Entra ID, there’s no need to store the tokens in your code and risk potential security vulnerabilities. We recommend that you use Microsoft Entra ID with your Azure Service Bus applications when possible.",
+ "graph": "Resources | where type =~ 'microsoft.servicebus/namespaces' | extend compliant = iif(properties.disableLocalAuth == 'false', 'No', 'Yes') | project id, compliant",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/en-us/azure/service-bus-messaging/disable-local-authentication",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AVS"
+ "WAF",
+ "ServiceBus",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Access",
- "text": "Use LDAPS not ldap ( vCenter)",
+ "text": "When possible, disable SAS key authentication (or local authentication) and use only Microsoft Entra ID for authentication",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Authentication for users, must be secure.",
- "guid": "64cb9b5c-9edd-787e-1dd8-2b2338e51635",
- "link": "https://learn.microsoft.com/azure/azure-vmware/configure-external-identity-source-nsx-t",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "When creating permissions, provide fine-grained control over a client's access to Azure Service Bus. Permissions in Azure Service Bus can and should be scoped to the individual resource level e.g. queue, topic or subscription. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AVS"
+ "Storage",
+ "ServiceBus",
+ "WAF",
+ "RBAC",
+ "Subscriptions"
],
- "severity": "Medium",
- "subcategory": "Access",
- "text": "Use LDAPS not ldap (NSX-T)",
+ "severity": "High",
+ "text": "Use least privilege data plane RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "CN or SAN names, no wildcards, contains private key - CER or PFX",
- "guid": "bec285ab-037e-d629-81d1-f61dac23cd4c",
- "link": "https://youtu.be/4jvfbsrhnEs",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Service Bus resource logs include operational logs, virtual network and IP filtering logs. Runtime audit logs capture aggregated diagnostic information for various data plane access operations (such as send or receive messages) in Service Bus.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AVS"
+ "WAF",
+ "ServiceBus",
+ "Monitor",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Security certificate installed on LDAPS servers ",
+ "text": "Enable logging for security investigation. Use Azure Monitor to trace resource logs and runtime audit logs (currently available only in the premium tier)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Standard Azure Roles Based Access Controls",
- "guid": "4ba394a2-3c33-104c-8e34-2dadaba9cc73",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-identity",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "Azure Service Bus by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Service Bus traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "WAF",
+ "ServiceBus",
+ "PrivateLink",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "RBAC applied to Azure roles",
+ "text": "Consider using private endpoints to access Azure Service Bus and disable public network access when applicable.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Create roles in vCenter required to meet minimum viable access guidelines",
- "guid": "b04ca129-83a9-3494-7512-347dd2d766db",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-identity#view-the-vcenter-server-privileges",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "WAF checklist",
+ "description": "With IP firewall, you can restrict the public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "WAF",
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "RBAC model in vCenter",
+ "text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)",
- "guid": "8e477d2f-8004-3dd0-93d6-0aece9e1b2fb",
- "link": "Best practice",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "WAF checklist",
+ "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
+ "service": "IoT Hub DPS",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "CloudAdmin role usage",
- "waf": "Security"
+ "severity": "High",
+ "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "For roles managing the Azure VMware Solution resource in the Azure Portal (no standing permissions allowed)",
- "guid": "00e0b729-f9be-f600-8c32-5ec0e8f2ed63",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "WAF checklist",
+ "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "IoT Hub DPS",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Security ",
- "text": "Is Privileged Identity Management implemented",
- "waf": "Security"
+ "severity": "High",
+ "text": "Protect logic apps from region failures with zone redundancy and availability zones",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "For the Azure VMware Solution PIM roles",
- "guid": "0842d45f-41a8-8274-1155-2f6ed554d315",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "WAF checklist",
+ "guid": "8aed4fbf-0830-4883-899d-222a154af478",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "IoT Hub DPS",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Security ",
- "text": "Is Privileged Identity Management audit reporting implemented",
- "waf": "Security"
+ "severity": "High",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Best practice, also see Monitoring/Alerts",
- "guid": "915cbcd7-0640-eb7c-4162-9f33775de559",
- "link": "Best practice",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "WAF checklist",
+ "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "IoT Hub DPS",
"services": [
- "Entra",
- "Monitor",
- "AVS"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Security ",
- "text": "Limit use of CloudAdmin account to emergency access only",
- "waf": "Security"
+ "severity": "High",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
+ "waf": "Reliability"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Operational procedure",
- "guid": "7effa0c0-9172-e8e4-726a-67dbea8be40a",
- "link": "https://learn.microsoft.com/azure/azure-vmware/rotate-cloudadmin-credentials?tabs=azure-portal",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "WAF checklist",
+ "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "IoT Hub DPS",
"services": [
- "Entra",
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Security ",
- "text": "Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX) credentials",
- "waf": "Security"
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
+ "waf": "Operations"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use Azure ARC for Servers to properly govern workloads running on Azure VMware Solution using Azure native technologies (Azure ARC for Azure VMware Solution is not yet available)",
- "guid": "8f426fd0-d73b-d398-1f6f-df0cbe262a82",
- "link": "https://learn.microsoft.com/azure/azure-arc/vmware-vsphere/overview",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Apply guidance from the Microsoft cloud security benchmark related to Storage",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "VM",
- "Arc"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "AVS VM Management (Azure Arc)",
- "waf": "Operations"
+ "text": "Consider the 'Azure security baseline for storage'",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management, Monitoring and Security solutions",
- "guid": "11dbe773-e380-9191-1418-e886fa7a6fd0",
- "link": "https://docs.microsoft.com/azure/governance/policy/overview",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != ('Succeeded') or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled') | extend compliant = (isnotnull(properties.privateEndpointConnections) and properties.privateEndpointConnections[0].properties.provisioningState == 'Succeeded' and properties.publicNetworkAccess == 'Disabled') | distinct id, compliant",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
- "AzurePolicy"
+ "WAF",
+ "PrivateLink",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Azure policy",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Consider using private endpoints for Azure Storage",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "For manual deployments, consider implementing resource locks to prevent accidental actions on your Azure VMware Solution Private Cloud",
- "guid": "1e59c639-9b7e-a60b-5e93-3798c1aff5db",
- "link": "https://docs.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json#configure-locks",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Newly created storage accounts are created using the ARM deployment model, so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage accounts with classic deployment model in a subscription",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "Storage",
+ "Subscriptions",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Resource locks",
- "waf": "Operations"
+ "text": "Ensure older storage accounts are not using 'classic deployment model'",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "For manual deployments, all configuration and deployments must be documented",
- "guid": "8f2c46aa-ca1b-cad3-3ac9-213dfc0a265e",
- "link": "Make sure to create your own runbook on the deployment of AVS.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | project storageAccountId = id | join kind=leftouter (resourceContainers | where type == 'microsoft.security/pricings' | where name == 'StorageAccounts' | project resourceId = id, pricingTier = properties.pricingTier) on $left.storageAccountId == $right.resourceId | where isnull(pricingTier) or pricingTier != 'Standard' | extend compliant = false | distinct storageAccountId, compliant",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "Storage",
+ "Defender"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Run books",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable Microsoft Defender for all of your storage accounts",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Implement human understandable names for ExR authorization keys to allow for easy identification of the keys purpose/use",
- "guid": "86b314f9-1f1e-317a-4dfb-cf510ad4a030",
- "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "The soft-delete mechanism allows to recover accidentally deleted blobs.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "AKV"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Naming conventions for auth keys",
- "waf": "Operations"
+ "text": "Enable 'soft delete' for blobs",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "For automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
- "guid": "e22a2d99-eb71-7d7c-07af-6d4cdb1d4443",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-alerts-for-azure-vmware-solution",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Alerts",
- "text": "Create warning alerts for critical thresholds ",
- "waf": "Operations"
+ "text": "Disable 'soft delete' for blobs",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "for automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
- "guid": "6d02f159-627d-79bf-a931-fab6d947eda2",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-alerts-for-azure-vmware-solution",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Soft delete for containers enables you to recover a container after it has been deleted, for example recover from an accidental delete operation.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Alerts",
- "text": "Create critical alert vSAN consumption",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable 'soft delete' for containers",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Provides platform alerts (generated by Microsoft)",
- "guid": "1cc97b39-2c7e-246f-6d73-789cfebfe951",
- "link": "https://www.virtualworkloads.com/2021/04/azure-vmware-solution-azure-service-health/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Alerts",
- "text": "Configured for Azure Service Health alerts and notifications",
- "waf": "Operations"
+ "text": "Disable 'soft delete' for containers",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure you have a documented and implemented backup policy and solution for Azure VMware Solution VM workloads",
- "guid": "0962606c-e3b4-62a9-5661-e4ffd62a4509",
- "link": "https://docs.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Prevents accidental deletion of a storage account, by forcing the user to first remove the deletion lock, prior to deletion",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "Backup",
- "Monitor",
- "VM",
- "AzurePolicy"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup policy",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable resource locks on storage accounts",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Keep in mind the lead time for requesting new nodes",
- "guid": "4ec7ccfb-795e-897e-4a84-fd31c04eadc6",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-alerts-for-azure-vmware-solution",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Consider 'legal hold' or 'time-based retention' policies for blobs, so that is is impossible to delete the blob, the container, or the storage account. Please note that 'impossible' actually means 'impossible'; once a storage account contains an immutable blob, the only way to 'get rid' of that storage account is by cancelling the Azure subscription.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
+ "WAF",
+ "Subscriptions",
+ "Storage",
"AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Capacity",
- "text": "Policy around ESXi host density and efficiency",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Consider immutable blobs",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Azure Cost Management can be used - one option, put AVS in it's own Subscription. ",
- "guid": "7f8f175d-13f4-5298-9e61-0bc7e9fcc279",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/govern",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (properties.supportsHttpsTrafficOnly == false) | distinct id, compliant",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
- "Subscriptions",
- "Cost"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Costs",
- "text": "Ensure a good cost management process is in place for Azure VMware Solution - ",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Require HTTPS, i.e. disable port 80 on the storage account",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Create dashboards to enable core Azure VMware Solution monitoring insights",
- "guid": "01e689e0-7c6c-b58f-37bd-4d6b9b1b9c74",
- "link": "https://docs.microsoft.com/azure/azure-portal/azure-portal-dashboards",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "When configuring a custom domain (hostname) on a storage account, check whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your storage account.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
- "NetworkWatcher"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Dashboard",
- "text": "Connection monitor dashboard",
- "waf": "Operations"
+ "severity": "High",
+ "text": "When enforcing HTTPS (disabling HTTP), check that you do not use custom domains (CNAME) for the storage account.",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Send to an Azure Storage account or Azure EventHub for processing (direct to Log Analytics is pending)",
- "guid": "f9afdcc9-649d-d840-9fb5-a3c0edcc697d",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-vmware-syslogs",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Requiring HTTPS when a client uses a SAS token to access blob data helps to minimize the risk of credential loss.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"services": [
- "Storage",
- "Monitor",
- "AVS"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Logs & Metrics",
- "text": "Configure Azure VMware Solution logging ",
- "waf": "Operations"
- },
+ "text": "Limit shared access signature (SAS) tokens to HTTPS connections only",
+ "waf": "Security"
+ },
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Must be on-premises, implement if available",
- "guid": "7cbac8c3-4eda-d5d9-9bda-c6b5abba9fb6",
- "link": "Is vROPS or vRealize Network Insight going to be used? ",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": ". Enforcing the latest TLS version will reject request from clients using the older version. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Logs & Metrics",
- "text": "vRealize Operations",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enforce the latest TLS version for a storage account",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure workloads running on Azure VMware Solution are monitored using Azure Log Analytics and Azure Monitor",
- "guid": "b243521a-644d-f865-7fb6-21f9019c0dd2",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-vmware-syslogs",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Microsoft Entra ID tokens should be favored over shared access signatures, wherever possible",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
- "VM"
+ "WAF",
+ "Entra",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Logs & Metrics",
- "text": "AVS VM logging",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use Microsoft Entra ID tokens for blob access",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Between on-premises to Azure are monitored using 'connection monitor'",
- "guid": "2ca97d91-dd36-7229-b668-01036ccc3cd3",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-create-using-portal",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "When assigning a role to a user, group, or application, grant that security principal only those permissions that are necessary for them to perform their tasks. Limiting access to resources helps prevent both unintentional and malicious misuse of your data.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "ExpressRoute",
- "VPN",
- "Monitor",
- "NetworkWatcher"
+ "WAF",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Network",
- "text": "Monitor ExpressRoute and/or VPN connections ",
- "waf": "Operations"
+ "text": "Least privilege in IaM permissions",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "To monitor the Azure VMware Solution back-end ExpressRoute connection (Azure native to AVS)",
- "guid": "99209143-60fe-19f0-5633-8b5671277ba5",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-create-using-portal",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. A user delegation SAS is analogous to a service SAS in terms of its scope and function, but offers security benefits over the service SAS. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
- "ExpressRoute"
+ "WAF",
+ "Entra",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Network",
- "text": "Monitor from an Azure native resource to an Azure VMware Solution VM",
- "waf": "Operations"
+ "severity": "High",
+ "text": "When using SAS, prefer 'user delegation SAS' over storage-account-key based SAS.",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "To monitor end-to-end, on-premises to AVS workloads",
- "guid": "b9e5867c-57d3-036f-fb1b-3f0a71664efe",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-create-using-portal",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on Entra ID authentication makes it easier to tie storage access to a user. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
"services": [
+ "Storage",
+ "WAF",
"Monitor",
- "AVS"
+ "Entra",
+ "AKV"
],
- "severity": "Medium",
- "subcategory": "Network",
- "text": "Monitor from an on-premises resource to an Azure VMware Solution VM",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Consider disabling storage account keys, so that only Microsoft Entra ID access (and user delegation SAS) is supported.",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Track requests to Azure VMware Solution and Azure VMware Solution based workloads",
- "guid": "4af7c5f7-e5e9-bedf-a8cf-314b81735962",
- "link": "Firewall logging and alerting rules are configured (Azure Firewall or 3rd party)",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Use Activity Log data to identify 'when', 'who', 'what' and 'how' the security of your storage account is being viewed or changed (i.e. storage account keys, access policies, etc.).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
"services": [
+ "Storage",
+ "AzurePolicy",
+ "WAF",
"Monitor",
- "AVS"
+ "AKV"
],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "Auditing and logging is implemented for inbound internet ",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Consider using Azure Monitor to audit control plane operations on the storage account",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Implemented for outbound internet connections from Azure VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious activity",
- "guid": "74be60a3-cfac-f057-eda6-3ee087e805d5",
- "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-network-topology-connectivity",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "A key expiration policy enables you to set a reminder for the rotation of the account access keys. The reminder is displayed if the specified interval has elapsed and the keys have not yet been rotated.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF",
+ "AKV",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Session monitoring ",
- "waf": "Operations"
+ "text": "When using storage account keys, consider enabling a 'key expiration policy'",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Enable Diagnostic and metric logging on Azure VMware Solution",
- "guid": "a434b3b5-f258-0845-cd76-d7df6ef5890e",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-vmware-syslogs",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "A SAS expiration policy specifies a recommended interval over which the SAS is valid. SAS expiration policies apply to a service SAS or an account SAS. When a user generates service SAS or an account SAS with a validity interval that is larger than the recommended interval, they'll see a warning.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "VMWare",
- "text": "Logging and diagnostics",
- "waf": "Operations"
+ "text": "Consider configuring an SAS expiration policy",
+ "waf": "Security"
},
{
- "category": "Monitoring",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Monitor AVS workloads (each VM in AVS)",
- "guid": "fb00b69a-83ec-ce72-446e-6c23a0cab09a",
- "link": "https://docs.microsoft.com/azure/azure-monitor/agents/agent-windows?tabs=setup-wizard",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS",
- "VM"
+ "WAF",
+ "AKV",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "VMware",
- "text": "Log Analytics Agents deployed on Azure VMware Solution guest VM workloads",
- "waf": "Operations"
+ "text": "Consider linking SAS to a stored access policy",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Decision on traffic flow",
- "guid": "a1354b87-e18e-bf5c-c50b-8ddf0540e971",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-hub-and-spoke",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "AKV",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "North/South routing through Az Firewall or 3rd party ",
+ "text": "Consider configuring your application's source code repository to detect checked-in connection strings and storage account keys.",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Decision to route Azure to Azure traffic through Firewall, not E/W between AVS workloads (internal to AVS)",
- "guid": "29a8a499-ec31-f336-3266-0895f035e379",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-hub-and-spoke",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Ideally, your application should be using a managed identity to authenticate to Azure Storage. If that is not possible, consider having the storage credential (connection string, storage account key, SAS, service principal credential) in Azure KeyVault or an equivalent service.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "Entra",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "East West (Internal to Azure)",
+ "severity": "High",
+ "text": "Consider storing connection strings in Azure KeyVault (in scenarios where managed identities are not possible)",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Requires a 3rd party NVA with Azure Route server - Scenario 2 (see link)",
- "guid": "ebd3cc3c-ac3d-4293-950d-cecd8445a523",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-network-topology-connectivity",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Use near-term expiration times on an ad hoc SAS service SAS or account SAS. In this way, even if a SAS is compromised, it's valid only for a short time. This practice is especially important if you cannot reference a stored access policy. Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"services": [
- "ARS",
- "AVS",
- "NVA"
+ "WAF",
+ "Storage",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "ExR without Global Reach",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Strive for short validity periods for ad-hoc SAS",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "When route server is used, ensure no more then 200 routes are propagated from route server to ExR gateway to on-premises (ARS limit). Important when using MoN",
- "guid": "ffb5c5ca-bd89-ff1b-8b73-8a54d503d506",
- "link": "https://learn.microsoft.com/azure/route-server/route-server-faq",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "When creating a SAS, be as specific and restrictive as possible. Prefer a SAS for a single resource and operation over a SAS which gives much broader access.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"services": [
- "ARS",
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Hub & Spoke",
- "text": "Route server ",
- "waf": "Operations"
+ "text": "Apply a narrow scope to a SAS",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Via on-premises, Az Firewall, 3rd Party, NSX-T pubic IP",
- "guid": "a4070dad-3def-818d-e9f7-be440d10e7de",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-design-public-internet-access",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "A SAS can include parameters on which client IP addresses or address ranges are authorized to request a resource using the SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Internet",
- "text": "Egress point(s)",
+ "text": "Consider scoping SAS to a specific client IP address, wherever possible",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Az Firewall, 3rd party NVA, Application Gateway, Azure Frontdoor ",
- "guid": "e942c03d-beaa-3d9f-0526-9b26cd5e9937",
- "link": "Research and choose optimal solution for each application",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "A SAS cannot constrain how much data a client uploads; given the pricing model of amount of storage over time, it might make sense to validate whether clients uploaded maliciously large contents.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "FrontDoor",
- "NVA",
- "AppGW"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Internet",
- "text": "Internet facing applications",
+ "severity": "Low",
+ "text": "Consider checking uploaded data, after clients used a SAS to upload a file. ",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure no more then 200 routes are propagated from route server to ExR gateway to on-premises (ARS limit). Important when using MoN",
- "guid": "e778a2ec-b4d7-1d27-574c-14476b167d37",
- "link": "https://docs.microsoft.com/azure/route-server/route-server-faq#route-server-limits",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "When accessing blob storage via SFTP using a 'local user account', the 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive than SFTP access. Unfortunately, as of early 2023, local users are the only form of identity management that is currently supported for the SFTP endpoint",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
"services": [
- "ARS",
- "AVS"
+ "WAF",
+ "Entra",
+ "Storage",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Routing",
- "text": "When route server Route limit understood? ",
+ "severity": "High",
+ "text": "SFTP: Limit the amount of 'local users' for SFTP access, and audit whether access is needed over time.",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "(VPN Gateway, AppGW, FrontDoor, Load balancer, VMs (etc) (Remove: enabled on ExR/VPN Gateway subnet in Azure)",
- "guid": "66c97b30-81b9-139a-cc76-dd1d94aef42a",
- "link": "https://docs.microsoft.com/azure/ddos-protection/manage-ddos-protection",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
"services": [
- "VNet",
- "AVS",
- "ExpressRoute",
- "LoadBalancer",
- "VPN",
- "VM",
- "DDoS",
- "FrontDoor",
- "AppGW"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Is DDoS standard protection of public facing IP addresses? ",
+ "text": "SFTP: The SFTP endpoint does not support POSIX-like ACLs.",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "To manage Azure VMware Solution, vCenter, NSX manager and HCX manager",
- "guid": "d43da920-4ecc-a4e9-dd45-a2986ce81d32",
- "link": "Best practice: Bastion or 3rd party tool",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature that enables web apps from a different domain to loosen the same-origin policy. When enabling CORS, keep the CorsRules to the least privilege.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "Storage",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "Use a dedicated privileged access workstation (PAW)",
+ "severity": "High",
+ "text": "Avoid overly broad CORS policies",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use NSX-T for inter-vmware-traffic inspection",
- "guid": "a2dac74f-5380-6e39-25e6-f13b99ece51f",
- "link": "https://docs.vmware.com/en/VMware-NSX-T-Data-Center/3.2/administration/GUID-F6685367-7AA1-4771-927E-ED77727CFDA3.html",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Data at rest is always encrypted server-side, and in addition might be encrypted client-side as well. Server-side encryption might happen using a platform-managed key (default) or customer-managed key. Client-side encryption might happen by either having the client supply an encryption/decryption key on a per-blob basis to Azure storage, or by completely handling encryption on the client-side. thus not relying on Azure Storage at all for confidentiality guarantees.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Traffic Inspection",
- "text": "East West (Internal to AVS)",
+ "severity": "High",
+ "text": "Determine how data at rest should be encrypted. Understand the thread model for data.",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Decision on whether or not to use Secure hub for E/W and Internet traffic - requires Global Reach",
- "guid": "3f621543-dfac-c471-54a6-7b2849b6909a",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "VWAN",
- "Firewall"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "Use Secure Hub (Azure Firewall or 3rd party)",
+ "text": "Determine which/if platform encryption should be used.",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Decision to route Azure to Azure traffic through Firewall, not E/W between AVS workloads (internal to AVS)",
- "guid": "d7af5670-1b39-d95d-6da2-8d660dfbe16b",
- "link": "https://learn.microsoft.com/azure/firewall-manager/secure-cloud-network",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
"services": [
- "AVS",
- "VWAN"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Virtual WAN",
- "text": "East West (Internal to Azure)",
+ "text": "Determine which/if client-side encryption should be used.",
"waf": "Security"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "When intending to use automated scale-out, be sure to apply for sufficient Azure VMware Solution quota for the subscriptions running Azure VMware Solution",
- "guid": "7d049005-eb35-4a93-50a5-3b31a9f61161",
- "link": "https://docs.microsoft.com/azure/azure-vmware/configure-nsx-network-components-azure-portal",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "description": "Anonymous access may present a security risk. We recommend that you disable anonymous access for optimal security. Disallowing anonymous access helps to prevent data breaches caused by undesired anonymous access.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
"services": [
- "Subscriptions",
- "AVS"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Scale out operations planning",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Consider whether public blob anonymous access is needed, or whether it can be disabled for certain storage accounts. ",
+ "waf": "Security"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "When intending to use automated scale-in, be sure to take storage policy requirements into account before performing such action",
- "guid": "7242c1de-da37-27f3-1ddd-565ccccb8ece",
- "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-platform-automation-and-devops#automated-scale",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
"services": [
- "Storage",
- "AVS",
- "AzurePolicy"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Scale in operations planning",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Leverage a storagev2 account type for better performance and reliability",
+ "waf": "Reliability"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Scaling operations always need to be serialized within a single SDDC as only one scale operation can be performed at a time (even when multiple clusters are used)",
- "guid": "3233e49e-62ce-97f3-8737-8230e771b694",
- "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-platform-automation-and-devops#automated-scale",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (sku.name != 'Standard_LRS' and sku.name != 'Premium_LRS') | distinct id, compliant",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Scale serialized operations planning",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Leverage GRS, ZRS or GZRS storage for the highest availability",
+ "waf": "Reliability"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
- "guid": "68161d66-5707-319b-e77d-9217da892593",
- "link": "Best practice (testing)",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Scale rd operations planning",
- "waf": "Performance"
+ "text": "For write operation after failover, use customer-Managed Failover ",
+ "waf": "Reliability"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Define and enforce scale in/out maximum limits for your environment in the automations",
- "guid": "c32cb953-e860-f204-957a-c79d61202669",
- "link": "Operational planning - understand workload requirements",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Scale maximum operations planning",
- "waf": "Performance"
+ "text": "Understand Microsoft-Managed Failover details",
+ "waf": "Reliability"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Implement monitoring rules to monitor automated scaling operations and monitor success and failure to enable appropriate (automated) responses",
- "guid": "7bd65a5e-7b5d-652d-dbea-fc6f73a42857",
- "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-management-and-monitoring",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "WAF checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
"services": [
- "Monitor",
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Monitor scaling operations ",
- "waf": "Performance"
+ "text": "Enable Soft Delete",
+ "waf": "Reliability"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Consider the use of Azure Private-Link when using other Azure Native Services",
- "guid": "95e374af-8a2a-2672-7ab7-b4a1be43ada7",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "WAF checklist",
+ "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
+ "service": "Bot service",
"services": [
- "AVS",
- "PrivateLink"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Private link",
- "waf": "Performance"
+ "text": "Follow reliability support recommendations in Azure Bot Service",
+ "waf": "Reliability"
},
{
- "category": "Other Services/Operations",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "When performing automated configuration of NSX-T segments with a single Tier-1 gateway, use Azure Portal APIs instead of NSX-Manager APIs",
- "guid": "71eff90d-5ad7-ac60-6244-2a6f7d3c51f2",
- "link": "Best practice",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "WAF checklist",
+ "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
+ "service": "Bot service",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Provisioning Vmware VLANs",
- "waf": "Performance"
+ "text": "Deploying bots with local data residency and regional compliance",
+ "waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "In which region will AVS be deployed",
- "guid": "04e3a2f9-83b7-968a-1044-2811811a924b",
- "link": "https://learn.microsoft.com/windows-server/identity/ad-ds/plan/understanding-active-directory-site-topology",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "WAF checklist",
+ "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
+ "service": "Bot service",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Region selected",
+ "text": "Azure Bot Service runs in active-active mode for both global and regional services. When an outage occurs, you don't need to detect errors or manage the service. Azure Bot Service automatically performs auto failover and auto recovery in a multi-region geographical architecture. For the EU bot regional service, Azure Bot Service provides two full regions inside Europe with active/active replication to ensure redundancy. For the global bot service, all available regions/geographies can be served as the global footprint.",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Are there regulatory or compliance policies in play",
- "guid": "e52d1615-9cc6-565c-deb6-743ed7e90f4b",
- "link": "Internal policy or regulatory compliance",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
"services": [
- "AVS",
- "AzurePolicy"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Data residency compliant with selected regions",
+ "text": "Azure Spring Apps permits two deployments for every app, only one of which receives production traffic. You can achieve zero downtime with blue green deployment strategies. Blue green deployment is only available in Standard and Enterprise tiers. You could automate deployment using CI/CD with ADO/GitHub actions",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Request through the support blade",
- "guid": "92bd5ad6-441f-a983-7aa9-05dd669d760b",
- "link": "https://learn.microsoft.com/azure/migrate/concepts-azure-vmware-solution-assessment-calculation",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
"services": [
- "AVS"
+ "WAF",
+ "TrafficManager",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Request for number of AVS hosts submitted ",
+ "text": "Azure Spring Apps instances could be created in multiple regions for your applications and traffic could be routed by Traffic Manager/Front Door.",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "PG approval for deployment",
- "guid": "28370f63-1cb8-2e35-907f-c5516b6954fa",
- "link": "Support request through portal or get help from Account Team",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
"services": [
- "AVS"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Region and number of AVS nodes approved",
+ "text": "In supported region, Azure Spring Apps can be deployed as zone redundant, which means that instances are automatically distributed across availability zones. This feature is only available in Standard and Enterprise tiers.",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Portal/subscription/resource providers/ Microsoft.AVS",
- "guid": "96c76997-30a6-bb92-024d-f4f93f5f57fa",
- "link": "Done through the subscription/resource providers/ AVS register in the portal",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
"services": [
- "Subscriptions",
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Resource provider for AVS registered",
+ "text": "Use more than 1 app instance for your apps",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Connectivity, subscription & governanace model",
- "guid": "5898e3ff-5e6b-bee1-6f85-22fee261ce63",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/enterprise-scale-landing-zone",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
"services": [
- "Subscriptions",
- "AVS"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Landing zone architecture",
+ "text": "Monitor Azure Spring Apps with logs, metrics and tracing. Integrate ASA with application insights and track failures and create workbooks.",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "The name of the RG where AVS will exist",
- "guid": "d0181fb8-9cb8-bf4b-f5e5-b5f9bf7ae4ea",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Resource group name selected",
+ "text": "Set up autoscaling in Spring Cloud Gateway",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Each resource created as part of the deployment will also utilize this prefix in the name",
- "guid": "0f0d20c2-5a19-726c-de20-0984e070d9d6",
- "link": "Best practice - naming standards",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
"services": [
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Deployment prefix selected",
+ "severity": "Low",
+ "text": "Enable autoscale for the apps with Standard consumption & dedicated plan.",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "/22 unique non-overlapping IPv4 address space",
- "guid": "7fbf2ab7-a36c-5957-c27a-67038557af2a",
- "link": "https://learn.microsoft.com/azure/azure-vmware/tutorial-network-checklist#routing-and-subnet-considerations",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "WAF checklist",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Network space for AVS management layer",
+ "text": "Use Enterprise plan for commercial support of spring boot for mission critical apps. With other tiers you get OSS support.",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "vNets used by workloads running in AVS (non-stretched)",
- "guid": "0c87f999-e517-21ef-f355-f210ad4134d2",
- "link": "https://docs.vmware.com/en/VMware-NSX-T-Data-Center/3.2/installation/GUID-4B3860B8-1883-48CA-B2F3-7C2205D91D6D.html",
+ "arm-service": "Microsoft.Devices/deviceUpdateServices",
+ "checklist": "WAF checklist",
+ "guid": "0e03f5ee-4648-423c-bb86-7239480f9171",
+ "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
+ "service": "Device Update for IoT Hub",
"services": [
- "VNet",
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Network space for AVS NSX-T segments",
+ "severity": "High",
+ "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled).",
"waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Choose AV36, AV36P, AV52, AV36T (AV36T = Trial)",
- "guid": "946c8966-f902-6f53-4f37-00847e8895c2",
- "link": "https://azure.microsoft.com/pricing/details/azure-vmware/",
+ "arm-service": "Microsoft.Devices/deviceUpdateServices",
+ "checklist": "WAF checklist",
+ "guid": "c0c273bd-00ad-419a-9f2f-fc72fb181e55",
+ "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
+ "service": "Device Update for IoT Hub",
"services": [
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "AVS SKU (region dependent)",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the DPS instances from an affected region to the corresponding geo-paired region.",
+ "waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use the Azure migration assessment tool to determine the minimum number of nodes required (consider BCDR as well)",
- "guid": "31833808-26ba-9c31-416f-d54a89a17f5d",
- "link": "https://learn.microsoft.com/azure/migrate/how-to-assess",
+ "arm-service": "Microsoft.Devices/deviceUpdateServices",
+ "checklist": "WAF checklist",
+ "guid": "3af8abe6-07eb-4287-b393-6c4abe3702eb",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Device Update for IoT Hub",
"services": [
- "AVS"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Number of hosts to be deployed",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Understand how and if you should be using reserved instances (cost control)",
- "guid": "f2b73c4f-3d46-32c9-5df1-5b8dfcd3947f",
- "link": "https://azure.microsoft.com/en-ca/pricing/details/azure-vmware/#:~:text=Azure%20VMware%20Solution%20%20%20%20Instance%20size,TB%20%28all%20NVMe%29%20%20%20N%2FA%20%2Fhour%20",
+ "arm-service": "Microsoft.Devices/deviceUpdateServices",
+ "checklist": "WAF checklist",
+ "guid": "bd91245c-fe32-4e98-a085-794a40f4bfe1",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Device Update for IoT Hub",
"services": [
- "AVS",
- "Cost"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Reserverd Instances",
- "waf": "Cost"
+ "severity": "High",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
+ "waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure that you have requested enough quota, ensuring you have considered growth and Disaster Recovery requirement",
- "guid": "94ac48ab-ade5-3fa7-f800-263feeb97070",
- "link": "https://docs.microsoft.com/azure/azure-vmware/concepts-storage#storage-policies-and-fault-tolerance",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
"services": [
- "ASR",
- "AVS"
+ "WAF",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Capacity ",
- "waf": "Performance"
+ "text": "Deploy your Azure landing zone connectivity resources in multiple regions, so that you can quickly support multi-region application landing zones and disaster recovery scenarios.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Identify which of the networking scenarios make ",
- "guid": "1f9d4bd5-14b8-928c-b4cb-eb211f9b8de5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-network-topology-connectivity",
+ "checklist": "WAF checklist",
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "Networking & Connectivity See docs describing scenrario 1 through 5",
- "waf": "Reliability"
+ "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
+ "waf": "Operations"
},
{
- "category": "Planning",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure that access constraints to ESXi are understood, there are access limits which might affect 3rd party solutions.",
- "guid": "070db19b-8a2a-fd6a-c39b-4488d8780da9",
- "link": "Please Check Partner Ecosystem",
+ "checklist": "WAF checklist",
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Pre-deployment",
- "text": "3rd party application compatibility ",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Use Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "When in-guest encryption is used, store encryption keys in Azure Key vault when possible",
- "guid": "70cfbddc-d3d4-9188-77c8-1cabaefef646",
- "link": "General recommendation for storing encryption keys.",
+ "checklist": "WAF checklist",
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "Entra",
"services": [
- "AVS",
- "AKV"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Encryption",
- "text": "Use Azure Key Vault with in-guest encryption ",
- "waf": "Security"
+ "severity": "High",
+ "text": "Use Azure Lighthouse for Multi-Tenant Management with the same IDs.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure workloads on Azure VMware Solution use sufficient data encryption during run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is default)",
- "guid": "c1a81638-18df-0ce9-a73a-4b9a8a8dd392",
- "link": "https://docs.microsoft.com/azure/azure-vmware/concepts-storage#data-at-rest-encryption",
+ "checklist": "WAF checklist",
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Entra",
"services": [
- "AVS",
- "SQL"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Encryption",
- "text": "Use in-guest encryption",
- "waf": "Security"
+ "severity": "High",
+ "text": "If you give a partner access to administer your tenant, use Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use Key vault to store secrets and authorization keys when separate Service Principles are used for deploying Azure VMware Solution and ExpressRoute",
- "guid": "8d0a8f51-8d35-19cd-c2fe-4e3512fb467e",
- "link": "https://docs.microsoft.com/azure/key-vault/general/authentication",
+ "checklist": "WAF checklist",
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "service": "Entra",
"services": [
- "ExpressRoute",
- "AVS",
- "AKV"
+ "WAF",
+ "ACR",
+ "RBAC",
+ "Subscriptions"
],
- "severity": "Medium",
- "subcategory": "Encryption",
- "text": "Keyvault use for secrets",
+ "severity": "High",
+ "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Older OS security patching configured for workloads running on Azure VMware Solution are eligible for ESU",
- "guid": "4f8b20e9-a2a1-f80f-af9b-8aa3b26dca08",
- "link": "https://docs.microsoft.com/windows-server/get-started/extended-security-updates-deploy",
+ "checklist": "WAF checklist",
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Extended support",
- "text": "Ensure extended security update support ",
+ "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Use a SIEM/SOAR",
- "guid": "9bb22fec-4d00-3b95-7136-e225d0f5c63a",
- "link": "https://learn.microsoft.com/azure/sentinel/overview",
+ "checklist": "WAF checklist",
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "Entra",
"services": [
- "AVS",
- "Sentinel"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Investigation",
- "text": "Enable Azure Sentinel or 3rd party SIEM ",
+ "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "MS Defender For Cloud, for workloads running on Azure VMware Solution",
- "guid": "f42b0b09-c591-238a-1580-2de3c485ebd2",
- "link": "https://learn.microsoft.com/azure/azure-vmware/azure-security-integration#prerequisites",
+ "checklist": "WAF checklist",
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "service": "Entra",
"services": [
- "AVS",
- "Defender"
+ "WAF",
+ "Entra",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "Enable Advanced Threat Detection ",
+ "severity": "High",
+ "text": "Enforce Microsoft Entra ID Conditional Access policies for any user with rights to Azure environments.",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Are the applicable policies enabled (compliance baselines added to MDfC)",
- "guid": "bcdd2348-3d0e-c6bb-1092-aa4cd1a66d6b",
- "link": "https://docs.microsoft.com/azure/azure-vmware/azure-security-integration",
+ "checklist": "WAF checklist",
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "service": "Entra",
"services": [
- "AVS",
- "AzurePolicy"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "Policy & Regulatory Compliance",
+ "severity": "High",
+ "text": "Enforce multi-factor authentication for any user with rights to the Azure environments.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Azure to Azure (E/W), Azure to On-premises), AVS to Internet, AVS to Azure",
- "guid": "607c1ca9-da92-ae19-5a4c-eb1e876acbe7",
- "link": "https://techcommunity.microsoft.com/t5/azure-migration-and/firewall-integration-in-azure-vmware-solution/ba-p/2254961#:~:text=Azure%20VMware%20Solution%20customers%20have%20multiple%20security%20options,the%20box%20to%20provide%20East-West%20and%20North-South%20firewalling.",
+ "checklist": "WAF checklist",
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Firewalls",
- "text": "Azure / 3rd party firewall",
+ "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "To allow HCX appliance to connect/sync",
- "guid": "1d87925c-c02b-7fde-a425-7e95ad846a27",
- "link": "https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-networking-security/GUID-2CFE1654-9CC9-4EDB-A625-21317299E559.html",
+ "checklist": "WAF checklist",
+ "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Firewalls",
- "text": "Firewalls allow for East/West traffic inside AVS",
+ "text": "If planning to switch from Active Directory Domain Services to Entra domain services, evaluate the compatibility of all workloads.",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Decision on which tool to use (SRM requires additional license - enables automation & other features)",
- "guid": "468b3495-2f6e-b65a-38ef-3ba631bcaa46",
- "link": "https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-B842696B-89EF-4183-9C73-B77157F56055.html",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "HCX and/or SRM",
+ "text": "When using Microsoft Entra Domain Services use replica sets. Replica sets will improve the resiliency of your managed domain and allow you to deploy to additional regions. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
"waf": "Reliability"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Read up on requirements for Service Mesh requirements and how HCX ",
- "guid": "be2ced52-da08-d366-cf7c-044c19e29509",
- "link": "https://docs.vmware.com/en/VMware-HCX/4.6/hcx-user-guide/GUID-76BCD059-A31A-4041-9105-ACFB56213E7C.html",
+ "checklist": "WAF checklist",
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Monitor",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Configuring and Managing the HCX Interconnect",
- "waf": "Reliability"
+ "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "If you are planning on using stretch networks ensure that your on-premises environment requirements",
- "guid": "7dcac579-fc5c-5c9c-f1f7-9b1149ff2c37",
- "link": "https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-DBDB4D1B-60B6-4D16-936B-4AC632606909.html",
+ "ammp": true,
+ "checklist": "WAF checklist",
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Restrictions and limitations for network extensions",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout. MFA will be turned on by default for all users in Oct 2024. We recommend updating these accounts to use passkey (FIDO2) or configure certificate-based authentication for MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Do workloads require MoN?",
- "guid": "cf45c0b9-6c4b-3bfb-86c5-62fe54061c73",
- "link": "https://learn.microsoft.com/azure/azure-vmware/vmware-hcx-mon-guidance",
+ "checklist": "WAF checklist",
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "Entra",
"services": [
- "AVS"
- ],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Mobility optimized networking",
- "waf": "Performance"
- },
- {
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Operating system level of Vmware environment",
- "guid": "b7cf11f3-b12e-5189-991a-06df5250d2ca",
- "link": "https://learn.microsoft.com/azure/site-recovery/vmware-physical-azure-support-matrix",
- "services": [
- "AVS"
+ "WAF",
+ "Entra",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "On-premises pre-requisites",
- "text": "Support matrix (OS versions etc).",
- "waf": "Operations"
+ "text": "Do not use on-premises synced accounts for Microsoft Entra ID role assignments, unless you have a scenario that specifically requires it.",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Required that all switches are dynamic",
- "guid": "45fe9252-aa1b-4e30-45c6-bc02f3b76acf",
- "link": "https://docs.vmware.com/en/VMware-vSphere/7.0/vsan-network-design-guide/GUID-91E1CD6F-33A6-4AC6-BC22-3E4807296F86.html#:~:text=Migrate%20Management%20Network%201%20Add%20hosts%20to%20the,each%20host.%20...%204%20Finish%20the%20configuration.%20",
+ "checklist": "WAF checklist",
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Entra",
"services": [
- "AVS"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "On-premises pre-requisites",
- "text": "Standard switches converted to dynamic switches",
- "waf": "Operations"
+ "text": "When using Microsoft Entra ID Application Proxy to give remote users access to applications, manage it as a Platform resource as you can only have one instance per tenant.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "See sections on sizing and capacity in the link.",
- "guid": "e9f6d736-ee44-e2ac-e7f9-e361f8c857f3",
- "link": "https://learn.microsoft.com/azure/azure-vmware/plan-private-cloud-deployment",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "service": "VNet",
"services": [
- "AVS"
+ "WAF",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "On-premises pre-requisites",
- "text": "Capacity for HCX appliance",
- "waf": "Performance"
+ "text": "Use a hub-and-spoke network topology for network scenarios that require maximum flexibility.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Check hardware restrictions to ensure compatibility with AVS/OS ",
- "guid": "1be2cdd6-15a7-9a33-aea7-113859035ce9",
- "link": "https://kb.vmware.com/s/article/2007240#:~:text=ESXi%2FESX%20hosts%20and%20compatible%20virtual%20machine%20hardware%20versions,%20Not%20Supported%20%204%20more%20rows",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "service": "VNet",
"services": [
- "AVS"
+ "VPN",
+ "DNS",
+ "NVA",
+ "Firewall",
+ "WAF",
+ "ExpressRoute",
+ "Entra",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "On-premises pre-requisites",
- "text": "Hardware compatibility",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Deploy shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS services.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Cost"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Need to be converted",
- "guid": "16ab821a-27c6-b6d3-6042-10dc4d6dfcb7",
- "link": "https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.storage.doc/GUID-01D3CF47-A84A-4988-8103-A0487D6441AA.html",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "VNet",
"services": [
- "Storage",
- "AVS"
+ "WAF",
+ "DDoS"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "VSAN RDM disks are converted - not supported.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use a DDoS Network or IP protection plan for all public IP addresses in application landing zones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Need to be converted",
- "guid": "eb2f9313-afb2-ab35-aa24-6d97a3cb0611",
- "link": "3rd-Party tools",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "WAF checklist",
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
"services": [
- "Storage",
- "AVS",
- "VM"
+ "WAF",
+ "NVA"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "VM with SCSI shared bus are not supported",
- "waf": "Operations"
+ "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance.",
+ "waf": "Reliability"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Remove Direct IO before migration",
- "guid": "3f2a5cff-c8a6-634a-1f1b-53ef9d321381",
- "link": "Contact VMware",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "AVS",
- "VM"
+ "WAF",
+ "ExpressRoute",
+ "ARS",
+ "VPN"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "VM with Direct IO require removing DirectPath device",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Cannot migrate clusters ",
- "guid": "efc8a311-74f8-0252-c6a0-4bac7610e266",
- "link": "Contact VMware",
+ "arm-service": "Microsoft.Network/virtualHubs",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "service": "ARS",
"services": [
- "Storage",
- "AVS"
+ "WAF",
+ "ARS",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Shared VMDK files are not supported",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
+ "waf": "Security"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Convert to a different format",
- "guid": "ab6c89cd-a26f-b894-fe59-61863975458e",
- "link": "Contact VMware",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
+ "service": "VNet",
"services": [
- "Storage",
- "AVS"
+ "WAF",
+ "ACR",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "RDM with 'physical compatibility mode' are not supported.",
- "waf": "Operations"
+ "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
+ "waf": "Performance"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure the vSAN storage policy for VM's is NOT the default storage policy as this policy applies thick provisioning 'RAID-1 FTT-1' is default with Thin Provisioning",
- "guid": "7628d446-6b10-9678-9cec-f407d990de43",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-storage#storage-policies-and-fault-tolerance",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
+ "service": "VNet",
"services": [
- "Storage",
- "VM",
- "AVS",
- "AzurePolicy"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Default storage policy",
+ "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "Operations"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "The default storage policy is set to RAID-1 (Mirroring) FTT-1, with Object Space Reservation set to Thin provisioning.",
- "guid": "37fef358-7ab9-43a9-542c-22673955200e",
- "link": "https://learn.microsoft.com/azure/azure-vmware/configure-storage-policy",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"services": [
- "Storage",
- "AVS",
- "VM",
- "AzurePolicy"
+ "WAF",
+ "ExpressRoute",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Ensure that the appropriate VM template storage policy is used",
- "waf": "Operations"
+ "text": "If you have more than 400 spoke networks in a region, deploy an additional hub to bypass VNet peering limits (500) and the maximum number of prefixes that can be advertised via ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage needs",
- "guid": "ebebd109-9f9d-d85e-1b2f-d302012843b7",
- "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-storage#storage-policies-and-fault-tolerance",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"services": [
- "Storage",
- "AVS",
- "AzurePolicy"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Failure to tolerate policy",
- "waf": "Operations"
+ "text": "Limit the number of routes per route table to 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "VMware",
- "checklist": "Azure VMware Solution Implementation Checklist",
- "description": "ANF can be used to extend storage for Azure VMware Solution,",
- "guid": "1be821bd-4f37-216a-3e3d-2a5ac6996863",
- "link": "https://learn.microsoft.com/azure/azure-vmware/netapp-files-with-azure-vmware-solution",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "service": "VNet",
"services": [
- "Storage",
- "AVS"
+ "WAF",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Use ANF for external storage",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"services": [
- "AppSvc"
+ "WAF",
+ "LoadBalancer"
],
- "severity": "Low",
- "subcategory": "High Availability",
- "text": "Refer to baseline highly available zone-redundant web application architecture for best practices",
+ "severity": "High",
+ "text": "Use Standard Load Balancer SKU with a zone-redundant deployment, Selecting Standard SKU Load Balancer enhances reliability through availability zones and zone resiliency, ensuring deployments withstand zone and region failures. Unlike Basic, it supports global load balancing and offers an SLA.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"services": [
- "Backup",
- "AppSvc"
+ "WAF",
+ "LoadBalancer"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use Premium and Standard tiers. These tiers support staging slots and automated backups.",
+ "severity": "High",
+ "text": "Ensure load balancer backend pool(s) contains at least two instances, Deploying Azure Load Balancers with at least two instances in the backend prevents a single point of failure and supports scalability.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "service": "ExpressRoute",
"services": [
- "AppSvc"
+ "WAF",
+ "ExpressRoute"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Leverage Availability Zones where regionally applicable (requires Premium v2 or v3 tier)",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure App Service Review",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
+ "service": "ExpressRoute",
"services": [
- "Monitor",
- "AppSvc"
+ "WAF",
+ "ExpressRoute",
+ "VPN"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Implement health checks",
- "waf": "Reliability"
+ "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure App Service Review",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "ExpressRoute",
"services": [
- "Backup",
- "AppSvc"
+ "WAF",
+ "ACR"
],
"severity": "High",
- "subcategory": "Multi-tenant service",
- "text": "Refer to backup and restore best practices for Azure App Service",
- "waf": "Reliability"
+ "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"services": [
- "AppSvc"
+ "WAF"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Implement Azure App Service reliability best practices",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"services": [
- "AppSvc"
+ "WAF",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "High Availability",
- "text": "Familiarize with how to move an App Service app to another region During a disaster",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
+ "service": "VNet",
"services": [
- "AppSvc"
+ "WAF",
+ "ASR"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Familiarize with reliability support in Azure App Service",
+ "text": "Do not use overlapping IP address ranges for production and disaster recovery sites.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure App Service Review",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
+ "checklist": "WAF checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
"services": [
- "AppSvc"
+ "WAF",
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Ensure \"Always On\" is enabled for Function Apps running on a app service plan",
+ "severity": "High",
+ "text": "Use Standard SKU and Zone-Redundant IPs when applicable, Public IP addresses in Azure can be of standard SKU, available as non-zonal, zonal, or zone-redundant. Zone-redundant IPs are accessible across all zones, resisting any single zone failure, thereby providing higher resilience. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
"waf": "Reliability"
},
{
- "category": "Operations",
- "checklist": "Azure App Service Review",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "WAF checklist",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
+ "service": "DNS",
"services": [
- "Monitor",
- "AppSvc"
+ "WAF",
+ "DNS"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor App Service instances using Health checks",
- "waf": "Reliability"
+ "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure App Service Review",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "WAF checklist",
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
+ "service": "DNS",
"services": [
- "Monitor",
- "AppSvc"
+ "WAF",
+ "ACR",
+ "DNS"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests",
- "waf": "Reliability"
+ "text": "For environments where name resolution across Azure and on-premises is required and there is no existing enterprise DNS service like Active Directory, use Azure DNS Private Resolver to route DNS requests to Azure or to on-premises DNS servers.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure App Service Review",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "WAF checklist",
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "service": "DNS",
"services": [
- "Monitor",
- "AppSvc"
+ "WAF",
+ "DNS"
],
"severity": "Low",
- "subcategory": "Monitoring",
- "text": "Use Application Insights Standard test to monitor availability and responsiveness of web app or website",
- "waf": "Reliability"
+ "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a safe and audited environment for storing secrets and is well-integrated with App Service through the Key Vault SDK or App Service Key Vault References.",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "WAF checklist",
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
+ "service": "DNS",
"services": [
- "AKV",
- "AppSvc"
+ "WAF",
+ "DNS",
+ "VM",
+ "VNet"
],
"severity": "High",
- "subcategory": "Data Protection",
- "text": "Use Key Vault to store secrets",
- "waf": "Security"
+ "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Use a Managed Identity to connect to Key Vault either using the Key Vault SDK or through App Service Key Vault References.",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "WAF checklist",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
"services": [
- "Entra",
- "AKV",
- "AppSvc"
+ "WAF",
+ "DNS"
],
- "severity": "High",
- "subcategory": "Data Protection",
- "text": "Use Managed Identity to connect to Key Vault",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Implement a plan for managing DNS resolution between multiple Azure regions and when services fail over to another region",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Store the App Service TLS certificate in Key Vault.",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "WAF checklist",
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "service": "Bastion",
"services": [
- "AKV",
- "AppSvc"
+ "WAF",
+ "Bastion"
],
- "severity": "High",
- "subcategory": "Data Protection",
- "text": "Use Key Vault to store TLS certificate.",
+ "severity": "Medium",
+ "text": "Use Azure Bastion to securely connect to your network.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Systems that process sensitive information should be isolated. To do so, use separate App Service Plans or App Service Environments and consider the use of different subscriptions or management groups.",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "service": "Bastion",
"services": [
- "Subscriptions",
- "AppSvc"
+ "WAF",
+ "Bastion",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Isolate systems that process sensitive information",
+ "text": "Use Azure Bastion in a subnet /26 or larger.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Local disks on App Service are not encrypted and sensitive data should not be stored on those. (For example: D:\\\\Local and %TMP%).",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "WAF",
"services": [
- "TrafficManager",
- "AppSvc"
+ "WAF",
+ "ACR",
+ "FrontDoor",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Do not store sensitive data on local disk",
+ "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "For authenticated web application, use a well established Identity Provider like Azure AD or Azure AD B2C. Leverage the application framework of your choice to integrate with this provider or use the App Service Authentication / Authorization feature.",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
"services": [
- "Entra",
- "AppSvc"
+ "WAF",
+ "AppGW",
+ "AzurePolicy",
+ "FrontDoor"
],
- "severity": "Medium",
- "subcategory": "Identity and Access Control",
- "text": "Use an established Identity Provider for authentication",
+ "severity": "Low",
+ "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Deploy code to App Service from a controlled and trusted environment, like a well-managed and secured DevOps deployment pipeline. This avoids code that was not version controlled and verified to be deployed from a malicious host.",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
"services": [
- "Entra",
- "AppSvc"
+ "WAF",
+ "VNet"
],
"severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Deploy from a trusted environment",
+ "text": "When WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Disable basic authentication for both FTP/FTPS and for WebDeploy/SCM. This disables access to these services and enforces the use of Azure AD secured endpoints for deployment. Note that the SCM site can also be opened using Azure AD credentials.",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
"services": [
- "Entra",
- "AppSvc"
+ "WAF",
+ "DDoS",
+ "VNet"
],
"severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Disable basic authentication",
+ "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Where possible use Managed Identity to connect to Azure AD secured resources. If this is not possible, store secrets in Key Vault and connect to Key Vault using a Managed Identity instead.",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "service": "VNet",
"services": [
- "Entra",
- "AKV",
- "AppSvc"
+ "WAF"
],
"severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Use Managed Identity to connect to resources",
- "waf": "Security"
+ "text": "Plan for how to manage your network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Where using images stored in Azure Container Registry, pull these using a Managed Identity.",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
"services": [
- "Entra",
- "ACR",
- "AppSvc"
+ "WAF",
+ "DDoS"
],
"severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Pull containers using a Managed Identity",
+ "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "By configuring the diagnostic settings of App Service, you can send all telemetry to Log Analytics as the central destination for logging and monitoring. This allows you to monitor runtime activity of App Service such as HTTP logs, application logs, platform logs, ...",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
"services": [
- "Entra",
- "Monitor",
- "AppSvc"
+ "WAF",
+ "AzurePolicy",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Logging and Monitoring",
- "text": "Send App Service runtime logs to Log Analytics",
+ "severity": "High",
+ "text": "Ensure there is a policy assignment to deny Public IP addresses directly tied to Virtual Machines. Use exclusions if public IPs are needed on specific VMs.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Set up a diagnostic setting to send the activity log to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the App Service resource itself.",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
"services": [
- "Entra",
- "Monitor",
- "AppSvc"
+ "WAF",
+ "ExpressRoute",
+ "VPN",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Logging and Monitoring",
- "text": "Send App Service activity logs to Log Analytics",
- "waf": "Security"
+ "text": "Use ExpressRoute as the primary connection to Azure. Use VPNs as a source of backup connectivity.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Control outbound network access using a combination of regional VNet integration, network security groups and UDR's. Traffic should be routed to an NVA such as Azure Firewall. Ensure to monitor the Firewall's logs.",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "Firewall",
- "Monitor",
- "NVA",
- "AppSvc"
+ "WAF",
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "Network Security",
- "text": "Outbound network access should be controlled",
- "waf": "Security"
+ "text": "When you use multiple ExpressRoute circuits or multiple on-prem locations, use BGP attributes to optimize routing.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "You can provide a stable outbound IP by using VNet integration and using a VNet NAT Gateway or an NVA like Azure Firewall. This allows the receiving party to allow-list based on IP, should that be needed. Note that for communications towards Azure Services often there's no need to depend on the IP address and mechanics like Service Endpoints should be used instead. (Also the use of private endpoints on the receiving end avoids for SNAT to happen and provides a stable outbound IP range.)",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "VNet",
- "Firewall",
- "NVA",
- "PrivateLink",
- "AppSvc"
+ "WAF",
+ "ExpressRoute",
+ "VPN"
],
- "severity": "Low",
- "subcategory": "Network Security",
- "text": "Ensure a stable IP for outbound communications towards internet addresses",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Select the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Control inbound network access using a combination of App Service Access Restrictions, Service Endpoints or Private Endpoints. Different access restrictions can be required and configured for the web app itself and the SCM site.",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "service": "ExpressRoute",
"services": [
- "PrivateLink",
- "AppSvc"
+ "WAF",
+ "ExpressRoute",
+ "Cost"
],
"severity": "High",
- "subcategory": "Network Security",
- "text": "Inbound network access should be controlled",
- "waf": "Security"
+ "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Protect against malicious inbound traffic using a Web Application Firewall like Application Gateway or Azure Front Door. Make sure to monitor the WAF's logs.",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "service": "ExpressRoute",
"services": [
"WAF",
- "Monitor",
- "AppSvc",
- "FrontDoor",
- "AppGW"
+ "ExpressRoute",
+ "Cost"
],
"severity": "High",
- "subcategory": "Network Security",
- "text": "Use a WAF in front of App Service",
- "waf": "Security"
+ "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuit peering location supports your Azure regions for the Local SKU.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Make sure the WAF cannot be bypassed by locking down access to only the WAF. Use a combination of Access Restrictions, Service Endpoints and Private Endpoints.",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
+ "service": "ExpressRoute",
"services": [
- "PrivateLink",
"WAF",
- "AppSvc"
+ "ExpressRoute"
],
- "severity": "High",
- "subcategory": "Network Security",
- "text": "Avoid for WAF to be bypassed",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Set minimum TLS policy to 1.2 in App Service configuration.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
"services": [
- "AzurePolicy",
- "AppSvc"
+ "WAF",
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "Network Security",
- "text": "Set minimum TLS policy to 1.2",
- "waf": "Security"
+ "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Configure App Service to use HTTPS only. This causes App Service to redirect from HTTP to HTTPS. Strongly consider the use of HTTP Strict Transport Security (HSTS) in your code or from your WAF, which informs browsers that the site should only be accessed using HTTPS.",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
+ "service": "ExpressRoute",
"services": [
"WAF",
- "AppSvc"
+ "ExpressRoute"
],
- "severity": "High",
- "subcategory": "Network Security",
- "text": "Use HTTPS only",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Do not use wildcards in your CORS configuration, as this allows all origins to access the service (thereby defeating the purpose of CORS). Specifically only allow the origins that you expect to be able to access the service.",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
+ "service": "VPN",
"services": [
- "Storage",
- "AppSvc"
+ "WAF",
+ "VPN"
],
- "severity": "High",
- "subcategory": "Network Security",
- "text": "Wildcards must not be used for CORS",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Remote debugging must not be turned on in production as this opens additional ports on the service which increases the attack surface. Note that the service does turn of remote debugging automatically after 48 hours.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "WAF checklist",
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "service": "VPN",
"services": [
- "AppSvc"
+ "WAF",
+ "VPN"
],
- "severity": "High",
- "subcategory": "Network Security",
- "text": "Turn off remote debugging",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Enable Defender for App Service. This (amongst other threats) detects communications to known malicious IP addresses. Review the recommendations from Defender for App Service as part of your operations.",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "service": "ExpressRoute",
"services": [
- "Defender",
- "AppSvc"
+ "WAF",
+ "ExpressRoute",
+ "Cost"
],
- "severity": "Medium",
- "subcategory": "Network Security",
- "text": "Enable Defender for Cloud - Defender for App Service",
- "waf": "Security"
+ "severity": "High",
+ "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Azure provides DDoS Basic protection on its network, which can be improved with intelligent DDoS Standard capabilities which learns about normal traffic patterns and can detect unusual behavior. DDoS Standard applies to a Virtual Network so it must be configured for the network resource in front of the app, such as Application Gateway or an NVA.",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "EventHubs",
"WAF",
- "AppGW",
- "NVA",
- "DDoS",
- "AppSvc"
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "Network Security",
- "text": "Enable DDOS Protection Standard on the WAF VNet",
+ "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Where using images stored in Azure Container Registry, pull these over a virtual network from Azure Container Registry using its private endpoint and the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "ACR",
- "PrivateLink",
- "AppSvc"
+ "WAF",
+ "Monitor",
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "Network Security",
- "text": "Pull containers over a Virtual Network",
- "waf": "Security"
+ "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Conduct a penetration test on the web application following the penetration testing rules of engagement.",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
+ "service": "ExpressRoute",
"services": [
- "AppSvc"
+ "WAF",
+ "ACR",
+ "Monitor",
+ "NetworkWatcher"
],
"severity": "Medium",
- "subcategory": "Penetration Testing",
- "text": "Conduct a penetration test",
- "waf": "Security"
+ "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
+ "service": "ExpressRoute",
"services": [
- "AppSvc"
+ "WAF",
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "Vulnerability Management",
- "text": "Deploy validated code",
- "waf": "Security"
+ "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure App Service Review",
- "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "service": "ExpressRoute",
"services": [
- "AppSvc"
+ "WAF",
+ "ExpressRoute",
+ "VPN"
+ ],
+ "severity": "Medium",
+ "text": "Use site-to-site VPN as failover of ExpressRoute, if only using a single ExpressRoute circuit.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
+ "service": "ExpressRoute",
+ "services": [
+ "WAF",
+ "Storage",
+ "VNet"
],
"severity": "High",
- "subcategory": "Vulnerability Management",
- "text": "Use up-to-date platforms, languages, protocols and frameworks",
- "waf": "Security"
+ "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "When you are creating a SQL Server on Azure VM, carefully consider the type of workload necessary. If you are migrating an existing environment, collect a performance baseline to determine your SQL Server on Azure VM requirements. If this is a new VM, then create your new SQL Server VM based on your vendor requirements.",
- "guid": "1fc3fc14-eea6-4e69-b8d9-a3eec218e687",
- "link": "https://learn.microsoft.com/sql/dma/dma-sku-recommend-sql-db?view=sql-server-ver16",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "service": "ExpressRoute",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "ACR",
+ "ExpressRoute"
],
"severity": "High",
- "subcategory": "VM Size",
- "text": "Collect the target workload's performance characteristics and use them to determine the appropriate VM size for your business.",
- "waf": "Performance"
+ "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "The memory optimized virtual machine sizes are a primary target for SQL Server VMs and the recommended choice by Microsoft. The memory optimized virtual machines offer stronger memory-to-CPU ratios and medium-to-large cache options.Consider Ebdsv5-series series first for most SQL Server workloads.",
- "guid": "e04abe1f-8d39-4fda-9776-8424c116775c",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-vm-size?view=azuresql#memory-optimized",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "service": "ExpressRoute",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "VM Size",
- "text": "Use memory optimized virtual machine sizes for the best performance of SQL Server workloads.",
- "waf": "Performance"
+ "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "To find the most effective configuration for SQL Server workloads on an Azure VM, start by measuring the storage performance of your business application. Once storage requirements are known, select a virtual machine that supports the necessary IOPS and throughput with the appropriate memory-to-vCore ratio.",
- "guid": "2ea55b56-ad48-4408-be72-734b476ba18f",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance#counters-to-measure-application-performance-requirements",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "VM",
- "SQL"
+ "WAF"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Determine storage bandwidth and latency requirements for SQL Server data, log, and tempdb files before choosing the disk type.",
- "waf": "Performance"
+ "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "This provides more dedicated disk IOPS and throughput on the disk level and also allows you to configure the Azure disk host caching setting for each disk to the optimal setting for that data type.",
- "guid": "dbf590ce-65de-48e0-9f9c-cbd468266abc",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "ExpressRoute"
],
"severity": "High",
- "subcategory": "Storage",
- "text": "Place data, log, and tempdb files on separate drives",
- "waf": "Performance"
+ "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Premium SSD is always recommend as a minimum for SQL Server in order to obtain better performance and lower latency. P30 and P40 are recommended because disk caching is not supported for disks 4 TiB and larger ( P50 and above) and they provide the optimal price to performance ratio",
- "guid": "e6a84de5-df43-4d19-a248-1718d5d1e5f6",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "Monitor",
+ "ExpressRoute",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "For the data drive, use premium P30 and P40 or smaller disks to ensure the availability of cache support",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Log files have primarily write-heavy operations. Therefore, they do not benefit from the ReadOnly cache. Hence evaluate your price vs performance vs capacity and chose the right storage disk.",
- "guid": "25659d35-58fd-4772-99c9-31112d027fe4",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "Cost",
- "SQL"
+ "WAF",
+ "ExpressRoute",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "For the log drive plan for capacity and test performance versus cost while evaluating the premium P30 - P80 disks",
+ "severity": "Medium",
+ "text": "Do not use ExpressRoute circuits for VNet-to-VNet communication.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Placing TempDB on the D drive can help performance. Consider the size required and always test performance.",
- "guid": "12f70983-f630-4472-8ee6-9d6b5c2622f5",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "checklist": "WAF checklist",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
"services": [
- "Storage",
- "VM",
- "SQL"
+ "WAF",
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Place tempdb on the local ephemeral SSD (default D:\\) drive for most SQL Server workloads that are not part of Failover Cluster Instance (FCI) after choosing the optimal VM size.",
+ "severity": "Low",
+ "text": "Do not send Azure traffic to hybrid locations for inspection. Instead, follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network.",
"waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Striping Data and Log disk can increase bandwidth. Ensure that VM size also matches expected output",
- "guid": "4b69bad3-4aad-45e8-a78e-1d76667313c4",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
+ "service": "Firewall",
"services": [
- "Storage",
- "VM",
- "SQL"
+ "WAF",
+ "Firewall"
],
"severity": "High",
- "subcategory": "Storage",
- "text": "Stripe multiple Azure data disks using Storage Spaces to increase I/O bandwidth",
- "waf": "Performance"
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Your storage caching policy varies depending on the type of SQL Server data files that are hosted on the drive.Enable Read-only caching for the disks hosting SQL Server data files.Reads from cache will be faster than the uncached reads from the data disk.Set the caching policy to None for disks hosting the transaction log. There is no performance benefit to enabling caching for the Transaction log disk.",
- "guid": "05674b5e-985b-4859-a773-e7e261623b77",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
+ "service": "Firewall",
"services": [
- "Storage",
+ "ACR",
"AzurePolicy",
- "SQL"
+ "Firewall",
+ "WAF",
+ "RBAC"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "Set host caching to read-only for data file disks and none for log file disks.",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Check that you storage is in the same region as your VM. For exaplme if your VM is in EAST US 2 ensure your storage is in East US 2.",
- "guid": "5a917e1f-348e-4f35-9c27-d42e8bbac868",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
+ "service": "Firewall",
"services": [
- "Storage",
- "VM",
- "SQL"
+ "WAF",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "Provision the storage account in the same region as the SQL Server VM",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "SQL Server uses extents to store data. These are 64KB in size. Therefore, on a SQL Server machine, the NTFS allocation unit size for hosting SQL database files should be 64 KB.",
- "guid": "155abb91-63e9-4908-ae28-c84c33b6b780",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "service": "Firewall",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "DNS",
+ "Firewall"
],
"severity": "High",
- "subcategory": "Storage",
- "text": "Format your data disk to use 64 KB block size (allocation unit size) for all data files placed on a drive other than the temporary D:\\ drive",
- "waf": "Performance"
+ "text": "Use application rules to filter outbound traffic on destination host name for supported protocols. Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over other protocols.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "It is recommended that you determine BCDR needs and requirements ensuring that you are able to meet you SLAs of the environment.",
- "guid": "8b9fe5c4-2049-4d41-9a92-3c3474d11028",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/business-continuity-high-availability-disaster-recovery-hadr-overview?view=azuresql#azure-only-disaster-recovery-solutions",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "Firewall"
],
- "severity": "Medium",
- "subcategory": "HADR",
- "text": "Determine HA/DR requirements for each VM to be migrated.",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use Azure Firewall Premium to enable additional security features.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "When depoying High Availability you need to use availability sets or availability zones to avoid unexpected outages.",
- "guid": "ac6aae01-e6a8-44de-9df4-3d1992481718",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/business-continuity-high-availability-disaster-recovery-hadr-overview?view=azuresql#high-availability-nodes-in-an-availability-set",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "Firewall"
],
"severity": "High",
- "subcategory": "HADR",
- "text": "Place your VMs in an availability set or different availability zones.",
- "waf": "Reliability"
+ "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Prefered option when deploying an Availability Group. The recommended solution is to use multi-subnets when deploying Always on Availability Groups.",
- "guid": "d5d1e5f6-2565-49d3-958f-d77249c93111",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/availability-group-azure-portal-configure?view=azuresql&tabs=azure-cli",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "service": "Firewall",
"services": [
- "VNet",
- "VM",
- "LoadBalancer",
- "SQL"
+ "WAF",
+ "Firewall"
],
- "severity": "Medium",
- "subcategory": "HADR",
- "text": "Deploy your SQL Server VMs to multiple subnets whenever possible to avoid the dependency on an Azure Load Balancer or a distributed network name (DNN) to route traffic to your HADR solution. ( If one is implementing FCI or AG)",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "High availability and disaster recovery (HADR) features, such as the Always On availability group and the failover cluster instance rely on underlying Windows Server Failover Cluster technology. Review the best practices for modifying your HADR settings to better support the cloud environment.",
- "guid": "2d027fe4-12f7-4098-9f63-04722ee69d6b",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql-vm#hadr-configuration",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
+ "service": "Firewall",
"services": [
- "ASR",
- "SQL"
+ "Storage",
+ "NVA",
+ "Firewall",
+ "WAF",
+ "VWAN",
+ "VNet"
],
"severity": "High",
- "subcategory": "HADR",
- "text": "Change the cluster to less aggressive parameters to avoid unexpected outages from transient network failures or Azure platform maintenance. ( If one is implementing FCI or AG)",
- "waf": "Reliability"
+ "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance.",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Ensure that quorum is set correct for the number of instances deployed.",
- "guid": "5c2622f5-4b69-4bad-94aa-d5e8c78e1d76",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/hadr-cluster-best-practices?view=azuresql-vm&tabs=windows2012#quorum-voting",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
+ "service": "Firewall",
"services": [
- "SQL"
+ "WAF",
+ "Storage",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "HADR",
- "text": "Configure cluster quorum voting to use 3 or more odd number of votes. Don't assign votes to DR regions. ( If one is implementing FCI or AG)",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operations"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "On Azure virtual machines, clusters use a load balancer to hold an IP address that needs to be on one cluster node at a time. In this solution, the load balancer holds the IP address for the virtual network name (VNN) listener for the Always On availability group when the SQL Server VMs are in a single subnet.",
- "guid": "667313c4-0567-44b5-b985-b859c773e7e2",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/availability-group-vnn-azure-load-balancer-configure?view=azuresql-vm&tabs=ilb",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
+ "service": "Firewall",
"services": [
- "VNet",
- "VM",
- "LoadBalancer",
- "SQL"
+ "WAF",
+ "AzurePolicy",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "HADR",
- "text": "When using the virtual network name (VNN) and Azure Load Balancer to connect to your HADR solution, specify MultiSubnetFailover = true in the connection string, even if your cluster only spans one subnet. ( If one is implementing FCI or AG)",
- "waf": "Reliability"
+ "severity": "Important",
+ "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operations"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "SQL Server, Azure SQL Database, and Azure SQL Managed Instance support row and page compression for rowstore tables and indexes, and support columnstore and columnstore archival compression for columnstore tables and indexes.",
- "guid": "61623b77-5a91-47e1-b348-ef354c27d42e",
- "link": "https://learn.microsoft.com/sql/relational-databases/data-compression/data-compression?view=sql-server-ver16",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "service": "Firewall",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "Firewall",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "SQL Server",
- "text": "Enable database page compression where appropriate.",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "By default, data and log files are initialized to overwrite any existing data left on the disk from previously deleted files. Data and log files are first initialized by zeroing the files (filling with zeros).In SQL Server, for data files only, instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files.",
- "guid": "8bbac868-155a-4bb9-863e-9908ae28c84c",
- "link": "https://learn.microsoft.com/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver16",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "service": "Firewall",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "SQL Server",
- "text": "Enable instant file initialization for data files.",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
+ "waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Recommended for best performance and availability migrate all databases to data and log disks",
- "guid": "33b6b780-8b9f-4e5c-9204-9d413a923c34",
- "link": "https://learn.microsoft.com/sql/relational-databases/databases/move-database-files?view=sql-server-ver16",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
+ "service": "Firewall",
"services": [
- "SQL"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "SQL Server",
- "text": "Move all databases to data disks, including system databases.",
- "waf": "Operations"
+ "text": "Use IP Groups or IP prefixes to reduce number of IP table rules.",
+ "waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "b824546c-e1ae-4e34-93ae-c8239248725d",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql-vm#sql-server-features",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "service": "Firewall",
"services": [
- "Storage",
- "VM",
- "SQL"
+ "WAF"
],
- "severity": "Low",
- "subcategory": "SQL Server",
- "text": "Move SQL Server error log and trace file directories to data disks.",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Do not use wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "d68c5b5c-2925-4394-a69a-9d2799c42bb6",
- "link": "https://learn.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options#use-",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "SQL Server",
- "text": "Set max SQL Server memory limit to leave enough memory for the Operating System.",
+ "severity": "Medium",
+ "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it’s a sign that SNAT exhaustion might be imminent.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "8d1d7555-6246-4b43-a563-b4dc74a748b6",
- "link": "https://learn.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "Firewall"
],
"severity": "High",
- "subcategory": "SQL Server",
- "text": "Enable lock pages in memory.",
+ "text": "If you are using Azure Firewall Premium, enable TLS Inspection.",
"waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "633ad2a0-916a-4664-a8fa-d0e278ee293c",
- "link": "https://learn.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "ServiceBus"
],
"severity": "Low",
- "subcategory": "SQL Server",
- "text": "Enable Query Store on all production SQL Server databases following best practices.",
+ "text": "Use web categories to allow or deny outbound access to specific topics.",
"waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "1bc352ba-aab7-4571-a49a-b8093dc9ec9d",
- "link": "https://learn.microsoft.com/sql/relational-databases/databases/tempdb-database#optimizing-tempdb-performance-in-sql-server",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF"
],
- "severity": "High",
- "subcategory": "SQL Server",
- "text": "Ensure that all tempdb best practices are followed.",
+ "severity": "Medium",
+ "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "Performance"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "1bb73b36-a5a6-47fb-a9ed-5b35478c3479",
- "link": "https://docs.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "DNS",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "SQL Server",
- "text": "Schedule SQL Server Agent jobs to run DBCC CHECKDB, index reorganize, index rebuild, and update statistics jobs.",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Enable Azure Firewall DNS proxy configuration.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
- "guid": "816b2863-cffe-41ca-a599-ef0d5a73dd4c",
- "link": "https://docs.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "Monitor",
+ "Firewall"
],
- "severity": "Medium",
- "subcategory": "SQL Server",
- "text": "Limit autogrowth of the database and Disable autoshrink",
+ "severity": "High",
+ "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs and metrics.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "Operations"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Constrained vCPU virtual machines (VMs) are a type of VM where the vCPU count can be constrained to a half or a quarter of the original VM size. This allows customers to reduce the cost of software licensing while maintaining the same memory, storage, and I/O bandwidth",
- "guid": "e36c1c81-770a-4fbc-9c0d-43918648d285",
- "link": "https://learn.microsoft.com/azure/virtual-machines/constrained-vcpu",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "service": "Firewall",
"services": [
- "Storage",
- "VM",
- "Cost",
- "SQL"
+ "WAF",
+ "Backup"
],
"severity": "Low",
- "subcategory": "Cost Optimization",
- "text": "Optimize SQL Server License cost with Constrained vCPU VM's",
- "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
- "waf": "Cost"
+ "text": "Implement backups for your firewall rules",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Operations"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Azure Hybrid Benefit allows you to exchange your existing licenses for discounted rates on Azure SQL Database and Azure SQL Managed Instance. Y",
- "guid": "7ed67178-b824-4546-ae1a-ee3453aec823",
- "link": "https://azure.microsoft.com/en-ca/pricing/hybrid-benefit/",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
"services": [
- "Cost",
- "SQL"
+ "WAF",
+ "ACR",
+ "Firewall"
],
- "severity": "Low",
- "subcategory": "Cost Optimization",
- "text": "Leverage Azure Hybrid benefit to maximize the value of your on premises licenses in the cloud",
- "waf": "Cost"
+ "severity": "High",
+ "text": "Deploy Azure Firewall across multiple availability zones. Azure Firewall offers different SLAs depending on its deployment; in a single availability zone or across multiple, potentially improving reliability and performance.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "The SQL Server IaaS Agent extension (SqlIaasExtension) runs on SQL Server on Azure Windows Virtual Machines (VMs) to automate management and administration tasks.",
- "guid": "9248725d-d68c-45b5-a292-5394a69a9d27",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/sql-agent-extension-automatic-registration-all-vms?view=azuresql-vm&tabs=azure-cli",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "DDoS",
+ "Firewall",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Azure",
- "text": "Register with the SQL IaaS Agent Extension to unlock a number of feature benefits.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Configure DDoS Protection on the Azure Firewall VNet, Associate a DDoS protection plan with the virtual network hosting Azure Firewall to provide enhanced mitigation against DDoS attacks. Azure Firewall Manager integrates the creation of firewall infrastructure and DDoS protection plans. ",
+ "waf": "Reliability"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Accelerated Networking provides consistent ultra-low network latency via Azure's in-house programmable hardware and technologies",
- "guid": "99c42bb6-8d1d-4755-9624-6b438563b4dc",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "WAF checklist",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "App Gateway",
"services": [
- "VM",
- "SQL"
+ "WAF",
+ "VNet"
],
"severity": "High",
- "subcategory": "Azure",
- "text": "Ensure Accelerated Networking is enabled on the virtual machine.",
- "waf": "Operations"
+ "text": "Do not disrupt control-plane communication for Azure PaaS services injected into a virtual networks, such as with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Security"
},
{
- "category": "SQL Server on Azure VM",
- "checklist": "SQL Migration Review",
- "description": "Microsoft Defender detects anomalous activities indicating unusual and potentially harmful attempts to access or exploit databases on the SQL server.",
- "guid": "74a748b6-633a-4d2a-8916-a66498fad0e2",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/secure-score-security-controls",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
+ "service": "ExpressRoute",
"services": [
- "VM",
- "Defender",
- "SQL"
+ "WAF",
+ "ExpressRoute",
+ "PrivateLink"
],
- "severity": "High",
- "subcategory": "Azure",
- "text": "Leverage Microsoft Defender for Cloud to improve the overall security posture of your virtual machine deployment.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "severity": "Medium",
+ "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "There are some PaaS limitations that are introduced in SQL Managed Instance and some behavior changes compared to SQL Server. It is important to review and understand these differences.",
- "guid": "78ee293c-1bc3-452b-aaab-7571849ab809",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
+ "service": "VNet",
"services": [
- "EventHubs",
- "SQL"
+ "WAF",
+ "VNet"
],
"severity": "High",
- "subcategory": "Pre Migration",
- "text": "Review the major differences between SQL Server and Managed Instance",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Operations"
+ "text": "Don't enable virtual network service endpoints by default on all subnets.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "SQL Managed Instance has characteristics and resource limits that depend on the underlying infrastructure and architecture. It is important to review these limits.",
- "guid": "3dc9ec9d-1bb7-43b3-9a5a-67fba9ed5b35",
- "link": "https://docs.microsoft.com/azure/azure-sql/managed-instance/resource-limits",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
+ "service": "Firewall",
"services": [
- "SQL"
+ "DNS",
+ "NVA",
+ "Firewall",
+ "WAF",
+ "PrivateLink"
],
- "severity": "High",
- "subcategory": "Pre Migration",
- "text": "Review capacity limits for SQL MI",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "The instance settings between managed instance and your source SQL Server can be different . It is important to review those differences that can impact performance.",
- "guid": "8bc178bd-c5a0-46ca-9144-351e19dd3442",
- "link": "https://medium.com/azure-sqldb-managed-instance/compare-environment-settings-on-sql-server-and-azure-sql-that-may-impact-performance-e90c21fa9b08",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
+ "service": "ExpressRoute",
"services": [
- "SQL"
+ "WAF",
+ "ExpressRoute",
+ "VPN",
+ "VNet"
],
"severity": "High",
- "subcategory": "Pre Migration",
- "text": "Compare instance settings on SQL Server and Azure SQL MI that may impact performance",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "waf": "Performance"
+ "text": "Use at least a /27 prefix for your Gateway subnets.",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Assess on-premises SQL Server instance(s) migrating to Azure SQL Managed Instance. The assessment workflow helps you to detect issues that block the migration itself and also partially supported and unsupported features",
- "guid": "9eb72281-37a1-451c-9bb4-e4f1814287d5",
- "link": "https://docs.microsoft.com/azure/dms/ads-sku-recommend",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
+ "service": "NSG",
"services": [
- "SQL"
+ "WAF",
+ "VNet"
],
"severity": "High",
- "subcategory": "Pre Migration",
- "text": "Run Data Migration assistant or Azure Data Studio Migration Extension to detect compatibility issues that can impact database functionality on Managed Instance",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Operations"
+ "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "The SKU recommendation feature can evaluate the source SQL Server performance and utilization characteristics to recommend a right-sized Azure SQL Managed Instance to assist with your migration journey.",
- "guid": "ca8c26c9-b32a-4b5b-afc6-898a135e3378",
- "link": "https://learn.microsoft.com/azure/dms/ads-sku-recommend",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "service": "NSG",
"services": [
- "SQL"
+ "WAF",
+ "ACR",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Pre Migration",
- "text": "Select the right compute resources for your workload by leveraging the SKU recommendation tools.",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Review Unsupported Features, Migration Blockers and Breaking Changes for each database from the Assessment",
- "guid": "97e31c67-d68c-4b69-82ac-19f906d697c8",
- "link": "https://learn.microsoft.com/azure/dms/ads-sku-recommend",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "WAF checklist",
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "NSG",
"services": [
- "SQL"
+ "WAF",
+ "Entra",
+ "NVA",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Pre Migration",
- "text": "Review and address the issues highlighted in DMA/Azure Data Studio",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "The SQL Managed Instance default DNS zone .database.windows.net can be changed with your own. However, the managed instance hostname part of its FQDN should remain the same.",
- "guid": "eaded26b-dd18-46f0-ac25-1b999a68af87",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/frequently-asked-questions-faq?view=azuresql-mi#can-a-managed-instance-have-the-same-name-as-a-sql-server-on-premises-instance",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
+ "service": "NSG",
"services": [
- "DNS",
- "SQL"
+ "WAF",
+ "NetworkWatcher",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Pre Migration",
- "text": "Plan for connection string changes as changing a managed instance name is not supported",
- "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "There are addional requirements in configuring a vnet and subnet hosting the managed instance.",
- "guid": "c9a7f821-b8eb-48c0-aa77-e25e4d5aeaa8",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/vnet-existing-add-subnet?view=azuresql-mi",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "NSG",
"services": [
- "VNet",
- "SQL"
+ "WAF",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Pre Migration",
- "text": "Review managed instance VNet requirements",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
- "waf": "Operations"
+ "text": "Do not implement more than 900 NSG rules per NSG, due to the limit of 1000 rules.",
+ "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "waf": "Reliability"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Though it's possible to deploy managed instances to a subnet with a number of IP addresses that's less than the output of the subnet formula, always consider using bigger subnets instead. Using a bigger subnet can help avoid future issues stemming from a lack of IP addresses, such as the inability to create additional instances within the subnet or scale existing instances.",
- "guid": "dc4e2436-bb33-46d7-85f1-7960eee0b9b5",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/vnet-subnet-determine-size?view=azuresql-mi",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
+ "service": "VWAN",
"services": [
- "VNet",
- "SQL"
+ "WAF",
+ "VWAN"
],
- "severity": "High",
- "subcategory": "Deployment",
- "text": "Ensure managed instance subnet has sufficient IP addresses available",
- "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "severity": "Medium",
+ "text": "Use Virtual WAN if your scenario is explicitly described in the list of Virtual WAN routing designs.",
+ "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "Operations"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "SQL Managed Instance has characteristics and resource limits that depend on the underlying infrastructure and architecture. SQL Managed Instance can be deployed on multiple hardware configurations.",
- "guid": "c8defc4d-721d-431d-850f-b707ae9eab40",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/resource-limits?view=azuresql-mi#service-tier-characteristics",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "ACR",
+ "VWAN"
],
- "severity": "High",
- "subcategory": "Pre Migration",
- "text": "Plan between General Purpose and Business Critical tiers of MI",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "severity": "Medium",
+ "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Performance"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "The auto-failover groups feature allows you to manage the replication and failover of user databases in a managed instance to a managed instance in another Azure region. Auto-failover groups are designed to simplify deployment and management of geo-replicated databases at scale.",
- "guid": "ed329079-8bc1-478b-bc5a-06ca7144351e",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/auto-failover-group-sql-mi?view=azuresql-mi&tabs=azure-powershell",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "Pre Migration",
- "text": "Based on your RPO/RTO's , determine if Auto failover Group needs to be implemented. If so, plan for the deployment attributes of the second instance.",
- "training": "https://learn.microsoft.com/learn/paths/implement-windows-server-iaas-virtual-machine-identity/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "There are multiple ways to connect your application to the managed instance. Review and understand the pros and cons and decide on the best approach for your application.",
- "guid": "5d226886-d30b-466c-97be-595190f83845",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/connect-application-instance?view=azuresql-mi",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "VWAN"
],
- "severity": "Low",
- "subcategory": "Pre Migration",
- "text": "Review the Connectivity Design between Database and Application, test & validate it",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Ensure that your virtual WAN network architecture aligns to an identified architecture scenario.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Compare migration options to choose the path that's appropriate to your business needs.",
- "guid": "c586cb29-1ec1-46a1-b076-ef9f141acdce",
- "link": "https://learn.microsoft.com/azure/azure-sql/migration-guides/managed-instance/sql-server-to-managed-instance-overview?view=azuresql-mi#migration-tools",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "VWAN",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Pre Migration",
- "text": "Plan for the Migration Method. Depending on the DB Size and Application downtime window, select the preferred Migration Method.",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Operations"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "After you verify that data is the same on both source and target, you can cut over from the source to the target environment. It's important to plan the cutover process with business / application teams to ensure minimal interruption during cutover doesn't affect business continuity.",
- "guid": "579377bc-db37-451a-a2ac-1fad66e15d4d",
- "link": "https://learn.microsoft.com/azure/dms/tutorial-sql-server-managed-instance-online#performing-migration-cutover",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "VWAN"
],
"severity": "Medium",
- "subcategory": "Pre Migration",
- "text": "Plan the cutover process with business / application teams to ensure minimal interruption during cutover and it does not affect business continuity.",
- "training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
+ "text": "Do not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Reliability"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "A time zone of a managed instance can be set during instance creation only. The default time zone is UTC",
- "guid": "4a2adb1c-3d23-426a-b225-ca44e1695fdd",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/timezones-overview?view=azuresql#set-a-time-zone",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "ExpressRoute",
+ "VPN"
],
- "severity": "High",
- "subcategory": "Deployment",
- "text": "Ensure you customize your time zone setting at the instance creation time. One cannot change it later.",
- "training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Server-level collation in Azure SQL Managed Instance can be specified when the instance is created and cannot be changed later.Default server-level collation is SQL_Latin1_General_CP1_CI_AS.",
- "guid": "deace4cb-1deb-44c6-90c3-fc14eebb3693",
- "link": "https://learn.microsoft.com/sql/relational-databases/collations/set-or-change-the-server-collation?view=sql-server-ver16",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "service": "VWAN",
"services": [
- "SQL"
+ "WAF",
+ "VWAN"
],
- "severity": "High",
- "subcategory": "Deployment",
- "text": "Ensure you select the right collation setting at the instance creation time. One cannot change it later",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Configure label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "When you're migrating a database protected by Transparent Data Encryption (TDE) to Azure SQL Managed Instance using the native restore option, the corresponding certificate from the SQL Server instance needs to be migrated before database restore.",
- "guid": "829e3eec-2183-4687-a007-7a2b5945bda4",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/tde-certificate-migrate?view=azuresql-mi&tabs=azure-powershell",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "WAF checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "service": "VWAN",
"services": [
- "VM",
- "SQL"
+ "WAF"
],
- "severity": "Medium",
- "subcategory": "Deployment",
- "text": "For TDE Enabled Database, corresponding certificate from the on-premises or Azure VM SQL Server needs to be migrated before database restore",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Assign at least a /23 prefix to virtual hubs to ensure enough IP space is available.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "System databases can be restored only from backups that are created on the version of SQL Server that the server instance is currently running. This is not the case when you are migrating to SQL Managed Instance.Azure PowerShell and DBATools PowerShell libraries enable you to easily script and automate and customize all parts of the migration process.",
- "guid": "3334fdf9-1c23-4418-8b65-275269440b4b",
- "link": "https://learn.microsoft.com/azure/azure-sql/migration-guides/managed-instance/sql-server-to-managed-instance-guide?view=azuresql-mi#backup-and-restore",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "Backup",
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Migration",
- "text": "Restore of system databases is not supported. To migrate instance-level objects (stored in master or msdb databases), we recommend to script them out and run T-SQL scripts on the destination instance.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "When using migration options that continuously replicate / sync data changes from source to the target, the source data and schema can change and drift from the target. During data sync, ensure that all changes on the source are captured and applied to the target during the migration process.",
- "guid": "e3d3e084-3276-4d4b-bc01-5bcf219e4a1e",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "SQL"
+ "WAF",
+ "RBAC",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Migration",
- "text": "Ensure that all changes on the source are captured and applied to the target during the migration process.",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Ensure that the application is able to succesffuly connect to the managed instance post migration of the databases.",
- "guid": "b5887952-5d22-4688-9d30-b66c57be5951",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/connect-application-instance?view=azuresql-mi",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "SQL"
+ "WAF",
+ "Subscriptions",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Migration",
- "text": "Test Application Connectivity to MI and Databases",
- "waf": "Operations"
+ "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "High availability is a fundamental part of SQL Managed Instance platform that works transparently for your database applications. Failovers from primary to secondary nodes in case of node degradation or fault detection, or during regular monthly software updates are an expected occurrence for all applications using SQL Managed Instance in Azure.",
- "guid": "90f83845-c586-4cb2-a1ec-16a1d076ef9f",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/user-initiated-failover?view=azuresql",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Post Migration",
- "text": "Consider executing a manual failover on SQL Managed Instance to test for fault and failover resiliency.",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "waf": "Reliability"
+ "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Ensuring that your applications are failover resilient prior to deploying to production will help mitigate the risk of application faults in production and will contribute to application availability for your customers.",
- "guid": "141acdce-5793-477b-adb3-751ab2ac1fad",
- "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/auto-failover-group-configure-sql-mi?view=azuresql&tabs=azure-portal#test-failover",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "service": "Policy",
"services": [
- "EventHubs",
- "LoadBalancer",
- "SQL"
+ "WAF",
+ "Subscriptions",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Post Migration",
- "text": "If failover groups have been implemented, Test Manual Failover and Failback and test application connectivity behavior during failover/failback",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Use Azure Policy to control which services users can provision at the subscription/management group level.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "This provides more dedicated disk IOPS and throughput",
- "guid": "aa359272-8e6e-4205-8726-76ae46691e88",
- "link": "https://techcommunity.microsoft.com/t5/azure-sql-blog/storage-performance-best-practices-and-considerations-for-azure/ba-p/305525",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "Storage",
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Post Migration",
- "text": "Optimize Storage Performance for General Purpose Managed Instance",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Performance"
+ "text": "Use built-in policies where possible to minimize operational overhead.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "Many organizations have policies that require that certificates or encryption keys be created and managed internally. If your organization has a similar policy, this architecture might apply to you. If your customers require internal management of these items, the architecture also might apply to you.",
- "guid": "35ad9422-23e1-4381-8523-081a94174158",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/data/sql-managed-instance-cmk",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "service": "Policy",
"services": [
"AzurePolicy",
- "AKV",
- "Backup",
- "SQL"
+ "WAF",
+ "RBAC",
+ "Entra",
+ "Subscriptions"
],
- "severity": "Low",
- "subcategory": "Post Migration",
- "text": "Enable Customer managed TDE for taking your own copy only full backups",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "severity": "Medium",
+ "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "The maintenance window feature provides you with the ability to onboard Azure SQL resource to prescheduled time blocks outside of business hours.",
- "guid": "33ef7ad7-c6d3-4733-865c-7acbe44bbe60",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/planned-maintenance?view=azuresql",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "SQL"
+ "WAF",
+ "Subscriptions",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Post Migration",
- "text": "Plan for Azure maintenance events",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
- },
- {
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "By using the long-term retention (LTR) feature, you can store specified SQL Database and SQL Managed Instance full backups in Azure Blob storage with configured redundancy for up to 10 years.",
- "guid": "9d89f2e8-7778-4424-b516-785c6fa96b96",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/long-term-retention-overview?view=azuresql-mi",
- "services": [
- "Storage",
- "ARS",
- "Backup",
- "SQL"
- ],
- "severity": "Low",
- "subcategory": "Post Migration",
- "text": "Configure Long Term backup retention, view backups and restore from backups",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "Reliability"
+ "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "By using Azure Hybrid Benefit, you can achieve cost savings, modernise and maintain a flexible hybrid environment while optimising business applications.",
- "guid": "ad88408f-3727-434c-a76b-a28021459014",
- "link": "https://azure.microsoft.com/en-gb/pricing/hybrid-benefit/#overview",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
+ "service": "Policy",
"services": [
- "Cost",
- "SQL"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Post Migration",
- "text": "Take advantage of Azure Hybrid Benefit and Azure Reservations where applicable.",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "If any data sovereignty requirements exist, Azure Policies should be deployed to enforce them.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "waf": "Security"
},
{
- "category": "SQL Managed Instance",
- "checklist": "SQL Migration Review",
- "description": "If you don't have threat protection Advanced Threat Protection is part of the Microsoft Defender for SQL offering, which is a unified package for advanced SQL security capabilities.",
- "guid": "65d38e53-f9cc-4bd8-9926-6acca274faa1",
- "link": "https://learn.microsoft.com/azure/azure-sql/database/threat-detection-overview?view=azuresql",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
+ "service": "Policy",
"services": [
- "Defender",
- "SQL"
+ "WAF",
+ "Subscriptions",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Post Migration",
- "text": "Leverage Microsoft Defender for Cloud to improve the overall security posture",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "text": "For Sovereign Landing Zone, deploy sovereignty policy baseline and assign at correct management group level.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
- "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
- "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
+ "service": "Policy",
"services": [
- "EventHubs"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Data Protection",
- "text": "Use customer-managed key option in data at rest encryption when required",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, document Sovereign Control objectives to policy mapping.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hubs namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Event Hubs namespace to require that clients send and receive data with a newer version of TLS. If an Event Hubs namespace requires a minimum version of TLS, then any requests made with an older version will fail. ",
- "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
- "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "WAF checklist",
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
+ "service": "Policy",
"services": [
- "EventHubs"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "For Sovereign Landing Zone, ensure process is in place for management of 'Sovereign Control objectives to policy mapping'.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "When you create an Event Hubs namespace, a policy rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has manage permissions for the entire namespace. It�s recommended that you treat this rule like an administrative root account and don�t use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
- "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "WAF checklist",
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
+ "service": "Monitor",
"services": [
- "TrafficManager",
- "Entra",
+ "AzurePolicy",
+ "WAF",
+ "Monitor",
"RBAC",
- "EventHubs",
- "AzurePolicy"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Avoid using root account when it is not necessary",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "waf": "Security"
+ "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "Managed identities for Azure resources can authorize access to Event Hubs resources using Azure AD credentials from applications running in Azure Virtual Machines (VMs), Function apps, Virtual Machine Scale Sets, and other services. By using managed identities for Azure resources together with Azure AD authentication, you can avoid storing credentials with your applications that run in the cloud. ",
- "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
- "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "WAF checklist",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"services": [
- "Storage",
- "Entra",
- "EventHubs",
- "AKV",
- "VM"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "When possible, your application should be using a managed identity to authenticate to Azure Event Hub. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "text": "Decide whether to use a single Azure Monitor Logs workspace for all regions or to create multiple workspaces to cover various geographical regions. Each approach has advantages and disadvantages, including potential cross-region networking charges",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "When creating permissions, provide fine-grained control over a client's access to Azure Event Hub. Permissions in Azure Event Hub can and should be scoped to the individual resource level e.g. consumer group, event hub entity, event hub namespaces, etc.",
- "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "WAF checklist",
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Monitor",
"services": [
- "EventHubs",
- "Entra",
- "RBAC"
+ "WAF",
+ "ARS",
+ "AzurePolicy",
+ "Storage"
],
"severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Use least privilege data plane RBAC",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Security"
+ "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub resource logs include operational logs, virtual network and Kafka logs. Runtime audit logs capture aggregated diagnostic information for all data plane access operations (such as send or receive events) in Event Hubs.",
- "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
- "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "WAF checklist",
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
+ "service": "VM",
"services": [
- "EventHubs",
- "VNet",
- "Monitor"
+ "WAF",
+ "Monitor",
+ "AzurePolicy",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Enable logging for security investigation. Use Azure Monitor to captured metrics and logs such as resource logs, runtime audit logs and Kafka logs",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Security"
+ "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Event Hub traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
- "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
- "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "WAF checklist",
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
+ "service": "VM",
"services": [
- "EventHubs",
- "VNet",
- "PrivateLink"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Consider using private endpoints to access Azure Event Hub and disable public network access when applicable.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Event Hub Review",
- "description": "With IP firewall, you can restrict public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
- "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "WAF checklist",
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "service": "VM",
"services": [
- "EventHubs"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Consider only allowing access to Azure Event Hub namespace from specific IP addresses or ranges",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Event Hub Review",
- "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
- "service": "Event Hubs",
+ "arm-service": "microsoft.network/networkWatchers",
+ "checklist": "WAF checklist",
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Network Watcher",
"services": [
- "EventHubs"
+ "WAF",
+ "Monitor",
+ "NetworkWatcher"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage FTA Resillency HandBook",
- "waf": "Reliability"
+ "text": "Use Network Watcher to proactively monitor traffic flows.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Event Hub Review",
- "description": " This will be turned on automatically for a new EH namespace created from the portal with Premium, Dedicated, or Standard SKUs in a zone-enabled region. Both the EH metadata and the event data itself are replicated across zones",
- "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "WAF checklist",
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Monitor",
"services": [
- "EventHubs",
- "ACR"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Zone Redudancy",
- "text": "Leverage Availability Zones if regionally applicable",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use Azure Monitor Logs for insights and reporting.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Event Hub Review",
- "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
- "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "WAF checklist",
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "service": "Monitor",
"services": [
- "EventHubs"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Use the Premium or Dedicated SKUs for predicable performance",
- "waf": "Reliability"
+ "text": "Use Azure Monitor alerts for the generation of operational alerts.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Event Hub Review",
- "description": "The built-in geo-disaster recovery feature, when enabled, ensures that the entire configuration of anamespace (Event Hubs, Consumer Groups and settings) is continuously replicated from a primary namespace to a secondary namespace, and it allows a once-only failover move from the primary to the secondary at any time. Active/Passive feature is designed to make it easier to recover from and abandon a failed Azure region without having to change application configurations",
- "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "WAF checklist",
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "Monitor",
"services": [
- "EventHubs",
- "ASR"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Geo Redudancy",
- "text": "Plan for Geo Disaster Recovery using Active Passive configuration",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Event Hub Review",
- "description": "Should be used for DR configurations where an outage or loss of event data in the downed region cannot be tolerated. For these cases, follow the replication guidance and do not use the built-in geo-disaster recovery capability (active/passive). With Active/Active, Maintain multiple Event Hubs in different regions and namespaces, and events will be replicated between the hubs",
- "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "WAF checklist",
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Backup",
"services": [
- "EventHubs",
- "ASR"
+ "WAF",
+ "Backup"
],
- "severity": "Medium",
- "subcategory": "Geo Redudancy",
- "text": "For Business Critical Applications, use Active Active configuration",
+ "severity": "Low",
+ "text": "When using Azure Backup, use the correct backup types (GRS, ZRS & LRS) for your backup, as the default setting is GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Azure Event Hub Review",
- "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
- "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "WAF checklist",
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "VM",
"services": [
- "EventHubs"
+ "WAF",
+ "AzurePolicy",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Reliability",
- "text": "Design Resilient Event Hubs",
- "waf": "Reliability"
+ "text": "Use Azure guest policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "description": "Disable image export to prevent data exfiltration. Note that this will prevent image import of images into another ACR instance.",
- "guid": "ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e",
- "link": "https://learn.microsoft.com/azure/container-registry/data-loss-prevention",
- "service": "ACR",
+ "description": "Use Azure Policy's guest configuration features to audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "VM",
"services": [
- "ACR",
- "WAF"
+ "WAF",
+ "Monitor",
+ "AzurePolicy",
+ "VM"
],
- "severity": "High",
- "text": "Disable Azure Container Registry image export",
+ "severity": "Medium",
+ "text": "Monitor VM security configuration drift via Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "description": "Enable audit compliance visibility by enabling Azure Policy for Azure Container Registry",
- "guid": "d503547c-d447-4e82-9128-a7100f1cac6d",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-azure-policy",
- "service": "ACR",
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
"services": [
+ "WAF",
"ACR",
- "AzurePolicy",
- "WAF"
+ "ASR",
+ "VM"
],
- "severity": "High",
- "text": "Enable Azure Policies for Azure Container Registry",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "description": "The Azure Key Vault (AKV) is used to store a signing key that can be utilized by?notation?with the notation AKV plugin (azure-kv) to sign and verify container images and other artifacts. The Azure Container Registry (ACR) allows you to attach these signatures using the?az?or?oras?CLI commands.",
- "guid": "d345293c-7639-4637-a551-c5c04e401955",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push",
- "service": "ACR",
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "Backup",
"services": [
- "ACR",
- "AKV",
- "WAF"
+ "WAF",
+ "Backup"
+ ],
+ "severity": "Medium",
+ "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "WAF checklist",
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "WAF",
+ "services": [
+ "WAF",
+ "AppGW",
+ "FrontDoor"
],
"severity": "High",
- "text": "Sign and Verify containers with notation (Notary v2)",
- "waf": "Security"
+ "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
+ "waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "WAF checklist",
- "description": "Azure Container Registry automatically encrypts images and other artifacts that you store. By default, Azure automatically encrypts the registry content at rest by using service-managed keys. By using a customer-managed key, you can supplement default encryption with an additional encryption layer.",
- "guid": "0bd05dc2-efd5-4d76-8d41-d2500cc47b49",
- "link": "https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys",
- "service": "ACR",
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "WAF",
"services": [
- "ACR",
- "AKV",
- "WAF"
+ "WAF",
+ "Sentinel",
+ "AppGW",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Encrypt registry with a customer managed key",
- "waf": "Security"
+ "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Use managed identities to secure ACRPull/Push RBAC access from client applications",
- "guid": "8f42d78e-79dc-47b3-9bd2-a1a27e7a8e90",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
- "service": "ACR",
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "Key Vault",
"services": [
- "ACR",
- "Entra",
- "RBAC",
- "WAF"
+ "WAF",
+ "AKV"
],
"severity": "High",
- "text": "Use Managed Identities to connect instead of Service Principals",
+ "text": "Use Azure Key Vault to store your secrets and credentials.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "The local Administrator account is disabled by default and should not be enabled. Use either Token or RBAC-based access methods instead",
- "guid": "be0e38ce-e297-411b-b363-caaab79b198d",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
- "service": "ACR",
+ "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "service": "Key Vault",
"services": [
- "RBAC",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "High",
- "text": "Disable local authentication for management plane access",
+ "severity": "Medium",
+ "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Disable Administrator account and assign RBAC roles to principals for ACR Pull/Push operations",
- "guid": "387e5ced-126c-4d13-8af5-b20c6998a646",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli",
- "service": "ACR",
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "ACR",
- "Entra",
- "RBAC",
- "WAF"
+ "WAF",
+ "AKV",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Assign AcrPull & AcrPush RBAC roles rather than granting Administrative access to identity principals",
+ "severity": "Medium",
+ "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Disable anonymous pull/push access",
- "guid": "e338997e-41c7-47d7-acf6-a62a1194956d",
- "link": "https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access",
- "service": "ACR",
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "text": "Disable Anonymous pull access",
+ "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Token authentication doesn't support assignment to an AAD principal. Any tokens provided are able to be used by anyone who can access the token",
- "guid": "698dc3a2-fd27-4b2e-8870-1a1252beedf6",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication?tabs=azure-cli",
- "service": "ACR",
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Entra",
"WAF"
],
- "severity": "High",
- "text": "Disable repository-scoped access tokens",
+ "severity": "Medium",
+ "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Deploy container images to an ACR behind a Private endpoint within a trusted network",
- "guid": "b3bec3d4-f343-47c1-936d-b55f27a71eee",
- "service": "ACR",
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "EventHubs",
- "PrivateLink",
- "ACR",
"WAF"
],
- "severity": "High",
- "text": "Deploy images from a trusted environment",
+ "severity": "Medium",
+ "text": "Establish an automated process for key and certificate rotation.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Only tokens with an ACR audience can be used for authentication. Used when enabling Conditional access policies for ACR",
- "guid": "3a041fd3-2947-498b-8288-b3c6a56ceb54",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-enable-conditional-access-policy",
- "service": "ACR",
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Entra",
- "ACR",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AKV",
+ "PrivateLink",
+ "VNet"
],
"severity": "Medium",
- "text": "Disable Azure ARM audience tokens for authentication",
+ "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Set up a diagnostic setting to send 'repositoryEvents' & 'LoginEvents' to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the ACR resource itself.",
- "guid": "8a488cde-c486-42bc-9bd2-1be77f26e5e6",
- "link": "https://learn.microsoft.com/azure/container-registry/monitor-service",
- "service": "ACR",
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "service": "Key Vault",
"services": [
+ "WAF",
+ "AKV",
"Monitor",
- "Entra",
- "ACR",
- "WAF"
+ "Entra"
],
"severity": "Medium",
- "text": "Enable diagnostics logging",
+ "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Service supports disabling public network access either through using service-level IP ACL filtering rule (not NSG or Azure Firewall) or using a 'Disable Public Network Access' toggle switch",
- "guid": "21d41d25-00b7-407a-b9ea-b40fd3290798",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
- "service": "ACR",
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "VNet",
- "PrivateLink",
"WAF",
- "Firewall"
+ "AKV",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Control inbound network access with Private Link",
+ "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Disable public network access if inbound network access is secured using Private Link",
- "guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access",
- "service": "ACR",
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "PrivateLink",
- "WAF"
+ "WAF",
+ "AKV"
],
"severity": "Medium",
- "text": "Disable Public Network access",
+ "text": "Use an Azure Key Vault per application per environment per region.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Only the ACR Premium SKU supports Private Link access",
- "guid": "fc833934-8b26-42d6-ac5f-512925498f6d",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-skus",
- "service": "ACR",
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "PrivateLink",
+ "WAF",
"ACR",
- "WAF"
+ "AKV",
+ "ASR"
],
"severity": "Medium",
- "text": "Use an Azure Container Registry SKU that supports Private Link (Premium SKU)",
+ "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "description": "Azure Defender for containers or equivalent service should be used to scan container images for vulnerabilities",
- "guid": "bad37dac-43bc-46ce-8d7a-a9b24604489a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
- "service": "ACR",
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "service": "Key Vault",
"services": [
- "Defender",
- "ACR",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "Low",
- "text": "Enable Defender for Containers to scan Azure Container Registry for vulnerabilities",
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
- "guid": "4451e1a2-d345-4293-a763-9637a551c5c0",
- "service": "ACR",
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "service": "Entra",
"services": [
- "WAF"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "text": "Deploy validated container images",
+ "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
- "guid": "4e401955-387e-45ce-b126-cd132af5b20c",
- "service": "ACR",
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "service": "Defender",
"services": [
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "Defender"
],
"severity": "High",
- "text": "Use up-to-date platforms, languages, protocols and frameworks",
+ "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "service": "Defender",
"services": [
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "Defender"
],
- "severity": "Medium",
- "text": "Leverage FTA Resiliency Playbook for Azure Data Factory",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "service": "Defender",
"services": [
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "Defender"
],
"severity": "High",
- "text": "Use zone redundant pipelines in regions that support Availability Zones",
- "waf": "Reliability"
+ "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "service": "VM",
"services": [
- "Backup",
"WAF"
],
- "severity": "Medium",
- "text": "Use DevOps to Backup the ARM templates with Github/Azure DevOps integration ",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enable Endpoint Protection on IaaS Servers.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "service": "VM",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "Monitor",
+ "Defender"
],
"severity": "Medium",
- "text": "Make sure you replicate the Self-Hosted Integration Runtime VMs in another region ",
- "waf": "Reliability"
+ "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "WAF checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "Monitor",
+ "Entra"
],
"severity": "Medium",
- "text": "Make sure you replicate or duplicate your network in the sister region. You have to make a copy of your Vnet in another region",
- "waf": "Reliability"
+ "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "description": "If your ADF Pipelines use Key Vault you don't have to do anything to replicate Key Vault. Key Vault is a managed service and Microsoft takes care of it for you",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "ACR",
+ "Entra"
],
- "severity": "Low",
- "text": "If using Keyvault integration, use SLA of Keyvault to understand your availablity",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Centralized threat detection with correlated logs - consolidate security data in a central location where it can be correlated across various services via SIEM (security information and event management)",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "description": "Using the correct approach to feed a datalake with cold data and having the Kusto query engine at your disposal at the same time, as in the short-term storage",
- "guid": "ba7da7be-9951-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/data-explorer/kusto/management/data-export/continuous-data-export",
- "service": "Azure Data Explorer",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
+ "service": "Entra",
"services": [
- "Storage",
- "Cost",
- "WAF"
+ "WAF",
+ "Entra"
],
- "text": "Leverage External Tables and Continuous data export overview to reduce costs",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, enable transparancy logs on the Entra ID tenant.",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "description": "Azure Data Explorer provides an optional follower capability for a leader cluster to be followed by other follower clusters for read-only access to the leader's data and metadata. Changes in the leader, such as create, append, and drop are automatically synchronized to the follower. While the leaders could span Azure regions, the follower clusters should be hosted in the same region(s) as the leader. If the leader cluster is down or databases or tables are accidentally dropped, the follower clusters will lose access until access is recovered in the leader.",
- "guid": "56a22586-f490-4641-addd-ea8a377cdeb3",
- "link": "https://learn.microsoft.com/azure/data-explorer/follower?tabs=csharp",
- "service": "Azure Data Explorer",
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "service": "Entra",
"services": [
- "Storage",
- "WAF"
+ "WAF",
+ "Entra"
],
- "text": "To share data, explore Leader-follower cluster configuration",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, enable customer Lockbox on the Entra ID tenant.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "description": "Azure Data Explorer doesn't support automatic protection against the outage of an entire Azure region. This disruption can happen during a natural disaster, like an earthquake. If you require a solution for a disaster recovery situation, do the following steps to ensure business continuity. In these steps, you'll replicate your clusters, management, and data ingestion in two Azure paired regions.",
- "guid": "861bb2bc-14ae-4a6e-95d8-d9a3adc218e6",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#create-multiple-independent-clusters",
- "service": "Azure Data Explorer",
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Storage",
"services": [
- "ASR",
- "WAF"
+ "WAF",
+ "Storage"
],
- "text": "To protect against regional failure, create Multiple independent clusters, preferably in two Azure Paired regions",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enable secure transfer to storage accounts.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "guid": "436b0635-cb45-4e57-a603-324ace8cc123",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#replicate-management-activities",
- "service": "Azure Data Explorer",
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
+ "service": "Storage",
"services": [
- "Storage",
- "RBAC",
- "WAF"
+ "WAF",
+ "Storage"
],
- "text": "Replicate all management activities such as creating new tables or managing user roles on each cluster.",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "18ca6017-0265-4f4b-a46a-393af7f31728",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution",
- "service": "Azure Data Explorer",
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "service": "Key Vault",
+ "services": [
+ "WAF",
+ "AKV",
+ "VM"
+ ],
+ "severity": "High",
+ "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "WAF checklist",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
"services": [
"WAF"
],
- "text": "Ingest data into each cluster in parallel",
+ "severity": "Low",
+ "text": "Refer to baseline highly available zone-redundant web application architecture for best practices",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "description": "This configuration is also called 'always-on'. For critical application deployments with no tolerance for outages, you should use multiple Azure Data Explorer clusters across Azure paired regions.",
- "guid": "58a9c279-9c42-4bb6-9d0c-65556246b338",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-active-configuration",
- "service": "Azure Data Explorer",
+ "graph": "resources | where type =~ 'microsoft.web/serverfarms' | extend compliant = (sku.tier == 'Premium' or sku.tier == 'Standard') | distinct id,compliant",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"services": [
- "ACR",
- "WAF"
+ "WAF",
+ "Backup"
],
- "text": "For critical application with no tolerance for outages, create Active-Active-Active (always-on) configuration",
+ "severity": "Medium",
+ "text": "Use Premium and Standard tiers. These tiers support staging slots and automated backups.",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "description": "This configuration is identical to the active-active-active configuration, but only involves two Azure paired regions. Configure dual ingestion, processing, and curation. Users are routed to the nearest region. The cluster SKU must be the same across regions.",
- "guid": "563a4dc7-4a74-48b6-922a-d190916a6649",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-configuration",
- "service": "Azure Data Explorer",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "service": "App Services",
"services": [
- "ACR",
"WAF"
],
- "text": "For critical applications, create Active-Active configuration in two paired regions",
+ "severity": "High",
+ "text": "Leverage Availability Zones where regionally applicable (requires Premium v2 or v3 tier)",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "description": "The Active-Hot configuration is similar to the Active-Active configuration in dual ingest, processing, and curation. While the standby cluster is online for ingestion, process, and curation, it isn't available to query. The standby cluster doesn't need to be in the same SKU as the primary cluster. It can be of a smaller SKU and scale, which may result in it being less performant. In a disaster scenario, users are redirected to the standby cluster, which can optionally be scaled up to increase performance.",
- "guid": "8fadfe27-7de2-483b-8ac3-52baa9b75708",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-hot-standby-configuration",
- "service": "Azure Data Explorer",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.HealthCheckPath != '') | distinct id,compliant",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"services": [
"WAF"
],
- "text": "For applications, which required only read during failure, create Active-Hot standby configuration",
+ "severity": "Medium",
+ "text": "Implement health checks",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "description": "This solution offers the least resiliency (highest RPO and RTO), is the lowest in cost and highest in effort. In this configuration, there's no data recovery cluster. Configure continuous export of curated data (unless raw and intermediate data is also required) to a storage account that is configured GRS (Geo Redundant Storage). A data recovery cluster is spun up if there is a disaster recovery scenario. At that time, DDLs, configuration, policies, and processes are applied. Data is ingested from storage with the ingestion property kustoCreationTime to over-ride the ingestion time that defaults to system time.",
- "guid": "49aa8092-dc8e-4b9d-8bb7-3b26a5a67eba",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#on-demand-data-recovery-configuration",
- "service": "Azure Data Explorer",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "service": "App Services",
"services": [
- "Storage",
- "Cost",
"WAF",
- "ASR",
- "AzurePolicy"
+ "AppSvc",
+ "Backup"
],
- "text": "For applications, where cost is a concern and can withstand some downtime during failure, create on-demand data recovery cluster configuration",
+ "severity": "High",
+ "text": "Refer to backup and restore best practices for Azure App Service",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "description": "All database objects, policies, and configurations should be persisted in source control so they can be released to the cluster from your release automation tool.",
- "guid": "5a907e1e-348e-4f25-9c27-d32e8bbac757",
- "link": "https://learn.microsoft.com/azure/data-explorer/devops",
- "service": "Azure Data Explorer",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AppSvc"
],
- "text": "Wrap DevOps and source control around all your code",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "severity": "High",
+ "text": "Implement Azure App Service reliability best practices",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "1559ab91-53e8-4908-ae28-b84c33b6b780",
- "link": "https://learn.microsoft.com/azure/data-explorer/devops",
- "service": "Azure Data Explorer",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc"
],
- "text": "Design, develop, and implement validation routines to ensure all clusters are in-sync from a data perspective.",
- "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "severity": "Low",
+ "text": "Familiarize with how to move an App Service app to another region During a disaster",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "8b9fe5c4-1049-4d40-9a82-2c3474d00f18",
- "link": "https://learn.microsoft.com/azure/data-explorer/devops",
- "service": "Azure Data Explorer",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc"
],
- "text": "Be fully cognizant of what it takes to build a cluster from scratch. Leverage Infrastructure as a Code for your deployments",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "severity": "High",
+ "text": "Familiarize with reliability support in Azure App Service",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "AppSvc"
],
- "severity": "Low",
- "text": "If required for AKS Windows workloads HostProcess containers can be used",
+ "severity": "Medium",
+ "text": "Ensure \"Always On\" is enabled for Function Apps running on a app service plan",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "WAF checklist",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "services": [
- "WAF"
- ],
- "severity": "Low",
- "text": "Use KEDA if running event-driven workloads",
- "waf": "Performance"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc",
+ "Monitor"
],
- "severity": "Low",
- "text": "Use Dapr to ease microservice development",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Monitor App Service instances using Health checks",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "text": "Use the SLA-backed AKS offering",
+ "severity": "Medium",
+ "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
"services": [
- "Cost",
- "WAF"
+ "WAF",
+ "Monitor"
],
"severity": "Low",
- "text": "Use Disruption Budgets in your pod and deployment definitions",
+ "text": "Use Application Insights Standard test to monitor availability and responsiveness of web app or website",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "description": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a safe and audited environment for storing secrets and is well-integrated with App Service through the Key Vault SDK or App Service Key Vault References.",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"services": [
- "ACR",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "AKV"
],
"severity": "High",
- "text": "If using a private registry, configure region replication to store images in multiple regions",
- "waf": "Reliability"
+ "text": "Use Key Vault to store secrets",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
+ "description": "Use a Managed Identity to connect to Key Vault either using the Key Vault SDK or through App Service Key Vault References.",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"services": [
- "Cost",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "AKV",
+ "Entra"
],
- "severity": "Low",
- "text": "Use an external application such as kubecost to allocate costs to different users",
- "waf": "Cost"
+ "severity": "High",
+ "text": "Use Managed Identity to connect to Key Vault",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
+ "description": "Store the App Service TLS certificate in Key Vault.",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc",
+ "AKV"
],
- "severity": "Low",
- "text": "Use scale down mode to delete/deallocate nodes",
- "waf": "Cost"
+ "severity": "High",
+ "text": "Use Key Vault to store TLS certificate.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "description": "Systems that process sensitive information should be isolated. To do so, use separate App Service Plans or App Service Environments and consider the use of different subscriptions or management groups.",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "Subscriptions"
],
"severity": "Medium",
- "text": "When required use multi-instance partitioning GPU on AKS Clusters",
- "waf": "Cost"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "WAF checklist",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
- "services": [
- "WAF"
- ],
- "severity": "Low",
- "text": "If running a Dev/Test cluster use NodePool Start/Stop",
- "waf": "Cost"
+ "text": "Isolate systems that process sensitive information",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
+ "description": "Local disks on App Service are not encrypted and sensitive data should not be stored on those. (For example: D:\\\\Local and %TMP%).",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"services": [
- "AKS",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "TrafficManager",
+ "AppSvc"
],
"severity": "Medium",
- "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
+ "text": "Do not store sensitive data on local disk",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "description": "For authenticated web application, use a well established Identity Provider like Azure AD or Azure AD B2C. Leverage the application framework of your choice to integrate with this provider or use the App Service Authentication / Authorization feature.",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc",
+ "Entra"
],
"severity": "Medium",
- "text": "Separate applications from the control plane with user/system node pools",
+ "text": "Use an established Identity Provider for authentication",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "description": "Deploy code to App Service from a controlled and trusted environment, like a well-managed and secured DevOps deployment pipeline. This avoids code that was not version controlled and verified to be deployed from a malicious host.",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc"
],
- "severity": "Low",
- "text": "Add taint to your system nodepool to make it dedicated",
+ "severity": "High",
+ "text": "Deploy from a trusted environment",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
+ "description": "Disable basic authentication for both FTP/FTPS and for WebDeploy/SCM. This disables access to these services and enforces the use of Azure AD secured endpoints for deployment. Note that the SCM site can also be opened using Azure AD credentials.",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
"services": [
- "ACR",
- "WAF"
+ "WAF",
+ "Entra"
],
- "severity": "Medium",
- "text": "Use a private registry for your images, such as ACR",
+ "severity": "High",
+ "text": "Disable basic authentication",
"waf": "Security"
},
{
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
+ "description": "Where possible use Managed Identity to connect to Azure AD secured resources. If this is not possible, store secrets in Key Vault and connect to Key Vault using a Managed Identity instead.",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "Entra"
],
- "severity": "Medium",
- "text": "Scan your images for vulnerabilities",
+ "severity": "High",
+ "text": "Use Managed Identity to connect to resources",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
+ "description": "Where using images stored in Azure Container Registry, pull these using a Managed Identity.",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "ACR",
+ "Entra"
],
"severity": "High",
- "text": "Define app separation requirements (namespace/nodepool/cluster)",
+ "text": "Pull containers using a Managed Identity",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
+ "description": "By configuring the diagnostic settings of App Service, you can send all telemetry to Log Analytics as the central destination for logging and monitoring. This allows you to monitor runtime activity of App Service such as HTTP logs, application logs, platform logs, ...",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "Monitor",
+ "Entra"
],
"severity": "Medium",
- "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
+ "text": "Send App Service runtime logs to Log Analytics",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
+ "description": "Set up a diagnostic setting to send the activity log to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the App Service resource itself.",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc",
+ "Monitor",
+ "Entra"
],
- "severity": "High",
- "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
+ "severity": "Medium",
+ "text": "Send App Service activity logs to Log Analytics",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "description": "Control outbound network access using a combination of regional VNet integration, network security groups and UDR's. Traffic should be routed to an NVA such as Azure Firewall. Ensure to monitor the Firewall's logs.",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
"services": [
- "WAF"
+ "NVA",
+ "Firewall",
+ "WAF",
+ "Monitor",
+ "VNet"
],
"severity": "Medium",
- "text": "If required add Key Management Service etcd encryption",
+ "text": "Outbound network access should be controlled",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
+ "description": "You can provide a stable outbound IP by using VNet integration and using a VNet NAT Gateway or an NVA like Azure Firewall. This allows the receiving party to allow-list based on IP, should that be needed. Note that for communications towards Azure Services often there's no need to depend on the IP address and mechanics like Service Endpoints should be used instead. (Also the use of private endpoints on the receiving end avoids for SNAT to happen and provides a stable outbound IP range.)",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
"services": [
- "AKS",
- "WAF"
+ "Storage",
+ "NVA",
+ "Firewall",
+ "WAF",
+ "PrivateLink",
+ "VNet"
],
"severity": "Low",
- "text": "If required consider using Confidential Compute for AKS",
+ "text": "Ensure a stable IP for outbound communications towards internet addresses",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
+ "description": "Control inbound network access using a combination of App Service Access Restrictions, Service Endpoints or Private Endpoints. Different access restrictions can be required and configured for the web app itself and the SCM site.",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"services": [
- "Defender",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "PrivateLink"
],
- "severity": "Medium",
- "text": "Consider using Defender for Containers",
+ "severity": "High",
+ "text": "Inbound network access should be controlled",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
+ "description": "Protect against malicious inbound traffic using a Web Application Firewall like Application Gateway or Azure Front Door. Make sure to monitor the WAF's logs.",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
"services": [
- "Entra",
- "WAF"
+ "AppSvc",
+ "FrontDoor",
+ "WAF",
+ "Monitor",
+ "AppGW"
],
"severity": "High",
- "text": "Use managed identities instead of Service Principals",
+ "text": "Use a WAF in front of App Service",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "description": "Make sure the WAF cannot be bypassed by locking down access to only the WAF. Use a combination of Access Restrictions, Service Endpoints and Private Endpoints.",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "PrivateLink"
],
- "severity": "Medium",
- "text": "Integrate authentication with AAD (using the managed integration)",
+ "severity": "High",
+ "text": "Avoid for WAF to be bypassed",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "description": "Set minimum TLS policy to 1.2 in App Service configuration.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Limit access to admin kubeconfig (get-credentials --admin)",
+ "text": "Set minimum TLS policy to 1.2",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "description": "Configure App Service to use HTTPS only. This causes App Service to redirect from HTTP to HTTPS. Strongly consider the use of HTTP Strict Transport Security (HSTS) in your code or from your WAF, which informs browsers that the site should only be accessed using HTTPS.",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
"services": [
- "Entra",
- "RBAC",
- "WAF"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "text": "Integrate authorization with AAD RBAC",
+ "severity": "High",
+ "text": "Use HTTPS only",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
+ "description": "Do not use wildcards in your CORS configuration, as this allows all origins to access the service (thereby defeating the purpose of CORS). Specifically only allow the origins that you expect to be able to access the service.",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
"services": [
- "RBAC",
- "AKS",
- "WAF"
+ "WAF",
+ "Storage"
],
"severity": "High",
- "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
+ "text": "Wildcards must not be used for CORS",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "description": "Remote debugging must not be turned on in production as this opens additional ports on the service which increases the attack surface. Note that the service does turn of remote debugging automatically after 48 hours.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
"services": [
- "Entra",
"WAF"
],
- "severity": "Medium",
- "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
+ "severity": "High",
+ "text": "Turn off remote debugging",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "description": "Enable Defender for App Service. This (amongst other threats) detects communications to known malicious IP addresses. Review the recommendations from Defender for App Service as part of your operations.",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "Defender"
],
"severity": "Medium",
- "text": "For AKS non-interactive logins use kubelogin (preview)",
+ "text": "Enable Defender for Cloud - Defender for App Service",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "description": "Azure provides DDoS Basic protection on its network, which can be improved with intelligent DDoS Standard capabilities which learns about normal traffic patterns and can detect unusual behavior. DDoS Standard applies to a Virtual Network so it must be configured for the network resource in front of the app, such as Application Gateway or an NVA.",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
"services": [
- "AKS",
- "WAF"
+ "NVA",
+ "EventHubs",
+ "WAF",
+ "DDoS",
+ "AppGW",
+ "VNet"
],
"severity": "Medium",
- "text": "Disable AKS local accounts",
+ "text": "Enable DDOS Protection Standard on the WAF VNet",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "description": "Where using images stored in Azure Container Registry, pull these over a virtual network from Azure Container Registry using its private endpoint and the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
"services": [
- "WAF"
+ "WAF",
+ "ACR",
+ "PrivateLink",
+ "VNet"
],
- "severity": "Low",
- "text": "Configure if required Just-in-time cluster access",
+ "severity": "Medium",
+ "text": "Pull containers over a Virtual Network",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "description": "Conduct a penetration test on the web application following the penetration testing rules of engagement.",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
"services": [
- "Entra",
- "AKS",
"WAF"
],
- "severity": "Low",
- "text": "Configure if required AAD conditional access for AKS",
+ "severity": "Medium",
+ "text": "Conduct a penetration test",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
+ "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
"services": [
- "AKS",
"WAF"
],
- "severity": "Low",
- "text": "If required for Windows AKS workloads configure gMSA ",
+ "severity": "Medium",
+ "text": "Deploy validated code",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.web/sites",
"checklist": "WAF checklist",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
- "services": [
- "Entra",
+ "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
+ "services": [
"WAF"
],
- "severity": "Medium",
- "text": "For finer control consider using a managed Kubelet Identity",
+ "severity": "High",
+ "text": "Use up-to-date platforms, languages, protocols and frameworks",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "WAF checklist",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
"services": [
- "ACR",
- "WAF",
- "AppGW"
+ "WAF"
],
- "severity": "Medium",
- "text": "If using AGIC, do not share an AppGW across clusters",
+ "severity": "High",
+ "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled)",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"services": [
- "AKS",
"WAF"
],
- "severity": "High",
- "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
+ "severity": "Medium",
+ "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the IoT hubs from an affected region to the corresponding geo-paired region.",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "WAF checklist",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "For Windows workloads use Accelerated Networking",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"services": [
- "LoadBalancer",
"WAF"
],
"severity": "High",
- "text": "Use the standard ALB (as opposed to the basic one)",
+ "text": "Learn how to trigger a manual failover.",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "WAF checklist",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
"services": [
- "VNet",
"WAF"
],
- "severity": "Medium",
- "text": "If using Azure CNI, consider using different Subnets for NodePools",
- "waf": "Security"
+ "severity": "High",
+ "text": "Learn how to fail back after a failover.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachineScaleSets",
"checklist": "WAF checklist",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "description": "Automatic instance repairs ensure that unhealthy instances are promptly identified and replaced, maintaining a set of healthy instances within your scale set.",
+ "guid": "7e13c105-675c-41e9-95b4-59837ff7ae7c",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs",
+ "service": "VMSS",
"services": [
- "VNet",
- "PrivateLink",
- "WAF"
+ "WAF",
+ "VM"
],
- "severity": "Medium",
- "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Enable automatic instance repairs for enhanced VM Scale Sets resiliency",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "description": "Ensure that Azure Backup is utilized appropriately to meet your organization's resiliency requirements for Azure virtual machines (VMs).",
+ "guid": "4d874a74-8b66-42d6-b150-512a66498f6d",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-vms-introduction",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "Backup",
+ "VM"
],
"severity": "High",
- "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
+ "text": "Consider Azure Backup to meet your resiliency requirements for Azure VMs",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "description": "Single Instance VMs using Premium SSD or Ultra Disk for all Operating System Disks and Data Disks are guaranteed to have Virtual Machine Connectivity of at least 99.9%",
+ "guid": "8052d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "VM",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "High",
- "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
- "waf": "Performance"
+ "text": "Use Premium or Ultra disks for production VMs",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "description": "Azure automatically replicates managed disks within a region to ensure data durability and protect against single-point failures.",
+ "guid": "b31e38c3-f298-412b-8363-cffe179b599d",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "High",
- "text": "If using Azure CNI, check the maximum pods/node (default 30)",
- "waf": "Performance"
+ "text": "Ensure Managed Disks are used for all VMs",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
+ "description": "Temporary disks are intended for short-term storage of non-persistent data such as page files, swap files, or SQL Server tempdb. Storing persistent data on temporary disks can lead to data loss during maintenance events or VM redeployment.",
+ "guid": "e0d5973c-d4ce-432c-8881-37f6f7c4c0d4",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview#temporary-disk",
+ "service": "VM",
"services": [
- "VNet",
- "AKS",
- "WAF"
+ "WAF",
+ "SQL",
+ "Storage",
+ "VM"
],
- "severity": "Low",
- "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Do not use the Temp disk for anything that is not acceptable to be lost",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "description": "Co-locate your compute, storage, networking, and data resources across an availability zone, and replicate this arrangement in other availability zones.",
+ "guid": "e514548d-2447-4ec6-9138-b8200f1ce16e",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "ACR",
+ "Storage",
+ "VM"
],
- "severity": "High",
- "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
+ "severity": "Medium",
+ "text": "Leverage Availability Zones for your VMs in regions where they are supported",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
+ "description": "Use at least two VMs in Availability Sets to isolate VMs on different fault and update domains.",
+ "guid": "5a785d6f-e96c-496a-b884-4cf3b2b38c88",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "VM"
],
- "severity": "Low",
- "text": "If required add your own CNI plugin",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "For regions that do not support Availability Zones deploy VMs into Availability Sets",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
+ "description": "Azure provides multiple options for VM redundancy to meet different requirements (Availability Zones, Virtual Machine Scale Sets, Availability Sets, Azure Site Recovery)",
+ "guid": "6ba2c021-4991-414a-9d3c-e574dccbd979",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "VM",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "ASR",
+ "VM"
],
- "severity": "Low",
- "text": "If required configure Public IP per node in AKS",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Avoid running a production workload on a single VM",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
+ "description": "Azure Site Recovery enables you to achieve low RTO (Recovery Time Objective) for your Azure and hybrid VMs by providing continuous replication and failover capabilities.",
+ "guid": "2a6bcca2-b5fe-4a1e-af3d-d95d48c7c891",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "AVS",
+ "ASR",
+ "VM"
],
- "severity": "Medium",
- "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
+ "severity": "High",
+ "text": "For Azure and on-premises VMs (Hyper-V/Phyiscal/VMware) with low RTO requirements use Azure Site Recovery",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
+ "description": "By using Capacity Reservations, you can effectively manage capacity for critical workloads, ensuring resource availability in specified regions.",
+ "guid": "bd7bb012-f7b9-45e0-9e15-8e3ea3992c2d",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/capacity-reservation-overview",
+ "service": "VM",
"services": [
"WAF"
],
"severity": "Low",
- "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
+ "text": "Use Capacity Reservations for critical workloads that require guaranteed capacity",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
+ "description": "By ensuring that the necessary quotas are increased in your DR region before testing failover with ASR, you can avoid any potential resource constraints during the recovery process for failed over VMs.",
+ "guid": "e6e2065b-3a76-4af4-a691-e8939ada4666",
+ "link": "https://learn.microsoft.com/azure/quotas/per-vm-quota-requests",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "ASR",
+ "VM"
],
"severity": "Medium",
- "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
+ "text": "Increase quotas in DR region before testing failover with ASR",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
+ "description": "Scheduled Events is an Azure Metadata Service that provides information about upcoming maintenance events for virtual machines (VMs). By leveraging Scheduled Events, you can proactively prepare your applications for VM maintenance, minimizing disruption and improving the availability of your VMs.",
+ "guid": "6d3b475a-5c7a-4cbe-99bb-e64dd8902e87",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/windows/scheduled-events",
+ "service": "VM",
"services": [
- "NVA",
- "WAF"
+ "WAF",
+ "VM"
],
- "severity": "High",
- "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Utilize Scheduled Events to prepare for VM maintenance",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "description": "Use Zone-redundant Storage (ZRS) in the primary region for scenarios that require high availability and for restricting replication to a particular country or region. For protection against regional disasters, use Geo-zone-redundant Storage (GZRS), which combines ZRS in the primary region with geo-replication to a secondary region?.",
+ "guid": "48c7c891-dcb1-4f7d-9769-ae568ba38d4a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
"services": [
- "WAF"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "text": "If using a public API endpoint, restrict the IP addresses that can access it",
- "waf": "Security"
+ "text": "Choose the most appropriate data redundancy option for Azure Storage based on your requirements",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
+ "description": "Assigning a Delete lock to your storage account helps protect the availability of your data, minimizing the risk of disruptions to your business operations.",
+ "guid": "85e2213d-bd7b-4b01-8f7b-95e06e158e3e",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"services": [
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "High",
- "text": "Use private clusters if your requirements mandate it",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Apply a Delete lock to prevent accidental or malicious deletion of storage accounts",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "description": "Container soft delete protects your data from being accidentally deleted by maintaining the deleted data in the system for a specified period of time.",
+ "guid": "a3992c2d-e6e2-4065-a3a7-6af4a691e893",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
"services": [
- "AKS",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Enable soft delete for Storage Account Containers",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "description": "Blob soft delete protects an individual blob and its versions, snapshots, and metadata from accidental deletes or overwrites by maintaining the deleted data in the system for a specified period of time.",
+ "guid": "9ada4666-7e13-4c10-96b9-153d89f89dc7",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"services": [
- "AKS",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "High",
- "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Enable soft delete for blobs",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "description": "Azure Backup enhanced soft delete provides critical protection against ransomware attacks by retaining deleted backups, enabling recovery from potential ransomware encryption or deletion.",
+ "guid": "b44be3b1-a27f-48b9-b91b-e1038df03a82",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about",
+ "service": "Azure Backup",
"services": [
- "AKS",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Backup"
],
- "severity": "High",
- "text": "Use Kubernetes network policies to increase intra-cluster security",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Enable Azure Backup enhanced soft delete for improved data protection and recovery",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "description": "Azure Backup's multi-user authorization enables fine-grained control over user access to backup resources, allowing you to restrict privileges and ensure proper authentication and authorization for backup operations.",
+ "guid": "2cd463cb-bbc8-4ac2-a9eb-c92a43da1dae",
+ "link": "https://learn.microsoft.com/azure/backup/multi-user-authorization-concept",
+ "service": "Azure Backup",
"services": [
- "WAF"
+ "WAF",
+ "Backup"
],
- "severity": "High",
- "text": "Use a WAF for web workloads (UIs or APIs)",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Implement multi-user authorization for Azure Backup to ensure secure and controlled access to backup resources",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
+ "description": "Azure Immutable Storage provides an additional layer of security by ensuring that backup data stored in the vault cannot be modified or deleted for a specified retention period. This helps safeguard your backups from ransomware attacks that may attempt to compromise or manipulate your backup data.",
+ "guid": "2cc88147-0607-4c1c-aa0e-614658dd458e",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-concept?source=recommendations&tabs=recovery-services-vault",
+ "service": "Azure Backup",
"services": [
- "DDoS",
- "VNet",
- "AKS",
- "WAF"
+ "WAF",
+ "Storage",
+ "Backup"
],
- "severity": "Medium",
- "text": "Use DDoS Standard in the AKS Virtual Network",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Implement Immutable Storage for your vaults to protect against ransomware and prevent unauthorized modifications to backups",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "WAF checklist",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
+ "description": "To eliminate a single point of failure in your on-premises DNS services and ensure reliable DNS resolution during business continuity and disaster recovery scenarios, it is recommended to utilize Azure DNS Private Resolvers in multiple regions. By deploying two or more Azure DNS private resolvers across different regions, you can enable DNS failover and achieve resiliency in your DNS infrastructure.",
+ "guid": "43da1dae-2cc8-4814-9060-7c1cca0e6146",
+ "link": "https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover",
+ "service": "DNS",
"services": [
- "WAF"
+ "WAF",
+ "ACR",
+ "DNS",
+ "ASR"
],
"severity": "Low",
- "text": "If required add company HTTP Proxy",
- "waf": "Security"
+ "text": "Implement DNS Failover using Azure DNS Private Resolvers",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.PowerBI/gateways",
"checklist": "WAF checklist",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "description": "Use an on-premises data gateway cluster to avoid single points of failure and to load balance traffic across gateways.",
+ "guid": "89f89dc7-b44b-4e3b-8a27-f8b9e91be103",
+ "link": "https://learn.microsoft.com/data-integration/gateway/service-gateway-high-availability-clusters",
+ "service": "Data Gateways",
"services": [
- "WAF"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "text": "Consider using a service mesh for advanced microservice communication management",
- "waf": "Security"
+ "text": "Use on-premises data gateway clusters to ensure high availability for business-critical data",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
+ "description": "When choosing the best option for deploying NVAs in Azure, it is crucial to consider the vendor's recommendations and validate that the specific design has been vetted and validated by the NVA vendor. The vendor should also provide the necessary NVA configuration for seamless integration in Azure.",
+ "guid": "8b1188b3-c6a4-46ce-a544-451e192d3442",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
"services": [
- "Monitor",
- "WAF"
+ "WAF",
+ "NVA"
],
"severity": "High",
- "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
- "waf": "Operations"
+ "text": "Deploy Network Virtual Appliances (NVAs) in a vendor supported configuration for High Availability",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "AKV",
+ "Backup"
],
- "severity": "Low",
- "text": "Check regularly Azure Advisor for recommendations on your cluster",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Familiarize yourself with the Key Vault's best practices such as isolation recommendations, access control, data protection, backup, and logging.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "ACR",
+ "AKV"
],
- "severity": "Low",
- "text": "Enable AKS auto-certificate rotation",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Key Vault is a managed service and Microsoft will handle the failover within and across region. Familiarize yourself with the Key Vault's availability and redundancy.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "High",
- "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "The contents of your key vault are replicated within the region and to a secondary region at least 150 miles away, but within the same geography to maintain high durability of your keys and secrets. Familiarize yourself with the Key Vault's data replication.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "During failover, access policy or firewall configurations and settings can't be changed. The key vault will be in read-only mode during failover. Familiarize yourself with the Key Vault's failover guidance.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "Backup",
+ "Storage",
+ "WAF",
+ "AKV",
+ "Subscriptions"
+ ],
+ "severity": "Medium",
+ "text": "When you back up a key vault object, such as a secret, key, or certificate, the backup operation will download the object as an encrypted blob. This blob can't be decrypted outside of Azure. To get usable data from this blob, you must restore the blob into a key vault within the same Azure subscription and Azure geography. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "WAF checklist",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "services": [
+ "WAF",
+ "AKV"
],
"severity": "High",
- "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
- "waf": "Operations"
+ "text": "If you want protection against accidental or malicious deletion of your secrets, configure soft-delete and purge protection features on your key vault.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "WAF",
+ "AKV"
],
"severity": "Low",
- "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
- "waf": "Operations"
+ "text": "Key Vault's soft-deleted resources are retained for a set period of 90 calendar days. Familiarize yourself with the Key Vault's soft-delete guidance.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "AKV",
+ "Backup"
],
"severity": "Low",
- "text": "Consider using AKS command invoke on private clusters",
- "waf": "Operations"
+ "text": "Understand Key Vault's backup limitations. Key Vault does not support the ability to backup more than 500 past versions of a key, secret, or certificate object. Attempting to backup a key, secret, or certificate object may result in an error. It is not possible to delete previous versions of a key, secret, or certificate.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "Backup"
],
"severity": "Low",
- "text": "For planned events consider using Node Auto Drain",
- "waf": "Operations"
+ "text": "Key Vault doesn't currently provide a way to back up an entire key vault in a single operation and keys, secrets and certitificates must be backup indvidually. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "EventHubs"
],
- "severity": "High",
- "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Purge protection is recommended when using keys for encryption to prevent data loss. Purge protection is an optional Key Vault behavior and is not enabled by default. Purge protection can only be enabled once soft-delete is enabled. It can be turned on via CLI, PowerShell or Portal.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "RBAC"
],
- "severity": "Low",
- "text": "Use custom Node RG (aka 'Infra RG') name",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "RBAC is recommended to control access to your key vault. Familiarize yourself with the Key Vault's access control guidance.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "description": "Using the correct approach to feed a datalake with cold data and having the Kusto query engine at your disposal at the same time, as in the short-term storage",
+ "guid": "ba7da7be-9951-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/data-explorer/kusto/management/data-export/continuous-data-export",
+ "service": "Azure Data Explorer",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "Storage",
+ "Cost"
],
- "severity": "Medium",
- "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
- "waf": "Operations"
+ "text": "Leverage External Tables and Continuous data export overview to reduce costs",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
+ "description": "Azure Data Explorer provides an optional follower capability for a leader cluster to be followed by other follower clusters for read-only access to the leader's data and metadata. Changes in the leader, such as create, append, and drop are automatically synchronized to the follower. While the leaders could span Azure regions, the follower clusters should be hosted in the same region(s) as the leader. If the leader cluster is down or databases or tables are accidentally dropped, the follower clusters will lose access until access is recovered in the leader.",
+ "guid": "56a22586-f490-4641-addd-ea8a377cdeb3",
+ "link": "https://learn.microsoft.com/azure/data-explorer/follower?tabs=csharp",
+ "service": "Azure Data Explorer",
"services": [
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "Low",
- "text": "Taint Windows nodes",
- "waf": "Operations"
+ "text": "To share data, explore Leader-follower cluster configuration",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
+ "description": "Azure Data Explorer doesn't support automatic protection against the outage of an entire Azure region. This disruption can happen during a natural disaster, like an earthquake. If you require a solution for a disaster recovery situation, do the following steps to ensure business continuity. In these steps, you'll replicate your clusters, management, and data ingestion in two Azure paired regions.",
+ "guid": "861bb2bc-14ae-4a6e-95d8-d9a3adc218e6",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#create-multiple-independent-clusters",
+ "service": "Azure Data Explorer",
"services": [
- "WAF"
+ "WAF",
+ "ASR"
],
- "severity": "Low",
- "text": "Keep windows containers patch level in sync with host patch level",
- "waf": "Operations"
+ "text": "To protect against regional failure, create Multiple independent clusters, preferably in two Azure Paired regions",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "description": "Via Diagnostic Settings at the cluster level",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
+ "guid": "436b0635-cb45-4e57-a603-324ace8cc123",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#replicate-management-activities",
+ "service": "Azure Data Explorer",
"services": [
- "Monitor",
- "WAF"
+ "WAF",
+ "Storage",
+ "RBAC"
],
- "severity": "Low",
- "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
- "waf": "Operations"
+ "text": "Replicate all management activities such as creating new tables or managing user roles on each cluster.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
+ "guid": "18ca6017-0265-4f4b-a46a-393af7f31728",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution",
+ "service": "Azure Data Explorer",
"services": [
"WAF"
],
- "severity": "Low",
- "text": "If required use nodePool snapshots",
- "waf": "Cost"
+ "text": "Ingest data into each cluster in parallel",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
+ "description": "This configuration is also called 'always-on'. For critical application deployments with no tolerance for outages, you should use multiple Azure Data Explorer clusters across Azure paired regions.",
+ "guid": "58a9c279-9c42-4bb6-9d0c-65556246b338",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-active-configuration",
+ "service": "Azure Data Explorer",
"services": [
- "WAF"
+ "WAF",
+ "ACR"
],
- "severity": "Low",
- "text": "Consider spot node pools for non time-sensitive workloads",
- "waf": "Operations"
+ "text": "For critical application with no tolerance for outages, create Active-Active-Active (always-on) configuration",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "description": "This configuration is identical to the active-active-active configuration, but only involves two Azure paired regions. Configure dual ingestion, processing, and curation. Users are routed to the nearest region. The cluster SKU must be the same across regions.",
+ "guid": "563a4dc7-4a74-48b6-922a-d190916a6649",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-configuration",
+ "service": "Azure Data Explorer",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "ACR"
],
- "severity": "Low",
- "text": "Consider AKS virtual node for quick bursting",
- "waf": "Operations"
+ "text": "For critical applications, create Active-Active configuration in two paired regions",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "description": "The Active-Hot configuration is similar to the Active-Active configuration in dual ingest, processing, and curation. While the standby cluster is online for ingestion, process, and curation, it isn't available to query. The standby cluster doesn't need to be in the same SKU as the primary cluster. It can be of a smaller SKU and scale, which may result in it being less performant. In a disaster scenario, users are redirected to the standby cluster, which can optionally be scaled up to increase performance.",
+ "guid": "8fadfe27-7de2-483b-8ac3-52baa9b75708",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-hot-standby-configuration",
+ "service": "Azure Data Explorer",
"services": [
- "Monitor",
"WAF"
],
- "severity": "High",
- "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
- "waf": "Operations"
+ "text": "For applications, which required only read during failure, create Active-Hot standby configuration",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "description": "This solution offers the least resiliency (highest RPO and RTO), is the lowest in cost and highest in effort. In this configuration, there's no data recovery cluster. Configure continuous export of curated data (unless raw and intermediate data is also required) to a storage account that is configured GRS (Geo Redundant Storage). A data recovery cluster is spun up if there is a disaster recovery scenario. At that time, DDLs, configuration, policies, and processes are applied. Data is ingested from storage with the ingestion property kustoCreationTime to over-ride the ingestion time that defaults to system time.",
+ "guid": "49aa8092-dc8e-4b9d-8bb7-3b26a5a67eba",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#on-demand-data-recovery-configuration",
+ "service": "Azure Data Explorer",
"services": [
- "WAF"
+ "Storage",
+ "AzurePolicy",
+ "WAF",
+ "Cost",
+ "ASR"
],
- "severity": "High",
- "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
- "waf": "Operations"
+ "text": "For applications, where cost is a concern and can withstand some downtime during failure, create on-demand data recovery cluster configuration",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
+ "description": "All database objects, policies, and configurations should be persisted in source control so they can be released to the cluster from your release automation tool.",
+ "guid": "5a907e1e-348e-4f25-9c27-d32e8bbac757",
+ "link": "https://learn.microsoft.com/azure/data-explorer/devops",
+ "service": "Azure Data Explorer",
+ "services": [
+ "WAF",
+ "AzurePolicy"
+ ],
+ "text": "Wrap DevOps and source control around all your code",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.Kusto/clusters",
+ "checklist": "WAF checklist",
+ "guid": "1559ab91-53e8-4908-ae28-b84c33b6b780",
+ "link": "https://learn.microsoft.com/azure/data-explorer/devops",
+ "service": "Azure Data Explorer",
"services": [
- "Monitor",
"WAF"
],
- "severity": "Medium",
- "text": "Monitor CPU and memory utilization of the nodes",
- "waf": "Operations"
+ "text": "Design, develop, and implement validation routines to ensure all clusters are in-sync from a data perspective.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "Microsoft.Kusto/clusters",
"checklist": "WAF checklist",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "guid": "8b9fe5c4-1049-4d40-9a82-2c3474d00f18",
+ "link": "https://learn.microsoft.com/azure/data-explorer/devops",
+ "service": "Azure Data Explorer",
"services": [
- "Monitor",
"WAF"
],
+ "text": "Be fully cognizant of what it takes to build a cluster from scratch. Leverage Infrastructure as a Code for your deployments",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "WAF checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "services": [
+ "WAF",
+ "SAP"
+ ],
"severity": "Medium",
- "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
+ "text": "Azure Center for SAP solutions (ACSS) is an Azure offering that makes SAP a top-level workload on Azure. ACSS is an end-to-end solution that enables you to create and run SAP systems as a unified workload on Azure and provides a more seamless foundation for innovation. You can take advantage of the management capabilities for both new and existing Azure-based SAP systems.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
"waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
"services": [
- "Storage",
- "EventHubs",
- "ServiceBus",
"WAF",
- "Monitor"
+ "SAP"
],
"severity": "Medium",
- "text": "Monitor OS disk queue depth in nodes",
+ "text": "Azure supports automating SAP deployments in Linux and Windows. SAP Deployment Automation Framework is an open-source orchestration tool that can deploy, install, and maintain SAP environments.",
+ "training": "https://github.com/Azure/sap-automation",
"waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
"services": [
- "Monitor",
- "NVA",
- "LoadBalancer",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
- "waf": "Operations"
+ "text": "Perform a point-in-time recovery for your production databases at any point and in a time frame that meets your RTO; point-in-time recovery typically includes operator errors deleting data either on the DBMS layer or through SAP, incidentally",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
- "service": "AKS",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "Backup"
],
"severity": "Medium",
- "text": "Subscribe to resource health notifications for your AKS cluster",
- "waf": "Operations"
+ "text": "Test the backup and recovery times to verify that they meet your RTO requirements for restoring all systems simultaneously after a disaster.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
"services": [
- "WAF"
+ "Storage",
+ "WAF",
+ "SQL",
+ "Backup",
+ "SAP",
+ "ASR"
],
"severity": "High",
- "text": "Configure requests and limits in your pod specs",
- "waf": "Operations"
+ "text": "You can replicate standard storage between paired regions, but you can't use standard storage to store your databases or virtual hard disks. You can replicate backups only between paired regions that you use. For all your other data, run your replication by using native DBMS features like SQL Server Always On or SAP HANA System Replication. Use a combination of Site Recovery, rsync or robocopy, and other third-party software for the SAP application layer.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "Enforce resource quotas for namespaces",
- "waf": "Operations"
+ "text": "When using Azure Availability Zones to achieve high availability, you must consider latency between SAP application servers and database servers. For zones with high latencies, operational procedures need to be in place to ensure that SAP application servers and database servers are running in the same zone at all times.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
"services": [
- "Subscriptions",
- "WAF"
+ "WAF",
+ "ExpressRoute",
+ "VPN",
+ "ASR"
],
"severity": "High",
- "text": "Ensure your subscription has enough quota to scale out your nodepools",
- "waf": "Operations"
+ "text": "Set up ExpressRoute connections from on-premises to the primary and secondary Azure disaster recovery regions. Also, as an alternative to using ExpressRoute, consider setting up VPN connections from on-premises to the primary and secondary Azure disaster recovery regions.",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
- "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
- "service": "AKS",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "ACR",
+ "AKV"
],
- "severity": "High",
- "text": "Configure Liveness and Readiness probes for all deployments",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "Replicate key vault contents like certificates, secrets, or keys across regions so you can decrypt data in the DR region.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "ASR",
+ "SAP",
+ "VNet"
],
"severity": "Medium",
- "text": "Use the Cluster Autoscaler",
- "waf": "Performance"
+ "text": "Peer the primary and disaster recovery virtual networks. For example, for HANA System Replication, an SAP HANA DB virtual network needs to be peered to the disaster recovery site's SAP HANA DB virtual network.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "Storage",
+ "SAP"
],
"severity": "Low",
- "text": "Customize node configuration for AKS node pools",
- "waf": "Performance"
+ "text": "If you use Azure NetApp Files storage for your SAP deployments, at a minimum, create two Azure NetApp Files accounts in the Premium tier, in two regions.",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "Use the Horizontal Pod Autoscaler when required",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Native database replication technology should be used to synchronize the database in a HA pair.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "VNet"
],
"severity": "High",
- "text": "Consider an appropriate node size, not too large or too small",
- "waf": "Performance"
+ "text": "The CIDR for the primary virtual network (VNet) shouldn't conflict or overlap with the CIDR of the DR site's VNet",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
- ],
- "severity": "Low",
- "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
- "waf": "Performance"
+ "WAF",
+ "Entra",
+ "ASR",
+ "VM"
+ ],
+ "severity": "High",
+ "text": "Use Site Recovery to replicate an application server to a DR site. Site Recovery can also help with replicating central-services cluster VMs to the DR site. When you invoke DR, you'll need to reconfigure the Linux Pacemaker cluster on the DR site (for example, replace the VIP or SBD, run corosync.conf, and more).",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "Consider subscribing to EventGrid Events for AKS automation",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Consider the availability of SAP software against single points of failure. This includes single points of failure within applications such as DBMSs utilized in SAP NetWeaver and SAP S/4HANA architectures, SAP ABAP and ASCS + SCS. Also, other tools such as SAP Web Dispatcher.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "For long running operation on an AKS cluster consider event termination",
- "waf": "Performance"
+ "severity": "High",
+ "text": "For SAP and SAP databases, consider implementing automatic failover clusters. In Windows, Windows Server Failover Clustering supports failover. In Linux, Linux Pacemaker or third-party tools like SIOS Protection Suite and Veritas InfoScale support failover.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "Storage",
+ "VM"
],
- "severity": "Low",
- "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Azure doesn't support architectures in which the primary and secondary VMs share storage for DBMS data. For the DBMS layer, the common architecture pattern is to replicate databases at the same time and with different storage stacks than the ones that the primary and secondary VMs use.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "Storage",
+ "SAP"
],
"severity": "High",
- "text": "Use ephemeral OS disks",
- "waf": "Performance"
+ "text": "The DBMS data and transaction/redo log files are stored in Azure supported block storage or Azure NetApp Files. Azure Files or Azure Premium Files isn't supported as storage for DBMS data and/or redo log files with SAP workload.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
"services": [
- "AKS",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "High",
- "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
- "waf": "Performance"
+ "text": "You can use Azure shared disks in Windows for ASCS + SCS components and specific high-availability scenarios. Set up your failover clusters separately for SAP application layer components and the DBMS layer. Azure doesn't currently support high-availability architectures that combine SAP application layer components and the DBMS layer into one failover cluster.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
"services": [
- "Storage",
- "AKS",
- "WAF"
+ "WAF",
+ "SAP",
+ "LoadBalancer"
],
- "severity": "Low",
- "text": "For hyper performance storage option use Ultra Disks on AKS",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Most failover clusters for SAP application layer components (ASCS) and the DBMS layer require a virtual IP address for a failover cluster. Azure Load Balancer should handle the virtual IP address for all other cases. One design principle is to use one load balancer per cluster configuration. We recommend that you use the standard version of the load balancer (Standard Load Balancer SKU).",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
"services": [
- "Storage",
"WAF",
- "SQL"
+ "LoadBalancer"
],
- "severity": "Medium",
- "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Make sure the Floating IP is enabled on the Load balancer",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
"services": [
- "Storage",
"WAF"
],
- "severity": "Medium",
- "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Before you deploy your high-availability infrastructure, and depending on the region you choose, determine whether to deploy with an Azure availability set or an availability zone.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
"services": [
- "Storage",
- "WAF"
+ "WAF",
+ "SAP",
+ "Entra",
+ "VM"
],
- "severity": "Medium",
- "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
- "waf": "Performance"
+ "severity": "High",
+ "text": "If you want to meet the infrastructure SLAs for your applications for SAP components (central services, application servers, and databases), you must choose the same high availability options (VMs, availability sets, availability zones) for all components.",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
- "service": "Entra",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"services": [
+ "WAF",
"Entra",
- "WAF"
+ "RBAC",
+ "VM"
],
- "severity": "Medium",
- "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Do not mix servers of different roles in the same availability set. Keep central services VMs, database VMs, application VMs in their own availability sets",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Entra",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
"services": [
- "Entra",
"WAF"
],
- "severity": "Low",
- "text": "Ensure you have a Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "You can't deploy Azure availability sets within an Azure availability zone unless you use proximity placement groups.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "Entra",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "VM"
],
- "severity": "Low",
- "text": "Leverage Azure Lighthouse for Multi-Tenant Management",
- "waf": "Operations"
+ "severity": "High",
+ "text": "When you create availability sets, use the maximum number of fault domains and update domains available. For example, if you deploy more than two VMs in one availability set, use the maximum number of fault domains (three) and enough update domains to limit the effect of potential physical hardware failures, network outages, or power interruptions, in addition to Azure planned maintenance. The default number of fault domains is two, and you can't change it online later.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Entra",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
- "severity": "Medium",
- "text": "Ensure that Azure Lighthouse is used for administering the tenant by partner",
- "waf": "Cost"
+ "severity": "High",
+ "text": "When you use Azure proximity placement groups in an availability set deployment, all three SAP components (central services, application server, and database) should be in the same proximity placement group.",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "348ef254-c27d-442e-abba-c7571559ab91",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "service": "Entra",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"services": [
+ "WAF",
"ACR",
- "RBAC",
- "Subscriptions",
- "WAF"
+ "SAP"
],
"severity": "High",
- "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "text": "Use one proximity placement group per SAP SID. Groups don't span across Availability Zones or Azure regions",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "service": "Entra",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
"severity": "High",
- "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Security"
+ "text": "Use one of the following services to run SAP central services clusters, depending on the operating system.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "Entra",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "service": "SAP",
"services": [
+ "WAF",
"Entra",
- "WAF"
+ "VM"
],
"severity": "Medium",
- "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Security"
+ "text": "Azure doesn't currently support combining ASCS and DB HA in the same Linux Pacemaker cluster; separate them into individual clusters. However, you can combine up to five multiple central-services clusters into a pair of VMs.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
- "service": "Entra",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"services": [
- "Entra",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Storage",
+ "VM"
],
- "severity": "Low",
- "text": "Enforce Microsoft Entra ID conditional-access policies for any user with rights to Azure environments",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Deploy both VMs in the high-availability pair in an availability set or in availability zones. These VMs should be the same size and have the same storage configuration.",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
- "service": "Entra",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "High",
- "text": "Enforce multi-factor authentication for any user with rights to the Azure environments",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Azure supports installing and configuring SAP HANA and ASCS/SCS and ERS instances on the same high availability cluster running on Red Hat Enterprise Linux (RHEL).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "Entra",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "Medium",
- "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "severity": "High",
+ "text": "Run all production systems on Premium managed SSDs and use Azure NetApp Files or Ultra Disk Storage. At least the OS disk should be on the Premium tier so you can achieve better performance and the best SLA.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "Entra",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "service": "SAP",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "Storage",
+ "SAP"
],
- "severity": "Medium",
- "text": "If planning to switch from Active Directory Domain Serivces to Entra domain services, evaluate the compatibility of all workloads",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
- "waf": "Security"
+ "severity": "High",
+ "text": "You should run SAP HANA on Azure only on the types of storage that are certified by SAP. Note that certain volumes must be run on certain disk configurations, where applicable. These configurations include enabling Write Accelerator and using Premium storage. You also need to ensure that the file system that runs on storage is compatible with the DBMS that runs on the machine.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
- "service": "Entra",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "service": "SAP",
"services": [
- "Entra",
- "Monitor",
- "WAF"
+ "WAF",
+ "Storage",
+ "ASR",
+ "SAP"
],
- "severity": "Medium",
- "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Consider configuring high availability depending on the type of storage you use for your SAP workloads. Some storage services available in Azure are not supported by Azure Site Recovery, so your high availability configuration may differ.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
- "service": "Entra",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "Storage",
+ "SAP"
],
"severity": "High",
- "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "text": "Different native Azure storage services (like Azure Files, Azure NetApp Files, Azure Shared Disk) may not be available in all regions. So to have similar SAP setup on the DR region after failover, ensure the respective storage service is offered in DR site.",
+ "waf": "Reliability"
},
{
"checklist": "WAF checklist",
- "guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "Entra",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "service": "SAP",
"services": [
- "Entra",
- "RBAC",
- "WAF"
+ "WAF",
+ "SAP",
+ "Cost"
],
"severity": "Medium",
- "text": "Avoid using on-premises synced accounts for Microsoft Entra ID role assignments.",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
- "waf": "Security"
+ "text": "Automate SAP System Start-Stop to manage costs.",
+ "waf": "Cost"
},
{
"checklist": "WAF checklist",
- "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Entra",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
"services": [
- "Entra",
- "WAF"
+ "Storage",
+ "VM",
+ "WAF",
+ "Cost",
+ "SAP"
],
- "severity": "Medium",
- "text": "Where required, use Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications (hosted in the cloud or on-premises).",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Security"
+ "severity": "Low",
+ "text": "In the case of using Azure Premium Storage with SAP HANA, Azure Standard SSD storage can be used to select a cost-conscious storage solution. However, please note that choosing Standard SSD or Standard HDD Azure storage will affect the SLA of the individual VMs. Also, for systems with lower I/O throughput and low latency, such as non-production environments, lower series VMs can be used.",
+ "waf": "Cost"
},
{
"checklist": "WAF checklist",
- "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
- "service": "VNet",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "Storage",
+ "VM",
+ "WAF",
+ "Cost",
+ "SAP"
],
- "severity": "Medium",
- "text": "Leverage a network design based on the traditional hub-and-spoke network topology for network scenarios that require maximum flexibility.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
+ "severity": "Low",
+ "text": "As a lower-cost alternative configuration (multipurpose), you can choose a low-performance SKU for your non-production HANA database server VMs. However, it is important to note that some VM types, such as E-series, are not HANA certified (SAP HANA Hardware Directory) or cannot achieve storage latency of less than 1ms.",
+ "waf": "Cost"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
- "service": "VNet",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "service": "SAP",
"services": [
- "VNet",
- "Entra",
- "DNS",
- "ExpressRoute",
"WAF",
- "Firewall",
- "VPN",
- "NVA"
+ "RBAC",
+ "Subscriptions"
],
"severity": "High",
- "text": "Ensure that shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS servers.",
- "waf": "Cost"
+ "text": "Enforce a RBAC model for management groups, subscriptions, resource groups and resources",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "VNet",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
"services": [
- "DDoS",
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
"severity": "Medium",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Enforce Principal propagation for forwarding the identity from SAP cloud application to SAP on-premises (Including IaaS) through cloud connector",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
"services": [
- "NVA",
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
"severity": "Medium",
- "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance",
- "waf": "Reliability"
+ "text": "Implement SSO to SAP SaaS applications like SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics and SAP C4C with Azure AD using SAML.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
- "service": "ExpressRoute",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
"services": [
- "VPN",
- "ARS",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "severity": "Medium",
+ "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
- "service": "ARS",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "service": "SAP",
"services": [
- "VNet",
- "ARS",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "severity": "Medium",
+ "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
- "service": "VNet",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
"services": [
- "VNet",
- "ACR",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
- "waf": "Performance"
+ "text": "You can implement SSO to SAP GUI by using SAP NetWeaver SSO or a partner solution.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
- "service": "VNet",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "service": "SAP",
"services": [
- "Monitor",
- "WAF"
+ "WAF",
+ "AKV",
+ "SAP"
],
"severity": "Medium",
- "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Operations"
+ "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "service": "SAP",
"services": [
- "VNet",
- "Entra",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "AKV",
+ "SAP"
],
"severity": "Medium",
- "text": "When connecting spoke virtual networks to the central hub virtual network, consider VNet peering limits (500), the maximum number of prefixes that can be advertised via ExpressRoute (1000)",
- "waf": "Reliability"
+ "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "service": "SAP",
"services": [
- "Storage",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "Consider the limit of routes per route table (400).",
- "waf": "Reliability"
+ "text": "Implement SSO by using OAuth for SAP NetWeaver to allow third-party or custom applications to access SAP NetWeaver OData services.",
+ "waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
- "service": "VNet",
+ "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "High",
- "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Implement SSO to SAP HANA",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
- "service": "ExpressRoute",
+ "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
"severity": "Medium",
- "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
+ "text": "Consider Azure AD an identity provider for SAP systems hosted on RISE. For more information, see Integrating the Service with Azure AD.",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
+ "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
+ "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "service": "SAP",
"services": [
- "VPN",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "severity": "Medium",
+ "text": "For applications that access SAP, you might want to use principal propagation to establish SSO.",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "ExpressRoute",
+ "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "service": "SAP",
"services": [
- "ACR",
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
- "severity": "High",
- "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "severity": "Medium",
+ "text": "If you're using SAP BTP services or SaaS solutions that require SAP Identity Authentication Service (IAS), consider implementing SSO between SAP Cloud Identity Authentication Services and Azure AD to access those SAP services. This integration lets SAP IAS act as a proxy identity provider and forwards authentication requests to Azure AD as the central user store and identity provider.",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
- "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "severity": "Medium",
+ "text": "Implement SSO to SAP BTP",
"waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
- "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
- "severity": "High",
- "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16)",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "If you're using SAP SuccessFactors, consider using the Azure AD automated user provisioning. With this integration, as you add new employees to SAP SuccessFactors, you can automatically create their user accounts in Azure AD. Optionally, you can create user accounts in Microsoft 365 or other SaaS applications that are supported by Azure AD. Use write-back of the email address to SAP SuccessFactors.",
+ "waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
- "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
- "service": "VNet",
+ "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "AzurePolicy",
+ "SAP"
],
- "severity": "High",
- "text": "Avoid using overlapping IP address ranges for production and DR sites.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "enforce existing Management Group policies to SAP Subscriptions",
+ "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"services": [
- "DNS",
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "SAP"
],
- "severity": "Medium",
- "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "severity": "High",
+ "text": "Integrate tightly coupled applications into the same SAP subscription to avoid additional routing and management complexity",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
"waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
- "service": "DNS",
+ "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"services": [
- "ACR",
- "DNS",
- "WAF"
+ "WAF",
+ "Subscriptions"
],
- "severity": "Medium",
- "text": "For environments where name resolution across Azure and on-premises is required, consider using Azure DNS Private Resolver.",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
- "waf": "Security"
+ "severity": "High",
+ "text": "Leverage Subscription as scale unit and scaling our resources, consider deploying subscription per environment eg. Sandbox, non-prod, prod ",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "service": "SAP",
"services": [
- "DNS",
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "VM"
],
- "severity": "Low",
- "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
+ "severity": "High",
+ "text": "Ensure quota increase as a part of subscription provisioning (e.g. total available VM cores within a subscription)",
+ "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "614658d3-558f-4d77-849b-821112df27ee",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
- "service": "DNS",
+ "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
+ "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
+ "service": "SAP",
"services": [
- "VNet",
- "DNS",
- "VM",
"WAF"
],
- "severity": "High",
- "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "severity": "Low",
+ "text": "The Quota API is a REST API that you can use to view and manage quotas for Azure services. Consider using it if necessary.",
"waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
- "service": "Bastion",
+ "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
+ "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "service": "SAP",
"services": [
"WAF",
- "Bastion"
+ "Subscriptions",
+ "VM"
],
- "severity": "Medium",
- "text": "Consider using Azure Bastion to securely connect to your network.",
- "waf": "Security"
+ "severity": "High",
+ "text": "If deploying to an availability zone, ensure that the VM's zone deployment is available once the quota has been approved. Submit a support request with the subscription, VM series, number of CPUs and availability zone required.",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
- "service": "Bastion",
+ "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF",
- "Bastion"
+ "WAF"
],
- "severity": "Medium",
- "text": "Use Azure Bastion in a subnet /26 or larger.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Ensure required services and features are available within the chosen deployment regions eg. ANF , Zone etc.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "WAF",
+ "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "service": "SAP",
"services": [
- "FrontDoor",
- "ACR",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "TrafficManager",
+ "Cost"
],
"severity": "Medium",
- "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
+ "text": "Leverage Azure resource tag for cost categorization and resource grouping (: BillTo, Department (or Business Unit), Environment (Production, Stage, Development), Tier (Web Tier, Application Tier), Application Owner, ProjectName)",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
+ "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
"services": [
- "FrontDoor",
- "AzurePolicy",
"WAF",
- "AppGW"
+ "Backup"
],
- "severity": "Low",
- "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
+ "severity": "High",
+ "text": "Help protect your HANA database by using the Azure Backup service.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
+ "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "Entra",
+ "Storage",
+ "VM"
],
- "severity": "High",
- "text": "Deploy WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "If you deploy Azure NetApp Files for your HANA, Oracle, or DB2 database, use the Azure Application Consistent Snapshot tool (AzAcSnap) to take application-consistent snapshots. AzAcSnap also supports Oracle databases. Consider using AzAcSnap on a central VM rather than on individual VMs.",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
"services": [
- "DDoS",
- "VNet",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "High",
- "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "text": "Ensure time-zone matches between the operating system and the SAP system.",
+ "waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
- "service": "VNet",
+ "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "Entra"
],
- "severity": "High",
- "text": "Assess and review network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed",
+ "severity": "Medium",
+ "text": "Don't group different application services in the same cluster. For example, don't combine DRBD and central services clusters on the same cluster. However, you can use the same Pacemaker cluster to manage approximately five different central services (multi-SID cluster).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
+ "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "service": "SAP",
"services": [
- "DDoS",
- "WAF"
+ "WAF",
+ "Cost"
],
- "severity": "High",
- "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Consider running dev/test systems in a snooze model to save and optimize Azure run costs.",
+ "waf": "Cost"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
- "service": "ExpressRoute",
+ "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
+ "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "Entra",
+ "SAP"
],
"severity": "Medium",
- "text": "Ensure that you have investigated the possibility to use ExpressRoute as primary connection to Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "If you partner with customers by managing their SAP estates, consider Azure Lighthouse. Azure Lighthouse allows managed service providers to use Azure native identity services to authenticate to the customers' environment. It puts the control in the hands of customers, because they can revoke access at any time and audit service providers' actions.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
- "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
+ "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "When you use multiple ExpressRoute circuits, or multiple on-prem locations, make sure to optimize routing with BGP attributes, if certain paths are preferred.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Use Azure Update Manager to check the status of available updates for a single VM or multiple VMs and consider scheduling regular patching.",
+ "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
- "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "service": "SAP",
"services": [
- "VPN",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Medium",
- "text": "Ensure that you're using the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Optimize and manage SAP Basis operations by using SAP Landscape Management (LaMa). Use the SAP LaMa connector for Azure to relocate, copy, clone, and refresh SAP systems.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
- "service": "ExpressRoute",
+ "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "service": "SAP",
"services": [
- "ExpressRoute",
"WAF",
- "Cost"
+ "SQL",
+ "Monitor",
+ "SAP"
],
- "severity": "High",
- "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "Use Azure Monitor for SAP solutions to monitor your SAP workloads(SAP HANA, high-availability SUSE clusters, and SQL systems) on Azure. Consider supplementing Azure Monitor for SAP solutions with SAP Solution Manager.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
- "service": "ExpressRoute",
+ "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
+ "service": "SAP",
"services": [
- "ExpressRoute",
+ "VM",
"WAF",
- "Cost"
+ "Monitor",
+ "Entra",
+ "SAP"
],
"severity": "High",
- "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuits' peering location supports your Azure regions for the Local SKU.",
- "waf": "Cost"
+ "text": "Run a VM Extension for SAP check. VM Extension for SAP uses the assigned managed identity of a virtual machine (VM) to access VM monitoring and configuration data. The check ensures that all performance metrics in your SAP application come from the underlying Azure Extension for SAP.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
- "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
- "service": "ExpressRoute",
+ "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Use Azure Policy for access control and compliance reporting. Azure Policy provides the ability to enforce organization-wide settings to ensure consistent policy adherence and fast violation detection. ",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
- "service": "ExpressRoute",
+ "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "Monitor",
+ "NetworkWatcher",
+ "SAP"
],
"severity": "Medium",
- "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Use Connection Monitor in Azure Network Watcher to monitor latency metrics for SAP databases and application servers. Or collect and display network latency measurements by using Azure Monitor.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
- "service": "ExpressRoute",
+ "guid": "73686af4-6791-4f89-95ad-a43324e13811",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP",
+ "VM"
],
"severity": "Medium",
- "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Perform a quality check for SAP HANA on the provisioned Azure infrastructure to verify that provisioned VMs comply with SAP HANA on Azure best practices.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/vpnGateways",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
- "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
- "service": "VPN",
+ "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"services": [
- "VPN",
- "WAF"
+ "WAF",
+ "Subscriptions",
+ "SAP"
],
- "severity": "Medium",
- "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "For each Azure subscription, run a latency test on Azure availability zones before zonal deployment to choose low-latency zones for deployment of SAP on Azure.",
+ "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/vpnGateways",
"checklist": "WAF checklist",
- "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
- "service": "VPN",
+ "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
+ "service": "SAP",
"services": [
- "VPN",
- "WAF"
+ "WAF",
+ "Storage",
+ "ASR"
],
"severity": "Medium",
- "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "text": "Run the Resiliency Report to ensure that the configuration of the entire provisioned Azure infrastructure (Compute, Database, Networking, Storage, Site Recovery) complies with the configuration defined by Cloud Adaption Framework for Azure.",
+ "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
+ "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
+ "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
+ "service": "SAP",
"services": [
- "ExpressRoute",
"WAF",
- "Cost"
+ "SAP",
+ "Monitor",
+ "Sentinel"
],
- "severity": "High",
- "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "Implement threat protection by using the Microsoft Sentinel solution for SAP. Use this solution to monitor your SAP systems and detect sophisticated threats throughout the business logic and application layers.",
+ "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
- "service": "ExpressRoute",
+ "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "Cost"
],
"severity": "Medium",
- "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Security"
+ "text": "Azure tagging can be leveraged to logically group and track resources, automate their deployments, and most importantly, provide visibility on the incurred costs.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
- "service": "ExpressRoute",
+ "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
+ "service": "SAP",
"services": [
+ "WAF",
"Monitor",
- "ExpressRoute",
- "WAF"
+ "VM"
],
- "severity": "Medium",
- "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "Use inter-VM latency monitoring for latency-sensitive applications.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
- "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
- "service": "ExpressRoute",
+ "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
"services": [
- "Monitor",
- "ACR",
"WAF",
- "NetworkWatcher"
+ "Monitor",
+ "ASR",
+ "SAP"
],
"severity": "Medium",
- "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operations"
+ "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
- "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
- "service": "ExpressRoute",
+ "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "Storage",
+ "SAP"
],
"severity": "Medium",
- "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Exclude all the database file systems and executable programs from antivirus scans. Including them could lead to performance problems. Check with the database vendors for prescriptive details on the exclusion list. For example, Oracle recommends excluding /oracle//sapdata from antivirus scans.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
- "service": "ExpressRoute",
+ "guid": "c027f893-f404-41a9-b33d-39d625a14964",
+ "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
+ "service": "SAP",
"services": [
- "VPN",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Medium",
- "text": "Use site-to-site VPN as failover of ExpressRoute, especially if only using a single ExpressRoute circuit.",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Consider collecting full database statistics for non-HANA databases after migration. For example, implement SAP note 1020260 - Delivery of Oracle statistics.",
+ "waf": "Performance"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
- "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
- "service": "ExpressRoute",
+ "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
+ "service": "SAP",
"services": [
+ "WAF",
"Storage",
- "VNet",
- "WAF"
+ "SAP"
],
- "severity": "High",
- "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Consider using Oracle Automatic Storage Management (ASM) for all Oracle deployments that use SAP on Azure.",
+ "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "waf": "Performance"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "d581a947-69a2-4783-942e-9df3664324c8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
- "service": "ExpressRoute",
+ "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
+ "service": "SAP",
"services": [
- "ACR",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SQL",
+ "SAP"
],
- "severity": "High",
- "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "For SAP on Azure running Oracle, a collection of SQL scripts can help you diagnose performance problems. Automatic Workload Repository (AWR) reports contain valuable information for diagnosing problems in the Oracle system. We recommend that you run an AWR report during several sessions and choose peak times for it, to ensure broad coverage for the analysis.",
+ "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
- "service": "ExpressRoute",
+ "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "Monitor",
+ "ASR",
+ "SAP"
],
- "severity": "Medium",
- "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
+ "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
- "service": "ExpressRoute",
+ "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "AppGW",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "For secure delivery of HTTP/S apps, use Application Gateway v2 and ensure that WAF protection and policies are enabled.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "ExpressRoute",
+ "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP",
+ "DNS",
+ "VM"
],
- "severity": "High",
- "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "If the virtual machine's DNS or virtual name is not changed during migration to Azure, Background DNS and virtual names connect many system interfaces in the SAP landscape, and customers are only sometimes aware of the interfaces that developers define over time. Connection challenges arise between various systems when virtual or DNS names change after migrations, and it's recommended to retain DNS aliases to prevent these types of difficulties.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
- "service": "ExpressRoute",
+ "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
"services": [
- "VNet",
- "Monitor",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "DNS",
+ "SAP",
+ "VNet"
],
"severity": "Medium",
- "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Use different DNS zones to distinguish each environment (sandbox, development, preproduction, and production) from each other. The exception is for SAP deployments with their own VNet; here, private DNS zones might not be necessary.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
- "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
- "service": "ExpressRoute",
+ "guid": "a3592829-e6e2-4061-9368-6af46791f893",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
+ "service": "SAP",
"services": [
- "VNet",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "ACR",
+ "SAP",
+ "VNet"
],
"severity": "Medium",
- "text": "Avoid using ExpressRoute circuits for VNet-to-VNet communication.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Local and global VNet peering provide connectivity and are the preferred approaches to ensure connectivity between landing zones for SAP deployments across multiple Azure regions",
+ "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
+ "waf": "Reliability"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
+ "service": "SAP",
"services": [
"WAF",
- "Firewall"
+ "NVA",
+ "SAP"
],
"severity": "High",
- "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "text": "It is not supported to deploy any NVA between SAP application and SAP Database server",
+ "training": "https://me.sap.com/notes/2731110",
+ "waf": "Performance"
},
{
"checklist": "WAF checklist",
- "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
+ "service": "SAP",
"services": [
- "RBAC",
"WAF",
- "Firewall",
"ACR",
- "AzurePolicy"
+ "VWAN",
+ "SAP"
],
"severity": "Medium",
- "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
+ "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
- "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
- "service": "Firewall",
+ "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
+ "service": "SAP",
"services": [
"WAF",
- "Firewall"
+ "NVA",
+ "VNet"
],
- "severity": "Low",
- "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Consider deploying network virtual appliances (NVAs) between regions only if partner NVAs are used. NVAs between regions or VNets aren't required if native NVAs are present. When you're deploying partner networking technologies and NVAs, follow the vendor's guidance to verify conflicting configurations with Azure networking.",
+ "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
+ "waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
- "service": "Firewall",
+ "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
+ "service": "SAP",
"services": [
- "DNS",
+ "NVA",
"WAF",
- "Firewall"
+ "VWAN",
+ "SAP",
+ "VNet"
],
- "severity": "High",
- "text": "Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over protocols not supported by application rules.",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Virtual WAN manages connectivity between spoke VNets for virtual-WAN-based topologies (no need to set up user-defined routing [UDR] or NVAs), and maximum network throughput for VNet-to-VNet traffic in the same virtual hub is 50 gigabits per second. If necessary, SAP landing zones can use VNet peering to connect to other landing zones and overcome this bandwidth limitation.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
+ "waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "guid": "82734c88-6ba2-4802-8459-11475e39e530",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
"services": [
"WAF",
- "Firewall"
+ "SAP",
+ "VM"
],
"severity": "High",
- "text": "Use Azure Firewall Premium for additional security and protection.",
+ "text": "Public IP assignment to VM running SAP Workload is not recommended.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "service": "SAP",
"services": [
"WAF",
- "Firewall"
+ "ASR"
],
"severity": "High",
- "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
- "waf": "Security"
+ "text": "Consider reserving IP address on DR side when configuring ASR",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
- "service": "Firewall",
+ "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
"services": [
- "WAF",
- "Firewall"
+ "WAF"
],
"severity": "High",
- "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
- "waf": "Security"
+ "text": "Avoid using overlapping IP address ranges for production and DR sites.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
- "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
- "service": "Firewall",
+ "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
+ "service": "SAP",
"services": [
- "Storage",
- "VNet",
- "VWAN",
"WAF",
- "Firewall",
- "NVA"
+ "Storage",
+ "VNet"
],
- "severity": "High",
- "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "While Azure does help you to create multiple delegated subnets in a VNet, only one delegated subnet can exist in a VNet for Azure NetApp Files. Attempts to create a new volume will fail if you use more than one delegated subnet for Azure NetApp Files.",
+ "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
+ "waf": "Operations"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
- "service": "Firewall",
+ "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
+ "service": "SAP",
"services": [
- "Storage",
"WAF",
"Firewall"
],
"severity": "Medium",
- "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Operations"
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
+ "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
- "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
- "service": "Firewall",
+ "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
+ "service": "SAP",
"services": [
- "AzurePolicy",
"WAF",
- "Firewall"
+ "AppGW",
+ "SAP"
],
- "severity": "Important",
- "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Application Gateway and Web Application Firewall have limitations when Application Gateway serves as a reverse proxy for SAP web apps, as shown in the comparison between Application Gateway, SAP Web Dispatcher, and other third-party services.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
- "service": "Firewall",
+ "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
"services": [
- "VNet",
"WAF",
- "Firewall"
+ "ACR",
+ "FrontDoor",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "severity": "Medium",
+ "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
+ "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
- "service": "Firewall",
+ "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "SAP",
"services": [
+ "WAF",
+ "AppGW",
"AzurePolicy",
- "WAF"
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use",
- "waf": "Performance"
+ "text": "Take advantage of Web Application Firewall policies in Azure Front Door when you're using Azure Front Door and Application Gateway to protect HTTP/S applications. Lock down Application Gateway to receive traffic only from Azure Front Door.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
- "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
- "service": "Firewall",
- "services": [
- "Storage",
- "WAF"
+ "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "services": [
+ "WAF",
+ "AppGW",
+ "LoadBalancer"
],
"severity": "Medium",
- "text": "Use IP Groups or IP prefixes to reduce number of IP table rules",
- "waf": "Performance"
+ "text": "Use a web application firewall to scan your traffic when it's exposed to the internet. Another option is to use it with your load balancer or with resources that have built-in firewall capabilities like Application Gateway or third-party solutions.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
- "service": "Firewall",
+ "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "ACR",
+ "VWAN",
+ "SAP"
],
"severity": "Medium",
- "text": "Avoid wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs",
+ "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
"waf": "Performance"
},
{
"checklist": "WAF checklist",
- "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
- "service": "Firewall",
+ "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "SAP",
"services": [
- "Monitor",
- "WAF"
+ "ACR",
+ "Storage",
+ "WAF",
+ "PrivateLink",
+ "Backup",
+ "VNet"
],
"severity": "Medium",
- "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it’s a sign that SNAT exhaustion might be imminent.",
- "waf": "Performance"
+ "text": "To prevent data leakage, use Azure Private Link to securely access platform as a service resources like Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, and more. Azure Private Endpoint can also help to secure traffic between VNets and services like Azure Storage, Azure Backup, and more. Traffic between your VNet and the Private Endpoint enabled service travels across the Microsoft global network, which prevents its exposure to the public internet.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "346840b8-1064-496e-8396-4b1340172d52",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
- "service": "Firewall",
+ "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "SAP",
+ "VM"
],
"severity": "High",
- "text": "Enable TLS Inspection",
- "waf": "Performance"
- },
- {
- "checklist": "WAF checklist",
- "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
- "service": "Firewall",
- "services": [
- "ServiceBus",
- "WAF"
- ],
- "severity": "Low",
- "text": "Use web categories to allow or deny outbound access to specific topics.",
- "waf": "Performance"
- },
- {
- "checklist": "WAF checklist",
- "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
- "service": "Firewall",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
+ "text": "Make sure that Azure accelerated networking is enabled on the VMs used in the SAP application and DBMS layers.",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "Performance"
},
{
"checklist": "WAF checklist",
- "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details",
- "service": "Firewall",
+ "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
+ "service": "SAP",
"services": [
- "DNS",
"WAF",
- "Firewall"
+ "LoadBalancer"
],
"severity": "Medium",
- "text": "Enable Azure Firewall DNS proxy configuration ",
+ "text": "Make sure that internal deployments for Azure Load Balancer are set up to use Direct Server Return (DSR). This setting (Enabling Floating IP) will reduce latency when internal load balancer configurations are used for high-availability configurations on the DBMS layer.",
+ "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
+ "guid": "6791f893-5ada-4433-84e1-3811523181aa",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "SAP",
"services": [
+ "WAF",
+ "SAP",
"VM",
- "AzurePolicy",
- "WAF"
+ "VNet"
],
"severity": "Medium",
- "text": "Ensure there is a policy assignment to deny Public IP addresses directly tied to Virtual Machines",
+ "text": "You can use application security group (ASG) and NSG rules to define network security access-control lists between the SAP application and DBMS layers. ASGs group virtual machines to help manage their security.",
+ "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
- "service": "Firewall",
+ "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"services": [
- "Monitor",
"WAF",
- "Firewall"
+ "SAP",
+ "VNet"
],
- "severity": "Low",
- "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Placing of the SAP application layer and SAP DBMS in different Azure VNets that aren't peered isn't supported.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Performance"
},
{
"checklist": "WAF checklist",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"services": [
- "Backup",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "Implement backups for your firewall rules",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "For optimal network latency with SAP applications, consider using Azure proximity placement groups.",
+ "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "waf": "Performance"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "App Gateway",
+ "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "High",
- "text": "Ensure that control-plane communication for Azure PaaS services injected into a virtual network is not broken, for example with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Security"
+ "text": "It is NOT supported at all to run an SAP Application Server layer and DBMS layer split between on-premise and Azure. Both layers need to completely reside either on-premise or in Azure.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "ExpressRoute",
+ "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"services": [
- "PrivateLink",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP",
+ "Cost",
+ "VNet"
],
- "severity": "Medium",
- "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Security"
+ "severity": "High",
+ "text": "It isn't recommended to host the database management system (DBMS) and application layers of SAP systems in different VNets and connect them with VNet peering because of the substantial costs that excessive network traffic between the layers can produce. Recommend using subnets within the Azure virtual network to separate the SAP application layer and DBMS layer.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Cost"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
- "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "VNet",
+ "guid": "402a9846-d515-4061-aff8-cd30088693fa",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "LoadBalancer"
],
- "severity": "Medium",
- "text": "Don't enable virtual network service endpoints by default on all subnets.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Security"
+ "severity": "High",
+ "text": "If using Load Balancer with Linux guest operating systems, check that the Linux network parameter net.ipv4.tcp_timestamps is set to 0.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Performance"
},
{
"checklist": "WAF checklist",
- "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
+ "service": "SAP",
"services": [
- "DNS",
"WAF",
- "Firewall",
- "NVA",
- "PrivateLink"
+ "SAP",
+ "VNet"
],
"severity": "Medium",
- "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "text": "For SAP RISE/ECS deployments, virtual peering is the preferred way to establish connectivity with customer's existing Azure environment. Both the SAP vnet and customer vnet(s) are protected with network security groups (NSG), enabling communication on SAP and database ports through the vnet peering",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
- "service": "ExpressRoute",
+ "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
"services": [
- "VPN",
- "VNet",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "SAP",
+ "Backup",
+ "VM"
],
"severity": "High",
- "text": "Use at least a /27 prefix for your Gateway subnets",
- "waf": "Security"
+ "text": "Review SAP HANA database backups for Azure VMs.",
+ "waf": "Cost"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
- "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
- "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
- "service": "NSG",
+ "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
"services": [
- "VNet",
- "WAF"
+ "WAF",
+ "Monitor",
+ "ASR",
+ "SAP"
],
"severity": "Medium",
- "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
- "waf": "Security"
+ "text": "Review Site Recovery built-in monitoring, where used for SAP.",
+ "waf": "Cost"
},
{
"checklist": "WAF checklist",
- "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
- "service": "NSG",
+ "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
+ "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
+ "service": "SAP",
"services": [
- "VNet",
- "ACR",
- "WAF"
+ "WAF",
+ "Monitor",
+ "SAP"
],
- "severity": "Medium",
- "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "severity": "High",
+ "text": "Review the Monitoring the SAP HANA System Landscape guidance.",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
+ "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
+ "service": "SAP",
"services": [
- "VNet",
- "VM",
- "WAF"
+ "WAF",
+ "Backup",
+ "VM"
],
"severity": "Medium",
- "text": "The application team should use application security groups at the subnet-level NSGs to help protect multi-tier VMs within the landing zone.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Review Oracle Database in Azure Linux VM backup strategies.",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
+ "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
+ "service": "SAP",
"services": [
- "VNet",
- "Entra",
- "NVA",
- "WAF"
+ "WAF",
+ "SQL",
+ "Storage"
],
"severity": "Medium",
- "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Review the use of Azure Blob Storage with SQL Server 2016.",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
+ "service": "SAP",
"services": [
- "VNet",
"WAF",
- "NetworkWatcher"
+ "Backup",
+ "VM"
],
"severity": "Medium",
- "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Security"
+ "text": "Review the use of Automated Backup v2 for Azure VMs.",
+ "waf": "Operations"
},
{
"checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
- "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "NSG",
+ "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
+ "service": "SAP",
"services": [
- "VNet",
"WAF"
],
- "severity": "Medium",
- "text": "Consider the limit of NSG rules per NSG (1000).",
- "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enabling Write accelerator for M series when using premium disks(V1)",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
- "service": "VWAN",
+ "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "service": "SAP",
"services": [
- "VWAN",
"WAF"
],
"severity": "Medium",
- "text": "Consider Virtual WAN for simplified Azure networking management, and make sure your scenario is explicitly described in the list of Virtual WAN routing designs",
- "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
- "waf": "Operations"
+ "text": "Test availability zone latency.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
+ "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
+ "service": "SAP",
"services": [
- "ACR",
- "VWAN",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
+ "text": "Activate SAP EarlyWatch Alert for all SAP components.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
"waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
+ "service": "SAP",
"services": [
- "ACR",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Low",
- "text": "Follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network",
+ "severity": "Medium",
+ "text": "Review SAP application server to database server latency using SAP ABAPMeter report /SSA/CAT.",
+ "training": "https://me.sap.com/notes/0002879613",
"waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
- "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
+ "service": "SAP",
"services": [
"WAF",
- "Firewall"
+ "SQL",
+ "Monitor"
],
"severity": "Medium",
- "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "text": "Review SQL Server performance monitoring using CCMS.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "VWAN",
+ "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
+ "link": "https://me.sap.com/notes/500235",
+ "service": "SAP",
"services": [
- "VWAN",
- "WAF"
+ "WAF",
+ "SAP",
+ "VM"
],
"severity": "Medium",
- "text": "Ensure that the network architecture is within the Azure Virtual WAN limits.",
- "waf": "Reliability"
+ "text": "Test network latency between SAP application layer VMs and DBMS VMs (NIPING).",
+ "training": "https://me.sap.com/notes/1100926/E",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
- "service": "VWAN",
+ "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
+ "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
+ "service": "SAP",
"services": [
+ "WAF",
"Monitor",
- "VWAN",
- "WAF"
+ "SAP"
],
"severity": "Medium",
- "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
- "waf": "Operations"
+ "text": "Review SAP HANA studio alerts.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
- "service": "VWAN",
+ "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
+ "link": "https://me.sap.com/notes/1969700",
+ "service": "SAP",
"services": [
- "VWAN",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "Make sure that your IaC deployments does not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
- "waf": "Reliability"
+ "text": "Perform SAP HANA health checks using HANA_Configuration_Minichecks.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
- "service": "VWAN",
+ "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
"services": [
- "VPN",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
- "waf": "Reliability"
+ "text": "If you run Windows and Linux VMs in Azure, on-premises, or in other cloud environments, you can use the Update management center in Azure Automation to manage operating system updates, including security patches.",
+ "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
- "service": "VWAN",
+ "guid": "08951710-79a2-492a-adbc-06d7a401545b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
"services": [
- "VWAN",
- "WAF"
+ "WAF",
+ "SAP"
],
"severity": "Medium",
- "text": "Make sure that your IaC deployments are configuring label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
- "waf": "Reliability"
+ "text": "Routinely review the SAP security OSS notes because SAP releases highly critical security patches, or hot fixes, that require immediate action to protect your SAP systems.",
+ "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/virtualWans",
"checklist": "WAF checklist",
- "guid": "9c75dfef-573c-461c-a698-68598595581a",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
- "service": "VWAN",
+ "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
"services": [
- "WAF"
+ "WAF",
+ "SQL",
+ "SAP"
],
- "severity": "High",
- "text": "Assign enough IP space to virtual hubs, ideally a /23 prefix.",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "For SAP on SQL Server, you can disable the SQL Server system administrator account because the SAP systems on SQL Server don't use the account. Ensure that another user with system administrator rights can access the server before disabling the original system administrator account.",
+ "waf": "Security"
},
{
- "ammp": true,
"checklist": "WAF checklist",
- "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "SQL"
],
"severity": "High",
- "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
+ "text": "Disable xp_cmdshell. The SQL Server feature xp_cmdshell enables a SQL Server internal operating system command shell. It's a potential risk in security audits.",
+ "training": "https://me.sap.com/notes/3019299/E",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "RBAC",
- "AzurePolicy",
- "WAF"
+ "Storage",
+ "WAF",
+ "SQL",
+ "Backup",
+ "SAP"
],
- "severity": "Medium",
- "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
+ "severity": "High",
+ "text": "Encrypting SAP HANA database servers on Azure uses SAP HANA native encryption technology. Additionally, if you are using SQL Server on Azure, use Transparent Data Encryption (TDE) to protect your data and log files and ensure that your backups are also encrypted.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "SAP",
"services": [
- "Subscriptions",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes",
+ "text": "Azure Storage encryption is enabled for all Azure Resource Manager and classic storage accounts, and can't be disabled. Because your data is encrypted by default, you don't need to modify your code or applications to use Azure Storage encryption.",
+ "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "Medium",
- "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
+ "severity": "High",
+ "text": "Use Azure Key Vault to store your secrets and credentials",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "43334f24-9116-4341-a2ba-527526944008",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
- "service": "Policy",
+ "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "SAP",
"services": [
+ "WAF",
"Subscriptions",
- "AzurePolicy",
- "WAF"
+ "RBAC",
+ "AzurePolicy"
],
- "severity": "Low",
- "text": "Use Azure Policy to control which services users can provision at the subscription/management group level",
+ "severity": "Medium",
+ "text": "It is recommended to LOCK the Azure Resources post successful deployment to safeguard against unauthorized changes. You can also enforce LOCK constraints and rules on your per-subscription basis using customized Azure policies(Custome role).",
+ "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AKV",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Use built-in policies where possible to minimize operational overhead.",
+ "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
- "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
- "service": "Policy",
+ "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
+ "service": "SAP",
"services": [
- "Entra",
- "RBAC",
- "Subscriptions",
"WAF",
+ "RBAC",
"AzurePolicy"
],
- "severity": "Medium",
- "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
+ "severity": "High",
+ "text": "Based on existing requirements, regulatory and compliance controls (internal/external) - Determine what Azure Policies and Azure RBAC role are needed",
+ "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "19048384-5c98-46cb-8913-156a12476e49",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "Subscriptions",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Storage",
+ "SAP",
+ "Defender"
],
- "severity": "Medium",
- "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
+ "severity": "High",
+ "text": "When enabling Microsoft Defender for Endpoint on SAP environment, recommend excluding data and log files on DBMS servers instead of targeting all servers. Follow your DBMS vendor's recommendations when excluding target files.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
- "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
- "service": "Policy",
+ "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "RBAC",
+ "SAP",
+ "Defender"
],
- "severity": "Medium",
- "text": "If any data sovereignty requirements exist, Azure Policies can be deployed to enforce them",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "severity": "High",
+ "text": "Delegate an SAP admin custom role with just-in-time access of Microsoft Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
- "service": "Policy",
+ "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Medium",
- "text": "For Sovereign Landing Zone, sovereignty policy baseline' policy initiative is deployed and and assigned at correct MG level.",
+ "severity": "Low",
+ "text": "encrypt data in transit by integrating the third-party security product with secure network communications (SNC) for DIAG (SAP GUI), RFC, and SPNEGO for HTTPS",
+ "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
- "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
- "service": "Policy",
+ "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AKV"
],
"severity": "Medium",
- "text": "For Sovereign Landing Zone, sovereign Control objectives to policy mapping' is documented.",
+ "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
- "service": "Policy",
+ "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
+ "service": "SAP",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "Medium",
- "text": "For Sovereign Landing Zone, process is in place for CRUD of 'Sovereign Control objectives to policy mapping'.",
+ "severity": "High",
+ "text": "Use an Azure Key Vault per application per environment per region.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
+ "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
+ "service": "SAP",
"services": [
- "Entra",
- "RBAC",
"WAF",
- "Monitor",
- "AzurePolicy"
+ "AKV",
+ "SAP"
],
- "severity": "Medium",
- "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "waf": "Operations"
+ "severity": "High",
+ "text": "To control and manage disk encryption keys and secrets for non-HANA Windows and non-Windows operating systems, use Azure Key Vault. SAP HANA isn't supported with Azure Key Vault, so you must use alternate methods like SAP ABAP or SSH keys.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Monitor",
+ "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
+ "service": "SAP",
"services": [
- "Storage",
- "ARS",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "RBAC",
+ "Subscriptions",
+ "SAP"
],
- "severity": "Medium",
- "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Customize role-based access control (RBAC) roles for SAP on Azure spoke subscriptions to avoid accidental network-related changes",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "service": "VM",
+ "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
+ "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
+ "service": "SAP",
"services": [
- "VM",
- "Monitor",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "PrivateLink",
+ "NVA",
+ "SAP"
],
- "severity": "Medium",
- "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Isolate DMZs and NVAs from the rest of the SAP estate, configure Azure Private Link, and securely manage and control the SAP on Azure resources",
+ "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
+ "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "service": "SAP",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "Storage",
+ "VM"
],
- "severity": "Medium",
- "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "Consider using Microsoft anti-malware software on Azure to protect your virtual machines from malicious files, adware, and other threats.",
+ "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
+ "service": "SAP",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "Defender"
],
- "severity": "Medium",
- "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "For even more powerful protection, consider using Microsoft Defender for Endpoint.",
+ "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Network Watcher",
+ "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"services": [
- "Monitor",
"WAF",
- "NetworkWatcher"
+ "SAP",
+ "VNet"
],
- "severity": "Medium",
- "text": "Use Network Watcher to proactively monitor traffic flows",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Isolate the SAP application and database servers from the internet or from the on-premises network by passing all traffic through the hub virtual network, which is connected to the spoke network by virtual network peering. The peered virtual networks guarantee that the SAP on Azure solution is isolated from the public internet.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Monitor",
+ "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "Monitor",
- "WAF"
+ "WAF",
+ "SAP"
],
- "severity": "Medium",
- "text": "Use Azure Monitor Logs for insights and reporting.",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "For internet-facing applications like SAP Fiori, make sure to distribute load per application requirements while maintaining security levels. For Layer 7 security, you can use a third-party Web Application Firewall (WAF) available in the Azure Marketplace.",
+ "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "waf": "Security"
},
{
"checklist": "WAF checklist",
- "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
- "service": "Monitor",
+ "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
+ "service": "SAP",
"services": [
+ "WAF",
+ "AKV",
"Monitor",
- "WAF"
+ "SAP"
],
"severity": "Medium",
- "text": "Use Azure Monitor alerts for the generation of operational alerts.",
- "waf": "Operations"
+ "text": "To enable secure communication in Azure Monitor for SAP solutions, you can choose to use either a root certificate or a server certificate. We highly recommend that you use root certificates.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "Monitor",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"services": [
- "Monitor",
"WAF"
],
- "severity": "Medium",
- "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable 2 replicas to have 99.9% availability for read operations",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Backup",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"services": [
- "Backup",
"WAF"
],
"severity": "Medium",
- "text": "When using Azure Backup, consider the different backup types (GRS, ZRS & LRS) as the default setting is GRS",
+ "text": "Enable 3 replicas to have 99.9% availability for read/write operations",
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "VM",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
"services": [
- "VM",
- "AzurePolicy",
"WAF"
],
- "severity": "Medium",
- "text": "Use Azure policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Leverage Availability Zones by enabling read and/or write replicas",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "description": "Azure Policy's guest configuration features can audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
- "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "VM",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
"services": [
- "VM",
- "Monitor",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "text": "Monitor VM security configuration drift via Azure Policy.",
- "waf": "Security"
+ "text": "For regional redudancy, Manually create services in 2 or more regions for Search as it doesn't provide an automated method of replicating search indexes across geographic regions",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
"services": [
- "ASR",
- "ACR",
- "VM",
- "WAF"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
- "waf": "Operations"
+ "text": "To synchronize data across multiple services either Use indexers for updating content on multiple services or Use REST APIs for pushing content updates on multiple services",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "Backup",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
"services": [
- "Backup",
- "WAF"
+ "WAF",
+ "TrafficManager"
],
"severity": "Medium",
- "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
- "waf": "Operations"
+ "text": "Use Azure Traffic Manager to coordinate requests",
+ "waf": "Reliability"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Search/searchServices",
"checklist": "WAF checklist",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "Storage",
+ "Backup"
],
"severity": "High",
- "text": "Leverage Availability Zones for your VMs in regions where they are supported.",
+ "text": "Backup and Restore an Azure Cognitive Search Index. Use this sample code to back up index definition and snapshot to a series of Json files",
"waf": "Reliability"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Insights/components",
"checklist": "WAF checklist",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "text": "Avoid running a production workload on a single VM.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Data collection rules in Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
"services": [
- "ACR",
- "LoadBalancer",
"WAF",
- "AppGW"
+ "Backup"
],
"severity": "Medium",
- "text": "Azure Load Balancer and Application Gateway distribute incoming network traffic across multiple resources.",
- "waf": "Reliability"
+ "text": "check backup instances with the underlying datasource not found",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "WAF",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
"services": [
- "FrontDoor",
- "WAF",
- "AppGW"
+ "WAF"
],
- "severity": "High",
- "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Delete or archive unassociated services (disks, nics, ip addresses etc)",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "WAF",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
"services": [
- "AppGW",
- "FrontDoor",
"WAF",
- "Sentinel"
+ "Storage",
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
- "waf": "Operations"
+ "text": "Consider a good balance between site recovery storage and backup for non mission critical applications",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Insights/components",
"checklist": "WAF checklist",
- "guid": "5017f154-e3ab-4369-9829-e7e316183687",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "Key Vault",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "text": "Use Azure Key Vault to store your secrets and credentials",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Check spending and savings opportunities among the 40 different log analytics workspaces- use different retention and data collection for nonprod workspaces-create daily cap for awareness and tier sizing - If you do set a daily cap, in addition to creating an alert when the cap is reached,ensure that you also create an alert rule to be notified when some percentage has been reached (90% for example). - consider workspace transformation if possible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "WAF checklist",
- "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "guid": "a0477a20-9945-4bda-9333-4f2491163418",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
- "service": "Key Vault",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
- "waf": "Security"
+ "text": "Enforce a purging log policy and automation (if needed, logs can be moved to cold storage)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
"services": [
- "AKV",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Storage",
+ "Backup"
],
"severity": "Medium",
- "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
- "waf": "Security"
+ "text": "Check that the disks are really needed, if not: delete. If they are needed, find lower storage tiers or use backup -",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
"services": [
- "Entra",
- "RBAC",
- "AKV",
- "WAF"
+ "WAF",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
- "waf": "Security"
- },
+ "text": "Consider moving unused storage to lower tier, with customized rule - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "Cost"
+ },
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
- "waf": "Security"
+ "text": "Make sure advisor is configured for VM right sizing ",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "913156a1-2476-4e49-b541-acdce979377b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "description": "check by searching the Meter Category Licenses in the Cost analysys",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "Cost",
+ "AzurePolicy",
+ "VM"
],
"severity": "Medium",
- "text": "Establish an automated process for key and certificate rotation.",
- "waf": "Security"
+ "text": "run the script on all windows VMs https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- consider implementing a policy if windows VMs are created frequently",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
"services": [
- "VNet",
- "PrivateLink",
- "AKV",
- "WAF"
+ "WAF",
+ "LoadBalancer"
],
"severity": "Medium",
- "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
- "waf": "Security"
+ "text": " this can be also put under AHUB if you already have licenses https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
- "service": "Key Vault",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
"services": [
- "Entra",
- "Monitor",
- "AKV",
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
- "waf": "Security"
+ "text": "Consolidate reserved VM families with flexibility option (no more than 4-5 families)",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
"services": [
- "AKV",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "ARS",
+ "VM",
+ "Cost"
],
"severity": "Medium",
- "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
- "waf": "Security"
+ "text": "Utilize Azure Reserved Instances: This feature allows you to reserve VMs for a period of 1 or 3 years, providing significant cost savings compared to PAYG prices.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
"services": [
- "AKV",
"WAF"
],
"severity": "Medium",
- "text": "Use an Azure Key Vault per application per environment per region.",
- "waf": "Security"
+ "text": "Only larger disks can be reserved => 1 TiB -",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
"services": [
- "ASR",
- "ACR",
- "AKV",
"WAF"
],
"severity": "Medium",
- "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
- "waf": "Security"
+ "text": "After the right-sizing optimization",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Sql/servers",
"checklist": "WAF checklist",
- "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
- "service": "Key Vault",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "SQL",
+ "AzurePolicy",
+ "Cost"
],
"severity": "Medium",
- "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
- "waf": "Security"
+ "text": "Check if applicable and enforce policy/change https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
- "service": "Entra",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
- "waf": "Security"
+ "text": "The VM + license part discount (ahub + 3YRI) is around 70% discount",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "09945bda-4333-44f2-9911-634182ba5275",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
- "service": "Defender",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
"services": [
- "Defender",
- "Subscriptions",
- "WAF"
+ "WAF",
+ "VM"
],
- "severity": "High",
- "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Consider using a VMSS to match demand rather than flat sizing",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "microsoft.containerservice/managedClusters",
"checklist": "WAF checklist",
- "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
- "service": "Defender",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "AKS",
"services": [
- "Defender",
- "Subscriptions",
- "WAF"
+ "WAF",
+ "AKS"
],
- "severity": "High",
- "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use AKS autoscaler to match your clusters usage (make sure the pods requirements match the scaler)",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
- "service": "Defender",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
"services": [
- "Defender",
- "Subscriptions",
"WAF"
],
- "severity": "High",
- "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Move recovery points to vault-archive where applicable (Validate)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Databricks/workspaces",
"checklist": "WAF checklist",
- "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
- "service": "VM",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
"services": [
- "WAF"
+ "WAF",
+ "VM",
+ "LoadBalancer"
],
- "severity": "High",
- "text": "Enable Endpoint Protection on IaaS Servers.",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Consider using Spot VMs with fallback where possible. Consider autotermination of clusters.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
- "link": "https://learn.microsoft.com/azure/security-center/",
- "service": "VM",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
"services": [
- "Defender",
- "Monitor",
"WAF"
],
"severity": "Medium",
- "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
- "waf": "Security"
+ "text": "Functions - Reuse connections",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
"services": [
- "Entra",
- "Monitor",
"WAF"
],
"severity": "Medium",
- "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
- "waf": "Security"
+ "text": "Functions - Cache data locally",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
- "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
- "service": "Entra",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "text": "For Sovereign Landing Zone, transparancy logs is enabled on the Entra ID tenant.",
- "waf": "Security"
+ "text": "Functions - Cold starts-Use the 'Run from package' functionality. This way, the code is downloaded as a single zip file. This can, for example, result in significant improvements with Javascript functions, which have a lot of node modules.Use language specific tools to reduce the package size, for example, tree shaking Javascript applications.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
- "service": "Entra",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
"services": [
- "Entra",
"WAF"
],
"severity": "Medium",
- "text": "For Sovereign Landing Zone, customer Lockbox is enabled on the Entra ID tenant.",
- "waf": "Security"
+ "text": "Functions - Keep your functions warm",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Storage",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
"services": [
- "Storage",
"WAF"
],
- "severity": "High",
- "text": "Secure transfer to storage accounts should be enabled",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "When using autoscale with different functions, there might be one driving all the autoscale for all the resources - consider moving it to a separate consumption plan (and consider higher plan for CPU)",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
- "service": "Storage",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
"services": [
- "Storage",
"WAF"
],
- "severity": "High",
- "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Function apps in a given plan are all scaled together, so any issues with scaling can affect all apps in the plan.",
+ "waf": "Cost"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Web/sites",
"checklist": "WAF checklist",
- "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "service": "Key Vault",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
"services": [
- "VM",
- "AKV",
"WAF"
],
- "severity": "High",
- "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Am I billed for 'await time'? This question is typically asked in the context of a C# function that does an async operation and waits for the result, e.g. await Task.Delay(1000) or await client.GetAsync('http://google.com'). The answer is yes - the GB second calculation is based on the start and end time of the function and the memory usage over that period. What actually happens over that time in terms of CPU activity is not factored into the calculation.One exception to this rule is if you are using durable functions. You are not billed for time spent at awaits in orchestrator functions.apply demand shaping techinques where possible (dev environments?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "Cost"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
- "service": "APIM",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "FrontDoor",
+ "EventHubs"
],
"severity": "Medium",
- "text": "Implement an error handling policy at the global level",
- "waf": "Operations"
+ "text": "Frontdoor - Turn off the default homepageIn the application settings of your App, set AzureWebJobsDisableHomepage to true. This will return a 204 (No Content) to the PoP so only header data is returned.",
+ "waf": "Cost"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
- "service": "APIM",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "AppSvc",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Ensure all APIs policies include a element.",
- "waf": "Operations"
+ "text": "Frontdoor - Route to something that returns nothing. Either set up a Function, Function Proxy, or add a route in your WebApp that returns 200 (OK) and sends no or minimal content. The advantage of this is you will be able to log out when it is called.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
- "service": "APIM",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
"services": [
- "ACR",
- "AzurePolicy",
"WAF"
],
"severity": "Medium",
- "text": "Use Policy Fragments to avoid repeating same policies definitions across multiple APIs",
- "waf": "Operations"
+ "text": "Consider archiving tiers for less used data",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
- "service": "APIM",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "If you are planning to monetize your APIs, review the 'monetization support' article for best practices",
- "waf": "Operations"
+ "text": "Check disk sizes where the size does not match the tier (i.e. A 513 GiB disk will pay a P30 (1TiB) and consider resizing",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
- "service": "APIM",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
"services": [
- "Monitor",
"WAF"
],
- "severity": "High",
- "text": "Enable Diagnostics Settings to export logs to Azure Monitor",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Consider using standard SSD rather than Premium or Ultra where possible",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
- "service": "APIM",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
"services": [
- "WAF"
+ "WAF",
+ "Storage"
],
"severity": "Medium",
- "text": "Enable Application Insights for more detailed telemetry",
- "waf": "Operations"
+ "text": "For storage accounts, make sure that the chosen tier is not adding up transaction charges (it might be cheaper to move to the next tier)",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "WAF checklist",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
- "service": "APIM",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
"services": [
- "Monitor",
- "WAF"
+ "WAF",
+ "ASR"
],
- "severity": "High",
- "text": "Configure alerts on the most critical metrics",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "For ASR, consider using Standard SSD disks if the RPO/RTO and replication throughput allow it",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "WAF checklist",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "High",
- "text": "Ensure that custom SSL certificates are stored an Azure Key Vault so they can be securely accessed and updated",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Storage accounts: check hot tier and/or GRS necessary",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
"services": [
- "Entra",
"WAF"
],
- "severity": "High",
- "text": "Protect incoming requests to APIs (data plane) with Azure AD",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Disks - validate use of Premium SSD disks everywhere: for example, non-prod could swap to Standard SSD or on-demand Premium SSD ",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Synapse/workspaces",
"checklist": "WAF checklist",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "Monitor",
+ "Cost",
+ "EventHubs"
],
"severity": "Medium",
- "text": "Use Microsoft Entra ID to authenticate users in the Developer Portal",
- "waf": "Security"
+ "text": "Create budgets to manage costs and create alerts that automatically notify stakeholders of spending anomalies and overspending risks.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Synapse/workspaces",
"checklist": "WAF checklist",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
"services": [
- "WAF"
+ "WAF",
+ "Storage",
+ "Cost"
],
"severity": "Medium",
- "text": "Create appropriate groups to control the visibility of the products",
- "waf": "Security"
+ "text": "Export cost data to a storage account for additional data analysis.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Synapse/workspaces",
"checklist": "WAF checklist",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
"services": [
- "WAF"
+ "WAF",
+ "SQL",
+ "Cost"
],
"severity": "Medium",
- "text": "Use Backends feature to eliminate redundant API backend configurations",
- "waf": "Operations"
+ "text": "Control costs for a dedicated SQL pool by pausing the resource when it is not in use.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Synapse/workspaces",
"checklist": "WAF checklist",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
"services": [
- "AzurePolicy",
"WAF"
],
"severity": "Medium",
- "text": "Use Named Values to store common values that can be used in policies",
- "waf": "Operations"
+ "text": "Enable the serverless Apache Spark automatic pause feature and set your timeout value accordingly.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Synapse/workspaces",
"checklist": "WAF checklist",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
"services": [
- "ACR",
"WAF"
],
"severity": "Medium",
- "text": "For DR, leverage the premium tier with deployments scaled across two or more regions for 99.99% SLA",
- "waf": "Reliability"
+ "text": "Create multiple Apache Spark pool definitions of various sizes.",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Synapse/workspaces",
"checklist": "WAF checklist",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
"services": [
- "WAF"
+ "WAF",
+ "Cost"
],
"severity": "Medium",
- "text": "Deploy at least one unit in two or more availability zones for an increased SLA of 99.99%",
- "waf": "Reliability"
+ "text": "Purchase Azure Synapse commit units (SCU) for one year with a pre-purchase plan to save on your Azure Synapse Analytics costs.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
"services": [
- "Backup",
- "WAF"
- ],
- "severity": "High",
- "text": "Ensure there is an automated backup routine",
- "waf": "Reliability"
+ "WAF",
+ "VM",
+ "Cost"
+ ],
+ "severity": "Medium",
+ "text": "Use Spot VMs for interruptible jobs: These are VMs that can be bid on and purchased at a discounted price, providing a cost-effective solution for non-critical workloads.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "Use Policies to add a fail-over backend URL and caching to reduce failing calls.",
- "waf": "Reliability"
+ "text": "Right-sizing all VMs",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
"services": [
- "EventHubs",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "VM"
],
- "severity": "Low",
- "text": "If you need to log at high performance levels, consider Event Hubs policy",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Swap VM sized with normalized and most recent sizes",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Monitor",
+ "VM"
],
"severity": "Medium",
- "text": "Apply throttling policies to control the number of requests per second",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
- "waf": "Performance"
+ "text": "right-sizing VMs - start with monitoring usage below 5% and then work up to 40%",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "WAF checklist",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
"services": [
- "WAF"
+ "WAF",
+ "VM"
],
"severity": "Medium",
- "text": "Configure autoscaling to scale out the number of instances when the load increases",
- "waf": "Performance"
+ "text": "Containerizing an application can improve VM density and save money on scaling it",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Cost"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "Deploy self-hosted gateways where Azure doesn't have a region close to the backend APIs.",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Follow Metaprompting guardrails for resonsible AI",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "Entra",
+ "APIM"
],
- "severity": "Medium",
- "text": "Use the premium tier for production workloads.",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Consider Gateway patterns with APIM or solutions like AI central for better rate limiting, load balancing, authentication and logging",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Monitor"
],
- "severity": "Medium",
- "text": "In multi-region model, use Policies to route the requests to regional backends based on availability or latency.",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Enable monitoring for your AOAI instances",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "APIM",
- "WAF"
+ "WAF",
+ "AKV",
+ "Monitor",
+ "Subscriptions"
],
"severity": "High",
- "text": "Be aware of APIM's limits",
- "waf": "Reliability"
+ "text": "Create alerts to notify teams of events such as an entry in the activity log created by an action performed on the resource, such as regenerating its subscription keys or a metric threshold such as the number of errors exceeding 10 in an hour",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "Monitor"
],
"severity": "High",
- "text": "Ensure that the self-hosted gateway deployments are resilient.",
- "waf": "Reliability"
+ "text": "Monitor token usage to prevent service disruptions due to capacity",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "APIM",
- "FrontDoor",
- "WAF"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "text": "Use Azure Front Door in front of APIM for multi-region deployment",
- "waf": "Performance"
+ "text": "observe metrics like processed inference tokens, generated completion tokens monitor for rate limit",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "services": [
+ "WAF",
+ "APIM"
+ ],
+ "severity": "Low",
+ "text": "Enable and configure Diagnostics for the Azure OpenAI Service. If not sufficient, consider using a gateway such as Azure API Managements in front of Azure OpenAI to log both incoming prompts and outgoing responses, where permitted",
+ "waf": "Operational Excellence"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
"services": [
- "VNet",
"WAF"
],
- "severity": "Medium",
- "text": "Deploy the service within a Virtual Network (VNet)",
- "waf": "Security"
+ "severity": "High",
+ "text": "Use Infrastructure as code to deploy the Azure OpenAI Service, model deployments, and all related resources",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"services": [
- "VNet",
- "Entra",
"WAF",
- "Monitor",
- "APIM"
+ "Entra"
],
- "severity": "Medium",
- "text": "Deploy network security groups (NSG) to your subnets to restrict or monitor traffic to/from APIM.",
+ "severity": "High",
+ "text": "Use Microsoft Entra Authentication with Managed Identity instead of API Key",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"services": [
- "VNet",
- "Entra",
- "WAF",
- "APIM",
- "PrivateLink"
+ "WAF"
],
- "severity": "Medium",
- "text": "Deploy Private Endpoints to filter incoming traffic when APIM is not deployed to a VNet.",
- "waf": "Security"
+ "severity": "High",
+ "text": "Evaluate the performance/accuracy of the system with a known golden dataset which has the inputs and the correct answers. Leverage capabilities in PromptFlow for Evaluation.",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "High",
- "text": "Disable Public Network Access",
- "waf": "Security"
+ "text": "Evaluate usage of Provisioned throughput model ",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "Simplify management with PowerShell automation scripts",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Review and implement Azure AI content safety",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "APIM",
"WAF"
],
- "severity": "Medium",
- "text": "Configure APIM via Infrastructure-as-code. Review DevOps best practices from the Cloud Adaption Framework APIM Landing Zone Accelerator",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Define and evaluate the throughput of the system based on tokens & response per minute and align with requirements",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "APIM",
"WAF"
],
"severity": "Medium",
- "text": "Promote usage of Visual Studio Code APIM extension for faster API development",
- "waf": "Operations"
+ "text": "Improve latency of the system by limiting token sizes, streaming options for applications like chatbots or conversational interfaces. Streaming can enhance the perceived performance of Azure OpenAI applications by delivering responses to users in an incremental manner",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "ServiceBus",
+ "Storage"
],
"severity": "Medium",
- "text": "Implement DevOps and CI/CD in your workflow",
- "waf": "Operations"
+ "text": "Estimate elasticity demands to determine synchronous and batch request segregation based on priority. For high priority, use synchronous approach and for low priority, asynchronous batch processing with queue is preferred",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "Secure APIs using client certificate authentication",
- "waf": "Security"
+ "severity": "High",
+ "text": "Benchmark token consumption requirements based on estimated demands from consumers. Consider using the Azure OpenAI benchmarking tool to help you validate the throughput if you are using Provisioned Throughput Unit deployments",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Secure backend services using client certificate authentication",
- "waf": "Security"
+ "text": "If you are using Provisioned Throughput Units (PTUs), consider deploying a token-per-minute (TPM) deployment for overflow requests. Use a gateway to route requests to the TPM deployment when the PTU limits are reached.",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "Review 'Recommendations to mitigate OWASP API Security Top 10 threats' article and check what is applicable to your APIs",
- "waf": "Security"
+ "severity": "High",
+ "text": "Choose the right model for the right task. Pick models with right tradeoff between speed, quality of response and output complexity",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Use Authorizations feature to simplify management of OAuth 2.0 token for your backend APIs",
- "waf": "Security"
+ "text": "Have a baseline for performance without fine-tuning for knowing whether or not fine-tuning has improved model performance",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "ACR"
],
- "severity": "High",
- "text": "Use the latest TLS version when encrypting information in transit. Disable outdated and unnecessary protocols and ciphers when possible.",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Deploy multiple OAI instances across regions",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "Entra",
+ "APIM"
],
"severity": "High",
- "text": "Ensure that secrets (Named values) are stored an Azure Key Vault so they can be securely accessed and updated",
- "waf": "Security"
+ "text": "Implement retry & healthchecks with Gateway pattern like APIM",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
"WAF"
],
"severity": "Medium",
- "text": "Use managed identities to authenticate to other Azure resources whenever possible",
- "waf": "Security"
+ "text": "Ensure having adequate quotas of TPM & RPM for the workload",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "APIM",
- "WAF",
- "AppGW"
+ "WAF"
],
- "severity": "High",
- "text": "Use web application firewall (WAF) by deploying Application Gateway in front of APIM",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Review the considerations in HAI toolkit guidance and apply those interaction practices for the slution",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "ACR"
],
- "severity": "Low",
- "text": "Refer to baseline highly available zone-redundant web application architecture for best practices",
+ "severity": "Medium",
+ "text": "Deploy separate fine tuned models across regions if finetuning is employed",
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
"services": [
+ "WAF",
"Backup",
- "WAF"
+ "ASR"
],
"severity": "Medium",
- "text": "Use Premium and Standard tiers. These tiers support staging slots and automated backups.",
+ "text": "Regularly backup and replicate critical data to ensure data availability and recoverability in case of data loss or system failures. Leverage Azure's backup and disaster recovery services to protect your data.",
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "High",
- "text": "Leverage Availability Zones where regionally applicable (requires Premium v2 or v3 tier)",
+ "text": "Azure AI search service tiers should be choosen to have a SLA ",
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "Medium",
- "text": "Implement health checks",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Classify data and sensitivity, labeling with Microsoft Purview before generating the embeddings and make sure to treat the embeddings generated with same sensitivity and classification",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
"services": [
- "Backup",
- "WAF",
- "AppSvc"
+ "WAF"
],
"severity": "High",
- "text": "Refer to backup and restore best practices for Azure App Service",
- "waf": "Reliability"
+ "text": "Encrypt data used for RAG with SSE/Disk encryption with optional BYOK",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
"services": [
"WAF",
- "AppSvc"
+ "ACR"
],
"severity": "High",
- "text": "Implement Azure App Service reliability best practices",
- "waf": "Reliability"
+ "text": "Ensure TLS is enforced for data in transit across data sources, AI search used for Retrieval-Augmented Generation (RAG) and LLM communication",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"services": [
"WAF",
- "AppSvc"
+ "RBAC"
],
- "severity": "Low",
- "text": "Familiarize with how to move an App Service app to another region During a disaster",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use RBAC to manage access to Azure OpenAI services. Assign appropriate permissions to users and restrict access based on their roles and responsibilities",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
"services": [
- "WAF",
- "AppSvc"
+ "WAF"
],
- "severity": "High",
- "text": "Familiarize with reliability support in Azure App Service",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Implement data encryption, masking or redaction techniques to hide sensitive data or replace it with obfuscated values in non-production environments or when sharing data for testing or troubleshooting purposes",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
"services": [
"WAF",
- "AppSvc"
+ "Monitor",
+ "Sentinel",
+ "Defender"
],
- "severity": "Medium",
- "text": "Ensure \"Always On\" is enabled for Function Apps running on a app service plan",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Utilize Azure Defender to detect and respond to security threats and set up monitoring and alerting mechanisms to identify suspicious activities or breaches. Leverage Azure Sentinel for advanced threat detection and response",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
"WAF",
- "AppSvc"
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Monitor App Service instances using Health checks",
- "waf": "Reliability"
+ "text": "Establish data retention and disposal policies to adhere to compliance regulations. Implement secure deletion methods for data that is no longer required and maintain an audit trail of data retention and disposal activities",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
"WAF"
],
- "severity": "Medium",
- "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Implement Prompt shields and groundedness detection using Content Safety ",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
"WAF"
],
- "severity": "Low",
- "text": "Use Application Insights Standard test to monitor availability and responsiveness of web app or website",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Ensure compliance with relevant data protection regulations, such as GDPR or HIPAA, by implementing privacy controls and obtaining necessary consents or permissions for data processing activities.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a safe and audited environment for storing secrets and is well-integrated with App Service through the Key Vault SDK or App Service Key Vault References.",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
"services": [
- "AKV",
- "WAF",
- "AppSvc"
+ "WAF"
],
- "severity": "High",
- "text": "Use Key Vault to store secrets",
+ "severity": "Medium",
+ "text": "Educate your employees about data security best practices, the importance of handling data securely, and potential risks associated with data breaches. Encourage them to follow data security protocols diligently.",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Use a Managed Identity to connect to Key Vault either using the Key Vault SDK or through App Service Key Vault References.",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "AKV",
- "WAF",
- "AppSvc"
+ "WAF"
],
"severity": "High",
- "text": "Use Managed Identity to connect to Key Vault",
+ "text": "Keep production data separate from development and testing data. Only use real sensitive data in production and utilize anonymized or synthetic data in development and test environments.",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Store the App Service TLS certificate in Key Vault.",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
"services": [
- "AKV",
- "WAF",
- "AppSvc"
+ "WAF"
],
- "severity": "High",
- "text": "Use Key Vault to store TLS certificate.",
+ "severity": "Medium",
+ "text": "If you have varying levels of data sensitivity, consider creating separate indexes for each level. For instance, you could have one index for general data and another for sensitive data, each governed by different access protocols",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Systems that process sensitive information should be isolated. To do so, use separate App Service Plans or App Service Environments and consider the use of different subscriptions or management groups.",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
"services": [
- "Subscriptions",
"WAF",
- "AppSvc"
+ "RBAC",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Isolate systems that process sensitive information",
+ "text": "Take segregation a step further by placing sensitive datasets in different instances of the service. Each instance can be controlled with its own specific set of RBAC policies",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Local disks on App Service are not encrypted and sensitive data should not be stored on those. (For example: D:\\\\Local and %TMP%).",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
"services": [
- "TrafficManager",
- "WAF",
- "AppSvc"
+ "WAF"
],
- "severity": "Medium",
- "text": "Do not store sensitive data on local disk",
+ "severity": "High",
+ "text": "Recognize that embeddings and vectors generated from sensitive information are themselves sensitive. This data should be afforded the same protective measures as the source material",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "For authenticated web application, use a well established Identity Provider like Azure AD or Azure AD B2C. Leverage the application framework of your choice to integrate with this provider or use the App Service Authentication / Authorization feature.",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
"WAF",
- "AppSvc"
+ "RBAC"
],
- "severity": "Medium",
- "text": "Use an established Identity Provider for authentication",
+ "severity": "High",
+ "text": "Apply RBAC to th data stores having embeddings and vectors and scope access based on role's access requirements",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Deploy code to App Service from a controlled and trusted environment, like a well-managed and secured DevOps deployment pipeline. This avoids code that was not version controlled and verified to be deployed from a malicious host.",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
"services": [
"WAF",
- "AppSvc"
+ "PrivateLink"
],
"severity": "High",
- "text": "Deploy from a trusted environment",
+ "text": "Configure private endpoint for AI services to restrict service access within your network",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Disable basic authentication for both FTP/FTPS and for WebDeploy/SCM. This disables access to these services and enforces the use of Azure AD secured endpoints for deployment. Note that the SCM site can also be opened using Azure AD credentials.",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "WAF"
+ "WAF",
+ "Firewall",
+ "VNet"
],
"severity": "High",
- "text": "Disable basic authentication",
+ "text": "Enforce strict inbound and outbound traffic control with Azure Firewall and UDRs and limit the external integration points",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Where possible use Managed Identity to connect to Azure AD secured resources. If this is not possible, store secrets in Key Vault and connect to Key Vault using a Managed Identity instead.",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "AKV",
"WAF"
],
"severity": "High",
- "text": "Use Managed Identity to connect to resources",
+ "text": "Implement network segmentation and access controls to restrict access to the LLM application only to authorized users and systems and prevent lateral movement",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Where using images stored in Azure Container Registry, pull these using a Managed Identity.",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "ACR",
"WAF"
],
+ "severity": "Medium",
+ "text": "Use prompt compression tools like LLMLingua or gprtrim",
+ "waf": "Cost Optimization"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "services": [
+ "WAF",
+ "AKV",
+ "Entra"
+ ],
"severity": "High",
- "text": "Pull containers using a Managed Identity",
+ "text": "Ensure that APIs and endpoints used by the LLM application are properly secured with authentication and authorization mechanisms, such as Managed identities, API keys or OAuth, to prevent unauthorized access.",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "By configuring the diagnostic settings of App Service, you can send all telemetry to Log Analytics as the central destination for logging and monitoring. This allows you to monitor runtime activity of App Service such as HTTP logs, application logs, platform logs, ...",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "Monitor",
- "WAF",
- "AppSvc"
+ "WAF"
],
"severity": "Medium",
- "text": "Send App Service runtime logs to Log Analytics",
+ "text": "Enforce strong end user authentication mechanisms, such as multi-factor authentication, to prevent unauthorized access to the LLM application and associated network resources",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Set up a diagnostic setting to send the activity log to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the App Service resource itself.",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "Monitor",
"WAF",
- "AppSvc"
+ "Monitor"
],
"severity": "Medium",
- "text": "Send App Service activity logs to Log Analytics",
+ "text": "Implement network monitoring tools to detect and analyze network traffic for any suspicious or malicious activities. Enable logging to capture network events and facilitate forensic analysis in case of security incidents",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Control outbound network access using a combination of regional VNet integration, network security groups and UDR's. Traffic should be routed to an NVA such as Azure Firewall. Ensure to monitor the Firewall's logs.",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
"services": [
- "VNet",
- "WAF",
- "Firewall",
- "Monitor",
- "NVA"
+ "WAF"
],
"severity": "Medium",
- "text": "Outbound network access should be controlled",
+ "text": "Conduct security audits and penetration testing to identify and address any network security weaknesses or vulnerabilities in the LLM application's network infrastructure",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "You can provide a stable outbound IP by using VNet integration and using a VNet NAT Gateway or an NVA like Azure Firewall. This allows the receiving party to allow-list based on IP, should that be needed. Note that for communications towards Azure Services often there's no need to depend on the IP address and mechanics like Service Endpoints should be used instead. (Also the use of private endpoints on the receiving end avoids for SNAT to happen and provides a stable outbound IP range.)",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
"services": [
- "Storage",
- "VNet",
- "WAF",
- "Firewall",
- "NVA",
- "PrivateLink"
+ "WAF"
],
"severity": "Low",
- "text": "Ensure a stable IP for outbound communications towards internet addresses",
- "waf": "Security"
+ "text": "Azure AI Services are properly tagged for better management",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Control inbound network access using a combination of App Service Access Restrictions, Service Endpoints or Private Endpoints. Different access restrictions can be required and configured for the web app itself and the SCM site.",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
"services": [
- "PrivateLink",
- "WAF",
- "AppSvc"
+ "WAF"
+ ],
+ "severity": "Low",
+ "text": "Azure AI Service accounts follows organizational naming conventions",
+ "waf": "Operational Excellence"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "WAF checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "services": [
+ "WAF"
],
"severity": "High",
- "text": "Inbound network access should be controlled",
- "waf": "Security"
+ "text": "Diagnostic logs in Azure AI services resources should be enabled",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Protect against malicious inbound traffic using a Web Application Firewall like Application Gateway or Azure Front Door. Make sure to monitor the WAF's logs.",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
"services": [
"WAF",
- "Monitor",
- "AppSvc",
- "FrontDoor",
- "AppGW"
+ "Entra"
],
"severity": "High",
- "text": "Use a WAF in front of App Service",
+ "text": "Key access (local authentication) is recommended to be disabled for security. After disabling key based access, Microsoft Entra ID becomes the only access method, which allows maintaining minimum privilege principle and granular control. ",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Make sure the WAF cannot be bypassed by locking down access to only the WAF. Use a combination of Access Restrictions, Service Endpoints and Private Endpoints.",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
"services": [
- "PrivateLink",
- "WAF"
+ "WAF",
+ "AKV",
+ "Entra"
],
"severity": "High",
- "text": "Avoid for WAF to be bypassed",
+ "text": "Store and manage keys securely using Azure Key Vault. Avoid hard-coding or embedding sensitive keys within your LLM application's code and retrieve them securely from Azure Key Vault using managed identities",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Set minimum TLS policy to 1.2 in App Service configuration.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
"services": [
- "AzurePolicy",
"WAF",
- "AppSvc"
+ "AKV"
],
- "severity": "Medium",
- "text": "Set minimum TLS policy to 1.2",
+ "severity": "High",
+ "text": "Regularly rotate and expire keys stored in Azure Key Vault to minimize the risk of unauthorized access.",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Configure App Service to use HTTPS only. This causes App Service to redirect from HTTP to HTTPS. Strongly consider the use of HTTP Strict Transport Security (HSTS) in your code or from your WAF, which informs browsers that the site should only be accessed using HTTPS.",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
"services": [
- "WAF",
- "AppSvc"
+ "WAF"
],
"severity": "High",
- "text": "Use HTTPS only",
- "waf": "Security"
+ "text": "Use tiktoken to understand token sizes for token optimizations in conversational mode",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Do not use wildcards in your CORS configuration, as this allows all origins to access the service (thereby defeating the purpose of CORS). Specifically only allow the origins that you expect to be able to access the service.",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
"services": [
- "Storage",
"WAF"
],
"severity": "High",
- "text": "Wildcards must not be used for CORS",
+ "text": "Follow secure coding practices to prevent common vulnerabilities such as injection attacks, cross-site scripting (XSS), or security misconfigurations",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Remote debugging must not be turned on in production as this opens additional ports on the service which increases the attack surface. Note that the service does turn of remote debugging automatically after 48 hours.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "High",
- "text": "Turn off remote debugging",
+ "text": "Setup a process to regularly update and patch the LLM libraries and other system components",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Enable Defender for App Service. This (amongst other threats) detects communications to known malicious IP addresses. Review the recommendations from Defender for App Service as part of your operations.",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
"services": [
- "Defender",
"WAF",
- "AppSvc"
+ "AzurePolicy"
],
- "severity": "Medium",
- "text": "Enable Defender for Cloud - Defender for App Service",
- "waf": "Security"
+ "severity": "High",
+ "text": "Adhere to Azure OpenAI or other LLMs terms of use, policies and guidance and allowed use cases",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Azure provides DDoS Basic protection on its network, which can be improved with intelligent DDoS Standard capabilities which learns about normal traffic patterns and can detect unusual behavior. DDoS Standard applies to a Virtual Network so it must be configured for the network resource in front of the app, such as Application Gateway or an NVA.",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
"services": [
- "VNet",
- "EventHubs",
"WAF",
- "NVA",
- "DDoS",
- "AppGW"
+ "Cost"
],
"severity": "Medium",
- "text": "Enable DDOS Protection Standard on the WAF VNet",
- "waf": "Security"
+ "text": "Understand difference in cost of base models and fine tuned models and token step sizes",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Where using images stored in Azure Container Registry, pull these over a virtual network from Azure Container Registry using its private endpoint and the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"services": [
- "VNet",
- "PrivateLink",
- "ACR",
- "WAF"
+ "WAF",
+ "Cost"
],
- "severity": "Medium",
- "text": "Pull containers over a Virtual Network",
- "waf": "Security"
+ "severity": "High",
+ "text": "Batch requests, where possible, to minimize the per-call overhead which can reduce overall costs. Ensure you optimize batch size",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Conduct a penetration test on the web application following the penetration testing rules of engagement.",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "Monitor",
+ "Cost"
],
"severity": "Medium",
- "text": "Conduct a penetration test",
- "waf": "Security"
+ "text": "Set up a cost tracking system that monitors model usage and use that information to help inform model choices and prompt sizes",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Deploy validated code",
- "waf": "Security"
+ "text": "Set a maximum limit on the number of tokens per model response (max_tokens and the number of completions to generate). Optimize the size to ensure it is large enough for a valid response",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "High",
- "text": "Use up-to-date platforms, languages, protocols and frameworks",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Review the guidance provided on setting up AI search for Reliability",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "Subscriptions",
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "High",
- "text": "Ensure ADDS domain controller(s) are deployed in the identity subscription in native Azure",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Plan and manage AI Search Vector storage",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "ACR"
],
"severity": "Medium",
- "text": "Ensure ADDS sites and services is configured to keep authentication requests from Azure-based resources (including Azure VMware Solution) local to Azure",
- "waf": "Security"
+ "text": "Ensure deployment of Azure OpenAI instances across your various environments, such as development, test, and production supporting lrarning & experimentation. Apply LLMOps practices to automate the lifecycle management of your GenAI applications",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "Storage"
],
"severity": "High",
- "text": "Ensure that vCenter is connected to ADDS to enable authentication based on 'named user accounts'",
- "waf": "Security"
+ "text": "Evaluate usage of billing models - PAYG vs PTU. Start with PAYG and consider PTU when the usage is predictable in production since it offers dedicated memory and compute, reserved capacity, and consistent maximum latency for the specified model version",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Ensure that the connection from vCenter to ADDS is using a secure protocol (LDAPS)",
- "waf": "Security"
+ "text": "Evaluate the quality of prompts and applications when switching between model versions",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "text": "CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)",
- "waf": "Security"
+ "text": "Evaluate, monitor and refine your GenAI apps for features like groundedness, relevance, accuracy, coherence and fluency",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
"WAF"
],
- "severity": "High",
- "text": "Ensure that NSX-Manager is integrated with an external Identity provider (LDAPS)",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Evaluate your Azure AI Search results based on different search parameters",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
"services": [
- "RBAC",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Has an RBAC model been created for use within VMware vSphere",
- "waf": "Security"
+ "text": "Look at fine tuning models as way of increasing accuracy only when you have tried other basic approaches like prompt engineering and RAG with your data",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
"services": [
- "RBAC",
"WAF"
],
"severity": "Medium",
- "text": "RBAC permissions should be granted on ADDS groups and not on specific users",
- "waf": "Security"
+ "text": "Use prompt engineering techniques to improve the accuracy of LLM responses",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
"services": [
- "RBAC",
- "AVS",
"WAF"
],
- "severity": "High",
- "text": "RBAC permissions on the Azure VMware Solution resource in Azure are 'locked down' to a limited set of owners only",
+ "severity": "Medium",
+ "text": "Red team your GenAI applications",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
"services": [
- "RBAC",
"WAF"
],
- "severity": "High",
- "text": "Ensure all custom roles are scoped with CloudAdmin permitted authorizations",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Provide end users with scoring options for LLM responses and track these scores. ",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"services": [
- "AVS",
"WAF"
],
"severity": "High",
- "text": "Is the correct Azure VMware Solution connectivity model selected for the customer use case at hand",
- "waf": "Performance"
+ "text": "Consider Quota management practices. Use dynamic quota for certain use cases when your application can use extra capacity opportunistically or the application itself is driving the rate at which the Azure OpenAI API is called",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
"services": [
- "ExpressRoute",
+ "ACR",
"WAF",
- "VPN",
- "Monitor",
- "NetworkWatcher"
+ "LoadBalancer",
+ "Entra",
+ "APIM"
],
- "severity": "High",
- "text": "Ensure ExpressRoute or VPN connections from on-premises to Azure are monitored using 'connection monitor'",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Use Load balancer solutions like APIM based gateway for balancing load and capacity across services and regions",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc411",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython-new&pivots=programming-language-studio#import-training-data-from-azure-blob-store",
+ "service": "Azure OpenAI",
"services": [
- "AVS",
- "ExpressRoute",
"WAF",
- "Monitor",
- "VM",
- "NetworkWatcher"
+ "Storage"
],
"severity": "Medium",
- "text": "Ensure a connection monitor is created from an Azure native resource to an Azure VMware Solution virtual machine to monitor the Azure VMware Solution back-end ExpressRoute connection",
- "waf": "Operations"
+ "text": "Follow the guidance for fine-tuning with large data files and import the data from an Azure blob store. Large files, 100 MB or larger, can become unstable when uploaded through multipart forms because the requests are atomic and can't be retried or resumed",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc412",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest",
+ "service": "Azure OpenAI",
"services": [
- "AVS",
"WAF",
- "Monitor",
- "VM",
- "NetworkWatcher"
+ "Monitor"
],
"severity": "Medium",
- "text": "Ensure a connection monitor is created from an on-premises resource to an Azure VMware Solution virtual machine to monitor end-2-end connectivity",
- "waf": "Operations"
+ "text": "Manage rate limits for your model deployments and monitor usage of tokens per minute (TPM) and requests per minute (RPM) for pay-as-you-go deployments",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc413",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai",
+ "service": "Azure OpenAI",
"services": [
- "ARS",
- "WAF"
+ "WAF",
+ "Monitor"
],
- "severity": "High",
- "text": "When route server is used, ensure no more then 1000 routes are propagated from route server to ExR gateway to on-premises (ARS limit).",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Monitor provision-managed utilization if you're using the provisioned throughput payment model",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc414",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/content-filters",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "RBAC",
- "AVS",
"WAF"
],
- "severity": "High",
- "text": "Is Privileged Identity Management implemented for roles managing the Azure VMware Solution resource in the Azure Portal (no standing permissions allowed)",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Tune content filters to minimize false positives from overly aggressive filters",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc415",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/encrypt-data-at-rest",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "RBAC",
- "AVS",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "High",
- "text": "Privileged Identity Management audit reporting should be implemented for the Azure VMware Solution PIM roles",
+ "severity": "Medium",
+ "text": "Use customer-managed keys for fine-tuned models and training data that's uploaded to Azure OpenAI",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc416",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "AVS",
- "WAF"
+ "WAF",
+ "LoadBalancer"
],
"severity": "Medium",
- "text": "If using Privileged Identity Management is being used, ensure that a valid Entra ID enabled account is created with a valid SMTP record for Azure VMware Solution Automatic Host replacement notifications. (standing permissions required)",
+ "text": "Implement jailbreak risk detection to safeguard your language model deployments against prompt injection attacks",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc417",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
- "severity": "High",
- "text": "Limit use of CloudAdmin account to emergency access only",
+ "severity": "Medium",
+ "text": "Use security controls like throttling, service isolation and gateway pattern to prevent attacks that might exhaust model usage quotas",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a9",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "RBAC",
- "WAF"
+ "WAF",
+ "Cost"
],
"severity": "Medium",
- "text": "Create custom RBAC roles in vCenter to implement a least-privilege model inside vCenter",
- "waf": "Security"
+ "text": "Develop your cost model, considering prompt sizes. Understanding prompt input and response sizes and how text translates into tokens helps you create a viable cost model",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a1",
+ "link": "https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/",
+ "service": "Azure OpenAI",
"services": [
- "WAF"
+ "WAF",
+ "Cost"
],
"severity": "Medium",
- "text": "Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX) credentials",
- "waf": "Security"
+ "text": "Consider model pricing and capabilities when you choose models. Start with less-costly models for less-complex tasks like text generation or completion tasks and for complex tasks like language translation or content understanding, consider using more advanced models. Optimize costs while still achieving the desired application performance",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "AVS",
- "VM",
- "WAF"
+ "WAF",
+ "Cost"
],
- "severity": "High",
- "text": "Use a centralized identity provider to be used for workloads (VM's) running on Azure VMware Solution",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Maximize Azure OpenAI price breakpoints like fine-tuning and model breakpoints like image generation to your advantage. Fine-tuning is charged per hour, use as much time as you have available per hour to improve results without slipping into the next billing period. The cost for generating 100 images is the same as the cost for 1 image",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a3",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Is East-West traffic filtering implemented within NSX-T",
- "waf": "Security"
+ "text": "Remove unused fine-tuned models when they're no longer being consumed to avoid incurring an ongoing hosting fee",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8g",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "AppGW",
- "AVS",
- "WAF",
- "Firewall"
+ "WAF"
],
- "severity": "High",
- "text": "Workloads on Azure VMware Solution are not directly exposed to the internet. Traffic is filtered and inspected by Azure Application Gateway, Azure Firewall or 3rd party solutions",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Create concise prompts that provide enough context for the model to generate a useful response. Also ensure that you optimize the limit of the response length.",
+ "waf": "Cost Optimization"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec219",
+ "link": "https://learn.microsoft.com/azure/ai-services/create-account-bicep",
+ "service": "Azure OpenAI",
"services": [
- "AVS",
"WAF"
],
- "severity": "High",
- "text": "Auditing and logging is implemented for inbound internet requests to Azure VMware Solution and Azure VMware Solution based workloads",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Use infrastructure as code (IaC) to deploy Azure OpenAI, model deployments, and other infrastructure required for fine-tuning models",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.CognitiveServices/accounts",
"checklist": "WAF checklist",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5855",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/service/openai",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Session monitoring is implemented for outbound internet connections from Azure VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious activity",
- "waf": "Security"
+ "text": "Consider using dedicated model deployments per consumer group to provide per-model usage isolation that can help prevent noisy neighbors between your consumer groups",
+ "waf": "Operational Excellence"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
"services": [
- "VNet",
- "ExpressRoute",
"WAF",
- "VPN",
- "DDoS"
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Is DDoS standard protection enabled on ExR/VPN Gateway subnet in Azure",
- "waf": "Security"
+ "text": "Implement an error handling policy at the global level",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Use a dedicated privileged access workstation (PAW) to manage Azure VMware Solution, vCenter, NSX manager and HCX manager",
- "waf": "Security"
+ "text": "Ensure all APIs policies include a element.",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
"services": [
- "Defender",
- "AVS",
- "WAF"
+ "WAF",
+ "ACR",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Enable Advanced Threat Detection (Microsoft Defender for Cloud aka ASC) for workloads running on Azure VMware Solution",
- "waf": "Security"
+ "text": "Use Policy Fragments to avoid repeating same policies definitions across multiple APIs",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
"services": [
- "Arc",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Use Azure ARC for Servers to properly govern workloads running on Azure VMware Solution using Azure native technologies (Azure ARC for Azure VMware Solution is not yet available)",
- "waf": "Security"
+ "text": "If you are planning to monetize your APIs, review the 'monetization support' article for best practices",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
"services": [
- "AVS",
"WAF",
- "SQL"
+ "Monitor"
],
- "severity": "Low",
- "text": "Ensure workloads on Azure VMware Solution use sufficient data encryption during run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is default)",
- "waf": "Security"
+ "severity": "High",
+ "text": "Enable Diagnostics Settings to export logs to Azure Monitor",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
"services": [
- "AKV",
"WAF"
],
- "severity": "Low",
- "text": "When in-guest encryption is used, store encryption keys in Azure Key vault when possible",
- "waf": "Security"
+ "severity": "Medium",
+ "text": "Enable Application Insights for more detailed telemetry",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "Monitor"
],
- "severity": "Medium",
- "text": "Consider using extended security update support for workloads running on Azure VMware Solution (Azure VMware Solution is eligible for ESU)",
- "waf": "Security"
+ "severity": "High",
+ "text": "Configure alerts on the most critical metrics",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
"services": [
- "WAF"
+ "WAF",
+ "AKV"
],
"severity": "High",
- "text": "Ensure that the appropriate vSAN Data redundancy method is used (RAID specification)",
- "waf": "Reliability"
+ "text": "Ensure that custom SSL certificates are stored an Azure Key Vault so they can be securely accessed and updated",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
"services": [
- "Storage",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "Entra"
],
"severity": "High",
- "text": "Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage needs",
- "waf": "Reliability"
+ "text": "Protect incoming requests to APIs (data plane) with Azure AD",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
"services": [
- "ASR",
- "WAF"
+ "WAF",
+ "Entra"
],
- "severity": "High",
- "text": "Ensure that you have requested enough quota, ensuring you have considered growth and Disaster Recovery requirement",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use Microsoft Entra ID to authenticate users in the Developer Portal",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Ensure that access constraints to ESXi are understood, there are access limits which might affect 3rd party solutions.",
- "waf": "Operations"
+ "text": "Create appropriate groups to control the visibility of the products",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
"services": [
- "AzurePolicy",
"WAF"
],
"severity": "Medium",
- "text": "Ensure that you have a policy around ESXi host density and efficiency, keeping in mind the lead time for requesting new nodes",
+ "text": "Use Backends feature to eliminate redundant API backend configurations",
"waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
"services": [
- "AVS",
- "Cost",
- "WAF"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Ensure a good cost management process is in place for Azure VMware Solution - Azure Cost Management can be used",
- "waf": "Cost"
+ "text": "Use Named Values to store common values that can be used in policies",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
"services": [
- "AVS",
- "Cost",
- "WAF"
+ "WAF",
+ "ACR"
],
- "severity": "Low",
- "text": "Are Azure reserved instances used to optimize cost for using Azure VMware Solution",
- "waf": "Cost"
+ "severity": "Medium",
+ "text": "For DR, leverage the premium tier with deployments scaled across two or more regions for 99.99% SLA",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Consider the use of Azure Private-Link when using other Azure Native Services",
- "waf": "Security"
+ "text": "Deploy at least one unit in two or more availability zones for an increased SLA of 99.99%",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
"services": [
- "WAF"
+ "WAF",
+ "Backup"
],
"severity": "High",
- "text": "Ensure all required resource reside within the same Azure availability zone(s)",
- "waf": "Performance"
+ "text": "Ensure there is an automated backup routine",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
"services": [
- "Defender",
- "AVS",
- "VM",
- "WAF"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Enable Microsoft Defender for Cloud for Azure VMware Solution guest VM workloads",
- "waf": "Security"
+ "text": "Use Policies to add a fail-over backend URL and caching to reduce failing calls.",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
"services": [
- "Arc",
- "AVS",
- "VM",
- "WAF"
+ "WAF",
+ "AzurePolicy",
+ "EventHubs"
],
- "severity": "Medium",
- "text": "Use Azure Arc enabled servers to manage your Azure VMware Solution guest VM workloads",
- "waf": "Security"
+ "severity": "Low",
+ "text": "If you need to log at high performance levels, consider Event Hubs policy",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
- "service": "AVS",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Enable Diagnostic and metric logging on Azure VMware Solution",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Apply throttling policies to control the number of requests per second",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
- "service": "AVS",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
"services": [
- "Monitor",
- "AVS",
- "VM",
"WAF"
],
"severity": "Medium",
- "text": "Deploy the Log Analytics Agents to Azure VMware Solution guest VM workloads",
- "waf": "Operations"
+ "text": "Configure autoscaling to scale out the number of instances when the load increases",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
- "service": "AVS",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
"services": [
- "AVS",
- "Backup",
- "WAF",
- "VM",
- "AzurePolicy"
+ "WAF"
],
"severity": "Medium",
- "text": "Ensure you have a documented and implemented backup policy and solution for Azure VMware Solution VM workloads",
- "waf": "Operations"
+ "text": "Deploy self-hosted gateways where Azure doesn't have a region close to the backend APIs.",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
- "service": "AVS",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
"services": [
- "Defender",
- "Monitor",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Use Microsoft Defender for Cloud for compliance monitoring of workloads running on Azure VMware Solution",
- "waf": "Security"
+ "text": "Use the premium tier for production workloads.",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
- "service": "AVS",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
"services": [
- "Defender",
- "WAF"
+ "WAF",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Are the applicable compliance baselines added to Microsoft Defender for Cloud",
- "waf": "Security"
+ "text": "In multi-region model, use Policies to route the requests to regional backends based on availability or latency.",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
- "service": "AVS",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "Entra",
+ "APIM"
],
"severity": "High",
- "text": "Was data residency evaluated when selecting Azure regions to use for Azure VMware Solution deployment",
- "waf": "Security"
+ "text": "Be aware of APIM's limits",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
- "service": "AVS",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
"services": [
"WAF"
],
"severity": "High",
- "text": "Are data processing implications (service provider / service consumer model) clear and documented",
- "waf": "Security"
+ "text": "Ensure that the self-hosted gateway deployments are resilient.",
+ "waf": "Reliability"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
- "service": "AVS",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
"services": [
- "WAF"
+ "WAF",
+ "Entra",
+ "APIM",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Consider using CMK (Customer Managed Key) for vSAN only if needed for compliance reason(s).",
- "waf": "Security"
+ "text": "Use Azure Front Door in front of APIM for multi-region deployment",
+ "waf": "Performance"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
"services": [
- "Monitor",
- "AVS",
- "WAF"
+ "WAF",
+ "VNet"
],
- "severity": "High",
- "text": "Create dashboards to enable core Azure VMware Solution monitoring insights",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Deploy the service within a Virtual Network (VNet)",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
- "service": "AVS",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
"services": [
+ "WAF",
"Monitor",
- "AVS",
- "WAF"
+ "Entra",
+ "APIM",
+ "VNet"
],
- "severity": "High",
- "text": "Create warning alerts for critical thresholds for automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Deploy network security groups (NSG) to your subnets to restrict or monitor traffic to/from APIM.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
- "service": "AVS",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
"services": [
- "Monitor",
- "AVS",
- "WAF"
+ "WAF",
+ "PrivateLink",
+ "Entra",
+ "APIM",
+ "VNet"
],
- "severity": "High",
- "text": "Ensure critical alert is created to monitor if vSAN consumption is below 75% as this is a support threshold from VMware",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Deploy Private Endpoints to filter incoming traffic when APIM is not deployed to a VNet.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
- "service": "AVS",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
"services": [
- "Monitor",
"WAF"
],
"severity": "High",
- "text": "Ensure alerts are configured for Azure Service Health alerts and notifications",
- "waf": "Operations"
+ "text": "Disable Public Network Access",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
"services": [
- "Storage",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Configure Azure VMware Solution logging to be send to an Azure Storage account or Azure EventHub for processing",
+ "text": "Simplify management with PowerShell automation scripts",
"waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "Entra",
+ "APIM"
],
- "severity": "Low",
- "text": "If deep insight in VMware vSphere is required: Is vRealize Operations and/or vRealize Network Insights used in the solution?",
+ "severity": "Medium",
+ "text": "Configure APIM via Infrastructure-as-code. Review DevOps best practices from the Cloud Adaption Framework APIM Landing Zone Accelerator",
"waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
- "service": "AVS",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
"services": [
- "Storage",
- "VM",
"WAF",
- "AzurePolicy"
+ "Entra",
+ "APIM"
],
- "severity": "High",
- "text": "Ensure the vSAN storage policy for VM's is NOT the default storage policy as this policy applies thick provisioning",
+ "severity": "Medium",
+ "text": "Promote usage of Visual Studio Code APIM extension for faster API development",
"waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Ensure vSphere content libraries are not placed on vSAN as vSAN is a finite resource",
+ "text": "Implement DevOps and CI/CD in your workflow",
"waf": "Operations"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
"services": [
- "Storage",
- "Backup",
"WAF"
],
"severity": "Medium",
- "text": "Ensure data repositories for the backup solution are stored outside of vSAN storage. Either in Azure native or on a disk pool-backed datastore",
- "waf": "Operations"
+ "text": "Secure APIs using client certificate authentication",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
+ "service": "APIM",
"services": [
- "Arc",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Ensure workloads running on Azure VMware Solution are hybrid managed using Azure Arc for Servers (Arc for Azure VMware Solution is in preview)",
- "waf": "Operations"
+ "text": "Secure backend services using client certificate authentication",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
- "service": "AVS",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
+ "service": "APIM",
"services": [
- "Monitor",
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Ensure workloads running on Azure VMware Solution are monitored using Azure Log Analytics and Azure Monitor",
- "waf": "Operations"
+ "text": "Review 'Recommendations to mitigate OWASP API Security Top 10 threats' article and check what is applicable to your APIs",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
- "service": "AVS",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
+ "service": "APIM",
"services": [
- "AVS",
"WAF"
],
"severity": "Medium",
- "text": "Include workloads running on Azure VMware Solution in existing update management tooling or in Azure Update Management",
- "waf": "Operations"
+ "text": "Use Authorizations feature to simplify management of OAuth 2.0 token for your backend APIs",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
- "service": "AVS",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
+ "service": "APIM",
"services": [
- "Monitor",
- "AVS",
- "AzurePolicy",
"WAF"
],
- "severity": "Medium",
- "text": "Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management, Monitoring and Security solutions",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use the latest TLS version when encrypting information in transit. Disable outdated and unnecessary protocols and ciphers when possible.",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
- "service": "AVS",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
+ "service": "APIM",
"services": [
- "Defender",
- "AVS",
- "WAF"
+ "WAF",
+ "AKV"
],
- "severity": "Medium",
- "text": "Ensure workloads running on Azure VMware Solution are onboarded to Microsoft Defender for Cloud",
+ "severity": "High",
+ "text": "Ensure that secrets (Named values) are stored an Azure Key Vault so they can be securely accessed and updated",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
+ "service": "APIM",
"services": [
- "Backup",
- "WAF"
+ "WAF",
+ "Entra"
],
"severity": "Medium",
- "text": "Ensure backups are not stored on vSAN as vSAN is a finite resource",
- "waf": "Reliability"
+ "text": "Use managed identities to authenticate to other Azure resources whenever possible",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "WAF checklist",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
+ "service": "APIM",
"services": [
- "WAF"
+ "WAF",
+ "Entra",
+ "APIM",
+ "AppGW"
],
- "severity": "Medium",
- "text": "Have all DR solutions been considered and a solution that is best for your business been decided upon? [SRM/JetStream/Zerto/Veeam/...]",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use web application firewall (WAF) by deploying Application Gateway in front of APIM",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
"services": [
- "ASR",
- "WAF"
+ "WAF",
+ "AKV",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
- "waf": "Reliability"
+ "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal.",
+ "waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
- "service": "AVS",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Use Automated recovery plans with either of the Disaster solutions, avoid manual tasks as much as possible",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
- "service": "AVS",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
"services": [
- "ASR",
- "WAF"
+ "WAF",
+ "AppGW",
+ "AzurePolicy",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Use the geopolitical region pair as the secondary disaster recovery environment",
- "waf": "Reliability"
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
- "service": "AVS",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor",
+ "AzurePolicy"
],
"severity": "High",
- "text": "Use 2 different address spaces between the regions, for example: 10.0.0.0/16 and 192.168.0.0/16 for the different regions",
- "waf": "Reliability"
+ "text": "Deploy your WAF policy for Front Door in 'Prevention' mode' so that Web Application Firewall takes appropriate action to allow or deny traffic.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
"services": [
- "NVA",
- "AVS",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "TrafficManager",
+ "FrontDoor",
+ "EventHubs"
],
- "severity": "Medium",
- "text": "Will ExpressRoute Global Reach be used for connectivity between the primary and secondary Azure VMware Solution Private Clouds or is routing done through network virtual appliances?",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Avoid placing Traffic Manager behind Front Door.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
"services": [
- "Backup",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Medium",
- "text": "Have all Backup solutions been considered and a solution that is best for your business been decided upon? [ MABS/CommVault/Metallic.io/Veeam/�. ]",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
"services": [
- "AVS",
- "Backup",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Medium",
- "text": "Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
+ "waf": "Performance"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
- "service": "AVS",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
"services": [
- "Backup",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Deploy your backup solution outside of vSan, on Azure native components",
+ "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Low",
- "text": "Is a process in place to request a restore of the VMware components managed by the Azure Platform?",
- "waf": "Reliability"
+ "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
+ "waf": "Performance"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "AKV",
+ "FrontDoor",
+ "Cost"
],
- "severity": "Low",
- "text": "For manual deployments, all configuration and deployments must be documented",
+ "severity": "High",
+ "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
"waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "For manual deployments, consider implementing resource locks to prevent accidental actions on your Azure VMware Solution Private Cloud",
+ "severity": "Medium",
+ "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
"waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "For automated deployments, deploy a minimal private cloud and scale as needed",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "For automated deployments, request or reserve quota prior to starting the deployment",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
- "service": "AVS",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
"services": [
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "For automated deployment, ensure that relevant resource locks are created through the automation or through Azure Policy for proper governance",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
- "service": "AVS",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"services": [
- "AKV",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "Implement human understandable names for ExR authorization keys to allow for easy identification of the keys purpose/use",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Tune the Azure Front Door WAF for your workload by configuring the WAF in Detection mode to reduce and fix false positive detections.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
- "service": "AVS",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
"services": [
- "ExpressRoute",
- "AVS",
- "AKV",
- "WAF"
+ "WAF",
+ "FrontDoor",
+ "AzurePolicy"
],
- "severity": "Low",
- "text": "Use Key vault to store secrets and authorization keys when separate Service Principles are used for deploying Azure VMware Solution and ExpressRoute",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
- "service": "AVS",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
"services": [
- "AVS",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "Define resource dependencies for serializing actions in IaC when many resources need to be deployed in/on Azure VMware Solution as Azure VMware Solution only supports a limited number of parallel operations.",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
- "service": "AVS",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Low",
- "text": "When performing automated configuration of NSX-T segments with a single Tier-1 gateway, use Azure Portal APIs instead of NSX-Manager APIs",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
- "service": "AVS",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"services": [
- "Subscriptions",
- "AVS",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "When intending to use automated scale-out, be sure to apply for sufficient Azure VMware Solution quota for the subscriptions running Azure VMware Solution",
- "waf": "Performance"
+ "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
- "service": "AVS",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
"services": [
- "Storage",
- "AzurePolicy",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "When intending to use automated scale-in, be sure to take storage policy requirements into account before performing such action",
- "waf": "Performance"
+ "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
- "service": "AVS",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Scaling operations always need to be serialized within a single SDDC as only one scale operation can be performed at a time (even when multiple clusters are used)",
- "waf": "Performance"
+ "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
- "service": "AVS",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
"services": [
"WAF"
],
+ "severity": "Low",
+ "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "WAF checklist",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "services": [
+ "WAF",
+ "FrontDoor"
+ ],
"severity": "Medium",
- "text": "Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
- "waf": "Performance"
+ "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
- "service": "AVS",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "Monitor"
],
"severity": "Medium",
- "text": "Define and enforce scale in/out maximum limits for your environment in the automations",
- "waf": "Performance"
+ "text": "Capture logs and metrics by turning on Diagnostic Settings. Include resource activity logs, access logs, health probe logs, and WAF logs. Set up alerts.",
+ "waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
- "service": "AVS",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
"services": [
- "Monitor",
- "WAF"
+ "WAF",
+ "Sentinel",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Implement monitoring rules to monitor automated scaling operations and monitor success and failure to enable appropriate (automated) responses",
+ "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
"waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "Backup"
],
- "severity": "High",
- "text": "When using MON, be aware of the limits of simulataneously configured VMs (MON Limit for HCX [400 - standard, 1000 - Larger appliance])",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "severity": "Medium",
+ "text": "Choose a routing method that supports your deployment strategy. The weighted method, which distributes traffic based on the configured weight coefficient, supports active-active models. A priority-based value that configures the primary region to receive all traffic and send traffic to the secondary region as a backup supports active-passive models. Combine the preceding methods with latency so that the origin with the lowest latency receives traffic.",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
"services": [
"WAF"
],
"severity": "High",
- "text": "When using MON, you cannot enable MON on more than 100 Network extensions",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "text": "Support redundancy by having multiple origins in one or more back-end pools. Always have redundant instances of your application and make sure each instance exposes an endpoint or origin. You can place those origins in one or more back-end pools.",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
- "service": "AVS",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
"services": [
- "VPN",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "If using a VPN connection for migrations, adjust your MTU size accordingly.",
- "waf": "Performance"
+ "text": "Set a timeout on forwarding requests to the back end. Adjust the timeout setting according to your endpoints' needs. If you don't, Azure Front Door might close the connection before the origin sends the response. You can also lower the default timeout for Azure Front Door if all of your origins have a shorter timeout.",
+ "waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
- "service": "AVS",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "For low connectivity regions connecting into Azure (500Mbps or less), considering deploying the HCX WAN optimization appliance",
- "waf": "Performance"
+ "text": "Decide if your application requires session affinity. If you have high reliability requirements, we recommend that you disable session affinity.",
+ "waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
- "service": "AVS",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Ensure that migrations are started from the on-premises appliance and NOT from the Cloud appliance (do NOT perform a reverse migration)",
- "waf": "Reliability"
+ "text": "Send the host header to the back end. The back-end services should be aware of the host name so that they can create rules to accept traffic only from that host.",
+ "waf": "Security"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "AVS",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"services": [
- "Storage",
- "AVS",
- "VM",
"WAF"
],
"severity": "Medium",
- "text": "When Azure Netapp Files is used to extend storage for Azure VMware Solution,consider using this as a VMware datastore instead of attaching directly to a VM.",
- "waf": "Reliability"
+ "text": "Use caching for endpoints that support it.",
+ "waf": "Cost"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "AVS",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "services": [
+ "WAF",
+ "FrontDoor"
+ ],
+ "severity": "Low",
+ "text": "Disable health checks in single back-end pools. If you have only one origin configured in your Azure Front Door origin group, these calls are unnecessary. This is only recommended if you can't have multiple origins in your endpoint.",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "WAF checklist",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
"services": [
+ "WAF",
"Storage",
- "ExpressRoute",
- "WAF"
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Ensure that a dedicated ExpressRoute Gateway is being used for external data storage solutions",
- "waf": "Reliability"
+ "text": "We recommend using the Premium Tier for leveraging the Security reports while the Standard Azure Front Door Profile provides only traffic reports under built-in analytics/reports.",
+ "waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "AVS",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
"services": [
- "Storage",
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "AKV"
],
"severity": "Medium",
- "text": "Ensure that FastPath is enabled on the ExpressRoute Gateway that is being used for external data storage solutions",
- "waf": "Reliability"
+ "text": "Use wildcard TLS certificates when possible.",
+ "waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "AVS",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"services": [
- "ASR",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
- "severity": "High",
- "text": "If using stretched cluster, ensure that your selected Disaster Recovery solution is supported by the vendor",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Optimize your application query string for caching. For purely static content, ignore query strings to maximize your use of the cache. If your application uses query strings, consider including them in the cache key. Including the query strings in the cache key allows Azure Front Door to serve cached responses or other responses, based on your configuration.",
+ "waf": "Performance"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "AVS",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "Storage"
],
- "severity": "High",
- "text": "If using stretched cluster, ensure that the SLA provided will meet your requirements",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use file compression when you're accessing downloadable content.",
+ "waf": "Performance"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "AVS",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "High",
- "text": "If using stretched cluster, ensure that both ExpressRoute circuits are connected to your connectivity hub.",
- "waf": "Reliability"
+ "text": "Consider migrating to Standard or Premium SKU if you are using Classic Azure Front Door currently as Classic Azure Front Door will be deprecated by March 2027.",
+ "waf": "Operations"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "AVS",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
"services": [
- "ExpressRoute",
- "WAF"
+ "WAF",
+ "TrafficManager",
+ "Storage",
+ "FrontDoor"
],
- "severity": "High",
- "text": "If using stretched cluster, ensure that both ExpressRoute circuits have GlobalReach enabled.",
+ "severity": "Medium",
+ "text": "Consider using Traffic Manager load balancing Azure Front Door and a third party CDN provider CDN profile for mission critical high availability scenario. ",
"waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/frontdoors",
"checklist": "WAF checklist",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "AVS",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
"services": [
- "WAF"
+ "WAF",
+ "AppSvc",
+ "FrontDoor"
],
"severity": "High",
- "text": "Have site disaster tolerance settings been properly considered and changed for your business if needed.",
- "waf": "Reliability"
+ "text": "When using Front Door with origin as App services, consider locking down the traffic to app services only through Azure Front Door using access restrictions. ",
+ "waf": "Security"
},
{
+ "arm-service": "Microsoft.DBforMySQL/servers",
"checklist": "WAF checklist",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"services": [
"WAF"
],
- "severity": "High",
- "text": "Select the right Function hosting plan based on your business & SLO requirements",
+ "severity": "Medium",
+ "text": "Leverage Flexible Server",
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.DBforMySQL/servers",
"checklist": "WAF checklist",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
"services": [
"WAF"
],
"severity": "High",
- "text": "Leverage Availability Zones where regionally applicable (not available for Consumption tier)",
+ "text": "Leverage Availability Zones where regionally applicable",
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.DBforMySQL/servers",
"checklist": "WAF checklist",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
"services": [
"WAF"
],
"severity": "Medium",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "text": "Leverage Data-in replication for cross-region DR scenarios",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
- "services": [
- "WAF",
- "AppSvc"
- ],
- "severity": "High",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant = (sku=~'{\"name\":\"Standard\"}') | distinct id,compliant",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "link": "https://learn.microsoft.com/azure/service-fabric/overview-managed-cluster#service-fabric-managed-cluster-skus",
+ "service": "Azure Service Fabric",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Cluster architecture",
+ "text": "Use Standard SKU for production scenarios.",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
+ "category": "Standard clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/clusters' | extend nodeTypes= array_concat(properties.nodeTypes) | mv-expand nodeTypes | summarize BronzeDurabilityCount = countif(nodeTypes.durabilityLevel == 'Bronze') by id | extend compliant = (BronzeDurabilityCount == 0) | distinct id,compliant",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity#durability-characteristics-of-the-cluster",
+ "service": "Azure Service Fabric",
"services": [
- "WAF",
- "AppSvc"
+ "VM"
],
- "severity": "High",
- "text": "Ensure 'Always On' is enabled for all Function Apps running on App Service Plan",
+ "severity": "Medium",
+ "subcategory": "Cluster architecture",
+ "text": "Use durability level Silver (5 VMs) or greater for production scenarios",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant= ( properties.zonalResiliency =~ 'true') | distinct id,compliant",
+ "guid": "2363878d-55c4-4cbd-9bc2-94523c85f12e",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-availability-zones",
+ "service": "Azure Service Fabric",
"services": [
- "Storage",
- "WAF"
+ "ACR"
],
"severity": "Medium",
- "text": "Pair a Function App to its own storage account. Try not to re-use storage accounts for Function Apps unless they are tightly coupled",
+ "subcategory": "Cluster architecture",
+ "text": "Consider using Availability Zones for your Service Fabric clusters. Service Fabric managed cluster supports deployments that span across multiple Availability Zones to provide zone resiliency. This configuration will ensure high-availability of the critical system services and your applications to protect from single-points-of-failure.",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "5ba74cc8-3ca2-44d5-9a67-bdc8e102e7b4",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-api-management-overview",
+ "service": "Azure Service Fabric",
"services": [
- "WAF"
+ "APIM"
],
"severity": "Medium",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Function App code",
- "waf": "Operations"
+ "subcategory": "Cluster architecture",
+ "text": "Consider using Azure API Management to expose and offload cross-cutting functionality for APIs hosted on the cluster. API Management can integrate with Service Fabric directly.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
- "service": "Bot service",
- "services": [
- "WAF"
- ],
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "ef17bb8f-4e2c-488b-8ceb-a07c3d750dd3",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-reliable-services-introduction",
+ "service": "Azure Service Fabric",
+ "services": [],
"severity": "Medium",
- "text": "Follow reliability support recommendations in Azure Bot Service",
+ "subcategory": "Workload architecture",
+ "text": "For stateful workload scenarios, consider using Reliable Services. The Reliable Services model allows your services to stay up even in unreliable environments where your machines fail or hit network issues, or in cases where the services themselves encounter errors and crash or fail. For stateful services, your state is preserved even in the presence of network or other failures.",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
- "service": "Bot service",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | summarize compliant = countif(sku.name matches regex '^Standard_[^d]*$' ) by id",
+ "guid": "4da21268-f775-4c89-a271-eb80543c8df7",
+ "service": "Azure Service Fabric",
"services": [
- "WAF"
+ "VM"
],
"severity": "Medium",
- "text": "Deploying bots with local data residency and regional compliance",
- "waf": "Reliability"
+ "subcategory": "Cluster architecture",
+ "text": "Avoid VM SKUs with temp disk offerings. Service Fabric uses managed disks by default, so avoiding temp disk offerings ensures you don't pay for unneeded resources.",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
- "service": "Bot service",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "1890b796-f300-41a3-a8d4-29738c1f4ad0",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-stateless-node-type#temporary-disk-support",
+ "service": "Azure Service Fabric",
"services": [
- "WAF"
+ "VM"
],
"severity": "Medium",
- "text": "Azure Bot Service runs in active-active mode for both global and regional services. When an outage occurs, you don't need to detect errors or manage the service. Azure Bot Service automatically performs auto failover and auto recovery in a multi-region geographical architecture. For the EU bot regional service, Azure Bot Service provides two full regions inside Europe with active/active replication to ensure redundancy. For the global bot service, all available regions/geographies can be served as the global footprint.",
- "waf": "Reliability"
+ "subcategory": "Cluster architecture",
+ "text": "If you need to select a certain VM SKU for capacity reasons and it happens to offer temp disk, consider using temporary disk support for your stateless workloads.",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
- "services": [
- "WAF"
- ],
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "5247bb32-6778-49c7-8b40-e171c9a3ce1e",
+ "service": "Azure Service Fabric",
+ "services": [],
"severity": "Medium",
- "text": "Azure Spring Apps permits two deployments for every app, only one of which receives production traffic. You can achieve zero downtime with blue green deployment strategies. Blue green deployment is only available in Standard and Enterprise tiers. You could automate deployment using CI/CD with ADO/GitHub actions",
- "waf": "Reliability"
+ "subcategory": "Cluster and workload architectures",
+ "text": "Align SKU selection and managed disk size with workload requirements. Matching your selection to your workload demands ensures you don't pay for unneeded resources.",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "6028759b-446a-41bc-8b0e-7728e61ca704",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-networking#manage-nsg-rules",
+ "service": "Azure Service Fabric",
"services": [
- "TrafficManager",
- "FrontDoor",
- "WAF"
+ "APIM",
+ "VNet"
],
"severity": "Medium",
- "text": "Azure Spring Apps instances could be created in multiple regions for your applications and traffic could be routed by Traffic Manager/Front Door.",
- "waf": "Reliability"
+ "subcategory": "Cluster architecture",
+ "text": "Ensure Network Security Groups (NSG) are configured to restrict traffic flow between subnets and node types. For example, you may have an API Management instance (one subnet), a frontend subnet (exposing a website directly), and a backend subnet (accessible only to frontend).",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | extend compliant = (isnotnull(properties.virtualMachineProfile.osProfile.secrets))",
+ "guid": "4e98c903-14cf-4c72-9c45-b8b23bc4cbd8",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#deploy-key-vault-certificates-to-service-fabric-cluster-virtual-machine-scale-sets",
+ "service": "Azure Service Fabric",
"services": [
- "ACR",
- "WAF"
+ "AKV",
+ "Storage",
+ "Entra",
+ "VM"
],
"severity": "Medium",
- "text": "In supported region, Azure Spring Apps can be deployed as zone redundant, which means that instances are automatically distributed across availability zones. This feature is only available in Standard and Enterprise tiers.",
- "waf": "Reliability"
+ "subcategory": "Cluster architecture",
+ "text": "Deploy Key Vault certificates to Service Fabric cluster virtual machine scale sets. Centralizing storage of application secrets in Azure Key Vault allows you to control their distribution. Key Vault greatly reduces the chances that secrets may be accidentally leaked.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
- "services": [
- "WAF"
- ],
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "001cbb6f-d88d-4431-8434-d01333397776",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#apply-an-access-control-list-acl-to-your-certificate-for-your-service-fabric-cluster",
+ "service": "Azure Service Fabric",
+ "services": [],
"severity": "Medium",
- "text": "Use more than 1 app instance for your apps",
- "waf": "Reliability"
+ "subcategory": "Cluster architecture",
+ "text": "Apply an Access Control List (ACL) to your client certificate for your Service Fabric cluster. Using an ACL provides an additional level of authentication.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "4b74b7a5-bb1e-4fca-948c-037ba95fb73b",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-resource-governance#resource-governance-mechanism",
+ "service": "Azure Service Fabric",
"services": [
- "Monitor",
- "WAF"
+ "ACR"
],
"severity": "Medium",
- "text": "Monitor Azure Spring Apps with logs, metrics and tracing. Integrate ASA with application insights and track failures and create workbooks.",
- "waf": "Reliability"
+ "subcategory": "Cluster architecture",
+ "text": "Use resource requests and limits to govern resource usage across the nodes in your cluster. Enforcing resource limits helps ensure that one service doesn't consume too many resources and starve other services.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
- "services": [
- "WAF"
- ],
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "cd9233ba-f3aa-4353-8d2f-7ea4a64160e6",
+ "link": "",
+ "service": "Azure Service Fabric",
+ "services": [],
"severity": "Medium",
- "text": "Set up autoscaling in Spring Cloud Gateway",
- "waf": "Reliability"
+ "subcategory": "Workload architecture",
+ "text": "Encrypt Service Fabric package secret values. Encryption on your secret values provides an additional level of security.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "44b989d4-9f72-42b6-99da-ec2a79f83299",
+ "link": "",
+ "service": "Azure Service Fabric",
"services": [
- "WAF"
+ "AKV"
],
- "severity": "Low",
- "text": "Enable autoscale for the apps with Standard consumption & dedicated plan.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Workload architecture",
+ "text": "Include client certificates in Service Fabric applications. Having your applications use client certificates for authentication provides opportunities for security at both the cluster and workload level.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "28e66ff7-4a77-4b2c-910d-0335f141208a",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-identity-managed-cluster-virtual-machine-scale-sets",
+ "service": "Azure Service Fabric",
"services": [
- "WAF"
+ "Entra"
],
"severity": "Medium",
- "text": "Use Enterprise plan for commercial support of spring boot for mission critical apps. With other tiers you get OSS support.",
- "waf": "Reliability"
+ "subcategory": "Workload architecture",
+ "text": "Authenticate Service Fabric applications to Azure Resources using Managed Identity. Using Managed Identity allow you to securely manage the credentials in your code for authenticating to various services without saving them locally on a developer workstation or in source control.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Apply guidance from the Microsoft cloud security benchmark related to Storage",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
- "services": [
- "Storage",
- "WAF"
- ],
+ "category": "Managed clusters",
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "f16c413c-00a6-43aa-852c-b97292c33a56",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#hosting-untrusted-applications-in-a-service-fabric-cluster",
+ "service": "Azure Service Fabric",
+ "services": [],
"severity": "Medium",
- "text": "Consider the 'Azure security baseline for storage'",
+ "subcategory": "Cluster and workload architectures",
+ "text": "Follow Service Fabric best practices when hosting untrusted applications. Following the best practices provides a security standard to follow.",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "description": "Define a resource group structure for placement of Azure Arc-enabled servers resources",
+ "guid": "585e1112-9bd7-4ba0-82f7-b94ef6e043d2",
"services": [
- "Storage",
- "PrivateLink",
- "WAF"
+ "Arc"
],
"severity": "High",
- "text": "Consider using private endpoints for Azure Storage",
- "waf": "Security"
+ "subcategory": "Capacity Planning",
+ "text": "One or more resource groups is required for onboarding servers into Azure",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Newly created storage accounts are created using the ARM deployment model, so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage accounts with classic deployment model in a subscription",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "guid": "aa359271-8e6e-4205-8725-769e46691e88",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#azure-subscription-and-service-limits",
"services": [
- "Storage",
- "RBAC",
- "Subscriptions",
- "WAF"
+ "Arc",
+ "Entra"
],
"severity": "Medium",
- "text": "Ensure older storage accounts are not using 'classic deployment model'",
- "waf": "Security"
+ "subcategory": "Capacity Planning",
+ "text": "Take Azure Active Directory object limitations into account",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "description": "The following resource providers needs to be registered: Microsoft.HybridCompute, Microsoft.GuestConfiguration, Microsoft.HybridConnectivity",
+ "guid": "deace4bb-1deb-44c6-9fc3-fc14eeaa3692",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#azure-resource-providers",
"services": [
- "Storage",
- "Defender",
- "WAF"
+ "Arc",
+ "Subscriptions"
],
"severity": "High",
- "text": "Enable Microsoft Defender for all of your storage accounts",
- "waf": "Security"
+ "subcategory": "General",
+ "text": "Has the Resource providers required been registered in all subscriptions",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "The soft-delete mechanism allows to recover accidentally deleted blobs.",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "description": "Aligning with an existing or creating an Azure tagging strategy is recommended. Resource tags allow you to quickly locate it, automate operational tasks amd more. ",
+ "guid": "c6d37331-65c7-4acb-b44b-be609d79f2e8",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/resource-tagging/",
"services": [
- "Storage",
- "WAF"
+ "Arc"
],
- "severity": "Medium",
- "text": "Enable 'soft delete' for blobs",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "General",
+ "text": "Has a tagging strategy for Azure Arc-enabled servers been defined",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "description": "Installation of the connected machine agent is supported on most newer Windows and Linux operative systems, review the link to se the latest list",
+ "guid": "7778424c-5167-475c-9fa9-5b96ad88408e",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#supported-operating-systems",
"services": [
- "Storage",
- "WAF"
+ "Arc"
],
- "severity": "Medium",
- "text": "Disable 'soft delete' for blobs",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "General",
+ "text": "What operating systems need to be Azure Arc-enabled",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Soft delete for containers enables you to recover a container after it has been deleted, for example recover from an accidental delete operation.",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "description": "There are software requirements to the agent installation. Some might require a system reboot after installation, review to link",
+ "guid": "372734b8-76ba-428f-8145-901365d38e53",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#software-requirements",
"services": [
- "WAF"
+ "Arc"
],
"severity": "High",
- "text": "Enable 'soft delete' for containers",
- "waf": "Security"
+ "subcategory": "General",
+ "text": "Are required software installed on Windows and Linux servers to support the installation",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "guid": "d44c7c89-19ca-41f6-b521-5ae514ba34d4",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/?products=azure-arc®ions=all",
"services": [
- "Storage",
- "WAF"
+ "Arc"
],
- "severity": "Medium",
- "text": "Disable 'soft delete' for containers",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "General",
+ "text": "Make sure to use a supported Azure region",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "Prevents accidental deletion of a storage account, by forcing the user to first remove the deletion lock, prior to deletion",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Arc Review",
+ "description": "The scope include organization into management groups, subscriptions, and resource groups.",
+ "guid": "f9ccbd86-8266-4abc-a264-f9a19bf39d95",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/organize-inventory-servers#organize-resources-with-built-in-azure-hierarchies",
"services": [
- "Storage",
- "WAF"
+ "Arc",
+ "Subscriptions"
],
- "severity": "High",
- "text": "Enable resource locks on storage accounts",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Organization",
+ "text": "Define the structure for Azure management of resources",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Consider 'legal hold' or 'time-based retention' policies for blobs, so that is is impossible to delete the blob, the container, or the storage account. Please note that 'impossible' actually means 'impossible'; once a storage account contains an immutable blob, the only way to 'get rid' of that storage account is by cancelling the Azure subscription.",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "description": "Define RBAC rules to the servers / resource groups as required for servers management, the 'Azure Connected Machine Resource Administrator' or 'Hybrid Server Resource Administrator' role would be sufficient for management of the Azure Arc-enabled servers resources in Azure",
+ "guid": "9bf39d95-d44c-47c8-a19c-a1f6d5215ae5",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#identity-and-access-control",
"services": [
- "Storage",
- "Subscriptions",
- "AzurePolicy",
- "WAF"
+ "Arc",
+ "RBAC",
+ "Entra"
],
- "severity": "High",
- "text": "Consider immutable blobs",
+ "severity": "Medium",
+ "subcategory": "Access",
+ "text": "Assign RBAC rights to Azure AD user/group access for managing Azure Arc-enabled servers",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "guid": "14ba34d4-585e-4111-89bd-7ba012f7b94e",
+ "link": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-nonaad",
"services": [
- "Storage",
- "WAF"
+ "AKV",
+ "Arc",
+ "Entra"
],
- "severity": "High",
- "text": "Require HTTPS, i.e. disable port 80 on the storage account",
+ "severity": "Low",
+ "subcategory": "Access",
+ "text": "Consider using managed identities for applications to access Azure resources like Key Vault example in link",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "When configuring a custom domain (hostname) on a storage account, check whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your storage account.",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "description": "An Azure subscription must be parented to the same Azure AD tenant",
+ "guid": "35ac9322-23e1-4380-8523-081a94174158",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#azure-subscription-and-service-limits",
"services": [
- "Storage",
- "WAF"
+ "Subscriptions",
+ "Arc",
+ "Entra"
],
"severity": "High",
- "text": "When enforcing HTTPS (disabling HTTP), check that you do not use custom domains (CNAME) for the storage account.",
- "waf": "Security"
+ "subcategory": "Requirements",
+ "text": "An Azure Active Directory tenant must be available with at least one subscription",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Requiring HTTPS when a client uses a SAS token to access blob data helps to minimize the risk of credential loss.",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "description": "Users (or SPs) need the 'Azure Connected Machine Onboarding' or 'Contributor' role to onboarding of servers",
+ "guid": "33ee7ad6-c6d3-4733-865c-7acbe44bbe60",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#required-permissions",
"services": [
- "Storage",
- "WAF"
+ "Arc",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "text": "Limit shared access signature (SAS) tokens to HTTPS connections only",
+ "subcategory": "Requirements",
+ "text": "Define which users (AAD user/groups) has access to onboard Azure Arc-enabled servers",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "AAD tokens should be favored over shared access signatures, wherever possible",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "description": "Ensure to only add the rights to users or groups that is required to perform their role",
+ "guid": "9d79f2e8-7778-4424-a516-775c6fa95b96",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/onboard-service-principal#create-a-service-principal-for-onboarding-at-scale",
"services": [
- "Storage",
- "Entra",
- "WAF"
+ "Arc",
+ "RBAC",
+ "Entra"
],
- "severity": "High",
- "text": "Use Azure Active Directory (Azure AD) tokens for blob access",
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "Use the principle of least privileged",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "When assigning a role to a user, group, or application, grant that security principal only those permissions that are necessary for them to perform their tasks. Limiting access to resources helps prevent both unintentional and malicious misuse of your data.",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "description": "A service principle with the 'Azure Connected Machine Onboarding' role is required for at-scale onboarding of servers, consider more SP's if onboarding is done by different teams/decentralized management",
+ "guid": "ad88408e-3727-434b-a76b-a28f21459013",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/onboard-service-principal#create-a-service-principal-for-onboarding-at-scale",
"services": [
+ "Arc",
"RBAC",
- "WAF"
+ "Entra"
],
"severity": "Medium",
- "text": "Least privilege in IaM permissions",
+ "subcategory": "Security",
+ "text": "How many Service Principals are needed for onboarding Arc-enabled servers into Azure",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. A user delegation SAS is analogous to a service SAS in terms of its scope and function, but offers security benefits over the service SAS. ",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
+ "category": "Identity",
+ "checklist": "Azure Arc Review",
+ "description": "Consider assigning the rights for the 'Azure Connected Machine Onboarding' role at the resource group level, to control the resource creation",
+ "guid": "65d38e53-f9cc-4bd8-9826-6abca264f9a1",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#required-permissions",
"services": [
- "Storage",
- "Entra",
- "WAF"
+ "Arc",
+ "RBAC",
+ "Entra"
],
- "severity": "High",
- "text": "When using SAS, prefer 'user delegation SAS' over storage-account-key based SAS.",
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "Limit the rights to onboard Azure Arc-enabled servers to the desired resource groups",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on AAD authentication makes it easier to tie storage access to a user. ",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "description": "Plan for agent deployments at scale",
+ "guid": "6ee79d6b-5c2a-4364-a4b6-9bad38aad53c",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/plan-at-scale-deployment",
"services": [
- "Storage",
- "Entra",
- "AKV",
- "WAF",
- "Monitor"
+ "Monitor",
+ "Arc"
],
- "severity": "High",
- "text": "Consider disabling storage account keys, so that only AAD access (and user delegation SAS) is supported.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Define a strategy for agent provisioning",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Use Activity Log data to identify 'when', 'who', 'what' and 'how' the security of your storage account is being viewed or changed (i.e. storage account keys, access policies, etc.).",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "description": "Use Microsoft Update to ensure that the connected machine agent is always up-to-date",
+ "guid": "c78e1d76-6673-457c-9496-74c5ed85b859",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-agent#upgrade-the-agent",
"services": [
- "Storage",
- "AKV",
- "WAF",
"Monitor",
- "AzurePolicy"
+ "Arc"
],
"severity": "High",
- "text": "Consider using Azure Monitor to audit control plane operations on the storage account",
- "waf": "Security"
+ "subcategory": "Management",
+ "text": "Define a strategy for agent updates",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "A key expiration policy enables you to set a reminder for the rotation of the account access keys. The reminder is displayed if the specified interval has elapsed and the keys have not yet been rotated.",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "description": "Recommendation is to use Azure Policy, or another automation tool like Azure DevOps - important is to avoid configuration drift.",
+ "guid": "c7733be2-a1a2-47b7-95a9-1be1f388ff39",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-vm-extensions",
"services": [
- "Storage",
- "AKV",
- "WAF",
+ "Monitor",
+ "Arc",
"AzurePolicy"
],
"severity": "Medium",
- "text": "When using storage account keys, consider enabling a 'key expiration policy'",
- "waf": "Security"
- },
- {
- "checklist": "WAF checklist",
- "description": "A SAS expiration policy specifies a recommended interval over which the SAS is valid. SAS expiration policies apply to a service SAS or an account SAS. When a user generates service SAS or an account SAS with a validity interval that is larger than the recommended interval, they'll see a warning.",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
- "services": [
- "AzurePolicy",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Consider configuring an SAS expiration policy",
- "waf": "Security"
+ "subcategory": "Management",
+ "text": "Define a strategy for extension installation",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. ",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "description": "Use automatic upgrades where available and define an update strategy for all extensions not supporting automatic upgrades.",
+ "guid": "4c2bd463-cbbb-4c86-a195-abb91a4ed90d",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-automatic-vm-extension-upgrade?tabs=azure-portal",
"services": [
- "Storage",
- "AKV",
- "AzurePolicy",
- "WAF"
+ "Monitor",
+ "Arc"
],
- "severity": "Medium",
- "text": "Consider linking SAS to a stored access policy",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Management",
+ "text": "Define a strategy for extension updates",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "description": "Azure Automanage help implement Microsoft best-practices for servers management in Azure",
+ "guid": "7a927c39-74d1-4102-aac6-aae01e6a84de",
+ "link": "https://learn.microsoft.com/azure/automanage/automanage-arc",
"services": [
- "Storage",
- "AKV",
- "WAF"
+ "Monitor",
+ "Arc"
],
"severity": "Medium",
- "text": "Consider configuring your application's source code repository to detect checked-in connection strings and storage account keys.",
- "waf": "Security"
+ "subcategory": "Management",
+ "text": "Consider using Azure Automanage to control settings and avoid configuration drift on servers",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Ideally, your application should be using a managed identity to authenticate to Azure Storage. If that is not possible, consider having the storage credential (connection string, storage account key, SAS, service principal credential) in Azure KeyVault or an equivalent service.",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "guid": "37b6b780-cbaf-4e6c-9658-9d457a927c39",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/plan-at-scale-deployment#phase-3-manage-and-operate",
"services": [
- "Storage",
- "Entra",
- "WAF"
+ "Monitor",
+ "Arc"
],
"severity": "High",
- "text": "Consider storing connection strings in Azure KeyVault (in scenarios where managed identities are not possible)",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Monitor for unresponsive agents",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Use near-term expiration times on an ad hoc SAS service SAS or account SAS. In this way, even if a SAS is compromised, it's valid only for a short time. This practice is especially important if you cannot reference a stored access policy. Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "guid": "74d1102c-ac6a-4ae0-8e6a-84de5df47d2d",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/log-analytics-agent#data-collected",
"services": [
- "Storage",
- "AzurePolicy",
- "WAF"
+ "Monitor",
+ "Arc"
],
- "severity": "High",
- "text": "Strive for short validity periods for ad-hoc SAS",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Design a monitoring strategy to send metrics and logs to an Log Analytics workspace",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "When creating a SAS, be as specific and restrictive as possible. Prefer a SAS for a single resource and operation over a SAS which gives much broader access.",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "guid": "92881b1c-d5d1-4e54-a296-59e3958fd782",
+ "link": "https://learn.microsoft.com/azure/service-health/resource-health-alert-monitor-guide",
"services": [
- "WAF"
+ "Monitor",
+ "Arc"
],
"severity": "Medium",
- "text": "Apply a narrow scope to a SAS",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Use notification in Activity logs to receive notification on unexpected changes to the resources",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "A SAS can include parameters on which client IP addresses or address ranges are authorized to request a resource using the SAS. ",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "guid": "89c93555-6d02-4bfe-9564-b0d834a34872",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/learn/tutorial-enable-vm-insights",
"services": [
- "WAF"
+ "Monitor",
+ "Arc"
],
"severity": "Medium",
- "text": "Consider scoping SAS to a specific client IP address, wherever possible",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Use Azure Monitor for compliance and operational monitoring",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "A SAS cannot constrain how much data a client uploads; given the pricing model of amount of storage over time, it might make sense to validate whether clients uploaded maliciously large contents.",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "guid": "5df47d2d-9288-41b1-ad5d-1e54a29659e3",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/plan-at-scale-deployment#phase-3-manage-and-operate",
"services": [
- "Storage",
- "WAF"
+ "Monitor",
+ "Arc"
+ ],
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Create an alert to identify Azure Arc-enabled servers that aren't using the latest version of the Azure connected machine agent",
+ "waf": "Operations"
+ },
+ {
+ "category": "Management and Monitoring",
+ "checklist": "Azure Arc Review",
+ "description": "Use Update Management in Azure Automation or the new Update Management Center (preview) functionality to ensure update management of servers",
+ "guid": "ae2cc84c-37b6-4b78-8cba-fe6c46589d45",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/hybrid/server/best-practices/arc-update-management",
+ "services": [
+ "Monitor",
+ "Arc"
],
"severity": "Low",
- "text": "Consider checking uploaded data, after clients used a SAS to upload a file. ",
- "waf": "Security"
+ "subcategory": "Security",
+ "text": "Use Azure Arc-enabled servers to control software updates deployments to servers",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "When accessing blob storage via SFTP using a 'local user account', the 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive than SFTP access. Unfortunately, as of early 2023, local users are the only form of identity management that is currently supported for the SFTP endpoint",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "The Connected Machine Agent will by default communicate with Azure services over public Internet connectivity using HTTPS (TCP port 443)",
+ "guid": "f6e043d2-aa35-4927-88e6-e2050725769e",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/network-requirements?tabs=azure-cloud#details",
"services": [
- "Storage",
- "Entra",
- "RBAC",
- "WAF"
+ "Arc"
],
"severity": "High",
- "text": "SFTP: Limit the amount of 'local users' for SFTP access, and audit whether access is needed over time.",
- "waf": "Security"
+ "subcategory": "Networking",
+ "text": "Define a connectivity method from the server to Azure",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "The Connected Machine Agent can be configured to use a proxy server, it is recommended to define the proxy server address using 'azcmagent config set proxy.url' command on the local system.",
+ "guid": "46691e88-35ac-4932-823e-13800523081a",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-agent#update-or-remove-proxy-settings",
"services": [
- "WAF"
+ "Arc"
],
"severity": "Medium",
- "text": "SFTP: The SFTP endpoint does not support POSIX-like ACLs.",
- "waf": "Security"
+ "subcategory": "Networking",
+ "text": "Is a proxy server a required for communication over the Public Internet",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature that enables web apps from a different domain to loosen the same-origin policy. When enabling CORS, keep the CorsRules to the least privilege.",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "The Connected Machine Agent can use a Private Link for communication with Azure Services over an existing ExpressRoute or VPN connection",
+ "guid": "94174158-33ee-47ad-9c6d-3733165c7acb",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/private-link-security",
"services": [
- "Storage",
- "AzurePolicy",
- "WAF"
+ "ExpressRoute",
+ "Arc",
+ "VPN",
+ "PrivateLink"
+ ],
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "Is a private (not public Internet) connection required?",
+ "waf": "Operations"
+ },
+ {
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "Firewall configuration might be required for the agent to communicate with Azure, use the link to see ServiceTags and/or URL's required",
+ "guid": "e44bbe60-9d79-4f2e-a777-8424c516775c",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/network-requirements?tabs=azure-cloud#service-tags",
+ "services": [
+ "Arc"
],
"severity": "High",
- "text": "Avoid overly broad CORS policies",
+ "subcategory": "Networking",
+ "text": "Will Firewall configurations be needed in order to ensure communication with Azure Services?",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Data at rest is always encrypted server-side, and in addition might be encrypted client-side as well. Server-side encryption might happen using a platform-managed key (default) or customer-managed key. Client-side encryption might happen by either having the client supply an encryption/decryption key on a per-blob basis to Azure storage, or by completely handling encryption on the client-side. thus not relying on Azure Storage at all for confidentiality guarantees.",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "Use available automation tool for the system in question to regularly update the Azure endpoints",
+ "guid": "6fa95b96-ad88-4408-b372-734b876ba28f",
+ "link": "https://www.microsoft.com/download/details.aspx?id=56519",
"services": [
- "Storage",
- "WAF"
+ "Arc"
],
- "severity": "High",
- "text": "Determine how data at rest should be encrypted. Understand the thread model for data.",
+ "severity": "Low",
+ "subcategory": "Networking",
+ "text": "Can the Firewall or Proxy rules be automated updated if Service Tags or IP addresses change",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "Configure Servers to use Transport Layer Security (TLS) version 1.2",
+ "guid": "21459013-65d3-48e5-9f9c-cbd868266abc",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/network-requirements?tabs=azure-cloud#transport-layer-security-12-protocol",
"services": [
- "WAF"
+ "Arc"
],
- "severity": "Medium",
- "text": "Determine which/if platform encryption should be used.",
+ "severity": "High",
+ "subcategory": "Networking",
+ "text": "Always use secure communication for Azure where possible",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
+ "category": "Networking",
+ "checklist": "Azure Arc Review",
+ "description": "All extensions (like log analytics etc.) have separate network requirements, be sure to include all in the network design.",
+ "guid": "a264f9a1-9bf3-49d9-9d44-c7c8919ca1f6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/hybrid/arc-enabled-servers/eslz-arc-servers-connectivity#define-extensions-connectivity-method",
"services": [
- "WAF"
+ "Monitor",
+ "Arc",
+ "PrivateLink"
],
- "severity": "Medium",
- "text": "Determine which/if client-side encryption should be used.",
+ "severity": "Low",
+ "subcategory": "Networking",
+ "text": "Include communication for Azure Arc-enabled Servers extensions in the design (firewall/proxy/private link)",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Leverage Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) to find storage accounts which allow anonymous blob access.",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "ac6aae01-e6a8-44de-9df4-7d2d92881b1c",
+ "link": "https://learn.microsoft.com/azure/governance/policy/",
"services": [
- "Storage",
- "WAF"
+ "Arc",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Consider whether public blob access is needed, or whether it can be disabled for certain storage accounts. ",
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Use Azure Policy to implement a governance model for hybrid connected servers",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
- "service": "Azure Storage",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "5c2a3649-4b69-4bad-98aa-d53cc78e1d76",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"services": [
- "Storage",
- "WAF"
+ "Arc"
],
- "severity": "High",
- "text": "Leverage a storagev2 account type for better performance and reliability",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Consider using Machine configurations for in guest OS configurations",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Azure Storage",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "667357c4-4967-44c5-bd85-b859c7733be2",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/machine-configuration-create",
"services": [
- "Storage",
- "WAF"
+ "Arc",
+ "AzurePolicy"
],
- "severity": "High",
- "text": "Leverage GRS, ZRS or GZRS storage for the highest availability",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Evaluate the need for custom Guest Configuration policies",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
- "service": "Azure Storage",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "49674c5e-d85b-4859-a773-3be2a1a27b77",
+ "link": "https://learn.microsoft.com/azure/automation/change-tracking/overview",
"services": [
- "WAF"
+ "Monitor",
+ "Arc"
],
"severity": "Medium",
- "text": "For write operation after failover, use customer-Managed Failover ",
- "waf": "Reliability"
+ "subcategory": "Monitoring",
+ "text": "Consider using change tracking for tracking changes made on the servers",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
- "service": "Azure Storage",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "d5d1e54a-2965-49e3-a58f-d78289c93555",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/data-residency",
"services": [
- "WAF"
+ "Arc"
],
"severity": "Medium",
- "text": "Understand Microsoft-Managed Failover details",
- "waf": "Reliability"
+ "subcategory": "Requirements",
+ "text": "Make sure to use an Azure region for storing the metadata approved by the organization",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
- "service": "Azure Storage",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "195abb91-a4ed-490d-ae2c-c84c37b6b780",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/basic-concepts",
"services": [
- "WAF"
+ "AKV",
+ "Arc"
],
"severity": "Medium",
- "text": "Enable Soft Delete",
- "waf": "Reliability"
+ "subcategory": "Secrets",
+ "text": "Use Azure Key Vault for certificate management on servers",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "description": "Consider using a short-lived Azure AD service principal client secrets.",
+ "guid": "6d02bfe4-564b-40d8-94a3-48726ee79d6b",
+ "link": "https://learn.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal#option-2-create-a-new-application-secret",
"services": [
- "WAF"
+ "AKV",
+ "Arc",
+ "Storage",
+ "Entra"
],
"severity": "High",
- "text": "Enable 2 replicas to have 99.9% availability for read operations",
- "waf": "Reliability"
+ "subcategory": "Secrets",
+ "text": "What is the acceptable life time of the secret used by SP's",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "description": "A private key is saved to the disk, ensure this is protected using disk encryption",
+ "guid": "a1a27b77-5a91-4be1-b388-ff394c2bd463",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#using-disk-encryption",
"services": [
- "WAF"
+ "AKV",
+ "Arc"
],
"severity": "Medium",
- "text": "Enable 3 replicas to have 99.9% availability for read/write operations",
- "waf": "Reliability"
+ "subcategory": "Secrets",
+ "text": "Secure the public key for Azure Arc-enabled Servers",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "description": "Local administrator is required to install the Connected Machine Agent on Windows and Linux systems",
+ "guid": "29659e39-58fd-4782-a9c9-35556d02bfe4",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/onboard-portal#install-manually",
"services": [
- "WAF"
+ "Arc"
],
"severity": "High",
- "text": "Leverage Availability Zones by enabling read and/or write replicas",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Ensure there is local administrator access for executing the agent installation",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "description": "Members of the local administrator group on Windows and users with root privileges on Linux, have permissions to manage the agent via command line.",
+ "guid": "564b0d83-4a34-4872-9ee7-9d6b5c2a3649",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#agent-security-and-permissions",
"services": [
- "ACR",
- "WAF"
+ "Arc"
],
"severity": "Medium",
- "text": "For regional redudancy, Manually create services in 2 or more regions for Search as it doesn't provide an automated method of replicating search indexes across geographic regions",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Limit the amount of users with local administrator rights to the servers",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "4b69bad3-8aad-453c-a78e-1d76667357c4",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/managed-identity-authentication",
"services": [
- "ACR",
- "WAF"
+ "Arc",
+ "Entra"
],
"severity": "Medium",
- "text": "To synchronize data across multiple services either Use indexers for updating content on multiple services or Use REST APIs for pushing content updates on multiple services",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Consider using and restricting access to managed identities for applications.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "description": "Use Defender for Endpoint or another AV and EDR solution to protect endpoints",
+ "guid": "5a91be1f-388f-4f39-9c2b-d463cbbbc868",
+ "link": "https://learn.microsoft.com/azure/security-center/security-center-get-started",
"services": [
- "TrafficManager",
- "WAF"
+ "Arc",
+ "Defender"
],
"severity": "Medium",
- "text": "Use Azure Traffic Manager to coordinate requests",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Enable Defender for Servers for all servers to secure hybrid workloads from threats",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "cbafe6c4-6589-4d45-9a92-7c3974d1102c",
"services": [
- "Storage",
- "Backup",
- "WAF"
+ "Arc"
],
- "severity": "High",
- "text": "Backup and Restore an Azure Cognitive Search Index. Use this sample code to back up index definition and snapshot to a series of Json files",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "Define controls to detect security misconfigurations and track compliance",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "21c30d25-ffb7-4f6a-b9ea-b3fec328f787",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-cog_svcs_v1.docx",
- "service": "Cognitive Services",
+ "category": "Security, Governance and Compliance",
+ "checklist": "Azure Arc Review",
+ "guid": "cbbbc868-195a-4bb9-8a4e-d90dae2cc84c",
+ "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#extension-allowlists-and-blocklists",
"services": [
- "WAF"
+ "Arc"
],
"severity": "Medium",
- "text": "Leverage FTA HandBook for Cognitive Services",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Use allow- or block-lists to control what extensions can be installed on the Azure Arc-enabled servers",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "78c34698-16b2-4763-aefe-1b9b599de0d5",
- "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
- "service": "Cognitive Services",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "d7e47431-76c8-4bdb-b55b-ce619e8a03f9",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-create-service-principal?pivots=aro-azurecli",
"services": [
- "Backup",
- "WAF"
+ "Entra",
+ "RBAC"
],
- "severity": "Medium",
- "text": "Backup Your Prompts",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Create a service principal and its role assignments before creating the ARO clusters.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "750ab2ab-039d-4a6d-95d7-c892adb107d5",
- "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
- "service": "Cognitive Services",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "7879424d-6267-486d-90b9-6c97be985190",
+ "link": "https://learn.microsoft.com/azure/openshift/configure-azure-ad-ui",
"services": [
- "ASR",
- "WAF"
+ "Entra"
],
"severity": "High",
- "text": "Business Continuity and Disaster Recovery (BCDR) considerations with Azure OpenAI Service",
- "waf": "Reliability"
+ "subcategory": "Identity",
+ "text": "Use AAD to authenticate users in your ARO cluster.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "325af625-ca44-4e46-a5e2-223ace8bb123",
- "link": "https://github.com/abacaj/chatgpt-backup#backup-your-chatgpt-conversations",
- "service": "Cognitive Services",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "adfec5f9-a82d-46e9-a8d1-5a0c7fed5d15",
+ "link": "https://docs.openshift.com/container-platform/4.14/authentication/remove-kubeadmin.html",
"services": [
- "Backup",
- "WAF"
+ "Entra"
],
"severity": "Medium",
- "text": "Backup Your ChatGPT conversations",
- "waf": "Reliability"
+ "subcategory": "Identity",
+ "text": "When using AAD authentication, remove kubeadmin user from the cluster.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "07ca5f17-f154-4e3a-a369-2829e7e31618",
- "link": "https://learn.microsoft.com/azure/ai-services/speech-service/how-to-custom-speech-continuous-integration-continuous-deployment",
- "service": "Cognitive Services",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "483835c9-86bb-4291-8155-a11475e39f54",
+ "link": "https://docs.openshift.com/container-platform/4.13/applications/projects/working-with-projects.html",
"services": [
- "WAF"
+ "Entra",
+ "RBAC"
],
- "severity": "Medium",
- "text": "CI/CD for custom speech",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Define OpenShift projects to restrict RBAC privilege and isolate workloads in your cluster.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "3687a046-7a1f-4893-9bda-43324f248116",
- "link": "https://learn.microsoft.com/azure/ai-services/qnamaker/tutorials/export-knowledge-base",
- "service": "Cognitive Services",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "0acccd97-9376-4bcd-a375-0ab2ab039da6",
+ "link": "https://docs.openshift.com/container-platform/4.13/authentication/using-rbac.html",
"services": [
- "WAF"
+ "Entra",
+ "RBAC"
],
- "severity": "Low",
- "text": "Move a knowledge base using export-import",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Define the required RBAC roles in OpenShift are scoped to either a project or a cluster.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "af416482-663c-4ed6-b195-b44c7068e09c",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support",
- "service": "Container Apps",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "d54d7c89-29db-4107-b532-5ae625ca44e4",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"services": [
- "WAF"
+ "AKV",
+ "Entra"
],
- "severity": "High",
- "text": "Leverage Availability Zones if regionally applicable",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Minimize the number of users who have administrator rights and secrets access.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "95bc80ec-6499-4d14-a7d2-7d296b1d8abc",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment",
- "service": "Container Apps",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "685e2223-ace8-4bb1-8307-ca5f16f154e3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"services": [
- "WAF"
+ "Entra",
+ "RBAC"
],
- "severity": "High",
- "text": "Use more than one replica and enable Zone Redundancy.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Use Privileged Identity Management in AAD for ARO users with privileged roles.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ccaa4fc2-fdbc-4432-8bb7-f7e6469e4dc3",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
- "service": "Container Apps",
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "aa369282-9e7e-4216-8836-87af467a1f89",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"services": [
- "WAF"
+ "Firewall",
+ "WAF",
+ "DDoS",
+ "Entra",
+ "Subscriptions",
+ "VNet"
],
- "severity": "High",
- "text": "For cross-region DR, deploy container apps in multiple regions and follow active/active or active/passive application guidance.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "DDoS",
+ "text": "Use Azure DDoS Network/IP Protection to protect the virtual network you use for the ARO cluster unless you use Azure Firewall or WAF in a centralized subscription",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "2ffada86-c031-4933-bf7d-0c45bc4e5919",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
- "service": "Container Apps",
- "services": [
- "TrafficManager",
- "FrontDoor",
- "WAF"
- ],
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "35bda433-24f1-4481-8533-182aa5174269",
+ "link": "https://docs.openshift.com/container-platform/4.13/networking/routes/secured-routes.html",
+ "services": [],
"severity": "High",
- "text": "Use Front Door or Traffic Manager to route traffic to the closest region",
- "waf": "Reliability"
+ "subcategory": "Encryption",
+ "text": "All web applications you configure to use an ingress should use TLS encryption and shouldn't allow access over unencrypted HTTP.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "43e52f47-22d9-428c-8b1c-d521e54a29a9",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foundations-playbooks-CosmosDB_v1.docx",
- "service": "CosmosDB",
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "44008ae7-d7e4-4743-876c-8bdbf55bce61",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"services": [
- "WAF"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "FTA Resiliency Playbook",
- "waf": "Reliability"
+ "subcategory": "Internet",
+ "text": "Use Azure Front Door with WAF to securely publish ARO applications to the internet, especially in multi-region environments.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "de39ac0e-7c28-4dc9-9565-7202bff4564b",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
- "service": "CosmosDB",
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "9e8a03f9-7879-4424-b626-786d60b96c97",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-secure-openshift-with-front-door",
"services": [
- "WAF"
+ "PrivateLink",
+ "FrontDoor"
],
- "severity": "High",
- "text": "Leverage Availablity Zones where regionally applicable and ofcourse if the service offers it",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "If exposing an app on ARO with Azure Front Door, use private link to connect Front Door with the ARO router.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "0d934a34-8b26-43e7-bd60-513a3649906e",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#replica-outages",
- "service": "CosmosDB",
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "be985190-4838-435c-a86b-b2912155a114",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-restrict-egress",
"services": [
- "WAF"
+ "NVA",
+ "AzurePolicy",
+ "Firewall"
],
"severity": "Medium",
- "text": "Run multiple replicas of the database (>1 ) in Prod",
- "waf": "Reliability"
+ "subcategory": "Internet",
+ "text": "If your security policy requires you to inspect all outbound internet traffic that's generated in the ARO cluster, secure egress network traffic by using Azure Firewall or an NVA.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Multi-region writes capability allows you to take advantage of the provisioned throughput for your databases and containers across the globe",
- "guid": "bad38ead-53cc-47de-8d8a-aab3571449ab",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#multiple-write-regions",
- "service": "CosmosDB",
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "75e39f54-0acc-4cd9-9937-6bcda3750ab2",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-create-private-cluster-4x",
"services": [
- "ACR",
- "WAF"
+ "AzurePolicy"
],
- "severity": "Medium",
- "text": "Leverage Multi-Region Writes",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Private access",
+ "text": "If your security policy requires you to use a private IP address for the OpenShift API, deploy a private ARO cluster.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Span Cosmos account across two or more regions with multi-region writes",
- "guid": "8153d89f-89dc-47b3-9be2-b1a27f7b9e91",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
- "service": "CosmosDB",
+ "category": "Network topology and connectivity",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "ab039da6-d54d-47c8-a29d-b107d5325ae6",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
"services": [
"ACR",
- "WAF"
+ "PrivateLink"
],
"severity": "Medium",
- "text": "Distribute your data globally",
- "waf": "Reliability"
+ "subcategory": "Private access",
+ "text": "Use Azure Private Link to secure network connections to managed Azure services, including to Azure Container Registry.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Choose from various consistency levels such as Eventual, Consistent Prefix, Session, Bounded Staleness and strong",
- "guid": "9f8ea848-25ec-4140-bc32-2758e6ee9ac0",
- "link": "https://learn.microsoft.com/azure/cosmos-db/consistency-levels",
- "service": "CosmosDB",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "25ca44e4-685e-4222-9ace-8bb12307ca5f",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-enable-arc-enabled-clusters",
"services": [
- "WAF"
+ "Monitor"
],
"severity": "High",
- "text": "Choose from several well-defined consistency models",
- "waf": "Reliability"
+ "subcategory": "Operations",
+ "text": "Establish a monitoring process using the inbuilt Prometheus, OpenShift Logging or Container Insights integration.",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Maintain business continuity during regional outages. Azure Cosmos DB supports service-managed failover during a regional outage. During a regional outage, Azure Cosmos DB continues to maintain its latency, availability, consistency, and throughput SLAs. To help make sure that your entire application is highly available, Azure Cosmos DB offers a manual failover API to simulate a regional outage. By using this API, you can carry out regular business continuity drills.",
- "guid": "a47e4d1e-bb79-43f9-bf87-69e1032b72fe",
- "link": "https://learn.microsoft.com/azure/cosmos-db/how-to-manage-database-account#automatic-failover",
- "service": "CosmosDB",
- "services": [
- "CosmosDB",
- "WAF"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "16f154e3-aa36-4928-89e7-e216183687af",
+ "link": "https://docs.openshift.com/container-platform/4.13/cicd/pipelines/understanding-openshift-pipelines.html",
+ "services": [],
"severity": "Medium",
- "text": "Enable Service managed failover",
- "waf": "Reliability"
+ "subcategory": "Operations",
+ "text": "Automate the application delivery process through DevOps practices and CI/CD solutions, such as Pipelines/GitOps provided by OpenShift.",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Cosmos DB automatically takes backups of your data at regular intervals. The automatic backups are taken without affecting the performance or availability of the database operations. All the backups are stored separately in a storage service.",
- "guid": "3499c9c1-133d-42f7-a4b1-a5bd06ff1a90",
- "link": "https://learn.microsoft.com/azure/cosmos-db/online-backup-and-restore",
- "service": "CosmosDB",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "467a1f89-35bd-4a43-924f-14811533182a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/design-principles/managed-services",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Operations",
+ "text": "Whenever possible, remove the service state from inside containers. Instead, use an Azure platform as a service (PaaS) that supports multiregion replication.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "1b7da8cf-aa66-4e15-b4d5-ada97dc3e232",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-create-a-storageclass",
"services": [
- "Storage",
- "Backup",
- "WAF",
- "CosmosDB"
+ "Storage"
],
+ "severity": "Low",
+ "subcategory": "Operations",
+ "text": "Use RWX storage with inbuilt Azure Files storage class.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "6bb235c7-05e1-4696-bded-fa8a4c8cdec4",
+ "link": "https://docs.openshift.com/container-platform/4.13/nodes/clusters/nodes-cluster-limit-ranges.html",
+ "services": [],
"severity": "Medium",
- "text": "Enable Automatic Backups",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Reliability"
+ "subcategory": "Performance",
+ "text": "Use pod requests and limits to manage the compute resources within a cluster.",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "This mode is the default backup mode for all existing accounts. In this mode, backup is taken at a periodic interval and the data is restored by creating a request with the support team. In this mode, you configure a backup interval and retention for your account. The maximum retention period extends to a month. The minimum backup interval can be one hour.",
- "guid": "a6eb33f6-005c-4d92-9286-7655672d6121",
- "link": "https://learn.microsoft.com/azure/cosmos-db/periodic-backup-restore-introduction",
- "service": "CosmosDB",
- "services": [
- "Backup",
- "WAF"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "c620c30c-14ee-4b7f-9ae8-d9b3fec228e7",
+ "link": "https://docs.openshift.com/container-platform/4.13/applications/quotas/quotas-setting-per-project.html",
+ "services": [],
"severity": "Medium",
- "text": "Perform Periodic Backups",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Reliability"
+ "subcategory": "Performance",
+ "text": "Enforce resource quotas on projects.",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Continous 7 day retention and 30 day retention backups. Azure Cosmos DB performs data backup in the background without consuming any extra provisioned throughput (RUs) or affecting the performance and availability of your database. Continuous backups are taken in every region where the account exists.",
- "guid": "d43918a8-cd28-49be-b6b1-7cb8245461e1",
- "link": "https://learn.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction",
- "service": "CosmosDB",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "87ab177a-db59-4f6b-a613-334fd09dc234",
+ "link": "https://docs.openshift.com/container-platform/4.13/machine_management/applying-autoscaling.html",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Performance",
+ "text": "Define ClusterAutoScaler and MachineAutoScaler to scale machines when your cluster runs out of resources to support more deployments.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "19db6128-1269-4040-a4ba-4d3e0804276d",
+ "link": "https://learn.microsoft.com/azure/openshift/support-policies-v4#supported-virtual-machine-sizes",
"services": [
- "CosmosDB",
- "WAF",
- "Backup"
+ "VM"
],
- "severity": "Medium",
- "text": "Continous Backup with point-in-time restore in Azure Cosmos DB",
- "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Use virtual machine sizes that are large enough to contain multiple container instances so you get the benefits of increased density, but not so large that your cluster can't handle the workload of a failing node.",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
- "services": [
- "Monitor",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Data collection rules in Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Cost"
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "4b98b15c-8b31-4aa5-aceb-58889135e227",
+ "link": "https://docs.openshift.com/container-platform/4.13/machine_management/deploying-machine-health-checks.html",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Deploy machine health checks to automatically repair damaged machines in a machine pool.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "896d31b6-6c67-4ba5-a119-c08e8f5d587c",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-metric-alerts",
"services": [
- "Backup",
- "WAF"
+ "Monitor"
],
- "severity": "Medium",
- "text": "check backup instances with the underlying datasource not found",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Use an alerting system to provide notifications when things need direct action: Container Insights metric alerts or in-built Alerting UI.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Delete or archive unassociated services (disks, nics, ip addresses etc)",
- "waf": "Cost"
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "7e9ced16-acd1-476e-b9b2-41a998a57ae7",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview#availability-zones",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Ensure that the cluster is created in a region that supports AZs and create a machine set for each AZ.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "7b997e71-1b7d-4a8c-baa6-6e15d4d5ada9",
+ "link": "https://docs.openshift.com/container-platform/4.13/machine_management/creating-infrastructure-machinesets.html",
"services": [
- "Storage",
- "ASR",
- "Backup",
- "WAF"
+ "AKS"
],
- "severity": "Medium",
- "text": "Consider a good balance between site recovery storage and backup for non mission critical applications",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Reliability",
+ "text": "Create infrastructure machine sets to hold infrastructure components. Apply specific Kubernetes labels to these machines and then update the infrastructure components to run on only those machines.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "7dc3e232-6bb2-435c-905e-1696fdedfa8a",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-create-a-backup#create-a-backup-with-velero-to-include-snapshots",
"services": [
- "Monitor",
- "WAF"
+ "Backup"
],
"severity": "Medium",
- "text": "Check spending and savings opportunities among the 40 different log analytics workspaces- use different retention and data collection for nonprod workspaces-create daily cap for awareness and tier sizing - If you do set a daily cap, in addition to creating an alert when the cap is reached,ensure that you also create an alert rule to be notified when some percentage has been reached (90% for example). - consider workspace transformation if possible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
- "waf": "Cost"
+ "subcategory": "Reliability",
+ "text": "Create application backup and plan for restore and include persistent volumes in the backup.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
- "services": [
- "Storage",
- "AzurePolicy",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Enforce a purging log policy and automation (if needed, logs can be moved to cold storage)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
- "waf": "Cost"
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "81c12318-1a64-4174-8583-3fb4ae3c2df7",
+ "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-priority.html",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Reliability",
+ "text": "Use pod priorities, so that in case of limited resources the most critical pods will run.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "43166c3b-cbe0-45bb-b209-d4a0da577784",
+ "link": "https://docs.openshift.com/container-platform/4.13/architecture/admission-plug-ins.html",
"services": [
- "Storage",
- "Backup",
- "WAF"
+ "AzurePolicy"
],
- "severity": "Medium",
- "text": "Check that the disks are really needed, if not: delete. If they are needed, find lower storage tiers or use backup -",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Security",
+ "text": "Regulate cluster functions using admission plug-ins, which are commonly used to enforce security policy, resource limitations, or configuration requirements.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "24d21678-5d2f-4a56-a56a-d48408fe8273",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
"services": [
- "Storage",
- "AzurePolicy",
- "WAF"
+ "ACR"
],
+ "severity": "Low",
+ "subcategory": "Security",
+ "text": "Store your container images in Azure Container Registry and geo-replicate the registry to each region.",
+ "waf": "Security"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "4c486ba2-80dc-4059-8cf7-5ee8e1309ccc",
+ "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-vertical-autoscaler.html",
+ "services": [],
"severity": "Medium",
- "text": "Consider moving unused storage to lower tier, with customized rule - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Optimize the CPU and memory request values, and maximize the efficiency of the cluster resources using vertical pod autoscaler.",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "d579366b-cda2-4750-aa1a-bfe9d55d14c3",
+ "link": "https://docs.openshift.com/container-platform/4.13/applications/application-health.html",
"services": [
- "VM",
- "WAF"
+ "Monitor"
],
"severity": "Medium",
- "text": "Make sure advisor is configured for VM right sizing ",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Add health probes to your pods to monitor application health. Make sure pods contain livenessProbe and readinessProbe. Use Startup probes to determine the point at which the application has started up.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "check by searching the Meter Category Licenses in the Cost analysys",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
- "services": [
- "VM",
- "AzurePolicy",
- "WAF",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "c4929cb1-b3d1-4325-ae12-4ba34d0685ed",
+ "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-autoscaling.html",
+ "services": [],
"severity": "Medium",
- "text": "run the script on all windows VMs https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- consider implementing a policy if windows VMs are created frequently",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Scale pods to meet demand using horizontal pod autoscaler.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "dce9be3b-b0dd-4b3b-95fb-2ec14eeaa359",
+ "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-configuring.html#nodes-pods-pod-distruption-about_nodes-pods-configuring",
"services": [
- "LoadBalancer",
- "WAF"
+ "Cost"
],
"severity": "Medium",
- "text": " this can be also put under AHUB if you already have licenses https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Use disruption budgets to ensure the required number of pod replicas exist to handle expected application load.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "services": [
- "VM",
- "WAF"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "2829e2ed-b217-4367-9aff-6791b4935ada",
+ "link": "https://docs.openshift.com/container-platform/4.13/nodes/scheduling/nodes-scheduler-pod-topology-spread-constraints.html",
+ "services": [],
"severity": "Medium",
- "text": "Consolidate reserved VM families with flexibility option (no more than 4-5 families)",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Use pod topology constraints to automatically schedule pods on nodes throughout the cluster.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "services": [
- "ARS",
- "VM",
- "WAF",
- "Cost"
- ],
+ "category": "Operations Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "fea1dbf3-dd95-4d48-a7c8-91dcb1f7d575",
+ "link": "https://learn.microsoft.com/azure/openshift/intro-openshift#service-level-agreement",
+ "services": [],
"severity": "Medium",
- "text": "Utilize Azure Reserved Instances: This feature allows you to reserve VMs for a period of 1 or 3 years, providing significant cost savings compared to PAYG prices.",
- "waf": "Cost"
+ "subcategory": "Availablity",
+ "text": "Leverage Current ARO SLA - 99.95 into BCDR planning",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Only larger disks can be reserved => 1 TiB -",
- "waf": "Cost"
+ "category": "Operations Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "b95e06e1-58e2-4ea3-a92c-2de6e2065b3a",
+ "link": "https://www.redhat.com/rhdc/managed-files/pa-getting-started-azure-openshift-ebook-f20686-201911-en_0.pdf",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Cluster Design",
+ "text": "Run user workloads on the worker nodes, not the control plane nodes",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
+ "category": "Operations Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "description": "Create infrastructure machine sets to hold infrastructure components. Apply specific Kubernetes labels to these machines and then update the infrastructure components to run on only those machines",
+ "guid": "76af4a69-1e88-439a-ba46-667e13c10567",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-segregate-machinesets",
"services": [
- "WAF"
+ "AKS",
+ "VNet"
],
"severity": "Medium",
- "text": "After the right-sizing optimization",
- "waf": "Cost"
+ "subcategory": "Cluster Design",
+ "text": "Isolate workloads into worker nodes running in individual subnets as needed",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
+ "category": "Operations Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "785c6fe9-6c96-4ad8-a44c-f3b2b38c886b",
+ "link": "https://learn.microsoft.com/azure/openshift/howto-create-a-backup",
"services": [
- "SQL",
- "AzurePolicy",
- "WAF",
- "Cost"
+ "Backup"
],
"severity": "Medium",
- "text": "Check if applicable and enforce policy/change https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
- "waf": "Cost"
+ "subcategory": "Backup",
+ "text": "Backup a cluster state for stateful workload scenarios to a paired region",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
+ "category": "Operations Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "a2c02149-9014-4a5d-9ce5-74dccbd9792a",
+ "link": "https://access.redhat.com/documentation/red_hat_openshift_container_storage/4.4/html/deploying_and_managing_openshift_container_storage_on_microsoft_azure/deploying-openshift-container-storage-on-microsoft-azure_rhocs",
"services": [
- "VM",
- "WAF"
+ "ACR",
+ "Storage"
],
"severity": "Medium",
- "text": "The VM + license part discount (ahub + 3YRI) is around 70% discount",
- "waf": "Cost"
+ "subcategory": "Data Store",
+ "text": "If container storage is required, ensure availability across regions if needed: Using RWX storage with inbuilt Azure Files storage class. Using CSI Drivers for storage provisioning",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "services": [
- "VM",
- "WAF"
- ],
+ "category": "Operations Management",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "6bcca2b4-fea1-4dbf-9dd9-5d48c7c891dc",
+ "link": "https://docs.openshift.com/aro/3/dev_guide/persistent_volumes.html",
+ "services": [],
"severity": "Medium",
- "text": "Consider using a VMSS to match demand rather than flat sizing",
- "waf": "Cost"
+ "subcategory": "Data Store",
+ "text": "Whenever possible, move state out of containers and into external databases that support multi-region replication. Avoid Persistent Volumes",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "WAF checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
+ "category": "Platform Automation",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "42324ece-81c1-4231-a1a6-417415833fb4",
+ "link": "https://docs.openshift.com/container-platform/4.13/applications/deployments/route-based-deployment-strategies.html",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Workload",
+ "text": "Consider blue/green or canary strategies to deploy new releases of application.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Platform Automation",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "ae3c2df7-4316-46c3-acbe-05bbe209d4a0",
+ "link": "https://docs.openshift.com/container-platform/4.13/cicd/gitops/understanding-openshift-gitops.html",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Workload",
+ "text": "Consider using Red Hat OpenShift GitOps. Red Hat OpenShift GitOps uses Argo CD to maintain cluster resources and support application CI/CD.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "da577784-24d2-4167-a5d2-fa56c56ad484",
+ "link": "https://learn.microsoft.com/azure/openshift/support-lifecycle",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Control plane",
+ "text": "Keep your clusters on the latest OpenShift version to avoid potential security or upgrade issues.",
+ "waf": "Security"
+ },
+ {
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "08fe8273-4c48-46ba-880d-c0591cf75ee8",
+ "link": "https://learn.microsoft.com/azure/azure-arc/kubernetes/quickstart-connect-cluster",
"services": [
"AKS",
- "WAF"
+ "Arc"
],
- "severity": "Medium",
- "text": "Use AKS autoscaler to match your clusters usage (make sure the pods requirements match the scaler)",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Control plane",
+ "text": "Connect Azure Red Hat OpenShift clusters to Azure Arc-enabled Kubernetes.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "e1309ccc-d579-4366-acda-2750aa1abfe9",
+ "link": "https://docs.openshift.com/container-platform/4.10/security/encrypting-etcd.html",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Encryption",
+ "text": "For Azure Red Hat OpenShift 4 clusters, etcd data isn't encrypted by default, but it's recommended to enable etcd encryption to provide another layer of data security.",
+ "waf": "Security"
+ },
+ {
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "d55d14c3-c492-49cb-8b3d-1325ae124ba3",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
"services": [
- "WAF"
+ "AKS",
+ "Arc",
+ "Defender"
],
"severity": "Medium",
- "text": "Move recovery points to vault-archive where applicable (Validate)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Cost"
+ "subcategory": "Posture",
+ "text": "Use Microsoft Defender for Containers supported via Arc-enabled Kubernetes to secure clusters, containers, and applications.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "4d0685ed-dce9-4be3-ab0d-db3b55fb2ec1",
+ "link": "https://learn.microsoft.com/azure/azure-arc/kubernetes/tutorial-akv-secrets-provider",
"services": [
- "LoadBalancer",
- "VM",
- "WAF"
+ "AKS",
+ "AKV",
+ "Arc"
],
"severity": "Medium",
- "text": "Consider using Spot VMs with fallback where possible. Consider autotermination of clusters.",
- "waf": "Cost"
+ "subcategory": "Secrets",
+ "text": "For applications that require access to sensitive information, use a service principal and the AKV Secrets Provider with the extension for Arc-enabled Kubernetes clusters.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
- "services": [
- "WAF"
- ],
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "4eeaa359-2829-4e2e-bb21-73676aff6791",
+ "link": "https://learn.microsoft.com/azure/aks/developer-best-practices-pod-security#secure-pod-access-to-resources",
+ "services": [],
"severity": "Medium",
- "text": "Functions - Reuse connections",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Secure pod access to resources. Provide the least number of permissions, and avoid using root or privileged escalation.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "b4935ada-4232-44ec-b81c-123181a64174",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes#install-azure-policy-extension-for-azure-arc-enabled-kubernetes",
"services": [
- "WAF"
+ "Monitor",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Functions - Cache data locally",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "Cost"
+ "subcategory": "Workload",
+ "text": "Monitor and enforce configuration by using the Azure Policy Extension.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "15833fb4-ae3c-42df-9431-66c3bcbe05bb",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
"services": [
- "Storage",
- "WAF"
+ "Defender"
],
- "severity": "Medium",
- "text": "Functions - Cold starts-Use the 'Run from package' functionality. This way, the code is downloaded as a single zip file. This can, for example, result in significant improvements with Javascript functions, which have a lot of node modules.Use language specific tools to reduce the package size, for example, tree shaking Javascript applications.",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Workload",
+ "text": "Scan your images for vulnerabilities with Microsoft Defender or any other image scanning solution.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
+ "category": "Security",
+ "checklist": "Azure Red Hat OpenShift",
+ "guid": "e209d4a0-da57-4778-924d-216785d2fa56",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
"services": [
- "WAF"
+ "ACR",
+ "Subscriptions"
],
+ "severity": "Low",
+ "subcategory": "Workload",
+ "text": "Deploy a dedicated and private instance of Azure Container Registry to each landing zone subscription.",
+ "waf": "Security"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "services": [],
"severity": "Medium",
- "text": "Functions - Keep your functions warm",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Cost"
+ "subcategory": "App delivery",
+ "text": "Perform app delivery within landing zones for both internal-facing (corp) and external-facing apps (online).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "AppGW"
],
"severity": "Medium",
- "text": "When using autoscale with different functions, there might be one driving all the autoscale for all the resources - consider moving it to a separate consumption plan (and consider higher plan for CPU)",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Ensure you are using Application Gateway v2 SKU",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
"services": [
- "WAF"
+ "LoadBalancer"
],
"severity": "Medium",
- "text": "Function apps in a given plan are all scaled together, so any issues with scaling can affect all apps in the plan.",
- "waf": "Cost"
+ "subcategory": "Load Balancer",
+ "text": "Ensure you are using the Standard SKU for your Azure Load Balancers",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
"services": [
- "WAF"
+ "LoadBalancer"
],
"severity": "Medium",
- "text": "Am I billed for 'await time'? This question is typically asked in the context of a C# function that does an async operation and waits for the result, e.g. await Task.Delay(1000) or await client.GetAsync('http://google.com'). The answer is yes - the GB second calculation is based on the start and end time of the function and the memory usage over that period. What actually happens over that time in terms of CPU activity is not factored into the calculation.One exception to this rule is if you are using durable functions. You are not billed for time spent at awaits in orchestrator functions.apply demand shaping techinques where possible (dev environments?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "Cost"
+ "subcategory": "Load Balancer",
+ "text": "Ensure your Load Balancers frontend IP addresses are zone-redundant (unless you require zonal frontends).",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
"services": [
- "EventHubs",
- "FrontDoor",
- "WAF"
+ "AppGW",
+ "VNet"
],
"severity": "Medium",
- "text": "Frontdoor - Turn off the default homepageIn the application settings of your App, set AzureWebJobsDisableHomepage to true. This will return a 204 (No Content) to the PoP so only header data is returned.",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Your Application Gateways v2 should be deployed in subnets with IP prefixes equal or larger than /24",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "description": "Administration of reverse proxies in general and WAF in particular is closer to the application than to networking, so they belong in the same subscription as the app. Centralizing the Application Gateway and WAF in the connectivity subscription might be OK if it is managed by one single team.",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
"services": [
- "FrontDoor",
+ "NVA",
"WAF",
- "AppSvc"
+ "Entra",
+ "AppGW",
+ "Subscriptions",
+ "VNet"
],
"severity": "Medium",
- "text": "Frontdoor - Route to something that returns nothing. Either set up a Function, Function Proxy, or add a route in your WebApp that returns 200 (OK) and sends no or minimal content. The advantage of this is you will be able to log out when it is called.",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound HTTP(S) connections within the landing-zone virtual network and with the apps that they're securing.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "DDoS"
],
"severity": "Medium",
- "text": "Consider archiving tiers for less used data",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
- "services": [
- "WAF"
- ],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
+ "services": [],
"severity": "Medium",
- "text": "Check disk sizes where the size does not match the tier (i.e. A 513 GiB disk will pay a P30 (1TiB) and consider resizing",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Configure autoscaling with a minimum amount of instances of two.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "ACR",
+ "AppGW"
],
"severity": "Medium",
- "text": "Consider using standard SSD rather than Premium or Ultra where possible",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Deploy Application Gateway across Availability Zones",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
"services": [
- "Storage",
- "WAF"
+ "WAF",
+ "AppGW",
+ "AzurePolicy",
+ "FrontDoor"
],
"severity": "Medium",
- "text": "For storage accounts, make sure that the chosen tier is not adding up transaction charges (it might be cheaper to move to the next tier)",
- "waf": "Cost"
+ "subcategory": "App delivery",
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
+ "ammp": true,
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
"services": [
- "ASR",
- "WAF"
+ "TrafficManager"
],
- "severity": "Medium",
- "text": "For ASR, consider using Standard SSD disks if the RPO/RTO and replication throughput allow it",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Traffic Manager",
+ "text": "Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"services": [
- "Storage",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "Medium",
- "text": "Storage accounts: check hot tier and/or GRS necessary",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "App delivery",
+ "text": "If users only need access to internal applications, has Microsoft Entra ID Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"services": [
- "WAF"
+ "Entra"
],
"severity": "Medium",
- "text": "Disks - validate use of Premium SSD disks everywhere: for example, non-prod could swap to Standard SSD or on-demand Premium SSD ",
- "waf": "Cost"
+ "subcategory": "App delivery",
+ "text": "To reduce the number of firewall ports open for incoming connections in your network, consider using Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
+ "ammp": true,
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
"services": [
- "EventHubs",
- "Monitor",
- "Cost",
- "WAF"
+ "LoadBalancer"
],
- "severity": "Medium",
- "text": "Create budgets to manage costs and create alerts that automatically notify stakeholders of spending anomalies and overspending risks.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Load Balancer",
+ "text": "Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT scalability",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
+ "ammp": true,
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
"services": [
- "Storage",
- "Cost",
- "WAF"
+ "WAF",
+ "AppGW"
],
- "severity": "Medium",
- "text": "Export cost data to a storage account for additional data analysis.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "App Gateway",
+ "text": "Enable the Azure Application Gateway WAF bot protection rule set. The bot rules detect good and bad bots.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
+ "ammp": true,
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | extend compliant = (properties['policySettings']['requestBodyCheck'] == 'true' and properties['policySettings']['state'] =~ 'Enabled') | distinct id, name, compliant",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
"services": [
- "Cost",
"WAF",
- "SQL"
+ "AppGW",
+ "AzurePolicy"
],
- "severity": "Medium",
- "text": "Control costs for a dedicated SQL pool by pausing the resource when it is not in use.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "App Gateway",
+ "text": "Ensure if request body inspection feature is enabled in Azure Application Gateway WAF policy.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
+ "ammp": true,
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "WAF",
+ "AppGW"
],
- "severity": "Medium",
- "text": "Enable the serverless Apache Spark automatic pause feature and set your timeout value accordingly.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "App Gateway",
+ "text": "Tune the Azure Application Gateway WAF in detection mode for your workload. Reduce false positive detections.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
+ "ammp": true,
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "WAF",
+ "AppGW",
+ "AzurePolicy"
],
- "severity": "Medium",
- "text": "Create multiple Apache Spark pool definitions of various sizes.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "App Gateway",
+ "text": "Deploy your WAF policy for Application Gateway in 'Prevention' mode.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
"services": [
- "Cost",
- "WAF"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "text": "Purchase Azure Synapse commit units (SCU) for one year with a pre-purchase plan to save on your Azure Synapse Analytics costs.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Add rate limiting to the Azure Application Gateway WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
"services": [
- "VM",
"WAF",
- "Cost"
+ "AppGW"
],
"severity": "Medium",
- "text": "Use Spot VMs for interruptible jobs: These are VMs that can be bid on and purchased at a discounted price, providing a cost-effective solution for non-critical workloads.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Use a high threshold for Azure Application Gateway WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "services": [
- "VM",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Right-sizing all VMs",
- "waf": "Cost"
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "App Gateway",
+ "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "text": "Swap VM sized with normalized and most recent sizes",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Application Gateway WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
"services": [
- "Monitor",
- "VM",
- "WAF"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "text": "right-sizing VMs - start with monitoring usage below 5% and then work up to 40%",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "App Gateway",
+ "text": "Use the latest Azure Application Gateway WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
"services": [
- "VM",
- "WAF"
+ "WAF",
+ "AppGW"
],
"severity": "Medium",
- "text": "Containerizing an application can improve VM density and save money on scaling it",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Cost"
- },
- {
- "checklist": "WAF checklist",
- "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
- "service": "IoT Hub DPS",
- "services": [
- "WAF"
- ],
- "severity": "High",
- "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "Reliability"
+ "subcategory": "App Gateway",
+ "text": "Add diagnostic settings to save your Azure Application Gateway WAF logs.",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "IoT Hub DPS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "WAF",
+ "Sentinel",
+ "AppGW"
],
- "severity": "High",
- "text": "Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Send Azure Application Gateway WAF logs to Microsoft Sentinel.",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "8aed4fbf-0830-4883-899d-222a154af478",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "IoT Hub DPS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "WAF",
+ "AppGW"
],
- "severity": "High",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Define your Azure Application Gateway WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "IoT Hub DPS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
"services": [
"WAF",
- "AppSvc"
+ "AzurePolicy"
],
- "severity": "High",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Use WAF Policies instead of the legacy WAF configuration.",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "IoT Hub DPS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
"services": [
- "WAF"
+ "ExpressRoute",
+ "VNet",
+ "AppGW",
+ "VPN"
],
"severity": "Medium",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
- "waf": "Operations"
+ "subcategory": "App Gateway",
+ "text": "Filter inbound traffic in the backends so that they only accept connections from the Application Gateway subnet, for example with NSGs.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "0e03f5ee-4648-423c-bb86-7239480f9171",
- "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
- "service": "Device Update for IoT Hub",
- "services": [
- "WAF"
- ],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
+ "services": [],
"severity": "High",
- "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled).",
- "waf": "Reliability"
+ "subcategory": "App Gateway",
+ "text": "You should encrypt traffic to the backend servers.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "c0c273bd-00ad-419a-9f2f-fc72fb181e55",
- "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
- "service": "Device Update for IoT Hub",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
"services": [
"WAF"
],
"severity": "High",
- "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the DPS instances from an affected region to the corresponding geo-paired region.",
- "waf": "Reliability"
+ "subcategory": "App Gateway",
+ "text": "You should use a Web Application Firewall.",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "3af8abe6-07eb-4287-b393-6c4abe3702eb",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Device Update for IoT Hub",
- "services": [
- "WAF"
- ],
- "severity": "High",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Redirect HTTP to HTTPS",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "bd91245c-fe32-4e98-a085-794a40f4bfe1",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Device Update for IoT Hub",
- "services": [
- "WAF",
- "AppSvc"
- ],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Use gateway-managed cookies to direct traffic from a user session to the same server for processing",
+ "waf": "Operations"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
+ "services": [],
"severity": "High",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
+ "subcategory": "App Gateway",
+ "text": "Enable connection draining during planned service updates to prevent connection loss to existing members of the backend pool",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Event Hub provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
- "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
- "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
- "service": "Event Hubs",
- "services": [
- "EventHubs",
- "WAF"
- ],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
+ "services": [],
"severity": "Low",
- "text": "Use customer-managed key option in data at rest encryption when required",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Security"
+ "subcategory": "App Gateway",
+ "text": "Create custom error pages to display a personalized user experience",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Event Hubs namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Event Hubs namespace to require that clients send and receive data with a newer version of TLS. If an Event Hubs namespace requires a minimum version of TLS, then any requests made with an older version will fail. ",
- "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
- "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
- "service": "Event Hubs",
- "services": [
- "EventHubs",
- "WAF"
- ],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
+ "services": [],
"severity": "Medium",
- "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "subcategory": "App Gateway",
+ "text": "Edit HTTP requests and response headers for easier routing and information exchange between the client and server",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "When you create an Event Hubs namespace, a policy rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has manage permissions for the entire namespace. It�s recommended that you treat this rule like an administrative root account and don�t use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
- "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
- "service": "Event Hubs",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
"services": [
- "Entra",
- "TrafficManager",
- "RBAC",
- "EventHubs",
- "WAF",
- "AzurePolicy"
+ "FrontDoor"
],
"severity": "Medium",
- "text": "Avoid using root account when it is not necessary",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "waf": "Security"
+ "subcategory": "App Gateway",
+ "text": "Configure Front Door to optimize global web traffic routing and top-tier end-user performance, and reliability through quick global failover",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Managed identities for Azure resources can authorize access to Event Hubs resources using Azure AD credentials from applications running in Azure Virtual Machines (VMs), Function apps, Virtual Machine Scale Sets, and other services. By using managed identities for Azure resources together with Azure AD authentication, you can avoid storing credentials with your applications that run in the cloud. ",
- "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
- "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
- "service": "Event Hubs",
- "services": [
- "Storage",
- "Entra",
- "EventHubs",
- "AKV",
- "WAF",
- "VM"
- ],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
+ "services": [],
"severity": "Medium",
- "text": "When possible, your application should be using a managed identity to authenticate to Azure Event Hub. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "subcategory": "App Gateway",
+ "text": "Use transport layer load balancing",
+ "waf": "Performance"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Configure routing based on host or domain name for multiple web applications on a single gateway",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "When creating permissions, provide fine-grained control over a client's access to Azure Event Hub. Permissions in Azure Event Hub can and should be scoped to the individual resource level e.g. consumer group, event hub entity, event hub namespaces, etc.",
- "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
- "service": "Event Hubs",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
"services": [
- "EventHubs",
- "RBAC",
- "WAF"
+ "Entra"
],
- "severity": "High",
- "text": "Use least privilege data plane RBAC",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "severity": "Medium",
+ "subcategory": "App Gateway",
+ "text": "Centralize SSL certificate management to reduce encryption and decryption overhead from a backend server farm",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Event Hub resource logs include operational logs, virtual network and Kafka logs. Runtime audit logs capture aggregated diagnostic information for all data plane access operations (such as send or receive events) in Event Hubs.",
- "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
- "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
- "service": "Event Hubs",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
"services": [
- "EventHubs",
- "VNet",
- "Monitor",
- "WAF"
+ "AppGW"
],
- "severity": "Medium",
- "text": "Enable logging for security investigation. Use Azure Monitor to captured metrics and logs such as resource logs, runtime audit logs and Kafka logs",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "severity": "Low",
+ "subcategory": "App Gateway",
+ "text": "Use Application Gateway for native support for WebSocket and HTTP/2 protocols",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Event Hub by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Event Hub traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
- "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
- "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
- "service": "Event Hubs",
+ "category": "Operations Management",
+ "checklist": "PostgreSQL Review Checklist",
+ "guid": "65285269-441c-44bf-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview",
+ "service": "PostgreSQL",
"services": [
- "EventHubs",
- "VNet",
- "PrivateLink",
- "WAF"
+ "SQL"
],
"severity": "Medium",
- "text": "Consider using private endpoints to access Azure Event Hub and disable public network access when applicable.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "Leverage Flexible Server",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "With IP firewall, you can restrict public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
- "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
- "service": "Event Hubs",
+ "category": "Operations Management",
+ "checklist": "PostgreSQL Review Checklist",
+ "guid": "016ccf31-ae5a-41eb-9888-9535e227896d",
+ "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview#architecture-and-high-availability",
+ "service": "PostgreSQL",
"services": [
- "EventHubs",
- "WAF"
+ "SQL"
],
- "severity": "Medium",
- "text": "Consider only allowing access to Azure Event Hub namespace from specific IP addresses or ranges",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Leverage Availability Zones where regionally applicable",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
- "service": "Event Hubs",
+ "category": "Operations Management",
+ "checklist": "PostgreSQL Review Checklist",
+ "guid": "31b67c67-be59-4519-8083-845d587cb391",
+ "link": "https://learn.microsoft.com/azure/postgresql/single-server/concepts-business-continuity#cross-region-read-replicas",
+ "service": "PostgreSQL",
"services": [
- "WAF"
+ "SQL"
],
"severity": "Medium",
- "text": "Leverage FTA Resillency HandBook",
+ "subcategory": "Best Practices",
+ "text": "Leverage cross-region read replicas for BCDR",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": " This will be turned on automatically for a new EH namespace created from the portal with Premium, Dedicated, or Standard SKUs in a zone-enabled region. Both the EH metadata and the event data itself are replicated across zones",
- "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
- "service": "Event Hubs",
- "services": [
- "EventHubs",
- "ACR",
- "WAF"
- ],
- "severity": "High",
- "text": "Leverage Availability Zones if regionally applicable",
+ "category": "Operations Management",
+ "checklist": "Cognitive Services Review Checklist",
+ "guid": "21c30d25-ffb7-4f6a-b9ea-b3fec328f787",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-cog_svcs_v1.docx",
+ "service": "Cognitive Services",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Best Practice",
+ "text": "Leverage FTA HandBook for Cognitive Services",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
- "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
- "service": "Event Hubs",
+ "category": "Operations Management",
+ "checklist": "Cognitive Services Review Checklist",
+ "guid": "78c34698-16b2-4763-aefe-1b9b599de0d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Cognitive Services",
"services": [
- "WAF"
+ "Backup"
],
"severity": "Medium",
- "text": "Use the Premium or Dedicated SKUs for predicable performance",
+ "subcategory": "Backup",
+ "text": "Backup Your Prompts",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "The built-in geo-disaster recovery feature, when enabled, ensures that the entire configuration of anamespace (Event Hubs, Consumer Groups and settings) is continuously replicated from a primary namespace to a secondary namespace, and it allows a once-only failover move from the primary to the secondary at any time. Active/Passive feature is designed to make it easier to recover from and abandon a failed Azure region without having to change application configurations",
- "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
- "service": "Event Hubs",
+ "category": "Operations Management",
+ "checklist": "Cognitive Services Review Checklist",
+ "guid": "750ab2ab-039d-4a6d-95d7-c892adb107d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Cognitive Services",
"services": [
- "ASR",
- "WAF",
- "EventHubs"
+ "Backup",
+ "ASR"
],
"severity": "High",
- "text": "Plan for Geo Disaster Recovery using Active Passive configuration",
+ "subcategory": "Backup",
+ "text": "Business Continuity and Disaster Recovery (BCDR) considerations with Azure OpenAI Service",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "Should be used for DR configurations where an outage or loss of event data in the downed region cannot be tolerated. For these cases, follow the replication guidance and do not use the built-in geo-disaster recovery capability (active/passive). With Active/Active, Maintain multiple Event Hubs in different regions and namespaces, and events will be replicated between the hubs",
- "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
- "service": "Event Hubs",
+ "category": "Operations Management",
+ "checklist": "Cognitive Services Review Checklist",
+ "guid": "325af625-ca44-4e46-a5e2-223ace8bb123",
+ "link": "https://github.com/abacaj/chatgpt-backup#backup-your-chatgpt-conversations",
+ "service": "Cognitive Services",
"services": [
- "EventHubs",
- "ASR",
- "WAF"
+ "Backup"
],
"severity": "Medium",
- "text": "For Business Critical Applications, use Active Active configuration",
+ "subcategory": "Backup",
+ "text": "Backup Your ChatGPT conversations",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
- "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
- "service": "Event Hubs",
- "services": [
- "EventHubs",
- "WAF"
- ],
+ "category": "Operations Management",
+ "checklist": "Cognitive Services Review Checklist",
+ "guid": "07ca5f17-f154-4e3a-a369-2829e7e31618",
+ "link": "https://learn.microsoft.com/azure/ai-services/speech-service/how-to-custom-speech-continuous-integration-continuous-deployment",
+ "service": "Cognitive Services",
+ "services": [],
"severity": "Medium",
- "text": "Design Resilient Event Hubs",
+ "subcategory": "DevOps",
+ "text": "CI/CD for custom speech",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
- "services": [
- "Entra",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Use long-live revocable token, cache your token and acquire your silently using Microsoft Identity Library",
+ "category": "Operations Management",
+ "checklist": "Cognitive Services Review Checklist",
+ "guid": "3687a046-7a1f-4893-9bda-43324f248116",
+ "link": "https://learn.microsoft.com/azure/ai-services/qnamaker/tutorials/export-knowledge-base",
+ "service": "Cognitive Services",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "QnA Service",
+ "text": "Move a knowledge base using export-import",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Make sure that your sign-in user flows are backed up and resilient. Make sure that the code that you use to sign-in your users are backed up and recoverable. Resilient interfaces with external processes",
+ "category": "BC and DR",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Custom brand assets should be hosted on a CDN",
- "waf": "Performance"
+ "category": "BC and DR",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Protect logic apps from region failures with zone redundancy and availability zones",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
- "services": [
- "WAF"
- ],
- "severity": "Low",
- "text": "Have multiple identiy providers (i.e., login with your microsoft, google, facebook accounts)",
+ "category": "BC and DR",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
+ "category": "BC and DR",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
"services": [
- "VM",
- "WAF"
+ "AppSvc"
],
- "severity": "Medium",
- "text": "Follow VM rules for high availability on the VM level (premium disks, two or more in a region, in different availability zones)",
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "services": [
- "WAF"
- ],
+ "category": "Application Deployment",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
+ "services": [],
"severity": "Medium",
- "text": "Don't replicate! Replication can create issues with directory synchronization",
+ "subcategory": "CI/CD",
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
+ "waf": "Operations"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Function Review",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Select the right Function hosting plan based on your business & SLO requirements",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Have active-active for multi-regions",
+ "category": "BC and DR",
+ "checklist": "Azure Function Review",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' and tolower(kind) !contains 'workflow' | extend aspResourceId = tostring(properties.serverFarmId), managedEnvId = tostring(properties.managedEnvironmentId), sku = tostring(properties.sku) | extend sku = iif(isnotempty(sku), sku, iif(isnotempty(managedEnvId), 'ContainerApps', '')) | where sku !in ('Dynamic', 'FlexConsumption', '') | extend aspName = tostring(split(aspResourceId, '/').[-1]), managedEnvName = tostring(split(managedEnvId, '/').[-1]) | extend HostingPlan = tostring(iif(isnotempty(aspName), aspName, managedEnvName)) | project functionAppName = name, functionAppId = id, HostingPlan, sku | join kind=inner ( resources | where type =~ 'Microsoft.Web/serverfarms' or type =~ 'Microsoft.App/managedEnvironments' | extend HostingPlan = tostring(name), zoneRedundant = tostring(properties.zoneRedundant), compliant = tobool(properties.zoneRedundant) | project HostingPlan, resourceId = id, zoneRedundant, compliant ) on HostingPlan | project functionAppName, functionAppId, sku, HostingPlan, resourceId, zoneRedundant, compliant",
+ "service": "Azure Functions",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Leverage Availability Zones where regionally applicable (not available for Consumption tier)",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "services": [
- "Entra",
- "WAF"
- ],
+ "category": "BC and DR",
+ "checklist": "Azure Function Review",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
+ "services": [],
"severity": "Medium",
- "text": "Add Azure AD Domain service stamps to additional regions and locations",
+ "subcategory": "High Availability",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
+ "category": "BC and DR",
+ "checklist": "Azure Function Review",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
"services": [
- "WAF"
+ "AppSvc"
],
- "severity": "Medium",
- "text": "Use Replica Sets for DR",
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
+ "category": "BC and DR",
+ "checklist": "Azure Function Review",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' | where tolower(kind) !contains 'workflow' | where isnotempty(properties.serverFarmId) | extend sku = tostring(properties.sku) | where isnotempty(sku) | where sku !in ('Dynamic', 'FlexConsumption', 'ElasticPremium') | extend alwaysOn = properties.siteConfig.alwaysOn | project functionAppName = name, functionAppId = id, serverFarmId = tostring(properties.serverFarmId), sku, alwaysOn, compliant = tobool(alwaysOn)",
+ "service": "Azure Functions",
"services": [
- "WAF"
+ "AppSvc"
],
"severity": "High",
- "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled)",
+ "subcategory": "High Availability",
+ "text": "Ensure 'Always On' is enabled for all Function Apps running on App Service Plan",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "category": "BC and DR",
+ "checklist": "Azure Function Review",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
"services": [
- "WAF"
+ "Storage"
],
"severity": "Medium",
- "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the IoT hubs from an affected region to the corresponding geo-paired region.",
+ "subcategory": "High Availability",
+ "text": "Pair a Function App to its own storage account. Try not to re-use storage accounts for Function Apps unless they are tightly coupled",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
- "services": [
- "WAF"
- ],
- "severity": "High",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "category": "Application Deployment",
+ "checklist": "Azure Function Review",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "CI/CD",
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Function App code",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "guid": "43e52f47-22d9-428c-8b1c-d521e54a29a9",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foundations-playbooks-CosmosDB_v1.docx",
+ "service": "CosmosDB",
"services": [
- "WAF"
+ "CosmosDB"
],
- "severity": "High",
- "text": "Learn how to trigger a manual failover.",
+ "severity": "Medium",
+ "subcategory": "Best Practices",
+ "text": "FTA Resiliency Playbook",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "guid": "de39ac0e-7c28-4dc9-9565-7202bff4564b",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
+ "service": "CosmosDB",
"services": [
- "WAF"
+ "CosmosDB"
],
"severity": "High",
- "text": "Learn how to fail back after a failover.",
+ "subcategory": "High Availability",
+ "text": "Leverage Availablity Zones where regionally applicable and ofcourse if the service offers it",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "guid": "0d934a34-8b26-43e7-bd60-513a3649906e",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#replica-outages",
+ "service": "CosmosDB",
"services": [
- "AKV",
- "WAF",
- "Backup"
+ "CosmosDB"
],
- "severity": "High",
- "text": "Familiarize yourself with the Key Vault's best practices such as isolation recommendations, access control, data protection, backup, and logging.",
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Run multiple replicas of the database (>1 ) in Prod",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "Multi-region writes capability allows you to take advantage of the provisioned throughput for your databases and containers across the globe",
+ "guid": "bad38ead-53cc-47de-8d8a-aab3571449ab",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#multiple-write-regions",
+ "service": "CosmosDB",
"services": [
- "ACR",
- "AKV",
- "WAF"
+ "CosmosDB",
+ "ACR"
],
"severity": "Medium",
- "text": "Key Vault is a managed service and Microsoft will handle the failover within and across region. Familiarize yourself with the Key Vault's availability and redundancy.",
+ "subcategory": "High Availability",
+ "text": "Leverage Multi-Region Writes",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "Span Cosmos account across two or more regions with multi-region writes",
+ "guid": "8153d89f-89dc-47b3-9be2-b1a27f7b9e91",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
+ "service": "CosmosDB",
"services": [
- "AKV",
- "WAF"
+ "CosmosDB",
+ "ACR"
],
"severity": "Medium",
- "text": "The contents of your key vault are replicated within the region and to a secondary region at least 150 miles away, but within the same geography to maintain high durability of your keys and secrets. Familiarize yourself with the Key Vault's data replication.",
+ "subcategory": "High Availability",
+ "text": "Distribute your data globally",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "Choose from various consistency levels such as Eventual, Consistent Prefix, Session, Bounded Staleness and strong",
+ "guid": "9f8ea848-25ec-4140-bc32-2758e6ee9ac0",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/consistency-levels",
+ "service": "CosmosDB",
"services": [
- "AKV",
- "AzurePolicy",
- "WAF"
+ "CosmosDB"
],
- "severity": "Medium",
- "text": "During failover, access policy or firewall configurations and settings can't be changed. The key vault will be in read-only mode during failover. Familiarize yourself with the Key Vault's failover guidance.",
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Choose from several well-defined consistency models",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
- "service": "Key Vault",
- "services": [
- "Storage",
- "Subscriptions",
- "Backup",
- "AKV",
- "WAF"
- ],
- "severity": "Medium",
- "text": "When you back up a key vault object, such as a secret, key, or certificate, the backup operation will download the object as an encrypted blob. This blob can't be decrypted outside of Azure. To get usable data from this blob, you must restore the blob into a key vault within the same Azure subscription and Azure geography. Familiarize yourself with the Key Vault's backup and restore guidance.",
- "waf": "Reliability"
- },
- {
- "checklist": "WAF checklist",
- "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "Key Vault",
- "services": [
- "AKV",
- "WAF"
- ],
- "severity": "High",
- "text": "If you want protection against accidental or malicious deletion of your secrets, configure soft-delete and purge protection features on your key vault.",
- "waf": "Reliability"
- },
- {
- "checklist": "WAF checklist",
- "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "Maintain business continuity during regional outages. Azure Cosmos DB supports service-managed failover during a regional outage. During a regional outage, Azure Cosmos DB continues to maintain its latency, availability, consistency, and throughput SLAs. To help make sure that your entire application is highly available, Azure Cosmos DB offers a manual failover API to simulate a regional outage. By using this API, you can carry out regular business continuity drills.",
+ "guid": "a47e4d1e-bb79-43f9-bf87-69e1032b72fe",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/how-to-manage-database-account#automatic-failover",
+ "service": "CosmosDB",
"services": [
- "AKV",
- "WAF"
+ "CosmosDB"
],
- "severity": "Low",
- "text": "Key Vault's soft-deleted resources are retained for a set period of 90 calendar days. Familiarize yourself with the Key Vault's soft-delete guidance.",
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Enable Service managed failover",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "Azure Cosmos DB automatically takes backups of your data at regular intervals. The automatic backups are taken without affecting the performance or availability of the database operations. All the backups are stored separately in a storage service.",
+ "guid": "3499c9c1-133d-42f7-a4b1-a5bd06ff1a90",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/online-backup-and-restore",
+ "service": "CosmosDB",
"services": [
- "AKV",
- "WAF",
+ "CosmosDB",
+ "Storage",
"Backup"
],
- "severity": "Low",
- "text": "Understand Key Vault's backup limitations. Key Vault does not support the ability to backup more than 500 past versions of a key, secret, or certificate object. Attempting to backup a key, secret, or certificate object may result in an error. It is not possible to delete previous versions of a key, secret, or certificate.",
+ "severity": "Medium",
+ "subcategory": "Backup Strategy",
+ "text": "Enable Automatic Backups",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "This mode is the default backup mode for all existing accounts. In this mode, backup is taken at a periodic interval and the data is restored by creating a request with the support team. In this mode, you configure a backup interval and retention for your account. The maximum retention period extends to a month. The minimum backup interval can be one hour.",
+ "guid": "a6eb33f6-005c-4d92-9286-7655672d6121",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/periodic-backup-restore-introduction",
+ "service": "CosmosDB",
"services": [
- "AKV",
- "WAF",
+ "CosmosDB",
"Backup"
],
- "severity": "Low",
- "text": "Key Vault doesn't currently provide a way to back up an entire key vault in a single operation and keys, secrets and certitificates must be backup indvidually. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "severity": "Medium",
+ "subcategory": "Backup Strategy",
+ "text": "Perform Periodic Backups",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
- "service": "Key Vault",
+ "category": "Operations Management",
+ "checklist": "CosmosDB Review Checklist",
+ "description": "Continous 7 day retention and 30 day retention backups. Azure Cosmos DB performs data backup in the background without consuming any extra provisioned throughput (RUs) or affecting the performance and availability of your database. Continuous backups are taken in every region where the account exists.",
+ "guid": "d43918a8-cd28-49be-b6b1-7cb8245461e1",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction",
+ "service": "CosmosDB",
"services": [
- "EventHubs",
- "AKV",
- "WAF"
+ "CosmosDB",
+ "Backup"
],
"severity": "Medium",
- "text": "Purge protection is recommended when using keys for encryption to prevent data loss. Purge protection is an optional Key Vault behavior and is not enabled by default. Purge protection can only be enabled once soft-delete is enabled. It can be turned on via CLI, PowerShell or Portal.",
+ "subcategory": "Backup Strategy",
+ "text": "Continous Backup with point-in-time restore in Azure Cosmos DB",
+ "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Implement branching policy in Azure DevOps",
+ "guid": "eda1dae2-cc85-4c47-a6b7-81cca0e6c465",
+ "link": "https://learn.microsoft.com/azure/devops/repos/git/branch-policies-overview?view=azure-devops",
"services": [
- "WAF"
+ "AzurePolicy"
],
"severity": "High",
- "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "Reliability"
+ "subcategory": "Branching Policy",
+ "text": "Branch Policies",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Understand branch strategy such as GitFlow or GitHub Flow",
+ "guid": "bc288bec-6a16-4ca7-8444-51e1add34529",
+ "link": "https://learn.microsoft.com/azure/devops/repos/git/git-branching-guidance?view=azure-devops",
"services": [
- "WAF"
+ "AzurePolicy"
],
"severity": "High",
- "text": "Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "Reliability"
+ "subcategory": "Branching Policy",
+ "text": "Branching strategy",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Understand how teams work with git",
+ "guid": "ec723823-7a15-41c5-ab4e-401914387e5c",
+ "link": "https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow",
"services": [
- "WAF"
+ "AzurePolicy"
],
"severity": "High",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "subcategory": "Branching Policy",
+ "text": "Understand GitFlow Branch Strategy",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Merge into higher branches after two or more reviewers in a PR",
+ "guid": "a9c26c9c-32ab-45bd-8c69-98a246e33899",
+ "link": "https://learn.microsoft.com/azure/devops/repos/git/review-pull-requests?view=azure-devops&tabs=browser",
"services": [
- "WAF",
- "AppSvc"
+ "AzurePolicy"
],
"severity": "High",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
+ "subcategory": "Branching Policy",
+ "text": "Pull Request Review",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Implement access control to the branches",
+ "guid": "7e41c77d-68cb-46a2-8ac1-9f916d697d8e",
+ "link": "https://learn.microsoft.com/azure/devops/repos/git/branch-permissions?view=azure-devops",
"services": [
- "WAF"
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
+ "subcategory": "Branching Policy",
+ "text": "Access Control to the Branch",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Leverage Flexible Server",
- "waf": "Reliability"
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Perform SAST code scan",
+ "guid": "adfd27bd-e187-401a-a252-baa9b68a088c",
+ "link": "https://devblogs.microsoft.com/devops/integrate-security-into-your-developer-workflow-with-github-advanced-security-for-azure-devops/",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Code Scan",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
- "services": [
- "WAF"
- ],
- "severity": "High",
- "text": "Leverage Availability Zones where regionally applicable",
- "waf": "Reliability"
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Understand TFVC as Code Repo",
+ "guid": "9a8f822b-8eb9-4d1b-a77f-26e5e6beba8e",
+ "link": "https://learn.microsoft.com/azure/devops/repos/tfvc/what-is-tfvc?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Practice",
+ "text": "TFVC as Code Repository",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Leverage Data-in replication for cross-region DR scenarios",
- "waf": "Reliability"
+ "category": "Version Control",
+ "checklist": "Azure DevOps",
+ "description": "Compare Git vs TFVC for your project",
+ "guid": "d4f3437b-c336-4d71-9f27-a71eee0b9b5d",
+ "link": "https://learn.microsoft.com/azure/devops/repos/tfvc/comparison-git-tfvc?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Practice",
+ "text": "Choose Right version control",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "AKV",
- "WAF"
- ],
- "severity": "Medium",
- "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal",
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Set up your team management",
+ "guid": "8defd5d7-21d4-41d2-900c-807bf9eab40f",
+ "link": "https://learn.microsoft.com/azure/devops/organizations/settings/manage-teams?view=azure-devops",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Team Planning",
+ "text": "Configure your teams",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Start scheduling sprints",
+ "guid": "9ed5b354-78d4-447a-a26c-2863c00f1cac",
+ "link": "https://learn.microsoft.com/azure/devops/boards/sprints/define-sprints?view=azure-devops",
+ "services": [],
"severity": "Medium",
- "text": "Ensure you are using Application Gateway v2 SKU",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
+ "subcategory": "Team Planning",
+ "text": "Configure your sprints",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
- "services": [
- "LoadBalancer",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Ensure you are using the Standard SKU for your Azure Load Balancers",
- "waf": "Security"
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Set up your work item heirarchy",
+ "guid": "699ef1d5-a83d-4e5d-b36c-1c81870a0bc5",
+ "link": "https://learn.microsoft.com/azure/devops/organizations/settings/work/customize-process-work-item-type?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Team Planning",
+ "text": "Choose Work Item types",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
- "services": [
- "LoadBalancer",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Ensure your Load Balancers frontend IP addresses are zone-redundant (unless you require zonal frontends).",
- "waf": "Security"
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "WIT Processes available in Azure DevOps",
+ "guid": "c1e43a18-658d-4285-aed6-7179b825546d",
+ "link": "https://learn.microsoft.com/azure/devops/boards/work-items/guidance/choose-process?view=azure-devops&tabs=agile-process",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Team Planning",
+ "text": "Select a WIT Process",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
- "services": [
- "VNet",
- "WAF",
- "AppGW"
- ],
- "severity": "Medium",
- "text": "Your Application Gateways v2 should be deployed in subnets with IP prefixes equal or larger than /24",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Use Azure Boards with GitHub",
+ "guid": "f2aee455-3afc-4833-a248-726dd68c5b5c",
+ "link": "https://learn.microsoft.com/azure/devops/cross-service/github-integration?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Tool Integration",
+ "text": "GitHub Integration",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Administration of reverse proxies in general and WAF in particular is closer to the application than to networking, so they belong in the same subscription as the app. Centralizing the Application Gateway and WAF in the connectivity subscription might be OK if it is managed by one single team.",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "services": [
- "VNet",
- "Entra",
- "Subscriptions",
- "WAF",
- "NVA",
- "AppGW"
- ],
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Understand the methologies",
+ "guid": "2925394b-69b9-4d37-aac4-3bc68d1d7665",
+ "link": "https://www.atlassian.com/agile/scrum/agile-vs-scrum",
+ "services": [],
"severity": "Medium",
- "text": "Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound HTTP(S) connections within the landing-zone virtual network and with the apps that they're securing.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
+ "subcategory": "Process Planning",
+ "text": "Understand Agile Vs Scrum",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "services": [
- "DDoS",
- "WAF"
- ],
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Create Dashboard and PowerBI reports",
+ "guid": "7246b448-564b-44dd-94a7-59c7633bd2a1",
+ "link": "https://learn.microsoft.com/azure/devops/report/dashboards/overview?view=azure-devops",
+ "services": [],
"severity": "Medium",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "subcategory": "Reporting",
+ "text": "Dashboard",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
- "services": [
- "WAF"
- ],
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Set up backlog",
+ "guid": "a27a764a-90be-40e3-98ee-293c1bd363ca",
+ "link": "https://learn.microsoft.com/azure/devops/boards/backlogs/set-up-your-backlog?view=azure-devops",
+ "services": [],
"severity": "Medium",
- "text": "Configure autoscaling with a minimum amount of instances of two.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Reliability"
+ "subcategory": "Reporting",
+ "text": "Refine your backlog",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
- "services": [
- "ACR",
- "WAF",
- "AppGW"
- ],
+ "category": "Azure Boards",
+ "checklist": "Azure DevOps",
+ "description": "Link your work items",
+ "guid": "aab75719-49ab-4919-9dc9-fc9d1bb84b37",
+ "link": "https://learn.microsoft.com/azure/devops/boards/queries/link-work-items-support-traceability?view=azure-devops&tabs=browser",
+ "services": [],
"severity": "Medium",
- "text": "Deploy Application Gateway across Availability Zones",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Reliability"
+ "subcategory": "Reporting",
+ "text": "Visualize Relationships",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "View the velocity report",
+ "guid": "b5a67fcb-9ed5-4b35-978d-447a826c2863",
+ "link": "https://learn.microsoft.com/azure/devops/report/dashboards/team-velocity?view=azure-devops&tabs=in-context",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Reporting",
+ "text": "Review Team Velocity",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF",
- "AppGW"
- ],
- "severity": "Medium",
- "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Create your first pipeline",
+ "guid": "c00f1cac-699e-4f1d-9a83-de5de36c1c81",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/create-first-pipeline?view=azure-devops&tabs=java%2Ctfs-2018-2%2Cbrowser",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Continuous Integration",
+ "text": "Set up pipeline",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "WAF checklist",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
- "services": [
- "TrafficManager",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Specify events that trigger pipelines",
+ "guid": "870a0bc5-c1e4-43a1-a658-d2858ed67179",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/build/triggers?view=azure-devops",
+ "services": [],
"severity": "High",
- "text": "Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Reliability"
+ "subcategory": "Continuous Integration",
+ "text": "Set Build triggers",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "services": [
- "Entra",
- "WAF",
- "AVD"
- ],
- "severity": "Low",
- "text": "If users only need access to internal applications, has Microsoft Entra ID Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Use YAML to create build pipeline",
+ "guid": "b825546d-f2ae-4e45-93af-c8339248726d",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/customize-pipeline?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Continuous Integration",
+ "text": "Customize YAML Pipeline",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "services": [
- "Entra",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Use classic GUI editor to set up pipeline",
+ "guid": "d68c5b5c-2925-4394-a69b-9d379ac43bc6",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/get-started/pipelines-get-started?view=azure-devops&source=recommendations#define-pipelines-using-the-classic-interface",
+ "services": [],
"severity": "Medium",
- "text": "To reduce the number of firewall ports open for incoming connections in your network, consider using Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications.",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Security"
+ "subcategory": "Continuous Integration",
+ "text": "Use GUI for pipeline",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF"
- ],
- "severity": "High",
- "text": "Deploy your WAF policy for Front Door in 'Prevention' mode.",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set up templates, parameters and expressions",
+ "guid": "8d1d7665-7246-4b44-a564-b4dd74a759c7",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/templates?view=azure-devops&pivots=templates-includes",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Continuous Integration",
+ "text": "Configure Templates",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "services": [
- "TrafficManager",
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set up jobs, stages and dependencies",
+ "guid": "633bd2a1-a27a-4764-a90b-e0e378ee293c",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/stages?view=azure-devops&tabs=yaml",
+ "services": [],
"severity": "High",
- "text": "Avoid combining Azure Traffic Manager and Azure Front Door.",
- "waf": "Security"
+ "subcategory": "Continuous Integration",
+ "text": "Jobs",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set up conditions and Demands",
+ "guid": "1bd363ca-aab7-4571-a49a-b9193dc9fc9d",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml%2Cstages",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Continuous Integration",
+ "text": "Conditions and Demands",
+ "waf": "Operations"
+ },
+ {
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Define Variables",
+ "guid": "1bb84b37-b5a6-47fc-a9ed-5b35478d447a",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch",
+ "services": [],
"severity": "High",
- "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
- "waf": "Security"
+ "subcategory": "Continuous Integration",
+ "text": "Variables",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "Low",
- "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
- "waf": "Performance"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set up your deployment pipeline",
+ "guid": "826c2863-c00f-41ca-a699-ef1d5a83de5d",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/create-multistage-pipeline?view=azure-devops",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Continuous Deployment",
+ "text": "Deployment Pipeline",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Select correct branches to deploy from",
+ "guid": "e36c1c81-870a-40bc-9c1e-43a18658d285",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/release/deploy-multiple-branches?view=azure-devops",
+ "services": [],
"severity": "Medium",
- "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
- "waf": "Reliability"
+ "subcategory": "Continuous Deployment",
+ "text": "Release branch",
+ "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "Low",
- "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
- "waf": "Performance"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "use relevant template to deploy to azure",
+ "guid": "8ed67179-b825-4546-bf2a-ee4553afc833",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/overview-azure?view=azure-devops",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Continuous Deployment",
+ "text": "Deploy to Azure",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
- "services": [
- "LoadBalancer",
- "WAF"
- ],
- "severity": "High",
- "text": "Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT scalability",
- "waf": "Reliability"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Define Release Approvals and pre deployment checks",
+ "guid": "9248726d-d68c-45b5-a292-5394b69b9d37",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Continuous Deployment",
+ "text": "Approvals and Checks",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "AKV",
- "WAF",
- "Cost"
- ],
- "severity": "High",
- "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Define Gates and post deployment checks",
+ "guid": "9ac43bc6-8d1d-4766-9724-6b448564b4dd",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/release/approvals/?view=azure-devops&tabs=yaml",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Continuous Deployment",
+ "text": "Gates",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Define Azure Function and REST API Checks",
+ "guid": "74a759c7-633b-4d2a-8a27-a764a90be0e3",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/process/invoke-checks?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Continuous Deployment",
+ "text": "Azure Function Checks",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Review pipeline reports",
+ "guid": "78ee293c-1bd3-463c-aaab-7571949ab919",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/reports/pipelinereport?view=azure-devops",
+ "services": [],
"severity": "High",
- "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
- "waf": "Security"
+ "subcategory": "Continuous Deployment",
+ "text": "Pipline Reports",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "configure Trend Result widget",
+ "guid": "3dc9fc9d-1bb8-44b3-9b5a-67fcb9ed5b35",
+ "link": "https://learn.microsoft.com/azure/devops/report/dashboards/analytics-widgets?toc=%2Fazure%2Fdevops%2Fpipelines%2Ftoc.json&view=azure-devops#test-results-trend-advanced",
+ "services": [],
"severity": "Medium",
- "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
- "waf": "Security"
- },
- {
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "High",
- "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
- "waf": "Security"
+ "subcategory": "Analytics",
+ "text": "Pipeline Result Trend",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "High",
- "text": "Tune the Azure Front Door WAF for your workload. Reduce false positive detections.",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Connect with WIT to visualize work",
+ "guid": "478d447a-826c-4286-9c00-f1cac699ef1d",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/integrations/configure-pipelines-work-tracking?view=azure-devops&tabs=yaml",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Analytics",
+ "text": "Work Tracking with Pipeline",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF"
- ],
- "severity": "High",
- "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Understand agent pools",
+ "guid": "5a83de5d-e36c-41c8-8870-a0bc5c1e43a1",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=yaml%2Cbrowser",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Continuous Deployment",
+ "text": " Agents and agent pools",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "High",
- "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
- "waf": "Security"
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Understand and provision Deployment Groups when required",
+ "guid": "8658d285-8ed6-4717-ab82-5546df2aee45",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/release/deployment-groups/?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Continuous Deployment",
+ "text": "Deployment Groups",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Understand Kubernetes Deployment",
+ "guid": "53afc833-9248-4726-bd68-c5b5c2925394",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/ecosystems/kubernetes/deploy?view=azure-devops",
"services": [
- "FrontDoor",
- "WAF"
+ "AKS"
],
- "severity": "High",
- "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Continuous Deployment",
+ "text": "Deploy to Kubernetes",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Perform Dynamic Security Testing",
+ "guid": "b69b9d37-9ac4-43bc-98d1-d76657246b44",
+ "link": "https://devblogs.microsoft.com/premier-developer/azure-devops-pipelines-leveraging-owasp-zap-in-the-release-pipeline/",
+ "services": [],
"severity": "Medium",
- "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
+ "subcategory": "Security",
+ "text": "DAST Scan",
+ "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Manage Service Connections",
+ "guid": "8564b4dd-74a7-459c-9633-bd2a1a27a764",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml",
+ "services": [],
"severity": "Medium",
- "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
+ "subcategory": "Security",
+ "text": "Service Connections",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set data retention policies for CI and CD",
+ "guid": "a90be0e3-78ee-4293-a1bd-363caaab7571",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/policies/retention?view=azure-devops&tabs=yaml",
"services": [
- "FrontDoor",
- "WAF"
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
+ "subcategory": "Security",
+ "text": "Retention Policies",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "services": [
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set up and pay for concurrent pipelines",
+ "guid": "949ab919-3dc9-4fc9-b1bb-84b37b5a67fc",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/licensing/concurrent-jobs?view=azure-devops&tabs=ms-hosted",
+ "services": [],
"severity": "Low",
- "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
- "waf": "Security"
+ "subcategory": "Administration",
+ "text": "Parallel Pipelines",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Set pipeline permissions",
+ "guid": "b9ed5b35-478d-4447-a826-c2863c00f1ca",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/policies/permissions?view=azure-devops",
+ "services": [],
"severity": "Medium",
- "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
- "waf": "Security"
- },
- {
- "ammp": true,
- "checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
- "severity": "High",
- "text": "Enable the Azure Application Gateway WAF bot protection rule set The bot rules detect good and bad bots.",
+ "subcategory": "Security",
+ "text": "Pipeline Permissions",
+ "training": "https://learn.microsoft.com/learn/paths/implement-windows-server-iaas-virtual-machine-identity/",
"waf": "Security"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
- "services": [
- "AzurePolicy",
- "WAF",
- "AppGW"
- ],
- "severity": "High",
- "text": "Enable request body inspection feature enabled in Azure Application Gateway WAF policy.",
+ "category": "Azure Pipelines",
+ "checklist": "Azure DevOps",
+ "description": "Add users to pipeline",
+ "guid": "c699ef1d-5a83-4de5-be36-c1c81870a0bc",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/policies/set-permissions?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Security",
+ "text": "Pipeline Users",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Security"
},
{
- "ammp": true,
- "checklist": "WAF checklist",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
- "severity": "High",
- "text": "Tune the Azure Application Gateway WAF for your workload. Reduce false positive detections.",
- "waf": "Security"
- },
- {
- "ammp": true,
- "checklist": "WAF checklist",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
- "services": [
- "AzurePolicy",
- "WAF",
- "AppGW"
- ],
- "severity": "High",
- "text": "Deploy your WAF policy for Application Gateway in 'Prevention' mode.",
- "waf": "Security"
- },
- {
- "checklist": "WAF checklist",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
+ "category": "Azure Artifact",
+ "checklist": "Azure DevOps",
+ "description": "Configure Artifacts",
+ "guid": "5c1e43a1-8658-4d28-98ed-67179b825546",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/artifacts-overview?view=azure-devops&tabs=nuget",
+ "services": [],
"severity": "Medium",
- "text": "Add rate limiting to the Azure Application Gateway WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
- "waf": "Security"
+ "subcategory": "Configuration",
+ "text": "Artifact In Pipeline",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
+ "category": "Azure Artifact",
+ "checklist": "Azure DevOps",
+ "description": "Publish and consume artifact in pipeline",
+ "guid": "df2aee45-53af-4c83-9924-8726dd68c5b5",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/pipeline-artifacts?view=azure-devops&tabs=yaml",
+ "services": [],
"severity": "Medium",
- "text": "Use a high threshold for Azure Application Gateway WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
- "waf": "Security"
+ "subcategory": "Configuration",
+ "text": "Publish and download Artifact",
+ "training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
- "services": [
- "WAF"
- ],
+ "category": "Azure Artifact",
+ "checklist": "Azure DevOps",
+ "description": "Publish NuGet packages with artifacts",
+ "guid": "c2925394-b69b-49d3-99ac-43bc68d1d766",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/nuget?view=azure-devops&tabs=yaml",
+ "services": [],
"severity": "Low",
- "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
- "waf": "Security"
- },
- {
- "checklist": "WAF checklist",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
- "severity": "Medium",
- "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Application Gateway WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
- "waf": "Security"
- },
- {
- "checklist": "WAF checklist",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
- "severity": "Medium",
- "text": "Use the latest Azure Application Gateway WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
- "waf": "Security"
+ "subcategory": "Configuration",
+ "text": "NuGet",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
- "severity": "Medium",
- "text": "Add diagnostic settings to save your Azure Application Gateway WAF logs.",
+ "category": "Azure Artifact",
+ "checklist": "Azure DevOps",
+ "description": "Publish Maven packages with artifacts",
+ "guid": "57246b44-8564-4b4d-b74a-759c7633bd2a",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/publish-maven-artifacts?view=azure-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Configuration",
+ "text": "Maven",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Add diagnostic settings to save your Azure Front Door WAF logs.",
+ "category": "Azure Artifact",
+ "checklist": "Azure DevOps",
+ "description": "Publish NPM packages with artifacts",
+ "guid": "1a27a764-a90b-4e0e-978e-e293c1bd363c",
+ "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/npm?view=azure-devops&tabs=yaml",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Configuration",
+ "text": "NPM",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
- "services": [
- "AppGW",
- "WAF",
- "Sentinel"
- ],
+ "category": "Azure Artifact",
+ "checklist": "Azure DevOps",
+ "description": "Best Practices to work with Azure Artifact",
+ "guid": "aaab7571-949a-4b91-a3dc-9fc9d1bb84b3",
+ "link": "https://learn.microsoft.com/azure/devops/artifacts/concepts/best-practices?view=azure-devops",
+ "services": [],
"severity": "Medium",
- "text": "Send Azure Application Gateway WAF logs to Microsoft Sentinel.",
+ "subcategory": "Configuration",
+ "text": "Best Practices",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "What is monitoring?",
+ "guid": "7b5a67fc-b9ed-45b3-9478-d447a826c286",
+ "link": "https://learn.microsoft.com/devops/operate/what-is-monitoring",
"services": [
- "FrontDoor",
- "WAF",
- "Sentinel"
+ "Monitor"
],
- "severity": "Medium",
- "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
+ "severity": "High",
+ "subcategory": "Practice",
+ "text": "What to monitor?",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
- "services": [
- "WAF",
- "AppGW"
- ],
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "Progressive Exposure Strategy",
+ "guid": "3c00f1ca-c699-4ef1-b5a8-3de5de36c1c8",
+ "link": "https://learn.microsoft.com/devops/operate/safe-deployment-practices",
+ "services": [],
"severity": "Medium",
- "text": "Define your Azure Application Gateway WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "subcategory": "Practice",
+ "text": "Safe Deployment Practices",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
- "services": [
- "AzurePolicy",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Use WAF Policies instead of the legacy WAF configuration.",
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "Microsoft runs reliable systems with DevOps",
+ "guid": "1870a0bc-5c1e-443a-8865-8d2858ed6717",
+ "link": "https://learn.microsoft.com/devops/operate/how-microsoft-operates-devops",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Practice",
+ "text": "Case Study",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
- "services": [
- "VNet",
- "ExpressRoute",
- "WAF",
- "VPN",
- "AppGW"
- ],
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "Security in DevOps",
+ "guid": "9b825546-df2a-4ee4-953a-fc8339248726",
+ "link": "https://learn.microsoft.com/devops/operate/security-in-devops",
+ "services": [],
"severity": "Medium",
- "text": "Filter inbound traffic in the backends so that they only accept connections from the Application Gateway subnet, for example with NSGs.",
+ "subcategory": "Practice",
+ "text": "DevSecOps",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "services": [
- "FrontDoor",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Make sure your origins only take traffic from your Azure Front Door instance.",
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "Enable DevSecops with Azure And GitHub",
+ "guid": "dd68c5b5-c292-4539-9b69-b9d379ac43bc",
+ "link": "https://learn.microsoft.com/devops/devsecops/enable-devsecops-azure-github",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Practice",
+ "text": "DevSecops",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "Mirror RBAC in DevOps",
+ "guid": "68d1d766-5724-46b4-9856-4b4dd74a759c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/secure/best-practices/end-to-end-governance",
"services": [
- "WAF"
+ "RBAC"
],
- "severity": "High",
- "text": "You should encrypt traffic to the backend servers.",
+ "severity": "Low",
+ "subcategory": "Practice",
+ "text": "Secure DevOps Govenance",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
- "service": "App Gateway",
- "services": [
- "WAF"
- ],
- "severity": "High",
- "text": "You should use a Web Application Firewall.",
+ "category": "DevOps Practice",
+ "checklist": "Azure DevOps",
+ "description": "Governance when using CI/CD",
+ "guid": "7633bd2a-1a27-4a76-9a90-be0e378ee293",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/governance/end-to-end-governance-in-azure",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Practice",
+ "text": "Azure DevOps Governance",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
+ "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
+ "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "EventHubs"
],
- "severity": "Medium",
- "text": "Redirect HTTP to HTTPS",
+ "severity": "Low",
+ "subcategory": "Data Protection",
+ "text": "Use customer-managed key option in data at rest encryption when required",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hubs namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Event Hubs namespace to require that clients send and receive data with a newer version of TLS. If an Event Hubs namespace requires a minimum version of TLS, then any requests made with an older version will fail. ",
+ "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "EventHubs"
],
"severity": "Medium",
- "text": "Use gateway-managed cookies to direct traffic from a user session to the same server for processing",
- "waf": "Operations"
- },
- {
- "checklist": "WAF checklist",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
- "services": [
- "WAF"
- ],
- "severity": "High",
- "text": "Enable connection draining during planned service updates to prevent connection loss to existing membrs of the backend pool",
+ "subcategory": "Data Protection",
+ "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
- "services": [
- "WAF"
- ],
- "severity": "Low",
- "text": "Create custom error pages to display a personalized user experience",
- "waf": "Operations"
- },
- {
- "checklist": "WAF checklist",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "When you create an Event Hubs namespace, a policy rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has manage permissions for the entire namespace. It�s recommended that you treat this rule like an administrative root account and don�t use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
+ "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "TrafficManager",
+ "AzurePolicy",
+ "EventHubs",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "text": "Edit HTTP requests and response headers for easier routing and information exchange between the client and server",
+ "subcategory": "Identity and Access Management",
+ "text": "Avoid using root account when it is not necessary",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "Managed identities for Azure resources can authorize access to Event Hubs resources using Azure AD credentials from applications running in Azure Virtual Machines (VMs), Function apps, Virtual Machine Scale Sets, and other services. By using managed identities for Azure resources together with Azure AD authentication, you can avoid storing credentials with your applications that run in the cloud. ",
+ "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
+ "service": "Event Hubs",
"services": [
- "FrontDoor",
- "WAF"
+ "Storage",
+ "VM",
+ "EventHubs",
+ "Entra",
+ "AKV"
],
"severity": "Medium",
- "text": "Configure Front Door to optimize global web traffic routing and top-tier end-user performance, and reliability through quick global failover",
- "waf": "Performance"
+ "subcategory": "Identity and Access Management",
+ "text": "When possible, your application should be using a managed identity to authenticate to Azure Event Hub. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "When creating permissions, provide fine-grained control over a client's access to Azure Event Hub. Permissions in Azure Event Hub can and should be scoped to the individual resource level e.g. consumer group, event hub entity, event hub namespaces, etc.",
+ "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "Entra",
+ "RBAC",
+ "EventHubs"
],
- "severity": "Medium",
- "text": "Use transport layer load balancing",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Identity and Access Management",
+ "text": "Use least privilege data plane RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub resource logs include operational logs, virtual network and Kafka logs. Runtime audit logs capture aggregated diagnostic information for all data plane access operations (such as send or receive events) in Event Hubs.",
+ "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
+ "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "VNet",
+ "Monitor",
+ "EventHubs"
],
"severity": "Medium",
- "text": "Configure routing based on host or domain name for multiple web applications on a single gateway",
+ "subcategory": "Monitoring",
+ "text": "Enable logging for security investigation. Use Azure Monitor to captured metrics and logs such as resource logs, runtime audit logs and Kafka logs",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Event Hub traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
+ "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
+ "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
+ "service": "Event Hubs",
"services": [
- "Entra",
- "WAF"
+ "VNet",
+ "PrivateLink",
+ "EventHubs"
],
"severity": "Medium",
- "text": "Centralize SSL certificate management to reduce encryption and decryption overhead from a backend server farm",
+ "subcategory": "Networking",
+ "text": "Consider using private endpoints to access Azure Event Hub and disable public network access when applicable.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
+ "category": "Security",
+ "checklist": "Azure Event Hub Review",
+ "description": "With IP firewall, you can restrict public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
+ "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
+ "service": "Event Hubs",
"services": [
- "WAF",
- "AppGW"
+ "EventHubs"
],
- "severity": "Low",
- "text": "Use Application Gateway for native support for WebSocket and HTTP/2 protocols",
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "Consider only allowing access to Azure Event Hub namespace from specific IP addresses or ranges",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "65285269-441c-44bf-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview",
- "service": "PostgreSQL",
+ "category": "Operations Management",
+ "checklist": "Azure Event Hub Review",
+ "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "EventHubs"
],
"severity": "Medium",
- "text": "Leverage Flexible Server",
+ "subcategory": "Best Practices",
+ "text": "Leverage FTA Resillency HandBook",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "016ccf31-ae5a-41eb-9888-9535e227896d",
- "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview#architecture-and-high-availability",
- "service": "PostgreSQL",
+ "category": "Operations Management",
+ "checklist": "Azure Event Hub Review",
+ "description": " This will be turned on automatically for a new EH namespace created from the portal with Premium, Dedicated, or Standard SKUs in a zone-enabled region. Both the EH metadata and the event data itself are replicated across zones",
+ "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "ACR",
+ "EventHubs"
],
"severity": "High",
- "text": "Leverage Availability Zones where regionally applicable",
+ "subcategory": "Zone Redudancy",
+ "text": "Leverage Availability Zones if regionally applicable",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "31b67c67-be59-4519-8083-845d587cb391",
- "link": "https://learn.microsoft.com/azure/postgresql/single-server/concepts-business-continuity#cross-region-read-replicas",
- "service": "PostgreSQL",
+ "category": "Operations Management",
+ "checklist": "Azure Event Hub Review",
+ "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
+ "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "EventHubs"
],
"severity": "Medium",
- "text": "Leverage cross-region read replicas for BCDR",
+ "subcategory": "Best Practices",
+ "text": "Use the Premium or Dedicated SKUs for predicable performance",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "1fc2fc14-eea6-4e69-b8d9-a3edc218e687",
- "link": "https://polite-sea-0995b240f.2.azurestaticapps.net/technical-delivery-playbook/azure-services/analytics/purview/",
- "service": "Purview",
+ "category": "Operations Management",
+ "checklist": "Azure Event Hub Review",
+ "description": "The built-in geo-disaster recovery feature, when enabled, ensures that the entire configuration of anamespace (Event Hubs, Consumer Groups and settings) is continuously replicated from a primary namespace to a secondary namespace, and it allows a once-only failover move from the primary to the secondary at any time. Active/Passive feature is designed to make it easier to recover from and abandon a failed Azure region without having to change application configurations",
+ "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "ASR",
+ "EventHubs"
],
- "severity": "Medium",
- "text": "Leverage FTA Resillency Handbook",
+ "severity": "High",
+ "subcategory": "Geo Redudancy",
+ "text": "Plan for Geo Disaster Recovery using Active Passive configuration",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "ab067acb-49e5-4b96-8332-4ecf8cc13318",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Operations Management",
+ "checklist": "Azure Event Hub Review",
+ "description": "Should be used for DR configurations where an outage or loss of event data in the downed region cannot be tolerated. For these cases, follow the replication guidance and do not use the built-in geo-disaster recovery capability (active/passive). With Active/Active, Maintain multiple Event Hubs in different regions and namespaces, and events will be replicated between the hubs",
+ "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "ASR",
+ "EventHubs"
],
- "severity": "High",
- "text": "Plan for Data Center level outage",
+ "severity": "Medium",
+ "subcategory": "Geo Redudancy",
+ "text": "For Business Critical Applications, use Active Active configuration",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "1. Create the new account 2. Migrate configuration items 3. Run scans 4. Migrate custom typedefs and custom assets 5. Migrate relationships 6. Migrate glossary terms 7. Assign classifications to assets 8. Assign contacts to assets",
- "guid": "da611702-69f4-4fb4-aa3d-3ef7f3176c4b",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Operations Management",
+ "checklist": "Azure Event Hub Review",
+ "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
+ "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
+ "service": "Event Hubs",
"services": [
- "WAF"
+ "EventHubs"
],
"severity": "Medium",
- "text": "Practice Failover for BCDR",
+ "subcategory": "Reliability",
+ "text": "Design Resilient Event Hubs",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "97b15b8a-219a-44ab-bb57-879024d22678",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
- "services": [
- "Backup",
- "WAF"
- ],
+ "category": "Operations Management",
+ "checklist": "Recovery Services Vault Checklist",
+ "guid": "cb7da8cf-aa62-4a15-a495-6da97dc3a242",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-plan-capacity-vmware",
+ "services": [],
"severity": "High",
- "text": "Plan a backup strategy and take regular backups",
+ "subcategory": "Replication",
+ "text": "Capacity planning is required to make sure you have sufficient bandwidth for replication and an estimated number of CPU cores & disk types that will be needed in Azure for failover",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6d20b56c-56a9-4581-89bf-8d8e5c586b7d",
- "link": "https://learn.microsoft.com/purview/manage-kafka-dotnet",
- "service": "Purview",
+ "category": "Operations Management",
+ "checklist": "Recovery Services Vault Checklist",
+ "guid": "67b23587-05a1-4652-aded-fa8a488cdec4",
+ "link": "https://learn.microsoft.com/azure/site-recovery/azure-to-azure-how-to-enable-policy",
"services": [
- "EventHubs",
- "WAF"
+ "AzurePolicy",
+ "VM",
+ "ASR"
],
- "severity": "Low",
- "text": "Use Microsoft Purview's Event Hubs to subscribe and create entities to another account",
+ "severity": "High",
+ "subcategory": "Replication",
+ "text": "Use Azure Policy to ensure that all critical Azure VMs are protected with ASR",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "8cdc15ac-c075-4ee9-a130-a8889579e76b",
- "link": "https://learn.microsoft.com/purview/deployment-best-practices",
- "service": "Purview",
+ "category": "Operations Management",
+ "checklist": "Recovery Services Vault Checklist",
+ "guid": "862bc3bc-14be-4b7f-96e8-d9b3bec228e7",
+ "link": "https://learn.microsoft.com/azure/site-recovery/recovery-plan-overview",
"services": [
- "WAF"
+ "VM"
],
"severity": "Medium",
- "text": "Follow Purview accounts architectures and deployment best practices",
+ "subcategory": "Replication",
+ "text": "Define recovery plans to automate the failover sequence for VMs. You can also include automation scripts to reduce manual steps and improve recovery time",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "896e710a-7da7-4be9-a56d-14d3c49d997c",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-collections",
- "service": "Purview",
- "services": [
- "WAF"
- ],
+ "category": "Operations Management",
+ "checklist": "Recovery Services Vault Checklist",
+ "guid": "437b1736-db55-4f67-a613-334bd09dc234",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-how-to-manage?tabs=recovery-services-vault",
+ "services": [],
"severity": "Medium",
- "text": "Follow Collection Architectures and best practices",
+ "subcategory": "Data Protection",
+ "text": "Enable and LOCK immutability for vaults. This ensures recovery points cannot be deleted before their intended expiry",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "b3d1325a-a225-4c6f-9e06-85edddea8a4b",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-asset-lifecycle",
- "service": "Purview",
- "services": [
- "WAF"
- ],
+ "category": "Operations Management",
+ "checklist": "Recovery Services Vault Checklist",
+ "guid": "19db6128-1265-404b-a47a-493a08042729",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about",
+ "services": [],
"severity": "Medium",
- "text": "Follow Assest lifecycle best practices",
+ "subcategory": "Data Protection",
+ "text": "Enable 'Always-on soft delete' for vaults protecting critical workloads",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "7cdeb3c6-1fc2-4fc1-9eea-6e69d8d9a3ed",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-automation",
- "service": "Purview",
+ "category": "Operations Management",
+ "checklist": "Recovery Services Vault Checklist",
+ "guid": "4798b158-8b31-4aa5-9ceb-54445135a227",
+ "link": "https://learn.microsoft.com/azure/backup/backup-create-recovery-services-vault#set-storage-redundancy",
"services": [
- "WAF"
+ "Storage"
],
"severity": "Medium",
- "text": "Follow automation best practices",
+ "subcategory": "Redudancy",
+ "text": "When creating Recovery Service Vaults choose the best storage redundancy option for your requirements. Vaults support local, geo and zone redundancy but this setting cannot be changed once the vault is protecting one or more resources",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "c218e687-ab06-47ac-a49e-5b9603324ecf",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD control plane does not offer a financially backed service level agreement. We strive to attain at least 99.9% availability for the Azure Virtual Desktop service URLs. The availability of the session host virtual machines in your subscription is covered by the Virtual Machines SLA. Dependent resources/services and infrastructure availability must be also considered to properly satisfy global high-availability requirements.",
+ "guid": "56c57ba5-9119-4bf8-b8f5-c586c7d9cdc1",
+ "link": "https://azure.microsoft.com/support/legal/sla/virtual-desktop/v1_0/",
"services": [
- "Backup",
- "WAF"
+ "AVD",
+ "ASR",
+ "Subscriptions",
+ "VM"
],
- "severity": "Medium",
- "text": "Follow Backup and Migration Best practices",
+ "severity": "High",
+ "subcategory": "Compute",
+ "text": "Determine the expected High Availability SLA for applications/desktops published through AVD",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "8cc13318-da61-4170-869f-4fb4aa3d3ef7",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-glossary",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "'Active-Active' model can be achieved with multiple host pools in different regions. A single Host Pool with VMs from different regions is not recommended. If multiple pools for same users will be used, the problem of how to synchronize/replicate user profiles must be solved. FSLogix Cloud Cache could be used, but need to be carefully reviewed and planned, or customers can decide to do not synchronize/replicate at all. 'Active-Passive' can be achieved using Azure Site Recovery (ASR) or on-demand Pool deployment with automated mechanism. For a detailed discussion on multi-region BCDR, please read the companion article in the 'More Info' column and this FSLogix related page: https://learn.microsoft.com/fslogix/concepts-container-recovery-business-continuity.",
+ "guid": "6acc076e-f9b1-441a-a989-579e76b897e7",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/azure-virtual-desktop-multi-region-bcdr",
"services": [
- "WAF"
+ "AVD",
+ "Storage",
+ "ASR",
+ "VM"
],
"severity": "Medium",
- "text": "Follow Purview Glossary Best Practices",
+ "subcategory": "Compute",
+ "text": "Assess Geo Disaster Recovery requirements for AVD Host Pools",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "f3176c4b-97b1-45b8-a219-a4abeb578790",
- "link": "https://learn.microsoft.com/purview/concept-workflow",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Before approaching Azure Virtual Desktop BCDR planning and design, it is important to initially consider which applications consumed through AVD are critical. You may want to separate them from non-critical apps and use a separate Host Pool with a different disaster recovery approach and capabilities.",
+ "guid": "10a7da7b-e996-46e1-9d3c-4ada97cc3d13",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
"services": [
- "WAF"
+ "AVD",
+ "ASR"
],
"severity": "Low",
- "text": "Leverage Workflows ",
+ "subcategory": "Compute",
+ "text": "Separate critical applications in different AVD Host Pools",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "24d22678-6d20-4b56-a56a-958119bf8d8e",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-security",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Each Host Pool can be deployed using Availability Zones (AZ) or Availability Set (AS). To maximize resiliency, usage of AZ is recommended: at Host Pool creation time you can decide to spread Host Pool Session Hosts across all available AZ. Usage of AS will not protect from single datacenter failure, then should be used only in regions where AZ are not available. More details on AZ and AVD in the companion article. For a comparison between AZ and AS you can read here: https://learn.microsoft.com/azure/virtual-machines/availability.",
+ "guid": "25ab225c-6f4e-4168-9fdd-dea8a4b7cdeb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/announcing-general-availability-of-support-for-azure/ba-p/3636262",
"services": [
- "WAF"
+ "AVD",
+ "ASR",
+ "ACR"
],
- "severity": "Medium",
- "text": "Follow Purview Security Best Practices",
+ "severity": "High",
+ "subcategory": "Compute",
+ "text": "Plan the best resiliency option for AVD Host Pool deployment",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "5c586b7d-8cdc-415a-ac07-5ee9b130a888",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-lineage-azure-data-factory",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure Backup can be used to protect Host Pool VMs. For Pooled Pools, this is not necessary since should be stateless. Instead, this option can be considered for Personal Host Pools.",
+ "guid": "4c61fc3f-c14e-4ea6-b69e-8d9a3eec218e",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
"services": [
- "WAF"
+ "AVD",
+ "Backup",
+ "VM",
+ "ASR"
],
"severity": "Medium",
- "text": "Follow Purview Data Lineage Best Practices",
+ "subcategory": "Compute",
+ "text": "Assess the requirement to backup AVD Session Host VMs",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9579e76b-896e-4710-a7da-7be9956d14d3",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-scanning",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Even for Personal Pools, usage of Availability Zones, when available, is recommended. Three possible in-region DR strategies are possible, it is recommended to select the best one based on cost, RTO/RPO, and if it is really necessary to save the entire VM OS disk: (1) create each session host in a specific zone (AZ) and then use Azure Site Recovery (ASR) to replicate to a different zone. (2) Use Azure Backup to backup and restore the specific session host in a different AZ. (3) Create a new session host in a different AZ and rely on FSLogix and/or OneDrive to make data and settings available on the new machine. All options require administrator intervention for DR and direct user assignment at Host Pool level, then must be planned and configured in advance.",
+ "guid": "5da58639-ca3a-4961-890b-29663c5e10d",
+ "link": "https://learn.microsoft.com/azure/site-recovery/azure-to-azure-how-to-enable-zone-to-zone-disaster-recovery",
"services": [
- "WAF"
+ "VM",
+ "AVD",
+ "Cost",
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "text": "Follow Best Practices for Scanning Registered Sources",
+ "subcategory": "Compute",
+ "text": "Prepare a local DR strategy for Personal Host Pool Session Hosts",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "c49d997c-b3d1-4325-aa22-5c6f4e0685ed",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-classification",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If custom images are used to deploy AVD Host Pool VMs, it is important to ensure those artifacts are available in all regions where AVD is deployed. Azure Compute Gallery service can be used to replicate images across all regions where a Host Pool is deployed, with redundant storage and in multiple copies. Please be aware that the Azure Compute Gallery service isn't a global resource. For disaster recovery scenarios, the best practice is to have at least two galleries, in different regions.",
+ "guid": "dd2e0d5d-771d-441e-9610-cc57b4a4a141",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/azure-compute-gallery",
"services": [
- "WAF"
+ "ACR",
+ "Storage",
+ "VM",
+ "AVD",
+ "ASR"
],
- "severity": "Medium",
- "text": "Follow Classification Best Practices in Governance Portal",
+ "severity": "Low",
+ "subcategory": "Dependencies",
+ "text": "Plan for Golden Image cross-region availability",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "ddea8a4b-7cde-4b3c-91fc-2fc14eea6e69",
- "link": "https://learn.microsoft.com/purview/sensitivity-labels-frequently-asked-questions",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If users of the AVD infrastructure need on-premises resource access, high availability of network infrastructure required to connect is also critical and should be considered. Resiliency of authentication infrastructure needs to be assessed and evaluated. BCDR aspects for dependent applications and other resources need to be considered to ensure availability in the secondary DR location.",
+ "guid": "fd339489-8c12-488b-9c6a-57cfb644451e",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
"services": [
- "WAF"
+ "AVD",
+ "ASR"
],
"severity": "Medium",
- "text": "Perform Sensitivity Labelling in the Purview Data Map",
+ "subcategory": "Dependencies",
+ "text": "Assess Infrastructure & Application dependencies ",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "d8d9a3ed-c218-4e68-9ab0-67acb49e5b96",
- "link": "https://learn.microsoft.com/purview/concept-data-share",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Not all data inside FSLogix user profiles may deserve protection from disaster. Additionally, if external storage is used, for example OneDrive or File Servers/Shares, what is remaining in the FSLogix profile is minimal and could be lost in some extreme circumstances. In other cases, data inside the profile can be rebuilt from other storages (for example Outlook Inbox in cached mode).",
+ "guid": "687ab077-adb5-49e5-a960-3334fdf8cc23",
+ "link": "https://docs.microsoft.com/fslogix/manage-profile-content-cncpt",
"services": [
+ "AVD",
"Storage",
- "WAF"
+ "ASR"
],
- "severity": "Low",
- "text": "Leverage Azure Storage in-place data sharing with Microsoft Purview",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Assess which data need to be protected in the Profile and Office Containers",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "03324ecf-8cc1-4331-ada6-1170269f4fb4",
- "link": "https://learn.microsoft.com/purview/concept-insights",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Preventing data loss for critical user data is important, first step is to assess which data need to be saved and protected. If using OneDrive or other external storage, saving user Profile and/or Office Containers data maybe not necessary. Appropriate mechanism must be considered to provide protection for critical user data. Azure Backup service can be used to protect Profile and Office Containers data when stored on Azure Files Standard and Premium tiers. Azure NetApp Files Snapshots and Policies can be used for Azure NetApp Files (all tiers).",
+ "guid": "fc4972cc-3cd2-45bf-a707-6e9eab4bed32",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
"services": [
- "WAF"
+ "Storage",
+ "AzurePolicy",
+ "AVD",
+ "Backup",
+ "ASR"
],
- "severity": "Low",
- "text": "Leverage Data Estate Insights",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Build a backup protection strategy for Profile and Office Containers",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "aa3d3ef7-f317-46c4-a97b-15b8a219a4ab",
- "link": "https://learn.microsoft.com/purview/catalog-adoption-insights",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "In AVD, multiple replication mechanisms and strategies can be used for user data residing in FSLogix containers: [Profile Pattern #1]: Native Azure storage replication mechanisms, for example Azure Files Standard GRS replication, Azure NetApp Files Cross Region Replication. Use Zone Replicated Storage (ZRS) or Geo replicated storage (GRS) for Azure Files is recommended. LRS with local-only resiliency can be used if no zone/region protection is required. NOTE: Azure Files Share Standard is LRS/ZRS/GRS, but with 100TB large support enabled only LRS/ZRS are supported. [Profile Pattern #2]: FSLogix Cloud Cache is built in automatic mechanism to replicate containers between different (up to 4) storage accounts. Cloud Cache should be used only when:(1) User Profile or Office containers data availability required high-availability SLA is critical and need to be resilient to region failure. (2) Selected storage option is not able to satisfy BCDR requirements. For example, with Azure File Share Premium tier, or Azure File Share Standard with Large File Support enabled, GRS is not available. (3) When replication between disparate storage is required. [Profile Pattern #3]: Only set up geo disaster recovery for application data and not for user data/profile containers: store important application data in separate storages, like OneDrive or other external storage with its own built-in DR mechanism.",
+ "guid": "9f7547c1-746d-4c56-868a-714435bd09dd",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/disaster-recovery",
"services": [
- "WAF"
+ "AVD",
+ "Storage",
+ "ASR"
],
- "severity": "Low",
- "text": "Use Data stewardship and Catalog adoption",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Assess Profile Container storage replication requirements and resiliency for BCDR purpose",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "eb578790-24d2-4267-a6d2-0b56c56a9581",
- "link": "https://learn.microsoft.com/purview/concept-insights",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "For local disaster recovery, Azure Backup for Azure Files can be used. For cross-region geo disaster recovery: GRS for Azure Files is only available with standard SKU and no large share support, then not suitable in most customer scenarios. If geo-replication is required with Azure File Share Premium, replication with FSLogix Cloud Cache can be evaluated, or 'in-region' Availability Zone (AZ) only resiliency should be considered.",
+ "guid": "3d4f3537-c134-46dc-9602-7a71efe1bd05",
+ "link": "https://docs.microsoft.com/azure/backup/backup-afs",
"services": [
- "WAF"
+ "AVD",
+ "Backup",
+ "Storage",
+ "ASR"
],
- "severity": "Low",
- "text": "Use Inventory and Ownership",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Review Azure Files disaster recovery strategy",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "19bf8d8e-5c58-46b7-b8cd-c15acc075ee9",
- "link": "https://learn.microsoft.com/purview/glossary-insights",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Zone Redundant Storage will maximize in-region resiliency for the user profile data. ZRS is supported for premium file shares through the 'FileStorage' storage account kind. ZRS is supported in standard general-purpose v2 storage accounts. Usage of zone redundant storage must be paired with zone redundant deployment of Session Hosts in each Host Pool. ",
+ "guid": "10d4e875-d502-4142-a795-f2b6eff34f88",
+ "link": "https://learn.microsoft.com/azure/storage/files/files-redundancy#zone-redundant-storage",
"services": [
- "WAF"
+ "AVD",
+ "Storage",
+ "ASR"
],
- "severity": "Low",
- "text": "Leverage Insights for Glossary, Classifications, Sensitivity Labels",
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Use Zone Redundant Storage (ZRS) for Azure Files to maximize resiliency",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "b130a888-9579-4e76-a896-e710a7da7be9",
- "link": "https://learn.microsoft.com/purview/compliance-manager",
- "service": "Purview",
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "For local disaster recovery, Azure NetApp Files (ANF) native backup is available. ANF is essentially locally redundant, then for cross-region geo disaster recovery it is necessary to use an additional mechanism that is Cross-Region Replication (CRR) https://learn.microsoft.com/azure/azure-netapp-files/cross-region-replication-create-peering. Currently, ANF does not provide replication nor redundancy across different Availability Zones (AZ), only the possibility to select in which single AZ to place the ANF volume: https://learn.microsoft.com/azure/azure-netapp-files/manage-availability-zone-volume-placement.",
+ "guid": "23429db7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/cross-region-replication-create-peering",
"services": [
- "WAF"
+ "ACR",
+ "Storage",
+ "AVD",
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "text": "Generate assessment scores",
+ "subcategory": "Storage",
+ "text": "Review Azure NetApp Files disaster recovery strategy",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "956d14d3-c49d-4997-ab3d-1325aa225c6f",
- "link": "https://learn.microsoft.com/purview/compliance-manager-scoring",
- "service": "Purview",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Applications can be preinstalled in the golden image/s, can be attached using MSIX & AppAttach feature or distributed to the session hosts after host pool deployment using traditional software distribution methods.",
+ "guid": "86ba2802-1459-4014-95d3-8e5309ccbd97",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-golden-image",
"services": [
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "Profiling- get summaries of data content",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Golden Images",
+ "text": "Determine how applications will be deployed in AVD Host Pools",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "4e0685ed-ddea-48a4-a7cd-eb3c61fc2fc1",
- "link": "https://learn.microsoft.com/purview/concept-policies-data-owner#microsoft-purview-policy-concepts",
- "service": "Purview",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Multiple golden images can be required to support different OS versions and/or settings, different groups of applications that must be separated and cannot be included in a single image.",
+ "guid": "9266bcca-274f-4aa1-abf3-9d95d44c7c89",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-golden-image",
"services": [
- "AzurePolicy",
- "WAF"
+ "AVD"
],
- "severity": "Low",
- "text": "Follow Microsoft Purview Data Owner access policies",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Golden Images",
+ "text": "Estimate the number of golden images that will be required",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "4eea6e69-d8d9-4a3e-bc21-8e687ab067ac",
- "link": "https://learn.microsoft.com/purview/concept-self-service-data-access-policy",
- "service": "Purview",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Determine which Guest OS will be used to deploy each Host Pool: Windows 10 vs. Windows Server, Marketplace vs. Custom images",
+ "guid": "19ca1f6d-5315-4ae5-84ba-34d4585e2213",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#operating-systems-and-licenses",
"services": [
- "AzurePolicy",
- "WAF"
+ "AVD"
],
- "severity": "Low",
- "text": "Follow Self-service access policies",
+ "severity": "Medium",
+ "subcategory": "Golden Images",
+ "text": "Determine which OS image/s you will use for Host Pool deployment",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "b49e5b96-0332-44ec-b8cc-13318da61170",
- "link": "https://learn.microsoft.com/purview/concept-policies-devops",
- "service": "Purview",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure VM custom images can be created and stored in different ways: in an Azure Compute Gallery, as a managed image object or as a managed disk in the storage. The recommended way is to use Azure Compute Gallery.",
+ "guid": "5a2adb2c-3e23-426b-b225-ca44e1696fdd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/shared-image-galleries",
"services": [
- "AzurePolicy",
- "WAF"
+ "AVD",
+ "Storage",
+ "VM"
],
"severity": "Low",
- "text": "Follow DevOps policies",
+ "subcategory": "Golden Images",
+ "text": "Select the proper store for custom images",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If custom images will be used, plan for an automated build process. If no pre-existing software factory exists, consider using Custom Image Templates and/or Azure Image Builder to automate the build process.",
+ "guid": "9bd7bb01-2f7b-495e-86e1-54e2aa359282",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/create-custom-image-templates",
"services": [
- "ACR",
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Enable zone redundancy for Azure Cache for Redis. Azure Cache for Redis supports zone redundant configurations in the Premium and Enterprise tiers. A zone redundant cache can place its nodes across different Azure Availability Zones in the same region. It eliminates data center or AZ outage as a single point of failure and increases the overall availability of your cache.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Golden Images",
+ "text": "Design your build process for custom images",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "There are some known best practices and recommendations for the golden image customization, be sure to check the referenced article.",
+ "guid": "deace4cb-1dec-44c6-90c3-fc14eebb36a3",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-golden-image",
"services": [
- "Storage",
- "WAF"
+ "AVD"
],
"severity": "Medium",
- "text": "Configure data persistence for an Azure Cache for Redis instance. Because your cache data is stored in memory, a rare and unplanned failure of multiple nodes can cause all the data to be dropped. To avoid losing data completely, Redis persistence allows you to take periodic snapshots of in-memory data, and store it to your storage account.",
- "waf": "Reliability"
+ "subcategory": "Golden Images",
+ "text": "If custom image will be used, check recommended best practices for AVD on how to build custom image",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "FSLogix stack installed in AVD session hosts does not provide auto-update capability. For this reason, it is recommended to download the latest version of FSLogix and include in the golden image update process.",
+ "guid": "ed5c9027-dd1a-4343-86ca-52b199223186",
+ "link": "https://learn.microsoft.com/fslogix/how-to-install-fslogix",
"services": [
- "Storage",
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "Use Geo-redundant storage account to persist Azure Cache for Redis data, or zonally redundant where geo-redundancy is not available",
+ "severity": "High",
+ "subcategory": "Golden Images",
+ "text": "Include the latest version of FSLogix in the golden image update process",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "This tool-set has been created to automatically apply setting referenced in white paper 'Optimizing Windows 10, version 2004 for a Virtual Desktop Infrastructure (VDI) role': https://docs.microsoft.com/windows-server/remote/remote-desktop-services/rds-vdi-recommendations-2004. Usage of the tool and/or optimizations mentioned in the white-paper should be considered. ",
+ "guid": "829e3fec-2183-4687-a017-7a2b5945bda4",
+ "link": "https://github.com/The-Virtual-Desktop-Team/Virtual-Desktop-Optimization-Tool",
"services": [
- "ASR",
- "WAF"
+ "AVD",
+ "RBAC"
],
- "severity": "Medium",
- "text": "Configure passive geo-replication for Premium Azure Cache for Redis instances. Geo-replication is a mechanism for linking two or more Azure Cache for Redis instances, typically spanning two Azure regions. Geo-replication is designed mainly for cross-region disaster recovery. Two Premium tier cache instances are connected through geo-replication in a way that provides reads and writes to your primary cache, and that data is replicated to the secondary cache.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Golden Images",
+ "text": "Evaluate the usage of Virtual-Desktop-Optimization-Tool",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Automatic instance repairs ensure that unhealthy instances are promptly identified and replaced, maintaining a set of healthy instances within your scale set.",
- "guid": "7e13c105-675c-41e9-95b4-59837ff7ae7c",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs",
- "service": "VMSS",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If OneDrive is used and included in a golden image, be sure to follow the configuration procedure reported in the companion article in the 'More Info' section. Not in scope in this AVD checklist, but OneDrive optimizations like 'Known Folder Redirection' and 'Files On-Demand' should be evaluated used to reduce the space used in FSLogix profiles and provide a better user experience. OneDrive today is not supported for Remote Apps.",
+ "guid": "e3d3e084-4276-4d4b-bc01-5bcf219e4a1e",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/install-office-on-wvd-master-image#install-onedrive-in-per-machine-mode",
"services": [
- "VM",
- "WAF"
+ "AVD",
+ "Storage"
],
"severity": "Low",
- "text": "Enable automatic instance repairs for enhanced VM Scale Sets resiliency",
- "waf": "Reliability"
+ "subcategory": "Golden Images",
+ "text": "Determine if Microsoft OneDrive will be part of AVD deployment",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Ensure that Azure Backup is utilized appropriately to meet your organization's resiliency requirements for Azure virtual machines (VMs).",
- "guid": "4d874a74-8b66-42d6-b150-512a66498f6d",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-vms-introduction",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Be sure to review the requirements and configuration procedure contained in the companion article in the 'More Info' column. Since Teams automatic updates will be disabled, it is recommended to check and include Teams latest version in the golden image update process.",
+ "guid": "b5887953-5d22-4788-9d30-b66c67be5951",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/teams-on-AVD",
"services": [
- "VM",
- "WAF",
- "Backup"
+ "AVD"
],
- "severity": "High",
- "text": "Consider Azure Backup to meet your resiliency requirements for Azure VMs",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Golden Images",
+ "text": "Determine if Microsoft Teams will be part of AVD deployment",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Single Instance VMs using Premium SSD or Ultra Disk for all Operating System Disks and Data Disks are guaranteed to have Virtual Machine Connectivity of at least 99.9%",
- "guid": "8052d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD can support users with different language and localization requirements in the same host pool. This can be done customizing golden images to ensure users can select whichever language they need. The procedure to configure additional language packs in Windows 11 is documented in the reference article.",
+ "guid": "7c336f3b-822a-498e-8cd1-667d1150df4a",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/windows-11-language-packs",
"services": [
- "VM",
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Use Premium or Ultra disks for production VMs",
+ "severity": "Low",
+ "subcategory": "Golden Images",
+ "text": "Assess the requirement to support multiple languages",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "Azure automatically replicates managed disks within a region to ensure data durability and protect against single-point failures.",
- "guid": "b31e38c3-f298-412b-8363-cffe179b599d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "It is highly recommended to use separate storage accounts/shares to store MSIX packages. If necessary, storage can scale out independently and not being impacted by profile I/O activities. Azure offers multiple storage options that can be used for MISX app attach. We recommend using Azure Files or Azure NetApp Files as those options offer the best value between cost and management overhead. ",
+ "guid": "90083845-c587-4cb3-a1ec-16a1d076ef9f",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-file-share",
"services": [
- "VM",
- "WAF"
+ "Cost",
+ "AVD",
+ "Storage"
],
- "severity": "High",
- "text": "Ensure Managed Disks are used for all VMs",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "MSIX & AppAttach",
+ "text": "Do not use the same storage account/share as FSLogix profiles",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Temporary disks are intended for short-term storage of non-persistent data such as page files, swap files, or SQL Server tempdb. Storing persistent data on temporary disks can lead to data loss during maintenance events or VM redeployment.",
- "guid": "e0d5973c-d4ce-432c-8881-37f6f7c4c0d4",
- "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview#temporary-disk",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "In the referenced article, we reported few but important performance considerations for MSIX usage in AVD context, be sure to carefully review.",
+ "guid": "241addce-5793-477b-adb3-751ab2ac1fad",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-file-share",
"services": [
- "Storage",
- "VM",
- "WAF",
- "SQL"
+ "AVD"
],
"severity": "Medium",
- "text": "Do not use the Temp disk for anything that is not acceptable to be lost",
- "waf": "Reliability"
+ "subcategory": "MSIX & AppAttach",
+ "text": "Review performance considerations for MSIX",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Co-locate your compute, storage, networking, and data resources across an availability zone, and replicate this arrangement in other availability zones.",
- "guid": "e514548d-2447-4ec6-9138-b8200f1ce16e",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "MSIX app attach requires read-only permissions to access the file share. If you're storing your MSIX applications in Azure Files, then for your session hosts, you'll need to assign all session host VMs both storage account role-based access control (RBAC) and file share New Technology File System (NTFS) permissions on the share.",
+ "guid": "66e15d4d-5a2a-4db2-a3e2-326bf225ca41",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-file-share",
"services": [
+ "AVD",
"Storage",
- "ACR",
"VM",
- "WAF"
+ "RBAC"
],
"severity": "Medium",
- "text": "Leverage Availability Zones for your VMs in regions where they are supported",
- "waf": "Reliability"
+ "subcategory": "MSIX & AppAttach",
+ "text": "Check proper session host permissions for MSIX share",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Use at least two VMs in Availability Sets to isolate VMs on different fault and update domains.",
- "guid": "5a785d6f-e96c-496a-b884-4cf3b2b38c88",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "3rd-party software vendor must provide a MSIX package, it is not recommended for customer to attempt the conversion procedure without proper support from the application owner.",
+ "guid": "bd362caa-ab79-4b19-adab-81932c9fc9d1",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-faq",
"services": [
- "VM",
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "For regions that do not support Availability Zones deploy VMs into Availability Sets",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "MSIX & AppAttach",
+ "text": "MSIX packages for 3rd-party applications",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "description": "Azure provides multiple options for VM redundancy to meet different requirements (Availability Zones, Virtual Machine Scale Sets, Availability Sets, Azure Site Recovery)",
- "guid": "6ba2c021-4991-414a-9d3c-e574dccbd979",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "MSIX app attach doesn't support auto-update for MSIX applications, so they should be disabled.",
+ "guid": "bb88037f-5e6b-4fbb-aed5-03547cc447e8",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-faq",
"services": [
- "ASR",
- "VM",
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Avoid running a production workload on a single VM",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "MSIX & AppAttach",
+ "text": "Disable auto-update for MSIX packages",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Site Recovery enables you to achieve low RTO (Recovery Time Objective) for your Azure and hybrid VMs by providing continuous replication and failover capabilities.",
- "guid": "2a6bcca2-b5fe-4a1e-af3d-d95d48c7c891",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "In order to leverage MSIX & App Attach, guest OS image for AVD Host pool must be Windows 10/11 Enterprise or Windows 10/11 Enterprise Multi-session, version 2004 or later.",
+ "guid": "26128a71-f0f1-4cac-9d9e-f1d5e832e42e",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/app-attach-faq",
"services": [
- "ASR",
- "AVS",
- "VM",
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "For Azure and on-premises VMs (Hyper-V/Phyiscal/VMware) with low RTO requirements use Azure Site Recovery",
+ "severity": "Medium",
+ "subcategory": "MSIX & AppAttach",
+ "text": "Review operating systems support",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "By using Capacity Reservations, you can effectively manage capacity for critical workloads, ensuring resource availability in specified regions.",
- "guid": "bd7bb012-f7b9-45e0-9e15-8e3ea3992c2d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/capacity-reservation-overview",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Once selected the VM SKU that will be used for Host Pool deployment, it is recommended to use Gen2 type of the SKU for higher security and improved capabilities.",
+ "guid": "e4633254-3185-40a1-b120-bd563a1c8e9d",
+ "link": "https://docs.microsoft.com/azure/virtual-machines/generation-2",
"services": [
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Low",
- "text": "Use Capacity Reservations for critical workloads that require guaranteed capacity",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Session Host",
+ "text": "Evaluate the usage of Gen2 VM for Host Pool deployment",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "By ensuring that the necessary quotas are increased in your DR region before testing failover with ASR, you can avoid any potential resource constraints during the recovery process for failed over VMs.",
- "guid": "e6e2065b-3a76-4af4-a691-e8939ada4666",
- "link": "https://learn.microsoft.com/azure/quotas/per-vm-quota-requests",
- "service": "VM",
+ "category": "Compute",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "MMR redirects the media content from Session Host to your local machine for faster processing and rendering. It only works when you play media content on Microsoft Edge or Google Chrome. See linked URL for more details.",
+ "guid": "adecb27f-dc40-40f5-aca2-0090f633b1c9",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/multimedia-redirection",
"services": [
- "ASR",
- "VM",
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "Increase quotas in DR region before testing failover with ASR",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Session Host",
+ "text": "Consider using MMR (MultiMedia Redirection) to get better video performance on browser",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Scheduled Events is an Azure Metadata Service that provides information about upcoming maintenance events for virtual machines (VMs). By leveraging Scheduled Events, you can proactively prepare your applications for VM maintenance, minimizing disruption and improving the availability of your VMs.",
- "guid": "6d3b475a-5c7a-4cbe-99bb-e64dd8902e87",
- "link": "https://learn.microsoft.com/azure/virtual-machines/windows/scheduled-events",
- "service": "VM",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "A host pool is a collection of Azure virtual machines that register to Azure Virtual Desktop as session hosts. A host pool can be one of two types: Personal and Pooled. Which type to use, and how many, is a key design decision that must be documented and validated. See companion article in 'More Info' column for more details.",
+ "guid": "8468c55a-775c-46ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/terminology#host-pools",
"services": [
- "VM",
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Low",
- "text": "Utilize Scheduled Events to prepare for VM maintenance",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Determine the Host Pool type to use",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "description": "Use Zone-redundant Storage (ZRS) in the primary region for scenarios that require high availability and for restricting replication to a particular country or region. For protection against regional disasters, use Geo-zone-redundant Storage (GZRS), which combines ZRS in the primary region with geo-replication to a secondary region?.",
- "guid": "48c7c891-dcb1-4f7d-9769-ae568ba38d4a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Use your design criteria to determine the number of Host Pools to deploy. This will be based on factors such as different OS images, multi-region support, guest VM hardware differences (such as GPU support or no), different user expectations and uptime requirements (examples might be 'Executives', 'Office Workers', 'Developers', etc.), and Host Pool RDP settings (such as drive redirection support). These will determine the number of host pools as well as how many hosts will be in each pool.",
+ "guid": "4e98495f-d3c0-4af2-aa59-a793395a32a7",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/terminology?WT.mc_id=Portal-fx#host-pools",
"services": [
- "Storage",
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Medium",
- "text": "Choose the most appropriate data redundancy option for Azure Storage based on your requirements",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Estimate the number of different Host Pools to deploy ",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Assigning a Delete lock to your storage account helps protect the availability of your data, minimizing the risk of disruptions to your business operations.",
- "guid": "85e2213d-bd7b-4b01-8f7b-95e06e158e3e",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Confirm that the difference between automatic and direct assignment is well understood and the selected option is appropriate for the scenario in question. Automatic is the default setting.",
+ "guid": "b38b875b-a1cf-4204-a901-3a5d3ce474db",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/configure-host-pool-personal-desktop-assignment-type",
"services": [
- "Storage",
- "WAF"
+ "AVD"
],
"severity": "Low",
- "text": "Apply a Delete lock to prevent accidental or malicious deletion of storage accounts",
- "waf": "Reliability"
+ "subcategory": "Capacity Planning",
+ "text": "For Personal Host Pool type, select the proper assignment type",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "description": "Container soft delete protects your data from being accidentally deleted by maintaining the deleted data in the system for a specified period of time.",
- "guid": "a3992c2d-e6e2-4065-a3a7-6af4a691e893",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Check which one to use and available options, autoscale ignores existing load-balancing algorithms.",
+ "guid": "cbd8682a-6abc-4a2a-9fda-1dbf3dc95d48",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/host-pool-load-balancing",
"services": [
- "Storage",
- "WAF"
+ "AVD"
],
"severity": "Low",
- "text": "Enable soft delete for Storage Account Containers",
- "waf": "Reliability"
+ "subcategory": "Capacity Planning",
+ "text": "For Pooled Host Pool type, select the best load balancing method",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Blob soft delete protects an individual blob and its versions, snapshots, and metadata from accidental deletes or overwrites by maintaining the deleted data in the system for a specified period of time.",
- "guid": "9ada4666-7e13-4c10-96b9-153d89f89dc7",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "The number of cores increase, the system's synchronization overhead also increases. Especially for multiple user's sign-in simultaneously. Make sure not to use a VM that is too large for the session host",
+ "guid": "b3724959-4943-4577-a3a9-e10ff6345f24",
+ "link": "https://learn.microsoft.com/windows-server/remote/remote-desktop-services/virtual-machine-recs",
"services": [
- "Storage",
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Low",
- "text": "Enable soft delete for blobs",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Capacity Planning",
+ "text": "For Pooled Host Pool type, VMs shouldn't have more than 32 cores",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Backup enhanced soft delete provides critical protection against ransomware attacks by retaining deleted backups, enabling recovery from potential ransomware encryption or deletion.",
- "guid": "b44be3b1-a27f-48b9-b91b-e1038df03a82",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about",
- "service": "Azure Backup",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD does not support assigning both the RemoteApp and Desktop Application Group (DAG) in a single host pool to the same set of users. Doing so will cause a single user to have two user sessions in a single host pool. Users aren't supposed to have two active sessions at the same time in the same host pool using the same profile.",
+ "guid": "b384b7ed-1cdd-457e-a2cd-c8d4d55bc144",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/terminology?WT.mc_id=Portal-fx#application-groups",
"services": [
- "Backup",
- "WAF"
+ "AVD",
+ "Storage"
],
- "severity": "Medium",
- "text": "Enable Azure Backup enhanced soft delete for improved data protection and recovery",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Do not use the same Host Pool to offer both full desktops (DAG) and Remote Apps to the same set of users",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Backup's multi-user authorization enables fine-grained control over user access to backup resources, allowing you to restrict privileges and ensure proper authentication and authorization for backup operations.",
- "guid": "2cd463cb-bbc8-4ac2-a9eb-c92a43da1dae",
- "link": "https://learn.microsoft.com/azure/backup/multi-user-authorization-concept",
- "service": "Azure Backup",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "There is a limit of 500 Application Groups that can be created in AVD for each Microsoft Entra ID (former Azure AD) tenant. The limit can be increased (see the companion link for details) but it is not recommended.",
+ "guid": "971cc4a4-b1f7-4c12-90e0-1ad96808f00c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#azure-virtual-desktop-service-limits",
"services": [
- "Backup",
- "WAF"
+ "AVD",
+ "Entra",
+ "ACR"
],
- "severity": "Low",
- "text": "Implement multi-user authorization for Azure Backup to ensure secure and controlled access to backup resources",
+ "severity": "Medium",
+ "subcategory": "Capacity Planning",
+ "text": "Estimate the number of Application Groups required across all Host Pools in the Microsoft Entra ID tenant",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Immutable Storage provides an additional layer of security by ensuring that backup data stored in the vault cannot be modified or deleted for a specified retention period. This helps safeguard your backups from ransomware attacks that may attempt to compromise or manipulate your backup data.",
- "guid": "2cc88147-0607-4c1c-aa0e-614658dd458e",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-concept?source=recommendations&tabs=recovery-services-vault",
- "service": "Azure Backup",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Applications are grouped under Application Groups as containers for publishing and assigning permissions: we recommend that you do not publish more than 50 applications per application group.",
+ "guid": "fa9f2895-473d-439b-ab8e-5a5cf92c7f32",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/windows-virtual-desktop#considerations",
"services": [
- "Storage",
- "Backup",
- "WAF"
+ "AVD"
],
"severity": "Low",
- "text": "Implement Immutable Storage for your vaults to protect against ransomware and prevent unauthorized modifications to backups",
+ "subcategory": "Capacity Planning",
+ "text": "Estimate the number of Applications for each Application Group",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "To eliminate a single point of failure in your on-premises DNS services and ensure reliable DNS resolution during business continuity and disaster recovery scenarios, it is recommended to utilize Azure DNS Private Resolvers in multiple regions. By deploying two or more Azure DNS private resolvers across different regions, you can enable DNS failover and achieve resiliency in your DNS infrastructure.",
- "guid": "43da1dae-2cc8-4814-9060-7c1cca0e6146",
- "link": "https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover",
- "service": "DNS",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "FSLogix is not required for Personal Host Pools since each VM is statically assigned to a single user, then no immediate needs for a roaming profile solution. In some usage scenarios FSLogix can help. For example, a VM can be re-assigned, or user moved to another desktop, or roaming profile can be used to save user profile in a different location for DR purposes.",
+ "guid": "38b19ab6-0693-4992-9394-5590883916ec",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/configure-host-pool-personal-desktop-assignment-type?tabs=azure#reassign-a-personal-desktop",
"services": [
- "ASR",
- "ACR",
- "DNS",
- "WAF"
+ "AVD",
+ "Storage",
+ "VM"
],
"severity": "Low",
- "text": "Implement DNS Failover using Azure DNS Private Resolvers",
+ "subcategory": "Capacity Planning",
+ "text": "Evaluate the usage of FSLogix for Personal Host Pools",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "Use an on-premises data gateway cluster to avoid single points of failure and to load balance traffic across gateways.",
- "guid": "89f89dc7-b44b-4e3b-8a27-f8b9e91be103",
- "link": "https://learn.microsoft.com/data-integration/gateway/service-gateway-high-availability-clusters",
- "service": "Data Gateways",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Use the link provided to set a starting point for SKU decision, then validate using a performance test. Ensure a minimum of four cores for Production is selected per Session Host (multi-session)",
+ "guid": "e1112dbd-7ba0-412e-9b94-ef6e047d2ea2",
+ "link": "https://docs.microsoft.com/windows-server/remote/remote-desktop-services/virtual-machine-recs",
"services": [
- "ACR",
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Medium",
- "text": "Use on-premises data gateway clusters to ensure high availability for business-critical data",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Run workload performance test to determine the best Azure VM SKU and size to use",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "description": "When choosing the best option for deploying NVAs in Azure, it is crucial to consider the vendor's recommendations and validate that the specific design has been vetted and validated by the NVA vendor. The vendor should also provide the necessary NVA configuration for seamless integration in Azure.",
- "guid": "8b1188b3-c6a4-46ce-a544-451e192d3442",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "It is critical to check AVD capacity and limits reported in the referenced article. Additional limits and thresholds apply for network, compute, storage and service management. ",
+ "guid": "992b1cd6-d2f5-44b2-a769-e3a691e8838a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/windows-virtual-desktop#considerations",
"services": [
- "NVA",
- "WAF"
+ "AVD",
+ "Storage"
],
"severity": "High",
- "text": "Deploy Network Virtual Appliances (NVAs) in a vendor supported configuration for High Availability",
+ "subcategory": "Capacity Planning",
+ "text": "Verify AVD scalability limits for the environment",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Host Pools with GPU require special configuration, please be sure to review the referenced article.",
+ "guid": "c936667e-13c0-4056-94b1-e945a459837e",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/configure-vm-gpu",
"services": [
- "SAP",
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "Azure Center for SAP solutions (ACSS) is an Azure offering that makes SAP a top-level workload on Azure. ACSS is an end-to-end solution that enables you to create and run SAP systems as a unified workload on Azure and provides a more seamless foundation for innovation. You can take advantage of the management capabilities for both new and existing Azure-based SAP systems.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Capacity Planning",
+ "text": "Determine if Session Hosts will require GPU",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Whenever is possible, it is recommended to leverage VM SKUs with Accelerated Networking feature. This feature does require specific VM SKU/size and OS versions, please see the list and requirement in the companion article.",
+ "guid": "b47a393a-0803-4272-a479-8b1578b219a4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Medium",
- "text": "Azure supports automating SAP deployments in Linux and Windows. SAP Deployment Automation Framework is an open-source orchestration tool that can deploy, install, and maintain SAP environments.",
- "training": "https://github.com/Azure/sap-automation",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Capacity Planning",
+ "text": "Use Azure VM SKUs able to leverage Accelerated Networking",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "For proper planning and deployment, it is important to assess the maximum number of concurrent and total users for each Host Pool. Additionally, users from different regions may require different Host Pools to ensure the best user experience.",
+ "guid": "bb91a33d-90ca-4e2c-a881-3706f7c0cb9f",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/overview",
"services": [
- "SAP",
- "WAF"
+ "AVD"
],
"severity": "Medium",
- "text": "Perform a point-in-time recovery for your production databases at any point and in a time frame that meets your RTO; point-in-time recovery typically includes operator errors deleting data either on the DBMS layer or through SAP, incidentally",
- "waf": "Reliability"
+ "subcategory": "Clients & Users",
+ "text": "Assess how many users will connect to AVD and from which regions",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "The dependencies on resources external to the AVD pool should be assessed and reviewed, for example Active Directory, external file shares or other storage, on-premises services and resources, network infrastructure components like VPN and or ExpressRoute, external services and 3rd-party components. For all these resources, latency from the AVD Host Pool needs to be evaluated and connectivity considered. Additionally, BCDR considerations need to be applied to these dependencies as well.",
+ "guid": "6abca2a4-fda1-4dbf-9dc9-5d48c7c791dc",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/wvd/windows-virtual-desktop?toc=%2Fazure%2Fvirtual-desktop%2Ftoc.json&bc=%2Fazure%2Fvirtual-desktop%2Fbreadcrumb%2Ftoc.json",
"services": [
- "Backup",
- "WAF"
+ "ExpressRoute",
+ "AVD",
+ "VPN",
+ "Storage"
],
"severity": "Medium",
- "text": "Test the backup and recovery times to verify that they meet your RTO requirements for restoring all systems simultaneously after a disaster.",
- "waf": "Reliability"
+ "subcategory": "Clients & Users",
+ "text": "Assess external dependencies for each Host Pool",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "SAP",
- "services": [
- "Storage",
- "Backup",
- "WAF",
- "SQL",
- "ASR",
- "SAP"
- ],
- "severity": "High",
- "text": "You can replicate standard storage between paired regions, but you can't use standard storage to store your databases or virtual hard disks. You can replicate backups only between paired regions that you use. For all your other data, run your replication by using native DBMS features like SQL Server Always On or SAP HANA System Replication. Use a combination of Site Recovery, rsync or robocopy, and other third-party software for the SAP application layer.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "Reliability"
- },
- {
- "checklist": "WAF checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD offers a variety of client types (fat, thin, web) to connect over different platforms (Windows, MacOS, iOS, Android). Review limitations of each client and compare multiple options when possible.",
+ "guid": "a1f6d565-99e5-458b-a37d-4985e1112dbd",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/users/connect-windows",
"services": [
- "SAP",
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "When using Azure Availability Zones to achieve high availability, you must consider latency between SAP application servers and database servers. For zones with high latencies, operational procedures need to be in place to ensure that SAP application servers and database servers are running in the same zone at all times.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Clients & Users",
+ "text": "Review user client OS used and AVD client type",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Depending on the user locations, and AVD region deployment, users may have a non-optimal experience, hence is important to test as soon as possible in a small PoC environment. Run the 'Azure Virtual Desktop Experience Estimator' tool to select the best Azure region to deploy Host Pools. Beyond 150ms latency, user experience may be not optimal.",
+ "guid": "d2f54b29-769e-43a6-a1e8-838ac936667e",
+ "link": "https://azure.microsoft.com/services/virtual-desktop/assessment/",
"services": [
- "VPN",
- "ASR",
- "ExpressRoute",
- "WAF"
+ "AVD"
],
"severity": "High",
- "text": "Set up ExpressRoute connections from on-premises to the primary and secondary Azure disaster recovery regions. Also, as an alternative to using ExpressRoute, consider setting up VPN connections from on-premises to the primary and secondary Azure disaster recovery regions.",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "waf": "Reliability"
+ "subcategory": "Clients & Users",
+ "text": "Run a PoC to validate end-to-end user experience and impact of network latency",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "RDP settings can currently only be configured at the host pool level, not per user/group. If different settings are required for different set of users, it is recommended to create multiple Host Pools.",
+ "guid": "3b365a5c-7acb-4e48-abe5-4cd79f2e8776",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/customize-rdp-properties",
"services": [
- "ACR",
- "AKV",
- "WAF"
+ "AVD"
],
"severity": "Low",
- "text": "Replicate key vault contents like certificates, secrets, or keys across regions so you can decrypt data in the DR region.",
- "waf": "Reliability"
- },
- {
- "checklist": "WAF checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
- "service": "SAP",
- "services": [
- "ASR",
- "VNet",
- "SAP",
- "WAF"
- ],
- "severity": "Medium",
- "text": "Peer the primary and disaster recovery virtual networks. For example, for HANA System Replication, an SAP HANA DB virtual network needs to be peered to the disaster recovery site's SAP HANA DB virtual network.",
- "waf": "Reliability"
+ "subcategory": "Clients & Users",
+ "text": "Assess and document RDP settings for all user groups",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD is a non-regional service, Host Pools can be created in any region, automatic redirection from closest front-end will happen automatically.",
+ "guid": "42e52f47-21d9-428c-8b1b-d521e44a29a9",
+ "link": "https://azure.microsoft.com/global-infrastructure/services/?products=virtual-desktop",
"services": [
- "Storage",
- "SAP",
- "WAF"
+ "AVD"
],
- "severity": "Low",
- "text": "If you use Azure NetApp Files storage for your SAP deployments, at a minimum, create two Azure NetApp Files accounts in the Premium tier, in two regions.",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "General",
+ "text": "Determine in which Azure regions AVD Host Pools will be deployed.",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD must store metadata to support the service; this is stored in the specified geography. However, this is independent of the regions where Host Pools are located.",
+ "guid": "bad37ead-53cc-47ce-8d7a-aab3571449ab",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/data-locations",
"services": [
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Native database replication technology should be used to synchronize the database in a HA pair.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "General",
+ "text": "Determine metadata location for AVD service",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
- "service": "SAP",
+ "category": "Foundation",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Check for specific VM SKUs, especially if you need GPU or high-specs SKUs, and eventually Azure NetApp Files if used.",
+ "guid": "8053d89e-89dc-47b3-9be2-a1a27f7a9e91",
+ "link": "https://docs.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"services": [
- "VNet",
- "WAF"
+ "AVD",
+ "Storage",
+ "VM"
],
- "severity": "High",
- "text": "The CIDR for the primary virtual network (VNet) shouldn't conflict or overlap with the CIDR of the DR site's VNet",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "severity": "Low",
+ "subcategory": "General",
+ "text": "Check Azure quotas and availability for specific VM sizes and types in the selected regions",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AD DCs in Azure are recommended (at least two in different AZ) to reduce latency for users logging into AVD session hosts, and eventually for Azure NetApp Files and AD integration. A DC need to be able to talk to DCs for ALL child domains. As alternative, on-premise connectivity must be used to reach AD DCs.",
+ "guid": "c14aea7e-65e8-4d9a-9aec-218e6436b073",
+ "link": "https://docs.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
"services": [
- "ASR",
+ "AVD",
"Entra",
- "VM",
- "WAF"
+ "Storage",
+ "VNet"
],
- "severity": "High",
- "text": "Use Site Recovery to replicate an application server to a DR site. Site Recovery can also help with replicating central-services cluster VMs to the DR site. When you invoke DR, you'll need to reconfigure the Linux Pacemaker cluster on the DR site (for example, replace the VIP or SBD, run corosync.conf, and more).",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Create at least two Active Directory Domain Controllers (DCs) in Azure VNet environment close to AVD Host Pool",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Recommended to create a separate OU per Host Pool under a separate OU hierarchy. These OUs will contain machine accounts of AVD Session Hosts. ",
+ "guid": "6db55f57-9603-4334-adf9-cc23418db612",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/create-host-pools-azure-marketplace",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "High",
- "text": "Consider the availability of SAP software against single points of failure. This includes single points of failure within applications such as DBMSs utilized in SAP NetWeaver and SAP S/4HANA architectures, SAP ABAP and ASCS + SCS. Also, other tools such as SAP Web Dispatcher.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Create a specific OU in Active Directory for each Host Pool",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Carefully review, and potentially block/filter inheritance of GPOs to the OUs containing AVD Host Pools. ",
+ "guid": "7126504b-b47a-4393-a080-327294798b15",
+ "link": "https://docs.microsoft.com/previous-versions/windows/desktop/Policy/group-policy-hierarchy",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "High",
- "text": "For SAP and SAP databases, consider implementing automatic failover clusters. In Windows, Windows Server Failover Clustering supports failover. In Linux, Linux Pacemaker or third-party tools like SIOS Protection Suite and Veritas InfoScale support failover.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Review Domain GPOs that will be applied to OU and impacting Host Pool Session Hosts functionalities",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If Active Directory Domain GPOs are used, it is recommended to configure FSLogix using the built-in provided GPO ADMX template referenced in the companion article in the 'More Info' column",
+ "guid": "2226a8e3-50a4-4ac3-8bd6-ee150553051f",
+ "link": "https://learn.microsoft.com/fslogix/how-to-use-group-policy-templates",
"services": [
- "Storage",
- "VM",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "High",
- "text": "Azure doesn't support architectures in which the primary and secondary VMs share storage for DBMS data. For the DBMS layer, the common architecture pattern is to replicate databases at the same time and with different storage stacks than the ones that the primary and secondary VMs use.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Configure FSLogix settings using the built-in provided GPO ADMX template",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "It is recommended to have a specific dedicated account with minimal permissions, and without the default 10 joins limitation. Review the companion article for more details.",
+ "guid": "347dc560-28a7-41ff-b1cd-15dd2f0d5e77",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#session-hosts",
"services": [
- "Storage",
- "SAP",
- "WAF"
+ "AVD",
+ "Entra",
+ "VM"
],
- "severity": "High",
- "text": "The DBMS data and transaction/redo log files are stored in Azure supported block storage or Azure NetApp Files. Azure Files or Azure Premium Files isn't supported as storage for DBMS data and/or redo log files with SAP workload.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Create a dedicated user account with only permissions to join VM to the domain",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Avoid granting access per user, instead use AD groups and replicate them using Active Directory Connector (ADC) in Microsoft Entra ID (former Azure AD). ",
+ "guid": "2d41e361-1cc5-47b4-a4b1-410d43958a8c",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/manage-app-groups",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "High",
- "text": "You can use Azure shared disks in Windows for ASCS + SCS components and specific high-availability scenarios. Set up your failover clusters separately for SAP application layer components and the DBMS layer. Azure doesn't currently support high-availability architectures that combine SAP application layer components and the DBMS layer into one failover cluster.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Create a domain user group for each set of users that will be granted access to each Host Pool Application Group (DAG or RAG)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If Azure Files Active Directory (AD) integration is used, as part of the configuration procedure, an AD account to represent the storage account (file share) will be created. You can choose to register as a computer account or service logon account, see FAQ for details. For computer accounts, there is a default password expiration age set in AD at 30 days. Similarly, the service logon account may have a default password expiration age set on the AD domain or Organizational Unit (OU). For both account types, we recommend you check the password expiration age configured in your AD environment and plan to update the password of your storage account identity of the AD account before the maximum password age. You can consider creating a new AD Organizational Unit (OU) in AD and disabling password expiration policy on computer accounts or service logon accounts accordingly.",
+ "guid": "2289b3d6-b57c-4fc6-9546-1e1a3e3453a3",
+ "link": "https://docs.microsoft.com/azure/storage/files/storage-files-identity-ad-ds-enable",
"services": [
- "LoadBalancer",
- "SAP",
- "WAF"
+ "AVD",
+ "Entra",
+ "Storage",
+ "AzurePolicy"
],
"severity": "High",
- "text": "Most failover clusters for SAP application layer components (ASCS) and the DBMS layer require a virtual IP address for a failover cluster. Azure Load Balancer should handle the virtual IP address for all other cases. One design principle is to use one load balancer per cluster configuration. We recommend that you use the standard version of the load balancer (Standard Load Balancer SKU).",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Active Directory",
+ "text": "Review your organization password expiration policy for accounts used by Azure Files AD integration",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "You can configure this using Active Directory Connect (ADC) or Azure AD Domain Services (for hybrid or cloud organizations). Microsoft Entra ID is the new name for Azure Active Directory (Azure AD).",
+ "guid": "5119bf8e-8f58-4542-a7d9-cec166cd072a",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#identity",
"services": [
- "LoadBalancer",
- "WAF"
+ "AVD",
+ "Entra"
],
"severity": "High",
- "text": "Make sure the Floating IP is enabled on the Load balancer",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "subcategory": "Active Directory",
+ "text": "A Windows Server Active Directory forest/domain must be in sync with Microsoft Entra ID",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If Azure Files is used and pre-requisites can be satisfied, it is recommended to configure (Microsoft Entra ID) Kerberos authentication. This configuration will allow to store FSLogix profiles that can be accessed by hybrid user identities from Azure AD-joined session hosts without requiring network line-of-sight to domain controllers.",
+ "guid": "e777fd5e-c5f1-4d6e-8fa9-fc210b88e338",
+ "link": "https://learn.microsoft.com/azure/storage/files/storage-files-identity-auth-hybrid-identities-enable",
"services": [
- "WAF"
+ "AVD",
+ "Entra",
+ "Storage"
],
- "severity": "High",
- "text": "Before you deploy your high-availability infrastructure, and depending on the region you choose, determine whether to deploy with an Azure availability set or an availability zone.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Microsoft Entra ID",
+ "text": "Configure Azure Files share for Microsoft Entra ID (former Azure AD) Kerberos authentication on Microsoft Entra ID Joined scenario",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "An Azure subscription must be parented to the same Microsoft Entra ID (former Azure AD) tenant, that contains a virtual network that either contains or is connected to the Windows Server Active Directory Domain Services or Microsoft Entra ID Domain Services instance.",
+ "guid": "6ceb5443-5125-4922-9442-93bb628537a5",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#identity",
"services": [
+ "AVD",
"Entra",
- "SAP",
- "VM",
- "WAF"
+ "Subscriptions",
+ "VNet"
],
"severity": "High",
- "text": "If you want to meet the infrastructure SLAs for your applications for SAP components (central services, application servers, and databases), you must choose the same high availability options (VMs, availability sets, availability zones) for all components.",
+ "subcategory": "Requirements",
+ "text": "A Microsoft Entra ID tenant must be available with at least one subscription linked",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure Virtual Desktop supports different types of identities depending on which configuration you choose. Please review the supported scenarios mentioned in the 'More Info' article and document the design decision accordingly in the 'Comment' column. Critically, external identities (B2B or B2C) are not supported. Be sure to review also the list of supported scenarios in https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#supported-identity-scenarios.",
+ "guid": "b4ce4781-7557-4a1f-8043-332ae199d44c",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/authentication",
"services": [
- "Entra",
- "RBAC",
- "VM",
- "WAF"
+ "AVD",
+ "Entra"
],
"severity": "High",
- "text": "Do not mix servers of different roles in the same availability set. Keep central services VMs, database VMs, application VMs in their own availability sets",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Requirements",
+ "text": "Review and document your identity scenario",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Users need accounts that are in Microsoft Entra ID (former Azure AD). If you're also using AD DS or Azure AD Domain Services in your deployment of Azure Virtual Desktop, these accounts will need to be hybrid identities, which means the user accounts are synchronized. If you're using Microsoft Entra ID with AD DS, you'll need to configure Azure AD Connect to synchronize user identity data between AD DS and Microsoft Entra ID. If you're using Microsoft Entra ID with Azure AD Domain Services, user accounts are synchronized one way from Microsoft Entra ID to Azure AD Domain Services. This synchronization process is automatic. AVD also supports Microsoft Entra ID native accounts with some restrictions. External identities (B2B or B2C) are not supported.",
+ "guid": "f9b141a8-98a5-435e-9378-97e71ca7da7b",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#supported-identity-scenarios",
"services": [
- "WAF"
+ "AVD",
+ "Entra"
],
"severity": "Medium",
- "text": "You can't deploy Azure availability sets within an Azure availability zone unless you use proximity placement groups.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "Reliability"
+ "subcategory": "Requirements",
+ "text": "Assess User Account types and requirements",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD supports SSO using either Active Directory Federation Services (AD FS) or Microsoft Entra ID (former Azure AD) authentication. The latter is recommended, please check the requirements and limitation in the 'More Info' article. Using AD FS could be a viable choice if already present in the customer environment, it is not recommended to deploy a brand new ADFS infrastructure just for AVD SSO implementation.",
+ "guid": "5f9f680a-ba07-4429-bbf7-93d7071561f4",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/authentication#single-sign-on-sso",
"services": [
- "VM",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "High",
- "text": "When you create availability sets, use the maximum number of fault domains and update domains available. For example, if you deploy more than two VMs in one availability set, use the maximum number of fault domains (three) and enough update domains to limit the effect of potential physical hardware failures, network outages, or power interruptions, in addition to Azure planned maintenance. The default number of fault domains is two, and you can't change it online later.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "Requirements",
+ "text": "If Single-Sign On (SSO) is a requirement, review the supported scenarios and prerequisites",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "VMs can be Windows Active Directory (AD) domain-joined, Hybrid AD-joined, Microsoft Entra ID (former Azure AD) Joined or Azure AD Domain Services joined. Be sure to review supported scenarios, limitations and requirements from the referenced article.",
+ "guid": "ea962a15-9394-46da-a7cc-3923266b2258",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/prerequisites?tabs=portal#supported-identity-scenarios",
"services": [
+ "AVD",
"Entra",
- "SAP",
- "WAF"
+ "VM"
],
"severity": "High",
- "text": "When you use Azure proximity placement groups in an availability set deployment, all three SAP components (central services, application server, and database) should be in the same proximity placement group.",
- "waf": "Reliability"
+ "subcategory": "Requirements",
+ "text": "Select the proper AVD Session Host domain join type",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "category": "Identity",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Compare self-managed Windows Active Directory Domain Services, Microsoft Entra ID (former Azure AD), and managed Azure AD Domain Services (AAD-DS)",
+ "guid": "6f4a1651-bddd-4ea8-a487-cdeb4861bc3b",
+ "link": "https://docs.microsoft.com/azure/active-directory-domain-services/compare-identity-solutions",
"services": [
- "ACR",
- "SAP",
- "WAF"
+ "AVD",
+ "Entra"
],
- "severity": "High",
- "text": "Use one proximity placement group per SAP SID. Groups don't span across Availability Zones or Azure regions",
+ "severity": "Low",
+ "subcategory": "Requirements",
+ "text": "Before using Azure AD Domain Services (AAD-DS) for AVD, be sure to review the limitations.",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD provides administrative templates for Intune and Active Directory GPO. Using these templates it is possible to centrally control several AVD configuration settings: Graphics related data logging, Screen capture protection, RDP Shortpath for managed networks, Watermarking. See companion article in 'More Info' colum for details. NOTE: FSLogix has its own separate template.",
+ "guid": "5549524b-36c0-4f1a-892b-ab3ca78f5db2",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/administrative-template",
"services": [
- "Entra",
- "SAP",
- "WAF"
+ "AVD",
+ "Monitor",
+ "Entra"
],
- "severity": "High",
- "text": "Use one of the following services to run SAP central services clusters, depending on the operating system.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Use built-in provided administrative templates for AVD settings configuration",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Determine if a configuration management tool is already in place to manage Host Pool VM configuration after initial deployment, For example SCCM/SCOM, Intune/ConfigurationManager, 3rd-party solutions.",
+ "guid": "3334fdf9-1c23-4418-8b65-285269440b4b",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/management",
"services": [
- "Entra",
- "VM",
- "WAF"
+ "AVD",
+ "Monitor",
+ "VM"
],
- "severity": "Medium",
- "text": "Azure doesn't currently support combining ASCS and DB HA in the same Linux Pacemaker cluster; separate them into individual clusters. However, you can combine up to five multiple central-services clusters into a pair of VMs.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Plan AVD Session Hosts configuration management strategy",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "We recommend using Microsoft Intune, if requirements can be satisfied, to manage your Azure Virtual Desktop environment. Review supported scenarios and requirements to enable Intune for AVD Session Host management in the referenced article in the More Info column. Document your choice in the 'Comment' column. In that article, review the different requirements and capabilities for single-session https://learn.microsoft.com/mem/intune/fundamentals/windows-virtual-desktop and multi-session https://learn.microsoft.com/mem/intune/fundamentals/windows-virtual-desktop-multi-session AVD.",
+ "guid": "63a08be1-6004-4b4a-a79b-f3239faae113",
+ "link": "https://learn.microsoft.com/mem/intune/fundamentals/azure-virtual-desktop",
"services": [
- "Storage",
- "VM",
- "WAF"
+ "AVD",
+ "Monitor"
],
"severity": "Medium",
- "text": "Deploy both VMs in the high-availability pair in an availability set or in availability zones. These VMs should be the same size and have the same storage configuration.",
- "waf": "Reliability"
+ "subcategory": "Management",
+ "text": "Evaluate Intune for AVD Session Hosts management",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "The scaling tool provides a low-cost automation option for customers who want to optimize their session host VM costs. You can use the scaling tool to schedule VMs to start and stop based on Peak and Off-Peak business hours, scale out VMs based on number of sessions per CPU core, scale in VMs during Off-Peak hours, leaving the minimum number of session host VMs running. Not available yet for Personal Host Pool type.",
+ "guid": "7138b820-102c-4e16-be30-1e6e872e52e3",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/autoscale-scenarios",
"services": [
- "SAP",
- "WAF"
+ "Cost",
+ "AVD",
+ "Monitor",
+ "VM"
],
"severity": "Medium",
- "text": "Azure supports installing and configuring SAP HANA and ASCS/SCS and ERS instances on the same high availability cluster running on Red Hat Enterprise Linux (RHEL).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "subcategory": "Management",
+ "text": "Assess the requirements for host pool auto-scaling capability",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Start VM On Connect lets you reduce costs by enabling end users to turn on their session host virtual machines (VMs) only when they need them. You can then turn off VMs when they're not needed. You can configure Start VM on Connect for personal or pooled host pools using the Azure portal or PowerShell. Start VM on Connect is a host pool wide setting.",
+ "guid": "55f612fe-f215-4f0d-a956-10e7dd96bcbc",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/start-virtual-machine-connect",
"services": [
- "Storage",
- "WAF"
+ "Cost",
+ "AVD",
+ "Monitor",
+ "VM"
],
- "severity": "High",
- "text": "Run all production systems on Premium managed SSDs and use Azure NetApp Files or Ultra Disk Storage. At least the OS disk should be on the Premium tier so you can achieve better performance and the best SLA.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Consider the usage of Start VM on Connect for Personal Host Pools",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "'Start VM On Connect' provides a smart way to automatically start previously stopped Session Hosts but does not provide a mechanism to shut down when not in used. Administrators are encouraged to configure additional policies to sign users out of their sessions and run Azure automation scripts to de-allocate VMs. Users should be not allowed to shut down their Personal Hosts since will not be able to de-allocate Azure VMs, then billing will still be active with no cost reduction.",
+ "guid": "79a686ea-d971-4ea0-a9a8-1aea074c94cb",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/start-virtual-machine-connect-faq#are-vms-automatically-deallocated-when-a-user-stops-using-them",
"services": [
- "Storage",
- "SAP",
- "WAF"
+ "AzurePolicy",
+ "VM",
+ "AVD",
+ "Monitor",
+ "Cost"
],
- "severity": "High",
- "text": "You should run SAP HANA on Azure only on the types of storage that are certified by SAP. Note that certain volumes must be run on certain disk configurations, where applicable. These configurations include enabling Write Accelerator and using Premium storage. You also need to ensure that the file system that runs on storage is compatible with the DBMS that runs on the machine.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Evaluate the implementation of an ad-hoc mechanism to shut down Personal AVD Session Hosts",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure Virtual Desktop billing is mainly based on cost associated to compute, networking and storage resources consumed by Host Pools. In addition to this, costs can be generated by dependent resources, for example VPN or ExpressRoute or vWAN, Active Directory Domain Controllers, DNS, etc. There is no direct cost associated to AVD objects like workspaces, host pools or application groups. To make AVD associated costs more evident and grouped by Host Pool, it is recommended to use 'cm-resource-parent' tag. ",
+ "guid": "51bcafca-476a-48fa-9b91-9645a7679f20",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/tag-virtual-desktop-resources",
"services": [
"Storage",
- "SAP",
- "ASR",
- "WAF"
+ "VPN",
+ "DNS",
+ "AVD",
+ "Monitor",
+ "VWAN",
+ "ExpressRoute",
+ "Cost"
],
- "severity": "High",
- "text": "Consider configuring high availability depending on the type of storage you use for your SAP workloads. Some storage services available in Azure are not supported by Azure Site Recovery, so your high availability configuration may differ.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Review and adopt suggested Azure Tags for Azure Virtual Desktop",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure Advisor analyzes your configurations and telemetry to offer personalized recommendations to solve common problems. With these recommendations, you can optimize your Azure resources for reliability, security, operational excellence, performance, and cost.",
+ "guid": "611dd68c-5a4b-4252-8e44-a59a9c2399c4",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/azure-advisor-recommendations",
"services": [
- "Storage",
- "SAP",
- "WAF"
+ "Cost",
+ "AVD",
+ "Monitor",
+ "Entra"
],
- "severity": "High",
- "text": "Different native Azure storage services (like Azure Files, Azure NetApp Files, Azure Shared Disk) may not be available in all regions. So to have similar SAP setup on the DR region after failover, ensure the respective storage service is offered in DR site.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Periodically check Azure Advisor recommendations for AVD",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Customers have several options: Microsoft Configuration Manager, this article explains how to automatically apply updates to a Azure Virtual Desktop session hosts running Windows 10/11: https://learn.microsoft.com/azure/virtual-desktop/configure-automatic-updates, Microsoft Intune: https://docs.microsoft.com/mem/intune/fundamentals/windows-virtual-desktop-multi-session, Azure Update Management and WSUS for Windows Server OS only (client OS not supported: https://learn.microsoft.com/azure/automation/update-management/operating-system-requirements), 3rd Party tools. Outside an emergency security patching situation, it is recommended to move away from an 'in-place' update strategy patching strategy and adopt a re-imaging approach.",
+ "guid": "04722da2-9c2b-41cd-922f-54b29bade3aa",
+ "link": "https://learn.microsoft.com/mem/intune/fundamentals/azure-virtual-desktop-multi-session",
"services": [
- "SAP",
- "Cost",
- "WAF"
+ "AVD",
+ "Monitor"
],
"severity": "Medium",
- "text": "Automate SAP System Start-Stop to manage costs.",
- "waf": "Cost"
+ "subcategory": "Management",
+ "text": "Plan for a Session Host emergency patching and update strategy",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "The Scheduled Agent Updates feature lets you create up to two maintenance windows per Host Pool to update AVD components at a convenient time. It is recommended to specify maintenance windows then upgrading Session Hosts will not happen during peak business hours. Scheduled Agent Updates is disabled by default. This means that, unless you enable this setting, the agent can get updated at any time by the agent update flighting service.",
+ "guid": "c067939b-e5ca-4698-b9ce-3bd91843e73f",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/scheduled-agent-updates",
"services": [
- "Storage",
- "WAF",
- "Cost",
- "VM",
- "SAP"
+ "AVD",
+ "Monitor"
],
"severity": "Low",
- "text": "In the case of using Azure Premium Storage with SAP HANA, Azure Standard SSD storage can be used to select a cost-conscious storage solution. However, please note that choosing Standard SSD or Standard HDD Azure storage will affect the SLA of the individual VMs. Also, for systems with lower I/O throughput and low latency, such as non-production environments, lower series VMs can be used.",
- "waf": "Cost"
+ "subcategory": "Management",
+ "text": "Configure the Scheduled Agent Updates feature",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Host pools are a collection of one or more identical virtual machines within Azure Virtual Desktop environment. We highly recommend you create a validation host pool where service updates are applied first. This allows you to monitor service updates before the service applies them to your standard or non-validation environment.",
+ "guid": "d1e8c38e-c936-4667-913c-005674b1e944",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/create-validation-host-pool",
"services": [
- "Storage",
- "WAF",
- "Cost",
- "VM",
- "SAP"
+ "AVD",
+ "Monitor",
+ "VM"
],
- "severity": "Low",
- "text": "As a lower-cost alternative configuration (multipurpose), you can choose a low-performance SKU for your non-production HANA database server VMs. However, it is important to note that some VM types, such as E-series, are not HANA certified (SAP HANA Hardware Directory) or cannot achieve storage latency of less than 1ms.",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Create a validation (canary) Host Pool",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "An AVD Host Pool can be deployed in several ways: Azure Portal, ARM templates, Azure CLI tool, Powershell, manual VM creation with registration token, Terraform, 3rd-party tools. It is important to adopt proper method/s to support automatic deployment through automation and CI/CD tools.",
+ "guid": "a459c373-e7ed-4616-83b3-65a917ecbe48",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/wvd/eslz-platform-automation-and-devops",
"services": [
- "RBAC",
- "Subscriptions",
- "WAF"
+ "AVD",
+ "Monitor",
+ "VM"
],
- "severity": "High",
- "text": "Enforce a RBAC model for management groups, subscriptions, resource groups and resources",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Determine Host Pool deployment strategy",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "After you register a VM to a host pool within the Azure Virtual Desktop service, the agent regularly refreshes the VM's token whenever the VM is active. The certificate for the registration token is valid for 90 days. Because of this 90-day limit, we recommend VMs to be online for 20 minutes every 90 days so that the machine can refresh its tokens and update the agent and side-by-side stack components.",
+ "guid": "ebe54cd7-df2e-48bb-ac35-81559bb9153e",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/faq",
"services": [
- "Entra",
- "SAP",
- "WAF"
+ "AVD",
+ "Monitor",
+ "VM"
],
"severity": "Medium",
- "text": "Enforce Principal propagation for forwarding the identity from SAP cloud application to SAP on-premises (Including IaaS) through cloud connector",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
- "waf": "Security"
+ "subcategory": "Management",
+ "text": "Turn on Session Host VMs at least every 90 days for token refresh",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure Virtual Desktop Insights is a dashboard built on Azure Monitor Workbooks that helps IT professionals understand their Azure Virtual Desktop environments. Read the referenced article to learn how to set up Azure Monitor for Azure Virtual Desktop to monitor your AVD environments.",
+ "guid": "63cfff1c-ac59-49ef-8d5a-83dd4de36c1c",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/insights",
"services": [
- "Entra",
- "SAP",
- "WAF"
+ "AVD",
+ "Monitor"
],
- "severity": "Medium",
- "text": "Implement SSO to SAP SaaS applications like SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics and SAP C4C with Azure AD using SAML.",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Enable monitoring for AVD",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Azure Virtual Desktop uses Azure Monitor and Log Analytics for monitoring and alerts like many other Azure services. This lets admins identify issues through a single interface. The service creates activity logs for both user and administrative actions. Each activity log falls under the following categories: Management, Feed, Connections, Host Registration, Errors, Checkpoints. ",
+ "guid": "81770afb-c4c0-4e43-a186-58d2857ed671",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/diagnostics-log-analytics",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Monitor",
+ "VM"
],
"severity": "Medium",
- "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Enable diagnostic settings for Workspaces, Host Pools, Application Groups and Host VMs to Log Analytics workspace",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "See the referenced article and this additional one to setup proper monitoring and alerting for storage: https://docs.microsoft.com/azure/storage/files/storage-troubleshooting-files-performance. ",
+ "guid": "2463cffe-179c-4599-be0d-5973dd4ce32c",
+ "link": "https://docs.microsoft.com/azure/storage/files/storage-files-monitoring?tabs=azure-portal",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Monitor",
+ "Storage"
],
"severity": "Medium",
- "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Create alerts on the profile storage to be alerted in case of high usage and throttling",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "category": "Monitoring and Management",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "You can use Azure Service Health to monitor service issues and health advisories for Azure Virtual Desktop. Azure Service Health can notify you with different types of alerts (for example, email or SMS), help you understand the effect of an issue, and keep you updated as the issue resolves.",
+ "guid": "18813706-f7c4-4c0d-9e51-4548d2457ed6",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/set-up-service-alerts",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Monitor"
],
"severity": "Medium",
- "text": "You can implement SSO to SAP GUI by using SAP NetWeaver SSO or a partner solution.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Configure Azure Service Health for AVD alerts ",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If required to connect to on-premises environment, assess the current connectivity option or plan for the required connectivity (ExpressRoute, Azure S2S or 3rd-party NVA VPN). ",
+ "guid": "dd399cfd-7b28-4dc8-9555-6202bfe4563b",
+ "link": "https://docs.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/",
"services": [
- "SAP",
- "AKV",
- "WAF"
+ "ExpressRoute",
+ "AVD",
+ "VPN",
+ "NVA"
],
"severity": "Medium",
- "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
- "waf": "Security"
+ "subcategory": "Networking",
+ "text": "Determine if hybrid connectivity is required to connect to on-premises environment",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD Host Pools can be deployed in either Azure Virtual WAN or traditional 'Hub & Spoke' network topologies. It is recommended to deploy each Host Pool in a separate 'spoke' VNet, using 'hub' is not recommended.",
+ "guid": "c8639648-a652-4d6c-85e5-02965388e5de",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/wvd/eslz-network-topology-and-connectivity",
"services": [
- "SAP",
- "AKV",
- "WAF"
+ "AVD",
+ "VWAN",
+ "VNet"
],
"severity": "Medium",
- "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
- "waf": "Security"
+ "subcategory": "Networking",
+ "text": "Determine Azure Virtual Network (VNet) placement for each AVD Host Pool",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Evaluate the bandwidth requirements, ensure VPN/ER bandwidth will be enough, ensure proper routing and firewall rules are in place, test end-to-end latency. ",
+ "guid": "d227dd14-2b06-4c21-a799-9a646f4389a7",
+ "link": "https://docs.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/",
"services": [
- "SAP",
- "WAF"
+ "VPN",
+ "AVD"
],
"severity": "Medium",
- "text": "Implement SSO by using OAuth for SAP NetWeaver to allow third-party or custom applications to access SAP NetWeaver OData services.",
- "waf": "Security"
+ "subcategory": "Networking",
+ "text": "Assess which on-premises resources are required from AVD Host Pools",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Several options are available. You can use Azure Firewall or equivalent 3rd-party NVA, Network Security Group (NSG) and/or Proxy servers. NSG is not able to enable/disable by URL, only ports and protocols. Proxy should be used only as explicit setting in user browser. Details on using Azure Firewall Premium with AVD are reported in the companion article in the 'More Info' column. Be sure to allow proper access to required AVD URLs. Forced Tunneling to on-premises is not recommended.",
+ "guid": "fc4972cd-3cd2-41bf-9703-6e5e6b4bed3d",
+ "link": "https://docs.microsoft.com/azure/firewall/protect-windows-virtual-desktop",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Firewall",
+ "NVA",
+ "VNet"
],
"severity": "Medium",
- "text": "Implement SSO to SAP HANA",
+ "subcategory": "Networking",
+ "text": "Need to control/restrict Internet outbound traffic for AVD hosts?",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Required URLs for AVD control plane access by session hosts are documented here: https://docs.microsoft.com/azure/virtual-desktop/safe-url-list. A check tool is available to verify connectivity from the session hosts: https://docs.microsoft.com/azure/virtual-desktop/safe-url-list#required-url-check-tool. Forced Tunneling to on-premises is not recommended.",
+ "guid": "65c7acbe-45bb-4e60-ad89-f2e87778424d",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/safe-url-list",
"services": [
- "Entra",
- "SAP",
- "WAF"
+ "AVD"
],
- "severity": "Medium",
- "text": "Consider Azure AD an identity provider for SAP systems hosted on RISE. For more information, see Integrating the Service with Azure AD.",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Networking",
+ "text": "Ensure AVD control plane endpoints are accessible",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
- "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Consider the usage of Azure Defender Endpoint or similar 3rd-party agents to control user web navigation, see the Security section for more details.",
+ "guid": "73676ae4-6691-4e88-95ad-a42223e13810",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/onboard-windows-multi-session-device?view=o365-worldwide",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Defender"
],
"severity": "Medium",
- "text": "For applications that access SAP, you might want to use principal propagation to establish SSO.",
+ "subcategory": "Networking",
+ "text": "Need to control/restrict Internet outbound traffic only for users on AVD hosts? ",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Custom UDR and NSG can be applied to AVD Host Pool subnets, for example to redirect to Azure Firewall or NVA, or to filter/block network traffic. In this case is recommended to carefully review to ensure optimal path for outbound traffic to AVD control plane is used. Service Tags can now be used with UDR and NSG, then AVD management plane traffic can be easily allowed: https://learn.microsoft.com/azure/virtual-desktop/safe-url-list.",
+ "guid": "523181a9-4174-4158-93ff-7ae7c6d37431",
+ "link": "https://docs.microsoft.com/azure/firewall/protect-windows-virtual-desktop",
"services": [
- "Entra",
- "SAP",
- "WAF"
+ "AVD",
+ "Firewall",
+ "NVA",
+ "VNet"
],
- "severity": "Medium",
- "text": "If you're using SAP BTP services or SaaS solutions that require SAP Identity Authentication Service (IAS), consider implementing SSO between SAP Cloud Identity Authentication Services and Azure AD to access those SAP services. This integration lets SAP IAS act as a proxy identity provider and forwards authentication requests to Azure AD as the central user store and identity provider.",
+ "severity": "Low",
+ "subcategory": "Networking",
+ "text": "Review custom UDR and NSG for AVD Host Pool subnets",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Network traffic from AVD Session Host VMs to AVD control plane should be as direct as possible. Redirecting this traffic through a Proxy or Firewall with deep packet inspection and/or SSL termination could cause serious issues and bad customer experience. It is recommended to bypass Proxy and Firewall just for the AVD control plane. User generated traffic surfing the web instead, should be filtered by Firewall and/or redirected to a Proxy. For details and guidelines, please see the companion article in the 'More Info' column.",
+ "guid": "cc6edca0-aeca-4566-9e92-cf246f1465af",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/proxy-server-support",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "VM"
],
- "severity": "Medium",
- "text": "Implement SSO to SAP BTP",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Networking",
+ "text": "Do not use Proxy servers, SSL termination and Deep Packet Inspection for AVD control plane traffic",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "It is recommended to assess and review networking bandwidth requirements for users, based on the specific workload type. The referenced article provide general estimations and recommendations, but specific measure are required for proper sizing. ",
+ "guid": "516785c6-fa96-4c96-ad88-408f372734c8",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/rdp-bandwidth",
"services": [
- "Entra",
- "SAP",
- "WAF"
+ "AVD",
+ "VM"
+ ],
+ "severity": "Low",
+ "subcategory": "Networking",
+ "text": "Check the network bandwidth required for each user and in total for the VM SKU",
+ "waf": "Performance"
+ },
+ {
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If Azure Files SMB share will be used to store user profiles via FSLogix, the usage of Private Endpoint (PE) for private access to the storage is recommended. AVD Session Hosts will access the storage using a private IP in the same VNet, a separate subnet is recommended. This feature has an additional cost that must be evaluated. If PE will not be used, at least Service Endpoint is recommended (no cost associated).",
+ "guid": "ec27d589-9178-426d-8df2-ff60020f30a6",
+ "link": "https://learn.microsoft.com/azure/storage/files/storage-files-networking-endpoints",
+ "services": [
+ "Storage",
+ "AVD",
+ "PrivateLink",
+ "Cost",
+ "VNet"
],
"severity": "Medium",
- "text": "If you're using SAP SuccessFactors, consider using the Azure AD automated user provisioning. With this integration, as you add new employees to SAP SuccessFactors, you can automatically create their user accounts in Azure AD. Optionally, you can create user accounts in Microsoft 365 or other SaaS applications that are supported by Azure AD. Use write-back of the email address to SAP SuccessFactors.",
+ "subcategory": "Networking",
+ "text": "Evaluate usage Private Endpoint for Azure Files share",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
- "service": "SAP",
+ "category": "Networking",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Connections to Azure Virtual Desktop can use TCP or UDP. RDP Shortpath is a feature of AVD that establishes a direct UDP-based transport between a supported Windows Remote Desktop client and session host. if clients have line of sight to AVD session hosts from internal network (VPN usage is not recommended), this feature can provide lower latency and best performances as explained in https://learn.microsoft.com/azure/virtual-desktop/rdp-shortpath?tabs=managed-networks#key-benefits.",
+ "guid": "b2074747-d01a-4f61-b1aa-92ad793d9ff4",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/shortpath",
"services": [
- "Subscriptions",
- "SAP",
- "AzurePolicy",
- "WAF"
+ "VPN",
+ "AVD"
],
"severity": "Medium",
- "text": "enforce existing Management Group policies to SAP Subscriptions",
- "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "waf": "Operations"
+ "subcategory": "Networking",
+ "text": "Evaluate usage of RDP ShortPath for clients connecting from managed internal networks",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Security mechanisms provided by GPO should be used, if available. For example, it is possible to impose desktop screen lock and idle session disconnection time. Existing GPOs applied to on-premises environment should be reviewed and eventually applied also to secure also AVD Hosts when joined to the domain.",
+ "guid": "a135e337-897e-431c-97d6-8cb6a22ac19f",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#establish-maximum-inactive-time-and-disconnection-policies",
"services": [
- "Subscriptions",
- "SAP",
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Integrate tightly coupled applications into the same SAP subscription to avoid additional routing and management complexity",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Active Directory",
+ "text": "Review Active Directory GPO to secure RDP sessions",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Microsoft Defender for Endpoint supports Azure Virtual Desktop for Windows 10/11 Enterprise multi-session. Check article for onboarding non-persistent virtual desktop infrastructure (VDI) devices: https://docs.microsoft.com/windows/security/threat-protection/microsoft-defender-atp/configure-endpoints-vdi",
+ "guid": "b1172576-9ef6-4691-a483-5ac932223ece",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/deployment-vdi-microsoft-defender-antivirus",
"services": [
- "Subscriptions",
- "WAF"
+ "AVD",
+ "Defender"
],
"severity": "High",
- "text": "Leverage Subscription as scale unit and scaling our resources, consider deploying subscription per environment eg. Sandbox, non-prod, prod ",
- "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "Host Configuration",
+ "text": "Ensure anti-virus and anti-malware solutions are used",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Disks in Azure are already encrypted at rest by default with Microsoft managed keys. Host VM OS disk encryption is possible and supported using Azure Disk Encryption (ADE - BitLocker) and Disk Encryption Set (DES - Server Side Encryption), the latter is recommended. Encryption of FSLogix storage using Azure Files can be done using SSE on Azure Storage. For OneDrive encryption, see this article: https://docs.microsoft.com/compliance/assurance/assurance-encryption-for-microsoft-365-services.",
+ "guid": "0fd32907-98bc-4178-adc5-a06ca7144351",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disk-encryption-overview",
"services": [
- "Subscriptions",
- "VM",
- "WAF"
+ "AVD",
+ "AKV",
+ "Storage",
+ "VM"
],
- "severity": "High",
- "text": "Ensure quota increase as a part of subscription provisioning (e.g. total available VM cores within a subscription)",
- "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Host Configuration",
+ "text": "Assess disk encryption requirements for AVD Session Hosts",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
- "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Trusted launch are Gen2 Azure VMs with enhanced security features aimed to protect against bottom of the stack threats through attack vectors such as rootkits, boot kits, and kernel-level malware. Recommended to enable and leverage Secure Boot, Virtual TPM (vTPM) and Integrity Monitoring.",
+ "guid": "36a5a67f-bb9e-4d5b-9547-8c4479816b28",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#azure-virtual-desktop-support-for-trusted-launch",
"services": [
- "WAF"
+ "AVD",
+ "Monitor",
+ "VM"
],
- "severity": "Low",
- "text": "The Quota API is a REST API that you can use to view and manage quotas for Azure services. Consider using it if necessary.",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Host Configuration",
+ "text": "Enable Trusted launch in Azure Gen2 VM Session Hosts",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
- "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Trusted Launch and Gen2 VM are not only security and performance enhancing features but also system requirements for Windows 11. When building an AVD environment based on Windows 11, it is essential to enable these features.",
+ "guid": "135d3899-4b31-44d3-bc8f-028871a359d8",
+ "link": "https://learn.microsoft.com/windows/whats-new/windows-11-requirements",
"services": [
- "Subscriptions",
- "VM",
- "WAF"
+ "AVD",
+ "VM"
],
"severity": "High",
- "text": "If deploying to an availability zone, ensure that the VM's zone deployment is available once the quota has been approved. Submit a support request with the subscription, VM series, number of CPUs and availability zone required.",
- "waf": "Operations"
+ "subcategory": "Host Configuration",
+ "text": "Enable Trusted Launch and use Gen2 image are system requirements for Windows 11",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Displayed content will be automatically blocked or hidden in screenshots. Keep in mind screen sharing will also be blocked when using Teams or other collaboration software which use screen sharing.",
+ "guid": "a49dc137-7896-4343-b2bc-1a31bf1d30b6",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/screen-capture-protection",
"services": [
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Ensure required services and features are available within the chosen deployment regions eg. ANF , Zone etc.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Host Configuration",
+ "text": "Consider enabling screen capture protection to prevent sensitive information from being captured",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If not absolutely required, redirecting drives, printers, and USB devices to a user's local device in a remote desktop session should be disabled or highly restricted. Restrict Windows Explorer access by hiding local and remote drive mappings is also a secure measure to adopt preventing users from discovering unwanted information about system configuration and users.",
+ "guid": "7ce2cd20-85b4-4f82-828e-6558736ede6a",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#other-security-tips-for-session-hosts",
"services": [
- "TrafficManager",
- "Cost",
- "WAF"
+ "AVD"
],
"severity": "Medium",
- "text": "Leverage Azure resource tag for cost categorization and resource grouping (: BillTo, Department (or Business Unit), Environment (Production, Stage, Development), Tier (Web Tier, Application Tier), Application Owner, ProjectName)",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "subcategory": "Host Configuration",
+ "text": "Restrict device redirection and drive mapping",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "When choosing a deployment model, you can either provide remote users access to entire virtual desktops or only select applications. Remote applications, or RemoteApps, provide a seamless experience as the user works with apps on their virtual desktop. RemoteApps reduce risk by only letting the user work with a subset of the remote machine exposed by the application.",
+ "guid": "4e25d70e-3924-44f4-b66f-d6cdd4f4a973",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/web-protection-overview",
"services": [
- "Backup",
- "WAF"
+ "AVD"
],
- "severity": "High",
- "text": "Help protect your HANA database by using the Azure Backup service.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "When possible, prefer Remote Apps over Full Desktops (DAG)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Web content filtering feature provided by Web Protection capability in Microsoft Defender for Endpoint, can be used to to control user web navigation. If this tool is used, configuration of web filtering for user Internet browsing is recommended. Access by the Guest OS system to required AVD control plane URLs must be guaranteed.",
+ "guid": "e19dd344-29eb-4722-a237-a151c5bb4e4f",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/web-protection-overview",
"services": [
- "Storage",
- "Entra",
- "VM",
- "WAF"
+ "AVD",
+ "Defender"
],
"severity": "Medium",
- "text": "If you deploy Azure NetApp Files for your HANA, Oracle, or DB2 database, use the Azure Application Consistent Snapshot tool (AzAcSnap) to take application-consistent snapshots. AzAcSnap also supports Oracle databases. Consider using AzAcSnap on a central VM rather than on individual VMs.",
- "waf": "Reliability"
+ "subcategory": "Management",
+ "text": "Need to control/restrict user Internet navigation from AVD session hosts?",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "We recommend you don't grant your users admin access to virtual desktops. If you need software packages, we recommend you make them available through configuration management utilities.",
+ "guid": "a0cdb3b5-4eb2-4eb0-9dda-a3592718e2ed",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/security-guide",
"services": [
- "SAP",
- "WAF"
+ "AVD"
],
"severity": "High",
- "text": "Ensure time-zone matches between the operating system and the SAP system.",
- "waf": "Operations"
+ "subcategory": "Management",
+ "text": "Ensure AVD users will not have local administrator privileges on AVD Hosts",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "We recommend you enable Defender for Cloud for the subscriptions, virtual machines, key vaults, and storage accounts used by AVD. With this tool is possible to assess and manage vulnerabilities, assess compliance with common frameworks like PCI, strengthen the overall security of your AVD environment and measure it over time using 'Secure Score': https://learn.microsoft.com/azure/virtual-desktop/security-guide#improve-your-secure-score.",
+ "guid": "1814387e-5ca9-4c26-a9b3-2ab5bdfc6998",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#enable-microsoft-defender-for-cloud",
"services": [
- "Entra",
- "WAF"
+ "Storage",
+ "VM",
+ "AVD",
+ "Defender",
+ "AKV",
+ "Subscriptions"
],
"severity": "Medium",
- "text": "Don't group different application services in the same cluster. For example, don't combine DRBD and central services clusters on the same cluster. However, you can use the same Pacemaker cluster to manage approximately five different central services (multi-SID cluster).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Management",
+ "text": "Enable Microsoft Defender for Cloud to manage AVD Session Hosts security posture",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
- "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Enabling audit log collection lets you view user and admin activity related to Azure Virtual Desktop and store in a central repository like Log Analytics workspace. ",
+ "guid": "a0916a76-4980-4ad0-b278-ee293c1bc352",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#collect-audit-logs",
"services": [
- "Cost",
- "WAF"
+ "AVD",
+ "Monitor",
+ "Entra"
],
- "severity": "Low",
- "text": "Consider running dev/test systems in a snooze model to save and optimize Azure run costs.",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Enable diagnostic and audit logging",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
- "link": "https://learn.microsoft.com/azure/lighthouse/overview",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Assign the least privilege required by defining administrative, operations, and engineering roles to Azure RBAC roles. To limit access to high privilege roles within your Azure Virtual Desktop landing zone, consider integration with Azure Privileged Identity Management (PIM). Maintaining knowledge of which team is responsible for each particular administrative area helps you determine Azure role-based access control (RBAC) roles and configuration.",
+ "guid": "baaab757-1849-4ab8-893d-c9fc9d1bb73b",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/rbac",
"services": [
+ "AVD",
"Entra",
- "SAP",
- "WAF"
+ "RBAC"
],
- "severity": "Medium",
- "text": "If you partner with customers by managing their SAP estates, consider Azure Lighthouse. Azure Lighthouse allows managed service providers to use Azure native identity services to authenticate to the customers' environment. It puts the control in the hands of customers, because they can revoke access at any time and audit service providers' actions.",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Management",
+ "text": "Assess the requirement to use custom RBAC roles for AVD management",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
- "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "AVD users should not have permission to install application. If required, Windows Defender Application Control (WDAC) can be used to control which drivers and applications are allowed to run on their Windows clients. ",
+ "guid": "b9ea80c8-0628-49fc-ae63-125aa4c0a284",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/security-guide#windows-defender-application-control",
"services": [
- "VM",
- "WAF"
+ "AVD",
+ "Defender"
],
"severity": "Medium",
- "text": "Use Azure Update Manager to check the status of available updates for a single VM or multiple VMs and consider scheduling regular patching.",
- "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
- "waf": "Operations"
- },
- {
- "checklist": "WAF checklist",
- "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
- "service": "SAP",
- "services": [
- "SAP",
- "WAF"
- ],
- "severity": "Low",
- "text": "Optimize and manage SAP Basis operations by using SAP Landscape Management (LaMa). Use the SAP LaMa connector for Azure to relocate, copy, clone, and refresh SAP systems.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "Management",
+ "text": "Restrict users from installing un-authorized applications",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
- "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Enabling MFA and CA lets you manage risks before you grant users access to your AVD environment. When deciding which users to grant access to, we recommend you also consider who the user is, how they sign in, and which device they're using. Additional details and configuration procedures are provided in the companion article. Microsoft Entra ID is the new name for Azure Active Directory (Azure AD).",
+ "guid": "916d697d-8ead-4ed2-9bdd-186f1ac252b9",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/set-up-mfa",
"services": [
- "Monitor",
- "SAP",
- "WAF",
- "SQL"
+ "AVD",
+ "Entra"
],
"severity": "Medium",
- "text": "Use Azure Monitor for SAP solutions to monitor your SAP workloads(SAP HANA, high-availability SUSE clusters, and SQL systems) on Azure. Consider supplementing Azure Monitor for SAP solutions with SAP Solution Manager.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "Microsoft Entra ID",
+ "text": "Evaluate the usage of Multi-Factor Authentication (MFA) and Conditional Access (CA) for AVD users",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
- "service": "SAP",
+ "category": "Security",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If Zero Trust is a requirement, review the companion article in the 'More Info' column. It provides steps to apply the principles of Zero Trust to an Azure Virtual Desktop deployment.",
+ "guid": "221102d0-90af-49fc-b2b7-8d3fe397e43",
+ "link": "https://learn.microsoft.com/security/zero-trust/azure-infrastructure-avd",
"services": [
- "Entra",
- "WAF",
- "Monitor",
- "VM",
- "SAP"
+ "AVD"
],
- "severity": "High",
- "text": "Run a VM Extension for SAP check. VM Extension for SAP uses the assigned managed identity of a virtual machine (VM) to access VM monitoring and configuration data. The check ensures that all performance metrics in your SAP application come from the underlying Azure Extension for SAP.",
- "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Zero Trust",
+ "text": "Review and Apply Zero Trust principles and guidance",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If used, make sure to check the list of best practices and recommendations described in the referenced article.",
+ "guid": "9164e990-9ae2-48c8-9c33-b6b7808bafe6",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/fslogix-containers-azure-files#best-practices-for-azure-virtual-desktop",
"services": [
- "AzurePolicy",
- "WAF"
+ "AVD",
+ "Storage"
],
"severity": "Medium",
- "text": "Use Azure Policy for access control and compliance reporting. Azure Policy provides the ability to enforce organization-wide settings to ensure consistent policy adherence and fast violation detection. ",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Operations"
+ "subcategory": "Azure Files",
+ "text": "Check best-practices for Azure Files",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "SMB Multichannel enables clients to use multiple network connections that provide increased performance while lowering the cost of ownership. Increased performance is achieved through bandwidth aggregation over multiple NICs and utilizing Receive Side Scaling (RSS) support for NICs to distribute the IO load across multiple CPUs.",
+ "guid": "5784b6ca-5e9e-4bcf-8b54-c95459ea7369",
+ "link": "https://learn.microsoft.com/azure/storage/files/storage-files-smb-multichannel-performance",
"services": [
- "Monitor",
- "SAP",
- "WAF",
- "NetworkWatcher"
+ "Cost",
+ "AVD",
+ "Storage",
+ "ACR"
],
- "severity": "Medium",
- "text": "Use Connection Monitor in Azure Network Watcher to monitor latency metrics for SAP databases and application servers. Or collect and display network latency measurements by using Azure Monitor.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Azure Files",
+ "text": "Enable SMB multichannel when using a premium file share to host FSLogix profile containers.",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "73686af4-6791-4f89-95ad-a43324e13811",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "If a second region is required for DR purposes verify NetApp availability in there as well.",
+ "guid": "4a359836-ee79-4d6c-9d3a-364a5b7abae3",
+ "link": "https://azure.microsoft.com/global-infrastructure/services/",
"services": [
- "SAP",
- "VM",
- "WAF"
+ "AVD",
+ "Storage"
],
"severity": "Medium",
- "text": "Perform a quality check for SAP HANA on the provisioned Azure infrastructure to verify that provisioned VMs comply with SAP HANA on Azure best practices.",
- "waf": "Operations"
+ "subcategory": "Azure NetApp Files",
+ "text": "If NetApp Files storage is required, check storage service availability in your specific region.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "CA option is a recommended setting in the FSLogix scenario, as it enables a more resilient SMB session between the Session Host and NetApp Files.",
+ "guid": "a2661898-866a-4c8d-9d1f-8cfc86e88024",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/create-fslogix-profile-container",
"services": [
- "Subscriptions",
- "SAP",
- "WAF"
+ "AVD",
+ "Storage"
],
- "severity": "High",
- "text": "For each Azure subscription, run a latency test on Azure availability zones before zonal deployment to choose low-latency zones for deployment of SAP on Azure.",
- "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Azure NetApp Files",
+ "text": "If NetApp Files storage is used enable CA (Continuous Availability) option to increase resiliency",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "An Active Directory Site should be created for the Azure virtual network environment where Azure NetApp Files (ANF) subnet will be created, and that site name should be specified in the ANF connection property when executing the join procedure as explained in the reference article.",
+ "guid": "6647e977-db49-48a8-bc35-743f17499d42",
+ "link": "https://docs.microsoft.com/azure/azure-netapp-files/create-active-directory-connections",
"services": [
+ "AVD",
"Storage",
- "ASR",
- "WAF"
+ "VNet"
],
- "severity": "Medium",
- "text": "Run the Resiliency Report to ensure that the configuration of the entire provisioned Azure infrastructure (Compute, Database, Networking, Storage, Site Recovery) complies with the configuration defined by Cloud Adaption Framework for Azure.",
- "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "severity": "High",
+ "subcategory": "Azure NetApp Files",
+ "text": "If Azure NetApp Files storage is used, check Active Directory Site name setting in the Active Directory Connection configuration",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
- "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Possible options: Standard HDD, Standard SSD, or Premium SSD. Ephemeral disks are not supported, Ultra-Disks not recommended. Recommended to evaluate Premium for OS disk if user density is not low, and if Cloud Cache will be used. ",
+ "guid": "3611c818-b0a0-4bc5-80e4-3a18a9cd289c",
+ "link": "https://docs.microsoft.com/azure/virtual-machines/disks-types",
"services": [
- "Monitor",
- "SAP",
- "WAF",
- "Sentinel"
+ "AVD",
+ "Storage"
],
"severity": "Medium",
- "text": "Implement threat protection by using the Microsoft Sentinel solution for SAP. Use this solution to monitor your SAP systems and detect sophisticated threats throughout the business logic and application layers.",
- "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Capacity Planning",
+ "text": "Determine which type of managed disk will be used for the Session Hosts",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Possible options are: Azure NetApp Files, Azure Files, VM based File Server. File-server it is not recommended. Azure Files Premium typically a good starting point. NetApp usually required for large scale / high-performant environment. For a detailed comparison see the article in the 'More Info' column.",
+ "guid": "ed6b17db-8255-4462-b2ae-e4553afc8339",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/store-fslogix-profile",
"services": [
- "Cost",
- "WAF"
+ "AVD",
+ "Storage",
+ "VM"
],
- "severity": "Medium",
- "text": "Azure tagging can be leveraged to logically group and track resources, automate their deployments, and most importantly, provide visibility on the incurred costs.",
- "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Determine which storage backend solution will be used for FSLogix Profiles",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Every Host Pool should use a separate set of storage accounts/volumes (at least one) and shares. Users should have a different profile for each Host Pool since settings and configurations are specific to each Host Pool. Additionally, accessing different Host Pools at the same time can cause errors on the shared user profile VHD/X. Usage of different storage accounts/volumes for multiple shares is also recommended to scale independently.",
+ "guid": "2fad62bd-5004-453c-ace4-64d862e7f5a4",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/store-fslogix-profile",
"services": [
- "Monitor",
- "VM",
- "WAF"
+ "AVD",
+ "Storage"
],
- "severity": "Low",
- "text": "Use inter-VM latency monitoring for latency-sensitive applications.",
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Do not share storage and profiles between different Host Pools",
"waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "As a starting point for estimating profile container storage performance requirements we recommend to assume 10 IOPS per user in the steady state and 50 IOPS per user during sign-in/sign-out. Space requirements is simply obtained based on the maximum profiles size in FSLogix per the total number of users for each Host Pool. Multiple storage accounts can be used for the same Host Pool if required.",
+ "guid": "680e7828-9c93-4665-9d02-bff4564b0d93",
+ "link": "https://learn.microsoft.com/azure/virtual-desktop/faq#what-s-the-largest-profile-size-fslogix-can-handle-",
"services": [
- "ASR",
- "Monitor",
- "SAP",
- "WAF"
+ "AVD",
+ "Storage"
],
- "severity": "Medium",
- "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "Verify storage scalability limits and Host Pool requirements",
"waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Avoid introducing additional latency and costs associated with cross-region network traffic where possible.",
+ "guid": "8aad53cc-79e2-4e86-9673-57c549675c5e",
+ "link": "https://docs.microsoft.com/azure/virtual-desktop/fslogix-containers-azure-files",
"services": [
- "Storage",
- "SAP",
- "WAF"
+ "Cost",
+ "AVD",
+ "Storage"
],
- "severity": "Medium",
- "text": "Exclude all the database file systems and executable programs from antivirus scans. Including them could lead to performance problems. Check with the database vendors for prescriptive details on the exclusion list. For example, Oracle recommends excluding /oracle//sapdata from antivirus scans.",
+ "severity": "High",
+ "subcategory": "Capacity Planning",
+ "text": "For optimal performance, the storage solution and the FSLogix profile container should be in the same Azure region.",
"waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "c027f893-f404-41a9-b33d-39d625a14964",
- "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "The recommendation in Azure Virtual Desktop is to use Profile Container without Office Container (ODFC) split unless you are planning for specific Business Continuity and Disaster Recovery (BCDR) scenarios as described in the Disaster Recovery section below. https://docs.microsoft.com/fslogix/profile-container-office-container-cncpt ",
+ "guid": "df47d2d9-2881-4b1c-b5d1-e54a29759e39",
+ "link": "https://learn.microsoft.com/fslogix/concepts-container-types#when-to-use-profile-and-odfc-containers",
"services": [
- "SAP",
- "WAF"
+ "AVD",
+ "Storage",
+ "ASR"
],
- "severity": "Low",
- "text": "Consider collecting full database statistics for non-HANA databases after migration. For example, implement SAP note 1020260 - Delivery of Oracle statistics.",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "FSLogix",
+ "text": "Do not use Office Containers (ODFC) if not strictly required and justified",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
- "service": "SAP",
- "services": [
- "Storage",
- "SAP",
- "WAF"
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Make sure to configure the following antivirus exclusions for FSLogix Profile Container virtual hard drives, as documented in the referenced article in the 'More Info' column.",
+ "guid": "83f63047-22ee-479d-9b5c-3632054b69ba",
+ "link": "https://learn.microsoft.com/fslogix/overview-prerequisites#configure-antivirus-file-and-folder-exclusions",
+ "services": [
+ "AVD",
+ "Storage"
],
"severity": "Medium",
- "text": "Consider using Oracle Automatic Storage Management (ASM) for all Oracle deployments that use SAP on Azure.",
- "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
- "waf": "Performance"
+ "subcategory": "FSLogix",
+ "text": "Configure the recommended antivirus exclusions for FSLogix (includes not scanning VHD(x) files on connect).",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Profile containers have a default max size of 30GB. If large Profile Containers are anticipated, and customers wants to try to keep them small, consider using OneDrive to host Office 365 files outside the FSLogix profile.",
+ "guid": "01e6a84d-e5df-443d-8992-481718d5d1e5",
+ "link": "https://docs.microsoft.com/fslogix/profile-container-configuration-reference",
"services": [
- "SAP",
- "WAF",
- "SQL"
+ "AVD",
+ "Storage"
],
- "severity": "Medium",
- "text": "For SAP on Azure running Oracle, a collection of SQL scripts can help you diagnose performance problems. Automatic Workload Repository (AWR) reports contain valuable information for diagnosing problems in the Oracle system. We recommend that you run an AWR report during several sessions and choose peak times for it, to ensure broad coverage for the analysis.",
- "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "FSLogix",
+ "text": "Review and confirm configured maximum profile size in FSLogix",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Defaults and recommended settings are reported in the companion article in the 'More Info' column. If not recommended keys and/or values must be used, be sure to review with a Microsoft AVD expert and clearly document your choices.",
+ "guid": "d34aad5e-8c78-4e1d-9666-7313c405674c",
+ "link": "https://learn.microsoft.com/fslogix/concepts-configuration-examples",
"services": [
- "ASR",
- "Monitor",
- "SAP",
- "WAF"
+ "AVD",
+ "AKV",
+ "Storage",
+ "ACR"
],
"severity": "High",
- "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
- "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "FSLogix",
+ "text": "Review FSLogix registry keys and determine which ones to apply",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Concurrent or multiple connections are not recommended in Azure Virtual Desktop. Concurrent connections are also not supported by Session Hosts running in an Azure Virtual Desktop Host Pool. OneDrive, if used, doesn't support concurrent or multiple connections using the same container, under any circumstance. For multiple connections, usage of the same profile disk is not recommended.",
+ "guid": "5e985b85-9c77-43e7-b261-623b775a917e",
+ "link": "https://learn.microsoft.com/fslogix/concepts-multi-concurrent-connections",
"services": [
- "AzurePolicy",
- "WAF",
- "AppGW"
+ "AVD",
+ "Storage"
],
- "severity": "Medium",
- "text": "For secure delivery of HTTP/S apps, use Application Gateway v2 and ensure that WAF protection and policies are enabled.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "FSLogix",
+ "text": "Avoid usage of concurrent or multiple connections",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "Cloud Cache uses OS drive as local cache storage and may generate lot of pressure on the VM disk. Depending on the VM SKU and size used, the VM temporary drive can be a viable and performant solution where to relocate Cloud Cache cached content. Before adopting this solution, tests should be executed to confirm performance and stability. More details on Cloud Cache can be found here: https://learn.microsoft.com/fslogix/concepts-fslogix-cloud-cache. ",
+ "guid": "b2d1215a-e114-4ba3-9df5-85ecdcd9bd3b",
+ "link": "https://docs.microsoft.com/fslogix/cloud-cache-configuration-reference",
"services": [
- "DNS",
- "SAP",
- "VM",
- "WAF"
+ "AVD",
+ "Storage",
+ "VM"
],
- "severity": "Medium",
- "text": "If the virtual machine's DNS or virtual name is not changed during migration to Azure, Background DNS and virtual names connect many system interfaces in the SAP landscape, and customers are only sometimes aware of the interfaces that developers define over time. Connection challenges arise between various systems when virtual or DNS names change after migrations, and it's recommended to retain DNS aliases to prevent these types of difficulties.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "FSLogix",
+ "text": "If FSLogix Cloud Cache is used, consider moving the cache directory to the VM temporary drive.",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "category": "Storage",
+ "checklist": "Azure Virtual Desktop Review",
+ "description": "REDIRECTION.XML file is used to control what folders are redirected out of the profile container to the 'C:' drive. Exclusions should be the exception and should never be used unless the specific exclusion is completely understood by the person configuring the exclusion. Exclusions should always be fully tested in the environment where they are intended to be implemented. Configuring exclusions may impact functionality, stability and performance.",
+ "guid": "0b50ca97-b1d2-473c-b4d9-6e98b0f912de",
+ "link": "https://docs.microsoft.com/fslogix/manage-profile-content-cncpt#redirectionsxml",
"services": [
- "VNet",
- "DNS",
- "SAP",
- "WAF"
+ "AVD",
+ "Storage"
],
"severity": "Medium",
- "text": "Use different DNS zones to distinguish each environment (sandbox, development, preproduction, and production) from each other. The exception is for SAP deployments with their own VNet; here, private DNS zones might not be necessary.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operations"
+ "subcategory": "FSLogix",
+ "text": "Review the usage of FSLogix redirection.",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "a3592829-e6e2-4061-9368-6af46791f893",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
- "service": "SAP",
+ "category": "Application Deployment",
+ "checklist": "Azure AKS Review",
+ "guid": "785c2fa5-5b56-4ad4-a408-fe72734c476b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/containers/aks/secure-baseline-aks",
"services": [
- "VNet",
- "ACR",
- "SAP",
- "WAF"
+ "AKS"
],
"severity": "Medium",
- "text": "Local and global VNet peering provide connectivity and are the preferred approaches to ensure connectivity between landing zones for SAP deployments across multiple Azure regions",
- "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Development",
+ "text": "Use canary or blue/green deployments",
+ "waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
- "service": "SAP",
+ "category": "Application Deployment",
+ "checklist": "Azure AKS Review",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
"services": [
- "NVA",
- "SAP",
- "WAF"
+ "AKS"
],
- "severity": "High",
- "text": "It is not supported to deploy any NVA between SAP application and SAP Database server",
- "training": "https://me.sap.com/notes/2731110",
- "waf": "Performance"
+ "severity": "Low",
+ "subcategory": "Development",
+ "text": "If required for AKS Windows workloads HostProcess containers can be used",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
- "service": "SAP",
+ "category": "Application Deployment",
+ "checklist": "Azure AKS Review",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
"services": [
- "ACR",
- "SAP",
- "VWAN",
- "WAF"
+ "AKS"
],
- "severity": "Medium",
- "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
- "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Development",
+ "text": "Use KEDA if running event-driven workloads",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
- "service": "SAP",
+ "category": "Application Deployment",
+ "checklist": "Azure AKS Review",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
"services": [
- "VNet",
- "NVA",
- "WAF"
+ "AKS"
],
- "severity": "Medium",
- "text": "Consider deploying network virtual appliances (NVAs) between regions only if partner NVAs are used. NVAs between regions or VNets aren't required if native NVAs are present. When you're deploying partner networking technologies and NVAs, follow the vendor's guidance to verify conflicting configurations with Azure networking.",
- "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
+ "severity": "Low",
+ "subcategory": "Development",
+ "text": "Use Dapr to ease microservice development",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
- "service": "SAP",
+ "category": "Application Deployment",
+ "checklist": "Azure AKS Review",
+ "guid": "3acbe04b-be20-49d3-afda-47778424d116",
+ "link": "https://learn.microsoft.com/azure/developer/terraform/create-k8s-cluster-with-tf-and-aks",
"services": [
- "VNet",
- "VWAN",
- "WAF",
- "NVA",
- "SAP"
+ "AKS"
],
"severity": "Medium",
- "text": "Virtual WAN manages connectivity between spoke VNets for virtual-WAN-based topologies (no need to set up user-defined routing [UDR] or NVAs), and maximum network throughput for VNet-to-VNet traffic in the same virtual hub is 50 gigabits per second. If necessary, SAP landing zones can use VNet peering to connect to other landing zones and overcome this bandwidth limitation.",
- "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
+ "subcategory": "Infrastructure as Code",
+ "text": "Use automation through ARM/TF to create your Azure resources",
"waf": "Operations"
},
{
- "checklist": "WAF checklist",
- "guid": "82734c88-6ba2-4802-8459-11475e39e530",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "guid": "36cb45e5-7960-4332-9bdf-8cc23318da61",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/business-continuity-and-disaster-recovery",
"services": [
- "SAP",
- "VM",
- "WAF"
+ "AKS",
+ "ASR"
],
"severity": "High",
- "text": "Public IP assignment to VM running SAP Workload is not recommended.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Schedule and perform DR tests regularly",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "guid": "170265f4-bb46-4a39-9af7-f317284797b1",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
"services": [
- "ASR",
- "WAF"
+ "LoadBalancer",
+ "TrafficManager",
+ "AKS",
+ "FrontDoor"
],
- "severity": "High",
- "text": "Consider reserving IP address on DR side when configuring ASR",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Use Azure Traffic Manager or Azure Front Door as a global load balancer for region failover",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "graph": "resources | where type=='microsoft.containerservice/managedclusters' | extend compliant= isnotnull(properties.agentPoolProfiles[0].availabilityZones) | distinct id,compliant",
+ "guid": "578a219a-46be-4b54-9350-24922634292b",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones",
"services": [
- "WAF"
+ "AKS"
],
- "severity": "High",
- "text": "Avoid using overlapping IP address ranges for production and DR sites.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Use Availability Zones if they are supported in your Azure region",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
"services": [
- "Storage",
- "VNet",
- "WAF"
+ "AKS"
],
- "severity": "Medium",
- "text": "While Azure does help you to create multiple delegated subnets in a VNet, only one delegated subnet can exist in a VNet for Azure NetApp Files. Attempts to create a new volume will fail if you use more than one delegated subnet for Azure NetApp Files.",
- "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Use the SLA-backed AKS offering",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"services": [
- "WAF",
- "Firewall"
+ "Cost",
+ "AKS"
],
- "severity": "Medium",
- "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
- "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "High Availability",
+ "text": "Use Disruption Budgets in your pod and deployment definitions",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
- "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
"services": [
- "SAP",
- "WAF",
- "AppGW"
+ "ACR",
+ "AKS"
],
- "severity": "Medium",
- "text": "Application Gateway and Web Application Firewall have limitations when Application Gateway serves as a reverse proxy for SAP web apps, as shown in the comparison between Application Gateway, SAP Web Dispatcher, and other third-party services.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "If using a private registry, configure region replication to store images in multiple regions",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "guid": "daa9a260-c3ea-4490-b077-5fc1f2a80cb0",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
"services": [
- "FrontDoor",
- "ACR",
- "AzurePolicy",
- "WAF"
+ "AKS",
+ "Storage",
+ "ASR"
],
- "severity": "Medium",
- "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
- "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Disaster Recovery",
+ "text": "Use Zone-Redundant Storage (ZRS) with stateful workloads",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure AKS Review",
+ "guid": "bc14aea6-e65d-48d9-a3ad-c218e6436b06",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/business-continuity-and-disaster-recovery",
"services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF",
- "AppGW"
+ "AKS"
],
- "severity": "Medium",
- "text": "Take advantage of Web Application Firewall policies in Azure Front Door when you're using Azure Front Door and Application Gateway to protect HTTP/S applications. Lock down Application Gateway to receive traffic only from Azure Front Door.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Requirements",
+ "text": "Define non-functional requirements such as SLAs, RTO (Recovery Time Objective) and RPO (Recovery Point Objective).",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "5ada4332-4e13-4811-9231-81aa41742694",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
+ "category": "Cost Governance",
+ "checklist": "Azure AKS Review",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
"services": [
- "LoadBalancer",
- "WAF",
- "AppGW"
+ "Cost",
+ "AKS"
],
- "severity": "Medium",
- "text": "Use a web application firewall to scan your traffic when it's exposed to the internet. Another option is to use it with your load balancer or with resources that have built-in firewall capabilities like Application Gateway or third-party solutions.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Cost",
+ "text": "Use an external application such as kubecost to allocate costs to different users",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "SAP",
+ "category": "Cost Governance",
+ "checklist": "Azure AKS Review",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
"services": [
- "ACR",
- "SAP",
- "VWAN",
- "WAF"
+ "Cost",
+ "AKS"
],
- "severity": "Medium",
- "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
- "waf": "Performance"
+ "severity": "Low",
+ "subcategory": "Cost",
+ "text": "Use scale down mode to delete/deallocate nodes",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "SAP",
+ "category": "Cost Governance",
+ "checklist": "Azure AKS Review",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
"services": [
- "Storage",
- "VNet",
- "Backup",
- "WAF",
- "ACR",
- "PrivateLink"
+ "Cost",
+ "AKS"
],
"severity": "Medium",
- "text": "To prevent data leakage, use Azure Private Link to securely access platform as a service resources like Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, and more. Azure Private Endpoint can also help to secure traffic between VNets and services like Azure Storage, Azure Backup, and more. Traffic between your VNet and the Private Endpoint enabled service travels across the Microsoft global network, which prevents its exposure to the public internet.",
- "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Cost",
+ "text": "When required use multi-instance partitioning GPU on AKS Clusters",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
- "service": "SAP",
+ "category": "Cost Governance",
+ "checklist": "Azure AKS Review",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
"services": [
- "SAP",
- "VM",
- "WAF"
+ "Cost",
+ "AKS"
],
- "severity": "High",
- "text": "Make sure that Azure accelerated networking is enabled on the VMs used in the SAP application and DBMS layers.",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "Performance"
+ "severity": "Low",
+ "subcategory": "Cost",
+ "text": "If running a Dev/Test cluster use NodePool Start/Stop",
+ "waf": "Cost"
},
{
- "checklist": "WAF checklist",
- "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
"services": [
- "LoadBalancer",
- "WAF"
+ "AKS",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "Make sure that internal deployments for Azure Load Balancer are set up to use Direct Server Return (DSR). This setting (Enabling Floating IP) will reduce latency when internal load balancer configurations are used for high-availability configurations on the DBMS layer.",
- "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "subcategory": "Compliance",
+ "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "6791f893-5ada-4433-84e1-3811523181aa",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
"services": [
- "VNet",
- "SAP",
- "VM",
- "WAF"
+ "AKS"
],
"severity": "Medium",
- "text": "You can use application security group (ASG) and NSG rules to define network security access-control lists between the SAP application and DBMS layers. ASGs group virtual machines to help manage their security.",
- "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
+ "subcategory": "Compliance",
+ "text": "Separate applications from the control plane with user/system node pools",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
"services": [
- "VNet",
- "SAP",
- "WAF"
+ "AKS"
],
- "severity": "High",
- "text": "Placing of the SAP application layer and SAP DBMS in different Azure VNets that aren't peered isn't supported.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Performance"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Add taint to your system nodepool to make it dedicated",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF"
+ "ACR",
+ "AKS"
],
"severity": "Medium",
- "text": "For optimal network latency with SAP applications, consider using Azure proximity placement groups.",
- "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
- "waf": "Performance"
- },
- {
- "checklist": "WAF checklist",
- "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "services": [
- "SAP",
- "WAF"
- ],
- "severity": "High",
- "text": "It is NOT supported at all to run an SAP Application Server layer and DBMS layer split between on-premise and Azure. Both layers need to completely reside either on-premise or in Azure.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Performance"
+ "subcategory": "Compliance",
+ "text": "Use a private registry for your images, such as ACR",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
"services": [
- "VNet",
- "SAP",
- "Cost",
- "WAF"
+ "AKS"
],
- "severity": "High",
- "text": "It isn't recommended to host the database management system (DBMS) and application layers of SAP systems in different VNets and connect them with VNet peering because of the substantial costs that excessive network traffic between the layers can produce. Recommend using subnets within the Azure virtual network to separate the SAP application layer and DBMS layer.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Compliance",
+ "text": "Scan your images for vulnerabilities",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "402a9846-d515-4061-aff8-cd30088693fa",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "cc639637-a652-42ac-89e8-06965388e9de",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
"services": [
- "LoadBalancer",
- "WAF"
+ "AKS",
+ "Defender"
],
- "severity": "High",
- "text": "If using Load Balancer with Linux guest operating systems, check that the Linux network parameter net.ipv4.tcp_timestamps is set to 0.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Compliance",
+ "text": "Use Azure Security Center to detect security posture vulnerabilities",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "42d4aefe-2383-470e-b019-c30df24996b2",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool",
"services": [
- "VNet",
- "SAP",
- "WAF"
+ "AKS"
],
- "severity": "Medium",
- "text": "For SAP RISE/ECS deployments, virtual peering is the preferred way to establish connectivity with customer's existing Azure environment. Both the SAP vnet and customer vnet(s) are protected with network security groups (NSG), enabling communication on SAP and database ports through the vnet peering",
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "If required configure FIPS",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
"services": [
- "SAP",
- "VM",
- "WAF",
- "Backup"
+ "AKS"
],
"severity": "High",
- "text": "Review SAP HANA database backups for Azure VMs.",
- "waf": "Cost"
+ "subcategory": "Compliance",
+ "text": "Define app separation requirements (namespace/nodepool/cluster)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
"services": [
- "ASR",
- "Monitor",
- "SAP",
- "WAF"
+ "AKV",
+ "AKS"
],
"severity": "Medium",
- "text": "Review Site Recovery built-in monitoring, where used for SAP.",
- "waf": "Cost"
+ "subcategory": "Secrets",
+ "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
- "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
"services": [
- "Monitor",
- "SAP",
- "WAF"
+ "AKV",
+ "AKS"
],
"severity": "High",
- "text": "Review the Monitoring the SAP HANA System Landscape guidance.",
- "waf": "Operations"
+ "subcategory": "Secrets",
+ "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
"services": [
- "VM",
- "WAF",
- "Backup"
+ "AKV",
+ "AKS"
],
"severity": "Medium",
- "text": "Review Oracle Database in Azure Linux VM backup strategies.",
- "waf": "Operations"
+ "subcategory": "Secrets",
+ "text": "If required add Key Management Service etcd encryption",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
- "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
"services": [
- "Storage",
- "WAF",
- "SQL"
+ "AKV",
+ "AKS"
],
- "severity": "Medium",
- "text": "Review the use of Azure Blob Storage with SQL Server 2016.",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Secrets",
+ "text": "If required consider using Confidential Compute for AKS",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
- "service": "SAP",
+ "category": "Governance and Security",
+ "checklist": "Azure AKS Review",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
"services": [
- "VM",
- "WAF",
- "Backup"
+ "AKV",
+ "AKS",
+ "Defender"
],
"severity": "Medium",
- "text": "Review the use of Automated Backup v2 for Azure VMs.",
- "waf": "Operations"
+ "subcategory": "Secrets",
+ "text": "Consider using Defender for Containers",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
"services": [
- "WAF"
+ "AKS",
+ "Entra"
],
"severity": "High",
- "text": "Enabling Write accelerator for M series when using premium disks(V1)",
- "waf": "Operations"
- },
- {
- "checklist": "WAF checklist",
- "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "service": "SAP",
- "services": [
- "WAF"
- ],
- "severity": "Medium",
- "text": "Test availability zone latency.",
- "waf": "Performance"
+ "subcategory": "Identity",
+ "text": "Use managed identities instead of Service Principals",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
- "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF"
+ "AKS",
+ "Entra"
],
"severity": "Medium",
- "text": "Activate SAP EarlyWatch Alert for all SAP components.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
- "waf": "Performance"
+ "subcategory": "Identity",
+ "text": "Integrate authentication with AAD (using the managed integration)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF"
+ "AKS",
+ "Entra"
],
"severity": "Medium",
- "text": "Review SAP application server to database server latency using SAP ABAPMeter report /SSA/CAT.",
- "training": "https://me.sap.com/notes/0002879613",
- "waf": "Performance"
+ "subcategory": "Identity",
+ "text": "Limit access to admin kubeconfig (get-credentials --admin)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
"services": [
- "Monitor",
- "WAF",
- "SQL"
+ "AKS",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "text": "Review SQL Server performance monitoring using CCMS.",
- "waf": "Performance"
+ "subcategory": "Identity",
+ "text": "Integrate authorization with AAD RBAC",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
- "link": "https://me.sap.com/notes/500235",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
"services": [
- "SAP",
- "VM",
- "WAF"
+ "AKS",
+ "RBAC",
+ "Entra"
],
- "severity": "Medium",
- "text": "Test network latency between SAP application layer VMs and DBMS VMs (NIPING).",
- "training": "https://me.sap.com/notes/1100926/E",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
- "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
+ "service": "AKS",
"services": [
- "Monitor",
- "SAP",
- "WAF"
+ "AKS",
+ "Entra"
],
"severity": "Medium",
- "text": "Review SAP HANA studio alerts.",
- "waf": "Performance"
+ "subcategory": "Identity",
+ "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
- "link": "https://me.sap.com/notes/1969700",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF"
+ "AKS",
+ "Entra"
],
"severity": "Medium",
- "text": "Perform SAP HANA health checks using HANA_Configuration_Minichecks.",
- "waf": "Performance"
+ "subcategory": "Identity",
+ "text": "For AKS non-interactive logins use kubelogin (preview)",
+ "waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
+ "service": "AKS",
"services": [
- "VM",
- "WAF"
+ "AKS",
+ "Entra"
],
"severity": "Medium",
- "text": "If you run Windows and Linux VMs in Azure, on-premises, or in other cloud environments, you can use the Update management center in Azure Automation to manage operating system updates, including security patches.",
- "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "subcategory": "Identity",
+ "text": "Disable AKS local accounts",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "08951710-79a2-492a-adbc-06d7a401545b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF"
+ "AKS",
+ "Entra"
],
- "severity": "Medium",
- "text": "Routinely review the SAP security OSS notes because SAP releases highly critical security patches, or hot fixes, that require immediate action to protect your SAP systems.",
- "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
+ "severity": "Low",
+ "subcategory": "Identity",
+ "text": "Configure if required Just-in-time cluster access",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF",
- "SQL"
+ "AKS",
+ "Entra"
],
"severity": "Low",
- "text": "For SAP on SQL Server, you can disable the SQL Server system administrator account because the SAP systems on SQL Server don't use the account. Ensure that another user with system administrator rights can access the server before disabling the original system administrator account.",
+ "subcategory": "Identity",
+ "text": "Configure if required AAD conditional access for AKS",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "service": "AKS",
"services": [
- "WAF",
- "SQL"
+ "AKS",
+ "Entra"
],
- "severity": "High",
- "text": "Disable xp_cmdshell. The SQL Server feature xp_cmdshell enables a SQL Server internal operating system command shell. It's a potential risk in security audits.",
- "training": "https://me.sap.com/notes/3019299/E",
+ "severity": "Low",
+ "subcategory": "Identity",
+ "text": "If required for Windows AKS workloads configure gMSA ",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure AKS Review",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "service": "AKS",
"services": [
- "Storage",
- "Backup",
- "WAF",
- "SQL",
- "SAP"
+ "AKS",
+ "Entra"
],
- "severity": "High",
- "text": "Encrypting SAP HANA database servers on Azure uses SAP HANA native encryption technology. Additionally, if you are using SQL Server on Azure, use Transparent Data Encryption (TDE) to protect your data and log files and ensure that your backups are also encrypted.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "For finer control consider using a managed Kubelet Identity",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "service": "AKS",
"services": [
- "Storage",
- "WAF"
+ "ACR",
+ "AKS",
+ "AppGW"
],
"severity": "Medium",
- "text": "Azure Storage encryption is enabled for all Azure Resource Manager and classic storage accounts, and can't be disabled. Because your data is encrypted by default, you don't need to modify your code or applications to use Azure Storage encryption.",
- "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Best practices",
+ "text": "If using AGIC, do not share an AppGW across clusters",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "service": "AKS",
"services": [
- "AKV",
- "WAF"
+ "AKS"
],
"severity": "High",
- "text": "Use Azure Key Vault to store your secrets and credentials",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
- },
- {
- "checklist": "WAF checklist",
- "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "SAP",
- "services": [
- "RBAC",
- "Subscriptions",
- "AzurePolicy",
- "WAF"
- ],
- "severity": "Medium",
- "text": "It is recommended to LOCK the Azure Resources post successful deployment to safeguard against unauthorized changes. You can also enforce LOCK constraints and rules on your per-subscription basis using customized Azure policies(Custome role).",
- "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Best practices",
+ "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "service": "AKS",
"services": [
- "AKV",
- "AzurePolicy",
- "WAF"
+ "AKS"
],
"severity": "Medium",
- "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Best practices",
+ "text": "For Windows workloads use Accelerated Networking",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"services": [
- "RBAC",
- "AzurePolicy",
- "WAF"
+ "LoadBalancer",
+ "AKS"
],
"severity": "High",
- "text": "Based on existing requirements, regulatory and compliance controls (internal/external) - Determine what Azure Policies and Azure RBAC role are needed",
- "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Best practices",
+ "text": "Use the standard ALB (as opposed to the basic one)",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "service": "AKS",
"services": [
- "Storage",
- "Defender",
- "SAP",
- "WAF"
+ "AKS",
+ "VNet"
],
- "severity": "High",
- "text": "When enabling Microsoft Defender for Endpoint on SAP environment, recommend excluding data and log files on DBMS servers instead of targeting all servers. Follow your DBMS vendor's recommendations when excluding target files.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
+ "severity": "Medium",
+ "subcategory": "Best practices",
+ "text": "If using Azure CNI, consider using different Subnets for NodePools",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
"services": [
- "Defender",
- "RBAC",
- "SAP",
- "WAF"
+ "Cost",
+ "AKS",
+ "PrivateLink",
+ "VNet"
],
- "severity": "High",
- "text": "Delegate an SAP admin custom role with just-in-time access of Microsoft Defender for Cloud.",
- "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "Cost",
+ "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "e8a03f97-8794-468d-96a7-86d60f96c97b",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"services": [
- "SAP",
- "WAF"
+ "VPN",
+ "AKS"
],
- "severity": "Low",
- "text": "encrypt data in transit by integrating the third-party security product with secure network communications (SNC) for DIAG (SAP GUI), RFC, and SPNEGO for HTTPS",
- "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "HA",
+ "text": "If hybrid connectivity is required, use 2xER or ER+VPN for better availability",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"services": [
- "AKV",
- "WAF"
+ "AKS"
],
- "severity": "Medium",
- "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "IPAM",
+ "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "AKV",
- "WAF"
+ "AKS",
+ "VNet"
],
"severity": "High",
- "text": "Use an Azure Key Vault per application per environment per region.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "subcategory": "IPAM",
+ "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
- "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "SAP",
- "AKV",
- "WAF"
+ "AKS"
],
"severity": "High",
- "text": "To control and manage disk encryption keys and secrets for non-HANA Windows and non-Windows operating systems, use Azure Key Vault. SAP HANA isn't supported with Azure Key Vault, so you must use alternate methods like SAP ABAP or SSH keys.",
- "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "subcategory": "IPAM",
+ "text": "If using Azure CNI, check the maximum pods/node (default 30)",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "service": "AKS",
"services": [
- "SAP",
- "RBAC",
- "Subscriptions",
- "WAF"
+ "AKS",
+ "VNet"
],
- "severity": "High",
- "text": "Customize role-based access control (RBAC) roles for SAP on Azure spoke subscriptions to avoid accidental network-related changes",
- "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "severity": "Low",
+ "subcategory": "IPAM",
+ "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
- "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "PrivateLink",
- "SAP",
- "NVA",
- "WAF"
+ "AKS"
],
"severity": "High",
- "text": "Isolate DMZs and NVAs from the rest of the SAP estate, configure Azure Private Link, and securely manage and control the SAP on Azure resources",
- "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
- "waf": "Security"
+ "subcategory": "IPAM",
+ "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
- "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
+ "service": "AKS",
"services": [
- "Storage",
- "VM",
- "WAF"
+ "AKS"
],
"severity": "Low",
- "text": "Consider using Microsoft anti-malware software on Azure to protect your virtual machines from malicious files, adware, and other threats.",
- "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
+ "subcategory": "Operations",
+ "text": "If required add your own CNI plugin",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "service": "AKS",
"services": [
- "Defender",
- "WAF"
+ "AKS"
],
"severity": "Low",
- "text": "For even more powerful protection, consider using Microsoft Defender for Endpoint.",
- "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Operations",
+ "text": "If required configure Public IP per node in AKS",
+ "waf": "Performance"
},
{
- "checklist": "WAF checklist",
- "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "service": "AKS",
"services": [
- "VNet",
- "SAP",
- "WAF"
+ "AKS"
],
- "severity": "High",
- "text": "Isolate the SAP application and database servers from the internet or from the on-premises network by passing all traffic through the hub virtual network, which is connected to the spoke network by virtual network peering. The peered virtual networks guarantee that the SAP on Azure solution is isolated from the public internet.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Scalability",
+ "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "service": "AKS",
"services": [
- "SAP",
- "WAF"
+ "AKS"
],
"severity": "Low",
- "text": "For internet-facing applications like SAP Fiori, make sure to distribute load per application requirements while maintaining security levels. For Layer 7 security, you can use a third-party Web Application Firewall (WAF) available in the Azure Marketplace.",
- "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Scalability",
+ "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
- "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "service": "AKS",
"services": [
- "Monitor",
- "SAP",
- "AKV",
- "WAF"
+ "AKS"
],
"severity": "Medium",
- "text": "To enable secure communication in Azure Monitor for SAP solutions, you can choose to use either a root certificate or a server certificate. We highly recommend that you use root certificates.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Scalability",
+ "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
+ "waf": "Reliability"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Service Bus Premium provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
- "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "service": "AKS",
"services": [
- "ServiceBus",
- "WAF"
+ "AKS",
+ "NVA"
],
- "severity": "Low",
- "text": "Use customer-managed key option in data at rest encryption when required",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Communication between a client application and an Azure Service Bus namespace is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Service Bus namespace to require that clients send and receive data with a newer version of TLS.",
- "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "service": "AKS",
"services": [
- "ServiceBus",
- "WAF"
+ "AKS"
],
"severity": "Medium",
- "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "subcategory": "Security",
+ "text": "If using a public API endpoint, restrict the IP addresses that can access it",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has Manage permissions for the entire namespace. It's recommended that you treat this rule like an administrative root account and don't use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
- "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "service": "AKS",
"services": [
- "Entra",
- "TrafficManager",
- "RBAC",
- "ServiceBus",
- "WAF",
- "AzurePolicy"
+ "AKS"
],
- "severity": "Medium",
- "text": "Avoid using root account when it is not necessary",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Use private clusters if your requirements mandate it",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "A Service Bus client app running inside an Azure App Service application or in a virtual machine with enabled managed entities for Azure resources support does not need to handle SAS rules and keys, or any other access tokens. The client app only needs the endpoint address of the Service Bus Messaging namespace. ",
- "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"services": [
- "Storage",
- "Entra",
- "AKV",
- "WAF",
- "ServiceBus",
- "VM",
- "AppSvc"
+ "AKS",
+ "AzurePolicy"
],
"severity": "Medium",
- "text": "When possible, your application should be using a managed identity to authenticate to Azure Service Bus. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "subcategory": "Security",
+ "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "When creating permissions, provide fine-grained control over a client's access to Azure Service Bus. Permissions in Azure Service Bus can and should be scoped to the individual resource level e.g. queue, topic or subscription. ",
- "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"services": [
- "Storage",
- "RBAC",
- "Subscriptions",
- "ServiceBus",
- "WAF"
+ "AKS",
+ "AzurePolicy"
],
"severity": "High",
- "text": "Use least privilege data plane RBAC",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "subcategory": "Security",
+ "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Service Bus resource logs include operational logs, virtual network and IP filtering logs. Runtime audit logs capture aggregated diagnostic information for various data plane access operations (such as send or receive messages) in Service Bus.",
- "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"services": [
- "VNet",
- "Monitor",
- "ServiceBus",
- "WAF"
+ "AKS",
+ "AzurePolicy"
],
- "severity": "Medium",
- "text": "Enable logging for security investigation. Use Azure Monitor to trace resource logs and runtime audit logs (currently available only in the premium tier)",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Use Kubernetes network policies to increase intra-cluster security",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "Azure Service Bus by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Service Bus traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
- "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"services": [
- "VNet",
- "PrivateLink",
- "ServiceBus",
- "WAF"
+ "WAF",
+ "AKS"
],
- "severity": "Medium",
- "text": "Consider using private endpoints to access Azure Service Bus and disable public network access when applicable.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Use a WAF for web workloads (UIs or APIs)",
"waf": "Security"
},
{
- "checklist": "WAF checklist",
- "description": "With IP firewall, you can restrict the public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
- "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
- "service": "Service Bus",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "service": "AKS",
"services": [
- "ServiceBus",
- "WAF"
+ "DDoS",
+ "AKS",
+ "VNet"
],
"severity": "Medium",
- "text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "subcategory": "Security",
+ "text": "Use DDoS Standard in the AKS Virtual Network",
"waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Redis Resiliency checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "service": "AKS",
"services": [
- "ACR"
+ "AKS"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Enable zone redundancy for Azure Cache for Redis. Azure Cache for Redis supports zone redundant configurations in the Premium and Enterprise tiers. A zone redundant cache can place its nodes across different Azure Availability Zones in the same region. It eliminates data center or AZ outage as a single point of failure and increases the overall availability of your cache.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Security",
+ "text": "If required add company HTTP Proxy",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Redis Resiliency checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure AKS Review",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "service": "AKS",
"services": [
- "Storage"
+ "AKS"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Configure data persistence for an Azure Cache for Redis instance. Because your cache data is stored in memory, a rare and unplanned failure of multiple nodes can cause all the data to be dropped. To avoid losing data completely, Redis persistence allows you to take periodic snapshots of in-memory data, and store it to your storage account.",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Consider using a service mesh for advanced microservice communication management",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Redis Resiliency checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "service": "AKS",
"services": [
- "Storage"
+ "Monitor",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use Geo-redundant storage account to persist Azure Cache for Redis data, or zonally redundant where geo-redundancy is not available",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Alerting",
+ "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Redis Resiliency checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "service": "AKS",
"services": [
- "ASR"
+ "AKS",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Configure passive geo-replication for Premium Azure Cache for Redis instances. Geo-replication is a mechanism for linking two or more Azure Cache for Redis instances, typically spanning two Azure regions. Geo-replication is designed mainly for cross-region disaster recovery. Two Premium tier cache instances are connected through geo-replication in a way that provides reads and writes to your primary cache, and that data is replicated to the secondary cache.",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Bot Service",
- "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
- "service": "Bot service",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Follow reliability support recommendations in Azure Bot Service",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Check regularly Azure Advisor for recommendations on your cluster",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Bot Service",
- "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
- "service": "Bot service",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Deploying bots with local data residency and regional compliance",
- "waf": "Reliability"
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "service": "AKS",
+ "services": [
+ "AKS"
+ ],
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Enable AKS auto-certificate rotation",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Bot Service",
- "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
- "service": "Bot service",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Azure Bot Service runs in active-active mode for both global and regional services. When an outage occurs, you don't need to detect errors or manage the service. Azure Bot Service automatically performs auto failover and auto recovery in a multi-region geographical architecture. For the EU bot regional service, Azure Bot Service provides two full regions inside Europe with active/active replication to ensure redundancy. For the global bot service, all available regions/geographies can be served as the global footprint.",
- "waf": "Reliability"
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "service": "AKS",
+ "services": [
+ "AKS"
+ ],
+ "severity": "High",
+ "subcategory": "Compliance",
+ "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "service": "AKS",
"services": [
- "SQL"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage Flexible Server",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Compliance",
+ "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "service": "AKS",
"services": [
- "SQL"
+ "AKS"
],
"severity": "High",
- "subcategory": "Best Practices",
- "text": "Leverage Availability Zones where regionally applicable",
- "waf": "Reliability"
+ "subcategory": "Compliance",
+ "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "service": "AKS",
"services": [
- "SQL"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage Data-in replication for cross-region DR scenarios",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "Reliability"
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "service": "AKS",
+ "services": [
+ "AKS"
+ ],
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Consider using AKS command invoke on private clusters",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "Reliability"
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "service": "AKS",
+ "services": [
+ "AKS"
+ ],
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "For planned events consider using Node Auto Drain",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
- "services": [],
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
+ "service": "AKS",
+ "services": [
+ "AKS"
+ ],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "subcategory": "Compliance",
+ "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
"services": [
- "AppSvc"
+ "AKS"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Use custom Node RG (aka 'Infra RG') name",
+ "waf": "Operations"
},
{
- "category": "Application Deployment",
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
- "services": [],
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "service": "AKS",
+ "services": [
+ "AKS"
+ ],
"severity": "Medium",
- "subcategory": "CI/CD",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
+ "subcategory": "Compliance",
+ "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
"waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "service": "AKS",
"services": [
- "Monitor",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Azure Monitor - enforce data collection rules",
- "text": "Data collection rules in Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Taint Windows nodes",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "service": "AKS",
"services": [
- "Backup",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Backup",
- "text": "check backup instances with the underlying datasource not found",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Keep windows containers patch level in sync with host patch level",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "description": "Via Diagnostic Settings at the cluster level",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
"services": [
- "Cost"
+ "Monitor",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Delete/archive",
- "text": "Delete or archive unassociated services (disks, nics, ip addresses etc)",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "659d3958-fd77-4289-a835-556df2bfe456",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Delete/archive",
- "text": "Consider snooze and stop technique (snooze a service after x days, stop after 2x, delete/deallocate after 3x)",
+ "severity": "Low",
+ "subcategory": "Compliance",
+ "text": "If required use nodePool snapshots",
"waf": "Cost"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "3b0d834a-3487-426d-b69c-6b5c2a26494b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
"services": [
- "Storage",
- "Backup",
- "Cost"
+ "Cost",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Delete/archive",
- "text": "Delete or archive unused resources (old backups, logs, storage accounts, etc...)",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Cost",
+ "text": "Consider spot node pools for non time-sensitive workloads",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"services": [
- "Storage",
- "ASR",
- "Backup",
- "Cost"
+ "Cost",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Delete/archive",
- "text": "Consider a good balance between site recovery storage and backup for non mission critical applications",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Cost",
+ "text": "Consider AKS virtual node for quick bursting",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"services": [
"Monitor",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Log Analytics retention for workspaces",
- "text": "Check spending and savings opportunities among the 40 different log analytics workspaces- use different retention and data collection for nonprod workspaces-create daily cap for awareness and tier sizing - If you do set a daily cap, in addition to creating an alert when the cap is reached,ensure that you also create an alert rule to be notified when some percentage has been reached (90% for example). - consider workspace transformation if possible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"services": [
- "Storage",
- "AzurePolicy",
- "Cost"
+ "Monitor",
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Policy",
- "text": "Enforce a purging log policy and automation (if needed, logs can be moved to cold storage)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "59bb91a3-ed90-4cae-8cc8-4c37b6b780cb",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
"services": [
- "Cost"
+ "Monitor",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Run orphaned resources workbook - delete or snooze ghost items",
- "text": "https://github.com/dolevshor/azure-orphan-resources",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "Monitor CPU and memory utilization of the nodes",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "9fe5c464-89d4-457a-a27c-3874d0102cac",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"services": [
- "Cost"
+ "Monitor",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Shutdown/deallocate",
- "text": "Shutdown underutilized instances",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/analyze-unexpected-charges",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
"services": [
"Storage",
- "VM",
- "Backup",
- "Cost"
+ "ServiceBus",
+ "EventHubs",
+ "Monitor",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "stopped/deallocated VMs: check disks",
- "text": "Check that the disks are really needed, if not: delete. If they are needed, find lower storage tiers or use backup -",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "Monitor OS disk queue depth in nodes",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"services": [
- "Storage",
- "AzurePolicy",
- "Cost"
+ "LoadBalancer",
+ "Monitor",
+ "AKS",
+ "NVA"
],
"severity": "Medium",
- "subcategory": "storage accounts lifecycle policy",
- "text": "Consider moving unused storage to lower tier, with customized rule - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
+ "waf": "Operations"
},
{
- "category": "Cleanup",
- "checklist": "Cost Optimization Checklist",
- "guid": "f2bfe456-3b0d-4834-a348-726de69c6b5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
"services": [
- "Cost"
+ "Monitor",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Tagging",
- "text": "Use specific tags for temporary items with 'delete by DATE' format - and automate monthly cleanup",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "Subscribe to resource health notifications for your AKS cluster",
+ "waf": "Operations"
},
{
- "category": "DB/App tuning",
- "checklist": "Cost Optimization Checklist",
- "guid": "2a26494b-69ba-4d37-aad5-3cc78e1d7666",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "DB optimization",
- "text": "Plan for db optimization with the intent of downsizing the related services (and improve performance)",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Resources",
+ "text": "Configure requests and limits in your pod specs",
+ "waf": "Operations"
},
{
- "category": "DB/APP tuning",
- "checklist": "Cost Optimization Checklist",
- "guid": "7357c449-674b-45ed-a5a8-59c7733be2a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
"severity": "Medium",
- "subcategory": "App modernization",
- "text": "Modernizing the app towards a microservices architecture will have the effect of letting the app scale according to the single service and not the entire stack",
- "waf": "Cost"
+ "subcategory": "Resources",
+ "text": "Enforce resource quotas for namespaces",
+ "waf": "Operations"
},
{
- "category": "DB/APP tuning",
- "checklist": "Cost Optimization Checklist",
- "guid": "a27b765a-91be-41f3-a8ef-394c2bd463cb",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "AKS",
"services": [
- "Storage",
- "VM",
- "Cost"
+ "AKS",
+ "Subscriptions"
],
- "severity": "Medium",
- "subcategory": "DB optimization",
- "text": "optimizing the DB queries will increase performance and allow better right-sizing of storage and VMs",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Resources",
+ "text": "Ensure your subscription has enough quota to scale out your nodepools",
+ "waf": "Operations"
},
{
- "category": "DB/APP tuning",
- "checklist": "Cost Optimization Checklist",
- "guid": "bac75819-59bb-491a-9ed9-0cae2cc84c37",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
+ "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Demand shaping",
- "text": "Using demand shaping on PaaS services will optimize costs and performances",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Resources",
+ "text": "Configure Liveness and Readiness probes for all deployments",
+ "waf": "Operations"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "b6b780cb-9fe5-4c46-989d-457a927c3874",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"services": [
- "Entra",
- "Cost"
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Advisor",
- "text": "Start from the Azure Advisor page suggestions.",
- "waf": "Cost"
+ "subcategory": "Scalability",
+ "text": "Use the Cluster Autoscaler",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
"services": [
- "VM",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Advisor",
- "text": "Make sure advisor is configured for VM right sizing ",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Scalability",
+ "text": "Customize node configuration for AKS node pools",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "881a1bd5-d1e4-44a1-a659-d3958fd77289",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Automation",
- "text": "Consider implementing IaC scripts or devops pipelines to match the cost governance process",
- "waf": "Cost"
+ "subcategory": "Scalability",
+ "text": "Use the Horizontal Pod Autoscaler when required",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "b835556d-f2bf-4e45-93b0-d834a348726d",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
"services": [
- "Monitor",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Automation",
- "text": "Set up cost alerts for applications that have variable costs (ideally for all of them)",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Scalability",
+ "text": "Consider an appropriate node size, not too large or too small",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "e69c6b5c-2a26-4494-a69b-ad37aad53cc7",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Automation",
- "text": "Use Azure Automation: Automate repetitive tasks can help you save time and resources, reducing costs in the process. ",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Scalability",
+ "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "8e1d7666-7357-4c44-a674-b5ed85a859c7",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Automation",
- "text": "Run orphaned resources workbook",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Scalability",
+ "text": "Consider subscribing to EventGrid Events for AKS automation",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "733be2a1-a27b-4765-a91b-e1f388ef394c",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
"services": [
- "Storage",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Baseline",
- "text": "Try and establish a baseline of monthly spending and an acceptable saving target against the baseline (new services will not be optimized at this stage)",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Scalability",
+ "text": "For long running operation on an AKS cluster consider event termination",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "2bd463cb-bac7-4581-a59b-b91a3ed90cae",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
"services": [
- "AzurePolicy",
- "Cost"
+ "AKS"
],
- "severity": "Medium",
- "subcategory": "Baseline",
- "text": "Establish a cost optimization baseline by using a policy that tags every new resource as #NEW",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Scalability",
+ "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "2cc84c37-b6b7-480c-a9fe-5c46489d457a",
- "link": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management-config",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Baseline",
- "text": "Organize resources to maximize cost insights and accountability",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Use ephemeral OS disks",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "927c3874-d010-42ca-a6aa-e01e6a84de5d",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Budgets",
- "text": "Create budgets",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "e36d1d92-881a-41bd-9d1e-44a19659d395",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Cost Analysis",
- "text": "In cost analysis - use daily granularity, grouped by service name to analyze the spending of the past 3 months and identify the top 3 spenders",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Storage",
+ "text": "For hyper performance storage option use Ultra Disks on AKS",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "8fd77289-b835-4556-bf2b-fe4563b0d834",
- "link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
"services": [
- "Cost"
+ "SQL",
+ "AKS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Cost Analysis",
- "text": "Check daily for cost spikes and anomalies (ideally with automatic billing exports)",
- "waf": "Cost"
+ "subcategory": "Storage",
+ "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "a348726d-e69c-46b5-a2a2-6494b69bad37",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
"services": [
- "Cost"
+ "AKS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Cost Analysis",
- "text": "Automate cost retrieval for deep analysis or integration",
- "waf": "Cost"
+ "subcategory": "Storage",
+ "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "aad53cc7-8e1d-4766-9735-7c449674b5ed",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "category": "Operations",
+ "checklist": "Azure AKS Review",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
"services": [
- "ACR",
- "Cost"
+ "AKS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Free services",
- "text": "Take advantage of Azure free services: Azure offers a number of free services, such as DevOps, Azure Container Registry, and Azure Logic Apps, that can help you save costs on development and operations. ",
- "waf": "Cost"
+ "subcategory": "Storage",
+ "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
+ "waf": "Performance"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "96c96ad8-844c-4f3b-8b38-c886ba2c0214",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "services": [
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "1fc2fc14-eea6-4e69-b8d9-a3edc218e687",
+ "link": "https://polite-sea-0995b240f.2.azurestaticapps.net/technical-delivery-playbook/azure-services/analytics/purview/",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Tagging",
- "text": "Tag shared resources",
- "waf": "Cost"
+ "subcategory": "Best Practices",
+ "text": "Leverage FTA Resillency Handbook",
+ "waf": "Reliability"
},
{
- "category": "Process Administration",
- "checklist": "Cost Optimization Checklist",
- "guid": "99014a5d-3ce5-474d-acbd-9792a6bcca2b",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "ab067acb-49e5-4b96-8332-4ecf8cc13318",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Cost"
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "Tagging",
- "text": "Consider using tags to all services for cost allocation",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Disaster Recovery",
+ "text": "Plan for Data Center level outage",
+ "waf": "Reliability"
},
{
- "category": "reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "4fea1dbf-3dd9-45d4-ac7c-891dcb1f7d57",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "description": "1. Create the new account 2. Migrate configuration items 3. Run scans 4. Migrate custom typedefs and custom assets 5. Migrate relationships 6. Migrate glossary terms 7. Assign classifications to assets 8. Assign contacts to assets",
+ "guid": "da611702-69f4-4fb4-aa3d-3ef7f3176c4b",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Cost"
+ "ASR"
],
"severity": "Medium",
- "subcategory": "automation",
- "text": "Consider Reservation automation to track and promptly react to changes",
- "waf": "Cost"
+ "subcategory": "Disaster Recovery",
+ "text": "Practice Failover for BCDR",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "description": "check by searching the Meter Category Licenses in the Cost analysys",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "97b15b8a-219a-44ab-bb57-879024d22678",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "VM",
- "AzurePolicy",
- "Cost",
- "SQL"
+ "Backup"
],
- "severity": "Medium",
- "subcategory": "check AHUB is applied to all Windows VMs, RHEL and SQL",
- "text": "run the script on all windows VMs https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- consider implementing a policy if windows VMs are created frequently",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Backup and Restore ",
+ "text": "Plan a backup strategy and take regular backups",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "6d20b56c-56a9-4581-89bf-8d8e5c586b7d",
+ "link": "https://learn.microsoft.com/purview/manage-kafka-dotnet",
+ "service": "Purview",
"services": [
- "LoadBalancer",
- "Cost"
+ "EventHubs"
],
- "severity": "Medium",
- "subcategory": "Check Red Hat Licences if applicable",
- "text": " this can be also put under AHUB if you already have licenses https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Purview Accounts Replications",
+ "text": "Use Microsoft Purview's Event Hubs to subscribe and create entities to another account",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "a76af4a6-91e8-4839-ada4-6667e13c1056",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "services": [
- "Cost",
- "AppSvc"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "8cdc15ac-c075-4ee9-a130-a8889579e76b",
+ "link": "https://learn.microsoft.com/purview/deployment-best-practices",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "Saving plans will provide 17% on select app service plans",
- "waf": "Cost"
- },
+ "subcategory": "Data catalog",
+ "text": "Follow Purview accounts architectures and deployment best practices",
+ "waf": "Reliability"
+ },
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "services": [
- "VM",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "896e710a-7da7-4be9-a56d-14d3c49d997c",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-collections",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Planning",
- "text": "Consolidate reserved VM families with flexibility option (no more than 4-5 families)",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "Cost"
+ "subcategory": "Data catalog",
+ "text": "Follow Collection Architectures and best practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "services": [
- "ARS",
- "VM",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "b3d1325a-a225-4c6f-9e06-85edddea8a4b",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-asset-lifecycle",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Reservations/savings plans",
- "text": "Utilize Azure Reserved Instances: This feature allows you to reserve VMs for a period of 1 or 3 years, providing significant cost savings compared to PAYG prices.",
- "waf": "Cost"
+ "subcategory": "Data catalog",
+ "text": "Follow Assest lifecycle best practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "a785c6fe-96c9-46ad-a844-cf3b2b38c886",
- "link": "https://azure.microsoft.com/resources/achieving-compliant-data-residency-and-security-with-azure/",
- "services": [
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "7cdeb3c6-1fc2-4fc1-9eea-6e69d8d9a3ed",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-automation",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Reservations/savings plans",
- "text": "Plan for Azure Savings Plans for all the workloads that are dynamic and need maximum flexibility",
- "waf": "Cost"
+ "subcategory": "Data catalog",
+ "text": "Follow automation best practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "ba2c0214-9901-44a5-b3ce-574dccbd9792",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "c218e687-ab06-47ac-a49e-5b9603324ecf",
+ "link": "https://learn.microsoft.com/purview/disaster-recovery",
+ "service": "Purview",
"services": [
- "Cost"
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Reservations/savings plans",
- "text": "Plan for Azure Reservations for all the workloads that are less dynamic and won't change much",
- "waf": "Cost"
+ "subcategory": "Data catalog",
+ "text": "Follow Backup and Migration Best practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "services": [
- "Storage",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "8cc13318-da61-4170-869f-4fb4aa3d3ef7",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-glossary",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Reserve storage",
- "text": "Only larger disks can be reserved => 1 TiB -",
- "waf": "Cost"
+ "subcategory": "Data catalog",
+ "text": "Follow Purview Glossary Best Practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
- "services": [
- "VM",
- "Cost"
- ],
- "severity": "Medium",
- "subcategory": "Reserve VMs with normalized and rationalized sizes",
- "text": "After the right-sizing optimization",
- "waf": "Cost"
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "f3176c4b-97b1-45b8-a219-a4abeb578790",
+ "link": "https://learn.microsoft.com/purview/concept-workflow",
+ "service": "Purview",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Data catalog",
+ "text": "Leverage Workflows ",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
- "services": [
- "AzurePolicy",
- "Cost",
- "SQL"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "24d22678-6d20-4b56-a56a-958119bf8d8e",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-security",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "SQL Database AHUB",
- "text": "Check if applicable and enforce policy/change https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
- "waf": "Cost"
+ "subcategory": "Data catalog",
+ "text": "Follow Purview Security Best Practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
- "services": [
- "VM",
- "Cost",
- "SQL"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "5c586b7d-8cdc-415a-ac07-5ee9b130a888",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-lineage-azure-data-factory",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "SQL Database Reservations",
- "text": "The VM + license part discount (ahub + 3YRI) is around 70% discount",
- "waf": "Cost"
+ "subcategory": "Data Map",
+ "text": "Follow Purview Data Lineage Best Practices",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "e13c1056-75c1-4e94-9b45-9837ff7ae7c6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
- "services": [
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "9579e76b-896e-4710-a7da-7be9956d14d3",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-scanning",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Tracking",
- "text": "Make sure you Azure Reservations and Savings plans are close to 100% utilization or make the necessary changes to reach it.",
- "waf": "Cost"
+ "subcategory": "Data Map",
+ "text": "Follow Best Practices for Scanning Registered Sources",
+ "waf": "Reliability"
},
{
- "category": "Reservations",
- "checklist": "Cost Optimization Checklist",
- "guid": "d3b475a5-c7ac-4be4-abbe-64dd89f2e877",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
- "services": [
- "AzurePolicy",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "c49d997c-b3d1-4325-aa22-5c6f4e0685ed",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-classification",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Tracking",
- "text": "Make sure that your reservations usage is close to 100%. If not, either enforce an allowed SKU policy or exchange the reservation",
- "waf": "Cost"
+ "subcategory": "Data Map",
+ "text": "Follow Classification Best Practices in Governance Portal",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "78468d55-a785-4c6f-b96c-96ad8844cf3b",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
- "services": [
- "AzurePolicy",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "ddea8a4b-7cde-4b3c-91fc-2fc14eea6e69",
+ "link": "https://learn.microsoft.com/purview/sensitivity-labels-frequently-asked-questions",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Automation",
- "text": "Plan and enforce a On/Off policy for production services, where possible",
- "waf": "Cost"
+ "subcategory": "Data Map",
+ "text": "Perform Sensitivity Labelling in the Purview Data Map",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "2b38c886-ba2c-4021-9990-14a5d3ce574d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "d8d9a3ed-c218-4e68-9ab0-67acb49e5b96",
+ "link": "https://learn.microsoft.com/purview/concept-data-share",
+ "service": "Purview",
"services": [
- "AzurePolicy",
- "Cost"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Automation",
- "text": "Plan and enforce a On-Demand policy with auto-shutdown for non-production services, where possible",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Data Sharing",
+ "text": "Leverage Azure Storage in-place data sharing with Microsoft Purview",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "services": [
- "VM",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "03324ecf-8cc1-4331-ada6-1170269f4fb4",
+ "link": "https://learn.microsoft.com/purview/concept-insights",
+ "service": "Purview",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Data Estate",
+ "text": "Leverage Data Estate Insights",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "aa3d3ef7-f317-46c4-a97b-15b8a219a4ab",
+ "link": "https://learn.microsoft.com/purview/catalog-adoption-insights",
+ "service": "Purview",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Data Estate",
+ "text": "Use Data stewardship and Catalog adoption",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "eb578790-24d2-4267-a6d2-0b56c56a9581",
+ "link": "https://learn.microsoft.com/purview/concept-insights",
+ "service": "Purview",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Data Estate",
+ "text": "Use Inventory and Ownership",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "19bf8d8e-5c58-46b7-b8cd-c15acc075ee9",
+ "link": "https://learn.microsoft.com/purview/glossary-insights",
+ "service": "Purview",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Data Estate",
+ "text": "Leverage Insights for Glossary, Classifications, Sensitivity Labels",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "b130a888-9579-4e76-a896-e710a7da7be9",
+ "link": "https://learn.microsoft.com/purview/compliance-manager",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Autoscale",
- "text": "Consider using a VMSS to match demand rather than flat sizing",
- "waf": "Cost"
+ "subcategory": "Data Quality ",
+ "text": "Generate assessment scores",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
- "services": [
- "AKS",
- "Cost"
- ],
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "956d14d3-c49d-4997-ab3d-1325aa225c6f",
+ "link": "https://learn.microsoft.com/purview/compliance-manager-scoring",
+ "service": "Purview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Autoscale",
- "text": "Use AKS autoscaler to match your clusters usage (make sure the pods requirements match the scaler)",
- "waf": "Cost"
+ "subcategory": "Data Quality ",
+ "text": "Profiling- get summaries of data content",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "93665720-2bff-4456-9b0d-934a359c363e",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "4e0685ed-ddea-48a4-a7cd-eb3c61fc2fc1",
+ "link": "https://learn.microsoft.com/purview/concept-policies-data-owner#microsoft-purview-policy-concepts",
+ "service": "Purview",
"services": [
- "Cost"
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Autoscale",
- "text": "Right-size PaaS service according to average use and accomodate spikes with auto or manual scaling",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Data Policy",
+ "text": "Follow Microsoft Purview Data Owner access policies",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "7dd61623-a364-4a90-9eba-e38ead53cc7d",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "4eea6e69-d8d9-4a3e-bc21-8e687ab067ac",
+ "link": "https://learn.microsoft.com/purview/concept-self-service-data-access-policy",
+ "service": "Purview",
"services": [
- "Cost"
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Autoscale",
- "text": "Plan for demand shaping where applicable",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Data Policy",
+ "text": "Follow Self-service access policies",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "e2e8aaab-3571-4549-ab91-53d89f89dc7b",
+ "category": "Operations management",
+ "checklist": "Microsoft Purview Review Checklist",
+ "guid": "b49e5b96-0332-44ec-b8cc-13318da61170",
+ "link": "https://learn.microsoft.com/purview/concept-policies-devops",
+ "service": "Purview",
"services": [
- "Cost"
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Autoscale",
- "text": "Consider implementing a service re-scaling logic within the application",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/savings-plan/",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "Data Policy",
+ "text": "Follow DevOps policies",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
+ "category": "BC and DR",
+ "checklist": "Container Apps Review",
+ "guid": "af416482-663c-4ed6-b195-b44c7068e09c",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support",
+ "query": "resources | where type =~ 'Microsoft.App/managedEnvironments' | project name, resourceGroup, location, zoneRedundancy = tolower(tostring(properties.zoneRedundant)) | extend Compliance = iff(zoneRedundancy == 'true', true, false)",
+ "service": "Container Apps",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Leverage Availability Zones if regionally applicable",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Container Apps Review",
+ "guid": "95bc80ec-6499-4d14-a7d2-7d296b1d8abc",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment",
+ "query": "resources | where type =~ 'Microsoft.App/containerApps' | project name, resourceGroup, location, minReplicas = toint(properties.template.scale.minReplicas), maxReplicas = toint(properties.template.scale.maxReplicas) | extend Compliance = iff(minReplicas >= 1, true, false)",
+ "service": "Container Apps",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Use more than one replica and enable Zone Redundancy.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Container Apps Review",
+ "guid": "ccaa4fc2-fdbc-4432-8bb7-f7e6469e4dc3",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Container Apps",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "For cross-region DR, deploy container apps in multiple regions and follow active/active or active/passive application guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Container Apps Review",
+ "guid": "2ffada86-c031-4933-bf7d-0c45bc4e5919",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Container Apps",
"services": [
- "Backup",
- "Cost"
+ "TrafficManager",
+ "FrontDoor"
],
- "severity": "Medium",
- "subcategory": "Backup",
- "text": "Move recovery points to vault-archive where applicable (Validate)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Use Front Door or Traffic Manager to route traffic to the closest region",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
"services": [
- "LoadBalancer",
- "VM",
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Databricks",
- "text": "Consider using Spot VMs with fallback where possible. Consider autotermination of clusters.",
- "waf": "Cost"
+ "subcategory": "Entra ID",
+ "text": "Use long-live revocable token, cache your token and acquire your silently using Microsoft Identity Library",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
"services": [
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "Functions - Reuse connections",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "Cost"
+ "subcategory": "AAD B2C",
+ "text": "Make sure that your sign-in user flows are backed up and resilient. Make sure that the code that you use to sign-in your users are backed up and recoverable. Resilient interfaces with external processes",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
"services": [
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "Functions - Cache data locally",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "Cost"
+ "subcategory": "AAD B2C",
+ "text": "Custom brand assets should be hosted on a CDN",
+ "waf": "Performance"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
"services": [
- "Storage",
- "Cost"
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Functions",
- "text": "Functions - Cold starts-Use the 'Run from package' functionality. This way, the code is downloaded as a single zip file. This can, for example, result in significant improvements with Javascript functions, which have a lot of node modules.Use language specific tools to reduce the package size, for example, tree shaking Javascript applications.",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Cost"
+ "severity": "Low",
+ "subcategory": "AAD B2C",
+ "text": "Have multiple identiy providers (i.e., login with your microsoft, google, facebook accounts)",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"services": [
- "Cost"
+ "Entra",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "Functions - Keep your functions warm",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Cost"
+ "subcategory": "Windows Server AD",
+ "text": "Follow VM rules for high availability on the VM level (premium disks, two or more in a region, in different availability zones)",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"services": [
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "When using autoscale with different functions, there might be one driving all the autoscale for all the resources - consider moving it to a separate consumption plan (and consider higher plan for CPU)",
- "waf": "Cost"
+ "subcategory": "Windows Server AD",
+ "text": "Don't replicate! Replication can create issues with directory synchronization",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"services": [
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "Function apps in a given plan are all scaled together, so any issues with scaling can affect all apps in the plan.",
- "waf": "Cost"
+ "subcategory": "Windows Server AD",
+ "text": "Have active-active for multi-regions",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
"services": [
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Functions",
- "text": "Am I billed for 'await time'? This question is typically asked in the context of a C# function that does an async operation and waits for the result, e.g. await Task.Delay(1000) or await client.GetAsync('http://google.com'). The answer is yes - the GB second calculation is based on the start and end time of the function and the memory usage over that period. What actually happens over that time in terms of CPU activity is not factored into the calculation.One exception to this rule is if you are using durable functions. You are not billed for time spent at awaits in orchestrator functions.apply demand shaping techinques where possible (dev environments?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "Cost"
+ "subcategory": "Entra Domain Services",
+ "text": "Add Azure AD Domain service stamps to additional regions and locations",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "df03a822-cd46-43cb-abc8-ac299ebc91a4",
- "link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
+ "category": "Operations Management",
+ "checklist": "Identity Review Checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
"services": [
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Evaluate your network topology against networking costs and where applicable reduce the egress and peering data",
- "waf": "Cost"
+ "subcategory": "Entra Domain Services",
+ "text": "Use Replica Sets for DR",
+ "waf": "Reliability"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
+ "service": "AVS",
"services": [
- "EventHubs",
- "FrontDoor",
- "Cost"
+ "Entra",
+ "AVS",
+ "Subscriptions"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Frontdoor - Turn off the default homepageIn the application settings of your App, set AzureWebJobsDisableHomepage to true. This will return a 204 (No Content) to the PoP so only header data is returned.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Ensure ADDS domain controller(s) are deployed in the identity subscription in native Azure",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "Cost",
- "AppSvc"
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Frontdoor - Route to something that returns nothing. Either set up a Function, Function Proxy, or add a route in your WebApp that returns 200 (OK) and sends no or minimal content. The advantage of this is you will be able to log out when it is called.",
- "waf": "Cost"
+ "subcategory": "Identity",
+ "text": "Ensure ADDS sites and services is configured to keep authentication requests from Azure-based resources (including Azure VMware Solution) local to Azure",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "f843e52f-4722-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
+ "service": "AVS",
"services": [
- "Cost"
+ "Entra",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "PaaS",
- "text": "Consider using free tiers where applicable for all non-production environments",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Ensure that vCenter is connected to ADDS to enable authentication based on 'named user accounts'",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "b9de39ac-0e7c-428d-a936-657202bff456",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
+ "service": "AVS",
"services": [
- "Cost"
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Serverless",
- "text": "Using serverless patterns for spikes can help keeping costs down",
- "waf": "Cost"
+ "subcategory": "Identity",
+ "text": "Ensure that the connection from vCenter to ADDS is using a secure protocol (LDAPS)",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Consider archiving tiers for less used data",
- "waf": "Cost"
+ "subcategory": "Identity",
+ "text": "CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "Entra",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Check disk sizes where the size does not match the tier (i.e. A 513 GiB disk will pay a P30 (1TiB) and consider resizing",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Ensure that NSX-Manager is integrated with an external Identity provider (LDAPS)",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Consider using standard SSD rather than Premium or Ultra where possible",
- "waf": "Cost"
+ "subcategory": "Identity",
+ "text": "Has an RBAC model been created for use within VMware vSphere",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "For storage accounts, make sure that the chosen tier is not adding up transaction charges (it might be cheaper to move to the next tier)",
- "waf": "Cost"
+ "subcategory": "Identity",
+ "text": "RBAC permissions should be granted on ADDS groups and not on specific users",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
+ "service": "AVS",
"services": [
- "ASR",
- "Storage",
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "For ASR, consider using Standard SSD disks if the RPO/RTO and replication throughput allow it",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "RBAC permissions on the Azure VMware Solution resource in Azure are 'locked down' to a limited set of owners only",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "storage",
- "text": "Storage accounts: check hot tier and/or GRS necessary",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Ensure all custom roles are scoped with CloudAdmin permitted authorizations",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Storage",
- "text": "Disks - validate use of Premium SSD disks everywhere: for example, non-prod could swap to Standard SSD or on-demand Premium SSD ",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Architecture",
+ "text": "Is the correct Azure VMware Solution connectivity model selected for the customer use case at hand",
+ "waf": "Performance"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
+ "service": "AVS",
"services": [
- "EventHubs",
+ "VPN",
"Monitor",
- "Cost"
+ "AVS",
+ "ExpressRoute",
+ "NetworkWatcher"
],
- "severity": "Medium",
- "subcategory": "Synapse",
- "text": "Create budgets to manage costs and create alerts that automatically notify stakeholders of spending anomalies and overspending risks.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Ensure ExpressRoute or VPN connections from on-premises to Azure are monitored using 'connection monitor'",
+ "waf": "Operations"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
+ "service": "AVS",
"services": [
- "Storage",
- "Cost"
+ "VM",
+ "Monitor",
+ "AVS",
+ "ExpressRoute",
+ "NetworkWatcher"
],
"severity": "Medium",
- "subcategory": "Synapse",
- "text": "Export cost data to a storage account for additional data analysis.",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "Ensure a connection monitor is created from an Azure native resource to an Azure VMware Solution virtual machine to monitor the Azure VMware Solution back-end ExpressRoute connection",
+ "waf": "Operations"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
+ "service": "AVS",
"services": [
- "Cost",
- "SQL"
+ "Monitor",
+ "AVS",
+ "NetworkWatcher",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Synapse",
- "text": "Control costs for a dedicated SQL pool by pausing the resource when it is not in use.",
- "waf": "Cost"
+ "subcategory": "Monitoring",
+ "text": "Ensure a connection monitor is created from an on-premises resource to an Azure VMware Solution virtual machine to monitor end-2-end connectivity",
+ "waf": "Operations"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
+ "service": "AVS",
"services": [
- "Cost"
+ "ARS",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Synapse",
- "text": "Enable the serverless Apache Spark automatic pause feature and set your timeout value accordingly.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Routing",
+ "text": "When route server is used, ensure no more then 1000 routes are propagated from route server to ExR gateway to on-premises (ARS limit).",
+ "waf": "Operations"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
+ "service": "AVS",
"services": [
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Synapse",
- "text": "Create multiple Apache Spark pool definitions of various sizes.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Security (identity)",
+ "text": "Is Privileged Identity Management implemented for roles managing the Azure VMware Solution resource in the Azure Portal (no standing permissions allowed)",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
+ "service": "AVS",
"services": [
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Synapse",
- "text": "Purchase Azure Synapse commit units (SCU) for one year with a pre-purchase plan to save on your Azure Synapse Analytics costs.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Security (identity)",
+ "text": "Privileged Identity Management audit reporting should be implemented for the Azure VMware Solution PIM roles",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
+ "service": "AVS",
"services": [
- "VM",
- "Cost"
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "VM",
- "text": "Use Spot VMs for interruptible jobs: These are VMs that can be bid on and purchased at a discounted price, providing a cost-effective solution for non-critical workloads.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "Security (identity)",
+ "text": "If using Privileged Identity Management is being used, ensure that a valid Entra ID enabled account is created with a valid SMTP record for Azure VMware Solution Automatic Host replacement notifications. (standing permissions required)",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
+ "service": "AVS",
"services": [
- "VM",
- "Cost"
+ "Entra",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "VM",
- "text": "Right-sizing all VMs",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Security (identity)",
+ "text": "Limit use of CloudAdmin account to emergency access only",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
+ "service": "AVS",
"services": [
- "VM",
- "Cost"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "VM",
- "text": "Swap VM sized with normalized and most recent sizes",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "Security (identity)",
+ "text": "Create custom RBAC roles in vCenter to implement a least-privilege model inside vCenter",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
+ "service": "AVS",
"services": [
- "Monitor",
- "VM",
- "Cost"
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "VM",
- "text": "right-sizing VMs - start with monitoring usage below 5% and then work up to 40%",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Cost"
+ "subcategory": "Security (identity)",
+ "text": "Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX) credentials",
+ "waf": "Security"
},
{
- "category": "Right-sizing",
- "checklist": "Cost Optimization Checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
"services": [
- "VM",
- "Cost"
+ "Entra",
+ "AVS",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "VM",
- "text": "Containerizing an application can improve VM density and save money on scaling it",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Cost"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
- "services": [],
- "severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage FTA Resiliency Playbook for Azure Data Factory",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
- "services": [],
"severity": "High",
- "subcategory": "Availablity Zone",
- "text": "Use zone redundant pipelines in regions that support Availability Zones",
- "waf": "Reliability"
+ "subcategory": "Security (identity)",
+ "text": "Use a centralized identity provider to be used for workloads (VM's) running on Azure VMware Solution",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
+ "service": "AVS",
"services": [
- "Backup"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "DevOps Integration",
- "text": "Use DevOps to Backup the ARM templates with Github/Azure DevOps integration ",
- "waf": "Reliability"
+ "subcategory": "Security (network)",
+ "text": "Is East-West traffic filtering implemented within NSX-T",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
+ "service": "AVS",
"services": [
- "VM"
+ "AppGW",
+ "AVS",
+ "Firewall"
],
- "severity": "Medium",
- "subcategory": "Network",
- "text": "Make sure you replicate the Self-Hosted Integration Runtime VMs in another region ",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Security (network)",
+ "text": "Workloads on Azure VMware Solution are not directly exposed to the internet. Traffic is filtered and inspected by Azure Application Gateway, Azure Firewall or 3rd party solutions",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
+ "service": "AVS",
"services": [
- "VNet"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Network",
- "text": "Make sure you replicate or duplicate your network in the sister region. You have to make a copy of your Vnet in another region",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Security (network)",
+ "text": "Auditing and logging is implemented for inbound internet requests to Azure VMware Solution and Azure VMware Solution based workloads",
+ "waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "Azure Data Factory Review Checklist",
- "description": "If your ADF Pipelines use Key Vault you don't have to do anything to replicate Key Vault. Key Vault is a managed service and Microsoft takes care of it for you",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
+ "service": "AVS",
"services": [
- "AKV"
+ "Monitor",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Integration",
- "text": "If using Keyvault integration, use SLA of Keyvault to understand your availablity",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Security (network)",
+ "text": "Session monitoring is implemented for outbound internet connections from Azure VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious activity",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| where type =~ 'Microsoft.Network/virtualNetworkGateways'| mv-expand ipConfigurations=properties.ipConfigurations| project subnetId=tostring(ipConfigurations.properties.subnet.id)| where isnotempty(subnetId)| join (resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | project id, compliant = (enableDdosProtection == 'true')",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
+ "service": "AVS",
"services": [
- "AKV",
- "FrontDoor"
+ "VPN",
+ "AVS",
+ "ExpressRoute",
+ "DDoS",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal",
- "waf": "Operations"
+ "subcategory": "Security (network)",
+ "text": "Is DDoS standard protection enabled on ExR/VPN Gateway subnet in Azure",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "services": [],
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
+ "service": "AVS",
+ "services": [
+ "AVS"
+ ],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "Perform app delivery within landing zones for both internal-facing (corp) and external-facing apps (online).",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "subcategory": "Security (network)",
+ "text": "Use a dedicated privileged access workstation (PAW) to manage Azure VMware Solution, vCenter, NSX manager and HCX manager",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
+ "service": "AVS",
"services": [
- "AppGW"
+ "AVS",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Ensure you are using Application Gateway v2 SKU",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "subcategory": "Security (guest/VM)",
+ "text": "Enable Advanced Threat Detection (Microsoft Defender for Cloud aka ASC) for workloads running on Azure VMware Solution",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
+ "service": "AVS",
"services": [
- "LoadBalancer"
+ "Arc",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Load Balancer",
- "text": "Ensure you are using the Standard SKU for your Azure Load Balancers",
+ "subcategory": "Security (guest/VM)",
+ "text": "Use Azure ARC for Servers to properly govern workloads running on Azure VMware Solution using Azure native technologies (Azure ARC for Azure VMware Solution is not yet available)",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
+ "service": "AVS",
"services": [
- "LoadBalancer"
+ "SQL",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Load Balancer",
- "text": "Ensure your Load Balancers frontend IP addresses are zone-redundant (unless you require zonal frontends).",
+ "severity": "Low",
+ "subcategory": "Security (guest/VM)",
+ "text": "Ensure workloads on Azure VMware Solution use sufficient data encryption during run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is default)",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
+ "service": "AVS",
"services": [
- "VNet",
- "AppGW"
+ "AKV",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Your Application Gateways v2 should be deployed in subnets with IP prefixes equal or larger than /24",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "severity": "Low",
+ "subcategory": "Security (guest/VM)",
+ "text": "When in-guest encryption is used, store encryption keys in Azure Key vault when possible",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "description": "Administration of reverse proxies in general and WAF in particular is closer to the application than to networking, so they belong in the same subscription as the app. Centralizing the Application Gateway and WAF in the connectivity subscription might be OK if it is managed by one single team.",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
+ "service": "AVS",
"services": [
- "VNet",
- "Entra",
- "Subscriptions",
- "WAF",
- "NVA",
- "AppGW"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound HTTP(S) connections within the landing-zone virtual network and with the apps that they're securing.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "subcategory": "Security (guest/VM)",
+ "text": "Consider using extended security update support for workloads running on Azure VMware Solution (Azure VMware Solution is eligible for ESU)",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
+ "service": "AVS",
"services": [
- "DDoS"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Governance (platform)",
+ "text": "Ensure that the appropriate vSAN Data redundancy method is used (RAID specification)",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
- "services": [],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Configure autoscaling with a minimum amount of instances of two.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
+ "service": "AVS",
+ "services": [
+ "AVS",
+ "AzurePolicy",
+ "Storage"
+ ],
+ "severity": "High",
+ "subcategory": "Governance (platform)",
+ "text": "Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage needs",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
+ "service": "AVS",
"services": [
- "ACR",
- "AppGW"
+ "AVS",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Deploy Application Gateway across Availability Zones",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "severity": "High",
+ "subcategory": "Governance (platform)",
+ "text": "Ensure that you have requested enough quota, ensuring you have considered growth and Disaster Recovery requirement",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "subcategory": "Governance (platform)",
+ "text": "Ensure that access constraints to ESXi are understood, there are access limits which might affect 3rd party solutions.",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF",
- "AppGW"
+ "AVS",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "subcategory": "Governance (platform)",
+ "text": "Ensure that you have a policy around ESXi host density and efficiency, keeping in mind the lead time for requesting new nodes",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
+ "service": "AVS",
"services": [
- "TrafficManager"
+ "Cost",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Traffic Manager",
- "text": "Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Governance (platform)",
+ "text": "Ensure a good cost management process is in place for Azure VMware Solution - Azure Cost Management can be used",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
+ "service": "AVS",
"services": [
- "Entra",
- "AVD"
+ "Cost",
+ "AVS"
],
"severity": "Low",
- "subcategory": "App delivery",
- "text": "If users only need access to internal applications, has Microsoft Entra ID Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Security"
+ "subcategory": "Governance (platform)",
+ "text": "Are Azure reserved instances used to optimize cost for using Azure VMware Solution",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
+ "service": "AVS",
"services": [
- "Entra"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "To reduce the number of firewall ports open for incoming connections in your network, consider using Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications.",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "subcategory": "Governance (platform)",
+ "text": "Consider the use of Azure Private-Link when using other Azure Native Services",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF"
+ "AVS"
],
"severity": "High",
- "subcategory": "Front Door",
- "text": "Deploy your WAF policy for Front Door in 'Prevention' mode.",
- "waf": "Security"
+ "subcategory": "Governance (platform)",
+ "text": "Ensure all required resource reside within the same Azure availability zone(s)",
+ "waf": "Performance"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
+ "service": "AVS",
"services": [
- "TrafficManager",
- "FrontDoor"
+ "AVS",
+ "VM",
+ "Defender"
],
- "severity": "High",
- "subcategory": "Front Door",
- "text": "Avoid combining Azure Traffic Manager and Azure Front Door.",
+ "severity": "Medium",
+ "subcategory": "Governance (guest/VM)",
+ "text": "Enable Microsoft Defender for Cloud for Azure VMware Solution guest VM workloads",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "Arc",
+ "AVS",
+ "VM"
],
- "severity": "High",
- "subcategory": "Front Door",
- "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
+ "severity": "Medium",
+ "subcategory": "Governance (guest/VM)",
+ "text": "Use Azure Arc enabled servers to manage your Azure VMware Solution guest VM workloads",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Front Door",
- "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Governance (guest/VM)",
+ "text": "Enable Diagnostic and metric logging on Azure VMware Solution",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "Monitor",
+ "AVS",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
- "waf": "Reliability"
+ "subcategory": "Governance (guest/VM)",
+ "text": "Deploy the Log Analytics Agents to Azure VMware Solution guest VM workloads",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "Backup",
+ "AVS",
+ "AzurePolicy",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Front Door",
- "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Governance (guest/VM)",
+ "text": "Ensure you have a documented and implemented backup policy and solution for Azure VMware Solution VM workloads",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
"services": [
- "LoadBalancer"
+ "Monitor",
+ "AVS",
+ "Defender"
],
- "severity": "High",
- "subcategory": "Load Balancer",
- "text": "Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT scalability",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Compliance",
+ "text": "Use Microsoft Defender for Cloud for compliance monitoring of workloads running on Azure VMware Solution",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
"services": [
- "AKV",
- "FrontDoor",
- "Cost"
+ "AVS",
+ "Defender"
],
- "severity": "High",
- "subcategory": "Front Door",
- "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Compliance",
+ "text": "Are the applicable compliance baselines added to Microsoft Defender for Cloud",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Front Door",
- "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Compliance",
+ "text": "Was data residency evaluated when selecting Azure regions to use for Azure VMware Solution deployment",
+ "waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "AVS"
],
"severity": "High",
- "subcategory": "Front Door",
- "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
+ "subcategory": "Compliance",
+ "text": "Are data processing implications (service provider / service consumer model) clear and documented",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "category": "Governance",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
+ "subcategory": "Compliance",
+ "text": "Consider using CMK (Customer Managed Key) for vSAN only if needed for compliance reason(s).",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor",
+ "AVS"
],
"severity": "High",
- "subcategory": "Front Door",
- "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Create dashboards to enable core Azure VMware Solution monitoring insights",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor",
+ "AVS"
],
"severity": "High",
- "subcategory": "Front Door",
- "text": "Tune the Azure Front Door WAF for your workload. Reduce false positive detections.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Create warning alerts for critical thresholds for automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "AzurePolicy",
- "WAF"
+ "Monitor",
+ "AVS"
],
"severity": "High",
- "subcategory": "Front Door",
- "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Ensure critical alert is created to monitor if vSAN consumption is below 75% as this is a support threshold from VMware",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| distinct subscriptionId| join kind=leftouter( resources | where type =~ 'microsoft.insights/activitylogalerts' | mv-expand condition1 = properties.condition.allOf | mv-expand condition2 = condition1.anyOf | extend alertEnabled = tostring(properties.enabled) | summarize set_condition1=make_set(condition1.equals), set_condition2=make_set(condition2.equals) by id, name,type,tenantId,resourceGroup,subscriptionId, alertEnabled | where set_has_element(set_condition1, 'ServiceHealth') | extend category = 'ServiceHealth' | extend all = iff(set_has_element(set_condition1, 'ServiceHealth') and array_length(set_condition2) == 0, true, false) | extend incident = iff(all, true, iff(set_has_element(set_condition1, 'Incident'), true, set_has_element(set_condition2, 'Incident'))) | extend maintenance = iff(all, true, iff(set_has_element(set_condition1, 'Maintenance'), true, set_has_element(set_condition2, 'Maintenance'))) | extend informational = iff(all, true, iff(set_has_element(set_condition1, 'Informational') or set_has_element(set_condition1, 'ActionRequired'), true, set_has_element(set_condition2, 'Informational') or set_has_element(set_condition2, 'ActionRequired'))) | extend security = iff(all, true, iff(set_has_element(set_condition1, 'Security'), true, set_has_element(set_condition2, 'Security'))) | project id, name, subscriptionId, category, tostring(alertEnabled), tostring(incident), tostring(maintenance), tostring(informational), tostring(security) | summarize count_alertEnabled=countif(alertEnabled == 'true'), count_incident=countif(incident == 'True'), count_maintenance=countif(maintenance == 'True'), count_informational=countif(informational == 'True'), count_security=countif(security == 'True') by subscriptionId) on subscriptionId| project subscriptionId, alertEnabled=iff(isnotnull(count_alertEnabled), count_alertEnabled, 0), incident=iff(isnotnull(count_incident), count_incident, 0), security=iff(isnotnull(count_security), count_security, 0), maintenance=iff(isnotnull(count_maintenance), count_maintenance, 0), informational=iff(isnotnull(count_informational), count_informational, 0)| order by incident, maintenance, informational, security desc| project id=subscriptionId, compliant=(alertEnabled > 0 and incident > 0 and security > 0 and maintenance > 0 and informational > 0)",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor",
+ "AVS"
],
"severity": "High",
- "subcategory": "Front Door",
- "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Ensure alerts are configured for Azure Service Health alerts and notifications",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor",
+ "AVS",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Front Door",
- "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Configure Azure VMware Solution logging to be send to an Azure Storage account or Azure EventHub for processing",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor",
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Front Door",
- "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Monitoring",
+ "text": "If deep insight in VMware vSphere is required: Is vRealize Operations and/or vRealize Network Insights used in the solution?",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "AVS",
+ "AzurePolicy",
+ "VM",
+ "Storage"
+ ],
+ "severity": "High",
+ "subcategory": "Operations",
+ "text": "Ensure the vSAN storage policy for VM's is NOT the default storage policy as this policy applies thick provisioning",
+ "waf": "Operations"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
+ "services": [
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
- "waf": "Security"
+ "subcategory": "Operations",
+ "text": "Ensure vSphere content libraries are not placed on vSAN as vSAN is a finite resource",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "AVS",
+ "Backup",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
- "waf": "Security"
+ "subcategory": "Operations",
+ "text": "Ensure data repositories for the backup solution are stored outside of vSAN storage. Either in Azure native or on a disk pool-backed datastore",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "Arc",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Front Door",
- "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Ensure workloads running on Azure VMware Solution are hybrid managed using Azure Arc for Servers (Arc for Azure VMware Solution is in preview)",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
- "waf": "Security"
+ "subcategory": "Operations",
+ "text": "Ensure workloads running on Azure VMware Solution are monitored using Azure Log Analytics and Azure Monitor",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS"
],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "Enable the Azure Application Gateway WAF bot protection rule set The bot rules detect good and bad bots.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Include workloads running on Azure VMware Solution in existing update management tooling or in Azure Update Management",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
"services": [
- "AzurePolicy",
- "WAF",
- "AppGW"
+ "Monitor",
+ "AVS",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "Enable request body inspection feature enabled in Azure Application Gateway WAF policy.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management, Monitoring and Security solutions",
+ "waf": "Operations"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS",
+ "Defender"
],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "Tune the Azure Application Gateway WAF for your workload. Reduce false positive detections.",
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "Ensure workloads running on Azure VMware Solution are onboarded to Microsoft Defender for Cloud",
"waf": "Security"
},
{
- "ammp": true,
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
"services": [
- "AzurePolicy",
- "WAF",
- "AppGW"
+ "AVS",
+ "Backup"
],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "Deploy your WAF policy for Application Gateway in 'Prevention' mode.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "Ensure backups are not stored on vSAN as vSAN is a finite resource",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Add rate limiting to the Azure Application Gateway WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Have all DR solutions been considered and a solution that is best for your business been decided upon? [SRM/JetStream/Zerto/Veeam/...]",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Use a high threshold for Azure Application Gateway WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
- "services": [],
- "severity": "Low",
- "subcategory": "App Gateway",
- "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
- "waf": "Security"
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
+ "services": [
+ "AVS",
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "Disaster Recovery",
+ "text": "Use Automated recovery plans with either of the Disaster solutions, avoid manual tasks as much as possible",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Application Gateway WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Use the geopolitical region pair as the secondary disaster recovery environment",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Use the latest Azure Application Gateway WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Disaster Recovery",
+ "text": "Use 2 different address spaces between the regions, for example: 10.0.0.0/16 and 192.168.0.0/16 for the different regions",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "ExpressRoute",
+ "AVS",
+ "ASR",
+ "NVA"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Add diagnostic settings to save your Azure Application Gateway WAF logs.",
- "waf": "Operations"
+ "subcategory": "Disaster Recovery",
+ "text": "Will ExpressRoute Global Reach be used for connectivity between the primary and secondary Azure VMware Solution Private Clouds or is routing done through network virtual appliances?",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF"
+ "AVS",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Add diagnostic settings to save your Azure Front Door WAF logs.",
- "waf": "Operations"
+ "subcategory": "Business Continuity",
+ "text": "Have all Backup solutions been considered and a solution that is best for your business been decided upon? [ MABS/CommVault/Metallic.io/Veeam/�. ]",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
"services": [
- "AppGW",
- "WAF",
- "Sentinel"
+ "AVS",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Send Azure Application Gateway WAF logs to Microsoft Sentinel.",
- "waf": "Operations"
+ "subcategory": "Business Continuity",
+ "text": "Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
"services": [
- "FrontDoor",
- "WAF",
- "Sentinel"
+ "AVS",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Front Door",
- "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
- "waf": "Operations"
+ "subcategory": "Business Continuity",
+ "text": "Deploy your backup solution outside of vSan, on Azure native components",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
"services": [
- "WAF",
- "AppGW"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Define your Azure Application Gateway WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Business Continuity",
+ "text": "Is a process in place to request a restore of the VMware components managed by the Azure Platform?",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
"services": [
- "AzurePolicy",
- "WAF"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Use WAF Policies instead of the legacy WAF configuration.",
+ "severity": "Low",
+ "subcategory": "Deployment strategy",
+ "text": "For manual deployments, all configuration and deployments must be documented",
"waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
"services": [
- "VPN",
- "VNet",
- "ExpressRoute",
- "AppGW"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Filter inbound traffic in the backends so that they only accept connections from the Application Gateway subnet, for example with NSGs.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Deployment strategy",
+ "text": "For manual deployments, consider implementing resource locks to prevent accidental actions on your Azure VMware Solution Private Cloud",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "AVS"
],
- "severity": "Medium",
- "subcategory": "Front Door",
- "text": "Make sure your origins only take traffic from your Azure Front Door instance.",
- "waf": "Security"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
- "services": [],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "You should encrypt traffic to the backend servers.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Automated Deployment",
+ "text": "For automated deployments, deploy a minimal private cloud and scale as needed",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
- "service": "App Gateway",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
"services": [
- "WAF"
+ "AVS"
],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "You should use a Web Application Firewall.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Automated Deployment",
+ "text": "For automated deployments, request or reserve quota prior to starting the deployment",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
- "services": [],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Redirect HTTP to HTTPS",
- "waf": "Security"
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
+ "services": [
+ "AVS",
+ "AzurePolicy"
+ ],
+ "severity": "Low",
+ "subcategory": "Automated Deployment",
+ "text": "For automated deployment, ensure that relevant resource locks are created through the automation or through Azure Policy for proper governance",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
- "services": [],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Use gateway-managed cookies to direct traffic from a user session to the same server for processing",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
+ "services": [
+ "AKV",
+ "AVS"
+ ],
+ "severity": "Low",
+ "subcategory": "Automated Connectivity",
+ "text": "Implement human understandable names for ExR authorization keys to allow for easy identification of the keys purpose/use",
"waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
- "services": [],
- "severity": "High",
- "subcategory": "App Gateway",
- "text": "Enable connection draining during planned service updates to prevent connection loss to existing membrs of the backend pool",
- "waf": "Security"
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
+ "services": [
+ "ExpressRoute",
+ "AKV",
+ "AVS"
+ ],
+ "severity": "Low",
+ "subcategory": "Automated Connectivity",
+ "text": "Use Key vault to store secrets and authorization keys when separate Service Principles are used for deploying Azure VMware Solution and ExpressRoute",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
- "services": [],
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
+ "services": [
+ "AVS"
+ ],
"severity": "Low",
- "subcategory": "App Gateway",
- "text": "Create custom error pages to display a personalized user experience",
+ "subcategory": "Automated Connectivity",
+ "text": "Define resource dependencies for serializing actions in IaC when many resources need to be deployed in/on Azure VMware Solution as Azure VMware Solution only supports a limited number of parallel operations.",
"waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
- "services": [],
- "severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Edit HTTP requests and response headers for easier routing and information exchange between the client and server",
- "waf": "Security"
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
+ "services": [
+ "AVS"
+ ],
+ "severity": "Low",
+ "subcategory": "Automated Connectivity",
+ "text": "When performing automated configuration of NSX-T segments with a single Tier-1 gateway, use Azure Portal APIs instead of NSX-Manager APIs",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
"services": [
- "FrontDoor"
+ "AVS",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Configure Front Door to optimize global web traffic routing and top-tier end-user performance, and reliability through quick global failover",
+ "subcategory": "Automated Scale",
+ "text": "When intending to use automated scale-out, be sure to apply for sufficient Azure VMware Solution quota for the subscriptions running Azure VMware Solution",
"waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
- "services": [],
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
+ "services": [
+ "AVS",
+ "AzurePolicy",
+ "Storage"
+ ],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Use transport layer load balancing",
+ "subcategory": "Automated Scale",
+ "text": "When intending to use automated scale-in, be sure to take storage policy requirements into account before performing such action",
"waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
- "services": [],
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
+ "services": [
+ "AVS"
+ ],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Configure routing based on host or domain name for multiple web applications on a single gateway",
- "waf": "Security"
+ "subcategory": "Automated Scale",
+ "text": "Scaling operations always need to be serialized within a single SDDC as only one scale operation can be performed at a time (even when multiple clusters are used)",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
"services": [
- "Entra"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "App Gateway",
- "text": "Centralize SSL certificate management to reduce encryption and decryption overhead from a backend server farm",
- "waf": "Security"
+ "subcategory": "Automated Scale",
+ "text": "Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure Application Delivery Networking",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
"services": [
- "AppGW"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "App Gateway",
- "text": "Use Application Gateway for native support for WebSocket and HTTP/2 protocols",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Automated Scale",
+ "text": "Define and enforce scale in/out maximum limits for your environment in the automations",
+ "waf": "Performance"
},
{
- "category": "Application Deployment",
- "checklist": "Azure AKS Review",
- "guid": "785c2fa5-5b56-4ad4-a408-fe72734c476b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/containers/aks/secure-baseline-aks",
+ "category": "Platform Automation",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
"services": [
- "AKS"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Development",
- "text": "Use canary or blue/green deployments",
+ "subcategory": "Automated Scale",
+ "text": "Implement monitoring rules to monitor automated scaling operations and monitor success and failure to enable appropriate (automated) responses",
"waf": "Operations"
},
{
- "category": "Application Deployment",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
+ "category": "Migration",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"services": [
- "AKS"
+ "AVS",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Development",
- "text": "If required for AKS Windows workloads HostProcess containers can be used",
+ "severity": "High",
+ "subcategory": "Architecture",
+ "text": "When using MON, be aware of the limits of simulataneously configured VMs (MON Limit for HCX [400 - standard, 1000 - Larger appliance])",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "Reliability"
},
{
- "category": "Application Deployment",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
+ "category": "Migration",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"services": [
- "AKS"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Development",
- "text": "Use KEDA if running event-driven workloads",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Architecture",
+ "text": "When using MON, you cannot enable MON on more than 100 Network extensions",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Reliability"
},
{
- "category": "Application Deployment",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
+ "category": "Migration",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
"services": [
- "AKS"
+ "VPN",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Development",
- "text": "Use Dapr to ease microservice development",
- "waf": "Operations"
- },
- {
- "category": "Application Deployment",
- "checklist": "Azure AKS Review",
- "guid": "3acbe04b-be20-49d3-afda-47778424d116",
- "link": "https://learn.microsoft.com/azure/developer/terraform/create-k8s-cluster-with-tf-and-aks",
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "If using a VPN connection for migrations, adjust your MTU size accordingly.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Migration",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
"services": [
- "AKS"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Infrastructure as Code",
- "text": "Use automation through ARM/TF to create your Azure resources",
- "waf": "Operations"
+ "subcategory": "Networking",
+ "text": "For low connectivity regions connecting into Azure (500Mbps or less), considering deploying the HCX WAN optimization appliance",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "guid": "36cb45e5-7960-4332-9bdf-8cc23318da61",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/business-continuity-and-disaster-recovery",
+ "category": "Migration",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
"services": [
- "ASR",
- "AKS"
+ "AVS"
],
- "severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Schedule and perform DR tests regularly",
+ "severity": "Medium",
+ "subcategory": "Process",
+ "text": "Ensure that migrations are started from the on-premises appliance and NOT from the Cloud appliance (do NOT perform a reverse migration)",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "guid": "170265f4-bb46-4a39-9af7-f317284797b1",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "category": "Data Storage",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
"services": [
- "TrafficManager",
- "AKS",
- "FrontDoor",
- "LoadBalancer"
+ "AVS",
+ "VM",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use Azure Traffic Manager or Azure Front Door as a global load balancer for region failover",
+ "subcategory": "Architecture",
+ "text": "When Azure Netapp Files is used to extend storage for Azure VMware Solution,consider using this as a VMware datastore instead of attaching directly to a VM.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "graph": "resources | where type=='microsoft.containerservice/managedclusters' | extend compliant= isnotnull(properties.agentPoolProfiles[0].availabilityZones) | distinct id,compliant",
- "guid": "578a219a-46be-4b54-9350-24922634292b",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones",
+ "category": "Data Storage",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"services": [
- "AKS"
+ "ExpressRoute",
+ "AVS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use Availability Zones if they are supported in your Azure region",
+ "subcategory": "Architecture",
+ "text": "Ensure that a dedicated ExpressRoute Gateway is being used for external data storage solutions",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
+ "category": "Data Storage",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
"services": [
- "AKS"
+ "ExpressRoute",
+ "AVS",
+ "Storage"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Use the SLA-backed AKS offering",
+ "severity": "Medium",
+ "subcategory": "Architecture",
+ "text": "Ensure that FastPath is enabled on the ExpressRoute Gateway that is being used for external data storage solutions",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "category": "Stretched Cluster",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
"services": [
- "AKS",
- "Cost"
+ "AVS",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "High Availability",
- "text": "Use Disruption Budgets in your pod and deployment definitions",
+ "severity": "High",
+ "subcategory": "Architecture",
+ "text": "If using stretched cluster, ensure that your selected Disaster Recovery solution is supported by the vendor",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "category": "Stretched Cluster",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
"services": [
- "ACR",
- "AKS"
+ "AVS"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "If using a private registry, configure region replication to store images in multiple regions",
+ "subcategory": "Architecture",
+ "text": "If using stretched cluster, ensure that the SLA provided will meet your requirements",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "guid": "daa9a260-c3ea-4490-b077-5fc1f2a80cb0",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "category": "Stretched Cluster",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
"services": [
- "Storage",
- "AKS",
- "ASR"
+ "ExpressRoute",
+ "AVS"
],
"severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Use Zone-Redundant Storage (ZRS) with stateful workloads",
+ "subcategory": "Architecture",
+ "text": "If using stretched cluster, ensure that both ExpressRoute circuits are connected to your connectivity hub.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure AKS Review",
- "guid": "bc14aea6-e65d-48d9-a3ad-c218e6436b06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/business-continuity-and-disaster-recovery",
+ "category": "Stretched Cluster",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
"services": [
- "AKS"
+ "ExpressRoute",
+ "AVS"
],
"severity": "High",
- "subcategory": "Requirements",
- "text": "Define non-functional requirements such as SLAs, RTO (Recovery Time Objective) and RPO (Recovery Point Objective).",
+ "subcategory": "Architecture",
+ "text": "If using stretched cluster, ensure that both ExpressRoute circuits have GlobalReach enabled.",
"waf": "Reliability"
},
{
- "category": "Cost Governance",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
+ "category": "Stretched Cluster",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
"services": [
- "AKS",
- "Cost"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Use an external application such as kubecost to allocate costs to different users",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Architecture",
+ "text": "Have site disaster tolerance settings been properly considered and changed for your business if needed.",
+ "waf": "Reliability"
},
{
- "category": "Cost Governance",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
+ "category": "BC and DR",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
"services": [
- "AKS",
- "Cost"
+ "ACR"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Use scale down mode to delete/deallocate nodes",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Enable zone redundancy for Azure Cache for Redis. Azure Cache for Redis supports zone redundant configurations in the Premium and Enterprise tiers. A zone redundant cache can place its nodes across different Azure Availability Zones in the same region. It eliminates data center or AZ outage as a single point of failure and increases the overall availability of your cache.",
+ "waf": "Reliability"
},
{
- "category": "Cost Governance",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "category": "BC and DR",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
"services": [
- "AKS",
- "Cost"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Cost",
- "text": "When required use multi-instance partitioning GPU on AKS Clusters",
- "waf": "Cost"
+ "subcategory": "High Availability",
+ "text": "Configure data persistence for an Azure Cache for Redis instance. Because your cache data is stored in memory, a rare and unplanned failure of multiple nodes can cause all the data to be dropped. To avoid losing data completely, Redis persistence allows you to take periodic snapshots of in-memory data, and store it to your storage account.",
+ "waf": "Reliability"
},
{
- "category": "Cost Governance",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
+ "category": "BC and DR",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
"services": [
- "AKS",
- "Cost"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "If running a Dev/Test cluster use NodePool Start/Stop",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Use Geo-redundant storage account to persist Azure Cache for Redis data, or zonally redundant where geo-redundancy is not available",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
+ "category": "BC and DR",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
"services": [
- "AKS",
- "AzurePolicy"
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
- "waf": "Security"
+ "subcategory": "High Availability",
+ "text": "Configure passive geo-replication for Premium Azure Cache for Redis instances. Geo-replication is a mechanism for linking two or more Azure Cache for Redis instances, typically spanning two Azure regions. Geo-replication is designed mainly for cross-region disaster recovery. Two Premium tier cache instances are connected through geo-replication in a way that provides reads and writes to your primary cache, and that data is replicated to the secondary cache.",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "services": [
- "AKS"
- ],
+ "category": "Operations Management",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
+ "services": [],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Separate applications from the control plane with user/system node pools",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "Leverage FTA Resiliency Playbook for Azure Data Factory",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "services": [
- "AKS"
- ],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Add taint to your system nodepool to make it dedicated",
- "waf": "Security"
+ "category": "Operations Management",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Availablity Zone",
+ "text": "Use zone redundant pipelines in regions that support Availability Zones",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
"services": [
- "ACR",
- "AKS"
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use a private registry for your images, such as ACR",
- "waf": "Security"
+ "subcategory": "DevOps Integration",
+ "text": "Use DevOps to Backup the ARM templates with Github/Azure DevOps integration ",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"services": [
- "AKS"
+ "VM"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Scan your images for vulnerabilities",
- "waf": "Security"
+ "subcategory": "Network",
+ "text": "Make sure you replicate the Self-Hosted Integration Runtime VMs in another region ",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "cc639637-a652-42ac-89e8-06965388e9de",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"services": [
- "AKS",
- "Defender"
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use Azure Security Center to detect security posture vulnerabilities",
- "waf": "Security"
+ "subcategory": "Network",
+ "text": "Make sure you replicate or duplicate your network in the sister region. You have to make a copy of your Vnet in another region",
+ "waf": "Reliability"
},
{
"category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "42d4aefe-2383-470e-b019-c30df24996b2",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool",
+ "checklist": "Azure Data Factory Review Checklist",
+ "description": "If your ADF Pipelines use Key Vault you don't have to do anything to replicate Key Vault. Key Vault is a managed service and Microsoft takes care of it for you",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
"services": [
- "AKS"
+ "AKV"
],
"severity": "Low",
- "subcategory": "Compliance",
- "text": "If required configure FIPS",
- "waf": "Security"
+ "subcategory": "Integration",
+ "text": "If using Keyvault integration, use SLA of Keyvault to understand your availablity",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
"services": [
- "AKS"
+ "ServiceBus"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Define app separation requirements (namespace/nodepool/cluster)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Best Practices",
+ "text": "Leverage FTA Handbook.",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
"services": [
- "AKS",
- "AKV"
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Secrets",
- "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "Implement geo-replication on the sender and receiver side to protect against outages and disasters",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "AKS",
- "AKV"
+ "ServiceBus",
+ "Storage",
+ "ASR"
],
- "severity": "High",
- "subcategory": "Secrets",
- "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Best Practices",
+ "text": "If you need mission-critical messaging with queues and topics, Service Bus Premium is recommended with Geo-Disaster Recovery.",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "AKS",
- "AKV"
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Secrets",
- "text": "If required add Key Management Service etcd encryption",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "Implement high availability for the Service Bus namespace",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "AKS",
- "AKV"
+ "ServiceBus"
],
- "severity": "Low",
- "subcategory": "Secrets",
- "text": "If required consider using Confidential Compute for AKS",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Ensure related messages are delivered in guaranteed order",
+ "waf": "Reliability"
},
{
- "category": "Governance and Security",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "AKS",
- "AKV",
- "Defender"
+ "ServiceBus"
],
- "severity": "Medium",
- "subcategory": "Secrets",
- "text": "Consider using Defender for Containers",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Best Practices",
+ "text": "Evaluate different Java Messaging Service (JMS) features through the JMS API",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Use managed identities instead of Service Principals",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Best Practices",
+ "text": "Use .NET Nuget packages to communicate with Service Bus messaging entities",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Integrate authentication with AAD (using the managed integration)",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "Implement resilience for transient fault handling when sending or receiving messages",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "description": "This will be turned on automatically for a new SB namespace created from the portal with the Premium SKUs in a zone-enabled region. Both the Service Bus metadata and the messages data are replicated across datacenters in the availability zones configuration",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
"services": [
- "Entra",
- "AKS"
+ "ACR",
+ "ServiceBus"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Limit access to admin kubeconfig (get-credentials --admin)",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Leverage Availability Zones if regionally applicable",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "description": "If enabled, Implements namespace metadata replication to a secondary region. Does not replicate queue/topic message data. Premium sku only.",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
"services": [
- "RBAC",
- "Entra",
- "AKS"
+ "ServiceBus",
+ "Storage",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Integrate authorization with AAD RBAC",
- "waf": "Security"
+ "subcategory": "Geo-Disaster Recovery",
+ "text": "Plan for Metadata replication during regional failure",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "description": "If an outage cannot be tolerated, do not use the build-in metadata replication option. Leverage a replication pattern to replicate Service Bus messages across two or more sets of cross-region namespaces",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
"services": [
- "RBAC",
- "Entra",
- "AKS"
+ "ACR",
+ "ServiceBus",
+ "ASR"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Geo-Disaster Recovery",
+ "text": "Plan for Message replication during regional failure",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus uses a message broker to handle messages that are sent to a Service Bus queue or topic. By default, all messages that are sent to a queue or topic are handled by the same message broker process. This architecture can place a limitation on the overall throughput of the message queue. However, you can also partition a queue or topic when it is created",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "For applications which require high throughput, use Patritioning ",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "For AKS non-interactive logins use kubelogin (preview)",
- "waf": "Security"
+ "subcategory": "Best Practices",
+ "text": "Evaluate Premier-tier benefits of Azure Service Bus",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Disable AKS local accounts",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Ensure that Service Bus Messaging Exceptions are handled properly",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus",
+ "PrivateLink",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Identity",
- "text": "Configure if required Just-in-time cluster access",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Best Practices",
+ "text": "Connect to Service Bus with the Advanced Messaging Queue Protocol (AMQP) and use Service Endpoints or Private Endpoints when possible.",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Service Bus Review Checklist",
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
- "severity": "Low",
- "subcategory": "Identity",
- "text": "Configure if required AAD conditional access for AKS",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Review the Best Practices for performance improvements using Service Bus Messaging",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus Premium provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
"severity": "Low",
- "subcategory": "Identity",
- "text": "If required for Windows AKS workloads configure gMSA ",
+ "subcategory": "Data Protection",
+ "text": "Use customer-managed key option in data at rest encryption when required",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure AKS Review",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Communication between a client application and an Azure Service Bus namespace is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Service Bus namespace to require that clients send and receive data with a newer version of TLS.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
"services": [
- "Entra",
- "AKS"
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "For finer control consider using a managed Kubelet Identity",
+ "subcategory": "Data Protection",
+ "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has Manage permissions for the entire namespace. It's recommended that you treat this rule like an administrative root account and don't use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
"services": [
- "ACR",
- "AKS",
- "AppGW"
+ "TrafficManager",
+ "ServiceBus",
+ "AzurePolicy",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "If using AGIC, do not share an AppGW across clusters",
- "waf": "Reliability"
- },
- {
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
- "services": [
- "AKS"
- ],
- "severity": "High",
- "subcategory": "Best practices",
- "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Avoid using root account when it is not necessary",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Microsoft Entra ID provides superior security and ease of use over shared access signatures (SAS). With Microsoft Entra ID, there’s no need to store the tokens in your code and risk potential security vulnerabilities. We recommend that you use Microsoft Entra ID with your Azure Service Bus applications when possible.",
+ "graph": "Resources | where type =~ 'microsoft.servicebus/namespaces' | extend compliant = iif(properties.disableLocalAuth == 'false', 'No', 'Yes') | project id, compliant",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/en-us/azure/service-bus-messaging/disable-local-authentication",
+ "service": "Service Bus",
"services": [
- "AKS"
+ "ServiceBus",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "For Windows workloads use Accelerated Networking",
- "waf": "Performance"
+ "subcategory": "Identity and Access Management",
+ "text": "When possible, disable SAS key authentication (or local authentication) and use only Microsoft Entra ID for authentication",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "When creating permissions, provide fine-grained control over a client's access to Azure Service Bus. Permissions in Azure Service Bus can and should be scoped to the individual resource level e.g. queue, topic or subscription. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
"services": [
- "AKS",
- "LoadBalancer"
+ "Storage",
+ "ServiceBus",
+ "RBAC",
+ "Entra",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "Best practices",
- "text": "Use the standard ALB (as opposed to the basic one)",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Use least privilege data plane RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus resource logs include operational logs, virtual network and IP filtering logs. Runtime audit logs capture aggregated diagnostic information for various data plane access operations (such as send or receive messages) in Service Bus.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
"services": [
- "VNet",
- "AKS"
+ "ServiceBus",
+ "Monitor",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "If using Azure CNI, consider using different Subnets for NodePools",
+ "subcategory": "Monitoring",
+ "text": "Enable logging for security investigation. Use Azure Monitor to trace resource logs and runtime audit logs (currently available only in the premium tier)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Service Bus traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
"services": [
- "VNet",
- "AKS",
- "Cost",
- "PrivateLink"
+ "ServiceBus",
+ "PrivateLink",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Cost",
- "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
+ "subcategory": "Networking",
+ "text": "Consider using private endpoints to access Azure Service Bus and disable public network access when applicable.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "e8a03f97-8794-468d-96a7-86d60f96c97b",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "category": "Security",
+ "checklist": "Service Bus Review Checklist",
+ "description": "With IP firewall, you can restrict the public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
"services": [
- "VPN",
- "AKS"
+ "ServiceBus"
],
"severity": "Medium",
- "subcategory": "HA",
- "text": "If hybrid connectivity is required, use 2xER or ER+VPN for better availability",
+ "subcategory": "Networking",
+ "text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
+ "service": "IoT Hub DPS",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "services": [
- "AKS"
- ],
+ "category": "BC and DR",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "IoT Hub DPS",
+ "services": [],
"severity": "High",
- "subcategory": "IPAM",
- "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
+ "subcategory": "High Availability",
+ "text": "Protect logic apps from region failures with zone redundancy and availability zones",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "services": [
- "VNet",
- "AKS"
- ],
+ "category": "BC and DR",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "8aed4fbf-0830-4883-899d-222a154af478",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "IoT Hub DPS",
+ "services": [],
"severity": "High",
- "subcategory": "IPAM",
- "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
- "waf": "Performance"
+ "subcategory": "High Availability",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "BC and DR",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "IoT Hub DPS",
"services": [
- "AKS"
+ "AppSvc"
],
"severity": "High",
- "subcategory": "IPAM",
- "text": "If using Azure CNI, check the maximum pods/node (default 30)",
- "waf": "Performance"
+ "subcategory": "High Availability",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
- "services": [
- "VNet",
- "AKS"
- ],
- "severity": "Low",
- "subcategory": "IPAM",
- "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
- "waf": "Security"
+ "category": "Application Deployment",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "IoT Hub DPS",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "CI/CD",
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
+ "waf": "Operations"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure data repositories for the backup solution are stored outside of vSAN storage. Either in Azure native or on a disk pool-backed datastore",
+ "guid": "976f32a7-30d1-6caa-c2a0-207fdc26571b",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
"services": [
- "AKS"
+ "AVS",
+ "Backup",
+ "Storage"
],
- "severity": "High",
- "subcategory": "IPAM",
- "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "Ensure backups are not stored on vSAN as vSAN is a finite resource",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Microsoft backup service",
+ "guid": "fc8af7a1-c724-e255-c18d-4ca22a6f27f0",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
"services": [
- "AKS"
+ "AVS",
+ "Backup"
],
- "severity": "Low",
- "subcategory": "Operations",
- "text": "If required add your own CNI plugin",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Business Continuity",
+ "text": "Use MABS as your backup solution",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Best practice - this is Backup, not disaster recovery",
+ "guid": "be28860f-3d29-a79a-1a0e-36f1b23b36ae",
+ "link": "Best practice to deploy backup in the same region as your AVS deployment",
"services": [
- "AKS"
+ "AVS",
+ "Backup",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "Operations",
- "text": "If required configure Public IP per node in AKS",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Business Continuity",
+ "text": "Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Best practice - in case AVS is unavailable",
+ "guid": "4d2f79a5-4ccf-0dfc-557c-49619b99a540",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
"services": [
- "AKS"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
+ "subcategory": "Business Continuity",
+ "text": "Preferably deploy MABS outside of the SDDC as native Azure IaaS",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Is a process in place to request a restore of the VMware components managed by the Azure Platform?",
+ "guid": "ff431c40-962c-5182-d536-0c2f0c4ce9e0",
+ "link": "Will Disaster Recovery Site Recovery, HCX Disaster Recovery, SRM or back tools be used?",
"services": [
- "AKS"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
+ "severity": "Medium",
+ "subcategory": "Business Continuity",
+ "text": "Escalation process with Microsoft in the event of a regional DR",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Compare SRM with HCX",
+ "guid": "f379436d-3051-daa0-01fb-dc4e0e04d677",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/disaster-recovery-using-vmware-site-recovery-manager",
"services": [
- "AKS"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
+ "subcategory": "Disaster Recovery",
+ "text": "Use VMware Site Recovery Manager when both sites are Azure VMware Solution",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Recovery into Azure instead of Vmware solution",
+ "guid": "367f71d8-3cf6-51a0-91a5-3db3d570cc19",
+ "link": "https://docs.microsoft.com/azure/site-recovery/avs-tutorial-prepare-azure",
"services": [
- "AKS",
- "NVA"
+ "AVS",
+ "ASR"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Disaster Recovery",
+ "text": "Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Avoid manual tasks as much as possible",
+ "guid": "ee02ada0-1887-bb3a-b84c-423f45a09ef9",
+ "link": "https://docs.microsoft.com/azure/site-recovery/avs-tutorial-prepare-azure",
"services": [
- "AKS"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "If using a public API endpoint, restrict the IP addresses that can access it",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Use Automated recovery plans with either of the Disaster solutions,",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Any other datacenter in the same region",
+ "guid": "0c2b74e5-9c28-780d-1df3-12d3de4aaa76",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/connect-multiple-private-clouds-same-region",
"services": [
- "AKS"
+ "AVS",
+ "ASR"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Use private clusters if your requirements mandate it",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Disaster Recovery",
+ "text": "Configure a secondary disaster recovery environment",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use 2 different address spaces between the regions, for example: 10.0.0.0/16 and 192.168.0.0/16 for the different regions",
+ "guid": "c2a34ec4-2933-4e6c-dc36-e20e67abbe3f",
+ "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"services": [
- "AKS",
- "AzurePolicy"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
- "waf": "Security"
+ "subcategory": "Disaster Recovery",
+ "text": "Assign IP ranges unique to each region",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "category": "BCDR",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "ExpressRoute Global Reach can be used for connectivity between the primary and secondary Azure VMware Solution Private Clouds or routing must be done through network virtual appliances?",
+ "guid": "b44fb6ec-bfc1-3a8e-dba2-ca97f0991d2c",
+ "link": "This depends if you have multiple AVS Private Clouds. If so and they are in the same region then use AVS Interconnect. If they are in separate regions then use ExpressRoute Global Reach.",
"services": [
- "AKS",
- "AzurePolicy"
+ "ExpressRoute",
+ "AVS",
+ "ASR",
+ "NVA"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Disaster Recovery",
+ "text": "Use Global Reach between DR regions",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "An ExR Global Reach connection will be established to the ExR circuit, no other connections",
+ "guid": "a2c12df2-07fa-3edd-2cec-fda0b55fb952",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/tutorial-expressroute-global-reach-private-cloud",
"services": [
- "AKS",
- "AzurePolicy"
+ "VWAN",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Use Kubernetes network policies to increase intra-cluster security",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Direct (no vWAN, no H&S)",
+ "text": "Global Reach to ExR circuit - no Azure resources",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use ExR to connect on-premises (other) location to Azure",
+ "guid": "f62ce162-ba5a-429d-674e-fafa1af5f706",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/tutorial-expressroute-global-reach-private-cloud",
"services": [
- "AKS",
- "WAF"
+ "ExpressRoute",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Use a WAF for web workloads (UIs or APIs)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "ExpressRoute",
+ "text": "Connect to Azure using ExR",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use the migration assesment tool and timeline to determine bandwidth required",
+ "guid": "cf01c73b-1247-0a7a-740c-e1ea29bda340",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-introduction",
"services": [
- "DDoS",
- "VNet",
- "AKS"
+ "ExpressRoute",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Use DDoS Standard in the AKS Virtual Network",
- "waf": "Security"
+ "subcategory": "ExpressRoute",
+ "text": "Bandwidth sizing",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "What traffic is routed through a firewall, what goes directly into Azure",
+ "guid": "aab216ee-8941-315e-eada-c7e1f2243bd1",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/azure-vmware-solution-foundation-networking",
"services": [
- "AKS"
+ "ExpressRoute",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Security",
- "text": "If required add company HTTP Proxy",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "ExpressRoute",
+ "text": "Traffic routing ",
+ "waf": "Performance"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure AKS Review",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "AVS to ExR circuit, no traffic inspection",
+ "guid": "1f956e45-f62d-5c95-3a95-3bab718907f8",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/azure-vmware-solution-foundation-networking",
"services": [
- "AKS"
+ "ExpressRoute",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Consider using a service mesh for advanced microservice communication management",
- "waf": "Security"
+ "subcategory": "ExpressRoute",
+ "text": "Global Reach ",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Name of the vNet and a unique address space /24 minimum",
+ "guid": "91f7a87b-21ac-d712-959c-8df2ba034253",
+ "link": "https://learn.microsoft.com/azure/virtual-network/quick-create-portal",
"services": [
- "AKS",
- "Monitor"
+ "AVS",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Alerting",
- "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Hub & Spoke",
+ "text": "VNet name & address space",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Subnet must be called GatewaySubnet",
+ "guid": "58a027e2-f37f-b540-45d5-e44843aba26b",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings",
"services": [
- "Entra",
- "AKS"
+ "ExpressRoute",
+ "VNet",
+ "AVS",
+ "VPN"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Check regularly Azure Advisor for recommendations on your cluster",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Hub & Spoke",
+ "text": "Gateway subnet",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Create a VPN gateway on the hub Gateway subnet",
+ "guid": "d4806549-0913-3e79-b580-ac2d3706e65a",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings",
"services": [
- "AKS"
+ "VPN",
+ "ExpressRoute",
+ "AVS",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Enable AKS auto-certificate rotation",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Hub & Spoke",
+ "text": "VPN Gateway",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Create an ExR Gateway in the hub Gateway subnet.",
+ "guid": "864d7a8b-7016-c769-a717-61af6bfb73d2",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings",
"services": [
- "AKS"
+ "ExpressRoute",
+ "VNet",
+ "AVS",
+ "VPN"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Hub & Spoke",
+ "text": "ExR Gateway",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "How will Internet traffic be routes, Az Firewall, NVA, Secure Hub, On-Premises firewall?",
+ "guid": "cc2e11b9-7911-7da1-458c-d7fcef794aad",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/enable-public-internet-access",
"services": [
- "AKS"
+ "AVS",
+ "NVA"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Egress point",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Allow remote connectivity to AVS via the portal, specifically to vCenter, NSX-T and HCX",
+ "guid": "71e68ce3-982e-5e56-0191-01100ad0e66f",
+ "link": "https://learn.microsoft.com/answers/questions/171195/how-to-create-jump-server-in-azure-not-bastion-paa.html",
"services": [
- "AKS"
+ "AVS",
+ "Bastion"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Jumpbox & Bastion",
+ "text": "Remote connectivity to AVS",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Name the jumpbox and identify the subnet where it will be hosted",
+ "guid": "6f8e93a2-44b1-bb1d-28a1-4d5b3c2ea857",
+ "link": "https://learn.microsoft.com/azure/bastion/tutorial-create-host-portal",
"services": [
- "AKS"
+ "AVS",
+ "Bastion",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Jumpbox & Bastion",
+ "text": "Configure a jumbox and Azure Bastion",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Provides secure / seamless RDP/SSH connectivity to your vm's directly through the portal.",
+ "guid": "ba430d58-4541-085c-3641-068c00be9bc5",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-groups-overview",
"services": [
- "AKS"
+ "AVS",
+ "VM",
+ "Bastion"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Consider using AKS command invoke on private clusters",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Jumpbox & Bastion",
+ "text": "Security measure allowing RDP access via the portal",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Using a VPN to connect to Azure to enable VMware communications (HCX) (not recommended)",
+ "guid": "9988598f-2a9f-6b12-9b46-488415ceb325",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/configure-site-to-site-vpn-gateway",
"services": [
- "AKS"
+ "VPN",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "For planned events consider using Node Auto Drain",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "VPN",
+ "text": "Connect to Azure using a VPN",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use the migration assesment tool and timeline to determine bandwidth required (eg 3rd party tool in link)",
+ "guid": "956ce5e9-a862-fe2b-a50d-a22923569357",
+ "link": "https://www.omnicalculator.com/other/data-transfer#:~:text=To%20calculate%20the%20data%20transfer%20speed%3A%201%20Download,measured%20time%20to%20find%20the%20data%20transfer%20speed.",
"services": [
- "AKS"
+ "VPN",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "VPN",
+ "text": "Bandwidth sizing",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "What traffic is routed through a firewall, what goes directly into Azure",
+ "guid": "e095116f-0bdc-4b51-4d71-b9e469d56f59",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/azure-vmware-solution-foundation-networking",
"services": [
- "AKS"
+ "VPN",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Use custom Node RG (aka 'Infra RG') name",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "VPN",
+ "text": "Traffic routing ",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Name and unique address space for the vWAN, name for the vWAN hub",
+ "guid": "4dc480ac-cecd-39c4-fdc6-680b300716ab",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-site-to-site-portal#openvwan",
"services": [
- "AKS"
+ "VWAN",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
- "waf": "Operations"
+ "subcategory": "vWAN hub",
+ "text": "vWAN name, hub name and address space",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Select either boh or the appropriate connection type.",
+ "guid": "51d6affd-8e02-6aea-d3d4-0baf618b3076",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-point-to-site-portal",
"services": [
- "AKS"
+ "VPN",
+ "VWAN",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Taint Windows nodes",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "vWAN hub",
+ "text": "ExR and/or VPN gateway provisioned",
+ "waf": "Performance"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
+ "category": "Connectivity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Add Azure firewall to vWAN (recommended)",
+ "guid": "e32a4c67-3dc0-c134-1c12-52d46dcbab5b",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-expressroute-portal",
"services": [
- "AKS"
+ "VWAN",
+ "AVS",
+ "Firewall"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Keep windows containers patch level in sync with host patch level",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "vWAN hub",
+ "text": "Secure vWAN",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "description": "Via Diagnostic Settings at the cluster level",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Active directory or other identity provider servers",
+ "guid": "fbc47fbf-bc96-fa93-ed5d-8c9be63cd5c3",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/configure-identity-source-vcenter",
"services": [
- "AKS",
- "Monitor"
+ "Entra",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Access",
+ "text": "External Identity (user accounts)",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Not required for LDAPS, required for Kerberos",
+ "guid": "b5db7975-f6bb-8ba3-ee5f-e3e805887997",
+ "link": "https://learn.microsoft.com/windows-server/identity/ad-ds/plan/understanding-active-directory-site-topology",
"services": [
- "AKS"
+ "Entra",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "If required use nodePool snapshots",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Access",
+ "text": "If using AD domain, ensure Sites & Services has been configured",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Authentication for users, must be secure.",
+ "guid": "c30749c4-e2af-558c-2eb9-0b6ae84881d1",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/configure-identity-source-vcenter",
"services": [
- "AKS",
- "Cost"
+ "Entra",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Consider spot node pools for non time-sensitive workloads",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Access",
+ "text": "Use LDAPS not ldap ( vCenter)",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Authentication for users, must be secure.",
+ "guid": "64cb9b5c-9edd-787e-1dd8-2b2338e51635",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/configure-external-identity-source-nsx-t",
"services": [
- "AKS",
- "Cost"
+ "Entra",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Consider AKS virtual node for quick bursting",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Access",
+ "text": "Use LDAPS not ldap (NSX-T)",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "CN or SAN names, no wildcards, contains private key - CER or PFX",
+ "guid": "bec285ab-037e-d629-81d1-f61dac23cd4c",
+ "link": "https://youtu.be/4jvfbsrhnEs",
"services": [
- "AKS",
- "Monitor"
+ "Entra",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "Security certificate installed on LDAPS servers ",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Standard Azure Roles Based Access Controls",
+ "guid": "4ba394a2-3c33-104c-8e34-2dadaba9cc73",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-identity",
"services": [
- "AKS",
- "Monitor"
+ "Entra",
+ "AVS",
+ "RBAC"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "RBAC applied to Azure roles",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Create roles in vCenter required to meet minimum viable access guidelines",
+ "guid": "b04ca129-83a9-3494-7512-347dd2d766db",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-identity#view-the-vcenter-server-privileges",
"services": [
- "AKS",
- "Monitor"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor CPU and memory utilization of the nodes",
- "waf": "Operations"
+ "subcategory": "Security",
+ "text": "RBAC model in vCenter",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)",
+ "guid": "8e477d2f-8004-3dd0-93d6-0aece9e1b2fb",
+ "link": "Best practice",
"services": [
- "AKS",
- "Monitor"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
- "waf": "Operations"
+ "subcategory": "Security",
+ "text": "CloudAdmin role usage",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "For roles managing the Azure VMware Solution resource in the Azure Portal (no standing permissions allowed)",
+ "guid": "00e0b729-f9be-f600-8c32-5ec0e8f2ed63",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"services": [
- "Storage",
- "EventHubs",
- "AKS",
- "ServiceBus",
- "Monitor"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor OS disk queue depth in nodes",
- "waf": "Operations"
+ "subcategory": "Security ",
+ "text": "Is Privileged Identity Management implemented",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "For the Azure VMware Solution PIM roles",
+ "guid": "0842d45f-41a8-8274-1155-2f6ed554d315",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"services": [
- "AKS",
- "NVA",
- "LoadBalancer",
- "Monitor"
+ "Entra",
+ "AVS",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
- "waf": "Operations"
+ "subcategory": "Security ",
+ "text": "Is Privileged Identity Management audit reporting implemented",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Best practice, also see Monitoring/Alerts",
+ "guid": "915cbcd7-0640-eb7c-4162-9f33775de559",
+ "link": "Best practice",
"services": [
- "AKS",
- "Monitor"
+ "Monitor",
+ "Entra",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Subscribe to resource health notifications for your AKS cluster",
- "waf": "Operations"
+ "subcategory": "Security ",
+ "text": "Limit use of CloudAdmin account to emergency access only",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "category": "Identity",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Operational procedure",
+ "guid": "7effa0c0-9172-e8e4-726a-67dbea8be40a",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/rotate-cloudadmin-credentials?tabs=azure-portal",
"services": [
- "AKS"
+ "Entra",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Resources",
- "text": "Configure requests and limits in your pod specs",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Security ",
+ "text": "Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX) credentials",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use Azure ARC for Servers to properly govern workloads running on Azure VMware Solution using Azure native technologies (Azure ARC for Azure VMware Solution is not yet available)",
+ "guid": "8f426fd0-d73b-d398-1f6f-df0cbe262a82",
+ "link": "https://learn.microsoft.com/azure/azure-arc/vmware-vsphere/overview",
"services": [
- "AKS"
+ "Arc",
+ "AVS",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Resources",
- "text": "Enforce resource quotas for namespaces",
+ "subcategory": "Operations",
+ "text": "AVS VM Management (Azure Arc)",
"waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management, Monitoring and Security solutions",
+ "guid": "11dbe773-e380-9191-1418-e886fa7a6fd0",
+ "link": "https://docs.microsoft.com/azure/governance/policy/overview",
"services": [
- "AKS",
- "Subscriptions"
+ "Monitor",
+ "AVS",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Resources",
- "text": "Ensure your subscription has enough quota to scale out your nodepools",
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Azure policy",
"waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
- "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
- "service": "AKS",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "For manual deployments, consider implementing resource locks to prevent accidental actions on your Azure VMware Solution Private Cloud",
+ "guid": "1e59c639-9b7e-a60b-5e93-3798c1aff5db",
+ "link": "https://docs.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json#configure-locks",
"services": [
- "AKS"
+ "AVS"
],
- "severity": "High",
- "subcategory": "Resources",
- "text": "Configure Liveness and Readiness probes for all deployments",
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Resource locks",
"waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "For manual deployments, all configuration and deployments must be documented",
+ "guid": "8f2c46aa-ca1b-cad3-3ac9-213dfc0a265e",
+ "link": "Make sure to create your own runbook on the deployment of AVS.",
"services": [
- "AKS"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use the Cluster Autoscaler",
- "waf": "Performance"
+ "subcategory": "Operations",
+ "text": "Run books",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
+ "category": "Management",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Implement human understandable names for ExR authorization keys to allow for easy identification of the keys purpose/use",
+ "guid": "86b314f9-1f1e-317a-4dfb-cf510ad4a030",
+ "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
"services": [
- "AKS"
+ "AKV",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Customize node configuration for AKS node pools",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Naming conventions for auth keys",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "For automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
+ "guid": "e22a2d99-eb71-7d7c-07af-6d4cdb1d4443",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-alerts-for-azure-vmware-solution",
"services": [
- "AKS"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use the Horizontal Pod Autoscaler when required",
- "waf": "Performance"
+ "subcategory": "Alerts",
+ "text": "Create warning alerts for critical thresholds ",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "for automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
+ "guid": "6d02f159-627d-79bf-a931-fab6d947eda2",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-alerts-for-azure-vmware-solution",
"services": [
- "AKS"
+ "Monitor",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Scalability",
- "text": "Consider an appropriate node size, not too large or too small",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Alerts",
+ "text": "Create critical alert vSAN consumption",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Provides platform alerts (generated by Microsoft)",
+ "guid": "1cc97b39-2c7e-246f-6d73-789cfebfe951",
+ "link": "https://www.virtualworkloads.com/2021/04/azure-vmware-solution-azure-service-health/",
"services": [
- "AKS"
+ "Monitor",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Alerts",
+ "text": "Configured for Azure Service Health alerts and notifications",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure you have a documented and implemented backup policy and solution for Azure VMware Solution VM workloads",
+ "guid": "0962606c-e3b4-62a9-5661-e4ffd62a4509",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/set-up-backup-server-for-azure-vmware-solution",
"services": [
- "AKS"
+ "AzurePolicy",
+ "VM",
+ "Monitor",
+ "AVS",
+ "Backup"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Consider subscribing to EventGrid Events for AKS automation",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "Backup policy",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Keep in mind the lead time for requesting new nodes",
+ "guid": "4ec7ccfb-795e-897e-4a84-fd31c04eadc6",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-alerts-for-azure-vmware-solution",
"services": [
- "AKS"
+ "Monitor",
+ "AVS",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "For long running operation on an AKS cluster consider event termination",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Capacity",
+ "text": "Policy around ESXi host density and efficiency",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Azure Cost Management can be used - one option, put AVS in it's own Subscription. ",
+ "guid": "7f8f175d-13f4-5298-9e61-0bc7e9fcc279",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/govern",
"services": [
- "AKS"
+ "Cost",
+ "Monitor",
+ "AVS",
+ "Subscriptions"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Costs",
+ "text": "Ensure a good cost management process is in place for Azure VMware Solution - ",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Create dashboards to enable core Azure VMware Solution monitoring insights",
+ "guid": "01e689e0-7c6c-b58f-37bd-4d6b9b1b9c74",
+ "link": "https://docs.microsoft.com/azure/azure-portal/azure-portal-dashboards",
"services": [
- "Storage",
- "AKS"
+ "Monitor",
+ "AVS",
+ "NetworkWatcher"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "Use ephemeral OS disks",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Dashboard",
+ "text": "Connection monitor dashboard",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Send to an Azure Storage account or Azure EventHub for processing (direct to Log Analytics is pending)",
+ "guid": "f9afdcc9-649d-d840-9fb5-a3c0edcc697d",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-vmware-syslogs",
"services": [
- "Storage",
- "AKS"
+ "Monitor",
+ "AVS",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Logs & Metrics",
+ "text": "Configure Azure VMware Solution logging ",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Must be on-premises, implement if available",
+ "guid": "7cbac8c3-4eda-d5d9-9bda-c6b5abba9fb6",
+ "link": "Is vROPS or vRealize Network Insight going to be used? ",
"services": [
- "Storage",
- "AKS"
+ "Monitor",
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Storage",
- "text": "For hyper performance storage option use Ultra Disks on AKS",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Logs & Metrics",
+ "text": "vRealize Operations",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure workloads running on Azure VMware Solution are monitored using Azure Log Analytics and Azure Monitor",
+ "guid": "b243521a-644d-f865-7fb6-21f9019c0dd2",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-vmware-syslogs",
"services": [
- "Storage",
- "AKS",
- "SQL"
+ "Monitor",
+ "AVS",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
- "waf": "Performance"
+ "subcategory": "Logs & Metrics",
+ "text": "AVS VM logging",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Between on-premises to Azure are monitored using 'connection monitor'",
+ "guid": "2ca97d91-dd36-7229-b668-01036ccc3cd3",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-create-using-portal",
"services": [
- "Storage",
- "AKS"
+ "VPN",
+ "Monitor",
+ "AVS",
+ "ExpressRoute",
+ "NetworkWatcher"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
- "waf": "Performance"
+ "subcategory": "Network",
+ "text": "Monitor ExpressRoute and/or VPN connections ",
+ "waf": "Operations"
},
{
- "category": "Operations",
- "checklist": "Azure AKS Review",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "To monitor the Azure VMware Solution back-end ExpressRoute connection (Azure native to AVS)",
+ "guid": "99209143-60fe-19f0-5633-8b5671277ba5",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-create-using-portal",
"services": [
- "Storage",
- "AKS"
+ "ExpressRoute",
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
- "waf": "Performance"
+ "subcategory": "Network",
+ "text": "Monitor from an Azure native resource to an Azure VMware Solution VM",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "fda1dae2-dc95-4d48-a6c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/synapse-analytics/sql-data-warehouse/backup-and-restore#geo-backups-and-disaster-recovery",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "To monitor end-to-end, on-premises to AVS workloads",
+ "guid": "b9e5867c-57d3-036f-fb1b-3f0a71664efe",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-create-using-portal",
"services": [
- "Backup"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Enable Geo Backup ",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "89e558b9-37d4-4974-b111-2dbd7baf12e7",
- "link": "https://techcommunity.microsoft.com/t5/azure-synapse-analytics-blog/how-to-use-ci-cd-integration-to-automate-the-deploy-of-a-synapse/ba-p/2248060",
- "services": [],
- "severity": "Medium",
- "subcategory": "DevOps",
- "text": "Integrate with Azure DevOps to deploy Multiple environments",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "b94ef6e0-47d2-4da2-a82b-1cd6d2f54b29",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "services": [],
- "severity": "High",
- "subcategory": "DR",
- "text": "BCDR for Azure Synapse pipelines ",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "769e3a69-1e88-438a-a936-667e13c00567",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "services": [],
- "severity": "High",
- "subcategory": "DR",
- "text": "Use Zone Redudant pipelines in regions supporting Availablity Zones",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "4b1e944a-4598-437e-b7ad-6c6d3b365a5c",
- "link": "https://learn.microsoft.com/azure/synapse-analytics/cicd/source-control",
- "services": [],
- "severity": "Low",
- "subcategory": "DevOps",
- "text": "Create Scripts for all DLL Statements and save in Git Repository ",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "7acbe48a-be54-4cd7-af2e-87768358c559",
- "link": "https://learn.microsoft.com/azure/synapse-analytics/spark/apache-spark-development-using-notebooks",
- "services": [],
- "severity": "Low",
- "subcategory": "DevOps",
- "text": "When working with Spark Notebooks, make sure to integrate with Git or Azure DevOps",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "775c6ee9-5b86-4ad8-a44c-e3b2b38b875b",
- "link": "https://learn.microsoft.com/azure/synapse-analytics/sql-data-warehouse/backup-and-restore",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Use Dedicated pools",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "a1cf2049-9013-4a5d-9ce4-74dbcbd8682a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/analytics/azure-synapse",
- "services": [],
- "severity": "Medium",
- "subcategory": "DR",
- "text": "Use Database restore points for Azure Synapse",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "6abca2a4-fda1-4dae-8dc9-5d48c6c791dc",
- "link": "https://learn.microsoft.com/azure/synapse-analytics/sql/on-demand-workspace-overview",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Use Serverless Pools when required",
- "waf": "Reliability"
+ "subcategory": "Network",
+ "text": "Monitor from an on-premises resource to an Azure VMware Solution VM",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "a0f6c565-89e5-458b-a37d-4974e1112dbd",
- "link": "https://learn.microsoft.com/azure/synapse-analytics/quickstart-deployment-template-workspaces",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Track requests to Azure VMware Solution and Azure VMware Solution based workloads",
+ "guid": "4af7c5f7-e5e9-bedf-a8cf-314b81735962",
+ "link": "Firewall logging and alerting rules are configured (Azure Firewall or 3rd party)",
"services": [
- "Storage"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "DevOps",
- "text": "Use Infrastructure as a Code template to do repeatable deployments",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Auditing and logging is implemented for inbound internet ",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Synapse Review Checklist",
- "guid": "7baf12e7-b94e-4f6e-847d-2da2982b1cd6",
- "link": "https://learn.microsoft.com/azure/cosmos-db/synapse-link",
- "services": [],
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Implemented for outbound internet connections from Azure VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious activity",
+ "guid": "74be60a3-cfac-f057-eda6-3ee087e805d5",
+ "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-network-topology-connectivity",
+ "services": [
+ "Monitor",
+ "AVS"
+ ],
"severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Make sure to re-eshtablish any Synapse Links",
- "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Session monitoring ",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
- "service": "APIM",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Enable Diagnostic and metric logging on Azure VMware Solution",
+ "guid": "a434b3b5-f258-0845-cd76-d7df6ef5890e",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-vmware-syslogs",
"services": [
- "APIM",
- "AzurePolicy"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Development best practices",
- "text": "Implement an error handling policy at the global level",
+ "subcategory": "VMWare",
+ "text": "Logging and diagnostics",
"waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
- "service": "APIM",
+ "category": "Monitoring",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Monitor AVS workloads (each VM in AVS)",
+ "guid": "fb00b69a-83ec-ce72-446e-6c23a0cab09a",
+ "link": "https://docs.microsoft.com/azure/azure-monitor/agents/agent-windows?tabs=setup-wizard",
"services": [
- "APIM",
- "AzurePolicy"
+ "Monitor",
+ "AVS",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Development best practices",
- "text": "Ensure all APIs policies include a element.",
+ "subcategory": "VMware",
+ "text": "Log Analytics Agents deployed on Azure VMware Solution guest VM workloads",
"waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Decision on traffic flow",
+ "guid": "a1354b87-e18e-bf5c-c50b-8ddf0540e971",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-hub-and-spoke",
"services": [
- "ACR",
- "APIM",
- "AzurePolicy"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Development best practices",
- "text": "Use Policy Fragments to avoid repeating same policies definitions across multiple APIs",
- "waf": "Operations"
+ "subcategory": "Hub & Spoke",
+ "text": "North/South routing through Az Firewall or 3rd party ",
+ "waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Decision to route Azure to Azure traffic through Firewall, not E/W between AVS workloads (internal to AVS)",
+ "guid": "29a8a499-ec31-f336-3266-0895f035e379",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-hub-and-spoke",
"services": [
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Monetization",
- "text": "If you are planning to monetize your APIs, review the 'monetization support' article for best practices",
- "waf": "Operations"
+ "subcategory": "Hub & Spoke",
+ "text": "East West (Internal to Azure)",
+ "waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Requires a 3rd party NVA with Azure Route server - Scenario 2 (see link)",
+ "guid": "ebd3cc3c-ac3d-4293-950d-cecd8445a523",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-network-topology-connectivity",
"services": [
- "Monitor",
- "APIM"
+ "ARS",
+ "AVS",
+ "NVA"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Enable Diagnostics Settings to export logs to Azure Monitor",
+ "severity": "Medium",
+ "subcategory": "Hub & Spoke",
+ "text": "ExR without Global Reach",
"waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "When route server is used, ensure no more then 200 routes are propagated from route server to ExR gateway to on-premises (ARS limit). Important when using MoN",
+ "guid": "ffb5c5ca-bd89-ff1b-8b73-8a54d503d506",
+ "link": "https://learn.microsoft.com/azure/route-server/route-server-faq",
"services": [
- "Monitor",
- "APIM"
+ "ARS",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Enable Application Insights for more detailed telemetry",
+ "subcategory": "Hub & Spoke",
+ "text": "Route server ",
"waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure API Management Review",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Via on-premises, Az Firewall, 3rd Party, NSX-T pubic IP",
+ "guid": "a4070dad-3def-818d-e9f7-be440d10e7de",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-design-public-internet-access",
"services": [
- "Monitor",
- "APIM"
+ "AVS"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Configure alerts on the most critical metrics",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Egress point(s)",
+ "waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure API Management Review",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Az Firewall, 3rd party NVA, Application Gateway, Azure Frontdoor ",
+ "guid": "e942c03d-beaa-3d9f-0526-9b26cd5e9937",
+ "link": "Research and choose optimal solution for each application",
"services": [
- "Entra",
- "APIM",
- "AKV"
+ "AppGW",
+ "AVS",
+ "FrontDoor",
+ "NVA"
],
- "severity": "High",
- "subcategory": "Data protection",
- "text": "Ensure that custom SSL certificates are stored an Azure Key Vault so they can be securely accessed and updated",
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Internet facing applications",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure API Management Review",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure no more then 200 routes are propagated from route server to ExR gateway to on-premises (ARS limit). Important when using MoN",
+ "guid": "e778a2ec-b4d7-1d27-574c-14476b167d37",
+ "link": "https://docs.microsoft.com/azure/route-server/route-server-faq#route-server-limits",
"services": [
- "Entra",
- "APIM"
+ "ARS",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Protect incoming requests to APIs (data plane) with Azure AD",
+ "severity": "Medium",
+ "subcategory": "Routing",
+ "text": "When route server Route limit understood? ",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure API Management Review",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "(VPN Gateway, AppGW, FrontDoor, Load balancer, VMs (etc) (Remove: enabled on ExR/VPN Gateway subnet in Azure)",
+ "guid": "66c97b30-81b9-139a-cc76-dd1d94aef42a",
+ "link": "https://docs.microsoft.com/azure/ddos-protection/manage-ddos-protection",
"services": [
- "Entra",
- "APIM"
+ "FrontDoor",
+ "VPN",
+ "VM",
+ "ExpressRoute",
+ "AVS",
+ "LoadBalancer",
+ "DDoS",
+ "AppGW",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Use Microsoft Entra ID to authenticate users in the Developer Portal",
+ "subcategory": "Security",
+ "text": "Is DDoS standard protection of public facing IP addresses? ",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure API Management Review",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "To manage Azure VMware Solution, vCenter, NSX manager and HCX manager",
+ "guid": "d43da920-4ecc-a4e9-dd45-a2986ce81d32",
+ "link": "Best practice: Bastion or 3rd party tool",
"services": [
- "Entra",
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Privileged access",
- "text": "Create appropriate groups to control the visibility of the products",
+ "subcategory": "Security",
+ "text": "Use a dedicated privileged access workstation (PAW)",
"waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use NSX-T for inter-vmware-traffic inspection",
+ "guid": "a2dac74f-5380-6e39-25e6-f13b99ece51f",
+ "link": "https://docs.vmware.com/en/VMware-NSX-T-Data-Center/3.2/administration/GUID-F6685367-7AA1-4771-927E-ED77727CFDA3.html",
"services": [
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "Use Backends feature to eliminate redundant API backend configurations",
- "waf": "Operations"
+ "subcategory": "Traffic Inspection",
+ "text": "East West (Internal to AVS)",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Decision on whether or not to use Secure hub for E/W and Internet traffic - requires Global Reach",
+ "guid": "3f621543-dfac-c471-54a6-7b2849b6909a",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"services": [
- "APIM",
- "AzurePolicy"
+ "VWAN",
+ "AVS",
+ "Firewall"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "Use Named Values to store common values that can be used in policies",
- "waf": "Operations"
+ "subcategory": "Virtual WAN",
+ "text": "Use Secure Hub (Azure Firewall or 3rd party)",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
+ "category": "Networking",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Decision to route Azure to Azure traffic through Firewall, not E/W between AVS workloads (internal to AVS)",
+ "guid": "d7af5670-1b39-d95d-6da2-8d660dfbe16b",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/secure-cloud-network",
"services": [
- "ASR",
- "ACR",
- "APIM"
+ "VWAN",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Business continuity and disaster recovery",
- "text": "For DR, leverage the premium tier with deployments scaled across two or more regions for 99.99% SLA",
- "waf": "Reliability"
+ "subcategory": "Virtual WAN",
+ "text": "East West (Internal to Azure)",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "When intending to use automated scale-out, be sure to apply for sufficient Azure VMware Solution quota for the subscriptions running Azure VMware Solution",
+ "guid": "7d049005-eb35-4a93-50a5-3b31a9f61161",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/configure-nsx-network-components-azure-portal",
"services": [
- "ASR",
- "APIM"
+ "AVS",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Business continuity and disaster recovery",
- "text": "Deploy at least one unit in two or more availability zones for an increased SLA of 99.99%",
- "waf": "Reliability"
+ "subcategory": "Automated Scale",
+ "text": "Scale out operations planning",
+ "waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "When intending to use automated scale-in, be sure to take storage policy requirements into account before performing such action",
+ "guid": "7242c1de-da37-27f3-1ddd-565ccccb8ece",
+ "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-platform-automation-and-devops#automated-scale",
"services": [
- "ASR",
- "APIM",
- "Backup"
+ "AVS",
+ "AzurePolicy",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Business continuity and disaster recovery",
- "text": "Ensure there is an automated backup routine",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Automated Scale",
+ "text": "Scale in operations planning",
+ "waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Scaling operations always need to be serialized within a single SDDC as only one scale operation can be performed at a time (even when multiple clusters are used)",
+ "guid": "3233e49e-62ce-97f3-8737-8230e771b694",
+ "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-platform-automation-and-devops#automated-scale",
"services": [
- "APIM",
- "AzurePolicy"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Failover and Caching",
- "text": "Use Policies to add a fail-over backend URL and caching to reduce failing calls.",
- "waf": "Reliability"
+ "subcategory": "Automated Scale",
+ "text": "Scale serialized operations planning",
+ "waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "f96ddac5-77ec-4fa9-8833-4327f052059e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-cache-external",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
+ "guid": "68161d66-5707-319b-e77d-9217da892593",
+ "link": "Best practice (testing)",
"services": [
- "APIM",
- "AzurePolicy"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Performance and scalability",
- "text": "Consider using a external cache policy for APIs that can benefit from caching",
- "training": "https://learn.microsoft.com/training/modules/improve-api-performance-with-apim-caching-policy/"
+ "subcategory": "Automated Scale",
+ "text": "Scale rd operations planning",
+ "waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Define and enforce scale in/out maximum limits for your environment in the automations",
+ "guid": "c32cb953-e860-f204-957a-c79d61202669",
+ "link": "Operational planning - understand workload requirements",
"services": [
- "EventHubs",
- "APIM",
- "AzurePolicy"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "Performance and scalability",
- "text": "If you need to log at high performance levels, consider Event Hubs policy",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Automated Scale",
+ "text": "Scale maximum operations planning",
+ "waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Implement monitoring rules to monitor automated scaling operations and monitor success and failure to enable appropriate (automated) responses",
+ "guid": "7bd65a5e-7b5d-652d-dbea-fc6f73a42857",
+ "link": "https://docs.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-management-and-monitoring",
"services": [
- "APIM",
- "AzurePolicy"
+ "Monitor",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Performance and scalability",
- "text": "Apply throttling policies to control the number of requests per second",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "subcategory": "Automated Scale",
+ "text": "Monitor scaling operations ",
"waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Consider the use of Azure Private-Link when using other Azure Native Services",
+ "guid": "95e374af-8a2a-2672-7ab7-b4a1be43ada7",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"services": [
- "APIM"
+ "PrivateLink",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Performance and scalability",
- "text": "Configure autoscaling to scale out the number of instances when the load increases",
+ "subcategory": "Networking",
+ "text": "Private link",
"waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "category": "Other Services/Operations",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "When performing automated configuration of NSX-T segments with a single Tier-1 gateway, use Azure Portal APIs instead of NSX-Manager APIs",
+ "guid": "71eff90d-5ad7-ac60-6244-2a6f7d3c51f2",
+ "link": "Best practice",
"services": [
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Performance and scalability",
- "text": "Deploy self-hosted gateways where Azure doesn't have a region close to the backend APIs.",
+ "subcategory": "Networking",
+ "text": "Provisioning Vmware VLANs",
"waf": "Performance"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "In which region will AVS be deployed",
+ "guid": "04e3a2f9-83b7-968a-1044-2811811a924b",
+ "link": "https://learn.microsoft.com/windows-server/identity/ad-ds/plan/understanding-active-directory-site-topology",
"services": [
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Premium Tier",
- "text": "Use the premium tier for production workloads.",
+ "subcategory": "Pre-deployment",
+ "text": "Region selected",
"waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Are there regulatory or compliance policies in play",
+ "guid": "e52d1615-9cc6-565c-deb6-743ed7e90f4b",
+ "link": "Internal policy or regulatory compliance",
"services": [
- "APIM",
+ "AVS",
"AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Request Routing",
- "text": "In multi-region model, use Policies to route the requests to regional backends based on availability or latency.",
+ "subcategory": "Pre-deployment",
+ "text": "Data residency compliant with selected regions",
"waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Request through the support blade",
+ "guid": "92bd5ad6-441f-a983-7aa9-05dd669d760b",
+ "link": "https://learn.microsoft.com/azure/migrate/concepts-azure-vmware-solution-assessment-calculation",
"services": [
- "Entra",
- "APIM"
+ "AVS"
],
- "severity": "High",
- "subcategory": "Resource Limits",
- "text": "Be aware of APIM's limits",
+ "severity": "Medium",
+ "subcategory": "Pre-deployment",
+ "text": "Request for number of AVS hosts submitted ",
"waf": "Reliability"
},
{
- "category": "Management",
- "checklist": "Azure API Management Review",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "PG approval for deployment",
+ "guid": "28370f63-1cb8-2e35-907f-c5516b6954fa",
+ "link": "Support request through portal or get help from Account Team",
"services": [
- "APIM"
+ "AVS"
],
- "severity": "High",
- "subcategory": "Self-Hosted",
- "text": "Ensure that the self-hosted gateway deployments are resilient.",
+ "severity": "Medium",
+ "subcategory": "Pre-deployment",
+ "text": "Region and number of AVS nodes approved",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure API Management Review",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Portal/subscription/resource providers/ Microsoft.AVS",
+ "guid": "96c76997-30a6-bb92-024d-f4f93f5f57fa",
+ "link": "Done through the subscription/resource providers/ AVS register in the portal",
"services": [
- "Entra",
- "APIM",
- "FrontDoor"
+ "AVS",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Connectivity",
- "text": "Use Azure Front Door in front of APIM for multi-region deployment",
- "waf": "Performance"
+ "subcategory": "Pre-deployment",
+ "text": "Resource provider for AVS registered",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure API Management Review",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Connectivity, subscription & governanace model",
+ "guid": "5898e3ff-5e6b-bee1-6f85-22fee261ce63",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/enterprise-scale-landing-zone",
"services": [
- "VNet",
- "APIM"
+ "AVS",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Deploy the service within a Virtual Network (VNet)",
- "waf": "Security"
+ "subcategory": "Pre-deployment",
+ "text": "Landing zone architecture",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure API Management Review",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "The name of the RG where AVS will exist",
+ "guid": "d0181fb8-9cb8-bf4b-f5e5-b5f9bf7ae4ea",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal",
"services": [
- "VNet",
- "Entra",
- "Monitor",
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Deploy network security groups (NSG) to your subnets to restrict or monitor traffic to/from APIM.",
- "waf": "Security"
+ "subcategory": "Pre-deployment",
+ "text": "Resource group name selected",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure API Management Review",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Each resource created as part of the deployment will also utilize this prefix in the name",
+ "guid": "0f0d20c2-5a19-726c-de20-0984e070d9d6",
+ "link": "Best practice - naming standards",
"services": [
- "VNet",
- "Entra",
- "APIM",
- "PrivateLink"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Deploy Private Endpoints to filter incoming traffic when APIM is not deployed to a VNet.",
- "waf": "Security"
+ "subcategory": "Pre-deployment",
+ "text": "Deployment prefix selected",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "Azure API Management Review",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "/22 unique non-overlapping IPv4 address space",
+ "guid": "7fbf2ab7-a36c-5957-c27a-67038557af2a",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/tutorial-network-checklist#routing-and-subnet-considerations",
"services": [
- "APIM"
+ "AVS"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Disable Public Network Access",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Pre-deployment",
+ "text": "Network space for AVS management layer",
+ "waf": "Reliability"
},
{
- "category": "Platform automation and DevOps",
- "checklist": "Azure API Management Review",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "vNets used by workloads running in AVS (non-stretched)",
+ "guid": "0c87f999-e517-21ef-f355-f210ad4134d2",
+ "link": "https://docs.vmware.com/en/VMware-NSX-T-Data-Center/3.2/installation/GUID-4B3860B8-1883-48CA-B2F3-7C2205D91D6D.html",
"services": [
- "APIM"
+ "AVS",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Automation",
- "text": "Simplify management with PowerShell automation scripts",
- "waf": "Operations"
+ "subcategory": "Pre-deployment",
+ "text": "Network space for AVS NSX-T segments",
+ "waf": "Reliability"
},
{
- "category": "Platform automation and DevOps",
- "checklist": "Azure API Management Review",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Choose AV36, AV36P, AV52, AV36T (AV36T = Trial)",
+ "guid": "946c8966-f902-6f53-4f37-00847e8895c2",
+ "link": "https://azure.microsoft.com/pricing/details/azure-vmware/",
"services": [
- "Entra",
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "Configure APIM via Infrastructure-as-code. Review DevOps best practices from the Cloud Adaption Framework APIM Landing Zone Accelerator",
- "waf": "Operations"
+ "subcategory": "Pre-deployment",
+ "text": "AVS SKU (region dependent)",
+ "waf": "Performance"
},
{
- "category": "Platform automation and DevOps",
- "checklist": "Azure API Management Review",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use the Azure migration assessment tool to determine the minimum number of nodes required (consider BCDR as well)",
+ "guid": "31833808-26ba-9c31-416f-d54a89a17f5d",
+ "link": "https://learn.microsoft.com/azure/migrate/how-to-assess",
"services": [
- "Entra",
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "Promote usage of Visual Studio Code APIM extension for faster API development",
- "waf": "Operations"
+ "subcategory": "Pre-deployment",
+ "text": "Number of hosts to be deployed",
+ "waf": "Performance"
},
{
- "category": "Platform automation and DevOps",
- "checklist": "Azure API Management Review",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
- "services": [
- "APIM"
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Understand how and if you should be using reserved instances (cost control)",
+ "guid": "f2b73c4f-3d46-32c9-5df1-5b8dfcd3947f",
+ "link": "https://azure.microsoft.com/en-ca/pricing/details/azure-vmware/#:~:text=Azure%20VMware%20Solution%20%20%20%20Instance%20size,TB%20%28all%20NVMe%29%20%20%20N%2FA%20%2Fhour%20",
+ "services": [
+ "Cost",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "DevOps",
- "text": "Implement DevOps and CI/CD in your workflow",
- "waf": "Operations"
+ "subcategory": "Pre-deployment",
+ "text": "Reserverd Instances",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure that you have requested enough quota, ensuring you have considered growth and Disaster Recovery requirement",
+ "guid": "94ac48ab-ade5-3fa7-f800-263feeb97070",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/concepts-storage#storage-policies-and-fault-tolerance",
"services": [
- "APIM"
+ "AVS",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "APIs",
- "text": "Secure APIs using client certificate authentication",
- "waf": "Security"
+ "subcategory": "Pre-deployment",
+ "text": "Capacity ",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Identify which of the networking scenarios make ",
+ "guid": "1f9d4bd5-14b8-928c-b4cb-eb211f9b8de5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/azure-vmware/eslz-network-topology-connectivity",
"services": [
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "APIs",
- "text": "Secure backend services using client certificate authentication",
- "waf": "Security"
+ "subcategory": "Pre-deployment",
+ "text": "Networking & Connectivity See docs describing scenrario 1 through 5",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
+ "category": "Planning",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure that access constraints to ESXi are understood, there are access limits which might affect 3rd party solutions.",
+ "guid": "070db19b-8a2a-fd6a-c39b-4488d8780da9",
+ "link": "Please Check Partner Ecosystem",
"services": [
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "APIs",
- "text": "Review 'Recommendations to mitigate OWASP API Security Top 10 threats' article and check what is applicable to your APIs",
- "waf": "Security"
+ "subcategory": "Pre-deployment",
+ "text": "3rd party application compatibility ",
+ "waf": "Reliability"
},
{
"category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "When in-guest encryption is used, store encryption keys in Azure Key vault when possible",
+ "guid": "70cfbddc-d3d4-9188-77c8-1cabaefef646",
+ "link": "General recommendation for storing encryption keys.",
"services": [
- "APIM"
+ "AKV",
+ "AVS"
],
"severity": "Medium",
- "subcategory": "APIs",
- "text": "Use Authorizations feature to simplify management of OAuth 2.0 token for your backend APIs",
+ "subcategory": "Encryption",
+ "text": "Use Azure Key Vault with in-guest encryption ",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure workloads on Azure VMware Solution use sufficient data encryption during run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is default)",
+ "guid": "c1a81638-18df-0ce9-a73a-4b9a8a8dd392",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/concepts-storage#data-at-rest-encryption",
"services": [
- "APIM"
+ "SQL",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Ciphers",
- "text": "Use the latest TLS version when encrypting information in transit. Disable outdated and unnecessary protocols and ciphers when possible.",
+ "severity": "Medium",
+ "subcategory": "Encryption",
+ "text": "Use in-guest encryption",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use Key vault to store secrets and authorization keys when separate Service Principles are used for deploying Azure VMware Solution and ExpressRoute",
+ "guid": "8d0a8f51-8d35-19cd-c2fe-4e3512fb467e",
+ "link": "https://docs.microsoft.com/azure/key-vault/general/authentication",
"services": [
- "APIM",
- "AKV"
+ "ExpressRoute",
+ "AKV",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Data protection",
- "text": "Ensure that secrets (Named values) are stored an Azure Key Vault so they can be securely accessed and updated",
+ "severity": "Medium",
+ "subcategory": "Encryption",
+ "text": "Keyvault use for secrets",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Older OS security patching configured for workloads running on Azure VMware Solution are eligible for ESU",
+ "guid": "4f8b20e9-a2a1-f80f-af9b-8aa3b26dca08",
+ "link": "https://docs.microsoft.com/windows-server/get-started/extended-security-updates-deploy",
"services": [
- "Entra",
- "APIM"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Identities",
- "text": "Use managed identities to authenticate to other Azure resources whenever possible",
+ "subcategory": "Extended support",
+ "text": "Ensure extended security update support ",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure API Management Review",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Use a SIEM/SOAR",
+ "guid": "9bb22fec-4d00-3b95-7136-e225d0f5c63a",
+ "link": "https://learn.microsoft.com/azure/sentinel/overview",
"services": [
- "Entra",
- "APIM",
- "WAF",
- "AppGW"
+ "Sentinel",
+ "AVS"
],
- "severity": "High",
- "subcategory": "Network",
- "text": "Use web application firewall (WAF) by deploying Application Gateway in front of APIM",
+ "severity": "Medium",
+ "subcategory": "Investigation",
+ "text": "Enable Azure Sentinel or 3rd party SIEM ",
"waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "9f519499-5820-4060-88fe-cab4538c9dd0",
- "link": "https://learn.microsoft.com/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements",
+ "category": "Security",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "MS Defender For Cloud, for workloads running on Azure VMware Solution",
+ "guid": "f42b0b09-c591-238a-1580-2de3c485ebd2",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/azure-security-integration#prerequisites",
"services": [
- "Storage"
+ "AVS",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Physical",
- "text": "All planned storage pools should use direct-attached storage (SATA, SAS, NVMe)",
- "waf": "Performance"
+ "subcategory": "Security",
+ "text": "Enable Advanced Threat Detection ",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "f7c015e0-7d97-4283-b006-567afeb2b5ca",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/drive-symmetry-considerations#understand-capacity-imbalance",
+ "category": "Security",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Are the applicable policies enabled (compliance baselines added to MDfC)",
+ "guid": "bcdd2348-3d0e-c6bb-1092-aa4cd1a66d6b",
+ "link": "https://docs.microsoft.com/azure/azure-vmware/azure-security-integration",
"services": [
- "Storage",
- "ACR"
+ "AVS",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Physical",
- "text": "Disks are symmetrical across all nodes",
- "waf": "Performance"
+ "subcategory": "Security",
+ "text": "Policy & Regulatory Compliance",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "f785b143-2c1e-4466-9baa-dde8ba4c7aaa",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/fault-tolerance#parity",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Azure to Azure (E/W), Azure to On-premises), AVS to Internet, AVS to Azure",
+ "guid": "607c1ca9-da92-ae19-5a4c-eb1e876acbe7",
+ "link": "https://techcommunity.microsoft.com/t5/azure-migration-and/firewall-integration-in-azure-vmware-solution/ba-p/2254961#:~:text=Azure%20VMware%20Solution%20customers%20have%20multiple%20security%20options,the%20box%20to%20provide%20East-West%20and%20North-South%20firewalling.",
"services": [
- "Storage",
- "Backup"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "S2D",
- "text": "Parity type disk redundancy should only be used for low I/O volumes (backup/archive)",
- "waf": "Performance"
+ "subcategory": "Firewalls",
+ "text": "Azure / 3rd party firewall",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "8a705965-9840-43cc-93b3-06d089406bb4",
- "link": "https://learn.microsoft.com/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements#physical-deployments",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "To allow HCX appliance to connect/sync",
+ "guid": "1d87925c-c02b-7fde-a425-7e95ad846a27",
+ "link": "https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-networking-security/GUID-2CFE1654-9CC9-4EDB-A625-21317299E559.html",
"services": [
- "Storage"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "S2D",
- "text": "Ensure there at least 2 capacity disks with available capacity in the Storage Pool",
- "waf": "Reliability"
+ "subcategory": "Firewalls",
+ "text": "Firewalls allow for East/West traffic inside AVS",
+ "waf": "Security"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "2a4f629a-d623-4610-a8e3-d6fd66057d8e",
- "link": "https://learn.microsoft.com/windows-server/storage/storage-spaces/delimit-volume-allocation",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Decision on which tool to use (SRM requires additional license - enables automation & other features)",
+ "guid": "468b3495-2f6e-b65a-38ef-3ba631bcaa46",
+ "link": "https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-B842696B-89EF-4183-9C73-B77157F56055.html",
"services": [
- "Storage"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "S2D",
- "text": "'Delimited allocation' has been considered to improve volume resiliency in a multi-node failure",
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "HCX and/or SRM",
"waf": "Reliability"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "960eb9be-1f0f-4fc1-9b31-fcf1cf9e34e6",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/plan-volumes#choosing-how-many-volumes-to-create",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Read up on requirements for Service Mesh requirements and how HCX ",
+ "guid": "be2ced52-da08-d366-cf7c-044c19e29509",
+ "link": "https://docs.vmware.com/en/VMware-HCX/4.6/hcx-user-guide/GUID-76BCD059-A31A-4041-9105-ACFB56213E7C.html",
"services": [
- "Storage"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "S2D",
- "text": "CSVs are created in multiples of node count",
- "waf": "Performance"
+ "subcategory": "Networking",
+ "text": "Configuring and Managing the HCX Interconnect",
+ "waf": "Reliability"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "859ba2b9-a3a8-4ca1-bb61-165effbf1c03",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/cache",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "If you are planning on using stretch networks ensure that your on-premises environment requirements",
+ "guid": "7dcac579-fc5c-5c9c-f1f7-9b1149ff2c37",
+ "link": "https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-DBDB4D1B-60B6-4D16-936B-4AC632606909.html",
"services": [
- "Storage"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "S2D",
- "text": "If a cache tier is implemented, the number of capacity drives is a multiple of the number of cache drives",
+ "subcategory": "Networking",
+ "text": "Restrictions and limitations for network extensions",
"waf": "Performance"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "d8a65f05-db06-461d-81dc-7899ad3f8f1e",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/plan-volumes#reserve-capacity",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Do workloads require MoN?",
+ "guid": "cf45c0b9-6c4b-3bfb-86c5-62fe54061c73",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/vmware-hcx-mon-guidance",
"services": [
- "Storage"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "S2D",
- "text": "A minimum of 1 type of each disk type per node has been factored as a reserve disk",
- "waf": "Reliability"
+ "subcategory": "Networking",
+ "text": "Mobility optimized networking",
+ "waf": "Performance"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "description": "VMFleet is a tool that can be used to measure the performance of a storage subsystem, best used to baseline performance prior to workload deployment",
- "guid": "9d138f1d-5363-476e-bbd7-acfa500bdc0c",
- "link": "https://github.com/microsoft/diskspd/wiki/VMFleet",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Operating system level of Vmware environment",
+ "guid": "b7cf11f3-b12e-5189-991a-06df5250d2ca",
+ "link": "https://learn.microsoft.com/azure/site-recovery/vmware-physical-azure-support-matrix",
"services": [
- "Storage"
+ "AVS"
],
- "severity": "Low",
- "subcategory": "S2D",
- "text": "VMFleet has been run prior to workload deployment to baseline storage performance",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "On-premises pre-requisites",
+ "text": "Support matrix (OS versions etc).",
+ "waf": "Operations"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "13c12e2a-c938-4dd1-9223-507d5e17f9c5",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Required that all switches are dynamic",
+ "guid": "45fe9252-aa1b-4e30-45c6-bc02f3b76acf",
+ "link": "https://docs.vmware.com/en/VMware-vSphere/7.0/vsan-network-design-guide/GUID-91E1CD6F-33A6-4AC6-BC22-3E4807296F86.html#:~:text=Migrate%20Management%20Network%201%20Add%20hosts%20to%20the,each%20host.%20...%204%20Finish%20the%20configuration.%20",
"services": [
- "Storage"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Host OS",
- "text": "OS drives use a dedicated storage controller",
- "waf": "Reliability"
+ "subcategory": "On-premises pre-requisites",
+ "text": "Standard switches converted to dynamic switches",
+ "waf": "Operations"
},
{
- "category": "Storage",
- "checklist": "Azure Stack HCI Review",
- "guid": "a631e7dc-8879-45bd-b0a7-e5927b805428",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/use-csv-cache",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "See sections on sizing and capacity in the link.",
+ "guid": "e9f6d736-ee44-e2ac-e7f9-e361f8c857f3",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/plan-private-cloud-deployment",
"services": [
- "Storage"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Host OS",
- "text": "CSV in-memory read caching is enabled and properly configured",
+ "subcategory": "On-premises pre-requisites",
+ "text": "Capacity for HCX appliance",
"waf": "Performance"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "c062cd9a-f1db-4f83-aab3-9cb03f56c140",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/host-network-requirements#switch-embedded-teaming-set",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Check hardware restrictions to ensure compatibility with AVS/OS ",
+ "guid": "1be2cdd6-15a7-9a33-aea7-113859035ce9",
+ "link": "https://kb.vmware.com/s/article/2007240#:~:text=ESXi%2FESX%20hosts%20and%20compatible%20virtual%20machine%20hardware%20versions,%20Not%20Supported%20%204%20more%20rows",
"services": [
- "ACR"
+ "AVS"
],
"severity": "Medium",
- "subcategory": "Host",
- "text": "NICs are symmetrical across nodes",
- "waf": "Reliability"
+ "subcategory": "On-premises pre-requisites",
+ "text": "Hardware compatibility",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "ea8054db-a558-4533-80c8-5d9cf447ba19",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Need to be converted",
+ "guid": "16ab821a-27c6-b6d3-6042-10dc4d6dfcb7",
+ "link": "https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.storage.doc/GUID-01D3CF47-A84A-4988-8103-A0487D6441AA.html",
"services": [
+ "AVS",
"Storage"
],
- "severity": "High",
- "subcategory": "Host",
- "text": "Storage networking is redundant",
- "waf": "Reliability"
- },
- {
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "15d976c5-e267-49a1-8b00-62010bfa5188",
- "link": "https://learn.microsoft.com/azure-stack/hci/deploy/network-atc",
- "services": [],
"severity": "Medium",
- "subcategory": "Host",
- "text": "Host networking configuration is managed by Network ATC and intents are healthy",
- "waf": "Reliability"
- },
- {
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "676c53ad-b29a-4de1-9d03-d7d2674405b8",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/network-hud-overview",
- "services": [],
- "severity": "Low",
- "subcategory": "Host",
- "text": "Network HUD has been configured",
- "waf": "Reliability"
+ "subcategory": "Storage",
+ "text": "VSAN RDM disks are converted - not supported.",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "8f6d58d9-6c1a-4ec1-b2d7-b2c6ba8f3949",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/host-network-requirements",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Need to be converted",
+ "guid": "eb2f9313-afb2-ab35-aa24-6d97a3cb0611",
+ "link": "3rd-Party tools",
"services": [
- "Storage",
- "VNet"
+ "AVS",
+ "VM",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Host",
- "text": "Storage NICs are assigned static IP addresses on separate subnets and VLANs",
- "waf": "Reliability"
- },
- {
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "824e53ec-953e-40c2-a6b8-52970b5b0f74",
- "link": "https://learn.microsoft.com/azure-stack/hci/plan/two-node-switched-converged",
- "services": [],
- "severity": "Medium",
- "subcategory": "Host",
- "text": "For switchless designs, dual link full mesh connectivity has been implemented",
- "waf": "Reliability"
+ "subcategory": "Storage",
+ "text": "VM with SCSI shared bus are not supported",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "dbc85d0e-0ebd-4589-a789-0fa8ceb1d0f0",
- "link": "https://learn.microsoft.com/azure-stack/hci/concepts/physical-network-requirements#using-switchless",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Remove Direct IO before migration",
+ "guid": "3f2a5cff-c8a6-634a-1f1b-53ef9d321381",
+ "link": "Contact VMware",
"services": [
+ "AVS",
+ "VM",
"Storage"
],
"severity": "Medium",
- "subcategory": "Host",
- "text": "If the cluster is made up of more than 3 nodes, a switched storage network has been implemented",
- "waf": "Reliability"
+ "subcategory": "Storage",
+ "text": "VM with Direct IO require removing DirectPath device",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "603c6d71-59d2-419c-a312-8edc6e799c6a",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Cannot migrate clusters ",
+ "guid": "efc8a311-74f8-0252-c6a0-4bac7610e266",
+ "link": "Contact VMware",
"services": [
+ "AVS",
"Storage"
],
- "severity": "High",
- "subcategory": "Host",
- "text": "RDMA is enabled on the Storage networking",
- "waf": "Performance"
- },
- {
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "9e260eae-bca1-4827-a259-76ee63fda8d6",
- "link": "https://github.com/microsoft/SDN/blob/master/Diagnostics/Test-Rdma.ps1",
- "services": [],
"severity": "Medium",
- "subcategory": "Host",
- "text": "Test-RDMA.ps1 has been run to validate the RDMA configuration",
- "waf": "Performance"
+ "subcategory": "Storage",
+ "text": "Shared VMDK files are not supported",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "description": "This ensures that Management traffic is not exposed to the VM traffic",
- "guid": "abc85d0e-0ebd-4589-a777-0fa8ceb1d0f0",
- "link": "",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Convert to a different format",
+ "guid": "ab6c89cd-a26f-b894-fe59-61863975458e",
+ "link": "Contact VMware",
"services": [
- "VM"
+ "AVS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Host",
- "text": "If a VMSwitch is shared for Compute and Management traffic, require that Management traffic is tagged with a VLAN ID",
- "waf": "Security"
+ "subcategory": "Storage",
+ "text": "RDM with 'physical compatibility mode' are not supported.",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "description": "This ensures you have at least 3 NCs active at all times during NC upgrades.",
- "guid": "eb36f5f4-0fa7-4a2c-85f3-1b1c7c7817c0",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure the vSAN storage policy for VM's is NOT the default storage policy as this policy applies thick provisioning 'RAID-1 FTT-1' is default with Thin Provisioning",
+ "guid": "7628d446-6b10-9678-9cec-f407d990de43",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-storage#storage-policies-and-fault-tolerance",
"services": [
- "VM"
+ "AVS",
+ "AzurePolicy",
+ "VM",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "SDN",
- "text": "There are at least 3 Network Controller VMs deployed",
- "waf": "Reliability"
+ "subcategory": "Storage",
+ "text": "Default storage policy",
+ "waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "8bc78c85-6028-4a43-af2d-082a0a344909",
- "link": "https://learn.microsoft.com/windows-server/networking/sdn/manage/update-backup-restore",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "The default storage policy is set to RAID-1 (Mirroring) FTT-1, with Object Space Reservation set to Thin provisioning.",
+ "guid": "37fef358-7ab9-43a9-542c-22673955200e",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/configure-storage-policy",
"services": [
- "Backup"
+ "AVS",
+ "AzurePolicy",
+ "VM",
+ "Storage"
],
- "severity": "High",
- "subcategory": "SDN",
- "text": "Backups of SDN infrastructure are configured and tested",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Ensure that the appropriate VM template storage policy is used",
"waf": "Operations"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Stack HCI Review",
- "guid": "51eaa4b6-b9a7-43e1-a7dc-634d3107bc6d",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage needs",
+ "guid": "ebebd109-9f9d-d85e-1b2f-d302012843b7",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/concepts-storage#storage-policies-and-fault-tolerance",
"services": [
- "Monitor"
+ "AVS",
+ "AzurePolicy",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Cluster",
- "text": "SCOM Managed Instance has been considered for more complex monitoring and alerting scenarios",
+ "subcategory": "Storage",
+ "text": "Failure to tolerate policy",
"waf": "Operations"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Stack HCI Review",
- "guid": "831f5aca-99ef-41e7-8263-9509f5093b43",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/setup-hci-system-alerts",
+ "category": "VMware",
+ "checklist": "Azure VMware Solution Implementation Checklist",
+ "description": "ANF can be used to extend storage for Azure VMware Solution,",
+ "guid": "1be821bd-4f37-216a-3e3d-2a5ac6996863",
+ "link": "https://learn.microsoft.com/azure/azure-vmware/netapp-files-with-azure-vmware-solution",
"services": [
- "Monitor"
+ "AVS",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Cluster",
- "text": "Alerts have been configured for the cluster, either using Azure Monitor, SCOM, or a third-party solution",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Use ANF for external storage",
"waf": "Operations"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Stack HCI Review",
- "guid": "f95d0e7e-9f61-476d-bf65-59f2454d1d39",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/monitor-hci-single?tabs=22h2-and-later",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Apply guidance from the Microsoft cloud security benchmark related to Storage",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"services": [
- "Monitor"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Cluster",
- "text": "Insights has been enabled at the cluster level and all nodes are reporting data",
- "waf": "Operations"
+ "subcategory": " Overview",
+ "text": "Consider the 'Azure security baseline for storage'",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Stack HCI Review",
- "guid": "f4250fcb-ff53-40c9-b304-3560464fd90c",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/monitor-hci-single?tabs=22h2-and-later",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != ('Succeeded') or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled') | extend compliant = (isnotnull(properties.privateEndpointConnections) and properties.privateEndpointConnections[0].properties.provisioningState == 'Succeeded' and properties.publicNetworkAccess == 'Disabled') | distinct id, compliant",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"services": [
- "Monitor"
+ "PrivateLink",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Cluster",
- "text": "Azure Monitoring Agent has been deployed to hosts and an appropriate Data Collection Rule has been configured",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Networking",
+ "text": "Consider using private endpoints for Azure Storage",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Stack HCI Review",
- "guid": "6143af1d-0d1a-4163-b1c9-662f7459bb98",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Newly created storage accounts are created using the ARM deployment model, so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage accounts with classic deployment model in a subscription",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
"services": [
- "Monitor"
+ "Storage",
+ "Subscriptions",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Hardware",
- "text": "Relevant hardware monitoring has been configured",
- "waf": "Operations"
+ "subcategory": "Governance",
+ "text": "Ensure older storage accounts are not using 'classic deployment model'",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Stack HCI Review",
- "guid": "9cbdf225-549a-41cf-9c97-794766a6f2b0",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/health-service-overview",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | project storageAccountId = id | join kind=leftouter (resourceContainers | where type == 'microsoft.security/pricings' | where name == 'StorageAccounts' | project resourceId = id, pricingTier = properties.pricingTier) on $left.storageAccountId == $right.resourceId | where isnull(pricingTier) or pricingTier != 'Standard' | extend compliant = false | distinct storageAccountId, compliant",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
"services": [
- "Monitor"
+ "Storage",
+ "Defender"
],
- "severity": "Medium",
- "subcategory": "Hardware",
- "text": "Relevant hardware alerting has been configured",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Governance",
+ "text": "Enable Microsoft Defender for all of your storage accounts",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "c0da5bbd-0f0d-4a26-98ec-38c9cc42b323",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "The soft-delete mechanism allows to recover accidentally deleted blobs.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"services": [
- "VM"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "VM Management - Resource Bridge",
- "text": "The Azure CLI has been installed on every node to enable RB management from WAC",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Data Availability",
+ "text": "Enable 'soft delete' for blobs",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "a8ecf23c-c048-4fa9-b87b-51ebfb409863",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"services": [
- "VM"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "VM Management - Resource Bridge",
- "text": "DHCP is available in the cluster to support Guest Configuration at VM deployment from Azure",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Confidentiality",
+ "text": "Disable 'soft delete' for blobs",
+ "waf": "Security"
},
{
- "category": "Backup and Disaster Recovery",
- "checklist": "Azure Stack HCI Review",
- "guid": "074541e3-fe08-458a-8062-32d13dcc10c6",
- "link": "https://learn.microsoft.com/azure/backup/back-up-azure-stack-hyperconverged-infrastructure-virtual-machines",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Soft delete for containers enables you to recover a container after it has been deleted, for example recover from an accidental delete operation.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
"services": [
- "ASR",
- "VM",
- "Backup"
+ "Storage"
],
"severity": "High",
- "subcategory": "VM",
- "text": "Backups of HCI VMs have been configured using MABS or a third-party solution",
- "waf": "Operations"
- },
- {
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "48f7ae57-1035-4101-8a38-fbe163d03e8a",
- "services": [],
- "severity": "High",
- "subcategory": "Cluster Configuration",
- "text": "Cluster configuration or a configuration script has been documented and maintained",
- "waf": "Operations"
- },
- {
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "f2a6a19a-ffe6-444d-badb-cb336c8e7b50",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/witness",
- "services": [],
- "severity": "High",
- "subcategory": "Cluster Configuration",
- "text": "A cluster witness has been configured for clusters with less than 5 nodes",
- "waf": "Reliability"
+ "subcategory": "Data Availability",
+ "text": "Enable 'soft delete' for containers",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "a47339fe-62c5-44a0-bb83-3d46ef16292f",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/update-cluster",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
"severity": "Medium",
- "subcategory": "Cluster Configuration",
- "text": "Cluster-Aware Updating has been configured for Windows and hardware updates (if available)",
- "waf": "Operations"
+ "subcategory": "Confidentiality",
+ "text": "Disable 'soft delete' for containers",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "7f1d6fe8-3079-44ea-8ea6-14494d1aa470",
- "link": "https://learn.microsoft.com/azure-stack/hci/deploy/validate",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Prevents accidental deletion of a storage account, by forcing the user to first remove the deletion lock, prior to deletion",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
"severity": "High",
- "subcategory": "Cluster Configuration",
- "text": "Cluster validation has been run against the configured cluster",
- "waf": "Reliability"
+ "subcategory": "Data Availability",
+ "text": "Enable resource locks on storage accounts",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "81693af0-5638-4aa2-a153-1d6189df30a7",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/azure-benefits",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Consider 'legal hold' or 'time-based retention' policies for blobs, so that is is impossible to delete the blob, the container, or the storage account. Please note that 'impossible' actually means 'impossible'; once a storage account contains an immutable blob, the only way to 'get rid' of that storage account is by cancelling the Azure subscription.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
"services": [
- "VM"
+ "Subscriptions",
+ "Storage",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Cluster Configuration",
- "text": "Azure Benefits has been enabled at the cluster and VM levels",
- "waf": "Cost"
- },
- {
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "8c967ee8-8170-4537-a28d-33431cd3632a",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/use-environment-checker",
- "services": [],
- "severity": "Medium",
- "subcategory": "Cluster Configuration",
- "text": "The Environment Checker module has been run to validate the environment",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Data Availability, Compliance",
+ "text": "Consider immutable blobs",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "43ffbfab-766e-4950-a102-78b479136e4d",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/azure-benefits",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (properties.supportsHttpsTrafficOnly == false) | distinct id, compliant",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
"services": [
- "AzurePolicy"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Cluster Configuration",
- "text": "Group Policy inheritance on the HCI cluster and node Active Directory organizational unit has been blocked or applied policies have been evaluated for compatibility issues (usually WinRM and PowerShell execution policy)",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Networking",
+ "text": "Require HTTPS, i.e. disable port 80 on the storage account",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "e6a3f3a7-4a7d-49e2-985a-6e39dd284027",
- "services": [],
- "severity": "Medium",
- "subcategory": "Cluster Configuration",
- "text": "WAC is on the latest release and configured to automatically upgrade extensions",
- "waf": "Reliability"
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "When configuring a custom domain (hostname) on a storage account, check whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your storage account.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
+ "severity": "High",
+ "subcategory": "Networking",
+ "text": "When enforcing HTTPS (disabling HTTP), check that you do not use custom domains (CNAME) for the storage account.",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "d1caa31f-cc26-42b2-b92f-2b667c0e6020",
- "link": "https://learn.microsoft.com/azure/architecture/hybrid/azure-stack-hci-dr",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Requiring HTTPS when a client uses a SAS token to access blob data helps to minimize the risk of credential loss.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"services": [
- "Entra"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Stretch Clustering",
- "text": "There is sub 5ms latency between each site if synchronous replication is being configured AAD",
- "waf": "Performance"
+ "subcategory": "Networking",
+ "text": "Limit shared access signature (SAS) tokens to HTTPS connections only",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "3277558e-3155-4088-b49a-78594cb4ce1a",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": ". Enforcing the latest TLS version will reject request from clients using the older version. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
"services": [
- "Storage",
- "VNet"
+ "Storage"
],
"severity": "High",
- "subcategory": "Stretch Clustering",
- "text": "Management, Replication and Storage networks excluded from stretched VLANs configurations, are routed, and in different subnets",
- "waf": "Reliability"
+ "subcategory": "Networking",
+ "text": "Enforce the latest TLS version for a storage account",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "baed6066-8531-44ba-bd94-38cbabbf4099",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Microsoft Entra ID tokens should be favored over shared access signatures, wherever possible",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "services": [
+ "Entra",
+ "Storage"
+ ],
"severity": "High",
- "subcategory": "Stretch Clustering",
- "text": "There is a plan detailed for site failure and recovery",
- "waf": "Operations"
+ "subcategory": "Identity and Access Management",
+ "text": "Use Microsoft Entra ID tokens for blob access",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Stack HCI Review",
- "guid": "8e62945f-b9ac-4a5c-a4e4-836f527010b4",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "When assigning a role to a user, group, or application, grant that security principal only those permissions that are necessary for them to perform their tasks. Limiting access to resources helps prevent both unintentional and malicious misuse of your data.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
"services": [
- "ACR"
+ "Entra",
+ "Storage",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "Stretch Clustering",
- "text": "Separate vLANs and networks are used for each replication network across both sites",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Least privilege in IaM permissions",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "8e62945f-b9ac-4a5c-a4e4-836f527010b5",
- "link": "https://learn.microsoft.com/azure/architecture/hybrid/azure-stack-hci-dr#cost-optimization",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. A user delegation SAS is analogous to a service SAS in terms of its scope and function, but offers security benefits over the service SAS. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
"services": [
+ "Entra",
"Storage"
],
"severity": "High",
- "subcategory": "Stretch Clustering",
- "text": "Use either a cloud witness or a file share witness in a third site for cluster quorum for clusters with less than 5 nodes",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "When using SAS, prefer 'user delegation SAS' over storage-account-key based SAS.",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "8e62945f-b9ac-4a5c-a4e4-836f527010b6",
- "link": "https://learn.microsoft.com/azure/architecture/hybrid/azure-stack-hci-dr#cost-optimization",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on Entra ID authentication makes it easier to tie storage access to a user. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "services": [
+ "Monitor",
+ "AKV",
+ "Storage",
+ "Entra"
+ ],
"severity": "High",
- "subcategory": "Stretch Clustering",
- "text": "When using data deduplication, only enable it on the primary/source volumes",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Consider disabling storage account keys, so that only Microsoft Entra ID access (and user delegation SAS) is supported.",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Stack HCI Review",
- "guid": "ac527887-f6f4-40a3-b883-e04d704f013b",
- "link": "https://learn.microsoft.com/windows-server/storage/storage-replica/stretch-cluster-replication-using-shared-storage#provision-operating-system-features-roles-storage-and-network",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Use Activity Log data to identify 'when', 'who', 'what' and 'how' the security of your storage account is being viewed or changed (i.e. storage account keys, access policies, etc.).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
"services": [
- "Storage"
+ "AKV",
+ "Monitor",
+ "Storage",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Stretch Clustering",
- "text": "Storage backing log volumes must be faster (ideally) or at least as fast as capacity storage",
- "waf": "Reliability"
+ "subcategory": "Monitoring",
+ "text": "Consider using Azure Monitor to audit control plane operations on the storage account",
+ "waf": "Security"
},
{
- "category": "Backup and Disaster Recovery",
- "checklist": "Azure Stack HCI Review",
- "guid": "8ea49f70-1038-4283-b0c4-230165d3eabc",
- "link": "https://learn.microsoft.com/azure-stack/hci/manage/azure-site-recovery",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "A key expiration policy enables you to set a reminder for the rotation of the account access keys. The reminder is displayed if the specified interval has elapsed and the keys have not yet been rotated.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"services": [
- "ASR",
- "Backup"
+ "Entra",
+ "AKV",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Azure Site Recovery has been considered for DR purposes",
- "waf": "Operations"
+ "subcategory": "Identity and Access Management",
+ "text": "When using storage account keys, consider enabling a 'key expiration policy'",
+ "waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Stack HCI Review",
- "guid": "03e65fdc-2628-4a1a-ba2e-a5174340ba52",
- "link": "https://learn.microsoft.com/windows/security/operating-system-security/data-protection/bitlocker/protecting-cluster-shared-volumes-and-storage-area-networks-with-bitlocker",
- "services": [],
+ "checklist": "Azure Storage Review Checklist",
+ "description": "A SAS expiration policy specifies a recommended interval over which the SAS is valid. SAS expiration policies apply to a service SAS or an account SAS. When a user generates service SAS or an account SAS with a validity interval that is larger than the recommended interval, they'll see a warning.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "services": [
+ "Entra",
+ "Storage",
+ "AzurePolicy"
+ ],
"severity": "Medium",
- "subcategory": "Host",
- "text": "BitLocker has been enabled on CSVs for volume encryption, where appropriate",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider configuring an SAS expiration policy",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Stack HCI Review",
- "guid": "9645d2e6-ba28-453c-b6d5-d9ef29fc34be",
- "link": "https://learn.microsoft.com/windows-server/storage/file-server/smb-security",
- "services": [],
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "services": [
+ "AKV",
+ "Entra",
+ "Storage",
+ "AzurePolicy"
+ ],
"severity": "Medium",
- "subcategory": "Host",
- "text": "SMB encryption has been enabled, where appropriate",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider linking SAS to a stored access policy",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Stack HCI Review",
- "guid": "8f03437a-5068-4486-9a78-0402ce771298",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-antivirus-on-windows-server",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"services": [
- "Defender"
+ "AKV",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Host",
- "text": "Microsoft Defender Antivirus has been enabled on all nodes",
+ "subcategory": "CI/CD",
+ "text": "Consider configuring your application's source code repository to detect checked-in connection strings and storage account keys.",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Stack HCI Review",
- "guid": "dba6b211-fc02-43b3-b7c8-f163c188332e",
- "link": "https://learn.microsoft.com/windows/security/identity-protection/credential-guard/credential-guard-manage",
- "services": [],
- "severity": "Medium",
- "subcategory": "Host",
- "text": "Credential Guard has been configured, where appropriate",
- "waf": "Security"
- },
- {
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
- "services": [],
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Ideally, your application should be using a managed identity to authenticate to Azure Storage. If that is not possible, consider having the storage credential (connection string, storage account key, SAS, service principal credential) in Azure KeyVault or an equivalent service.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "services": [
+ "Entra",
+ "Storage"
+ ],
"severity": "High",
- "subcategory": "High Availablity",
- "text": "Enable 2 replicas to have 99.9% availability for read operations",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availablity",
- "text": "Enable 3 replicas to have 99.9% availability for read/write operations",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Consider storing connection strings in Azure KeyVault (in scenarios where managed identities are not possible)",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Use near-term expiration times on an ad hoc SAS service SAS or account SAS. In this way, even if a SAS is compromised, it's valid only for a short time. This practice is especially important if you cannot reference a stored access policy. Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "services": [
+ "Entra",
+ "Storage",
+ "AzurePolicy"
+ ],
"severity": "High",
- "subcategory": "High Availablity",
- "text": "Leverage Availability Zones by enabling read and/or write replicas",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Strive for short validity periods for ad-hoc SAS",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "When creating a SAS, be as specific and restrictive as possible. Prefer a SAS for a single resource and operation over a SAS which gives much broader access.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"services": [
- "ACR"
+ "Entra",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Georeplication",
- "text": "For regional redudancy, Manually create services in 2 or more regions for Search as it doesn't provide an automated method of replicating search indexes across geographic regions",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Apply a narrow scope to a SAS",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "A SAS can include parameters on which client IP addresses or address ranges are authorized to request a resource using the SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
"services": [
- "ACR"
+ "Entra",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Georeplication",
- "text": "To synchronize data across multiple services either Use indexers for updating content on multiple services or Use REST APIs for pushing content updates on multiple services",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Consider scoping SAS to a specific client IP address, wherever possible",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "A SAS cannot constrain how much data a client uploads; given the pricing model of amount of storage over time, it might make sense to validate whether clients uploaded maliciously large contents.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
"services": [
- "TrafficManager"
+ "Entra",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Georeplication",
- "text": "Use Azure Traffic Manager to coordinate requests",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Identity and Access Management",
+ "text": "Consider checking uploaded data, after clients used a SAS to upload a file. ",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "When accessing blob storage via SFTP using a 'local user account', the 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive than SFTP access. Unfortunately, as of early 2023, local users are the only form of identity management that is currently supported for the SFTP endpoint",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
"services": [
+ "Entra",
"Storage",
- "ASR",
- "Backup"
+ "RBAC"
],
"severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Backup and Restore an Azure Cognitive Search Index. Use this sample code to back up index definition and snapshot to a series of Json files",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "Azure Function Review",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Select the right Function hosting plan based on your business & SLO requirements",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "Azure Function Review",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Leverage Availability Zones where regionally applicable (not available for Consumption tier)",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "SFTP: Limit the amount of 'local users' for SFTP access, and audit whether access is needed over time.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Function Review",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "services": [
+ "Entra",
+ "Storage"
+ ],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "SFTP: The SFTP endpoint does not support POSIX-like ACLs.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Function Review",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature that enables web apps from a different domain to loosen the same-origin policy. When enabling CORS, keep the CorsRules to the least privilege.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
"services": [
- "AppSvc"
+ "Storage",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
+ "subcategory": "Networking",
+ "text": "Avoid overly broad CORS policies",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Function Review",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Data at rest is always encrypted server-side, and in addition might be encrypted client-side as well. Server-side encryption might happen using a platform-managed key (default) or customer-managed key. Client-side encryption might happen by either having the client supply an encryption/decryption key on a per-blob basis to Azure storage, or by completely handling encryption on the client-side. thus not relying on Azure Storage at all for confidentiality guarantees.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
"services": [
- "AppSvc"
+ "Storage"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Ensure 'Always On' is enabled for all Function Apps running on App Service Plan",
- "waf": "Reliability"
+ "subcategory": "Confidentiality and Encryption",
+ "text": "Determine how data at rest should be encrypted. Understand the thread model for data.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Function Review",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"services": [
"Storage"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Pair a Function App to its own storage account. Try not to re-use storage accounts for Function Apps unless they are tightly coupled",
- "waf": "Reliability"
- },
- {
- "category": "Application Deployment",
- "checklist": "Azure Function Review",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
- "services": [],
- "severity": "Medium",
- "subcategory": "CI/CD",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Function App code",
- "waf": "Operations"
+ "subcategory": "Confidentiality and Encryption",
+ "text": "Determine which/if platform encryption should be used.",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
"services": [
- "ServiceBus"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage FTA Handbook",
- "waf": "Reliability"
+ "subcategory": "Confidentiality and Encryption",
+ "text": "Determine which/if client-side encryption should be used.",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "description": "This will be turned on automatically for a new SB namespace created from the portal with the Premium SKUs in a zone-enabled region. Both the Service Bus metadata and the messages data are replicated across datacenters in the availability zones configuration",
- "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
+ "category": "Security",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Anonymous access may present a security risk. We recommend that you disable anonymous access for optimal security. Disallowing anonymous access helps to prevent data breaches caused by undesired anonymous access.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
"services": [
- "ACR",
- "ServiceBus"
+ "Entra",
+ "Storage"
],
"severity": "High",
- "subcategory": "Best Practices",
- "text": "Leverage Availability Zones if regionally applicable",
- "waf": "Reliability"
+ "subcategory": "Identity and Access Management",
+ "text": "Consider whether public blob anonymous access is needed, or whether it can be disabled for certain storage accounts. ",
+ "waf": "Security"
},
{
"category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "description": "If enabled, Implements namespace metadata replication to a secondary region. Does not replicate queue/topic message data. Premium sku only.",
- "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
"services": [
- "ASR",
- "Storage",
- "ServiceBus"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Geo-Disaster Recovery",
- "text": "Plan for Metadata replication during regional failure",
+ "severity": "High",
+ "subcategory": "Platform Version",
+ "text": "Leverage a storagev2 account type for better performance and reliability",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "description": "If an outage cannot be tolerated, do not use the build-in metadata replication option. Leverage a replication pattern to replicate Service Bus messages across two or more sets of cross-region namespaces",
- "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
+ "category": "BC and DR",
+ "checklist": "Azure Storage Review Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (sku.name != 'Standard_LRS' and sku.name != 'Premium_LRS') | distinct id, compliant",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
"services": [
- "ASR",
- "ACR",
- "ServiceBus"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Geo-Disaster Recovery",
- "text": "Plan for Message replication during regional failure",
+ "severity": "High",
+ "subcategory": "Availablity",
+ "text": "Leverage GRS, ZRS or GZRS storage for the highest availability",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "description": "Azure Service Bus uses a message broker to handle messages that are sent to a Service Bus queue or topic. By default, all messages that are sent to a queue or topic are handled by the same message broker process. This architecture can place a limitation on the overall throughput of the message queue. However, you can also partition a queue or topic when it is created",
- "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
+ "category": "BC and DR",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
"services": [
- "Storage",
- "ServiceBus"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "For applications which require high throughput, use Patritioning ",
+ "subcategory": "Failover",
+ "text": "For write operation after failover, use customer-Managed Failover ",
"waf": "Reliability"
},
{
"category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
"services": [
- "ServiceBus"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Evaluate Premier-tier benefits of Azure Service Bus",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
- "services": [
- "ServiceBus"
- ],
- "severity": "High",
- "subcategory": "Best Practices",
- "text": "Ensure that Service Bus Messaging Exceptions are handled properly",
+ "subcategory": "Failover",
+ "text": "Understand Microsoft-Managed Failover details",
"waf": "Reliability"
},
{
"category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
"services": [
- "Storage",
- "ServiceBus",
- "PrivateLink"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Connect to Service Bus with the Advanced Messaging Queue Protocol (AMQP) and use Service Endpoints or Private Endpoints when possible.",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
- "services": [
- "ServiceBus"
- ],
- "severity": "High",
- "subcategory": "Best Practices",
- "text": "Review the Best Practices for performance improvements using Service Bus Messaging",
+ "subcategory": "Data Protection",
+ "text": "Enable Soft Delete",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
- "services": [
- "ServiceBus"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Bot Service",
+ "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
+ "service": "Bot service",
+ "services": [],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Implement geo-replication on the sender and receiver side to protect against outages and disasters",
+ "subcategory": "High Availablity",
+ "text": "Follow reliability support recommendations in Azure Bot Service",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
- "services": [
- "Storage",
- "ASR",
- "ServiceBus"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Bot Service",
+ "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
+ "service": "Bot service",
+ "services": [],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "If you need mission-critical messaging with queues and topics, Service Bus Premium is recommended with Geo-Disaster Recovery.",
+ "subcategory": "High Availablity",
+ "text": "Deploying bots with local data residency and regional compliance",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
- "services": [
- "ServiceBus"
- ],
+ "category": "Operations management",
+ "checklist": "Azure Bot Service",
+ "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
+ "service": "Bot service",
+ "services": [],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Implement high availability for the Service Bus namespace",
+ "subcategory": "High Availablity",
+ "text": "Azure Bot Service runs in active-active mode for both global and regional services. When an outage occurs, you don't need to detect errors or manage the service. Azure Bot Service automatically performs auto failover and auto recovery in a multi-region geographical architecture. For the EU bot regional service, Azure Bot Service provides two full regions inside Europe with active/active replication to ensure redundancy. For the global bot service, all available regions/geographies can be served as the global footprint.",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "category": "Business",
+ "checklist": "Multitenant architecture",
+ "guid": "41177955-fe8f-430b-ae72-20dc5b6880da",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/overview",
"services": [
- "ServiceBus"
+ "Entra"
],
"severity": "High",
- "subcategory": "Best Practices",
- "text": "Ensure related messages are delivered in guaranteed order",
- "waf": "Reliability"
+ "subcategory": "Business",
+ "text": "Understand what kind of solution you're creating, such as business-to-business (B2B), business-to-consumer (B2C), or your enterprise software, and how tenants are different from users.",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
- "services": [
- "ServiceBus"
- ],
- "severity": "Low",
- "subcategory": "Best Practices",
- "text": "Evaluate different Java Messaging Service (JMS) features through the JMS API",
- "waf": "Reliability"
+ "category": "Business",
+ "checklist": "Multitenant architecture",
+ "guid": "2d33d1b7-697c-49f9-b944-afbeac0b2c8f",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Business",
+ "text": "Define your tenants. Understand how many tenants you will support initially, and your growth plans.",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
- "services": [
- "ServiceBus"
- ],
- "severity": "Low",
- "subcategory": "Best Practices",
- "text": "Use .NET Nuget packages to communicate with Service Bus messaging entities",
- "waf": "Reliability"
+ "category": "Business",
+ "checklist": "Multitenant architecture",
+ "guid": "a2111b8b-cc66-4aa2-9da6-c09fa23851b6",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/pricing-models",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Business",
+ "text": "Define your pricing model and ensure it aligns with your tenants' consumption of Azure resources.",
+ "waf": "Cost"
},
{
- "category": "Operations Management",
- "checklist": "Service Bus Review Checklist",
- "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "category": "Business",
+ "checklist": "Multitenant architecture",
+ "guid": "331e84a6-2d65-4359-92ff-a1870b062995",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/pricing-models",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Business",
+ "text": "Understand whether you need to separate your tenants into different tiers. Tiers might have different pricing, features, performance promises, geographic locations, and so forth.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Business",
+ "checklist": "Multitenant architecture",
+ "guid": "90516b37-aab1-46ca-95bb-cc14a6a1608b",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Business",
+ "text": "Based on your customers' requirements, decide on the tenancy models that are appropriate for various parts of your solution.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Business",
+ "checklist": "Multitenant architecture",
+ "guid": "f5d76ae1-7048-4ff5-abba-f1ca799578b9",
+ "link": "https://learn.microsoft.com/azure/marketplace/plan-saas-offer",
"services": [
- "ServiceBus"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Implement resilience for transient fault handling when sending or receiving messages",
+ "subcategory": "Business",
+ "text": "When you're ready, sell your B2B multitenant solution using the Microsoft Commercial Marketplace.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Reliability",
+ "checklist": "Multitenant architecture",
+ "guid": "9e7cedd9-1e05-4aeb-a7b3-01fe695a394c",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/design-checklist",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Review the Azure Well-Architected Reliability checklist, which is applicable to all workloads.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Reliability",
+ "checklist": "Multitenant architecture",
+ "guid": "e9521a55-2a7c-425c-8f3e-c38fd0c4df75",
+ "link": "https://learn.microsoft.com/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Understand the Noisy Neighbor antipattern. Prevent individual tenants from impacting the system's availability for other tenants.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Reliability",
+ "checklist": "Multitenant architecture",
+ "guid": "2b99cb00-9abb-49b6-b11c-f2af9692f09e",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/overview",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Reliability",
+ "text": "Design your multitenant solution for the level of growth that you expect. But don't overengineer for unrealistic growth.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Reliability",
+ "checklist": "Multitenant architecture",
+ "guid": "7a634a0e-1c9d-42b1-aac2-5a5378f103f1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/business-metrics",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Reliability",
+ "text": "Define service-level objectives (SLOs) and optionally service-level agreements (SLAs) for your solution. SLAs and SLOs should be based on the requirements of your tenants, as well as the composite SLA of the Azure resources in your architecture.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Reliability",
+ "checklist": "Multitenant architecture",
+ "guid": "45beeeaf-fc59-4079-8fca-65d5724abaa7",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/compute",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Test the scale of your solution. Ensure that it performs well under all levels of load, and that it scales correctly as the number of tenants increases.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Reliability",
+ "checklist": "Multitenant architecture",
+ "guid": "2ff55551-984b-4606-95eb-bfb9c8b36761",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/compute",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Reliability",
+ "text": "Apply chaos engineering principles to test the reliability of your solution.",
"waf": "Reliability"
},
{
"category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "Azure Service Bus Premium provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
- "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
- "service": "Service Bus",
- "services": [
- "ServiceBus"
- ],
- "severity": "Low",
- "subcategory": "Data Protection",
- "text": "Use customer-managed key option in data at rest encryption when required",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "checklist": "Multitenant architecture",
+ "guid": "8238c038-8eb2-4a02-8bd5-4908c9442c1c",
+ "link": "https://learn.microsoft.com/security/zero-trust",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Apply the Zero Trust and least privilege principles in all layers of your solution.",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "Communication between a client application and an Azure Service Bus namespace is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Service Bus namespace to require that clients send and receive data with a newer version of TLS.",
- "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
- "service": "Service Bus",
+ "checklist": "Multitenant architecture",
+ "guid": "92160e00-6894-4102-97e0-615d4ed93c01",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/map-requests",
"services": [
- "ServiceBus"
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Ensure that you can correctly map user requests to tenants. Consider including the tenant context as part of the identity system, or by using another means, like application-level tenant authorization.",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has Manage permissions for the entire namespace. It's recommended that you treat this rule like an administrative root account and don't use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
- "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
- "service": "Service Bus",
- "services": [
- "TrafficManager",
- "Entra",
- "RBAC",
- "ServiceBus",
- "AzurePolicy"
- ],
+ "checklist": "Multitenant architecture",
+ "guid": "3c1538b4-5676-4b85-b451-432befb37b4f",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "services": [],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Avoid using root account when it is not necessary",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "subcategory": "Security",
+ "text": "Perform ongoing penetration testing and security code reviews.",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "A Service Bus client app running inside an Azure App Service application or in a virtual machine with enabled managed entities for Azure resources support does not need to handle SAS rules and keys, or any other access tokens. The client app only needs the endpoint address of the Service Bus Messaging namespace. ",
- "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
- "service": "Service Bus",
- "services": [
- "Storage",
- "Entra",
- "AKV",
- "ServiceBus",
- "VM",
- "AppSvc"
- ],
- "severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "When possible, your application should be using a managed identity to authenticate to Azure Service Bus. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "checklist": "Multitenant architecture",
+ "guid": "5fca45ce-cf2d-42c0-a62c-aac92ba31498",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/governance-compliance",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Understand your tenants' compliance requirements, including data residency and any compliance or regulatory standards that they require you to meet.",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "When creating permissions, provide fine-grained control over a client's access to Azure Service Bus. Permissions in Azure Service Bus can and should be scoped to the individual resource level e.g. queue, topic or subscription. ",
- "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
- "service": "Service Bus",
+ "checklist": "Multitenant architecture",
+ "guid": "30adb90d-83d4-4a2e-986e-327ffe04e7a5",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/domain-names",
"services": [
- "Storage",
- "Entra",
- "RBAC",
- "Subscriptions",
- "ServiceBus"
+ "DNS"
],
"severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Use least privilege data plane RBAC",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "subcategory": "Security",
+ "text": "Correctly manage domain names and avoid vulnerabilities like dangling DNS and subdomain takeover attacks.",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "Azure Service Bus resource logs include operational logs, virtual network and IP filtering logs. Runtime audit logs capture aggregated diagnostic information for various data plane access operations (such as send or receive messages) in Service Bus.",
- "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
- "service": "Service Bus",
- "services": [
- "VNet",
- "Monitor",
- "ServiceBus"
- ],
+ "checklist": "Multitenant architecture",
+ "guid": "72ded36d-c633-4e0d-bd41-799a29da3481",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/service/overview",
+ "services": [],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Enable logging for security investigation. Use Azure Monitor to trace resource logs and runtime audit logs (currently available only in the premium tier)",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "subcategory": "Security",
+ "text": "Follow service-specific guidance for multitenancy.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "Azure Service Bus by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Service Bus traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
- "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
- "service": "Service Bus",
+ "category": "Cost Optimization",
+ "checklist": "Multitenant architecture",
+ "guid": "db30a9fc-9b1d-40f3-ab90-01f6a3e87fc8",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/cost/design-checklist",
"services": [
- "VNet",
- "ServiceBus",
- "PrivateLink"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Consider using private endpoints to access Azure Service Bus and disable public network access when applicable.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "subcategory": "Cost Optimization",
+ "text": "Review the Azure Well-Architected Operational Excellence checklist, which is applicable to all workloads.",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Service Bus Review Checklist",
- "description": "With IP firewall, you can restrict the public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
- "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
- "service": "Service Bus",
+ "category": "Cost Optimization",
+ "checklist": "Multitenant architecture",
+ "guid": "8533af39-52f6-45b6-a9c3-81b2a54a31e0",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/measure-consumption",
"services": [
- "ServiceBus"
+ "Cost"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Cost Optimization",
+ "text": "Ensure you can adequately measure per-tenant consumption and correlate it with your infrastructure costs.",
+ "waf": "Cost"
},
{
- "category": "Automation",
- "checklist": "SAP Checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
- "service": "SAP",
+ "category": "Cost Optimization",
+ "checklist": "Multitenant architecture",
+ "guid": "c851fd44-7cf1-459c-95a4-f6455d75a981",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/cost-management-allocation",
"services": [
- "SAP"
+ "Cost",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "ACSS",
- "text": "Azure Center for SAP solutions (ACSS) is an Azure offering that makes SAP a top-level workload on Azure. ACSS is an end-to-end solution that enables you to create and run SAP systems as a unified workload on Azure and provides a more seamless foundation for innovation. You can take advantage of the management capabilities for both new and existing Azure-based SAP systems.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "subcategory": "Cost Optimization",
+ "text": "Avoid antipatterns. Antipatterns include failing to track costs, tracking costs with unnecessary precision, real-time measurement, and using monitoring tools for billing.",
+ "waf": "Cost"
+ },
+ {
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "0d475a5a-2c0f-47ab-b1e1-701da68d3407",
+ "link": "https://learn.microsoft.com/azure/architecture/checklist/data-ops",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Operational Excellence",
+ "text": "Review the Azure Well-Architected Operational Excellence checklist, which is applicable to all workloads.",
"waf": "Operations"
},
{
- "category": "Automation",
- "checklist": "SAP Checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
- "service": "SAP",
- "services": [
- "SAP"
- ],
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "9f7fa7a9-47fc-4f04-81f6-9f9e87571ed3",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenant-lifecycle",
+ "services": [],
"severity": "Medium",
- "subcategory": "SDAF",
- "text": "Azure supports automating SAP deployments in Linux and Windows. SAP Deployment Automation Framework is an open-source orchestration tool that can deploy, install, and maintain SAP environments.",
- "training": "https://github.com/Azure/sap-automation",
+ "subcategory": "Operational Excellence",
+ "text": "Use automation to manage the tenant lifecycle, such as onboarding, deployment, provisioning, and configuration.",
"waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
- "service": "SAP",
- "services": [
- "ASR",
- "SAP",
- "Backup"
- ],
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "e0bfceed-4f4e-492d-b9f5-898815faa363",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/updates",
+ "services": [],
"severity": "Medium",
- "subcategory": "Backup and restore",
- "text": "Perform a point-in-time recovery for your production databases at any point and in a time frame that meets your RTO; point-in-time recovery typically includes operator errors deleting data either on the DBMS layer or through SAP, incidentally",
- "waf": "Reliability"
+ "subcategory": "Operational Excellence",
+ "text": "Find the right balance for deploying service updates. Consider both your tenants' requirements and your own operational requirements.",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
- "service": "SAP",
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "a3f80518-d428-4c02-b2cc-dfaef47db7e2",
"services": [
- "ASR",
- "SAP",
- "Backup"
+ "Monitor"
],
- "severity": "Medium",
- "subcategory": "Disaster recovery",
- "text": "Test the backup and recovery times to verify that they meet your RTO requirements for restoring all systems simultaneously after a disaster.",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Operational Excellence",
+ "text": "Monitor the health of the overall system, as well as each tenant.",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "SAP",
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "dfb42da5-f871-4953-9e5c-da6fda3f1411",
"services": [
- "Storage",
- "Backup",
- "SQL",
- "ASR",
- "SAP"
+ "Monitor"
],
+ "severity": "Medium",
+ "subcategory": "Operational Excellence",
+ "text": "Configure and test alerts to notify you when specific tenants are experiencing issues or are exceeding their consumption limits.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "c0c72a1b-e34d-4b3d-b808-2e49f51ce47e",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/resource-organization",
+ "services": [],
"severity": "High",
- "subcategory": "Disaster recovery",
- "text": "You can replicate standard storage between paired regions, but you can't use standard storage to store your databases or virtual hard disks. You can replicate backups only between paired regions that you use. For all your other data, run your replication by using native DBMS features like SQL Server Always On or SAP HANA System Replication. Use a combination of Site Recovery, rsync or robocopy, and other third-party software for the SAP application layer.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "Reliability"
+ "subcategory": "Operational Excellence",
+ "text": "Organize your Azure resources for isolation and scale.",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
- "services": [
- "ASR",
- "SAP"
- ],
+ "category": "Operational Excellence",
+ "checklist": "Multitenant architecture",
+ "guid": "c5c5e22d-4b51-4cac-a980-f7aac1a4b427",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/deployment-configuration",
+ "services": [],
"severity": "Medium",
- "subcategory": "Disaster recovery",
- "text": "When using Azure Availability Zones to achieve high availability, you must consider latency between SAP application servers and database servers. For zones with high latencies, operational procedures need to be in place to ensure that SAP application servers and database servers are running in the same zone at all times.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Operational Excellence",
+ "text": "Avoid deployment and configuration antipatterns. Antipatterns include running separate versions of the solution for each tenant, hardcoding tenant-specific configurations or logic, and manual deployments.",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "SAP",
- "services": [
- "VPN",
- "ExpressRoute",
- "SAP",
- "ASR"
- ],
+ "category": "Performance Efficiency",
+ "checklist": "Multitenant architecture",
+ "guid": "f0b1fbd8-689c-4ab3-be1d-ad7607d2fbfd",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/performance-efficiency",
+ "services": [],
"severity": "High",
- "subcategory": "Disaster recovery",
- "text": "Set up ExpressRoute connections from on-premises to the primary and secondary Azure disaster recovery regions. Also, as an alternative to using ExpressRoute, consider setting up VPN connections from on-premises to the primary and secondary Azure disaster recovery regions.",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "waf": "Reliability"
+ "subcategory": "Performance Efficiency",
+ "text": "Review the Azure Well-Architected Performance Efficiency checklist, which is applicable to all workloads.",
+ "waf": "Performance"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "SAP",
+ "category": "Performance Efficiency",
+ "checklist": "Multitenant architecture",
+ "guid": "18911c4c-934c-49a8-839a-60c092afce30",
+ "link": "https://learn.microsoft.com/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Performance Efficiency",
+ "text": "If you use shared infrastructure, plan for how you'll mitigate Noisy Neighbor concerns. Ensure that one tenant can't reduce the performance of the system for other tenants.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Performance Efficiency",
+ "checklist": "Multitenant architecture",
+ "guid": "6acf7eb5-24a3-47c7-ae87-1196cd96048e",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/compute",
"services": [
- "ASR",
- "ACR",
- "SAP",
- "AKV"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Disaster recovery",
- "text": "Replicate key vault contents like certificates, secrets, or keys across regions so you can decrypt data in the DR region.",
+ "severity": "Medium",
+ "subcategory": "Performance Efficiency",
+ "text": "Determine how you'll scale your compute, storage, networking, and other Azure resources to match the demands of your tenants.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Performance Efficiency",
+ "checklist": "Multitenant architecture",
+ "guid": "ea55400d-f97d-45aa-b71b-34224bf91ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/resource-organization",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Performance Efficiency",
+ "text": "Consider each Azure resource's scale limits. Organize your resources appropriately, in order to avoid resource organization antipatterns. For example, don't over-architect your solution to work within unrealistic scale requirements.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Application Deployment",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "DevOps",
+ "text": "Azure Spring Apps permits two deployments for every app, only one of which receives production traffic. You can achieve zero downtime with blue green deployment strategies. Blue green deployment is only available in Standard and Enterprise tiers. You could automate deployment using CI/CD with ADO/GitHub actions",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
"services": [
- "ASR",
- "VNet",
- "SAP"
+ "TrafficManager",
+ "FrontDoor",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Disaster recovery",
- "text": "Peer the primary and disaster recovery virtual networks. For example, for HANA System Replication, an SAP HANA DB virtual network needs to be peered to the disaster recovery site's SAP HANA DB virtual network.",
+ "subcategory": "Disaster Recovery",
+ "text": "Azure Spring Apps instances could be created in multiple regions for your applications and traffic could be routed by Traffic Manager/Front Door.",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
"services": [
- "Storage",
- "SAP",
- "ASR"
+ "ACR"
],
- "severity": "Low",
- "subcategory": "Disaster recovery",
- "text": "If you use Azure NetApp Files storage for your SAP deployments, at a minimum, create two Azure NetApp Files accounts in the Premium tier, in two regions.",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "In supported region, Azure Spring Apps can be deployed as zone redundant, which means that instances are automatically distributed across availability zones. This feature is only available in Standard and Enterprise tiers.",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
- "services": [
- "ASR",
- "SAP"
- ],
- "severity": "High",
- "subcategory": "Disaster recovery",
- "text": "Native database replication technology should be used to synchronize the database in a HA pair.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "category": "BC and DR",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Use more than 1 app instance for your apps",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
- "service": "SAP",
+ "category": "Operations",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
"services": [
- "ASR",
- "VNet",
- "SAP"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Disaster recovery",
- "text": "The CIDR for the primary virtual network (VNet) shouldn't conflict or overlap with the CIDR of the DR site's VNet",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Monitor Azure Spring Apps with logs, metrics and tracing. Integrate ASA with application insights and track failures and create workbooks.",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
- "service": "SAP",
- "services": [
- "ASR",
- "Entra",
- "SAP",
- "VM"
- ],
+ "category": "Operations",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Scalability",
+ "text": "Set up autoscaling in Spring Cloud Gateway",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Scalability",
+ "text": "Enable autoscale for the apps with Standard consumption & dedicated plan.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Support",
+ "text": "Use Enterprise plan for commercial support of spring boot for mission critical apps. With other tiers you get OSS support.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Device Update Review",
+ "guid": "0e03f5ee-4648-423c-bb86-7239480f9171",
+ "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
+ "service": "Device Update for IoT Hub",
+ "services": [],
"severity": "High",
- "subcategory": "Disaster recovery",
- "text": "Use Site Recovery to replicate an application server to a DR site. Site Recovery can also help with replicating central-services cluster VMs to the DR site. When you invoke DR, you'll need to reconfigure the Linux Pacemaker cluster on the DR site (for example, replace the VIP or SBD, run corosync.conf, and more).",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "subcategory": "High Availability",
+ "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled).",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "services": [
- "ASR",
- "SAP"
- ],
+ "category": "BC and DR",
+ "checklist": "Device Update Review",
+ "guid": "c0c273bd-00ad-419a-9f2f-fc72fb181e55",
+ "link": "https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability",
+ "service": "Device Update for IoT Hub",
+ "services": [],
"severity": "High",
- "subcategory": "High availability",
- "text": "Consider the availability of SAP software against single points of failure. This includes single points of failure within applications such as DBMSs utilized in SAP NetWeaver and SAP S/4HANA architectures, SAP ABAP and ASCS + SCS. Also, other tools such as SAP Web Dispatcher.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "subcategory": "High Availability",
+ "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the DPS instances from an affected region to the corresponding geo-paired region.",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
- "service": "SAP",
- "services": [
- "ASR",
- "SAP"
- ],
+ "category": "BC and DR",
+ "checklist": "Device Update Review",
+ "guid": "3af8abe6-07eb-4287-b393-6c4abe3702eb",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Device Update for IoT Hub",
+ "services": [],
"severity": "High",
- "subcategory": "High availability",
- "text": "For SAP and SAP databases, consider implementing automatic failover clusters. In Windows, Windows Server Failover Clustering supports failover. In Linux, Linux Pacemaker or third-party tools like SIOS Protection Suite and Veritas InfoScale support failover.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "subcategory": "High Availability",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
+ "category": "BC and DR",
+ "checklist": "Device Update Review",
+ "guid": "bd91245c-fe32-4e98-a085-794a40f4bfe1",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Device Update for IoT Hub",
"services": [
- "Storage",
- "ASR",
- "SAP",
- "VM"
+ "AppSvc"
],
"severity": "High",
- "subcategory": "High availability",
- "text": "Azure doesn't support architectures in which the primary and secondary VMs share storage for DBMS data. For the DBMS layer, the common architecture pattern is to replicate databases at the same time and with different storage stacks than the ones that the primary and secondary VMs use.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "subcategory": "High Availability",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
"services": [
- "Storage",
- "SAP",
"ASR"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "The DBMS data and transaction/redo log files are stored in Azure supported block storage or Azure NetApp Files. Azure Files or Azure Premium Files isn't supported as storage for DBMS data and/or redo log files with SAP workload.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "severity": "Medium",
+ "subcategory": "Hub and spoke",
+ "text": "Deploy your Azure landing zone connectivity resources in multiple regions, so that you can quickly support multi-region application landing zones and disaster recovery scenarios.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Reliability"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "service": "Entra",
"services": [
- "ASR",
- "SAP"
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "You can use Azure shared disks in Windows for ASCS + SCS components and specific high-availability scenarios. Set up your failover clusters separately for SAP application layer components and the DBMS layer. Azure doesn't currently support high-availability architectures that combine SAP application layer components and the DBMS layer into one failover cluster.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Microsoft Entra ID Tenants",
+ "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Entra",
"services": [
- "ASR",
- "SAP",
- "LoadBalancer"
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "Most failover clusters for SAP application layer components (ASCS) and the DBMS layer require a virtual IP address for a failover cluster. Azure Load Balancer should handle the virtual IP address for all other cases. One design principle is to use one load balancer per cluster configuration. We recommend that you use the standard version of the load balancer (Standard Load Balancer SKU).",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Microsoft Entra ID Tenants",
+ "text": "Use Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "Entra",
"services": [
- "ASR",
- "SAP",
- "LoadBalancer"
+ "Entra"
],
"severity": "High",
- "subcategory": "High availability",
- "text": "Make sure the Floating IP is enabled on the Load balancer",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Microsoft Entra ID Tenants",
+ "text": "Use Azure Lighthouse for Multi-Tenant Management with the same IDs.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
+ "waf": "Operations"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Entra",
"services": [
- "ASR",
- "SAP"
+ "Entra"
],
"severity": "High",
- "subcategory": "High availability",
- "text": "Before you deploy your high-availability infrastructure, and depending on the region you choose, determine whether to deploy with an Azure availability set or an availability zone.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Cloud Solution Provider",
+ "text": "If you give a partner access to administer your tenant, use Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations",
"services": [
- "ASR",
- "Entra",
- "SAP",
- "VM"
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "If you want to meet the infrastructure SLAs for your applications for SAP components (central services, application servers, and databases), you must choose the same high availability options (VMs, availability sets, availability zones) for all components.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Cloud Solution Provider",
+ "text": "If you have a CSP partner, define and document your support request and escalation process.",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "32952499-58c8-4e6f-ada5-972e67893d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "Entra",
- "RBAC",
- "ASR",
- "VM",
- "SAP"
+ "Cost",
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "Do not mix servers of different roles in the same availability set. Keep central services VMs, database VMs, application VMs in their own availability sets",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Cloud Solution Provider",
+ "text": "Setup Cost Reporting and Views with Azure Cost Management.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "685cb4f2-ac9c-4b19-9167-993ed0b32415",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
"services": [
- "ASR",
- "SAP"
+ "LoadBalancer",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "High availability",
- "text": "You can't deploy Azure availability sets within an Azure availability zone unless you use proximity placement groups.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "Reliability"
+ "subcategory": "Enterprise Agreement",
+ "text": "Configure Notification Contacts to a group mailbox.",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "12cd499f-96e2-4e41-a243-231fb3245a1c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"services": [
- "ASR",
- "SAP",
- "VM"
+ "TrafficManager",
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "When you create availability sets, use the maximum number of fault domains and update domains available. For example, if you deploy more than two VMs in one availability set, use the maximum number of fault domains (three) and enough update domains to limit the effect of potential physical hardware failures, network outages, or power interruptions, in addition to Azure planned maintenance. The default number of fault domains is two, and you can't change it online later.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Enterprise Agreement",
+ "text": "Use departments and accounts to map your organization's structure to your enrollment hierarchy which can help with separating billing.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-ea-roles",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-recommendations",
"services": [
- "ASR",
- "Entra",
- "SAP"
+ "Cost",
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "When you use Azure proximity placement groups in an availability set deployment, all three SAP components (central services, application server, and database) should be in the same proximity placement group.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Enterprise Agreement",
+ "text": "Enable both DA View Charges and AO View Charges on your EA Enrollments to allow users with the correct perms review Cost and Billing Data.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/assign-access-acm-data#enable-access-to-costs-in-the-azure-portal",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5cf9f485-2784-49b3-9824-75d9b8bdb57b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"services": [
- "ASR",
- "ACR",
- "SAP"
+ "Cost",
+ "Entra",
+ "Subscriptions"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "Use one proximity placement group per SAP SID. Groups don't span across Availability Zones or Azure regions",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Enterprise Agreement",
+ "text": "Use of Enterprise Dev/Test Subscriptions to reduce costs for non-production workloads.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/how-to-manage-monitor-devtest",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "ASR",
- "Entra",
- "SAP"
+ "Entra"
],
- "severity": "High",
- "subcategory": "High availability",
- "text": "Use one of the following services to run SAP central services clusters, depending on the operating system.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Microsoft Customer Agreement",
+ "text": "Configure Agreement billing account notification contact email.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-setup-account",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "90e87802-602f-4dfb-acea-67c60689f1d7",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
"services": [
- "ASR",
+ "Cost",
"Entra",
- "SAP",
- "VM"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "High availability",
- "text": "Azure doesn't currently support combining ASCS and DB HA in the same Linux Pacemaker cluster; separate them into individual clusters. However, you can combine up to five multiple central-services clusters into a pair of VMs.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Microsoft Customer Agreement",
+ "text": "Use Billing Profiles and Invoice sections to structure your agreements billing for effective cost management.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/mca-overview#billing-profiles",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e81a73f0-84c4-4641-b406-14db3b4d1f50",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "Storage",
- "ASR",
- "SAP",
- "VM"
+ "Cost",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "High availability",
- "text": "Deploy both VMs in the high-availability pair in an availability set or in availability zones. These VMs should be the same size and have the same storage configuration.",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Microsoft Customer Agreement",
+ "text": "Make use of Microsoft Azure plan for dev/test offer to reduce costs for non-production workloads.",
+ "training": "https://learn.microsoft.com/azure/devtest/offer/overview-what-is-devtest-offer-visual-studio",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
- "service": "SAP",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ae757485-92a4-482a-8bc9-eefe6f5b5ec3",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "ASR",
- "SAP"
+ "Entra",
+ "RBAC"
],
"severity": "Medium",
- "subcategory": "High availability",
- "text": "Azure supports installing and configuring SAP HANA and ASCS/SCS and ERS instances on the same high availability cluster running on Red Hat Enterprise Linux (RHEL).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Microsoft Customer Agreement",
+ "text": "Define and document a process to periodically audit the agreement billing RBAC role assignments to review who has access to your MCA billing account.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/manage/understand-mca-roles",
+ "waf": "Cost"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "service": "Entra",
"services": [
- "Storage",
- "SAP",
- "ASR"
+ "ACR",
+ "Entra",
+ "RBAC",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "Storage",
- "text": "Run all production systems on Premium managed SSDs and use Azure NetApp Files or Ultra Disk Storage. At least the OS disk should be on the Premium tier so you can achieve better performance and the best SLA.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "Reliability"
- },
- {
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
- "service": "SAP",
- "services": [
- "Storage",
- "SAP",
- "ASR"
- ],
- "severity": "High",
- "subcategory": "Storage",
- "text": "You should run SAP HANA on Azure only on the types of storage that are certified by SAP. Note that certain volumes must be run on certain disk configurations, where applicable. These configurations include enabling Write Accelerator and using Premium storage. You also need to ensure that the file system that runs on storage is compatible with the DBMS that runs on the machine.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Identity",
+ "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4348bf81-7573-4512-8f46-9061cc198fea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
"services": [
- "Storage",
- "SAP",
- "ASR"
+ "Entra"
],
"severity": "High",
- "subcategory": "Storage",
- "text": "Consider configuring high availability depending on the type of storage you use for your SAP workloads. Some storage services available in Azure are not supported by Azure Site Recovery, so your high availability configuration may differ.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
- "waf": "Reliability"
+ "subcategory": "Microsoft Entra ID and Hybrid Identity",
+ "text": "Use managed identities instead of service principals for authentication to Azure services. You can check for existing service principals via Entra ID > Sign in Logs > Service principal logins.",
+ "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
+ "waf": "Security"
},
{
- "category": "Business Continuity and Disaster Recovery",
- "checklist": "SAP Checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
+ "service": "Entra",
"services": [
- "Storage",
- "SAP",
- "ASR"
+ "Entra"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "Different native Azure storage services (like Azure Files, Azure NetApp Files, Azure Shared Disk) may not be available in all regions. So to have similar SAP setup on the DR region after failover, ensure the respective storage service is offered in DR site.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Security"
},
{
- "category": "Cost Optimization",
- "checklist": "SAP Checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "Entra",
"services": [
- "SAP",
- "Cost"
+ "Entra"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Automate SAP System Start-Stop to manage costs.",
- "waf": "Cost"
+ "subcategory": "Identity",
+ "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Security"
},
{
- "category": "Cost Optimization",
- "checklist": "SAP Checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "service": "Entra",
"services": [
- "Storage",
- "SAP",
- "VM",
- "Cost"
+ "Entra",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": " ",
- "text": "In the case of using Azure Premium Storage with SAP HANA, Azure Standard SSD storage can be used to select a cost-conscious storage solution. However, please note that choosing Standard SSD or Standard HDD Azure storage will affect the SLA of the individual VMs. Also, for systems with lower I/O throughput and low latency, such as non-production environments, lower series VMs can be used.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Enforce Microsoft Entra ID Conditional Access policies for any user with rights to Azure environments.",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Security"
},
{
- "category": "Cost Optimization",
- "checklist": "SAP Checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "service": "Entra",
"services": [
- "Storage",
- "SAP",
- "VM",
- "Cost"
+ "Entra"
],
- "severity": "Low",
- "subcategory": " ",
- "text": "As a lower-cost alternative configuration (multipurpose), you can choose a low-performance SKU for your non-production HANA database server VMs. However, it is important to note that some VM types, such as E-series, are not HANA certified (SAP HANA Hardware Directory) or cannot achieve storage latency of less than 1ms.",
- "waf": "Cost"
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Enforce multi-factor authentication for any user with rights to the Azure environments.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
+ "waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
"services": [
"Entra",
- "RBAC",
- "SAP",
- "Subscriptions"
+ "RBAC"
],
"severity": "High",
"subcategory": "Identity",
- "text": "Enforce a RBAC model for management groups, subscriptions, resource groups and resources",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "text": "Enforce centralized and delegated responsibilities to manage resources deployed inside the landing zone, based on role and security requirements.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "Entra",
"services": [
- "Entra",
- "SAP"
+ "Entra"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "Enforce Principal propagation for forwarding the identity from SAP cloud application to SAP on-premises (Including IaaS) through cloud connector",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations",
"services": [
+ "ACR",
"Entra",
- "SAP"
+ "VM"
],
- "severity": "Medium",
+ "severity": "High",
"subcategory": "Identity",
- "text": "Implement SSO to SAP SaaS applications like SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics and SAP C4C with Azure AD using SAML.",
- "waf": "Security"
+ "text": "When deploying Active Directory Domain Controllers, use a location with Availability Zones and deploy at least two VMs across these zones. If not available, deploy in an Availability Set.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e8aa1e41-870d-4968-94c6-77be14f510ac",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions#identity",
"services": [
- "Entra",
- "SAP"
+ "Entra"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "Security"
+ "text": "Deploy your Azure landing zone identity resources in multiple regions. If using domain controllers, associate each region with an Active Directory site so that resources can resolve to their local domain controllers.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f5664b5e-984a-4859-a773-e7d261623a76",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
"services": [
+ "ACR",
"Entra",
- "SAP"
+ "RBAC",
+ "Subscriptions"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "text": "Use Azure custom RBAC roles for the following key roles to provide fine-grain access across your ALZ: Azure platform owner, network management, security operations, subscription owner, application owner. Align these roles to teams and responsibilities within your business.",
+ "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"services": [
- "Entra",
- "SAP"
+ "Entra"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "You can implement SSO to SAP GUI by using SAP NetWeaver SSO or a partner solution.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "text": "If planning to switch from Active Directory Domain Services to Entra domain services, evaluate the compatibility of all workloads.",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"services": [
- "Entra",
- "SAP",
- "AKV"
+ "Entra"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
- "waf": "Security"
+ "text": "When using Microsoft Entra Domain Services use replica sets. Replica sets will improve the resiliency of your managed domain and allow you to deploy to additional regions. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "service": "Entra",
"services": [
- "Entra",
- "SAP",
- "AKV"
+ "Monitor",
+ "Entra"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
+ "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
- "service": "SAP",
+ "ammp": true,
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "service": "Entra",
"services": [
- "Entra",
- "SAP"
+ "Entra"
],
- "severity": "Medium",
+ "severity": "High",
"subcategory": "Identity",
- "text": "Implement SSO by using OAuth for SAP NetWeaver to allow third-party or custom applications to access SAP NetWeaver OData services.",
+ "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout. MFA will be turned on by default for all users in Oct 2024. We recommend updating these accounts to use passkey (FIDO2) or configure certificate-based authentication for MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
+ "link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"services": [
"Entra",
- "SAP"
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Implement SSO to SAP HANA",
- "waf": "Security"
+ "subcategory": "Microsoft Entra ID",
+ "text": "When deploying Microsoft Entra Connect, use a staging sever for high availability/disaster recovery.",
+ "training": "https://learn.microsoft.com/entra/identity/hybrid/connect/plan-connect-topologies",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "Entra",
"services": [
"Entra",
- "SAP"
+ "RBAC"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "Consider Azure AD an identity provider for SAP systems hosted on RISE. For more information, see Integrating the Service with Azure AD.",
+ "text": "Do not use on-premises synced accounts for Microsoft Entra ID role assignments, unless you have a scenario that specifically requires it.",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
- "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Entra",
"services": [
- "Entra",
- "SAP"
+ "Entra"
],
"severity": "Medium",
"subcategory": "Identity",
- "text": "For applications that access SAP, you might want to use principal propagation to establish SSO.",
+ "text": "When using Microsoft Entra ID Application Proxy to give remote users access to applications, manage it as a Platform resource as you can only have one instance per tenant.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
"services": [
"Entra",
- "SAP"
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "If you're using SAP BTP services or SaaS solutions that require SAP Identity Authentication Service (IAS), consider implementing SSO between SAP Cloud Identity Authentication Services and Azure AD to access those SAP services. This integration lets SAP IAS act as a proxy identity provider and forwards authentication requests to Azure AD as the central user store and identity provider.",
+ "severity": "High",
+ "subcategory": "Landing zones",
+ "text": "Configure Identity network segmentation through the use of a virtual Network and peer back to the hub. Providing authentication inside application landing zone (legacy).",
+ "training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d4d1ad54-1abc-4919-b267-3f342d3b49e4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"services": [
+ "ACR",
+ "Storage",
+ "RBAC",
"Entra",
- "SAP"
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Implement SSO to SAP BTP",
+ "subcategory": "Landing zones",
+ "text": "Use Azure RBAC to manage data plane access to resources, if possible. E.g. Data Operations across Key Vault, Storage Account and Database Services.",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"waf": "Security"
},
{
- "category": "Identity and Access",
- "checklist": "SAP Checklist",
- "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
- "service": "SAP",
+ "category": "Identity and Access Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d505ebcb-79b1-4274-9c0d-a27c8bea489c",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
"services": [
- "Entra",
- "SAP"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "If you're using SAP SuccessFactors, consider using the Azure AD automated user provisioning. With this integration, as you add new employees to SAP SuccessFactors, you can automatically create their user accounts in Azure AD. Optionally, you can create user accounts in Microsoft 365 or other SaaS applications that are supported by Azure AD. Use write-back of the email address to SAP SuccessFactors.",
+ "subcategory": "Landing zones",
+ "text": "Use Microsoft Entra ID PIM access reviews to periodically validate resource entitlements.",
+ "training": "https://learn.microsoft.com/entra/id-governance/privileged-identity-management/pim-perform-roles-and-resource-roles-review",
"waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Consider using the Azure naming tool available at https://aka.ms/azurenamingtool",
+ "guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Naming and tagging",
+ "text": "Use a well defined naming scheme for resources, such as Microsoft Best Practice Naming Standards.",
+ "waf": "Security"
+ },
+ {
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
+ "guid": "2df27ee4-12e7-4f98-9f63-04722dd69c5b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
- "service": "SAP",
"services": [
- "Subscriptions",
- "SAP",
- "AzurePolicy"
+ "Subscriptions"
],
"severity": "Medium",
"subcategory": "Subscriptions",
- "text": "enforce existing Management Group policies to SAP Subscriptions",
- "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "waf": "Operations"
+ "text": "Enforce reasonably flat management group hierarchy with no more than four levels.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "667313b4-f566-44b5-b984-a859c773e7d2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"services": [
- "Subscriptions",
- "SAP"
+ "Subscriptions"
],
- "severity": "High",
+ "severity": "Medium",
"subcategory": "Subscriptions",
- "text": "Integrate tightly coupled applications into the same SAP subscription to avoid additional routing and management complexity",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "waf": "Operations"
+ "text": "Enforce a sandbox management group to allow users to immediately experiment with Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"services": [
"Subscriptions",
- "SAP"
+ "RBAC",
+ "AzurePolicy"
],
- "severity": "High",
+ "severity": "Medium",
"subcategory": "Subscriptions",
- "text": "Leverage Subscription as scale unit and scaling our resources, consider deploying subscription per environment eg. Sandbox, non-prod, prod ",
- "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "waf": "Operations"
+ "text": "Enforce a platform management group under the root management group to support common platform policy and Azure role assignment.",
+ "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations",
"services": [
- "Subscriptions",
- "SAP",
- "VM"
+ "ExpressRoute",
+ "DNS",
+ "VWAN",
+ "Subscriptions"
],
- "severity": "High",
+ "severity": "Medium",
"subcategory": "Subscriptions",
- "text": "Ensure quota increase as a part of subscription provisioning (e.g. total available VM cores within a subscription)",
- "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "waf": "Operations"
+ "text": "Enforce a dedicated connectivity subscription in the Connectivity management group to host an Azure Virtual WAN hub, private non-AD Domain Name System (DNS), ExpressRoute circuit, and other networking resources.",
+ "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
- "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant = (array_length(mgmtChain) > 1)",
+ "guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
+ "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group",
"services": [
- "Subscriptions",
- "SAP"
+ "Subscriptions"
],
- "severity": "Low",
+ "severity": "Medium",
"subcategory": "Subscriptions",
- "text": "The Quota API is a REST API that you can use to view and manage quotas for Azure services. Consider using it if necessary.",
- "waf": "Operations"
+ "text": "Enforce no subscriptions are placed under the root management group.",
+ "training": "https://learn.microsoft.com/azure/governance/management-groups/overview",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
- "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
+ "link": "https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"services": [
- "Subscriptions",
- "SAP",
- "VM"
+ "RBAC",
+ "Subscriptions"
],
- "severity": "High",
+ "severity": "Medium",
"subcategory": "Subscriptions",
- "text": "If deploying to an availability zone, ensure that the VM's zone deployment is available once the quota has been approved. Submit a support request with the subscription, VM series, number of CPUs and availability zone required.",
- "waf": "Operations"
+ "text": "Enforce that only privileged users can operate management groups in the tenant by enabling Azure RBAC authorization in the management group hierarchy settings.",
+ "training": "https://learn.microsoft.com/training/modules/configure-role-based-access-control/",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "92481607-d5d1-4e4e-9146-58d3558fd772",
+ "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"services": [
- "Subscriptions",
- "SAP"
+ "Subscriptions"
],
- "severity": "High",
+ "severity": "Medium",
"subcategory": "Subscriptions",
- "text": "Ensure required services and features are available within the chosen deployment regions eg. ANF , Zone etc.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
- "waf": "Operations"
+ "text": "Enforce management groups under the root-level management group to represent the types of workloads, based on their security, compliance, connectivity, and feature needs.",
+ "waf": "Security"
},
{
- "category": "Management Group and Subscriptions",
- "checklist": "SAP Checklist",
- "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "49b82111-2df2-47ee-912e-7f983f630472",
+ "link": "https://learn.microsoft.com/entra/id-governance/access-reviews-overview",
"services": [
- "TrafficManager",
+ "Cost",
"Subscriptions",
- "SAP",
- "Cost"
+ "RBAC",
+ "AzurePolicy"
+ ],
+ "severity": "High",
+ "subcategory": "Subscriptions",
+ "text": "Enforce a process to make resource owners aware of their roles and responsibilities, access review, budget review, policy compliance and remediate when necessary.",
+ "training": "https://learn.microsoft.com/training/modules/plan-implement-manage-access-review/",
+ "waf": "Security"
+ },
+ {
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "services": [
+ "Subscriptions"
],
"severity": "Medium",
"subcategory": "Subscriptions",
- "text": "Leverage Azure resource tag for cost categorization and resource grouping (: BillTo, Department (or Business Unit), Environment (Production, Stage, Development), Tier (Web Tier, Application Tier), Application Owner, ProjectName)",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "text": "Ensure that all subscription owners and IT core team are aware of subscription quotas and the impact they have on provision resources for a given subscription.",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations",
"services": [
- "Monitor",
- "SAP",
- "Backup"
+ "Cost",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "BCDR",
- "text": "Help protect your HANA database by using the Azure Backup service.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Subscriptions",
+ "text": "Use Reserved Instances where appropriate to optimize cost and ensure available capacity in target regions.",
+ "training": "https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
- "service": "SAP",
+ "ammp": true,
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
+ "link": "https://learn.microsoft.com/azure/azure-portal/azure-portal-dashboards",
"services": [
- "Storage",
- "Entra",
"Monitor",
- "VM",
- "SAP"
+ "Storage",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "BCDR",
- "text": "If you deploy Azure NetApp Files for your HANA, Oracle, or DB2 database, use the Azure Application Consistent Snapshot tool (AzAcSnap) to take application-consistent snapshots. AzAcSnap also supports Oracle databases. Consider using AzAcSnap on a central VM rather than on individual VMs.",
- "waf": "Reliability"
+ "subcategory": "Subscriptions",
+ "text": "Establish dashboards and/or visualizations to monitor compute and storage capacity metrics. (i.e. CPU, memory, disk space)",
+ "training": "https://learn.microsoft.com/training/modules/visualize-data-workbooks/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/get-started/manage-costs",
"services": [
- "Monitor",
- "SAP"
+ "Cost",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "Management",
- "text": "Ensure time-zone matches between the operating system and the SAP system.",
- "waf": "Operations"
+ "subcategory": "Subscriptions",
+ "text": "As part of your cloud adoption, implement a detailed cost management plan using the 'Managed cloud costs' process.",
+ "training": "https://learn.microsoft.com/learn/paths/control-spending-manage-bills/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3a923c34-74d0-4001-aac6-a9e01e6a83de",
+ "link": "https://learn.microsoft.com/azure/governance/management-groups/overview",
"services": [
"Entra",
- "Monitor",
- "SAP"
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Don't group different application services in the same cluster. For example, don't combine DRBD and central services clusters on the same cluster. However, you can use the same Pacemaker cluster to manage approximately five different central services (multi-SID cluster).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Reliability"
- },
- {
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
- "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
- "service": "SAP",
- "services": [
- "Monitor",
- "SAP",
- "Cost"
- ],
- "severity": "Low",
- "subcategory": "Management",
- "text": "Consider running dev/test systems in a snooze model to save and optimize Azure run costs.",
- "waf": "Cost"
+ "subcategory": "Subscriptions",
+ "text": "If servers will be used for Identity services, like domain controllers, establish a dedicated identity subscription in the identity management group, to host these services. Make sure that resources are set to use the domain controllers available in their region.",
+ "training": "https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
- "link": "https://learn.microsoft.com/azure/lighthouse/overview",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs",
"services": [
- "Entra",
- "Monitor",
- "SAP"
+ "Cost",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "If you partner with customers by managing their SAP estates, consider Azure Lighthouse. Azure Lighthouse allows managed service providers to use Azure native identity services to authenticate to the customers' environment. It puts the control in the hands of customers, because they can revoke access at any time and audit service providers' actions.",
- "waf": "Operations"
+ "subcategory": "Subscriptions",
+ "text": "Ensure tags are used for billing and cost management.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
- "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
+ "link": "https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md",
"services": [
- "Monitor",
- "SAP",
- "VM"
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Use Azure Update Manager to check the status of available updates for a single VM or multiple VMs and consider scheduling regular patching.",
- "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "Subscriptions",
+ "text": "For Sovereign Landing Zone, have a 'confidential corp' and 'confidential online' management group directly under the 'landing zones' MG.",
+ "training": "https://learn.microsoft.com/industry/sovereignty/slz-overview",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions",
"services": [
- "Monitor",
- "SAP"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Management",
- "text": "Optimize and manage SAP Basis operations by using SAP Landscape Management (LaMa). Use the SAP LaMa connector for Azure to relocate, copy, clone, and refresh SAP systems.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Regions",
+ "text": "Select the right Azure region/s for your deployment. Azure is a global-scale cloud platform that provide global coverage through many regions and geographies. Different Azure regions have different characteristics, access and availability models, costs, capacity, and services offered, then it is important to consider all criteria and requirements.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
- "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
- "service": "SAP",
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions",
"services": [
- "Monitor",
- "SAP",
- "SQL"
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Azure Monitor for SAP solutions to monitor your SAP workloads(SAP HANA, high-availability SUSE clusters, and SQL systems) on Azure. Consider supplementing Azure Monitor for SAP solutions with SAP Solution Manager.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "Regions",
+ "text": "Deploy your Azure landing zone in a multi-region deployment. Depending on customer size, locations, and users presence, operating in multiple regions can be a common choice to deliver services and run applications closer to them. Using a multi-region deployment is also important to provide geo disaster recovery capabilities, to eliminate the dependency from a single region capacity and diminish the risk of a temporary and localized resource capacity constraint.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
- "service": "SAP",
- "services": [
- "Entra",
- "Monitor",
- "SAP",
- "VM"
- ],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Run a VM Extension for SAP check. VM Extension for SAP uses the assigned managed identity of a virtual machine (VM) to access VM monitoring and configuration data. The check ensures that all performance metrics in your SAP application come from the underlying Azure Extension for SAP.",
- "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
- "waf": "Operations"
+ "category": "Resource Organization",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Regions",
+ "text": "Ensure required services and features are available within the chosen deployment regions.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery",
"services": [
- "Monitor",
- "SAP",
- "AzurePolicy"
+ "AppGW",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Azure Policy for access control and compliance reporting. Azure Policy provides the ability to enforce organization-wide settings to ensure consistent policy adherence and fast violation detection. ",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "subcategory": "App delivery",
+ "text": "Document a standard for securing the delivery application content from your Workload spokes using Application Gateway and Azure Front Door. You can use the Application Delivery checklist to for recommendations.",
"waf": "Operations"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "service": "VNet",
"services": [
- "Monitor",
- "SAP",
- "NetworkWatcher"
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Connection Monitor in Azure Network Watcher to monitor latency metrics for SAP databases and application servers. Or collect and display network latency measurements by using Azure Monitor.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
- "waf": "Operations"
+ "subcategory": "Hub and spoke",
+ "text": "Use a hub-and-spoke network topology for network scenarios that require maximum flexibility.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "73686af4-6791-4f89-95ad-a43324e13811",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "service": "VNet",
"services": [
- "Monitor",
- "SAP",
- "VM"
+ "VPN",
+ "DNS",
+ "NVA",
+ "Firewall",
+ "ExpressRoute",
+ "Entra",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Perform a quality check for SAP HANA on the provisioned Azure infrastructure to verify that provisioned VMs comply with SAP HANA on Azure best practices.",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Hub and spoke",
+ "text": "Deploy shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS services.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Cost"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "VNet",
"services": [
- "Subscriptions",
- "SAP",
- "Monitor"
+ "DDoS"
],
"severity": "High",
- "subcategory": "Monitoring",
- "text": "For each Azure subscription, run a latency test on Azure availability zones before zonal deployment to choose low-latency zones for deployment of SAP on Azure.",
- "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "waf": "Performance"
+ "subcategory": "App delivery",
+ "text": "Use a DDoS Network or IP protection plan for all public IP addresses in application landing zones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
"services": [
- "Storage",
- "Monitor",
- "SAP",
- "ASR"
+ "NVA"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Run the Resiliency Report to ensure that the configuration of the entire provisioned Azure infrastructure (Compute, Database, Networking, Storage, Site Recovery) complies with the configuration defined by Cloud Adaption Framework for Azure.",
- "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "subcategory": "Hub and spoke",
+ "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance.",
"waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
- "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "service": "ExpressRoute",
"services": [
- "Monitor",
- "SAP",
- "Sentinel"
+ "ExpressRoute",
+ "ARS",
+ "VPN"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Implement threat protection by using the Microsoft Sentinel solution for SAP. Use this solution to monitor your SAP systems and detect sophisticated threats throughout the business logic and application layers.",
- "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
+ "severity": "Low",
+ "subcategory": "Hub and spoke",
+ "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "service": "ARS",
"services": [
- "Monitor",
- "SAP",
- "Cost"
+ "ARS",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Azure tagging can be leveraged to logically group and track resources, automate their deployments, and most importantly, provide visibility on the incurred costs.",
- "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Hub and spoke",
+ "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
+ "waf": "Security"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
+ "service": "VNet",
"services": [
- "Monitor",
- "SAP",
- "VM"
+ "ACR",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "Performance",
- "text": "Use inter-VM latency monitoring for latency-sensitive applications.",
+ "severity": "Medium",
+ "subcategory": "Hub and spoke",
+ "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "Performance"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
+ "service": "VNet",
"services": [
- "ASR",
- "Monitor",
- "SAP"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Performance",
- "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "Hub and spoke",
+ "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Operations"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"services": [
- "Storage",
- "Monitor",
- "SAP"
+ "ExpressRoute",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Performance",
- "text": "Exclude all the database file systems and executable programs from antivirus scans. Including them could lead to performance problems. Check with the database vendors for prescriptive details on the exclusion list. For example, Oracle recommends excluding /oracle//sapdata from antivirus scans.",
- "waf": "Performance"
+ "subcategory": "Hub and spoke",
+ "text": "If you have more than 400 spoke networks in a region, deploy an additional hub to bypass VNet peering limits (500) and the maximum number of prefixes that can be advertised via ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "c027f893-f404-41a9-b33d-39d625a14964",
- "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"services": [
- "Monitor",
- "SAP"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Performance",
- "text": "Consider collecting full database statistics for non-HANA databases after migration. For example, implement SAP note 1020260 - Delivery of Oracle statistics.",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Hub and spoke",
+ "text": "Limit the number of routes per route table to 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "service": "VNet",
"services": [
- "Storage",
- "Monitor",
- "SAP"
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Performance",
- "text": "Consider using Oracle Automatic Storage Management (ASM) for all Oracle deployments that use SAP on Azure.",
- "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Hub and spoke",
+ "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"services": [
- "Monitor",
- "SAP",
- "SQL"
+ "LoadBalancer"
],
- "severity": "Medium",
- "subcategory": "Performance",
- "text": "For SAP on Azure running Oracle, a collection of SQL scripts can help you diagnose performance problems. Automatic Workload Repository (AWR) reports contain valuable information for diagnosing problems in the Oracle system. We recommend that you run an AWR report during several sessions and choose peak times for it, to ensure broad coverage for the analysis.",
- "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Hub and spoke",
+ "text": "Use Standard Load Balancer SKU with a zone-redundant deployment, Selecting Standard SKU Load Balancer enhances reliability through availability zones and zone resiliency, ensuring deployments withstand zone and region failures. Unlike Basic, it supports global load balancing and offers an SLA.",
+ "waf": "Reliability"
},
{
- "category": "Management and Monitoring",
- "checklist": "SAP Checklist",
- "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"services": [
- "ASR",
- "Monitor",
- "SAP"
+ "LoadBalancer"
],
"severity": "High",
- "subcategory": "Reliability",
- "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
- "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "waf": "Operations"
+ "subcategory": "Hub and spoke",
+ "text": "Ensure load balancer backend pool(s) contains at least two instances, Deploying Azure Load Balancers with at least two instances in the backend prevents a single point of failure and supports scalability.",
+ "waf": "Reliability"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "service": "ExpressRoute",
"services": [
- "SAP",
- "AzurePolicy",
- "WAF",
- "AppGW"
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "App delivery",
- "text": "For secure delivery of HTTP/S apps, use Application Gateway v2 and ensure that WAF protection and policies are enabled.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "subcategory": "Encryption",
+ "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
+ "service": "ExpressRoute",
"services": [
- "DNS",
- "SAP",
- "VM"
+ "ExpressRoute",
+ "VPN"
],
"severity": "Medium",
- "subcategory": "DNS",
- "text": "If the virtual machine's DNS or virtual name is not changed during migration to Azure, Background DNS and virtual names connect many system interfaces in the SAP landscape, and customers are only sometimes aware of the interfaces that developers define over time. Connection challenges arise between various systems when virtual or DNS names change after migrations, and it's recommended to retain DNS aliases to prevent these types of difficulties.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operations"
+ "subcategory": "Encryption",
+ "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "DNS",
- "SAP"
+ "ACR",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "DNS",
- "text": "Use different DNS zones to distinguish each environment (sandbox, development, preproduction, and production) from each other. The exception is for SAP deployments with their own VNet; here, private DNS zones might not be necessary.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "IP plan",
+ "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "a3592829-e6e2-4061-9368-6af46791f893",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"services": [
- "VNet",
- "ACR",
- "SAP"
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Local and global VNet peering provide connectivity and are the preferred approaches to ensure connectivity between landing zones for SAP deployments across multiple Azure regions",
- "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
- "waf": "Reliability"
+ "subcategory": "IP plan",
+ "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"services": [
- "SAP",
- "NVA"
+ "VNet"
],
"severity": "High",
- "subcategory": "Hybrid",
- "text": "It is not supported to deploy any NVA between SAP application and SAP Database server",
- "training": "https://me.sap.com/notes/2731110",
+ "subcategory": "IP plan",
+ "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Performance"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
+ "service": "VNet",
"services": [
- "ACR",
- "SAP",
- "VWAN"
+ "ASR",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
- "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "IP plan",
+ "text": "Do not use overlapping IP address ranges for production and disaster recovery sites.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Reliability"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
"services": [
- "VNet",
- "SAP",
- "NVA"
+ "ACR",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Consider deploying network virtual appliances (NVAs) between regions only if partner NVAs are used. NVAs between regions or VNets aren't required if native NVAs are present. When you're deploying partner networking technologies and NVAs, follow the vendor's guidance to verify conflicting configurations with Azure networking.",
- "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "IP plan",
+ "text": "Use Standard SKU and Zone-Redundant IPs when applicable, Public IP addresses in Azure can be of standard SKU, available as non-zonal, zonal, or zone-redundant. Zone-redundant IPs are accessible across all zones, resisting any single zone failure, thereby providing higher resilience. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "Reliability"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
+ "service": "DNS",
"services": [
- "VNet",
- "SAP",
- "VWAN",
- "NVA"
+ "DNS",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Hybrid",
- "text": "Virtual WAN manages connectivity between spoke VNets for virtual-WAN-based topologies (no need to set up user-defined routing [UDR] or NVAs), and maximum network throughput for VNet-to-VNet traffic in the same virtual hub is 50 gigabits per second. If necessary, SAP landing zones can use VNet peering to connect to other landing zones and overcome this bandwidth limitation.",
- "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
+ "subcategory": "IP plan",
+ "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Operations"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "82734c88-6ba2-4802-8459-11475e39e530",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
+ "service": "DNS",
"services": [
- "VNet",
- "SAP",
- "VM"
+ "ACR",
+ "DNS",
+ "VNet"
],
- "severity": "High",
+ "severity": "Medium",
"subcategory": "IP plan",
- "text": "Public IP assignment to VM running SAP Workload is not recommended.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "text": "For environments where name resolution across Azure and on-premises is required and there is no existing enterprise DNS service like Active Directory, use Azure DNS Private Resolver to route DNS requests to Azure or to on-premises DNS servers.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "service": "DNS",
"services": [
- "ASR",
- "VNet",
- "SAP"
+ "DNS",
+ "VNet"
],
- "severity": "High",
+ "severity": "Low",
"subcategory": "IP plan",
- "text": "Consider reserving IP address on DR side when configuring ASR",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "Operations"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
+ "service": "DNS",
"services": [
- "VNet",
- "SAP"
+ "DNS",
+ "VM",
+ "VNet"
],
"severity": "High",
"subcategory": "IP plan",
- "text": "Avoid using overlapping IP address ranges for production and DR sites.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Operations"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
"services": [
- "Storage",
- "VNet",
- "SAP"
+ "DNS",
+ "VNet"
],
"severity": "Medium",
"subcategory": "IP plan",
- "text": "While Azure does help you to create multiple delegated subnets in a VNet, only one delegated subnet can exist in a VNet for Azure NetApp Files. Attempts to create a new volume will fail if you use more than one delegated subnet for Azure NetApp Files.",
- "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
- "waf": "Operations"
+ "text": "Implement a plan for managing DNS resolution between multiple Azure regions and when services fail over to another region",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Reliability"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "service": "Bastion",
"services": [
- "SAP",
- "Firewall"
+ "Bastion"
],
"severity": "Medium",
"subcategory": "Internet",
- "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
- "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "text": "Use Azure Bastion to securely connect to your network.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
- "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "service": "Bastion",
"services": [
- "SAP",
- "WAF",
- "AppGW"
+ "Bastion",
+ "VNet"
],
"severity": "Medium",
"subcategory": "Internet",
- "text": "Application Gateway and Web Application Firewall have limitations when Application Gateway serves as a reverse proxy for SAP web apps, as shown in the comparison between Application Gateway, SAP Web Dispatcher, and other third-party services.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "text": "Use Azure Bastion in a subnet /26 or larger.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "WAF",
"services": [
"WAF",
"ACR",
- "AzurePolicy",
- "SAP",
- "FrontDoor"
+ "FrontDoor",
+ "AzurePolicy"
],
"severity": "Medium",
"subcategory": "Internet",
"text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
- "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
"services": [
"WAF",
+ "AppGW",
"AzurePolicy",
- "SAP",
- "FrontDoor",
- "AppGW"
+ "FrontDoor"
],
- "severity": "Medium",
+ "severity": "Low",
"subcategory": "Internet",
- "text": "Take advantage of Web Application Firewall policies in Azure Front Door when you're using Azure Front Door and Application Gateway to protect HTTP/S applications. Lock down Application Gateway to receive traffic only from Azure Front Door.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
+ "service": "WAF",
"services": [
- "LoadBalancer",
- "SAP",
"WAF",
- "AppGW"
+ "VNet"
],
- "severity": "Medium",
+ "severity": "High",
"subcategory": "Internet",
- "text": "Use a web application firewall to scan your traffic when it's exposed to the internet. Another option is to use it with your load balancer or with resources that have built-in firewall capabilities like Application Gateway or third-party solutions.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "text": "When WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
"services": [
- "ACR",
- "SAP",
- "VWAN"
+ "DDoS",
+ "VNet"
],
- "severity": "Medium",
+ "severity": "High",
"subcategory": "Internet",
- "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
- "waf": "Performance"
+ "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "SAP",
- "services": [
- "Storage",
- "VNet",
- "Backup",
- "ACR",
- "SAP",
- "PrivateLink"
- ],
- "severity": "Medium",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "service": "VNet",
+ "services": [],
+ "severity": "High",
"subcategory": "Internet",
- "text": "To prevent data leakage, use Azure Private Link to securely access platform as a service resources like Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, and more. Azure Private Endpoint can also help to secure traffic between VNets and services like Azure Storage, Azure Backup, and more. Traffic between your VNet and the Private Endpoint enabled service travels across the Microsoft global network, which prevents its exposure to the public internet.",
- "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
- "waf": "Security"
+ "text": "Plan for how to manage your network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
+ "waf": "Reliability"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
"services": [
- "SAP",
- "VM"
+ "DDoS"
],
"severity": "High",
- "subcategory": "Segmentation",
- "text": "Make sure that Azure accelerated networking is enabled on the VMs used in the SAP application and DBMS layers.",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "Performance"
+ "subcategory": "Internet",
+ "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
"services": [
- "SAP",
- "LoadBalancer"
+ "AzurePolicy",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Segmentation",
- "text": "Make sure that internal deployments for Azure Load Balancer are set up to use Direct Server Return (DSR). This setting (Enabling Floating IP) will reduce latency when internal load balancer configurations are used for high-availability configurations on the DBMS layer.",
- "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "severity": "High",
+ "subcategory": "Internet",
+ "text": "Ensure there is a policy assignment to deny Public IP addresses directly tied to Virtual Machines. Use exclusions if public IPs are needed on specific VMs.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "6791f893-5ada-4433-84e1-3811523181aa",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "SAP",
- "VM"
+ "ExpressRoute",
+ "VPN",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "You can use application security group (ASG) and NSG rules to define network security access-control lists between the SAP application and DBMS layers. ASGs group virtual machines to help manage their security.",
- "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Hybrid",
+ "text": "Use ExpressRoute as the primary connection to Azure. Use VPNs as a source of backup connectivity.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "SAP"
+ "ExpressRoute"
],
- "severity": "High",
- "subcategory": "Segmentation",
- "text": "Placing of the SAP application layer and SAP DBMS in different Azure VNets that aren't peered isn't supported.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "When you use multiple ExpressRoute circuits or multiple on-prem locations, use BGP attributes to optimize routing.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "ExpressRoute",
+ "VPN"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "For optimal network latency with SAP applications, consider using Azure proximity placement groups.",
- "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "subcategory": "Hybrid",
+ "text": "Select the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Performance"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "ExpressRoute",
+ "Cost"
],
"severity": "High",
- "subcategory": "Segmentation",
- "text": "It is NOT supported at all to run an SAP Application Server layer and DBMS layer split between on-premise and Azure. Both layers need to completely reside either on-premise or in Azure.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Performance"
+ "subcategory": "Hybrid",
+ "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "SAP",
+ "ExpressRoute",
"Cost"
],
"severity": "High",
- "subcategory": "Segmentation",
- "text": "It isn't recommended to host the database management system (DBMS) and application layers of SAP systems in different VNets and connect them with VNet peering because of the substantial costs that excessive network traffic between the layers can produce. Recommend using subnets within the Azure virtual network to separate the SAP application layer and DBMS layer.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "subcategory": "Hybrid",
+ "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuit peering location supports your Azure regions for the Local SKU.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Cost"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "402a9846-d515-4061-aff8-cd30088693fa",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
- "service": "SAP",
- "services": [
- "SAP",
- "LoadBalancer"
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
+ "service": "ExpressRoute",
+ "services": [
+ "ExpressRoute"
],
- "severity": "High",
- "subcategory": "Segmentation",
- "text": "If using Load Balancer with Linux guest operating systems, check that the Linux network parameter net.ipv4.tcp_timestamps is set to 0.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "services": [
+ "ExpressRoute"
+ ],
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Performance"
},
{
"category": "Network Topology and Connectivity",
- "checklist": "SAP Checklist",
- "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
- "service": "SAP",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
+ "service": "ExpressRoute",
"services": [
- "VNet",
- "SAP"
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": "Segmentation",
- "text": "For SAP RISE/ECS deployments, virtual peering is the preferred way to establish connectivity with customer's existing Azure environment. Both the SAP vnet and customer vnet(s) are protected with network security groups (NSG), enabling communication on SAP and database ports through the vnet peering",
- "waf": "Security"
+ "subcategory": "Hybrid",
+ "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
+ "service": "VPN",
"services": [
- "SAP",
- "VM",
- "Backup"
+ "VPN"
],
- "severity": "High",
- "subcategory": " ",
- "text": "Review SAP HANA database backups for Azure VMs.",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Reliability"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "service": "VPN",
"services": [
- "ASR",
- "Monitor",
- "SAP"
+ "VPN"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Review Site Recovery built-in monitoring, where used for SAP.",
- "waf": "Cost"
+ "subcategory": "Hybrid",
+ "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Reliability"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
- "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "service": "ExpressRoute",
"services": [
- "Monitor",
- "SAP"
+ "ExpressRoute",
+ "Cost"
],
"severity": "High",
- "subcategory": " ",
- "text": "Review the Monitoring the SAP HANA System Landscape guidance.",
- "waf": "Operations"
+ "subcategory": "Hybrid",
+ "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
+ "service": "ExpressRoute",
"services": [
- "SAP",
- "VM",
- "Backup"
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Review Oracle Database in Azure Linux VM backup strategies.",
- "waf": "Operations"
+ "subcategory": "Hybrid",
+ "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
- "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
+ "service": "ExpressRoute",
"services": [
- "Storage",
- "SAP",
- "SQL"
+ "ExpressRoute",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Review the use of Azure Blob Storage with SQL Server 2016.",
+ "subcategory": "Hybrid",
+ "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Operations"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
+ "service": "ExpressRoute",
"services": [
- "SAP",
- "VM",
- "Backup"
+ "ACR",
+ "Monitor",
+ "NetworkWatcher"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Review the use of Automated Backup v2 for Azure VMs.",
+ "subcategory": "Hybrid",
+ "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Operations"
},
{
- "category": "Operational Excellence",
- "checklist": "SAP Checklist",
- "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "ExpressRoute"
],
- "severity": "High",
- "subcategory": " ",
- "text": "Enabling Write accelerator for M series when using premium disks(V1)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "ExpressRoute",
+ "VPN"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Test availability zone latency.",
- "waf": "Performance"
+ "subcategory": "Hybrid",
+ "text": "Use site-to-site VPN as failover of ExpressRoute, if only using a single ExpressRoute circuit.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
- "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "Storage",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": " ",
- "text": "Activate SAP EarlyWatch Alert for all SAP components.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Hybrid",
+ "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
+ "waf": "Reliability"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "ExpressRoute",
+ "ACR"
],
- "severity": "Medium",
- "subcategory": " ",
- "text": "Review SAP application server to database server latency using SAP ABAPMeter report /SSA/CAT.",
- "training": "https://me.sap.com/notes/0002879613",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Hybrid",
+ "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "service": "ExpressRoute",
"services": [
- "Monitor",
- "SAP",
- "SQL"
+ "ExpressRoute"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Review SQL Server performance monitoring using CCMS.",
- "waf": "Performance"
+ "subcategory": "Hybrid",
+ "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
- "link": "https://me.sap.com/notes/500235",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
+ "service": "ExpressRoute",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "ExpressRoute",
"services": [
- "SAP",
- "VM"
+ "ExpressRoute"
],
- "severity": "Medium",
- "subcategory": " ",
- "text": "Test network latency between SAP application layer VMs and DBMS VMs (NIPING).",
- "training": "https://me.sap.com/notes/1100926/E",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Hybrid",
+ "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
- "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
+ "service": "ExpressRoute",
"services": [
+ "ExpressRoute",
"Monitor",
- "SAP"
+ "VNet"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Review SAP HANA studio alerts.",
- "waf": "Performance"
+ "subcategory": "Hybrid",
+ "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
},
{
- "category": "Performant",
- "checklist": "SAP Checklist",
- "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
- "link": "https://me.sap.com/notes/1969700",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
+ "service": "ExpressRoute",
"services": [
- "SAP"
+ "ExpressRoute",
+ "VNet"
],
"severity": "Medium",
- "subcategory": " ",
- "text": "Perform SAP HANA health checks using HANA_Configuration_Minichecks.",
+ "subcategory": "Hybrid",
+ "text": "Do not use ExpressRoute circuits for VNet-to-VNet communication.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Performance"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
"services": [
- "SAP",
- "VM"
+ "ACR"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "If you run Windows and Linux VMs in Azure, on-premises, or in other cloud environments, you can use the Update management center in Azure Automation to manage operating system updates, including security patches.",
- "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "severity": "Low",
+ "subcategory": "Hybrid",
+ "text": "Do not send Azure traffic to hybrid locations for inspection. Instead, follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
+ "service": "Firewall",
+ "services": [
+ "Firewall"
+ ],
+ "severity": "High",
+ "subcategory": "Firewall",
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "08951710-79a2-492a-adbc-06d7a401545b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
+ "service": "Firewall",
"services": [
- "SAP"
+ "ACR",
+ "RBAC",
+ "AzurePolicy",
+ "Firewall"
],
"severity": "Medium",
- "subcategory": "Governance",
- "text": "Routinely review the SAP security OSS notes because SAP releases highly critical security patches, or hot fixes, that require immediate action to protect your SAP systems.",
- "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
+ "subcategory": "Firewall",
+ "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
+ "service": "Firewall",
"services": [
- "SAP",
- "SQL"
+ "Firewall"
],
"severity": "Low",
- "subcategory": "Governance",
- "text": "For SAP on SQL Server, you can disable the SQL Server system administrator account because the SAP systems on SQL Server don't use the account. Ensure that another user with system administrator rights can access the server before disabling the original system administrator account.",
+ "subcategory": "Firewall",
+ "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "service": "Firewall",
"services": [
- "SAP",
- "SQL"
+ "DNS",
+ "Firewall"
],
"severity": "High",
- "subcategory": "Governance",
- "text": "Disable xp_cmdshell. The SQL Server feature xp_cmdshell enables a SQL Server internal operating system command shell. It's a potential risk in security audits.",
- "training": "https://me.sap.com/notes/3019299/E",
+ "subcategory": "Firewall",
+ "text": "Use application rules to filter outbound traffic on destination host name for supported protocols. Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over other protocols.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "service": "Firewall",
"services": [
- "Storage",
- "Backup",
- "AKV",
- "SQL",
- "SAP"
+ "Firewall"
],
"severity": "High",
- "subcategory": "Secrets",
- "text": "Encrypting SAP HANA database servers on Azure uses SAP HANA native encryption technology. Additionally, if you are using SQL Server on Azure, use Transparent Data Encryption (TDE) to protect your data and log files and ensure that your backups are also encrypted.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "subcategory": "Firewall",
+ "text": "Use Azure Firewall Premium to enable additional security features.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
+ "service": "Firewall",
"services": [
- "Storage",
- "SAP",
- "AKV"
+ "Firewall"
],
- "severity": "Medium",
- "subcategory": "Secrets",
- "text": "Azure Storage encryption is enabled for all Azure Resource Manager and classic storage accounts, and can't be disabled. Because your data is encrypted by default, you don't need to modify your code or applications to use Azure Storage encryption.",
- "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
+ "severity": "High",
+ "subcategory": "Firewall",
+ "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "service": "Firewall",
"services": [
- "SAP",
- "AKV"
+ "Firewall"
],
"severity": "High",
- "subcategory": "Secrets",
- "text": "Use Azure Key Vault to store your secrets and credentials",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "subcategory": "Firewall",
+ "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "SAP",
- "services": [
- "RBAC",
- "Subscriptions",
- "AKV",
- "AzurePolicy",
- "SAP"
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
+ "service": "Firewall",
+ "services": [
+ "Storage",
+ "NVA",
+ "Firewall",
+ "VWAN",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Secrets",
- "text": "It is recommended to LOCK the Azure Resources post successful deployment to safeguard against unauthorized changes. You can also enforce LOCK constraints and rules on your per-subscription basis using customized Azure policies(Custome role).",
- "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
+ "severity": "High",
+ "subcategory": "Firewall",
+ "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance.",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
+ "service": "Firewall",
"services": [
- "AKV",
- "SAP",
- "AzurePolicy"
+ "Storage",
+ "Firewall"
],
"severity": "Medium",
- "subcategory": "Secrets",
- "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Firewall",
+ "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operations"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
+ "service": "Firewall",
"services": [
- "AKV",
- "RBAC",
- "SAP",
- "AzurePolicy"
+ "AzurePolicy",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "Secrets",
- "text": "Based on existing requirements, regulatory and compliance controls (internal/external) - Determine what Azure Policies and Azure RBAC role are needed",
- "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
- "waf": "Security"
+ "severity": "Important",
+ "subcategory": "Firewall",
+ "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operations"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "service": "Firewall",
"services": [
- "Storage",
- "SAP",
- "AKV",
- "Defender"
+ "Firewall",
+ "VNet"
],
"severity": "High",
- "subcategory": "Secrets",
- "text": "When enabling Microsoft Defender for Endpoint on SAP environment, recommend excluding data and log files on DBMS servers instead of targeting all servers. Follow your DBMS vendor's recommendations when excluding target files.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
+ "subcategory": "Segmentation",
+ "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "service": "Firewall",
"services": [
- "RBAC",
- "SAP",
- "AKV",
- "Defender"
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Secrets",
- "text": "Delegate an SAP admin custom role with just-in-time access of Microsoft Defender for Cloud.",
- "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Firewall",
+ "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
+ "waf": "Performance"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
+ "service": "Firewall",
"services": [
- "SAP",
- "AKV"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Secrets",
- "text": "encrypt data in transit by integrating the third-party security product with secure network communications (SNC) for DIAG (SAP GUI), RFC, and SPNEGO for HTTPS",
- "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Firewall",
+ "text": "Use IP Groups or IP prefixes to reduce number of IP table rules.",
+ "waf": "Performance"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "service": "Firewall",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Firewall",
+ "text": "Do not use wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Performance"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "service": "Firewall",
"services": [
- "SAP",
- "AKV"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Secrets",
- "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Firewall",
+ "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it’s a sign that SNAT exhaustion might be imminent.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Performance"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
+ "service": "Firewall",
"services": [
- "SAP",
- "AKV"
+ "Firewall"
],
"severity": "High",
- "subcategory": "Secrets",
- "text": "Use an Azure Key Vault per application per environment per region.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "subcategory": "Firewall",
+ "text": "If you are using Azure Firewall Premium, enable TLS Inspection.",
+ "waf": "Performance"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
- "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
+ "service": "Firewall",
"services": [
- "SAP",
- "AKV"
+ "ServiceBus"
],
- "severity": "High",
- "subcategory": "Secrets",
- "text": "To control and manage disk encryption keys and secrets for non-HANA Windows and non-Windows operating systems, use Azure Key Vault. SAP HANA isn't supported with Azure Key Vault, so you must use alternate methods like SAP ABAP or SSH keys.",
- "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Firewall",
+ "text": "Use web categories to allow or deny outbound access to specific topics.",
+ "waf": "Performance"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "service": "Firewall",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Firewall",
+ "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
+ "waf": "Performance"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "service": "Firewall",
"services": [
- "RBAC",
- "SAP",
- "Subscriptions"
+ "DNS",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Customize role-based access control (RBAC) roles for SAP on Azure spoke subscriptions to avoid accidental network-related changes",
- "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "Firewall",
+ "text": "Enable Azure Firewall DNS proxy configuration.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
- "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "service": "Firewall",
"services": [
- "NVA",
- "SAP",
- "PrivateLink"
+ "Monitor",
+ "Firewall"
],
"severity": "High",
- "subcategory": "Security",
- "text": "Isolate DMZs and NVAs from the rest of the SAP estate, configure Azure Private Link, and securely manage and control the SAP on Azure resources",
- "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
- "waf": "Security"
+ "subcategory": "Firewall",
+ "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs and metrics.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Operations"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
- "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "service": "Firewall",
"services": [
- "Storage",
- "SAP",
- "VM"
+ "Backup"
],
"severity": "Low",
- "subcategory": "Security",
- "text": "Consider using Microsoft anti-malware software on Azure to protect your virtual machines from malicious files, adware, and other threats.",
- "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
- "waf": "Security"
+ "subcategory": "Firewall",
+ "text": "Implement backups for your firewall rules",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Operations"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
"services": [
- "SAP",
- "Defender"
+ "ACR",
+ "Firewall"
],
- "severity": "Low",
- "subcategory": "Security",
- "text": "For even more powerful protection, consider using Microsoft Defender for Endpoint.",
- "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
- "waf": "Security"
+ "severity": "High",
+ "subcategory": "Firewall",
+ "text": "Deploy Azure Firewall across multiple availability zones. Azure Firewall offers different SLAs depending on its deployment; in a single availability zone or across multiple, potentially improving reliability and performance.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Reliability"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
"services": [
- "VNet",
- "SAP"
+ "DDoS",
+ "Firewall",
+ "VNet"
],
"severity": "High",
- "subcategory": "Security",
- "text": "Isolate the SAP application and database servers from the internet or from the on-premises network by passing all traffic through the hub virtual network, which is connected to the spoke network by virtual network peering. The peered virtual networks guarantee that the SAP on Azure solution is isolated from the public internet.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
+ "subcategory": "Firewall",
+ "text": "Configure DDoS Protection on the Azure Firewall VNet, Associate a DDoS protection plan with the virtual network hosting Azure Firewall to provide enhanced mitigation against DDoS attacks. Azure Firewall Manager integrates the creation of firewall infrastructure and DDoS protection plans. ",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "App Gateway",
+ "services": [
+ "VNet"
+ ],
+ "severity": "High",
+ "subcategory": "PaaS",
+ "text": "Do not disrupt control-plane communication for Azure PaaS services injected into a virtual networks, such as with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
"services": [
- "SAP",
- "WAF"
+ "PrivateLink"
],
- "severity": "Low",
- "subcategory": "Security",
- "text": "For internet-facing applications like SAP Fiori, make sure to distribute load per application requirements while maintaining security levels. For Layer 7 security, you can use a third-party Web Application Firewall (WAF) available in the Azure Marketplace.",
- "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "severity": "Medium",
+ "subcategory": "PaaS",
+ "text": "Use Private Link, where available, for shared Azure PaaS services.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "SAP Checklist",
- "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
- "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
- "service": "SAP",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
+ "service": "ExpressRoute",
"services": [
- "Monitor",
- "SAP",
- "AKV"
+ "ExpressRoute",
+ "PrivateLink"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "To enable secure communication in Azure Monitor for SAP solutions, you can choose to use either a root certificate or a server certificate. We highly recommend that you use root certificates.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "subcategory": "PaaS",
+ "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Security"
},
{
- "category": "Business",
- "checklist": "Multitenant architecture",
- "guid": "41177955-fe8f-430b-ae72-20dc5b6880da",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/overview",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
+ "service": "VNet",
"services": [
- "Entra"
+ "VNet"
],
"severity": "High",
- "subcategory": "Business",
- "text": "Understand what kind of solution you're creating, such as business-to-business (B2B), business-to-consumer (B2C), or your enterprise software, and how tenants are different from users.",
- "waf": "Operations"
+ "subcategory": "PaaS",
+ "text": "Don't enable virtual network service endpoints by default on all subnets.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Security"
},
{
- "category": "Business",
- "checklist": "Multitenant architecture",
- "guid": "2d33d1b7-697c-49f9-b944-afbeac0b2c8f",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
+ "service": "Firewall",
+ "services": [
+ "DNS",
+ "NVA",
+ "PrivateLink",
+ "Firewall"
+ ],
+ "severity": "Medium",
+ "subcategory": "PaaS",
+ "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Security"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
+ "service": "ExpressRoute",
+ "services": [
+ "ExpressRoute",
+ "VPN",
+ "VNet"
+ ],
"severity": "High",
- "subcategory": "Business",
- "text": "Define your tenants. Understand how many tenants you will support initially, and your growth plans.",
- "waf": "Operations"
+ "subcategory": "Segmentation",
+ "text": "Use at least a /27 prefix for your Gateway subnets.",
+ "waf": "Security"
},
{
- "category": "Business",
- "checklist": "Multitenant architecture",
- "guid": "a2111b8b-cc66-4aa2-9da6-c09fa23851b6",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/pricing-models",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
+ "service": "NSG",
+ "services": [
+ "VNet"
+ ],
"severity": "High",
- "subcategory": "Business",
- "text": "Define your pricing model and ensure it aligns with your tenants' consumption of Azure resources.",
- "waf": "Cost"
+ "subcategory": "Segmentation",
+ "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
+ "waf": "Security"
},
{
- "category": "Business",
- "checklist": "Multitenant architecture",
- "guid": "331e84a6-2d65-4359-92ff-a1870b062995",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/pricing-models",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "services": [
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Business",
- "text": "Understand whether you need to separate your tenants into different tiers. Tiers might have different pricing, features, performance promises, geographic locations, and so forth.",
- "waf": "Operations"
+ "subcategory": "Segmentation",
+ "text": "Delegate subnet creation to the landing zone owner.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
},
{
- "category": "Business",
- "checklist": "Multitenant architecture",
- "guid": "90516b37-aab1-46ca-95bb-cc14a6a1608b",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "service": "NSG",
+ "services": [
+ "ACR",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Business",
- "text": "Based on your customers' requirements, decide on the tenancy models that are appropriate for various parts of your solution.",
- "waf": "Operations"
+ "subcategory": "Segmentation",
+ "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
- "category": "Business",
- "checklist": "Multitenant architecture",
- "guid": "f5d76ae1-7048-4ff5-abba-f1ca799578b9",
- "link": "https://learn.microsoft.com/azure/marketplace/plan-saas-offer",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "NSG",
"services": [
- "Entra"
+ "Entra",
+ "NVA",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Business",
- "text": "When you're ready, sell your B2B multitenant solution using the Microsoft Commercial Marketplace.",
- "waf": "Operations"
+ "subcategory": "Segmentation",
+ "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
- "category": "Reliability",
- "checklist": "Multitenant architecture",
- "guid": "9e7cedd9-1e05-4aeb-a7b3-01fe695a394c",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/design-checklist",
- "services": [],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Review the Azure Well-Architected Reliability checklist, which is applicable to all workloads.",
- "waf": "Reliability"
- },
- {
- "category": "Reliability",
- "checklist": "Multitenant architecture",
- "guid": "e9521a55-2a7c-425c-8f3e-c38fd0c4df75",
- "link": "https://learn.microsoft.com/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor",
- "services": [],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Understand the Noisy Neighbor antipattern. Prevent individual tenants from impacting the system's availability for other tenants.",
- "waf": "Reliability"
- },
- {
- "category": "Reliability",
- "checklist": "Multitenant architecture",
- "guid": "2b99cb00-9abb-49b6-b11c-f2af9692f09e",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/overview",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
+ "service": "NSG",
+ "services": [
+ "NetworkWatcher",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Reliability",
- "text": "Design your multitenant solution for the level of growth that you expect. But don't overengineer for unrealistic growth.",
- "waf": "Reliability"
+ "subcategory": "Segmentation",
+ "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Security"
},
{
- "category": "Reliability",
- "checklist": "Multitenant architecture",
- "guid": "7a634a0e-1c9d-42b1-aac2-5a5378f103f1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/business-metrics",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "NSG",
+ "services": [
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Reliability",
- "text": "Define service-level objectives (SLOs) and optionally service-level agreements (SLAs) for your solution. SLAs and SLOs should be based on the requirements of your tenants, as well as the composite SLA of the Azure resources in your architecture.",
- "waf": "Reliability"
- },
- {
- "category": "Reliability",
- "checklist": "Multitenant architecture",
- "guid": "45beeeaf-fc59-4079-8fca-65d5724abaa7",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/compute",
- "services": [],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Test the scale of your solution. Ensure that it performs well under all levels of load, and that it scales correctly as the number of tenants increases.",
+ "subcategory": "Segmentation",
+ "text": "Do not implement more than 900 NSG rules per NSG, due to the limit of 1000 rules.",
+ "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "Reliability"
},
{
- "category": "Reliability",
- "checklist": "Multitenant architecture",
- "guid": "2ff55551-984b-4606-95eb-bfb9c8b36761",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/compute",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
+ "service": "VWAN",
+ "services": [
+ "VWAN"
+ ],
"severity": "Medium",
- "subcategory": "Reliability",
- "text": "Apply chaos engineering principles to test the reliability of your solution.",
- "waf": "Reliability"
+ "subcategory": "Virtual WAN",
+ "text": "Use Virtual WAN if your scenario is explicitly described in the list of Virtual WAN routing designs.",
+ "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Multitenant architecture",
- "guid": "8238c038-8eb2-4a02-8bd5-4908c9442c1c",
- "link": "https://learn.microsoft.com/security/zero-trust",
- "services": [],
- "severity": "High",
- "subcategory": "Security",
- "text": "Apply the Zero Trust and least privilege principles in all layers of your solution.",
- "waf": "Security"
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "service": "VWAN",
+ "services": [
+ "ACR",
+ "VWAN"
+ ],
+ "severity": "Medium",
+ "subcategory": "Virtual WAN",
+ "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Multitenant architecture",
- "guid": "92160e00-6894-4102-97e0-615d4ed93c01",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/map-requests",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
+ "service": "VWAN",
"services": [
- "Entra"
+ "VWAN",
+ "Firewall"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Ensure that you can correctly map user requests to tenants. Consider including the tenant context as part of the identity system, or by using another means, like application-level tenant authorization.",
+ "severity": "Medium",
+ "subcategory": "Virtual WAN",
+ "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Multitenant architecture",
- "guid": "3c1538b4-5676-4b85-b451-432befb37b4f",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "service": "VWAN",
+ "services": [
+ "VWAN"
+ ],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Perform ongoing penetration testing and security code reviews.",
- "waf": "Security"
+ "subcategory": "Virtual WAN",
+ "text": "Ensure that your virtual WAN network architecture aligns to an identified architecture scenario.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Multitenant architecture",
- "guid": "5fca45ce-cf2d-42c0-a62c-aac92ba31498",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/governance-compliance",
- "services": [],
- "severity": "High",
- "subcategory": "Security",
- "text": "Understand your tenants' compliance requirements, including data residency and any compliance or regulatory standards that they require you to meet.",
- "waf": "Security"
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "service": "VWAN",
+ "services": [
+ "VWAN",
+ "Monitor"
+ ],
+ "severity": "Medium",
+ "subcategory": "Virtual WAN",
+ "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Multitenant architecture",
- "guid": "30adb90d-83d4-4a2e-986e-327ffe04e7a5",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/domain-names",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "service": "VWAN",
"services": [
- "DNS"
+ "VWAN"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Correctly manage domain names and avoid vulnerabilities like dangling DNS and subdomain takeover attacks.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Virtual WAN",
+ "text": "Do not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Multitenant architecture",
- "guid": "72ded36d-c633-4e0d-bd41-799a29da3481",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/service/overview",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "service": "VWAN",
+ "services": [
+ "ExpressRoute",
+ "VWAN",
+ "VPN"
+ ],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Follow service-specific guidance for multitenancy.",
- "waf": "Security"
+ "subcategory": "Virtual WAN",
+ "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "Cost Optimization",
- "checklist": "Multitenant architecture",
- "guid": "db30a9fc-9b1d-40f3-ab90-01f6a3e87fc8",
- "link": "https://learn.microsoft.com/azure/architecture/framework/cost/design-checklist",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "service": "VWAN",
"services": [
- "Cost"
+ "VWAN"
],
"severity": "Medium",
- "subcategory": "Cost Optimization",
- "text": "Review the Azure Well-Architected Operational Excellence checklist, which is applicable to all workloads.",
- "waf": "Cost"
+ "subcategory": "Virtual WAN",
+ "text": "Configure label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "Cost Optimization",
- "checklist": "Multitenant architecture",
- "guid": "8533af39-52f6-45b6-a9c3-81b2a54a31e0",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/measure-consumption",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "service": "VWAN",
"services": [
- "Cost"
+ "VWAN"
],
"severity": "High",
- "subcategory": "Cost Optimization",
- "text": "Ensure you can adequately measure per-tenant consumption and correlate it with your infrastructure costs.",
- "waf": "Cost"
+ "subcategory": "Virtual WAN",
+ "text": "Assign at least a /23 prefix to virtual hubs to ensure enough IP space is available.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "category": "Cost Optimization",
- "checklist": "Multitenant architecture",
- "guid": "c851fd44-7cf1-459c-95a4-f6455d75a981",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/cost-management-allocation",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "Monitor",
- "Cost"
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Cost Optimization",
- "text": "Avoid antipatterns. Antipatterns include failing to track costs, tracking costs with unnecessary precision, real-time measurement, and using monitoring tools for billing.",
- "waf": "Cost"
- },
- {
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "0d475a5a-2c0f-47ab-b1e1-701da68d3407",
- "link": "https://learn.microsoft.com/azure/architecture/checklist/data-ops",
- "services": [],
"severity": "High",
- "subcategory": "Operational Excellence",
- "text": "Review the Azure Well-Architected Operational Excellence checklist, which is applicable to all workloads.",
- "waf": "Operations"
+ "subcategory": "Governance",
+ "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "9f7fa7a9-47fc-4f04-81f6-9f9e87571ed3",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenant-lifecycle",
- "services": [],
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "services": [
+ "RBAC",
+ "AzurePolicy"
+ ],
"severity": "Medium",
- "subcategory": "Operational Excellence",
- "text": "Use automation to manage the tenant lifecycle, such as onboarding, deployment, provisioning, and configuration.",
- "waf": "Operations"
+ "subcategory": "Governance",
+ "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "e0bfceed-4f4e-492d-b9f5-898815faa363",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/updates",
- "services": [],
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "services": [
+ "Subscriptions",
+ "AzurePolicy"
+ ],
"severity": "Medium",
- "subcategory": "Operational Excellence",
- "text": "Find the right balance for deploying service updates. Consider both your tenants' requirements and your own operational requirements.",
- "waf": "Operations"
+ "subcategory": "Governance",
+ "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "a3f80518-d428-4c02-b2cc-dfaef47db7e2",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "Monitor"
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Operational Excellence",
- "text": "Monitor the health of the overall system, as well as each tenant.",
- "waf": "Operations"
+ "subcategory": "Governance",
+ "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "dfb42da5-f871-4953-9e5c-da6fda3f1411",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "service": "Policy",
"services": [
- "Monitor"
+ "Subscriptions",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Operational Excellence",
- "text": "Configure and test alerts to notify you when specific tenants are experiencing issues or are exceeding their consumption limits.",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Governance",
+ "text": "Use Azure Policy to control which services users can provision at the subscription/management group level.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "c0c72a1b-e34d-4b3d-b808-2e49f51ce47e",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/resource-organization",
- "services": [],
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "services": [
+ "AzurePolicy"
+ ],
"severity": "High",
- "subcategory": "Operational Excellence",
- "text": "Organize your Azure resources for isolation and scale.",
- "waf": "Operations"
+ "subcategory": "Governance",
+ "text": "Use built-in policies where possible to minimize operational overhead.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Operational Excellence",
- "checklist": "Multitenant architecture",
- "guid": "c5c5e22d-4b51-4cac-a980-f7aac1a4b427",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/deployment-configuration",
- "services": [],
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "service": "Policy",
+ "services": [
+ "Subscriptions",
+ "Entra",
+ "RBAC",
+ "AzurePolicy"
+ ],
"severity": "Medium",
- "subcategory": "Operational Excellence",
- "text": "Avoid deployment and configuration antipatterns. Antipatterns include running separate versions of the solution for each tenant, hardcoding tenant-specific configurations or logic, and manual deployments.",
- "waf": "Operations"
- },
- {
- "category": "Performance Efficiency",
- "checklist": "Multitenant architecture",
- "guid": "f0b1fbd8-689c-4ab3-be1d-ad7607d2fbfd",
- "link": "https://learn.microsoft.com/azure/architecture/framework/scalability/performance-efficiency",
- "services": [],
- "severity": "High",
- "subcategory": "Performance Efficiency",
- "text": "Review the Azure Well-Architected Performance Efficiency checklist, which is applicable to all workloads.",
- "waf": "Performance"
- },
- {
- "category": "Performance Efficiency",
- "checklist": "Multitenant architecture",
- "guid": "18911c4c-934c-49a8-839a-60c092afce30",
- "link": "https://learn.microsoft.com/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor",
- "services": [],
- "severity": "High",
- "subcategory": "Performance Efficiency",
- "text": "If you use shared infrastructure, plan for how you'll mitigate Noisy Neighbor concerns. Ensure that one tenant can't reduce the performance of the system for other tenants.",
- "waf": "Performance"
+ "subcategory": "Governance",
+ "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Performance Efficiency",
- "checklist": "Multitenant architecture",
- "guid": "6acf7eb5-24a3-47c7-ae87-1196cd96048e",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/compute",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"services": [
- "Storage"
+ "Subscriptions",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Performance Efficiency",
- "text": "Determine how you'll scale your compute, storage, networking, and other Azure resources to match the demands of your tenants.",
- "waf": "Performance"
+ "subcategory": "Governance",
+ "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "category": "Performance Efficiency",
- "checklist": "Multitenant architecture",
- "guid": "ea55400d-f97d-45aa-b71b-34224bf91ed4",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/approaches/resource-organization",
- "services": [],
- "severity": "High",
- "subcategory": "Performance Efficiency",
- "text": "Consider each Azure resource's scale limits. Organize your resources appropriately, in order to avoid resource organization antipatterns. For example, don't over-architect your solution to work within unrealistic scale requirements.",
- "waf": "Performance"
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
+ "service": "Policy",
+ "services": [
+ "AzurePolicy"
+ ],
+ "severity": "Medium",
+ "subcategory": "Governance",
+ "text": "If any data sovereignty requirements exist, Azure Policies should be deployed to enforce them.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "waf": "Security"
},
{
"category": "Governance",
- "checklist": "Azure Key Vault",
- "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
+ "service": "Policy",
"services": [
- "AKV",
- "Backup"
+ "Subscriptions",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "Deployment best practices",
- "text": "Familiarize yourself with the Key Vault's best practices such as isolation recommendations, access control, data protection, backup, and logging.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Governance",
+ "text": "For Sovereign Landing Zone, deploy sovereignty policy baseline and assign at correct management group level.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Key Vault",
- "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Key Vault",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
+ "service": "Policy",
"services": [
- "ACR",
- "AKV"
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Key Vault is a managed service and Microsoft will handle the failover within and across region. Familiarize yourself with the Key Vault's availability and redundancy.",
- "waf": "Reliability"
+ "subcategory": "Governance",
+ "text": "For Sovereign Landing Zone, document Sovereign Control objectives to policy mapping.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Key Vault",
- "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
- "service": "Key Vault",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
+ "service": "Policy",
"services": [
- "AKV"
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "The contents of your key vault are replicated within the region and to a secondary region at least 150 miles away, but within the same geography to maintain high durability of your keys and secrets. Familiarize yourself with the Key Vault's data replication.",
- "waf": "Reliability"
+ "subcategory": "Governance",
+ "text": "For Sovereign Landing Zone, ensure process is in place for management of 'Sovereign Control objectives to policy mapping'.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Key Vault",
- "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
- "service": "Key Vault",
+ "category": "Governance",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "29fd366b-a180-452b-9bd7-954b7700c667",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
"services": [
- "AzurePolicy",
- "AKV"
+ "Cost",
+ "TrafficManager",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "During failover, access policy or firewall configurations and settings can't be changed. The key vault will be in read-only mode during failover. Familiarize yourself with the Key Vault's failover guidance.",
- "waf": "Reliability"
+ "subcategory": "Optimize your cloud investment",
+ "text": "Configure 'Actual' and 'Forecasted' Budget Alerts.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/",
+ "waf": "Cost"
},
{
"category": "Management",
- "checklist": "Azure Key Vault",
- "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
+ "service": "Monitor",
"services": [
- "Storage",
- "Subscriptions",
- "Backup",
- "AKV",
- "ASR"
+ "AzurePolicy",
+ "Monitor",
+ "RBAC",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Business continuity and disaster recovery",
- "text": "When you back up a key vault object, such as a secret, key, or certificate, the backup operation will download the object as an encrypted blob. This blob can't be decrypted outside of Azure. To get usable data from this blob, you must restore the blob into a key vault within the same Azure subscription and Azure geography. Familiarize yourself with the Key Vault's backup and restore guidance.",
- "waf": "Reliability"
+ "subcategory": "Monitoring",
+ "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Operations"
},
{
"category": "Management",
- "checklist": "Azure Key Vault",
- "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"services": [
- "ASR",
- "AKV"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Business continuity and disaster recovery",
- "text": "If you want protection against accidental or malicious deletion of your secrets, configure soft-delete and purge protection features on your key vault.",
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Decide whether to use a single Azure Monitor Logs workspace for all regions or to create multiple workspaces to cover various geographical regions. Each approach has advantages and disadvantages, including potential cross-region networking charges",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "Reliability"
},
{
"category": "Management",
- "checklist": "Azure Key Vault",
- "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Monitor",
"services": [
- "ASR",
- "AKV"
+ "Monitor",
+ "ARS",
+ "AzurePolicy",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Business continuity and disaster recovery",
- "text": "Key Vault's soft-deleted resources are retained for a set period of 90 calendar days. Familiarize yourself with the Key Vault's soft-delete guidance.",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operations"
},
{
"category": "Management",
- "checklist": "Azure Key Vault",
- "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
+ "service": "VM",
"services": [
- "ASR",
- "AKV",
- "Backup"
+ "Monitor",
+ "AzurePolicy",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Business continuity and disaster recovery",
- "text": "Understand Key Vault's backup limitations. Key Vault does not support the ability to backup more than 500 past versions of a key, secret, or certificate object. Attempting to backup a key, secret, or certificate object may result in an error. It is not possible to delete previous versions of a key, secret, or certificate.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operations"
},
{
"category": "Management",
- "checklist": "Azure Key Vault",
- "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
+ "service": "VM",
"services": [
- "ASR",
- "AKV",
- "Backup"
+ "VM"
],
- "severity": "Low",
- "subcategory": "Business continuity and disaster recovery",
- "text": "Key Vault doesn't currently provide a way to back up an entire key vault in a single operation and keys, secrets and certitificates must be backup indvidually. Familiarize yourself with the Key Vault's backup and restore guidance.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Operational compliance",
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operations"
},
{
"category": "Management",
- "checklist": "Azure Key Vault",
- "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
- "service": "Key Vault",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "service": "VM",
"services": [
- "EventHubs",
- "ASR",
- "AKV"
+ "VM"
],
"severity": "Medium",
- "subcategory": "Business continuity and disaster recovery",
- "text": "Purge protection is recommended when using keys for encryption to prevent data loss. Purge protection is an optional Key Vault behavior and is not enabled by default. Purge protection can only be enabled once soft-delete is enabled. It can be turned on via CLI, PowerShell or Portal.",
- "waf": "Reliability"
+ "subcategory": "Operational compliance",
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "d7e47431-76c8-4bdb-b55b-ce619e8a03f9",
- "link": "https://learn.microsoft.com/azure/openshift/howto-create-service-principal?pivots=aro-azurecli",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Network Watcher",
"services": [
- "Entra",
- "RBAC"
+ "Monitor",
+ "NetworkWatcher"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Create a service principal and its role assignments before creating the ARO clusters.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Use Network Watcher to proactively monitor traffic flows.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "7879424d-6267-486d-90b9-6c97be985190",
- "link": "https://learn.microsoft.com/azure/openshift/configure-azure-ad-ui",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"services": [
- "Entra"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Use AAD to authenticate users in your ARO cluster.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Use resource locks to prevent accidental deletion of critical shared services.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "adfec5f9-a82d-46e9-a8d1-5a0c7fed5d15",
- "link": "https://docs.openshift.com/container-platform/4.14/authentication/remove-kubeadmin.html",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/effect-deny",
"services": [
- "Entra"
+ "Monitor",
+ "RBAC",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "When using AAD authentication, remove kubeadmin user from the cluster.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Monitoring",
+ "text": "Use deny policies to supplement Azure role assignments. The combination of deny policies and Azure role assignments ensures the appropriate guardrails are in place to enforce who can deploy and configure resources and what resources they can deploy and configure.",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/deny-assignments?tabs=azure-portal",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "483835c9-86bb-4291-8155-a11475e39f54",
- "link": "https://docs.openshift.com/container-platform/4.13/applications/projects/working-with-projects.html",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
"services": [
- "Entra",
- "RBAC"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Define OpenShift projects to restrict RBAC privilege and isolate workloads in your cluster.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Include service and resource health events as part of the overall platform monitoring solution. Tracking service and resource health from the platform perspective is an important component of resource management in Azure.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-service-health/",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "0acccd97-9376-4bcd-a375-0ab2ab039da6",
- "link": "https://docs.openshift.com/container-platform/4.13/authentication/using-rbac.html",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
"services": [
- "Entra",
- "RBAC"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Define the required RBAC roles in OpenShift are scoped to either a project or a cluster.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Include alerts and action groups as part of the Azure Service Health platform to ensure that alerts or issues can be actioned.",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/incident-response-with-alerting-on-azure/7-actions-and-alert-processing-rules",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "d54d7c89-29db-4107-b532-5ae625ca44e4",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
+ "link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"services": [
- "Entra",
- "AKV"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Minimize the number of users who have administrator rights and secrets access.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Don't send raw log entries back to on-premises monitoring systems. Instead, adopt a principle that data born in Azure stays in Azure. If on-premises SIEM integration is required, then send critical alerts instead of logs.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/logging-and-reporting/",
+ "waf": "Operations"
},
{
- "category": "Identity and Access Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "685e2223-ace8-4bb1-8307-ca5f16f154e3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Monitor",
"services": [
- "Entra",
- "RBAC"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Use Privileged Identity Management in AAD for ARO users with privileged roles.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Use Azure Monitor Logs for insights and reporting.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
+ "waf": "Operations"
},
{
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "aa369282-9e7e-4216-8836-87af467a1f89",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"services": [
- "VNet",
- "Entra",
- "Subscriptions",
- "WAF",
- "Firewall",
- "DDoS"
+ "Monitor",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "DDoS",
- "text": "Use Azure DDoS Network/IP Protection to protect the virtual network you use for the ARO cluster unless you use Azure Firewall or WAF in a centralized subscription",
- "waf": "Security"
- },
- {
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "35bda433-24f1-4481-8533-182aa5174269",
- "link": "https://docs.openshift.com/container-platform/4.13/networking/routes/secured-routes.html",
- "services": [],
- "severity": "High",
- "subcategory": "Encryption",
- "text": "All web applications you configure to use an ingress should use TLS encryption and shouldn't allow access over unencrypted HTTP.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "When necessary, use shared storage accounts within the landing zone for Azure diagnostic extension log storage.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-extensions/",
+ "waf": "Operations"
},
{
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "44008ae7-d7e4-4743-876c-8bdbf55bce61",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "service": "Monitor",
"services": [
- "FrontDoor",
- "WAF"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Internet",
- "text": "Use Azure Front Door with WAF to securely publish ARO applications to the internet, especially in multi-region environments.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Use Azure Monitor alerts for the generation of operational alerts.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
+ "waf": "Operations"
},
{
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "9e8a03f9-7879-4424-b626-786d60b96c97",
- "link": "https://learn.microsoft.com/azure/openshift/howto-secure-openshift-with-front-door",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "859c3900-4514-41eb-b010-475d695abd74",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
"services": [
- "FrontDoor",
- "PrivateLink"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Internet",
- "text": "If exposing an app on ARO with Azure Front Door, use private link to connect Front Door with the ARO router.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Ensure that monitoring requirements have been assessed and that appropriate data collection and alerting configurations are applied.",
+ "training": "https://learn.microsoft.com/training/paths/az-104-monitor-backup-resources/",
+ "waf": "Operations"
},
{
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "be985190-4838-435c-a86b-b2912155a114",
- "link": "https://learn.microsoft.com/azure/openshift/howto-restrict-egress",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "Monitor",
"services": [
- "AzurePolicy",
- "NVA",
- "Firewall"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Internet",
- "text": "If your security policy requires you to inspect all outbound internet traffic that's generated in the ARO cluster, secure egress network traffic by using Azure Firewall or an NVA.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
+ "waf": "Operations"
},
{
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "75e39f54-0acc-4cd9-9937-6bcda3750ab2",
- "link": "https://learn.microsoft.com/azure/openshift/howto-create-private-cluster-4x",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor",
"services": [
+ "Monitor",
"AzurePolicy"
],
- "severity": "High",
- "subcategory": "Private access",
- "text": "If your security policy requires you to use a private IP address for the OpenShift API, deploy a private ARO cluster.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Deploy AMBA to establish monitoring for platform components of your landing zone - AMBA is a framework solution that is available and provides an easy way to scale alerting by using Azure Policy.",
+ "training": "https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/",
+ "waf": "Operations"
},
{
- "category": "Network topology and connectivity",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "ab039da6-d54d-47c8-a29d-b107d5325ae6",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "aa45be6a-8f2d-4896-b0e3-885e6e94e770",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview",
"services": [
- "ACR",
- "PrivateLink"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Private access",
- "text": "Use Azure Private Link to secure network connections to managed Azure services, including to Azure Container Registry.",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Use Azure Monitoring Agent (AMA). The Log Analytics agent is deprecated since August 31,2024",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-overview#installation",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "25ca44e4-685e-4222-9ace-8bb12307ca5f",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-enable-arc-enabled-clusters",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "0d83fd81-952c-4d47-a6cb-3a930925ef2e",
+ "link": "https://learn.microsoft.com/en-gb/azure/storage/common/redundancy-migration?tabs=portal",
"services": [
- "Monitor"
+ "Cost",
+ "Storage"
],
"severity": "High",
- "subcategory": "Operations",
- "text": "Establish a monitoring process using the inbuilt Prometheus, OpenShift Logging or Container Insights integration.",
- "waf": "Operations"
+ "subcategory": "Data Protection",
+ "text": "Ensure that storage accounts are zone or region redundant, Redundancy ensures storage accounts meet availability and durability targets amidst failures, weighing lower costs against higher availability. Locally redundant storage offers the least durability at the lowest cost.",
+ "training": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "waf": "Reliability"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "16f154e3-aa36-4928-89e7-e216183687af",
- "link": "https://docs.openshift.com/container-platform/4.13/cicd/pipelines/understanding-openshift-pipelines.html",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"services": [],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Automate the application delivery process through DevOps practices and CI/CD solutions, such as Pipelines/GitOps provided by OpenShift.",
- "waf": "Operations"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "467a1f89-35bd-4a43-924f-14811533182a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/design-principles/managed-services",
- "services": [],
- "severity": "Low",
- "subcategory": "Operations",
- "text": "Whenever possible, remove the service state from inside containers. Instead, use an Azure platform as a service (PaaS) that supports multiregion replication.",
- "waf": "Operations"
+ "subcategory": "Data Protection",
+ "text": "Enable cross-region replication in Azure for BCDR with paired regions.",
+ "training": "https://learn.microsoft.com/training/modules/provide-disaster-recovery-replicate-storage-data/",
+ "waf": "Reliability"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "1b7da8cf-aa66-4e15-b4d5-ada97dc3e232",
- "link": "https://learn.microsoft.com/azure/openshift/howto-create-a-storageclass",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Backup",
"services": [
- "Storage"
+ "Backup"
],
"severity": "Low",
- "subcategory": "Operations",
- "text": "Use RWX storage with inbuilt Azure Files storage class.",
- "waf": "Operations"
+ "subcategory": "Data Protection",
+ "text": "When using Azure Backup, use the correct backup types (GRS, ZRS & LRS) for your backup, as the default setting is GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Reliability"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "6bb235c7-05e1-4696-bded-fa8a4c8cdec4",
- "link": "https://docs.openshift.com/container-platform/4.13/nodes/clusters/nodes-cluster-limit-ranges.html",
- "services": [],
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "VM",
+ "services": [
+ "AzurePolicy",
+ "VM"
+ ],
"severity": "Medium",
- "subcategory": "Performance",
- "text": "Use pod requests and limits to manage the compute resources within a cluster.",
- "waf": "Performance"
+ "subcategory": "Operational compliance",
+ "text": "Use Azure guest policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "c620c30c-14ee-4b7f-9ae8-d9b3fec228e7",
- "link": "https://docs.openshift.com/container-platform/4.13/applications/quotas/quotas-setting-per-project.html",
- "services": [],
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Use Azure Policy's guest configuration features to audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "VM",
+ "services": [
+ "Monitor",
+ "AzurePolicy",
+ "VM"
+ ],
"severity": "Medium",
- "subcategory": "Performance",
- "text": "Enforce resource quotas on projects.",
- "waf": "Performance"
+ "subcategory": "Operational compliance",
+ "text": "Monitor VM security configuration drift via Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "87ab177a-db59-4f6b-a613-334fd09dc234",
- "link": "https://docs.openshift.com/container-platform/4.13/machine_management/applying-autoscaling.html",
- "services": [],
- "severity": "High",
- "subcategory": "Performance",
- "text": "Define ClusterAutoScaler and MachineAutoScaler to scale machines when your cluster runs out of resources to support more deployments.",
- "waf": "Performance"
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
+ "services": [
+ "ACR",
+ "ASR",
+ "VM"
+ ],
+ "severity": "Medium",
+ "subcategory": "Protect and Recover",
+ "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "19db6128-1269-4040-a4ba-4d3e0804276d",
- "link": "https://learn.microsoft.com/azure/openshift/support-policies-v4#supported-virtual-machine-sizes",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b2ab13ad-a6e5-45d7-b8a2-adb117d6326a",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
"services": [
- "VM"
+ "ASR"
],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Use virtual machine sizes that are large enough to contain multiple container instances so you get the benefits of increased density, but not so large that your cluster can't handle the workload of a failing node.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Protect and Recover",
+ "text": "Use native PaaS service disaster recovery capabilities. Perform failover testing with these capabilities.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/explore-iaas-paas-platform-tools-for-high-availability-disaster-recovery/",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "4b98b15c-8b31-4aa5-aceb-58889135e227",
- "link": "https://docs.openshift.com/container-platform/4.13/machine_management/deploying-machine-health-checks.html",
- "services": [],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Deploy machine health checks to automatically repair damaged machines in a machine pool.",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "896d31b6-6c67-4ba5-a119-c08e8f5d587c",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-metric-alerts",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "Backup",
"services": [
- "Monitor"
+ "Backup"
],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Use an alerting system to provide notifications when things need direct action: Container Insights metric alerts or in-built Alerting UI.",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "7e9ced16-acd1-476e-b9b2-41a998a57ae7",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview#availability-zones",
- "services": [],
- "severity": "High",
- "subcategory": "Reliability",
- "text": "Ensure that the cluster is created in a region that supports AZs and create a machine set for each AZ.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Protect and Recover",
+ "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "7b997e71-1b7d-4a8c-baa6-6e15d4d5ada9",
- "link": "https://docs.openshift.com/container-platform/4.13/machine_management/creating-infrastructure-machinesets.html",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "WAF",
"services": [
- "AKS"
+ "WAF",
+ "AppGW",
+ "FrontDoor"
],
- "severity": "Low",
- "subcategory": "Reliability",
- "text": "Create infrastructure machine sets to hold infrastructure components. Apply specific Kubernetes labels to these machines and then update the infrastructure components to run on only those machines.",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "App delivery",
+ "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "7dc3e232-6bb2-435c-905e-1696fdedfa8a",
- "link": "https://learn.microsoft.com/azure/openshift/howto-create-a-backup#create-a-backup-with-velero-to-include-snapshots",
+ "category": "Management",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "WAF",
"services": [
- "Backup"
+ "WAF",
+ "Sentinel",
+ "AppGW",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Reliability",
- "text": "Create application backup and plan for restore and include persistent volumes in the backup.",
- "waf": "Reliability"
+ "subcategory": "App delivery",
+ "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
+ "waf": "Operations"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "81c12318-1a64-4174-8583-3fb4ae3c2df7",
- "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-priority.html",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b86ad884-08e3-4727-94b8-75ba18f20459",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/security-control-incident-response",
"services": [],
- "severity": "Low",
- "subcategory": "Reliability",
- "text": "Use pod priorities, so that in case of limited resources the most critical pods will run.",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Access control",
+ "text": "Determine the incident response plan for Azure services before allowing it into production.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-incident-readiness/",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "43166c3b-cbe0-45bb-b209-d4a0da577784",
- "link": "https://docs.openshift.com/container-platform/4.13/architecture/admission-plug-ins.html",
- "services": [
- "AzurePolicy"
- ],
- "severity": "Low",
- "subcategory": "Security",
- "text": "Regulate cluster functions using admission plug-ins, which are commonly used to enforce security policy, resource limitations, or configuration requirements.",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "01365d38-e43f-49cc-ad86-8266abca264f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Access control",
+ "text": "Apply a zero-trust approach for access to the Azure platform.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-zero-trust-best-practice-frameworks/",
"waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "24d21678-5d2f-4a56-a56a-d48408fe8273",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "Key Vault",
"services": [
- "ACR"
+ "AKV"
],
- "severity": "Low",
- "subcategory": "Security",
- "text": "Store your container images in Azure Container Registry and geo-replicate the registry to each region.",
+ "severity": "High",
+ "subcategory": "Encryption and keys",
+ "text": "Use Azure Key Vault to store your secrets and credentials.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "4c486ba2-80dc-4059-8cf7-5ee8e1309ccc",
- "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-vertical-autoscaler.html",
- "services": [],
- "severity": "Medium",
- "subcategory": "Workload",
- "text": "Optimize the CPU and memory request values, and maximize the efficiency of the cluster resources using vertical pod autoscaler.",
- "waf": "Performance"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "d579366b-cda2-4750-aa1a-bfe9d55d14c3",
- "link": "https://docs.openshift.com/container-platform/4.13/applications/application-health.html",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "service": "Key Vault",
"services": [
- "Monitor"
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Workload",
- "text": "Add health probes to your pods to monitor application health. Make sure pods contain livenessProbe and readinessProbe. Use Startup probes to determine the point at which the application has started up.",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "c4929cb1-b3d1-4325-ae12-4ba34d0685ed",
- "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-autoscaling.html",
- "services": [],
- "severity": "Medium",
- "subcategory": "Workload",
- "text": "Scale pods to meet demand using horizontal pod autoscaler.",
- "waf": "Reliability"
+ "subcategory": "Encryption and keys",
+ "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "dce9be3b-b0dd-4b3b-95fb-2ec14eeaa359",
- "link": "https://docs.openshift.com/container-platform/4.13/nodes/pods/nodes-pods-configuring.html#nodes-pods-pod-distruption-about_nodes-pods-configuring",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Cost"
+ "AKV",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Workload",
- "text": "Use disruption budgets to ensure the required number of pod replicas exist to handle expected application load.",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "2829e2ed-b217-4367-9aff-6791b4935ada",
- "link": "https://docs.openshift.com/container-platform/4.13/nodes/scheduling/nodes-scheduler-pod-topology-spread-constraints.html",
- "services": [],
- "severity": "Medium",
- "subcategory": "Workload",
- "text": "Use pod topology constraints to automatically schedule pods on nodes throughout the cluster.",
- "waf": "Reliability"
+ "subcategory": "Encryption and keys",
+ "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "fea1dbf3-dd95-4d48-a7c8-91dcb1f7d575",
- "link": "https://learn.microsoft.com/azure/openshift/intro-openshift#service-level-agreement",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "RBAC",
+ "Entra"
+ ],
"severity": "Medium",
- "subcategory": "Availablity",
- "text": "Leverage Current ARO SLA - 99.95 into BCDR planning",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "b95e06e1-58e2-4ea3-a92c-2de6e2065b3a",
- "link": "https://www.redhat.com/rhdc/managed-files/pa-getting-started-azure-openshift-ebook-f20686-201911-en_0.pdf",
- "services": [],
- "severity": "High",
- "subcategory": "Cluster Design",
- "text": "Run user workloads on the worker nodes, not the control plane nodes",
- "waf": "Reliability"
+ "subcategory": "Encryption and keys",
+ "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Azure Red Hat OpenShift",
- "description": "Create infrastructure machine sets to hold infrastructure components. Apply specific Kubernetes labels to these machines and then update the infrastructure components to run on only those machines",
- "guid": "76af4a69-1e88-439a-ba46-667e13c10567",
- "link": "https://learn.microsoft.com/azure/openshift/howto-segregate-machinesets",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "VNet",
- "AKS"
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Cluster Design",
- "text": "Isolate workloads into worker nodes running in individual subnets as needed",
- "waf": "Reliability"
+ "subcategory": "Encryption and keys",
+ "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "785c6fe9-6c96-4ad8-a44c-f3b2b38c886b",
- "link": "https://learn.microsoft.com/azure/openshift/howto-create-a-backup",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Backup"
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup a cluster state for stateful workload scenarios to a paired region",
- "waf": "Reliability"
+ "subcategory": "Encryption and keys",
+ "text": "Establish an automated process for key and certificate rotation.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "a2c02149-9014-4a5d-9ce5-74dccbd9792a",
- "link": "https://access.redhat.com/documentation/red_hat_openshift_container_storage/4.4/html/deploying_and_managing_openshift_container_storage_on_microsoft_azure/deploying-openshift-container-storage-on-microsoft-azure_rhocs",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Storage",
- "ACR"
+ "AKV",
+ "PrivateLink",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Data Store",
- "text": "If container storage is required, ensure availability across regions if needed: Using RWX storage with inbuilt Azure Files storage class. Using CSI Drivers for storage provisioning",
- "waf": "Reliability"
+ "subcategory": "Encryption and keys",
+ "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "6bcca2b4-fea1-4dbf-9dd9-5d48c7c891dc",
- "link": "https://docs.openshift.com/aro/3/dev_guide/persistent_volumes.html",
- "services": [],
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "Monitor",
+ "Entra"
+ ],
"severity": "Medium",
- "subcategory": "Data Store",
- "text": "Whenever possible, move state out of containers and into external databases that support multi-region replication. Avoid Persistent Volumes",
- "waf": "Reliability"
- },
- {
- "category": "Platform Automation",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "42324ece-81c1-4231-a1a6-417415833fb4",
- "link": "https://docs.openshift.com/container-platform/4.13/applications/deployments/route-based-deployment-strategies.html",
- "services": [],
- "severity": "Low",
- "subcategory": "Workload",
- "text": "Consider blue/green or canary strategies to deploy new releases of application.",
- "waf": "Operations"
- },
- {
- "category": "Platform Automation",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "ae3c2df7-4316-46c3-acbe-05bbe209d4a0",
- "link": "https://docs.openshift.com/container-platform/4.13/cicd/gitops/understanding-openshift-gitops.html",
- "services": [],
- "severity": "Low",
- "subcategory": "Workload",
- "text": "Consider using Red Hat OpenShift GitOps. Red Hat OpenShift GitOps uses Argo CD to maintain cluster resources and support application CI/CD.",
- "waf": "Operations"
+ "subcategory": "Encryption and keys",
+ "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "da577784-24d2-4167-a5d2-fa56c56ad484",
- "link": "https://learn.microsoft.com/azure/openshift/support-lifecycle",
- "services": [],
- "severity": "High",
- "subcategory": "Control plane",
- "text": "Keep your clusters on the latest OpenShift version to avoid potential security or upgrade issues.",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "AzurePolicy"
+ ],
+ "severity": "Medium",
+ "subcategory": "Encryption and keys",
+ "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "08fe8273-4c48-46ba-880d-c0591cf75ee8",
- "link": "https://learn.microsoft.com/azure/azure-arc/kubernetes/quickstart-connect-cluster",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "16183687-a047-47a2-8994-5bda43334f24",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest",
"services": [
- "AKS",
- "Arc"
+ "AKV"
],
- "severity": "High",
- "subcategory": "Control plane",
- "text": "Connect Azure Red Hat OpenShift clusters to Azure Arc-enabled Kubernetes.",
+ "severity": "Medium",
+ "subcategory": "Encryption and keys",
+ "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "e1309ccc-d579-4366-acda-2750aa1abfe9",
- "link": "https://docs.openshift.com/container-platform/4.10/security/encrypting-etcd.html",
- "services": [],
- "severity": "Low",
- "subcategory": "Encryption",
- "text": "For Azure Red Hat OpenShift 4 clusters, etcd data isn't encrypted by default, but it's recommended to enable etcd encryption to provide another layer of data security.",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "services": [
+ "AKV"
+ ],
+ "severity": "Medium",
+ "subcategory": "Encryption and keys",
+ "text": "Use an Azure Key Vault per application per environment per region.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "d55d14c3-c492-49cb-8b3d-1325ae124ba3",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"services": [
- "Defender",
- "AKS",
- "Arc"
+ "ACR",
+ "AKV",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Posture",
- "text": "Use Microsoft Defender for Containers supported via Arc-enabled Kubernetes to secure clusters, containers, and applications.",
+ "subcategory": "Encryption and keys",
+ "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "4d0685ed-dce9-4be3-ab0d-db3b55fb2ec1",
- "link": "https://learn.microsoft.com/azure/azure-arc/kubernetes/tutorial-akv-secrets-provider",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "service": "Key Vault",
"services": [
- "AKS",
- "AKV",
- "Arc"
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Secrets",
- "text": "For applications that require access to sensitive information, use a service principal and the AKV Secrets Provider with the extension for Arc-enabled Kubernetes clusters.",
+ "subcategory": "Encryption and keys",
+ "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "4eeaa359-2829-4e2e-bb21-73676aff6791",
- "link": "https://learn.microsoft.com/azure/aks/developer-best-practices-pod-security#secure-pod-access-to-resources",
- "services": [],
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "service": "Entra",
+ "services": [
+ "Entra"
+ ],
"severity": "Medium",
- "subcategory": "Workload",
- "text": "Secure pod access to resources. Provide the least number of permissions, and avoid using root or privileged escalation.",
+ "subcategory": "Operations",
+ "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "b4935ada-4232-44ec-b81c-123181a64174",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes#install-azure-policy-extension-for-azure-arc-enabled-kubernetes",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4e3ab369-3829-4e7e-9161-83687a0477a2",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal",
"services": [
"Monitor",
- "AzurePolicy"
+ "ARS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Workload",
- "text": "Monitor and enforce configuration by using the Azure Policy Extension.",
+ "subcategory": "Operations",
+ "text": "Export Azure activity logs to Azure Monitor Logs for long-term data retention. Export to Azure Storage for long-term storage beyond two years, if necessary.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "15833fb4-ae3c-42df-9431-66c3bcbe05bb",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "service": "Defender",
"services": [
+ "Subscriptions",
"Defender"
],
"severity": "High",
- "subcategory": "Workload",
- "text": "Scan your images for vulnerabilities with Microsoft Defender or any other image scanning solution.",
+ "subcategory": "Operations",
+ "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "Security"
},
{
"category": "Security",
- "checklist": "Azure Red Hat OpenShift",
- "guid": "e209d4a0-da57-4778-924d-216785d2fa56",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "service": "Defender",
"services": [
- "ACR",
- "Subscriptions"
+ "Subscriptions",
+ "Defender"
],
- "severity": "Low",
- "subcategory": "Workload",
- "text": "Deploy a dedicated and private instance of Azure Container Registry to each landing zone subscription.",
+ "severity": "High",
+ "subcategory": "Operations",
+ "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "service": "Defender",
"services": [
- "Entra",
"Subscriptions",
- "AVS"
+ "Defender"
],
"severity": "High",
- "subcategory": "Identity",
- "text": "Ensure ADDS domain controller(s) are deployed in the identity subscription in native Azure",
+ "subcategory": "Operations",
+ "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "service": "VM",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Operations",
+ "text": "Enable Endpoint Protection on IaaS Servers.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
+ "waf": "Security"
+ },
+ {
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "service": "VM",
"services": [
- "Entra",
- "AVS"
+ "Monitor",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "Ensure ADDS sites and services is configured to keep authentication requests from Azure-based resources (including Azure VMware Solution) local to Azure",
+ "subcategory": "Operations",
+ "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"services": [
- "Entra",
- "AVS"
+ "Monitor",
+ "Entra"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Ensure that vCenter is connected to ADDS to enable authentication based on 'named user accounts'",
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
"services": [
- "Entra",
- "AVS"
+ "ACR",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Ensure that the connection from vCenter to ADDS is using a secure protocol (LDAPS)",
+ "severity": "High",
+ "subcategory": "Operations",
+ "text": "Centralized threat detection with correlated logs - consolidate security data in a central location where it can be correlated across various services via SIEM (security information and event management)",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
+ "service": "Entra",
"services": [
- "Entra",
- "AVS"
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)",
+ "subcategory": "Operations",
+ "text": "For Sovereign Landing Zone, enable transparancy logs on the Entra ID tenant.",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "service": "Entra",
"services": [
- "Entra",
- "AVS"
+ "Entra"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Ensure that NSX-Manager is integrated with an external Identity provider (LDAPS)",
+ "severity": "Medium",
+ "subcategory": "Operations",
+ "text": "For Sovereign Landing Zone, enable customer Lockbox on the Entra ID tenant.",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
+ "link": "https://learn.microsoft.com/azure/event-grid/set-alerts",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "Monitor"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Has an RBAC model been created for use within VMware vSphere",
+ "severity": "Low",
+ "subcategory": "Operations",
+ "text": "Use an Azure Event Grid-based solution for log-oriented, real-time alerts.",
+ "training": "https://learn.microsoft.com/training/modules/azure-event-grid/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Storage",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "RBAC permissions should be granted on ADDS groups and not on specific users",
+ "severity": "High",
+ "subcategory": "Overview",
+ "text": "Enable secure transfer to storage accounts.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
+ "service": "Storage",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "Storage"
],
"severity": "High",
- "subcategory": "Identity",
- "text": "RBAC permissions on the Azure VMware Solution resource in Azure are 'locked down' to a limited set of owners only",
+ "subcategory": "Overview",
+ "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
"waf": "Security"
},
{
- "category": "Identity",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6f704104-85c1-441f-96d3-c9819911645e",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "Entra"
],
"severity": "High",
- "subcategory": "Identity",
- "text": "Ensure all custom roles are scoped with CloudAdmin permitted authorizations",
+ "subcategory": "Secure privileged access",
+ "text": "Separate privileged admin accounts for Azure administrative tasks.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-secure-privileged-access/",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
- "services": [
- "AVS"
- ],
- "severity": "High",
- "subcategory": "Architecture",
- "text": "Is the correct Azure VMware Solution connectivity model selected for the customer use case at hand",
- "waf": "Performance"
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "9a19bf39-c95d-444c-9c89-19ca1f6d5215",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Service enablement framework",
+ "text": "Plan how new azure services will be implemented.",
+ "waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
- "services": [
- "AVS",
- "ExpressRoute",
- "VPN",
- "Monitor",
- "NetworkWatcher"
- ],
+ "category": "Security",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ae514b93-3d45-485e-8112-9bd7ba012f7b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Service enablement framework",
+ "text": "Plan how service request will be fulfilled for Azure services.",
+ "waf": "Security"
+ },
+ {
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops",
+ "services": [],
"severity": "High",
- "subcategory": "Monitoring",
- "text": "Ensure ExpressRoute or VPN connections from on-premises to Azure are monitored using 'connection monitor'",
+ "subcategory": "DevOps Team Topologies",
+ "text": "Ensure you have a cross functional DevOps Platform Team to build, manage and maintain your Azure Landing Zone architecture.",
+ "training": "https://learn.microsoft.com/training/modules/choose-an-agile-approach/",
"waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
- "services": [
- "AVS",
- "ExpressRoute",
- "Monitor",
- "VM",
- "NetworkWatcher"
- ],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Ensure a connection monitor is created from an Azure native resource to an Azure VMware Solution virtual machine to monitor the Azure VMware Solution back-end ExpressRoute connection",
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "634146bf-7085-4419-a7b5-f96d2726f6da",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "DevOps Team Topologies",
+ "text": "Aim to define functions for Azure Landing Zone Platform team.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a9e65070-c59e-4112-8bf6-c11364d4a2a5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations",
"services": [
- "Monitor",
- "AVS",
- "VM",
- "NetworkWatcher"
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Ensure a connection monitor is created from an on-premises resource to an Azure VMware Solution virtual machine to monitor end-2-end connectivity",
+ "severity": "Low",
+ "subcategory": "DevOps Team Topologies",
+ "text": "Aim to define functions for application workload teams to be self-sufficient and not require DevOps Platform Team support. Achieve this through the use of custom RBAC role.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-work-git-for-enterprise-devops/",
"waf": "Operations"
},
{
- "category": "Networking",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
- "services": [
- "ARS",
- "AVS"
- ],
- "severity": "High",
- "subcategory": "Routing",
- "text": "When route server is used, ensure no more then 1000 routes are propagated from route server to ExR gateway to on-premises (ARS limit).",
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "165eb5e9-b434-448a-9e24-178632186212",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "DevOps Team Topologies",
+ "text": "Use a CI/CD pipeline to deploy IaC artifacts and ensure the quality of your deployment and Azure environments.",
+ "training": "https://learn.microsoft.com/training/modules/manage-multiple-environments-using-bicep-azure-pipelines/",
"waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
- "services": [
- "Entra",
- "RBAC",
- "AVS"
- ],
- "severity": "High",
- "subcategory": "Security (identity)",
- "text": "Is Privileged Identity Management implemented for roles managing the Azure VMware Solution resource in the Azure Portal (no standing permissions allowed)",
- "waf": "Security"
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "0cadb8c7-8fa5-4fbf-8f39-d1fadb3b0460",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "DevOps Team Topologies",
+ "text": "Include unit tests for IaC and application code as part of your build process.",
+ "training": "https://learn.microsoft.com/training/modules/run-quality-tests-build-pipeline/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "service": "Key Vault",
"services": [
- "Entra",
- "RBAC",
- "AVS"
+ "AKV",
+ "VM"
],
"severity": "High",
- "subcategory": "Security (identity)",
- "text": "Privileged Identity Management audit reporting should be implemented for the Azure VMware Solution PIM roles",
- "waf": "Security"
+ "subcategory": "DevOps Team Topologies",
+ "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a52e0c98-76b9-4a09-a1c9-6b2babf22ac4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending",
"services": [
- "Entra",
- "AVS"
+ "Subscriptions"
],
- "severity": "Medium",
- "subcategory": "Security (identity)",
- "text": "If using Privileged Identity Management is being used, ensure that a valid Entra ID enabled account is created with a valid SMTP record for Azure VMware Solution Automatic Host replacement notifications. (standing permissions required)",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "DevOps Team Topologies",
+ "text": "Implement automation for new landing zone for applications and workloads through subscription vending.",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
- "services": [
- "Entra",
- "AVS"
- ],
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
+ "services": [],
"severity": "High",
- "subcategory": "Security (identity)",
- "text": "Limit use of CloudAdmin account to emergency access only",
- "waf": "Security"
+ "subcategory": "Development Lifecycle",
+ "text": "Ensure a version control system is used for source code of applications and IaC developed. Microsoft recommends Git.",
+ "training": "https://learn.microsoft.com/training/paths/intro-to-vc-git/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
- "services": [
- "Entra",
- "RBAC",
- "AVS"
- ],
- "severity": "Medium",
- "subcategory": "Security (identity)",
- "text": "Create custom RBAC roles in vCenter to implement a least-privilege model inside vCenter",
- "waf": "Security"
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c7245dd4-af8a-403a-8bb7-890c1a7cfa9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Development Lifecycle",
+ "text": "Follow a branching strategy to allow teams to collaborate better and efficiently manage version control of IaC and application Code. Review options such as Github Flow.",
+ "training": "https://learn.microsoft.com/training/modules/manage-git-branches-workflows/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
- "services": [
- "Entra",
- "AVS"
- ],
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "12aeea20-9165-4b3e-bdf2-6795fcd3cdbe",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle",
+ "services": [],
"severity": "Medium",
- "subcategory": "Security (identity)",
- "text": "Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX) credentials",
- "waf": "Security"
- },
- {
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
- "services": [
- "Entra",
- "AVS",
- "VM"
- ],
- "severity": "High",
- "subcategory": "Security (identity)",
- "text": "Use a centralized identity provider to be used for workloads (VM's) running on Azure VMware Solution",
- "waf": "Security"
+ "subcategory": "Development Lifecycle",
+ "text": "Adopt a pull request strategy to help keep control of code changes merged into branches.",
+ "training": "https://learn.microsoft.com/training/modules/review-azure-infrastructure-changes-using-bicep-pull-requests/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
- "services": [
- "AVS"
- ],
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2676ae46-65ca-444e-8695-fdddeace4cb1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform",
+ "services": [],
"severity": "Medium",
- "subcategory": "Security (network)",
- "text": "Is East-West traffic filtering implemented within NSX-T",
- "waf": "Security"
+ "subcategory": "Development Lifecycle",
+ "text": "Establish a process for using code to implement quick fixes. Always register quick fixes in your team's backlog so each fix can be reworked at a later point, and you can limit technical debt.",
+ "training": "https://learn.microsoft.com/training/modules/branch-merge-git/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
- "services": [
- "AppGW",
- "AVS",
- "Firewall"
- ],
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code",
+ "services": [],
"severity": "High",
- "subcategory": "Security (network)",
- "text": "Workloads on Azure VMware Solution are not directly exposed to the internet. Traffic is filtered and inspected by Azure Application Gateway, Azure Firewall or 3rd party solutions",
- "waf": "Security"
+ "subcategory": "Development Strategy",
+ "text": "Leverage Declarative Infrastructure as Code Tools such as Azure Bicep, ARM Templates or Terraform to build and maintain your Azure Landing Zone architecture. Both from a Platform and Application workload perspective.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-infrastructure-as-code-using-bicep/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
- "services": [
- "AVS"
- ],
+ "category": "Platform Automation and DevOps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure",
+ "services": [],
"severity": "High",
- "subcategory": "Security (network)",
- "text": "Auditing and logging is implemented for inbound internet requests to Azure VMware Solution and Azure VMware Solution based workloads",
- "waf": "Security"
+ "subcategory": "Security",
+ "text": "Integrate security into the already combined process of development and operations in DevOps to mitigate risks in the innovation process.",
+ "training": "https://learn.microsoft.com/training/paths/az-400-implement-security-validate-code-bases-compliance/",
+ "waf": "Operations"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "fda1dae2-dc95-4d48-a6c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/sql-data-warehouse/backup-and-restore#geo-backups-and-disaster-recovery",
"services": [
- "Monitor",
- "AVS"
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Security (network)",
- "text": "Session monitoring is implemented for outbound internet connections from Azure VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious activity",
- "waf": "Security"
+ "subcategory": "Backup",
+ "text": "Enable Geo Backup ",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
- "services": [
- "VNet",
- "AVS",
- "ExpressRoute",
- "VPN",
- "DDoS"
- ],
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "89e558b9-37d4-4974-b111-2dbd7baf12e7",
+ "link": "https://techcommunity.microsoft.com/t5/azure-synapse-analytics-blog/how-to-use-ci-cd-integration-to-automate-the-deploy-of-a-synapse/ba-p/2248060",
+ "services": [],
"severity": "Medium",
- "subcategory": "Security (network)",
- "text": "Is DDoS standard protection enabled on ExR/VPN Gateway subnet in Azure",
- "waf": "Security"
+ "subcategory": "DevOps",
+ "text": "Integrate with Azure DevOps to deploy Multiple environments",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
- "services": [
- "AVS"
- ],
- "severity": "Medium",
- "subcategory": "Security (network)",
- "text": "Use a dedicated privileged access workstation (PAW) to manage Azure VMware Solution, vCenter, NSX manager and HCX manager",
- "waf": "Security"
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "b94ef6e0-47d2-4da2-a82b-1cd6d2f54b29",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "services": [],
+ "severity": "High",
+ "subcategory": "DR",
+ "text": "BCDR for Azure Synapse pipelines ",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
- "services": [
- "AVS",
- "Defender"
- ],
- "severity": "Medium",
- "subcategory": "Security (guest/VM)",
- "text": "Enable Advanced Threat Detection (Microsoft Defender for Cloud aka ASC) for workloads running on Azure VMware Solution",
- "waf": "Security"
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "769e3a69-1e88-438a-a936-667e13c00567",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "services": [],
+ "severity": "High",
+ "subcategory": "DR",
+ "text": "Use Zone Redudant pipelines in regions supporting Availablity Zones",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
- "services": [
- "AVS",
- "Arc"
- ],
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "4b1e944a-4598-437e-b7ad-6c6d3b365a5c",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/cicd/source-control",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "DevOps",
+ "text": "Create Scripts for all DLL Statements and save in Git Repository ",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "7acbe48a-be54-4cd7-af2e-87768358c559",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/spark/apache-spark-development-using-notebooks",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "DevOps",
+ "text": "When working with Spark Notebooks, make sure to integrate with Git or Azure DevOps",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "775c6ee9-5b86-4ad8-a44c-e3b2b38b875b",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/sql-data-warehouse/backup-and-restore",
+ "services": [],
"severity": "Medium",
- "subcategory": "Security (guest/VM)",
- "text": "Use Azure ARC for Servers to properly govern workloads running on Azure VMware Solution using Azure native technologies (Azure ARC for Azure VMware Solution is not yet available)",
- "waf": "Security"
+ "subcategory": "High Availablity",
+ "text": "Use Dedicated pools",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "a1cf2049-9013-4a5d-9ce4-74dbcbd8682a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/analytics/azure-synapse",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "DR",
+ "text": "Use Database restore points for Azure Synapse",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "6abca2a4-fda1-4dae-8dc9-5d48c6c791dc",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/sql/on-demand-workspace-overview",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "High Availablity",
+ "text": "Use Serverless Pools when required",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "a0f6c565-89e5-458b-a37d-4974e1112dbd",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/quickstart-deployment-template-workspaces",
"services": [
- "AVS",
- "SQL"
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Security (guest/VM)",
- "text": "Ensure workloads on Azure VMware Solution use sufficient data encryption during run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is default)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "DevOps",
+ "text": "Use Infrastructure as a Code template to do repeatable deployments",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
+ "category": "Operations Management",
+ "checklist": "Azure Synapse Review Checklist",
+ "guid": "7baf12e7-b94e-4f6e-847d-2da2982b1cd6",
+ "link": "https://learn.microsoft.com/azure/cosmos-db/synapse-link",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "High Availablity",
+ "text": "Make sure to re-eshtablish any Synapse Links",
+ "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Leverage zone-redundancy to ensure high availability in the event of zone-level failures. Use Premium V2/V3 or Isolated v2 tiers, which provide support for zone-redundant deployments and ensure minimal downtime during disasters.",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
"services": [
- "AVS",
- "AKV"
+ "AppSvc"
],
"severity": "Low",
- "subcategory": "Security (guest/VM)",
- "text": "When in-guest encryption is used, store encryption keys in Azure Key vault when possible",
- "waf": "Security"
+ "subcategory": "High Availability",
+ "text": "Implement a baseline highly available zone-redundant web application architecture. Ensure your Azure App Service is on Premium V2/V3 or Isolated v2 tiers for zone-redundant support.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Leverage staging slots for zero-downtime deployments and automated backups to ensure disaster recovery. Choose the appropriate tier (Standard or Premium) based on the number of slots and disaster recovery requirements.",
+ "graph": "resources | where type =~ 'microsoft.web/serverfarms' | extend compliant = (sku.tier == 'Premium' or sku.tier == 'Standard') | distinct id,compliant",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "Security (guest/VM)",
- "text": "Consider using extended security update support for workloads running on Azure VMware Solution (Azure VMware Solution is eligible for ESU)",
- "waf": "Security"
+ "subcategory": "High Availability",
+ "text": "Use Premium and Standard tiers for staging slots and automated backups. Align your backup retention period with disaster recovery needs.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Availability Zones provide physical isolation across datacenters in a region, reducing downtime during outages. Verify your region supports Availability Zones and use Premium V2/V3 tiers for zone-redundant deployments.",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-service",
+ "service": "App Services",
"services": [
- "AVS"
+ "ACR",
+ "AppSvc"
],
"severity": "High",
- "subcategory": "Governance (platform)",
- "text": "Ensure that the appropriate vSAN Data redundancy method is used (RAID specification)",
+ "subcategory": "High Availability",
+ "text": "Leverage Availability Zones where regionally applicable (Premium V2/V3 tier required). Check region support for Availability Zones.",
"waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "description": "Enable health checks to detect unhealthy instances in real-time and automatically replace them to maintain high availability and application reliability.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.HealthCheckPath != '') | distinct id,compliant",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"services": [
- "Storage",
- "AVS",
- "AzurePolicy"
+ "AppSvc",
+ "Monitor"
+ ],
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Implement health checks to monitor and detect issues with App Service instances. Health checks enable automatic instance replacement on failure.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "description": "Follow best practices for configuring backups and restores in Azure App Service and ASE to guarantee data availability and ensure recovery during disaster scenarios.",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/azure/app-service/manage-backup",
+ "service": "App Services",
+ "services": [
+ "AppSvc",
+ "Backup"
],
"severity": "High",
- "subcategory": "Governance (platform)",
- "text": "Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage needs",
+ "subcategory": "Multi-tenant service",
+ "text": "Refer to backup and restore best practices for Azure App Service and App Service Environments (ASE) to ensure data availability and recovery.",
"waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Ensure high availability by incorporating scaling, fault tolerance, monitoring, and zone redundancy into your App Service architecture. Leverage health checks and availability zones to maintain uptime.",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS"
+ "AppSvc",
+ "Monitor"
],
"severity": "High",
- "subcategory": "Governance (platform)",
- "text": "Ensure that you have requested enough quota, ensuring you have considered growth and Disaster Recovery requirement",
+ "subcategory": "High Availability",
+ "text": "Implement Azure App Service reliability best practices, including auto-scaling, fault tolerance, health checks, and zone redundancy.",
"waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Prepare for disaster recovery by implementing region failover strategies. Utilize active-active and active-passive configurations, automated failover, and Infrastructure as Code (IaC) for seamless failover during outages.",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "Governance (platform)",
- "text": "Ensure that access constraints to ESXi are understood, there are access limits which might affect 3rd party solutions.",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "High Availability",
+ "text": "Familiarize with App Service region failover, including active-active and active-passive configurations, automated failover, and IaC deployment.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Azure App Service offers built-in reliability features, including scaling, fault tolerance, and service-level agreements (SLAs). Leverage these features to maintain consistent performance during outages.",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-app-service",
+ "service": "App Services",
"services": [
- "AVS",
- "AzurePolicy"
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Governance (platform)",
- "text": "Ensure that you have a policy around ESXi host density and efficiency, keeping in mind the lead time for requesting new nodes",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Familiarize with reliability support in Azure App Service, including scaling options, SLAs, and automated recovery mechanisms.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
+ "category": "BC and DR",
+ "checklist": "Azure App Service Review",
+ "description": "Enabling 'Always On' for Function Apps ensures that the app does not go idle, maintaining its availability and responsiveness at all times.",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"services": [
- "AVS",
- "Cost"
+ "AppSvc"
],
"severity": "Medium",
- "subcategory": "Governance (platform)",
- "text": "Ensure a good cost management process is in place for Azure VMware Solution - Azure Cost Management can be used",
- "waf": "Cost"
+ "subcategory": "High Availability",
+ "text": "Ensure 'Always On' is enabled for Function Apps running on App Service plans to prevent idling and ensure continuous availability.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "description": "Health checks monitor the health of App Service instances, enabling automatic replacement of unhealthy instances to maintain high availability.",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"services": [
- "AVS",
- "Cost"
+ "AppSvc",
+ "Monitor"
],
- "severity": "Low",
- "subcategory": "Governance (platform)",
- "text": "Are Azure reserved instances used to optimize cost for using Azure VMware Solution",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Monitor App Service instances using Health checks to detect unhealthy instances and automatically replace them.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Governance (platform)",
- "text": "Consider the use of Azure Private-Link when using other Azure Native Services",
- "waf": "Security"
+ "subcategory": "Monitoring",
+ "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests, ensuring proactive detection of performance issues and downtime.",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Governance (platform)",
- "text": "Ensure all required resource reside within the same Azure availability zone(s)",
- "waf": "Performance"
+ "severity": "Low",
+ "subcategory": "Monitoring",
+ "text": "Use Application Insights Standard test to monitor availability and responsiveness of web app or website",
+ "waf": "Reliability"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Key Vault ensures secrets are encrypted, securely stored, and accessed only by authorized applications. It supports audit logging, and secret versioning, and reduces the risk of accidental exposure of sensitive information.",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"services": [
- "AVS",
- "VM",
- "Defender"
+ "AppSvc",
+ "AKV"
],
- "severity": "Medium",
- "subcategory": "Governance (guest/VM)",
- "text": "Enable Microsoft Defender for Cloud for Azure VMware Solution guest VM workloads",
+ "severity": "High",
+ "subcategory": "Data Protection",
+ "text": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a secure, managed, and audited environment for storing secrets, and integrates seamlessly with App Service via App Service Key Vault References for enhanced security.",
"waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Managed Identity eliminates the need for hard-coded credentials by allowing App Service to authenticate to Azure Key Vault securely. This reduces the risk of credential exposure and simplifies secret management for enhanced security.",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"services": [
- "AVS",
- "VM",
- "Arc"
+ "AppSvc",
+ "AKV",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Governance (guest/VM)",
- "text": "Use Azure Arc enabled servers to manage your Azure VMware Solution guest VM workloads",
+ "severity": "High",
+ "subcategory": "Data Protection",
+ "text": "Use Managed Identity to securely connect to Azure Key Vault for accessing secrets, through App Service Key Vault References.",
"waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Storing TLS certificates in Azure Key Vault enhances security by providing centralized, secure management and automated renewal of certificates. This reduces the risk of manual handling errors and certificate expiration.",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "AKV",
+ "Entra"
],
"severity": "High",
- "subcategory": "Governance (guest/VM)",
- "text": "Enable Diagnostic and metric logging on Azure VMware Solution",
- "waf": "Operations"
+ "subcategory": "Data Protection",
+ "text": "Use Azure Key Vault to securely store and manage TLS certificates for App Service.",
+ "waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "To minimize exposure and improve security, isolate systems processing sensitive data. Leverage separate App Service Plans or App Service Environments for isolation, and use different subscriptions or management groups to enforce stricter boundaries and governance.",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"services": [
- "Monitor",
- "AVS",
- "VM"
+ "AppSvc",
+ "Subscriptions"
],
"severity": "Medium",
- "subcategory": "Governance (guest/VM)",
- "text": "Deploy the Log Analytics Agents to Azure VMware Solution guest VM workloads",
- "waf": "Operations"
+ "subcategory": "Data Protection",
+ "text": "Isolate systems that process sensitive information using separate App Service Plans, App Service Environments (ASE), and consider different subscriptions or management groups for enhanced security.",
+ "waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Local disks on App Service are not encrypted and sensitive data should not be stored on those. (For example: D:\\\\Local and %TMP%).",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"services": [
- "VM",
- "AVS",
- "AzurePolicy",
- "Backup"
+ "TrafficManager",
+ "AppSvc"
],
"severity": "Medium",
- "subcategory": "Governance (guest/VM)",
- "text": "Ensure you have a documented and implemented backup policy and solution for Azure VMware Solution VM workloads",
- "waf": "Operations"
+ "subcategory": "Data Protection",
+ "text": "Do not store sensitive data on local disk",
+ "waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Use Microsoft Entra ID or B2C for secure user authentication and Single Sign-On (SSO) across applications. Integrate using the built-in App Service Authentication/Authorization feature for streamlined security and compliance with modern authentication protocols like OpenID Connect.",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
"services": [
- "Monitor",
- "AVS",
- "Defender"
+ "ACR",
+ "AppSvc",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use Microsoft Defender for Cloud for compliance monitoring of workloads running on Azure VMware Solution",
+ "subcategory": "Identity and Access Control",
+ "text": "Use Microsoft Entra ID or B2C for secure authentication and Single Sign-On (SSO).",
"waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Ensure all code deployments to App Service originate from a controlled, secured environment, such as a well-managed DevOps pipeline. This practice mitigates the risk of deploying unauthorized or malicious code by enforcing version control, code verification, and secure hosting.",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
"services": [
- "AVS",
- "Defender"
+ "AppSvc",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Compliance",
- "text": "Are the applicable compliance baselines added to Microsoft Defender for Cloud",
+ "severity": "High",
+ "subcategory": "Identity and Access Control",
+ "text": "Deploy code to App Service from a trusted and secure environment.",
"waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Disable basic authentication for FTP/FTPS and WebDeploy/SCM to enhance security by enforcing Microsoft Entra ID secured endpoints for deployment. This ensures that only authenticated users using Microsoft Entra ID credentials can access deployment services, including the SCM site.",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "Entra"
],
"severity": "High",
- "subcategory": "Compliance",
- "text": "Was data residency evaluated when selecting Azure regions to use for Azure VMware Solution deployment",
+ "subcategory": "Identity and Access Control",
+ "text": "Disable basic authentication for FTP/FTPS and WebDeploy/SCM.",
"waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Wherever possible, use Managed Identity to securely connect to Microsoft Entra ID-secured resources without storing credentials. If this is not feasible, store secrets in Azure Key Vault and access them using Managed Identity to maintain security and reduce the risk of credential exposure.",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
"services": [
- "AVS"
+ "AKV",
+ "AppSvc",
+ "Entra"
],
"severity": "High",
- "subcategory": "Compliance",
- "text": "Are data processing implications (service provider / service consumer model) clear and documented",
+ "subcategory": "Identity and Access Control",
+ "text": "Use Managed Identity to connect to Microsoft Entra ID secured resources.",
"waf": "Security"
},
{
- "category": "Governance",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "When using images stored in Azure Container Registry, pull these images using a Managed Identity to avoid storing credentials. This ensures secure access to container images and reduces the risk of credential exposure.",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
"services": [
- "AVS"
+ "ACR",
+ "AppSvc",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Compliance",
- "text": "Consider using CMK (Customer Managed Key) for vSAN only if needed for compliance reason(s).",
+ "severity": "High",
+ "subcategory": "Identity and Access Control",
+ "text": "Pull container images from Azure Container Registry using a Managed Identity.",
"waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Configure diagnostic settings to send telemetry and security logs (including HTTP, platform, and audit logs) to Log Analytics. Centralized logging enhances monitoring, threat detection, and compliance reporting.",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"services": [
- "Monitor",
- "AVS"
+ "AppSvc",
+ "Entra",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Create dashboards to enable core Azure VMware Solution monitoring insights",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Logging and Monitoring",
+ "text": "Send App Service runtime and security logs to Log Analytics for centralized monitoring and alerting.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Set up a diagnostic setting to send the activity log to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the App Service resource itself.",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
"services": [
+ "AppSvc",
"Monitor",
- "AVS"
+ "Entra"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Create warning alerts for critical thresholds for automatic alerting on Azure VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Logging and Monitoring",
+ "text": "Send App Service activity logs to Log Analytics",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Use regional VNet integration, Network Security Groups (NSGs), and User-Defined Routes (UDRs) to control outbound network access. Route traffic through a Network Virtual Appliance (NVA), such as Azure Firewall, and monitor firewall logs to ensure traffic is properly controlled and secure.",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
"services": [
+ "AppSvc",
+ "NVA",
+ "Firewall",
"Monitor",
- "AVS"
+ "VNet"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Ensure critical alert is created to monitor if vSAN consumption is below 75% as this is a support threshold from VMware",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Network Security",
+ "text": "Control outbound network access for App Service using VNet integration, NSGs, UDRs, and firewalls.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Provide a stable outbound IP by using VNet integration with a NAT Gateway or Network Virtual Appliance (NVA) like Azure Firewall. This enables the receiving party to allow-list based on IP, if necessary. For communications with Azure services, use mechanisms like Service Endpoints or private endpoints to avoid relying on static IPs, ensuring secure and efficient connectivity.",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
"services": [
- "Monitor",
- "AVS"
+ "AppSvc",
+ "Storage",
+ "NVA",
+ "Firewall",
+ "PrivateLink",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Ensure alerts are configured for Azure Service Health alerts and notifications",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Network Security",
+ "text": "Ensure a stable IP for outbound communications by using VNet NAT Gateway or Azure Firewall.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Control inbound network access by configuring App Service Access Restrictions, Service Endpoints, or Private Endpoints. Ensure appropriate restrictions are set for both the web app and the SCM (deployment) site to limit unauthorized access and enhance security.",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"services": [
- "Storage",
- "Monitor",
- "AVS"
+ "AppSvc",
+ "PrivateLink"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Configure Azure VMware Solution logging to be send to an Azure Storage account or Azure EventHub for processing",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Network Security",
+ "text": "Control inbound network access using Access Restrictions, Service Endpoints, or Private Endpoints.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Protect App Service from malicious inbound traffic by deploying a Web Application Firewall (WAF) using Azure Application Gateway or Azure Front Door. Ensure WAF logs are monitored regularly to detect and respond to security threats.",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
"services": [
+ "AppSvc",
+ "FrontDoor",
+ "WAF",
"Monitor",
- "AVS"
+ "AppGW"
],
- "severity": "Low",
- "subcategory": "Monitoring",
- "text": "If deep insight in VMware vSphere is required: Is vRealize Operations and/or vRealize Network Insights used in the solution?",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Network Security",
+ "text": "Use a Web Application Firewall (WAF) in front of App Service.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "To prevent the Web Application Firewall (WAF) from being bypassed, lock down access to App Service by using Access Restrictions, Service Endpoints, and Private Endpoints. This ensures that all traffic is routed through the WAF, providing a secure front layer of protection.",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"services": [
- "Storage",
- "AVS",
- "VM",
- "AzurePolicy"
+ "WAF",
+ "AppSvc",
+ "PrivateLink"
],
"severity": "High",
- "subcategory": "Operations",
- "text": "Ensure the vSAN storage policy for VM's is NOT the default storage policy as this policy applies thick provisioning",
- "waf": "Operations"
+ "subcategory": "Network Security",
+ "text": "Ensure the WAF cannot be bypassed by securing access to App Service.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Ensure that the minimum TLS policy is set to 1.2 or higher, with a preference for TLS 1.3, to enhance security through stronger encryption protocols. TLS 1.3 provides additional security improvements and faster handshake times, reducing vulnerabilities associated with older versions.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Ensure vSphere content libraries are not placed on vSAN as vSAN is a finite resource",
- "waf": "Operations"
+ "subcategory": "Network Security",
+ "text": "Set minimum TLS policy to 1.2 or higher, preferably 1.3, in App Service configuration.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Configure App Service to enforce HTTPS-only, automatically redirecting all HTTP traffic to HTTPS. Additionally, implement HTTP Strict Transport Security (HSTS) in your code or via a Web Application Firewall (WAF) to ensure browsers only access the site over HTTPS, enhancing security by preventing downgrade attacks.",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
"services": [
- "Storage",
- "AVS",
- "Backup"
+ "WAF",
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Ensure data repositories for the backup solution are stored outside of vSAN storage. Either in Azure native or on a disk pool-backed datastore",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Network Security",
+ "text": "Use HTTPS only and consider enabling HTTP Strict Transport Security (HSTS).",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Do not use wildcards (*) in your CORS configuration, as this permits unrestricted access from any origin, compromising security. Instead, explicitly specify trusted origins that are allowed to access the service, ensuring controlled access.",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
"services": [
- "AVS",
- "Arc"
+ "AppSvc",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Ensure workloads running on Azure VMware Solution are hybrid managed using Azure Arc for Servers (Arc for Azure VMware Solution is in preview)",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Network Security",
+ "text": "Avoid using wildcards for CORS; specify allowed origins explicitly.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Remote debugging should not be enabled in production as it opens additional ports, increasing the attack surface. Although App Service automatically turns off remote debugging after 48 hours, it is recommended to disable it manually in production to maintain a secure environment.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
"services": [
- "Monitor",
- "AVS"
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Operations",
- "text": "Ensure workloads running on Azure VMware Solution are monitored using Azure Log Analytics and Azure Monitor",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Network Security",
+ "text": "Turn off remote debugging in production environments.",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Enable Defender for App Service. This (amongst other threats) detects communications to known malicious IP addresses. Review the recommendations from Defender for App Service as part of your operations.",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
"services": [
- "AVS"
+ "AppSvc",
+ "Defender"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Include workloads running on Azure VMware Solution in existing update management tooling or in Azure Update Management",
- "waf": "Operations"
+ "subcategory": "Network Security",
+ "text": "Enable Defender for Cloud - Defender for App Service",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Azure provides DDoS Basic protection on its network, which can be improved with intelligent DDoS Standard capabilities which learns about normal traffic patterns and can detect unusual behavior. DDoS Standard applies to a Virtual Network so it must be configured for the network resource in front of the app, such as Application Gateway or an NVA.",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
"services": [
- "Monitor",
- "AVS",
- "AzurePolicy"
+ "AppSvc",
+ "NVA",
+ "EventHubs",
+ "WAF",
+ "DDoS",
+ "AppGW",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Operations",
- "text": "Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management, Monitoring and Security solutions",
- "waf": "Operations"
+ "subcategory": "Network Security",
+ "text": "Enable DDOS Protection Standard on the WAF VNet",
+ "waf": "Security"
},
{
- "category": "Management",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "When using images stored in Azure Container Registry, ensure they are pulled over a virtual network by using a private endpoint and configuring the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'. This ensures secure communication between App Service and the registry, preventing exposure to the public internet.",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
"services": [
- "AVS",
- "Defender"
+ "ACR",
+ "AppSvc",
+ "PrivateLink",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Ensure workloads running on Azure VMware Solution are onboarded to Microsoft Defender for Cloud",
+ "subcategory": "Network Security",
+ "text": "Pull container images over a Virtual Network from Azure Container Registry.",
"waf": "Security"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Perform a penetration test on the web application in accordance with Azure's penetration testing rules of engagement. This helps identify vulnerabilities and security weaknesses that can be addressed before they are exploited.",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
"services": [
- "AVS",
- "Backup"
+ "AppSvc"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Ensure backups are not stored on vSAN as vSAN is a finite resource",
- "waf": "Reliability"
+ "subcategory": "Penetration Testing",
+ "text": "Conduct a penetration test on the web application.",
+ "waf": "Security"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Ensure that only trusted code, which has been validated and scanned for vulnerabilities, is deployed to production following DevSecOps practices. This minimizes the risk of introducing security vulnerabilities into the application environment.",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS"
+ "AppSvc"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Have all DR solutions been considered and a solution that is best for your business been decided upon? [SRM/JetStream/Zerto/Veeam/...]",
- "waf": "Reliability"
+ "subcategory": "Vulnerability Management",
+ "text": "Deploy validated and vulnerability-scanned code.",
+ "waf": "Security"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
+ "category": "Security",
+ "checklist": "Azure App Service Review",
+ "description": "Ensure that the latest versions of supported platforms, programming languages, protocols, and frameworks are used. Regular updates mitigate the risk of security vulnerabilities and ensure compatibility with security patches.",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS"
+ "AppSvc"
],
- "severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Vulnerability Management",
+ "text": "Use up-to-date platforms, languages, protocols and frameworks",
+ "waf": "Security"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
- "service": "AVS",
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "description": "Leverage Auto-Healing in Azure App Service to automatically restart instances or trigger custom actions based on pre-defined failure conditions like memory thresholds, HTTP errors, or specific event logs.",
+ "guid": "60b3a935-33e5-45c9-87c7-53882e395b46",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-diagnostics",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS"
+ "AppSvc"
],
- "severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Use Automated recovery plans with either of the Disaster solutions, avoid manual tasks as much as possible",
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Use Auto-Healing with custom rules to restart App Service instances automatically when failures occur.",
"waf": "Reliability"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
- "service": "AVS",
+ "category": "Operations",
+ "checklist": "Azure App Service Review",
+ "description": "Configure Azure Monitor alerts based on Application Insights metrics for response times, failure rates, and overall availability. Alerts help detect issues proactively and reduce mean-time-to-recovery (MTTR).",
+ "guid": "e52e4514-02a7-4e81-a98e-88ce1b18e557",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/alerts",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS"
+ "AppSvc",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Use the geopolitical region pair as the secondary disaster recovery environment",
+ "subcategory": "Monitoring",
+ "text": "Set up alerts for critical Application Insights metrics, such as response time and failure rates.",
"waf": "Reliability"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
- "service": "AVS",
+ "category": "Governance and Security",
+ "checklist": "Azure App Service Review",
+ "description": "Use Azure Policy to enforce security, compliance, and governance configurations for App Service. Policies can ensure that critical settings such as TLS versions, backup configurations, and network restrictions are enforced across all App Service instances.",
+ "guid": "361e886f-ca40-4ead-a8e9-1379c642ae9c",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS"
+ "ACR",
+ "AppSvc",
+ "Backup",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Use 2 different address spaces between the regions, for example: 10.0.0.0/16 and 192.168.0.0/16 for the different regions",
- "waf": "Reliability"
+ "subcategory": "Compliance",
+ "text": "Apply Azure Policy to enforce compliance across App Service configurations.",
+ "waf": "Governance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
+ "category": "Cost Governance",
+ "checklist": "Azure App Service Review",
+ "description": "Leverage Azure Cost Management to track and forecast App Service expenses. Set up alerts for budget thresholds to avoid overspending, and optimize costs based on resource utilization trends.",
+ "guid": "42eb48f0-28ff-497c-b2c0-a8fa1f989832",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/",
+ "service": "App Services",
"services": [
- "ASR",
- "AVS",
- "ExpressRoute",
- "NVA"
+ "Cost",
+ "AppSvc",
+ "Monitor"
],
- "severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Will ExpressRoute Global Reach be used for connectivity between the primary and secondary Azure VMware Solution Private Clouds or is routing done through network virtual appliances?",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Cost Monitoring",
+ "text": "Monitor App Service costs using Azure Cost Management and create cost alerts.",
+ "waf": "Cost"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
+ "category": "Cost Governance",
+ "checklist": "Azure App Service Review",
+ "description": "If you have predictable and steady usage of App Service, purchasing Reserved Instances can significantly reduce long-term costs. Commit to one or three years for lower pricing compared to pay-as-you-go.",
+ "guid": "e489221b-487e-48a3-aaab-48e3d205ca12",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/",
+ "service": "App Services",
"services": [
- "AVS",
- "Backup"
+ "Cost",
+ "AppSvc",
+ "ARS",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Have all Backup solutions been considered and a solution that is best for your business been decided upon? [ MABS/CommVault/Metallic.io/Veeam/�. ]",
- "waf": "Reliability"
+ "subcategory": "Cost Optimization",
+ "text": "Purchase reserved instances for App Service plans to optimize long-term costs.",
+ "waf": "Cost"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "When you are creating a SQL Server on Azure VM, carefully consider the type of workload necessary. If you are migrating an existing environment, collect a performance baseline to determine your SQL Server on Azure VM requirements. If this is a new VM, then create your new SQL Server VM based on your vendor requirements.",
+ "guid": "1fc3fc14-eea6-4e69-b8d9-a3eec218e687",
+ "link": "https://learn.microsoft.com/sql/dma/dma-sku-recommend-sql-db?view=sql-server-ver16",
"services": [
- "AVS",
- "Backup"
+ "SQL",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "VM Size",
+ "text": "Collect the target workload's performance characteristics and use them to determine the appropriate VM size for your business.",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "The memory optimized virtual machine sizes are a primary target for SQL Server VMs and the recommended choice by Microsoft. The memory optimized virtual machines offer stronger memory-to-CPU ratios and medium-to-large cache options.Consider Ebdsv5-series series first for most SQL Server workloads.",
+ "guid": "e04abe1f-8d39-4fda-9776-8424c116775c",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-vm-size?view=azuresql#memory-optimized",
"services": [
- "AVS",
- "Backup"
+ "SQL",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Business Continuity",
- "text": "Deploy your backup solution outside of vSan, on Azure native components",
- "waf": "Reliability"
+ "subcategory": "VM Size",
+ "text": "Use memory optimized virtual machine sizes for the best performance of SQL Server workloads.",
+ "waf": "Performance"
},
{
- "category": "BCDR",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "To find the most effective configuration for SQL Server workloads on an Azure VM, start by measuring the storage performance of your business application. Once storage requirements are known, select a virtual machine that supports the necessary IOPS and throughput with the appropriate memory-to-vCore ratio.",
+ "guid": "2ea55b56-ad48-4408-be72-734b476ba18f",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance#counters-to-measure-application-performance-requirements",
"services": [
- "AVS"
+ "SQL",
+ "Storage",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Business Continuity",
- "text": "Is a process in place to request a restore of the VMware components managed by the Azure Platform?",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Determine storage bandwidth and latency requirements for SQL Server data, log, and tempdb files before choosing the disk type.",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "This provides more dedicated disk IOPS and throughput on the disk level and also allows you to configure the Azure disk host caching setting for each disk to the optimal setting for that data type.",
+ "guid": "dbf590ce-65de-48e0-9f9c-cbd468266abc",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "AVS"
+ "SQL",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Deployment strategy",
- "text": "For manual deployments, all configuration and deployments must be documented",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Place data, log, and tempdb files on separate drives",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Premium SSD is always recommend as a minimum for SQL Server in order to obtain better performance and lower latency. P30 and P40 are recommended because disk caching is not supported for disks 4 TiB and larger ( P50 and above) and they provide the optimal price to performance ratio",
+ "guid": "e6a84de5-df43-4d19-a248-1718d5d1e5f6",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "AVS"
+ "SQL",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Deployment strategy",
- "text": "For manual deployments, consider implementing resource locks to prevent accidental actions on your Azure VMware Solution Private Cloud",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "For the data drive, use premium P30 and P40 or smaller disks to ensure the availability of cache support",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Log files have primarily write-heavy operations. Therefore, they do not benefit from the ReadOnly cache. Hence evaluate your price vs performance vs capacity and chose the right storage disk.",
+ "guid": "25659d35-58fd-4772-99c9-31112d027fe4",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "AVS"
+ "SQL",
+ "Storage",
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Automated Deployment",
- "text": "For automated deployments, deploy a minimal private cloud and scale as needed",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "For the log drive plan for capacity and test performance versus cost while evaluating the premium P30 - P80 disks",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Placing TempDB on the D drive can help performance. Consider the size required and always test performance.",
+ "guid": "12f70983-f630-4472-8ee6-9d6b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "AVS"
+ "SQL",
+ "Storage",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Automated Deployment",
- "text": "For automated deployments, request or reserve quota prior to starting the deployment",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Place tempdb on the local ephemeral SSD (default D:\\) drive for most SQL Server workloads that are not part of Failover Cluster Instance (FCI) after choosing the optimal VM size.",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Striping Data and Log disk can increase bandwidth. Ensure that VM size also matches expected output",
+ "guid": "4b69bad3-4aad-45e8-a78e-1d76667313c4",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "AVS",
+ "SQL",
+ "Storage",
+ "VM"
+ ],
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Stripe multiple Azure data disks using Storage Spaces to increase I/O bandwidth",
+ "waf": "Performance"
+ },
+ {
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Your storage caching policy varies depending on the type of SQL Server data files that are hosted on the drive.Enable Read-only caching for the disks hosting SQL Server data files.Reads from cache will be faster than the uncached reads from the data disk.Set the caching policy to None for disks hosting the transaction log. There is no performance benefit to enabling caching for the Transaction log disk.",
+ "guid": "05674b5e-985b-4859-a773-e7e261623b77",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
+ "services": [
+ "SQL",
+ "Storage",
"AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Automated Deployment",
- "text": "For automated deployment, ensure that relevant resource locks are created through the automation or through Azure Policy for proper governance",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Set host caching to read-only for data file disks and none for log file disks.",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Check that you storage is in the same region as your VM. For exaplme if your VM is in EAST US 2 ensure your storage is in East US 2.",
+ "guid": "5a917e1f-348e-4f35-9c27-d42e8bbac868",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "AVS",
- "AKV"
+ "SQL",
+ "Storage",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Automated Connectivity",
- "text": "Implement human understandable names for ExR authorization keys to allow for easy identification of the keys purpose/use",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Provision the storage account in the same region as the SQL Server VM",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "SQL Server uses extents to store data. These are 64KB in size. Therefore, on a SQL Server machine, the NTFS allocation unit size for hosting SQL database files should be 64 KB.",
+ "guid": "155abb91-63e9-4908-ae28-c84c33b6b780",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql#storage",
"services": [
- "ExpressRoute",
- "AVS",
- "AKV"
+ "SQL",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Automated Connectivity",
- "text": "Use Key vault to store secrets and authorization keys when separate Service Principles are used for deploying Azure VMware Solution and ExpressRoute",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Format your data disk to use 64 KB block size (allocation unit size) for all data files placed on a drive other than the temporary D:\\ drive",
+ "waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "It is recommended that you determine BCDR needs and requirements ensuring that you are able to meet you SLAs of the environment.",
+ "guid": "8b9fe5c4-2049-4d41-9a92-3c3474d11028",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/business-continuity-high-availability-disaster-recovery-hadr-overview?view=azuresql#azure-only-disaster-recovery-solutions",
"services": [
- "AVS"
+ "SQL",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Automated Connectivity",
- "text": "Define resource dependencies for serializing actions in IaC when many resources need to be deployed in/on Azure VMware Solution as Azure VMware Solution only supports a limited number of parallel operations.",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "HADR",
+ "text": "Determine HA/DR requirements for each VM to be migrated.",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "When depoying High Availability you need to use availability sets or availability zones to avoid unexpected outages.",
+ "guid": "ac6aae01-e6a8-44de-9df4-3d1992481718",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/business-continuity-high-availability-disaster-recovery-hadr-overview?view=azuresql#high-availability-nodes-in-an-availability-set",
"services": [
- "AVS"
+ "SQL",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Automated Connectivity",
- "text": "When performing automated configuration of NSX-T segments with a single Tier-1 gateway, use Azure Portal APIs instead of NSX-Manager APIs",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "HADR",
+ "text": "Place your VMs in an availability set or different availability zones.",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Prefered option when deploying an Availability Group. The recommended solution is to use multi-subnets when deploying Always on Availability Groups.",
+ "guid": "d5d1e5f6-2565-49d3-958f-d77249c93111",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/availability-group-azure-portal-configure?view=azuresql&tabs=azure-cli",
"services": [
- "Subscriptions",
- "AVS"
+ "SQL",
+ "VM",
+ "LoadBalancer",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "When intending to use automated scale-out, be sure to apply for sufficient Azure VMware Solution quota for the subscriptions running Azure VMware Solution",
- "waf": "Performance"
+ "subcategory": "HADR",
+ "text": "Deploy your SQL Server VMs to multiple subnets whenever possible to avoid the dependency on an Azure Load Balancer or a distributed network name (DNN) to route traffic to your HADR solution. ( If one is implementing FCI or AG)",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "High availability and disaster recovery (HADR) features, such as the Always On availability group and the failover cluster instance rely on underlying Windows Server Failover Cluster technology. Review the best practices for modifying your HADR settings to better support the cloud environment.",
+ "guid": "2d027fe4-12f7-4098-9f63-04722ee69d6b",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql-vm#hadr-configuration",
"services": [
- "Storage",
- "AVS",
- "AzurePolicy"
+ "SQL",
+ "ASR"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "When intending to use automated scale-in, be sure to take storage policy requirements into account before performing such action",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "HADR",
+ "text": "Change the cluster to less aggressive parameters to avoid unexpected outages from transient network failures or Azure platform maintenance. ( If one is implementing FCI or AG)",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Ensure that quorum is set correct for the number of instances deployed.",
+ "guid": "5c2622f5-4b69-4bad-94aa-d5e8c78e1d76",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/hadr-cluster-best-practices?view=azuresql-vm&tabs=windows2012#quorum-voting",
"services": [
- "AVS"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Scaling operations always need to be serialized within a single SDDC as only one scale operation can be performed at a time (even when multiple clusters are used)",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "HADR",
+ "text": "Configure cluster quorum voting to use 3 or more odd number of votes. Don't assign votes to DR regions. ( If one is implementing FCI or AG)",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "On Azure virtual machines, clusters use a load balancer to hold an IP address that needs to be on one cluster node at a time. In this solution, the load balancer holds the IP address for the virtual network name (VNN) listener for the Always On availability group when the SQL Server VMs are in a single subnet.",
+ "guid": "667313c4-0567-44b5-b985-b859c773e7e2",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/availability-group-vnn-azure-load-balancer-configure?view=azuresql-vm&tabs=ilb",
"services": [
- "AVS"
+ "SQL",
+ "VM",
+ "LoadBalancer",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "HADR",
+ "text": "When using the virtual network name (VNN) and Azure Load Balancer to connect to your HADR solution, specify MultiSubnetFailover = true in the connection string, even if your cluster only spans one subnet. ( If one is implementing FCI or AG)",
+ "waf": "Reliability"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "SQL Server, Azure SQL Database, and Azure SQL Managed Instance support row and page compression for rowstore tables and indexes, and support columnstore and columnstore archival compression for columnstore tables and indexes.",
+ "guid": "61623b77-5a91-47e1-b348-ef354c27d42e",
+ "link": "https://learn.microsoft.com/sql/relational-databases/data-compression/data-compression?view=sql-server-ver16",
"services": [
- "AVS"
+ "SQL",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Define and enforce scale in/out maximum limits for your environment in the automations",
+ "severity": "Low",
+ "subcategory": "SQL Server",
+ "text": "Enable database page compression where appropriate.",
"waf": "Performance"
},
{
- "category": "Platform Automation",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "By default, data and log files are initialized to overwrite any existing data left on the disk from previously deleted files. Data and log files are first initialized by zeroing the files (filling with zeros).In SQL Server, for data files only, instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files.",
+ "guid": "8bbac868-155a-4bb9-863e-9908ae28c84c",
+ "link": "https://learn.microsoft.com/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver16",
"services": [
- "Monitor",
- "AVS"
+ "SQL",
+ "Storage"
+ ],
+ "severity": "High",
+ "subcategory": "SQL Server",
+ "text": "Enable instant file initialization for data files.",
+ "waf": "Operations"
+ },
+ {
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Recommended for best performance and availability migrate all databases to data and log disks",
+ "guid": "33b6b780-8b9f-4e5c-9204-9d413a923c34",
+ "link": "https://learn.microsoft.com/sql/relational-databases/databases/move-database-files?view=sql-server-ver16",
+ "services": [
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Automated Scale",
- "text": "Implement monitoring rules to monitor automated scaling operations and monitor success and failure to enable appropriate (automated) responses",
+ "subcategory": "SQL Server",
+ "text": "Move all databases to data disks, including system databases.",
"waf": "Operations"
},
{
- "category": "Migration",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "b824546c-e1ae-4e34-93ae-c8239248725d",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-checklist?view=azuresql-vm#sql-server-features",
"services": [
- "AVS",
+ "SQL",
+ "Storage",
"VM"
],
- "severity": "High",
- "subcategory": "Architecture",
- "text": "When using MON, be aware of the limits of simulataneously configured VMs (MON Limit for HCX [400 - standard, 1000 - Larger appliance])",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "SQL Server",
+ "text": "Move SQL Server error log and trace file directories to data disks.",
+ "waf": "Operations"
},
{
- "category": "Migration",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "d68c5b5c-2925-4394-a69a-9d2799c42bb6",
+ "link": "https://learn.microsoft.com/sql/database-engine/configure-windows/server-memory-server-configuration-options#use-",
"services": [
- "AVS"
+ "SQL",
+ "VM"
],
"severity": "High",
- "subcategory": "Architecture",
- "text": "When using MON, you cannot enable MON on more than 100 Network extensions",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Reliability"
+ "subcategory": "SQL Server",
+ "text": "Set max SQL Server memory limit to leave enough memory for the Operating System.",
+ "waf": "Performance"
},
{
- "category": "Migration",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "8d1d7555-6246-4b43-a563-b4dc74a748b6",
+ "link": "https://learn.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows",
"services": [
- "VPN",
- "AVS"
+ "SQL",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "If using a VPN connection for migrations, adjust your MTU size accordingly.",
+ "severity": "High",
+ "subcategory": "SQL Server",
+ "text": "Enable lock pages in memory.",
"waf": "Performance"
},
{
- "category": "Migration",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "633ad2a0-916a-4664-a8fa-d0e278ee293c",
+ "link": "https://learn.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store",
"services": [
- "AVS"
+ "SQL",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "For low connectivity regions connecting into Azure (500Mbps or less), considering deploying the HCX WAN optimization appliance",
+ "severity": "Low",
+ "subcategory": "SQL Server",
+ "text": "Enable Query Store on all production SQL Server databases following best practices.",
"waf": "Performance"
},
{
- "category": "Migration",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "1bc352ba-aab7-4571-a49a-b8093dc9ec9d",
+ "link": "https://learn.microsoft.com/sql/relational-databases/databases/tempdb-database#optimizing-tempdb-performance-in-sql-server",
"services": [
- "AVS"
+ "SQL",
+ "VM"
],
- "severity": "Medium",
- "subcategory": "Process",
- "text": "Ensure that migrations are started from the on-premises appliance and NOT from the Cloud appliance (do NOT perform a reverse migration)",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "SQL Server",
+ "text": "Ensure that all tempdb best practices are followed.",
+ "waf": "Performance"
},
{
- "category": "Data Storage",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "1bb73b36-a5a6-47fb-a9ed-5b35478c3479",
+ "link": "https://docs.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"services": [
- "Storage",
- "AVS",
+ "SQL",
"VM"
],
- "severity": "Medium",
- "subcategory": "Architecture",
- "text": "When Azure Netapp Files is used to extend storage for Azure VMware Solution,consider using this as a VMware datastore instead of attaching directly to a VM.",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "SQL Server",
+ "text": "Schedule SQL Server Agent jobs to run DBCC CHECKDB, index reorganize, index rebuild, and update statistics jobs.",
+ "waf": "Operations"
},
{
- "category": "Data Storage",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Part of the SQL Server Feature checklist in the link that is recommended when SQL Server Instance is in an Azure VM.",
+ "guid": "816b2863-cffe-41ca-a599-ef0d5a73dd4c",
+ "link": "https://docs.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization",
"services": [
- "Storage",
- "AVS",
- "ExpressRoute"
+ "SQL",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Architecture",
- "text": "Ensure that a dedicated ExpressRoute Gateway is being used for external data storage solutions",
- "waf": "Reliability"
+ "subcategory": "SQL Server",
+ "text": "Limit autogrowth of the database and Disable autoshrink",
+ "waf": "Operations"
},
{
- "category": "Data Storage",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Constrained vCPU virtual machines (VMs) are a type of VM where the vCPU count can be constrained to a half or a quarter of the original VM size. This allows customers to reduce the cost of software licensing while maintaining the same memory, storage, and I/O bandwidth",
+ "guid": "e36c1c81-770a-4fbc-9c0d-43918648d285",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/constrained-vcpu",
"services": [
+ "SQL",
"Storage",
- "AVS",
- "ExpressRoute"
+ "VM",
+ "Cost"
],
- "severity": "Medium",
- "subcategory": "Architecture",
- "text": "Ensure that FastPath is enabled on the ExpressRoute Gateway that is being used for external data storage solutions",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Cost Optimization",
+ "text": "Optimize SQL Server License cost with Constrained vCPU VM's",
+ "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
+ "waf": "Cost"
},
{
- "category": "Stretched Cluster",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Azure Hybrid Benefit allows you to exchange your existing licenses for discounted rates on Azure SQL Database and Azure SQL Managed Instance. Y",
+ "guid": "7ed67178-b824-4546-ae1a-ee3453aec823",
+ "link": "https://azure.microsoft.com/en-ca/pricing/hybrid-benefit/",
"services": [
- "ASR",
- "AVS"
+ "SQL",
+ "Cost"
],
- "severity": "High",
- "subcategory": "Architecture",
- "text": "If using stretched cluster, ensure that your selected Disaster Recovery solution is supported by the vendor",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Cost Optimization",
+ "text": "Leverage Azure Hybrid benefit to maximize the value of your on premises licenses in the cloud",
+ "waf": "Cost"
},
{
- "category": "Stretched Cluster",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "The SQL Server IaaS Agent extension (SqlIaasExtension) runs on SQL Server on Azure Windows Virtual Machines (VMs) to automate management and administration tasks.",
+ "guid": "9248725d-d68c-45b5-a292-5394a69a9d27",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/sql-agent-extension-automatic-registration-all-vms?view=azuresql-vm&tabs=azure-cli",
"services": [
- "AVS"
+ "SQL",
+ "VM"
],
- "severity": "High",
- "subcategory": "Architecture",
- "text": "If using stretched cluster, ensure that the SLA provided will meet your requirements",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Azure",
+ "text": "Register with the SQL IaaS Agent Extension to unlock a number of feature benefits.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Operations"
},
{
- "category": "Stretched Cluster",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Accelerated Networking provides consistent ultra-low network latency via Azure's in-house programmable hardware and technologies",
+ "guid": "99c42bb6-8d1d-4755-9624-6b438563b4dc",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"services": [
- "AVS",
- "ExpressRoute"
+ "SQL",
+ "VM"
],
"severity": "High",
- "subcategory": "Architecture",
- "text": "If using stretched cluster, ensure that both ExpressRoute circuits are connected to your connectivity hub.",
- "waf": "Reliability"
+ "subcategory": "Azure",
+ "text": "Ensure Accelerated Networking is enabled on the virtual machine.",
+ "waf": "Operations"
},
{
- "category": "Stretched Cluster",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "AVS",
+ "category": "SQL Server on Azure VM",
+ "checklist": "SQL Migration Review",
+ "description": "Microsoft Defender detects anomalous activities indicating unusual and potentially harmful attempts to access or exploit databases on the SQL server.",
+ "guid": "74a748b6-633a-4d2a-8916-a66498fad0e2",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/secure-score-security-controls",
"services": [
- "AVS",
- "ExpressRoute"
+ "SQL",
+ "VM",
+ "Defender"
],
"severity": "High",
- "subcategory": "Architecture",
- "text": "If using stretched cluster, ensure that both ExpressRoute circuits have GlobalReach enabled.",
- "waf": "Reliability"
+ "subcategory": "Azure",
+ "text": "Leverage Microsoft Defender for Cloud to improve the overall security posture of your virtual machine deployment.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
},
{
- "category": "Stretched Cluster",
- "checklist": "Azure VMware Solution Design Review",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "AVS",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "There are some PaaS limitations that are introduced in SQL Managed Instance and some behavior changes compared to SQL Server. It is important to review and understand these differences.",
+ "guid": "78ee293c-1bc3-452b-aaab-7571849ab809",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql",
"services": [
- "AVS"
+ "SQL",
+ "EventHubs"
],
"severity": "High",
- "subcategory": "Architecture",
- "text": "Have site disaster tolerance settings been properly considered and changed for your business if needed.",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Review the major differences between SQL Server and Managed Instance",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Device Provisioning Service Review",
- "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
- "service": "IoT Hub DPS",
- "services": [],
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "SQL Managed Instance has characteristics and resource limits that depend on the underlying infrastructure and architecture. It is important to review these limits.",
+ "guid": "3dc9ec9d-1bb7-43b3-9a5a-67fba9ed5b35",
+ "link": "https://docs.microsoft.com/azure/azure-sql/managed-instance/resource-limits",
+ "services": [
+ "SQL"
+ ],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Review capacity limits for SQL MI",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "Device Provisioning Service Review",
- "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "IoT Hub DPS",
- "services": [],
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "The instance settings between managed instance and your source SQL Server can be different . It is important to review those differences that can impact performance.",
+ "guid": "8bc178bd-c5a0-46ca-9144-351e19dd3442",
+ "link": "https://medium.com/azure-sqldb-managed-instance/compare-environment-settings-on-sql-server-and-azure-sql-that-may-impact-performance-e90c21fa9b08",
+ "services": [
+ "SQL"
+ ],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Compare instance settings on SQL Server and Azure SQL MI that may impact performance",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "Device Provisioning Service Review",
- "guid": "8aed4fbf-0830-4883-899d-222a154af478",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "IoT Hub DPS",
- "services": [],
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Assess on-premises SQL Server instance(s) migrating to Azure SQL Managed Instance. The assessment workflow helps you to detect issues that block the migration itself and also partially supported and unsupported features",
+ "guid": "9eb72281-37a1-451c-9bb4-e4f1814287d5",
+ "link": "https://docs.microsoft.com/azure/dms/ads-sku-recommend",
+ "services": [
+ "SQL"
+ ],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Run Data Migration assistant or Azure Data Studio Migration Extension to detect compatibility issues that can impact database functionality on Managed Instance",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "Device Provisioning Service Review",
- "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "IoT Hub DPS",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "The SKU recommendation feature can evaluate the source SQL Server performance and utilization characteristics to recommend a right-sized Azure SQL Managed Instance to assist with your migration journey.",
+ "guid": "ca8c26c9-b32a-4b5b-afc6-898a135e3378",
+ "link": "https://learn.microsoft.com/azure/dms/ads-sku-recommend",
"services": [
- "AppSvc"
+ "SQL"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
- },
- {
- "category": "Application Deployment",
- "checklist": "Device Provisioning Service Review",
- "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "IoT Hub DPS",
- "services": [],
- "severity": "Medium",
- "subcategory": "CI/CD",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
- "waf": "Operations"
+ "subcategory": "Pre Migration",
+ "text": "Select the right compute resources for your workload by leveraging the SKU recommendation tools.",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "guid": "43e52f47-22d9-428c-8b1c-d521e54a29a9",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foundations-playbooks-CosmosDB_v1.docx",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Review Unsupported Features, Migration Blockers and Breaking Changes for each database from the Assessment",
+ "guid": "97e31c67-d68c-4b69-82ac-19f906d697c8",
+ "link": "https://learn.microsoft.com/azure/dms/ads-sku-recommend",
"services": [
- "CosmosDB"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "Best Practices",
- "text": "FTA Resiliency Playbook",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Pre Migration",
+ "text": "Review and address the issues highlighted in DMA/Azure Data Studio",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "guid": "de39ac0e-7c28-4dc9-9565-7202bff4564b",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "The SQL Managed Instance default DNS zone .database.windows.net can be changed with your own. However, the managed instance hostname part of its FQDN should remain the same.",
+ "guid": "eaded26b-dd18-46f0-ac25-1b999a68af87",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/frequently-asked-questions-faq?view=azuresql-mi#can-a-managed-instance-have-the-same-name-as-a-sql-server-on-premises-instance",
"services": [
- "CosmosDB"
+ "SQL",
+ "DNS"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Leverage Availablity Zones where regionally applicable and ofcourse if the service offers it",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Plan for connection string changes as changing a managed instance name is not supported",
+ "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "guid": "0d934a34-8b26-43e7-bd60-513a3649906e",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#replica-outages",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "There are addional requirements in configuring a vnet and subnet hosting the managed instance.",
+ "guid": "c9a7f821-b8eb-48c0-aa77-e25e4d5aeaa8",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/vnet-existing-add-subnet?view=azuresql-mi",
"services": [
- "CosmosDB"
+ "SQL",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Run multiple replicas of the database (>1 ) in Prod",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Review managed instance VNet requirements",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "Multi-region writes capability allows you to take advantage of the provisioned throughput for your databases and containers across the globe",
- "guid": "bad38ead-53cc-47de-8d8a-aab3571449ab",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#multiple-write-regions",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Though it's possible to deploy managed instances to a subnet with a number of IP addresses that's less than the output of the subnet formula, always consider using bigger subnets instead. Using a bigger subnet can help avoid future issues stemming from a lack of IP addresses, such as the inability to create additional instances within the subnet or scale existing instances.",
+ "guid": "dc4e2436-bb33-46d7-85f1-7960eee0b9b5",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/vnet-subnet-determine-size?view=azuresql-mi",
"services": [
- "ACR",
- "CosmosDB"
+ "SQL",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Leverage Multi-Region Writes",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Deployment",
+ "text": "Ensure managed instance subnet has sufficient IP addresses available",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "Span Cosmos account across two or more regions with multi-region writes",
- "guid": "8153d89f-89dc-47b3-9be2-b1a27f7b9e91",
- "link": "https://learn.microsoft.com/azure/cosmos-db/high-availability#slas",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "SQL Managed Instance has characteristics and resource limits that depend on the underlying infrastructure and architecture. SQL Managed Instance can be deployed on multiple hardware configurations.",
+ "guid": "c8defc4d-721d-431d-850f-b707ae9eab40",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/resource-limits?view=azuresql-mi#service-tier-characteristics",
"services": [
- "ACR",
- "CosmosDB"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Distribute your data globally",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Pre Migration",
+ "text": "Plan between General Purpose and Business Critical tiers of MI",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "Performance"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "Choose from various consistency levels such as Eventual, Consistent Prefix, Session, Bounded Staleness and strong",
- "guid": "9f8ea848-25ec-4140-bc32-2758e6ee9ac0",
- "link": "https://learn.microsoft.com/azure/cosmos-db/consistency-levels",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "The auto-failover groups feature allows you to manage the replication and failover of user databases in a managed instance to a managed instance in another Azure region. Auto-failover groups are designed to simplify deployment and management of geo-replicated databases at scale.",
+ "guid": "ed329079-8bc1-478b-bc5a-06ca7144351e",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/auto-failover-group-sql-mi?view=azuresql-mi&tabs=azure-powershell",
"services": [
- "CosmosDB"
+ "SQL"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Choose from several well-defined consistency models",
+ "subcategory": "Pre Migration",
+ "text": "Based on your RPO/RTO's , determine if Auto failover Group needs to be implemented. If so, plan for the deployment attributes of the second instance.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-windows-server-iaas-virtual-machine-identity/",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "Maintain business continuity during regional outages. Azure Cosmos DB supports service-managed failover during a regional outage. During a regional outage, Azure Cosmos DB continues to maintain its latency, availability, consistency, and throughput SLAs. To help make sure that your entire application is highly available, Azure Cosmos DB offers a manual failover API to simulate a regional outage. By using this API, you can carry out regular business continuity drills.",
- "guid": "a47e4d1e-bb79-43f9-bf87-69e1032b72fe",
- "link": "https://learn.microsoft.com/azure/cosmos-db/how-to-manage-database-account#automatic-failover",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "There are multiple ways to connect your application to the managed instance. Review and understand the pros and cons and decide on the best approach for your application.",
+ "guid": "5d226886-d30b-466c-97be-595190f83845",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/connect-application-instance?view=azuresql-mi",
"services": [
- "CosmosDB"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Enable Service managed failover",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Pre Migration",
+ "text": "Review the Connectivity Design between Database and Application, test & validate it",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "Azure Cosmos DB automatically takes backups of your data at regular intervals. The automatic backups are taken without affecting the performance or availability of the database operations. All the backups are stored separately in a storage service.",
- "guid": "3499c9c1-133d-42f7-a4b1-a5bd06ff1a90",
- "link": "https://learn.microsoft.com/azure/cosmos-db/online-backup-and-restore",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Compare migration options to choose the path that's appropriate to your business needs.",
+ "guid": "c586cb29-1ec1-46a1-b076-ef9f141acdce",
+ "link": "https://learn.microsoft.com/azure/azure-sql/migration-guides/managed-instance/sql-server-to-managed-instance-overview?view=azuresql-mi#migration-tools",
"services": [
- "Storage",
- "CosmosDB",
- "Backup"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Backup Strategy",
- "text": "Enable Automatic Backups",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Reliability"
+ "subcategory": "Pre Migration",
+ "text": "Plan for the Migration Method. Depending on the DB Size and Application downtime window, select the preferred Migration Method.",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "This mode is the default backup mode for all existing accounts. In this mode, backup is taken at a periodic interval and the data is restored by creating a request with the support team. In this mode, you configure a backup interval and retention for your account. The maximum retention period extends to a month. The minimum backup interval can be one hour.",
- "guid": "a6eb33f6-005c-4d92-9286-7655672d6121",
- "link": "https://learn.microsoft.com/azure/cosmos-db/periodic-backup-restore-introduction",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "After you verify that data is the same on both source and target, you can cut over from the source to the target environment. It's important to plan the cutover process with business / application teams to ensure minimal interruption during cutover doesn't affect business continuity.",
+ "guid": "579377bc-db37-451a-a2ac-1fad66e15d4d",
+ "link": "https://learn.microsoft.com/azure/dms/tutorial-sql-server-managed-instance-online#performing-migration-cutover",
"services": [
- "CosmosDB",
- "Backup"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Backup Strategy",
- "text": "Perform Periodic Backups",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "subcategory": "Pre Migration",
+ "text": "Plan the cutover process with business / application teams to ensure minimal interruption during cutover and it does not affect business continuity.",
+ "training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
"waf": "Reliability"
},
{
- "category": "Operations Management",
- "checklist": "CosmosDB Review Checklist",
- "description": "Continous 7 day retention and 30 day retention backups. Azure Cosmos DB performs data backup in the background without consuming any extra provisioned throughput (RUs) or affecting the performance and availability of your database. Continuous backups are taken in every region where the account exists.",
- "guid": "d43918a8-cd28-49be-b6b1-7cb8245461e1",
- "link": "https://learn.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction",
- "service": "CosmosDB",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "A time zone of a managed instance can be set during instance creation only. The default time zone is UTC",
+ "guid": "4a2adb1c-3d23-426a-b225-ca44e1695fdd",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/timezones-overview?view=azuresql#set-a-time-zone",
"services": [
- "CosmosDB",
- "Backup"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "Backup Strategy",
- "text": "Continous Backup with point-in-time restore in Azure Cosmos DB",
- "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Deployment",
+ "text": "Ensure you customize your time zone setting at the instance creation time. One cannot change it later.",
+ "training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "waf": "Operations"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Implement branching policy in Azure DevOps",
- "guid": "eda1dae2-cc85-4c47-a6b7-81cca0e6c465",
- "link": "https://learn.microsoft.com/azure/devops/repos/git/branch-policies-overview?view=azure-devops",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Server-level collation in Azure SQL Managed Instance can be specified when the instance is created and cannot be changed later.Default server-level collation is SQL_Latin1_General_CP1_CI_AS.",
+ "guid": "deace4cb-1deb-44c6-90c3-fc14eebb3693",
+ "link": "https://learn.microsoft.com/sql/relational-databases/collations/set-or-change-the-server-collation?view=sql-server-ver16",
"services": [
- "AzurePolicy"
+ "SQL"
],
"severity": "High",
- "subcategory": "Branching Policy",
- "text": "Branch Policies",
+ "subcategory": "Deployment",
+ "text": "Ensure you select the right collation setting at the instance creation time. One cannot change it later",
"waf": "Operations"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Understand branch strategy such as GitFlow or GitHub Flow",
- "guid": "bc288bec-6a16-4ca7-8444-51e1add34529",
- "link": "https://learn.microsoft.com/azure/devops/repos/git/git-branching-guidance?view=azure-devops",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "When you're migrating a database protected by Transparent Data Encryption (TDE) to Azure SQL Managed Instance using the native restore option, the corresponding certificate from the SQL Server instance needs to be migrated before database restore.",
+ "guid": "829e3eec-2183-4687-a007-7a2b5945bda4",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/tde-certificate-migrate?view=azuresql-mi&tabs=azure-powershell",
"services": [
- "AzurePolicy"
+ "SQL",
+ "VM"
],
- "severity": "High",
- "subcategory": "Branching Policy",
- "text": "Branching strategy",
+ "severity": "Medium",
+ "subcategory": "Deployment",
+ "text": "For TDE Enabled Database, corresponding certificate from the on-premises or Azure VM SQL Server needs to be migrated before database restore",
"waf": "Operations"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Understand how teams work with git",
- "guid": "ec723823-7a15-41c5-ab4e-401914387e5c",
- "link": "https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "System databases can be restored only from backups that are created on the version of SQL Server that the server instance is currently running. This is not the case when you are migrating to SQL Managed Instance.Azure PowerShell and DBATools PowerShell libraries enable you to easily script and automate and customize all parts of the migration process.",
+ "guid": "3334fdf9-1c23-4418-8b65-275269440b4b",
+ "link": "https://learn.microsoft.com/azure/azure-sql/migration-guides/managed-instance/sql-server-to-managed-instance-guide?view=azuresql-mi#backup-and-restore",
"services": [
- "AzurePolicy"
+ "SQL",
+ "Backup"
],
- "severity": "High",
- "subcategory": "Branching Policy",
- "text": "Understand GitFlow Branch Strategy",
+ "severity": "Low",
+ "subcategory": "Migration",
+ "text": "Restore of system databases is not supported. To migrate instance-level objects (stored in master or msdb databases), we recommend to script them out and run T-SQL scripts on the destination instance.",
"waf": "Operations"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Merge into higher branches after two or more reviewers in a PR",
- "guid": "a9c26c9c-32ab-45bd-8c69-98a246e33899",
- "link": "https://learn.microsoft.com/azure/devops/repos/git/review-pull-requests?view=azure-devops&tabs=browser",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "When using migration options that continuously replicate / sync data changes from source to the target, the source data and schema can change and drift from the target. During data sync, ensure that all changes on the source are captured and applied to the target during the migration process.",
+ "guid": "e3d3e084-3276-4d4b-bc01-5bcf219e4a1e",
"services": [
- "AzurePolicy"
+ "SQL"
],
"severity": "High",
- "subcategory": "Branching Policy",
- "text": "Pull Request Review",
+ "subcategory": "Migration",
+ "text": "Ensure that all changes on the source are captured and applied to the target during the migration process.",
"waf": "Operations"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Implement access control to the branches",
- "guid": "7e41c77d-68cb-46a2-8ac1-9f916d697d8e",
- "link": "https://learn.microsoft.com/azure/devops/repos/git/branch-permissions?view=azure-devops",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Ensure that the application is able to succesffuly connect to the managed instance post migration of the databases.",
+ "guid": "b5887952-5d22-4688-9d30-b66c57be5951",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/connect-application-instance?view=azuresql-mi",
"services": [
- "AzurePolicy"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Branching Policy",
- "text": "Access Control to the Branch",
+ "subcategory": "Migration",
+ "text": "Test Application Connectivity to MI and Databases",
"waf": "Operations"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Perform SAST code scan",
- "guid": "adfd27bd-e187-401a-a252-baa9b68a088c",
- "link": "https://devblogs.microsoft.com/devops/integrate-security-into-your-developer-workflow-with-github-advanced-security-for-azure-devops/",
- "services": [],
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "High availability is a fundamental part of SQL Managed Instance platform that works transparently for your database applications. Failovers from primary to secondary nodes in case of node degradation or fault detection, or during regular monthly software updates are an expected occurrence for all applications using SQL Managed Instance in Azure.",
+ "guid": "90f83845-c586-4cb2-a1ec-16a1d076ef9f",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/user-initiated-failover?view=azuresql",
+ "services": [
+ "SQL"
+ ],
"severity": "High",
- "subcategory": "Security",
- "text": "Code Scan",
- "waf": "Security"
- },
- {
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Understand TFVC as Code Repo",
- "guid": "9a8f822b-8eb9-4d1b-a77f-26e5e6beba8e",
- "link": "https://learn.microsoft.com/azure/devops/repos/tfvc/what-is-tfvc?view=azure-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Practice",
- "text": "TFVC as Code Repository",
- "waf": "Operations"
+ "subcategory": "Post Migration",
+ "text": "Consider executing a manual failover on SQL Managed Instance to test for fault and failover resiliency.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Reliability"
},
{
- "category": "Version Control",
- "checklist": "Azure DevOps",
- "description": "Compare Git vs TFVC for your project",
- "guid": "d4f3437b-c336-4d71-9f27-a71eee0b9b5d",
- "link": "https://learn.microsoft.com/azure/devops/repos/tfvc/comparison-git-tfvc?view=azure-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Practice",
- "text": "Choose Right version control",
- "waf": "Operations"
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Ensuring that your applications are failover resilient prior to deploying to production will help mitigate the risk of application faults in production and will contribute to application availability for your customers.",
+ "guid": "141acdce-5793-477b-adb3-751ab2ac1fad",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/auto-failover-group-configure-sql-mi?view=azuresql&tabs=azure-portal#test-failover",
+ "services": [
+ "SQL",
+ "LoadBalancer",
+ "EventHubs"
+ ],
+ "severity": "High",
+ "subcategory": "Post Migration",
+ "text": "If failover groups have been implemented, Test Manual Failover and Failback and test application connectivity behavior during failover/failback",
+ "waf": "Reliability"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Set up your team management",
- "guid": "8defd5d7-21d4-41d2-900c-807bf9eab40f",
- "link": "https://learn.microsoft.com/azure/devops/organizations/settings/manage-teams?view=azure-devops",
- "services": [],
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "This provides more dedicated disk IOPS and throughput",
+ "guid": "aa359272-8e6e-4205-8726-76ae46691e88",
+ "link": "https://techcommunity.microsoft.com/t5/azure-sql-blog/storage-performance-best-practices-and-considerations-for-azure/ba-p/305525",
+ "services": [
+ "SQL",
+ "Storage"
+ ],
"severity": "High",
- "subcategory": "Team Planning",
- "text": "Configure your teams",
- "waf": "Operations"
+ "subcategory": "Post Migration",
+ "text": "Optimize Storage Performance for General Purpose Managed Instance",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Performance"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Start scheduling sprints",
- "guid": "9ed5b354-78d4-447a-a26c-2863c00f1cac",
- "link": "https://learn.microsoft.com/azure/devops/boards/sprints/define-sprints?view=azure-devops",
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "Many organizations have policies that require that certificates or encryption keys be created and managed internally. If your organization has a similar policy, this architecture might apply to you. If your customers require internal management of these items, the architecture also might apply to you.",
+ "guid": "35ad9422-23e1-4381-8523-081a94174158",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/data/sql-managed-instance-cmk",
+ "services": [
+ "SQL",
+ "AKV",
+ "AzurePolicy",
+ "Backup"
+ ],
+ "severity": "Low",
+ "subcategory": "Post Migration",
+ "text": "Enable Customer managed TDE for taking your own copy only full backups",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Security"
+ },
+ {
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "The maintenance window feature provides you with the ability to onboard Azure SQL resource to prescheduled time blocks outside of business hours.",
+ "guid": "33ef7ad7-c6d3-4733-865c-7acbe44bbe60",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/planned-maintenance?view=azuresql",
+ "services": [
+ "SQL"
+ ],
+ "severity": "Medium",
+ "subcategory": "Post Migration",
+ "text": "Plan for Azure maintenance events",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operations"
+ },
+ {
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "By using the long-term retention (LTR) feature, you can store specified SQL Database and SQL Managed Instance full backups in Azure Blob storage with configured redundancy for up to 10 years.",
+ "guid": "9d89f2e8-7778-4424-b516-785c6fa96b96",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/long-term-retention-overview?view=azuresql-mi",
+ "services": [
+ "SQL",
+ "ARS",
+ "Backup",
+ "Storage"
+ ],
+ "severity": "Low",
+ "subcategory": "Post Migration",
+ "text": "Configure Long Term backup retention, view backups and restore from backups",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "By using Azure Hybrid Benefit, you can achieve cost savings, modernise and maintain a flexible hybrid environment while optimising business applications.",
+ "guid": "ad88408f-3727-434c-a76b-a28021459014",
+ "link": "https://azure.microsoft.com/en-gb/pricing/hybrid-benefit/#overview",
+ "services": [
+ "SQL",
+ "Cost"
+ ],
+ "severity": "Low",
+ "subcategory": "Post Migration",
+ "text": "Take advantage of Azure Hybrid Benefit and Azure Reservations where applicable.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Cost"
+ },
+ {
+ "category": "SQL Managed Instance",
+ "checklist": "SQL Migration Review",
+ "description": "If you don't have threat protection Advanced Threat Protection is part of the Microsoft Defender for SQL offering, which is a unified package for advanced SQL security capabilities.",
+ "guid": "65d38e53-f9cc-4bd8-9926-6acca274faa1",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/threat-detection-overview?view=azuresql",
+ "services": [
+ "SQL",
+ "Defender"
+ ],
+ "severity": "Medium",
+ "subcategory": "Post Migration",
+ "text": "Leverage Microsoft Defender for Cloud to improve the overall security posture",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "IoT Hub Review",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled)",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "IoT Hub Review",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the IoT hubs from an affected region to the corresponding geo-paired region.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "IoT Hub Review",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "IoT Hub Review",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Learn how to trigger a manual failover.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "IoT Hub Review",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availability",
+ "text": "Learn how to fail back after a failover.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Automatic instance repairs ensure that unhealthy instances are promptly identified and replaced, maintaining a set of healthy instances within your scale set.",
+ "guid": "7e13c105-675c-41e9-95b4-59837ff7ae7c",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs",
+ "service": "VMSS",
+ "services": [
+ "VM"
+ ],
+ "severity": "Low",
+ "subcategory": "VM Scale Sets",
+ "text": "Enable automatic instance repairs for enhanced VM Scale Sets resiliency",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Ensure that Azure Backup is utilized appropriately to meet your organization's resiliency requirements for Azure virtual machines (VMs).",
+ "guid": "4d874a74-8b66-42d6-b150-512a66498f6d",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-vms-introduction",
+ "service": "VM",
+ "services": [
+ "Backup",
+ "VM"
+ ],
+ "severity": "High",
+ "subcategory": "Virtual Machines",
+ "text": "Consider Azure Backup to meet your resiliency requirements for Azure VMs",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Single Instance VMs using Premium SSD or Ultra Disk for all Operating System Disks and Data Disks are guaranteed to have Virtual Machine Connectivity of at least 99.9%",
+ "guid": "8052d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "VM",
+ "services": [
+ "VM"
+ ],
+ "severity": "High",
+ "subcategory": "Virtual Machines",
+ "text": "Use Premium or Ultra disks for production VMs",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Azure automatically replicates managed disks within a region to ensure data durability and protect against single-point failures.",
+ "guid": "b31e38c3-f298-412b-8363-cffe179b599d",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview",
+ "service": "VM",
+ "services": [
+ "VM"
+ ],
+ "severity": "High",
+ "subcategory": "Virtual Machines",
+ "text": "Ensure Managed Disks are used for all VMs",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Temporary disks are intended for short-term storage of non-persistent data such as page files, swap files, or SQL Server tempdb. Storing persistent data on temporary disks can lead to data loss during maintenance events or VM redeployment.",
+ "guid": "e0d5973c-d4ce-432c-8881-37f6f7c4c0d4",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview#temporary-disk",
+ "service": "VM",
+ "services": [
+ "SQL",
+ "Storage",
+ "VM"
+ ],
+ "severity": "Medium",
+ "subcategory": "Virtual Machines",
+ "text": "Do not use the Temp disk for anything that is not acceptable to be lost",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Co-locate your compute, storage, networking, and data resources across an availability zone, and replicate this arrangement in other availability zones.",
+ "guid": "e514548d-2447-4ec6-9138-b8200f1ce16e",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "VM",
+ "services": [
+ "ACR",
+ "Storage",
+ "VM"
+ ],
+ "severity": "Medium",
+ "subcategory": "Virtual Machines",
+ "text": "Leverage Availability Zones for your VMs in regions where they are supported",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Use at least two VMs in Availability Sets to isolate VMs on different fault and update domains.",
+ "guid": "5a785d6f-e96c-496a-b884-4cf3b2b38c88",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "VM",
+ "services": [
+ "VM"
+ ],
+ "severity": "Medium",
+ "subcategory": "Virtual Machines",
+ "text": "For regions that do not support Availability Zones deploy VMs into Availability Sets",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Azure provides multiple options for VM redundancy to meet different requirements (Availability Zones, Virtual Machine Scale Sets, Availability Sets, Azure Site Recovery)",
+ "guid": "6ba2c021-4991-414a-9d3c-e574dccbd979",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "VM",
+ "services": [
+ "ASR",
+ "VM"
+ ],
+ "severity": "High",
+ "subcategory": "Virtual Machines",
+ "text": "Avoid running a production workload on a single VM",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Azure Site Recovery enables you to achieve low RTO (Recovery Time Objective) for your Azure and hybrid VMs by providing continuous replication and failover capabilities.",
+ "guid": "2a6bcca2-b5fe-4a1e-af3d-d95d48c7c891",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
+ "services": [
+ "AVS",
+ "ASR",
+ "VM"
+ ],
+ "severity": "High",
+ "subcategory": "Virtual Machines",
+ "text": "For Azure and on-premises VMs (Hyper-V/Phyiscal/VMware) with low RTO requirements use Azure Site Recovery",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "By using Capacity Reservations, you can effectively manage capacity for critical workloads, ensuring resource availability in specified regions.",
+ "guid": "bd7bb012-f7b9-45e0-9e15-8e3ea3992c2d",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/capacity-reservation-overview",
+ "service": "VM",
+ "services": [
+ "VM"
+ ],
+ "severity": "Low",
+ "subcategory": "Virtual Machines",
+ "text": "Use Capacity Reservations for critical workloads that require guaranteed capacity",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "By ensuring that the necessary quotas are increased in your DR region before testing failover with ASR, you can avoid any potential resource constraints during the recovery process for failed over VMs.",
+ "guid": "e6e2065b-3a76-4af4-a691-e8939ada4666",
+ "link": "https://learn.microsoft.com/azure/quotas/per-vm-quota-requests",
+ "service": "VM",
+ "services": [
+ "ASR",
+ "VM"
+ ],
+ "severity": "Medium",
+ "subcategory": "Virtual Machines",
+ "text": "Increase quotas in DR region before testing failover with ASR",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Compute",
+ "checklist": "Resiliency Review",
+ "description": "Scheduled Events is an Azure Metadata Service that provides information about upcoming maintenance events for virtual machines (VMs). By leveraging Scheduled Events, you can proactively prepare your applications for VM maintenance, minimizing disruption and improving the availability of your VMs.",
+ "guid": "6d3b475a-5c7a-4cbe-99bb-e64dd8902e87",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/windows/scheduled-events",
+ "service": "VM",
+ "services": [
+ "VM"
+ ],
+ "severity": "Low",
+ "subcategory": "Virtual Machines",
+ "text": "Utilize Scheduled Events to prepare for VM maintenance",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Data",
+ "checklist": "Resiliency Review",
+ "description": "Use Zone-redundant Storage (ZRS) in the primary region for scenarios that require high availability and for restricting replication to a particular country or region. For protection against regional disasters, use Geo-zone-redundant Storage (GZRS), which combines ZRS in the primary region with geo-replication to a secondary region?.",
+ "guid": "48c7c891-dcb1-4f7d-9769-ae568ba38d4a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
+ "severity": "Medium",
+ "subcategory": "Storage Accounts",
+ "text": "Choose the most appropriate data redundancy option for Azure Storage based on your requirements",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Data",
+ "checklist": "Resiliency Review",
+ "description": "Assigning a Delete lock to your storage account helps protect the availability of your data, minimizing the risk of disruptions to your business operations.",
+ "guid": "85e2213d-bd7b-4b01-8f7b-95e06e158e3e",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
+ "severity": "Low",
+ "subcategory": "Storage Accounts",
+ "text": "Apply a Delete lock to prevent accidental or malicious deletion of storage accounts",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Data",
+ "checklist": "Resiliency Review",
+ "description": "Container soft delete protects your data from being accidentally deleted by maintaining the deleted data in the system for a specified period of time.",
+ "guid": "a3992c2d-e6e2-4065-a3a7-6af4a691e893",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
+ "severity": "Low",
+ "subcategory": "Storage Accounts",
+ "text": "Enable soft delete for Storage Account Containers",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Data",
+ "checklist": "Resiliency Review",
+ "description": "Blob soft delete protects an individual blob and its versions, snapshots, and metadata from accidental deletes or overwrites by maintaining the deleted data in the system for a specified period of time.",
+ "guid": "9ada4666-7e13-4c10-96b9-153d89f89dc7",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "services": [
+ "Storage"
+ ],
+ "severity": "Low",
+ "subcategory": "Storage Accounts",
+ "text": "Enable soft delete for blobs",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "Azure Backup enhanced soft delete provides critical protection against ransomware attacks by retaining deleted backups, enabling recovery from potential ransomware encryption or deletion.",
+ "guid": "b44be3b1-a27f-48b9-b91b-e1038df03a82",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about",
+ "service": "Azure Backup",
+ "services": [
+ "Backup"
+ ],
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "Enable Azure Backup enhanced soft delete for improved data protection and recovery",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "Azure Backup's multi-user authorization enables fine-grained control over user access to backup resources, allowing you to restrict privileges and ensure proper authentication and authorization for backup operations.",
+ "guid": "2cd463cb-bbc8-4ac2-a9eb-c92a43da1dae",
+ "link": "https://learn.microsoft.com/azure/backup/multi-user-authorization-concept",
+ "service": "Azure Backup",
+ "services": [
+ "Backup"
+ ],
+ "severity": "Low",
+ "subcategory": "Backup",
+ "text": "Implement multi-user authorization for Azure Backup to ensure secure and controlled access to backup resources",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "Azure Immutable Storage provides an additional layer of security by ensuring that backup data stored in the vault cannot be modified or deleted for a specified retention period. This helps safeguard your backups from ransomware attacks that may attempt to compromise or manipulate your backup data.",
+ "guid": "2cc88147-0607-4c1c-aa0e-614658dd458e",
+ "link": "https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-concept?source=recommendations&tabs=recovery-services-vault",
+ "service": "Azure Backup",
+ "services": [
+ "Storage",
+ "Backup"
+ ],
+ "severity": "Low",
+ "subcategory": "Backup",
+ "text": "Implement Immutable Storage for your vaults to protect against ransomware and prevent unauthorized modifications to backups",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "Clearly define your organization's business continuity and disaster recovery requirements for your Azure environment. This includes identifying the critical applications, data, and services that need to be protected, as well as specifying the desired recovery objectives and strategies.",
+ "guid": "72e52e36-11dd-458c-9a4b-1521e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-business-continuity-disaster-recovery",
+ "services": [
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "Design",
+ "text": "Define business continuity and disaster recovery requirements",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "Ensure that your Azure architectures are designed with a focus on reliability. Consider implementing fault-tolerant mechanisms, redundancy, and resiliency patterns to minimize the impact of failures and maximize the availability of your applications and services.",
+ "guid": "c2399c4d-7b67-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/architecture/reliability/architect",
"services": [],
+ "severity": "High",
+ "subcategory": "Design",
+ "text": "Implement reliability best practices in Azure architectures",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "IaC configurations can play a role in your disaster recovery plan, particularly in situations where recovery time is not time-sensitive. In the event of infrastructure recreation in a second region, IaC can be used to reproduce the necessary infrastructure.",
+ "guid": "fe237de2-43b1-46c3-8d7a-a9b7570449aa",
+ "link": "https://learn.microsoft.com/azure/well-architected/devops/automation-infrastructure",
+ "services": [
+ "RBAC",
+ "ASR"
+ ],
+ "severity": "Medium",
+ "subcategory": "DevOps",
+ "text": "Implement Infrastructure as Code (IaC) for Rapid Infrastructure Recovery",
+ "waf": "Reliability"
+ },
+ {
+ "category": "General",
+ "checklist": "Resiliency Review",
+ "description": "Azure offers region pairs that are geographically separated and can be used for cross-region replication and disaster recovery. These region pairs provide redundancy and protection against regional or large-scale disasters.",
+ "guid": "dcb1f7d5-769a-4e56-aba3-8d4a85e2213d",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "services": [
+ "ASR"
+ ],
+ "severity": "Medium",
+ "subcategory": "Multi-region",
+ "text": "Plan for cross-region recovery by leveraging region pairs",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "By deploying an Application Gateway with a minimum instance count of two, you will have at least two instances available under normal circumstances. In the event that one of the instances encounters a problem, the other instance will handle the traffic while a new instance is being created. This approach significantly reduces the risk of service disruption and ensures a seamless experience for your users.",
+ "guid": "93c76286-37a5-451c-9b04-e4f1854387e5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant#autoscaling-and-high-availability",
+ "services": [
+ "AppGW"
+ ],
+ "severity": "Medium",
+ "subcategory": "Application Gateways",
+ "text": "Deploy Application Gateways with a minimum instance count of 2 to avoid instance provisioning downtime",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "The v2 SKU offers several advantages and critical new features that enhance the availability and resilience of your application infrastructure. One notable feature supported by the v2 SKU is zone redundancy, which allows an Application Gateway deployment to span multiple Availability Zones.",
+ "guid": "ced126cd-032a-4f5b-8fc6-998a535e3378",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "services": [
+ "AppGW",
+ "Storage"
+ ],
+ "severity": "High",
+ "subcategory": "Application Gateways",
+ "text": "Deploy Azure Application Gateway v2 for zone redundancy support",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "Azure Front Door provides automatic failover capabilities, ensuring continuity in the event of a primary region becoming unavailable. However, during the failover process, there may be a brief period (typically 20-60 seconds) when clients cannot reach the application. It is essential to review the Azure Front Door service level agreement (SLA) to determine whether relying solely on Front Door meets your business requirements for high availability. ",
+ "guid": "97e31c67-d68c-4f6a-92a1-194956d697dc",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/multi-region#azure-front-door",
+ "services": [
+ "FrontDoor"
+ ],
+ "severity": "Low",
+ "subcategory": "Azure Front Door",
+ "text": "Consider a redundant traffic management solution in conjunction with Azure Front Door",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "By implementing Traffic Manager, you can configure it to continuously monitor the health of your application endpoints and automatically redirect traffic to an alternate endpoint when necessary. This automation minimizes downtime and provides a more seamless experience for your users during disaster recovery scenarios.",
+ "guid": "8df03a82-2cd4-463c-abbc-8ac299ebc92a",
+ "link": "https://learn.microsoft.com/azure/networking/disaster-recovery-dns-traffic-manager",
+ "services": [
+ "TrafficManager",
+ "Monitor",
+ "DNS",
+ "ASR"
+ ],
+ "severity": "Low",
+ "subcategory": "DNS",
+ "text": "Plan for automated failover using Traffic Manager for DNS Traffic",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "To eliminate a single point of failure in your on-premises DNS services and ensure reliable DNS resolution during business continuity and disaster recovery scenarios, it is recommended to utilize Azure DNS Private Resolvers in multiple regions. By deploying two or more Azure DNS private resolvers across different regions, you can enable DNS failover and achieve resiliency in your DNS infrastructure.",
+ "guid": "43da1dae-2cc8-4814-9060-7c1cca0e6146",
+ "link": "https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover",
+ "service": "DNS",
+ "services": [
+ "ACR",
+ "DNS",
+ "ASR"
+ ],
+ "severity": "Low",
+ "subcategory": "DNS",
+ "text": "Implement DNS Failover using Azure DNS Private Resolvers",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "Use an on-premises data gateway cluster to avoid single points of failure and to load balance traffic across gateways.",
+ "guid": "89f89dc7-b44b-4e3b-8a27-f8b9e91be103",
+ "link": "https://learn.microsoft.com/data-integration/gateway/service-gateway-high-availability-clusters",
+ "service": "Data Gateways",
+ "services": [
+ "ACR"
+ ],
+ "severity": "Medium",
+ "subcategory": "Data Gateways",
+ "text": "Use on-premises data gateway clusters to ensure high availability for business-critical data",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "When using ExpressRoute, it's important to design for high availability by incorporating redundancy in both the partner and customer networks. This can include multiple ExpressRoute circuits, redundant connections from your network to Microsoft, and ensuring your on-premises network equipment has redundant connections.",
+ "guid": "c0e7c28d-c936-4657-802b-ff4564b0d934",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "services": [
+ "ExpressRoute"
+ ],
+ "severity": "Medium",
+ "subcategory": "ExpressRoute",
+ "text": "Ensure redundancy within both the partner network and customer network when utilizing ExpressRoute for high availability",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "The primary circuit should handle regular traffic while the backup circuit stays ready to take over if the primary circuit fails. Utilize BGP attributes to influence routing and designate your primary and backup circuits effectively.",
+ "guid": "a359c373-e7dd-4616-83a3-64a907ebae48",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "services": [
+ "ExpressRoute",
+ "Backup"
+ ],
+ "severity": "Medium",
+ "subcategory": "ExpressRoute",
+ "text": "When using multiple ExpressRoute circuits ensure that routing allows for a primary and backup",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "S2S VPN connection can provide a cost-effective, resilient backup solution in the event of an ExpressRoute circuit failure. By using S2S VPN as a failover, you can maintain connectivity to your Azure resources without relying solely on ExpressRoute.",
+ "guid": "ead53cc7-de2e-48aa-ab35-71549ab9153d",
+ "link": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "services": [
+ "ExpressRoute",
+ "VPN",
+ "Backup",
+ "Cost"
+ ],
+ "severity": "Low",
+ "subcategory": "ExpressRoute",
+ "text": "Consider deploying site-to-site VPN as a backup for your ExpressRoute private peering",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "Standard Load Balancer SKU offers an SLA of 99.99% and a higher level of service availability compared to the Basic Load Balancer SKU.",
+ "guid": "778468d5-5a78-45d6-be96-c96ad8844cf3",
+ "link": "https://learn.microsoft.com/azure/load-balancer/skus",
+ "services": [
+ "LoadBalancer"
+ ],
+ "severity": "Medium",
+ "subcategory": "Load Balancers",
+ "text": "Leverage the Standard SKU for Load Balancers that handle traffic to production applications",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "By configuring the load balancer with a zone-redundant frontend, it can serve zonal resources in any zone with a single IP address. As long as at least one zone remains healthy within the region, the IP address associated with the frontend can survive one or more zone failures. It is recommended to have multiple zonal resources, such as virtual machines from different zones, in the backend pool of the load balancer. ",
+ "guid": "b2b38c88-6ba2-4c02-8499-114a5d3ce574",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "services": [
+ "LoadBalancer",
+ "VM"
+ ],
+ "severity": "Low",
+ "subcategory": "Load Balancers",
+ "text": "For load balancers, consider using a zone-redundant frontend with multiple zonal resources in the backend",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "When designing health probes for your Azure Load Balancer, it is important to follow best practices to ensure reliable and accurate monitoring of your backend instances.",
+ "guid": "dccbd979-2a6b-4cca-8b5f-ea1ebf3dd95d",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-custom-probe-overview#design-guidance",
+ "services": [
+ "LoadBalancer",
+ "Monitor"
+ ],
+ "severity": "Low",
+ "subcategory": "Load Balancers",
+ "text": "Select the right protocol, appropriate intervals and timeouts, representative paths and probe responses when defining Load Balancer Health Probes",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "When choosing the best option for deploying NVAs in Azure, it is crucial to consider the vendor's recommendations and validate that the specific design has been vetted and validated by the NVA vendor. The vendor should also provide the necessary NVA configuration for seamless integration in Azure.",
+ "guid": "8b1188b3-c6a4-46ce-a544-451e192d3442",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
+ "services": [
+ "NVA"
+ ],
+ "severity": "High",
+ "subcategory": "NVAs",
+ "text": "Deploy Network Virtual Appliances (NVAs) in a vendor supported configuration for High Availability",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "By deploying VPN Gateways in an active-active mode, you can distribute VPN traffic across multiple gateways, improving reliability and ensuring continuous connectivity in case of failures or maintenance.",
+ "guid": "927139b8-2110-42db-b6ea-f11e6f843e53",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "services": [
+ "VPN",
+ "ACR"
+ ],
+ "severity": "Medium",
+ "subcategory": "VPN Gateways",
+ "text": "Deploy Azure VPN Gateways in an active-active mode to ensure high availability and redundancy for your VPN connections.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Network",
+ "checklist": "Resiliency Review",
+ "description": "Zone-redundant SKUs ensure that your VPN gateways are physically and logically separated within a region, providing resiliency and scalability. This deployment configuration safeguards your on-premises network connectivity to Azure from zone-level failures.",
+ "guid": "f4722d92-8c1b-41cd-921f-54b29b9de39a",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/about-zone-redundant-vnet-gateways",
+ "services": [
+ "VPN"
+ ],
+ "severity": "Medium",
+ "subcategory": "VPN Gateways",
+ "text": "Use zone-redundant SKUs when deploying VPN Gateways to enhance resilience and protect against zone-level failures",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Stream Analytics Review Checklist",
+ "guid": "32e52e36-11c8-418b-8a0b-c511e43a18a9",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-stream_analytics_v1.docx",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availablity ",
+ "text": "Leverage FTA Resiliency Handbook for Stream Analytics",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Stream Analytics Review Checklist",
+ "description": "Azure Stream Analytics provides high availability (99.9% SLA) for jobs and clusters within a region, the details of which are transparent to the end customer. If failures occur within the service, per the documentation �Azure Stream Analytics guarantees exactly once event processing and at-least-once delivery of events, so events are never lost.�",
+ "guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
+ "link": "https://azure.microsoft.com/en-in/products/stream-analytics",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "High Availablity ",
+ "text": "Understand High Availability 99% SLA and use it to plan your DR strategy",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Stream Analytics Review Checklist",
+ "description": "Azure Stream Analytics resources (jobs, clusters, etc.) are regional and do not provide automatic geo-failover. However, you can achieve geo-redundancy by deploying identical Stream Analytics jobs in multiple Azure regions. Each job connects to local input and output sources. It is the responsibility of your application to both send input data into the two regional inputs and reconcile between the two regional outputs.",
+ "guid": "fc833934-8b26-42d6-ac5f-512925498e6d",
+ "link": "https://learn.microsoft.com/azure/stream-analytics/geo-redundancy",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Geo Redundancy",
+ "text": "Plan for Geo Redudancy of the service",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Stream Analytics Review Checklist",
+ "guid": "b9d37dac-43bc-46cd-8d7a-a9b24604489a",
+ "link": "https://learn.microsoft.com/azure/stream-analytics/geo-redundancy",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Geo Redundancy",
+ "text": "Depending on your availablity requirement, configure Active/Active configuration or Active/Passive configuration ",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Governance",
+ "checklist": "Azure Key Vault",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "Backup"
+ ],
+ "severity": "High",
+ "subcategory": "Deployment best practices",
+ "text": "Familiarize yourself with the Key Vault's best practices such as isolation recommendations, access control, data protection, backup, and logging.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "services": [
+ "ACR",
+ "AKV"
+ ],
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "Key Vault is a managed service and Microsoft will handle the failover within and across region. Familiarize yourself with the Key Vault's availability and redundancy.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "services": [
+ "AKV"
+ ],
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "The contents of your key vault are replicated within the region and to a secondary region at least 150 miles away, but within the same geography to maintain high durability of your keys and secrets. Familiarize yourself with the Key Vault's data replication.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "AzurePolicy"
+ ],
+ "severity": "Medium",
+ "subcategory": "High Availability",
+ "text": "During failover, access policy or firewall configurations and settings can't be changed. The key vault will be in read-only mode during failover. Familiarize yourself with the Key Vault's failover guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "services": [
+ "Backup",
+ "Storage",
+ "AKV",
+ "Subscriptions",
+ "ASR"
+ ],
+ "severity": "Medium",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "When you back up a key vault object, such as a secret, key, or certificate, the backup operation will download the object as an encrypted blob. This blob can't be decrypted outside of Azure. To get usable data from this blob, you must restore the blob into a key vault within the same Azure subscription and Azure geography. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "If you want protection against accidental or malicious deletion of your secrets, configure soft-delete and purge protection features on your key vault.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "ASR"
+ ],
+ "severity": "Low",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "Key Vault's soft-deleted resources are retained for a set period of 90 calendar days. Familiarize yourself with the Key Vault's soft-delete guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "Backup",
+ "ASR"
+ ],
+ "severity": "Low",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "Understand Key Vault's backup limitations. Key Vault does not support the ability to backup more than 500 past versions of a key, secret, or certificate object. Attempting to backup a key, secret, or certificate object may result in an error. It is not possible to delete previous versions of a key, secret, or certificate.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "Backup",
+ "ASR"
+ ],
+ "severity": "Low",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "Key Vault doesn't currently provide a way to back up an entire key vault in a single operation and keys, secrets and certitificates must be backup indvidually. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "ASR",
+ "EventHubs"
+ ],
+ "severity": "Medium",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "Purge protection is recommended when using keys for encryption to prevent data loss. Purge protection is an optional Key Vault behavior and is not enabled by default. Purge protection can only be enabled once soft-delete is enabled. It can be turned on via CLI, PowerShell or Portal.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Security",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "services": [
+ "AKV",
+ "RBAC",
+ "Entra"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity and Access Management",
+ "text": "RBAC is recommended to control access to your key vault. Familiarize yourself with the Key Vault's access control guidance.",
+ "waf": "Security"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "Using the correct approach to feed a datalake with cold data and having the Kusto query engine at your disposal at the same time, as in the short-term storage",
+ "guid": "ba7da7be-9951-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/data-explorer/kusto/management/data-export/continuous-data-export",
+ "service": "Azure Data Explorer",
+ "services": [
+ "Cost",
+ "Storage"
+ ],
+ "subcategory": "Replication",
+ "text": "Leverage External Tables and Continuous data export overview to reduce costs",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "Azure Data Explorer provides an optional follower capability for a leader cluster to be followed by other follower clusters for read-only access to the leader's data and metadata. Changes in the leader, such as create, append, and drop are automatically synchronized to the follower. While the leaders could span Azure regions, the follower clusters should be hosted in the same region(s) as the leader. If the leader cluster is down or databases or tables are accidentally dropped, the follower clusters will lose access until access is recovered in the leader.",
+ "guid": "56a22586-f490-4641-addd-ea8a377cdeb3",
+ "link": "https://learn.microsoft.com/azure/data-explorer/follower?tabs=csharp",
+ "service": "Azure Data Explorer",
+ "services": [
+ "Storage"
+ ],
+ "subcategory": "Replication",
+ "text": "To share data, explore Leader-follower cluster configuration",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "Azure Data Explorer doesn't support automatic protection against the outage of an entire Azure region. This disruption can happen during a natural disaster, like an earthquake. If you require a solution for a disaster recovery situation, do the following steps to ensure business continuity. In these steps, you'll replicate your clusters, management, and data ingestion in two Azure paired regions.",
+ "guid": "861bb2bc-14ae-4a6e-95d8-d9a3adc218e6",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#create-multiple-independent-clusters",
+ "service": "Azure Data Explorer",
+ "services": [
+ "ASR"
+ ],
+ "subcategory": "Replication",
+ "text": "To protect against regional failure, create Multiple independent clusters, preferably in two Azure Paired regions",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "guid": "436b0635-cb45-4e57-a603-324ace8cc123",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#replicate-management-activities",
+ "service": "Azure Data Explorer",
+ "services": [
+ "Storage",
+ "RBAC"
+ ],
+ "subcategory": "Replication",
+ "text": "Replicate all management activities such as creating new tables or managing user roles on each cluster.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "guid": "18ca6017-0265-4f4b-a46a-393af7f31728",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution",
+ "service": "Azure Data Explorer",
+ "services": [],
+ "subcategory": "Replication",
+ "text": "Ingest data into each cluster in parallel",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "This configuration is also called 'always-on'. For critical application deployments with no tolerance for outages, you should use multiple Azure Data Explorer clusters across Azure paired regions.",
+ "guid": "58a9c279-9c42-4bb6-9d0c-65556246b338",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-active-configuration",
+ "service": "Azure Data Explorer",
+ "services": [
+ "ACR"
+ ],
+ "subcategory": "DR Configuration",
+ "text": "For critical application with no tolerance for outages, create Active-Active-Active (always-on) configuration",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "This configuration is identical to the active-active-active configuration, but only involves two Azure paired regions. Configure dual ingestion, processing, and curation. Users are routed to the nearest region. The cluster SKU must be the same across regions.",
+ "guid": "563a4dc7-4a74-48b6-922a-d190916a6649",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-configuration",
+ "service": "Azure Data Explorer",
+ "services": [
+ "ACR"
+ ],
+ "subcategory": "DR Configuration",
+ "text": "For critical applications, create Active-Active configuration in two paired regions",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "The Active-Hot configuration is similar to the Active-Active configuration in dual ingest, processing, and curation. While the standby cluster is online for ingestion, process, and curation, it isn't available to query. The standby cluster doesn't need to be in the same SKU as the primary cluster. It can be of a smaller SKU and scale, which may result in it being less performant. In a disaster scenario, users are redirected to the standby cluster, which can optionally be scaled up to increase performance.",
+ "guid": "8fadfe27-7de2-483b-8ac3-52baa9b75708",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-hot-standby-configuration",
+ "service": "Azure Data Explorer",
+ "services": [],
+ "subcategory": "DR Configuration",
+ "text": "For applications, which required only read during failure, create Active-Hot standby configuration",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "This solution offers the least resiliency (highest RPO and RTO), is the lowest in cost and highest in effort. In this configuration, there's no data recovery cluster. Configure continuous export of curated data (unless raw and intermediate data is also required) to a storage account that is configured GRS (Geo Redundant Storage). A data recovery cluster is spun up if there is a disaster recovery scenario. At that time, DDLs, configuration, policies, and processes are applied. Data is ingested from storage with the ingestion property kustoCreationTime to over-ride the ingestion time that defaults to system time.",
+ "guid": "49aa8092-dc8e-4b9d-8bb7-3b26a5a67eba",
+ "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#on-demand-data-recovery-configuration",
+ "service": "Azure Data Explorer",
+ "services": [
+ "Cost",
+ "Storage",
+ "AzurePolicy",
+ "ASR"
+ ],
+ "subcategory": "DR Configuration",
+ "text": "For applications, where cost is a concern and can withstand some downtime during failure, create on-demand data recovery cluster configuration",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "description": "All database objects, policies, and configurations should be persisted in source control so they can be released to the cluster from your release automation tool.",
+ "guid": "5a907e1e-348e-4f25-9c27-d32e8bbac757",
+ "link": "https://learn.microsoft.com/azure/data-explorer/devops",
+ "service": "Azure Data Explorer",
+ "services": [
+ "AzurePolicy"
+ ],
+ "subcategory": "IaC",
+ "text": "Wrap DevOps and source control around all your code",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "guid": "1559ab91-53e8-4908-ae28-b84c33b6b780",
+ "link": "https://learn.microsoft.com/azure/data-explorer/devops",
+ "service": "Azure Data Explorer",
+ "services": [],
+ "subcategory": "IaC",
+ "text": "Design, develop, and implement validation routines to ensure all clusters are in-sync from a data perspective.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure Data Explorer Review Checklist",
+ "guid": "8b9fe5c4-1049-4d40-9a82-2c3474d00f18",
+ "link": "https://learn.microsoft.com/azure/data-explorer/devops",
+ "service": "Azure Data Explorer",
+ "services": [],
+ "subcategory": "IaC",
+ "text": "Be fully cognizant of what it takes to build a cluster from scratch. Leverage Infrastructure as a Code for your deployments",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Automation",
+ "checklist": "SAP Checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "services": [
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "ACSS",
+ "text": "Azure Center for SAP solutions (ACSS) is an Azure offering that makes SAP a top-level workload on Azure. ACSS is an end-to-end solution that enables you to create and run SAP systems as a unified workload on Azure and provides a more seamless foundation for innovation. You can take advantage of the management capabilities for both new and existing Azure-based SAP systems.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "waf": "Operations"
+ },
+ {
+ "category": "Automation",
+ "checklist": "SAP Checklist",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
+ "services": [
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "SDAF",
+ "text": "Azure supports automating SAP deployments in Linux and Windows. SAP Deployment Automation Framework is an open-source orchestration tool that can deploy, install, and maintain SAP environments.",
+ "training": "https://github.com/Azure/sap-automation",
+ "waf": "Operations"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
+ "services": [
+ "Backup",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Backup and restore",
+ "text": "Perform a point-in-time recovery for your production databases at any point and in a time frame that meets your RTO; point-in-time recovery typically includes operator errors deleting data either on the DBMS layer or through SAP, incidentally",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
+ "services": [
+ "Backup",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "Medium",
+ "subcategory": "Disaster recovery",
+ "text": "Test the backup and recovery times to verify that they meet your RTO requirements for restoring all systems simultaneously after a disaster.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "SQL",
+ "Backup",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "Disaster recovery",
+ "text": "You can replicate standard storage between paired regions, but you can't use standard storage to store your databases or virtual hard disks. You can replicate backups only between paired regions that you use. For all your other data, run your replication by using native DBMS features like SQL Server Always On or SAP HANA System Replication. Use a combination of Site Recovery, rsync or robocopy, and other third-party software for the SAP application layer.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Disaster recovery",
+ "text": "When using Azure Availability Zones to achieve high availability, you must consider latency between SAP application servers and database servers. For zones with high latencies, operational procedures need to be in place to ensure that SAP application servers and database servers are running in the same zone at all times.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
+ "services": [
+ "ExpressRoute",
+ "VPN",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Disaster recovery",
+ "text": "Set up ExpressRoute connections from on-premises to the primary and secondary Azure disaster recovery regions. Also, as an alternative to using ExpressRoute, consider setting up VPN connections from on-premises to the primary and secondary Azure disaster recovery regions.",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
+ "services": [
+ "ACR",
+ "AKV",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "Low",
+ "subcategory": "Disaster recovery",
+ "text": "Replicate key vault contents like certificates, secrets, or keys across regions so you can decrypt data in the DR region.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP",
+ "VNet"
+ ],
+ "severity": "Medium",
+ "subcategory": "Disaster recovery",
+ "text": "Peer the primary and disaster recovery virtual networks. For example, for HANA System Replication, an SAP HANA DB virtual network needs to be peered to the disaster recovery site's SAP HANA DB virtual network.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "Low",
+ "subcategory": "Disaster recovery",
+ "text": "If you use Azure NetApp Files storage for your SAP deployments, at a minimum, create two Azure NetApp Files accounts in the Premium tier, in two regions.",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Disaster recovery",
+ "text": "Native database replication technology should be used to synchronize the database in a HA pair.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP",
+ "VNet"
+ ],
+ "severity": "High",
+ "subcategory": "Disaster recovery",
+ "text": "The CIDR for the primary virtual network (VNet) shouldn't conflict or overlap with the CIDR of the DR site's VNet",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "Entra",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Disaster recovery",
+ "text": "Use Site Recovery to replicate an application server to a DR site. Site Recovery can also help with replicating central-services cluster VMs to the DR site. When you invoke DR, you'll need to reconfigure the Linux Pacemaker cluster on the DR site (for example, replace the VIP or SBD, run corosync.conf, and more).",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Consider the availability of SAP software against single points of failure. This includes single points of failure within applications such as DBMSs utilized in SAP NetWeaver and SAP S/4HANA architectures, SAP ABAP and ASCS + SCS. Also, other tools such as SAP Web Dispatcher.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "For SAP and SAP databases, consider implementing automatic failover clusters. In Windows, Windows Server Failover Clustering supports failover. In Linux, Linux Pacemaker or third-party tools like SIOS Protection Suite and Veritas InfoScale support failover.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "VM",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Azure doesn't support architectures in which the primary and secondary VMs share storage for DBMS data. For the DBMS layer, the common architecture pattern is to replicate databases at the same time and with different storage stacks than the ones that the primary and secondary VMs use.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "The DBMS data and transaction/redo log files are stored in Azure supported block storage or Azure NetApp Files. Azure Files or Azure Premium Files isn't supported as storage for DBMS data and/or redo log files with SAP workload.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "You can use Azure shared disks in Windows for ASCS + SCS components and specific high-availability scenarios. Set up your failover clusters separately for SAP application layer components and the DBMS layer. Azure doesn't currently support high-availability architectures that combine SAP application layer components and the DBMS layer into one failover cluster.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
+ "services": [
+ "LoadBalancer",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Most failover clusters for SAP application layer components (ASCS) and the DBMS layer require a virtual IP address for a failover cluster. Azure Load Balancer should handle the virtual IP address for all other cases. One design principle is to use one load balancer per cluster configuration. We recommend that you use the standard version of the load balancer (Standard Load Balancer SKU).",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
+ "services": [
+ "LoadBalancer",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Make sure the Floating IP is enabled on the Load balancer",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Before you deploy your high-availability infrastructure, and depending on the region you choose, determine whether to deploy with an Azure availability set or an availability zone.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "VM",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "If you want to meet the infrastructure SLAs for your applications for SAP components (central services, application servers, and databases), you must choose the same high availability options (VMs, availability sets, availability zones) for all components.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "RBAC",
+ "Entra",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Do not mix servers of different roles in the same availability set. Keep central services VMs, database VMs, application VMs in their own availability sets",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "High availability",
+ "text": "You can't deploy Azure availability sets within an Azure availability zone unless you use proximity placement groups.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "When you create availability sets, use the maximum number of fault domains and update domains available. For example, if you deploy more than two VMs in one availability set, use the maximum number of fault domains (three) and enough update domains to limit the effect of potential physical hardware failures, network outages, or power interruptions, in addition to Azure planned maintenance. The default number of fault domains is two, and you can't change it online later.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "When you use Azure proximity placement groups in an availability set deployment, all three SAP components (central services, application server, and database) should be in the same proximity placement group.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "services": [
+ "ACR",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Use one proximity placement group per SAP SID. Groups don't span across Availability Zones or Azure regions",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "High availability",
+ "text": "Use one of the following services to run SAP central services clusters, depending on the operating system.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "VM",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "Medium",
+ "subcategory": "High availability",
+ "text": "Azure doesn't currently support combining ASCS and DB HA in the same Linux Pacemaker cluster; separate them into individual clusters. However, you can combine up to five multiple central-services clusters into a pair of VMs.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "VM",
+ "SAP",
+ "ASR"
+ ],
+ "severity": "Medium",
+ "subcategory": "High availability",
+ "text": "Deploy both VMs in the high-availability pair in an availability set or in availability zones. These VMs should be the same size and have the same storage configuration.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "High availability",
+ "text": "Azure supports installing and configuring SAP HANA and ASCS/SCS and ERS instances on the same high availability cluster running on Red Hat Enterprise Linux (RHEL).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Run all production systems on Premium managed SSDs and use Azure NetApp Files or Ultra Disk Storage. At least the OS disk should be on the Premium tier so you can achieve better performance and the best SLA.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "You should run SAP HANA on Azure only on the types of storage that are certified by SAP. Note that certain volumes must be run on certain disk configurations, where applicable. These configurations include enabling Write Accelerator and using Premium storage. You also need to ensure that the file system that runs on storage is compatible with the DBMS that runs on the machine.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Consider configuring high availability depending on the type of storage you use for your SAP workloads. Some storage services available in Azure are not supported by Azure Site Recovery, so your high availability configuration may differ.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Business Continuity and Disaster Recovery",
+ "checklist": "SAP Checklist",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Storage",
+ "text": "Different native Azure storage services (like Azure Files, Azure NetApp Files, Azure Shared Disk) may not be available in all regions. So to have similar SAP setup on the DR region after failover, ensure the respective storage service is offered in DR site.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Cost Optimization",
+ "checklist": "SAP Checklist",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "service": "SAP",
+ "services": [
+ "Cost",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Automate SAP System Start-Stop to manage costs.",
+ "waf": "Cost"
+ },
+ {
+ "category": "Cost Optimization",
+ "checklist": "SAP Checklist",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "services": [
+ "Cost",
+ "Storage",
+ "VM",
+ "SAP"
+ ],
+ "severity": "Low",
+ "subcategory": " ",
+ "text": "In the case of using Azure Premium Storage with SAP HANA, Azure Standard SSD storage can be used to select a cost-conscious storage solution. However, please note that choosing Standard SSD or Standard HDD Azure storage will affect the SLA of the individual VMs. Also, for systems with lower I/O throughput and low latency, such as non-production environments, lower series VMs can be used.",
+ "waf": "Cost"
+ },
+ {
+ "category": "Cost Optimization",
+ "checklist": "SAP Checklist",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "services": [
+ "Cost",
+ "Storage",
+ "VM",
+ "SAP"
+ ],
+ "severity": "Low",
+ "subcategory": " ",
+ "text": "As a lower-cost alternative configuration (multipurpose), you can choose a low-performance SKU for your non-production HANA database server VMs. However, it is important to note that some VM types, such as E-series, are not HANA certified (SAP HANA Hardware Directory) or cannot achieve storage latency of less than 1ms.",
+ "waf": "Cost"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "RBAC",
+ "Subscriptions",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Identity",
+ "text": "Enforce a RBAC model for management groups, subscriptions, resource groups and resources",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Enforce Principal propagation for forwarding the identity from SAP cloud application to SAP on-premises (Including IaaS) through cloud connector",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Implement SSO to SAP SaaS applications like SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics and SAP C4C with Azure AD using SAML.",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP Web GUI by using SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "You can implement SSO to SAP GUI by using SAP NetWeaver SSO or a partner solution.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "service": "SAP",
+ "services": [
+ "AKV",
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "service": "SAP",
+ "services": [
+ "AKV",
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration and maintenance. For SSO with X.509 client certificates, consider the SAP Secure Login Server, which is a component of the SAP SSO solution.",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Implement SSO by using OAuth for SAP NetWeaver to allow third-party or custom applications to access SAP NetWeaver OData services.",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Implement SSO to SAP HANA",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Consider Azure AD an identity provider for SAP systems hosted on RISE. For more information, see Integrating the Service with Azure AD.",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
+ "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "For applications that access SAP, you might want to use principal propagation to establish SSO.",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "If you're using SAP BTP services or SaaS solutions that require SAP Identity Authentication Service (IAS), consider implementing SSO between SAP Cloud Identity Authentication Services and Azure AD to access those SAP services. This integration lets SAP IAS act as a proxy identity provider and forwards authentication requests to Azure AD as the central user store and identity provider.",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Implement SSO to SAP BTP",
+ "waf": "Security"
+ },
+ {
+ "category": "Identity and Access",
+ "checklist": "SAP Checklist",
+ "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "service": "SAP",
+ "services": [
+ "Entra",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Team Planning",
- "text": "Configure your sprints",
+ "subcategory": "Identity",
+ "text": "If you're using SAP SuccessFactors, consider using the Azure AD automated user provisioning. With this integration, as you add new employees to SAP SuccessFactors, you can automatically create their user accounts in Azure AD. Optionally, you can create user accounts in Microsoft 365 or other SaaS applications that are supported by Azure AD. Use write-back of the email address to SAP SuccessFactors.",
+ "waf": "Security"
+ },
+ {
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "description": "Keep your management group hierarchy reasonably flat, no more than four.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
+ "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "service": "SAP",
+ "services": [
+ "Subscriptions",
+ "AzurePolicy",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Subscriptions",
+ "text": "enforce existing Management Group policies to SAP Subscriptions",
+ "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Set up your work item heirarchy",
- "guid": "699ef1d5-a83d-4e5d-b36c-1c81870a0bc5",
- "link": "https://learn.microsoft.com/azure/devops/organizations/settings/work/customize-process-work-item-type?view=azure-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Team Planning",
- "text": "Choose Work Item types",
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
+ "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "services": [
+ "Subscriptions",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Subscriptions",
+ "text": "Integrate tightly coupled applications into the same SAP subscription to avoid additional routing and management complexity",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "WIT Processes available in Azure DevOps",
- "guid": "c1e43a18-658d-4285-aed6-7179b825546d",
- "link": "https://learn.microsoft.com/azure/devops/boards/work-items/guidance/choose-process?view=azure-devops&tabs=agile-process",
- "services": [],
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "services": [
+ "Subscriptions",
+ "SAP"
+ ],
"severity": "High",
- "subcategory": "Team Planning",
- "text": "Select a WIT Process",
+ "subcategory": "Subscriptions",
+ "text": "Leverage Subscription as scale unit and scaling our resources, consider deploying subscription per environment eg. Sandbox, non-prod, prod ",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Use Azure Boards with GitHub",
- "guid": "f2aee455-3afc-4833-a248-726dd68c5b5c",
- "link": "https://learn.microsoft.com/azure/devops/cross-service/github-integration?view=azure-devops",
- "services": [],
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
+ "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "Subscriptions",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Subscriptions",
+ "text": "Ensure quota increase as a part of subscription provisioning (e.g. total available VM cores within a subscription)",
+ "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "waf": "Operations"
+ },
+ {
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
+ "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
+ "service": "SAP",
+ "services": [
+ "Subscriptions",
+ "SAP"
+ ],
"severity": "Low",
- "subcategory": "Tool Integration",
- "text": "GitHub Integration",
+ "subcategory": "Subscriptions",
+ "text": "The Quota API is a REST API that you can use to view and manage quotas for Azure services. Consider using it if necessary.",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Understand the methologies",
- "guid": "2925394b-69b9-4d37-aac4-3bc68d1d7665",
- "link": "https://www.atlassian.com/agile/scrum/agile-vs-scrum",
- "services": [],
- "severity": "Medium",
- "subcategory": "Process Planning",
- "text": "Understand Agile Vs Scrum",
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
+ "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "Subscriptions",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Subscriptions",
+ "text": "If deploying to an availability zone, ensure that the VM's zone deployment is available once the quota has been approved. Submit a support request with the subscription, VM series, number of CPUs and availability zone required.",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Create Dashboard and PowerBI reports",
- "guid": "7246b448-564b-44dd-94a7-59c7633bd2a1",
- "link": "https://learn.microsoft.com/azure/devops/report/dashboards/overview?view=azure-devops",
- "services": [],
- "severity": "Medium",
- "subcategory": "Reporting",
- "text": "Dashboard",
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "services": [
+ "Subscriptions",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Subscriptions",
+ "text": "Ensure required services and features are available within the chosen deployment regions eg. ANF , Zone etc.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Set up backlog",
- "guid": "a27a764a-90be-40e3-98ee-293c1bd363ca",
- "link": "https://learn.microsoft.com/azure/devops/boards/backlogs/set-up-your-backlog?view=azure-devops",
- "services": [],
+ "category": "Management Group and Subscriptions",
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "service": "SAP",
+ "services": [
+ "Cost",
+ "TrafficManager",
+ "Subscriptions",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Reporting",
- "text": "Refine your backlog",
+ "subcategory": "Subscriptions",
+ "text": "Leverage Azure resource tag for cost categorization and resource grouping (: BillTo, Department (or Business Unit), Environment (Production, Stage, Development), Tier (Web Tier, Application Tier), Application Owner, ProjectName)",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Operations"
},
{
- "category": "Azure Boards",
- "checklist": "Azure DevOps",
- "description": "Link your work items",
- "guid": "aab75719-49ab-4919-9dc9-fc9d1bb84b37",
- "link": "https://learn.microsoft.com/azure/devops/boards/queries/link-work-items-support-traceability?view=azure-devops&tabs=browser",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Backup",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "BCDR",
+ "text": "Help protect your HANA database by using the Azure Backup service.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "VM",
+ "Monitor",
+ "Entra",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Reporting",
- "text": "Visualize Relationships",
+ "subcategory": "BCDR",
+ "text": "If you deploy Azure NetApp Files for your HANA, Oracle, or DB2 database, use the Azure Application Consistent Snapshot tool (AzAcSnap) to take application-consistent snapshots. AzAcSnap also supports Oracle databases. Consider using AzAcSnap on a central VM rather than on individual VMs.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Management",
+ "text": "Ensure time-zone matches between the operating system and the SAP system.",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "View the velocity report",
- "guid": "b5a67fcb-9ed5-4b35-978d-447a826c2863",
- "link": "https://learn.microsoft.com/azure/devops/report/dashboards/team-velocity?view=azure-devops&tabs=in-context",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Don't group different application services in the same cluster. For example, don't combine DRBD and central services clusters on the same cluster. However, you can use the same Pacemaker cluster to manage approximately five different central services (multi-SID cluster).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
+ "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "service": "SAP",
+ "services": [
+ "Cost",
+ "Monitor",
+ "SAP"
+ ],
"severity": "Low",
- "subcategory": "Reporting",
- "text": "Review Team Velocity",
- "waf": "Operations"
+ "subcategory": "Management",
+ "text": "Consider running dev/test systems in a snooze model to save and optimize Azure run costs.",
+ "waf": "Cost"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Create your first pipeline",
- "guid": "c00f1cac-699e-4f1d-9a83-de5de36c1c81",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/create-first-pipeline?view=azure-devops&tabs=java%2Ctfs-2018-2%2Cbrowser",
- "services": [],
- "severity": "High",
- "subcategory": "Continuous Integration",
- "text": "Set up pipeline",
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
+ "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Entra",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "If you partner with customers by managing their SAP estates, consider Azure Lighthouse. Azure Lighthouse allows managed service providers to use Azure native identity services to authenticate to the customers' environment. It puts the control in the hands of customers, because they can revoke access at any time and audit service providers' actions.",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Specify events that trigger pipelines",
- "guid": "870a0bc5-c1e4-43a1-a658-d2858ed67179",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/build/triggers?view=azure-devops",
- "services": [],
- "severity": "High",
- "subcategory": "Continuous Integration",
- "text": "Set Build triggers",
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
+ "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "VM",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Management",
+ "text": "Use Azure Update Manager to check the status of available updates for a single VM or multiple VMs and consider scheduling regular patching.",
+ "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Use YAML to create build pipeline",
- "guid": "b825546d-f2ae-4e45-93af-c8339248726d",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/customize-pipeline?view=azure-devops",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "SAP"
+ ],
"severity": "Low",
- "subcategory": "Continuous Integration",
- "text": "Customize YAML Pipeline",
+ "subcategory": "Management",
+ "text": "Optimize and manage SAP Basis operations by using SAP Landscape Management (LaMa). Use the SAP LaMa connector for Azure to relocate, copy, clone, and refresh SAP systems.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Use classic GUI editor to set up pipeline",
- "guid": "d68c5b5c-2925-4394-a69b-9d379ac43bc6",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/get-started/pipelines-get-started?view=azure-devops&source=recommendations#define-pipelines-using-the-classic-interface",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "service": "SAP",
+ "services": [
+ "SQL",
+ "Monitor",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Continuous Integration",
- "text": "Use GUI for pipeline",
+ "subcategory": "Monitoring",
+ "text": "Use Azure Monitor for SAP solutions to monitor your SAP workloads(SAP HANA, high-availability SUSE clusters, and SQL systems) on Azure. Consider supplementing Azure Monitor for SAP solutions with SAP Solution Manager.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set up templates, parameters and expressions",
- "guid": "8d1d7665-7246-4b44-a564-b4dd74a759c7",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/templates?view=azure-devops&pivots=templates-includes",
- "services": [],
- "severity": "Medium",
- "subcategory": "Continuous Integration",
- "text": "Configure Templates",
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "Monitor",
+ "Entra",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Run a VM Extension for SAP check. VM Extension for SAP uses the assigned managed identity of a virtual machine (VM) to access VM monitoring and configuration data. The check ensures that all performance metrics in your SAP application come from the underlying Azure Extension for SAP.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set up jobs, stages and dependencies",
- "guid": "633bd2a1-a27a-4764-a90b-e0e378ee293c",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/stages?view=azure-devops&tabs=yaml",
- "services": [],
- "severity": "High",
- "subcategory": "Continuous Integration",
- "text": "Jobs",
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "AzurePolicy",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Use Azure Policy for access control and compliance reporting. Azure Policy provides the ability to enforce organization-wide settings to ensure consistent policy adherence and fast violation detection. ",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set up conditions and Demands",
- "guid": "1bd363ca-aab7-4571-a49a-b9193dc9fc9d",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml%2Cstages",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "NetworkWatcher",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Continuous Integration",
- "text": "Conditions and Demands",
+ "subcategory": "Monitoring",
+ "text": "Use Connection Monitor in Azure Network Watcher to monitor latency metrics for SAP databases and application servers. Or collect and display network latency measurements by using Azure Monitor.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Define Variables",
- "guid": "1bb84b37-b5a6-47fc-a9ed-5b35478d447a",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch",
- "services": [],
- "severity": "High",
- "subcategory": "Continuous Integration",
- "text": "Variables",
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "73686af4-6791-4f89-95ad-a43324e13811",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "VM",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Perform a quality check for SAP HANA on the provisioned Azure infrastructure to verify that provisioned VMs comply with SAP HANA on Azure best practices.",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set up your deployment pipeline",
- "guid": "826c2863-c00f-41ca-a699-ef1d5a83de5d",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/create-multistage-pipeline?view=azure-devops",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Subscriptions",
+ "SAP"
+ ],
"severity": "High",
- "subcategory": "Continuous Deployment",
- "text": "Deployment Pipeline",
- "waf": "Operations"
+ "subcategory": "Monitoring",
+ "text": "For each Azure subscription, run a latency test on Azure availability zones before zonal deployment to choose low-latency zones for deployment of SAP on Azure.",
+ "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Select correct branches to deploy from",
- "guid": "e36c1c81-870a-40bc-9c1e-43a18658d285",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/release/deploy-multiple-branches?view=azure-devops",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Storage",
+ "ASR",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Continuous Deployment",
- "text": "Release branch",
- "training": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
+ "subcategory": "Monitoring",
+ "text": "Run the Resiliency Report to ensure that the configuration of the entire provisioned Azure infrastructure (Compute, Database, Networking, Storage, Site Recovery) complies with the configuration defined by Cloud Adaption Framework for Azure.",
+ "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
+ "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
+ "service": "SAP",
+ "services": [
+ "Sentinel",
+ "Monitor",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Implement threat protection by using the Microsoft Sentinel solution for SAP. Use this solution to monitor your SAP systems and detect sophisticated threats throughout the business logic and application layers.",
+ "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
+ "waf": "Security"
+ },
+ {
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "service": "SAP",
+ "services": [
+ "Cost",
+ "Monitor",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Azure tagging can be leveraged to logically group and track resources, automate their deployments, and most importantly, provide visibility on the incurred costs.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "use relevant template to deploy to azure",
- "guid": "8ed67179-b825-4546-bf2a-ee4553afc833",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/overview-azure?view=azure-devops",
- "services": [],
- "severity": "Medium",
- "subcategory": "Continuous Deployment",
- "text": "Deploy to Azure",
- "waf": "Operations"
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "VM",
+ "SAP"
+ ],
+ "severity": "Low",
+ "subcategory": "Performance",
+ "text": "Use inter-VM latency monitoring for latency-sensitive applications.",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Define Release Approvals and pre deployment checks",
- "guid": "9248726d-d68c-45b5-a292-5394b69b9d37",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "ASR",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Continuous Deployment",
- "text": "Approvals and Checks",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Operations"
+ "subcategory": "Performance",
+ "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Reliability"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Define Gates and post deployment checks",
- "guid": "9ac43bc6-8d1d-4766-9724-6b448564b4dd",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/release/approvals/?view=azure-devops&tabs=yaml",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Storage",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Continuous Deployment",
- "text": "Gates",
- "waf": "Operations"
+ "subcategory": "Performance",
+ "text": "Exclude all the database file systems and executable programs from antivirus scans. Including them could lead to performance problems. Check with the database vendors for prescriptive details on the exclusion list. For example, Oracle recommends excluding /oracle//sapdata from antivirus scans.",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Define Azure Function and REST API Checks",
- "guid": "74a759c7-633b-4d2a-8a27-a764a90be0e3",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/process/invoke-checks?view=azure-devops",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "c027f893-f404-41a9-b33d-39d625a14964",
+ "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "SAP"
+ ],
"severity": "Low",
- "subcategory": "Continuous Deployment",
- "text": "Azure Function Checks",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "subcategory": "Performance",
+ "text": "Consider collecting full database statistics for non-HANA databases after migration. For example, implement SAP note 1020260 - Delivery of Oracle statistics.",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Review pipeline reports",
- "guid": "78ee293c-1bd3-463c-aaab-7571949ab919",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/reports/pipelinereport?view=azure-devops",
- "services": [],
- "severity": "High",
- "subcategory": "Continuous Deployment",
- "text": "Pipline Reports",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Operations"
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "Storage",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Performance",
+ "text": "Consider using Oracle Automatic Storage Management (ASM) for all Oracle deployments that use SAP on Azure.",
+ "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "configure Trend Result widget",
- "guid": "3dc9fc9d-1bb8-44b3-9b5a-67fcb9ed5b35",
- "link": "https://learn.microsoft.com/azure/devops/report/dashboards/analytics-widgets?toc=%2Fazure%2Fdevops%2Fpipelines%2Ftoc.json&view=azure-devops#test-results-trend-advanced",
- "services": [],
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
+ "service": "SAP",
+ "services": [
+ "SQL",
+ "Monitor",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Analytics",
- "text": "Pipeline Result Trend",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "Operations"
+ "subcategory": "Performance",
+ "text": "For SAP on Azure running Oracle, a collection of SQL scripts can help you diagnose performance problems. Automatic Workload Repository (AWR) reports contain valuable information for diagnosing problems in the Oracle system. We recommend that you run an AWR report during several sessions and choose peak times for it, to ensure broad coverage for the analysis.",
+ "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Connect with WIT to visualize work",
- "guid": "478d447a-826c-4286-9c00-f1cac699ef1d",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/integrations/configure-pipelines-work-tracking?view=azure-devops&tabs=yaml",
- "services": [],
- "severity": "Medium",
- "subcategory": "Analytics",
- "text": "Work Tracking with Pipeline",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "category": "Management and Monitoring",
+ "checklist": "SAP Checklist",
+ "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
+ "services": [
+ "Monitor",
+ "ASR",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Reliability",
+ "text": "Use Azure Site Recovery monitoring to maintain the health of the disaster recovery service for SAP application servers.",
+ "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Understand agent pools",
- "guid": "5a83de5d-e36c-41c8-8870-a0bc5c1e43a1",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=yaml%2Cbrowser",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "SAP",
+ "services": [
+ "WAF",
+ "AppGW",
+ "AzurePolicy",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Continuous Deployment",
- "text": " Agents and agent pools",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Operations"
+ "subcategory": "App delivery",
+ "text": "For secure delivery of HTTP/S apps, use Application Gateway v2 and ensure that WAF protection and policies are enabled.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "waf": "Security"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Understand and provision Deployment Groups when required",
- "guid": "8658d285-8ed6-4717-ab82-5546df2aee45",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/release/deployment-groups/?view=azure-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Continuous Deployment",
- "text": "Deployment Groups",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
+ "services": [
+ "DNS",
+ "VM",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "DNS",
+ "text": "If the virtual machine's DNS or virtual name is not changed during migration to Azure, Background DNS and virtual names connect many system interfaces in the SAP landscape, and customers are only sometimes aware of the interfaces that developers define over time. Connection challenges arise between various systems when virtual or DNS names change after migrations, and it's recommended to retain DNS aliases to prevent these types of difficulties.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Understand Kubernetes Deployment",
- "guid": "53afc833-9248-4726-bd68-c5b5c2925394",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/ecosystems/kubernetes/deploy?view=azure-devops",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
"services": [
- "AKS"
+ "DNS",
+ "SAP",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "Continuous Deployment",
- "text": "Deploy to Kubernetes",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "severity": "Medium",
+ "subcategory": "DNS",
+ "text": "Use different DNS zones to distinguish each environment (sandbox, development, preproduction, and production) from each other. The exception is for SAP deployments with their own VNet; here, private DNS zones might not be necessary.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Perform Dynamic Security Testing",
- "guid": "b69b9d37-9ac4-43bc-98d1-d76657246b44",
- "link": "https://devblogs.microsoft.com/premier-developer/azure-devops-pipelines-leveraging-owasp-zap-in-the-release-pipeline/",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "description": "When configuring VNet peering, use the Allow traffic to remote virtual networks setting.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
+ "guid": "a3592829-e6e2-4061-9368-6af46791f893",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
+ "service": "SAP",
+ "services": [
+ "ACR",
+ "SAP",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Security",
- "text": "DAST Scan",
- "training": "https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/",
- "waf": "Security"
+ "subcategory": "Hybrid",
+ "text": "Local and global VNet peering provide connectivity and are the preferred approaches to ensure connectivity between landing zones for SAP deployments across multiple Azure regions",
+ "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
+ "waf": "Reliability"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Manage Service Connections",
- "guid": "8564b4dd-74a7-459c-9633-bd2a1a27a764",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml",
- "services": [],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "Service Connections",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
- "waf": "Security"
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
+ "service": "SAP",
+ "services": [
+ "NVA",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Hybrid",
+ "text": "It is not supported to deploy any NVA between SAP application and SAP Database server",
+ "training": "https://me.sap.com/notes/2731110",
+ "waf": "Performance"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set data retention policies for CI and CD",
- "guid": "a90be0e3-78ee-4293-a1bd-363caaab7571",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/policies/retention?view=azure-devops&tabs=yaml",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
+ "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
+ "service": "SAP",
"services": [
- "AzurePolicy"
+ "ACR",
+ "VWAN",
+ "SAP"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Retention Policies",
- "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
- "waf": "Security"
+ "subcategory": "Hybrid",
+ "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
+ "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set up and pay for concurrent pipelines",
- "guid": "949ab919-3dc9-4fc9-b1bb-84b37b5a67fc",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/licensing/concurrent-jobs?view=azure-devops&tabs=ms-hosted",
- "services": [],
- "severity": "Low",
- "subcategory": "Administration",
- "text": "Parallel Pipelines",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
+ "service": "SAP",
+ "services": [
+ "NVA",
+ "SAP",
+ "VNet"
+ ],
+ "severity": "Medium",
+ "subcategory": "Hybrid",
+ "text": "Consider deploying network virtual appliances (NVAs) between regions only if partner NVAs are used. NVAs between regions or VNets aren't required if native NVAs are present. When you're deploying partner networking technologies and NVAs, follow the vendor's guidance to verify conflicting configurations with Azure networking.",
+ "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Set pipeline permissions",
- "guid": "b9ed5b35-478d-4447-a826-c2863c00f1ca",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/policies/permissions?view=azure-devops",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
+ "service": "SAP",
+ "services": [
+ "VWAN",
+ "NVA",
+ "SAP",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Pipeline Permissions",
- "training": "https://learn.microsoft.com/learn/paths/implement-windows-server-iaas-virtual-machine-identity/",
- "waf": "Security"
+ "subcategory": "Hybrid",
+ "text": "Virtual WAN manages connectivity between spoke VNets for virtual-WAN-based topologies (no need to set up user-defined routing [UDR] or NVAs), and maximum network throughput for VNet-to-VNet traffic in the same virtual hub is 50 gigabits per second. If necessary, SAP landing zones can use VNet peering to connect to other landing zones and overcome this bandwidth limitation.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
+ "waf": "Operations"
},
{
- "category": "Azure Pipelines",
- "checklist": "Azure DevOps",
- "description": "Add users to pipeline",
- "guid": "c699ef1d-5a83-4de5-be36-c1c81870a0bc",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/policies/set-permissions?view=azure-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Security",
- "text": "Pipeline Users",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "82734c88-6ba2-4802-8459-11475e39e530",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "SAP",
+ "VNet"
+ ],
+ "severity": "High",
+ "subcategory": "IP plan",
+ "text": "Public IP assignment to VM running SAP Workload is not recommended.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Security"
},
{
- "category": "Azure Artifact",
- "checklist": "Azure DevOps",
- "description": "Configure Artifacts",
- "guid": "5c1e43a1-8658-4d28-98ed-67179b825546",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/artifacts-overview?view=azure-devops&tabs=nuget",
- "services": [],
- "severity": "Medium",
- "subcategory": "Configuration",
- "text": "Artifact In Pipeline",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "service": "SAP",
+ "services": [
+ "ASR",
+ "SAP",
+ "VNet"
+ ],
+ "severity": "High",
+ "subcategory": "IP plan",
+ "text": "Consider reserving IP address on DR side when configuring ASR",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Operations"
},
{
- "category": "Azure Artifact",
- "checklist": "Azure DevOps",
- "description": "Publish and consume artifact in pipeline",
- "guid": "df2aee45-53af-4c83-9924-8726dd68c5b5",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/pipeline-artifacts?view=azure-devops&tabs=yaml",
- "services": [],
- "severity": "Medium",
- "subcategory": "Configuration",
- "text": "Publish and download Artifact",
- "training": "https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "services": [
+ "SAP",
+ "VNet"
+ ],
+ "severity": "High",
+ "subcategory": "IP plan",
+ "text": "Avoid using overlapping IP address ranges for production and DR sites.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Artifact",
- "checklist": "Azure DevOps",
- "description": "Publish NuGet packages with artifacts",
- "guid": "c2925394-b69b-49d3-99ac-43bc68d1d766",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/nuget?view=azure-devops&tabs=yaml",
- "services": [],
- "severity": "Low",
- "subcategory": "Configuration",
- "text": "NuGet",
- "training": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
+ "service": "SAP",
+ "services": [
+ "Storage",
+ "SAP",
+ "VNet"
+ ],
+ "severity": "Medium",
+ "subcategory": "IP plan",
+ "text": "While Azure does help you to create multiple delegated subnets in a VNet, only one delegated subnet can exist in a VNet for Azure NetApp Files. Attempts to create a new volume will fail if you use more than one delegated subnet for Azure NetApp Files.",
+ "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "Operations"
},
{
- "category": "Azure Artifact",
- "checklist": "Azure DevOps",
- "description": "Publish Maven packages with artifacts",
- "guid": "57246b44-8564-4b4d-b74a-759c7633bd2a",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/publish-maven-artifacts?view=azure-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Configuration",
- "text": "Maven",
- "waf": "Operations"
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
+ "service": "SAP",
+ "services": [
+ "SAP",
+ "Firewall"
+ ],
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
+ "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "Azure Artifact",
- "checklist": "Azure DevOps",
- "description": "Publish NPM packages with artifacts",
- "guid": "1a27a764-a90b-4e0e-978e-e293c1bd363c",
- "link": "https://learn.microsoft.com/azure/devops/pipelines/artifacts/npm?view=azure-devops&tabs=yaml",
- "services": [],
- "severity": "Low",
- "subcategory": "Configuration",
- "text": "NPM",
- "waf": "Operations"
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
+ "service": "SAP",
+ "services": [
+ "WAF",
+ "AppGW",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Application Gateway and Web Application Firewall have limitations when Application Gateway serves as a reverse proxy for SAP web apps, as shown in the comparison between Application Gateway, SAP Web Dispatcher, and other third-party services.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "waf": "Security"
},
{
- "category": "Azure Artifact",
- "checklist": "Azure DevOps",
- "description": "Best Practices to work with Azure Artifact",
- "guid": "aaab7571-949a-4b91-a3dc-9fc9d1bb84b3",
- "link": "https://learn.microsoft.com/azure/devops/artifacts/concepts/best-practices?view=azure-devops",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "services": [
+ "ACR",
+ "FrontDoor",
+ "AzurePolicy",
+ "WAF",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Configuration",
- "text": "Best Practices",
- "waf": "Operations"
+ "subcategory": "Internet",
+ "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
+ "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "waf": "Security"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "What is monitoring?",
- "guid": "7b5a67fc-b9ed-45b3-9478-d447a826c286",
- "link": "https://learn.microsoft.com/devops/operate/what-is-monitoring",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "SAP",
"services": [
- "Monitor"
+ "FrontDoor",
+ "AzurePolicy",
+ "WAF",
+ "AppGW",
+ "SAP"
],
- "severity": "High",
- "subcategory": "Practice",
- "text": "What to monitor?",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Take advantage of Web Application Firewall policies in Azure Front Door when you're using Azure Front Door and Application Gateway to protect HTTP/S applications. Lock down Application Gateway to receive traffic only from Azure Front Door.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Security"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "Progressive Exposure Strategy",
- "guid": "3c00f1ca-c699-4ef1-b5a8-3de5de36c1c8",
- "link": "https://learn.microsoft.com/devops/operate/safe-deployment-practices",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "services": [
+ "LoadBalancer",
+ "WAF",
+ "AppGW",
+ "SAP"
+ ],
"severity": "Medium",
- "subcategory": "Practice",
- "text": "Safe Deployment Practices",
- "waf": "Operations"
+ "subcategory": "Internet",
+ "text": "Use a web application firewall to scan your traffic when it's exposed to the internet. Another option is to use it with your load balancer or with resources that have built-in firewall capabilities like Application Gateway or third-party solutions.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Security"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "Microsoft runs reliable systems with DevOps",
- "guid": "1870a0bc-5c1e-443a-8865-8d2858ed6717",
- "link": "https://learn.microsoft.com/devops/operate/how-microsoft-operates-devops",
- "services": [],
- "severity": "Low",
- "subcategory": "Practice",
- "text": "Case Study",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "waf": "Operations"
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "SAP",
+ "services": [
+ "ACR",
+ "VWAN",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Internet",
+ "text": "Use Virtual WAN for Azure deployments in new, large, or global networks where you need global transit connectivity across Azure regions and on-premises locations. With this approach, you won't need to manually set up transitive routing for Azure networking, and you can follow a standard for SAP on Azure deployments.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
+ "waf": "Performance"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "Security in DevOps",
- "guid": "9b825546-df2a-4ee4-953a-fc8339248726",
- "link": "https://learn.microsoft.com/devops/operate/security-in-devops",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "SAP",
+ "services": [
+ "ACR",
+ "Storage",
+ "PrivateLink",
+ "Backup",
+ "SAP",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Practice",
- "text": "DevSecOps",
+ "subcategory": "Internet",
+ "text": "To prevent data leakage, use Azure Private Link to securely access platform as a service resources like Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, and more. Azure Private Endpoint can also help to secure traffic between VNets and services like Azure Storage, Azure Backup, and more. Traffic between your VNet and the Private Endpoint enabled service travels across the Microsoft global network, which prevents its exposure to the public internet.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "Security"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "Enable DevSecops with Azure And GitHub",
- "guid": "dd68c5b5-c292-4539-9b69-b9d379ac43bc",
- "link": "https://learn.microsoft.com/devops/devsecops/enable-devsecops-azure-github",
- "services": [],
- "severity": "Low",
- "subcategory": "Practice",
- "text": "DevSecops",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Security"
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
+ "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Segmentation",
+ "text": "Make sure that Azure accelerated networking is enabled on the VMs used in the SAP application and DBMS layers.",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "Performance"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "Mirror RBAC in DevOps",
- "guid": "68d1d766-5724-46b4-9856-4b4dd74a759c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/secure/best-practices/end-to-end-governance",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
+ "service": "SAP",
"services": [
- "RBAC"
+ "LoadBalancer",
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Practice",
- "text": "Secure DevOps Govenance",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "severity": "Medium",
+ "subcategory": "Segmentation",
+ "text": "Make sure that internal deployments for Azure Load Balancer are set up to use Direct Server Return (DSR). This setting (Enabling Floating IP) will reduce latency when internal load balancer configurations are used for high-availability configurations on the DBMS layer.",
+ "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "Security"
},
{
- "category": "DevOps Practice",
- "checklist": "Azure DevOps",
- "description": "Governance when using CI/CD",
- "guid": "7633bd2a-1a27-4a76-9a90-be0e378ee293",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/governance/end-to-end-governance-in-azure",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
+ "guid": "6791f893-5ada-4433-84e1-3811523181aa",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "SAP",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Practice",
- "text": "Azure DevOps Governance",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "subcategory": "Segmentation",
+ "text": "You can use application security group (ASG) and NSG rules to define network security access-control lists between the SAP application and DBMS layers. ASGs group virtual machines to help manage their security.",
+ "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "Security"
},
{
- "category": "Application Deployment",
- "checklist": "The AKS Checklist",
- "guid": "785c2fa5-5b56-4ad4-a408-fe72734c476b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/containers/aks/secure-baseline-aks",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"services": [
- "AKS"
+ "SAP",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Development",
- "text": "Use canary or blue/green deployments",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Segmentation",
+ "text": "Placing of the SAP application layer and SAP DBMS in different Azure VNets that aren't peered isn't supported.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Performance"
},
{
- "category": "Application Deployment",
- "checklist": "The AKS Checklist",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"services": [
- "AKS"
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Development",
- "text": "If required for AKS Windows workloads HostProcess containers can be used",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Segmentation",
+ "text": "For optimal network latency with SAP applications, consider using Azure proximity placement groups.",
+ "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "waf": "Performance"
},
{
- "category": "Application Deployment",
- "checklist": "The AKS Checklist",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"services": [
- "AKS"
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Development",
- "text": "Use KEDA if running event-driven workloads",
+ "severity": "High",
+ "subcategory": "Segmentation",
+ "text": "It is NOT supported at all to run an SAP Application Server layer and DBMS layer split between on-premise and Azure. Both layers need to completely reside either on-premise or in Azure.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "Performance"
},
{
- "category": "Application Deployment",
- "checklist": "The AKS Checklist",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"services": [
- "AKS"
+ "Cost",
+ "SAP",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "Development",
- "text": "Use Dapr to ease microservice development",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Segmentation",
+ "text": "It isn't recommended to host the database management system (DBMS) and application layers of SAP systems in different VNets and connect them with VNet peering because of the substantial costs that excessive network traffic between the layers can produce. Recommend using subnets within the Azure virtual network to separate the SAP application layer and DBMS layer.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Cost"
},
{
- "category": "Application Deployment",
- "checklist": "The AKS Checklist",
- "guid": "3acbe04b-be20-49d3-afda-47778424d116",
- "link": "https://learn.microsoft.com/azure/developer/terraform/create-k8s-cluster-with-tf-and-aks",
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "402a9846-d515-4061-aff8-cd30088693fa",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
+ "service": "SAP",
"services": [
- "AKS"
+ "LoadBalancer",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": "Segmentation",
+ "text": "If using Load Balancer with Linux guest operating systems, check that the Linux network parameter net.ipv4.tcp_timestamps is set to 0.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Performance"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "SAP Checklist",
+ "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
+ "service": "SAP",
+ "services": [
+ "SAP",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Infrastructure as Code",
- "text": "Use automation through ARM/TF to create your Azure resources",
- "waf": "Operations"
+ "subcategory": "Segmentation",
+ "text": "For SAP RISE/ECS deployments, virtual peering is the preferred way to establish connectivity with customer's existing Azure environment. Both the SAP vnet and customer vnet(s) are protected with network security groups (NSG), enabling communication on SAP and database ports through the vnet peering",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "guid": "36cb45e5-7960-4332-9bdf-8cc23318da61",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/business-continuity-and-disaster-recovery",
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
"services": [
- "ASR",
- "AKS"
+ "VM",
+ "Backup",
+ "SAP"
],
"severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Schedule and perform DR tests regularly",
- "waf": "Reliability"
+ "subcategory": " ",
+ "text": "Review SAP HANA database backups for Azure VMs.",
+ "waf": "Cost"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "guid": "170265f4-bb46-4a39-9af7-f317284797b1",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
"services": [
- "TrafficManager",
- "AKS",
- "FrontDoor",
- "LoadBalancer"
+ "Monitor",
+ "ASR",
+ "SAP"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use Azure Traffic Manager or Azure Front Door as a global load balancer for region failover",
- "waf": "Reliability"
+ "subcategory": " ",
+ "text": "Review Site Recovery built-in monitoring, where used for SAP.",
+ "waf": "Cost"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "graph": "resources | where type=='microsoft.containerservice/managedclusters' | extend compliant= isnotnull(properties.agentPoolProfiles[0].availabilityZones) | distinct id,compliant",
- "guid": "578a219a-46be-4b54-9350-24922634292b",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones",
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
+ "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
+ "service": "SAP",
"services": [
- "AKS"
+ "Monitor",
+ "SAP"
+ ],
+ "severity": "High",
+ "subcategory": " ",
+ "text": "Review the Monitoring the SAP HANA System Landscape guidance.",
+ "waf": "Operations"
+ },
+ {
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
+ "service": "SAP",
+ "services": [
+ "VM",
+ "Backup",
+ "SAP"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use Availability Zones if they are supported in your Azure region",
- "waf": "Reliability"
+ "subcategory": " ",
+ "text": "Review Oracle Database in Azure Linux VM backup strategies.",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
+ "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
+ "service": "SAP",
"services": [
- "AKS"
+ "SQL",
+ "Storage",
+ "SAP"
],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Use the SLA-backed AKS offering",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Review the use of Azure Blob Storage with SQL Server 2016.",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
+ "service": "SAP",
"services": [
- "AKS",
- "Cost"
+ "VM",
+ "Backup",
+ "SAP"
],
- "severity": "Low",
- "subcategory": "High Availability",
- "text": "Use Disruption Budgets in your pod and deployment definitions",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Review the use of Automated Backup v2 for Azure VMs.",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "category": "Operational Excellence",
+ "checklist": "SAP Checklist",
+ "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
+ "service": "SAP",
"services": [
- "ACR",
- "AKS"
+ "SAP"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "If using a private registry, configure region replication to store images in multiple regions",
- "waf": "Reliability"
+ "subcategory": " ",
+ "text": "Enabling Write accelerator for M series when using premium disks(V1)",
+ "waf": "Operations"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "guid": "daa9a260-c3ea-4490-b077-5fc1f2a80cb0",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "service": "SAP",
"services": [
- "Storage",
- "AKS",
- "ASR"
+ "SAP"
],
- "severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Use Zone-Redundant Storage (ZRS) with stateful workloads",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Test availability zone latency.",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "The AKS Checklist",
- "guid": "bc14aea6-e65d-48d9-a3ad-c218e6436b06",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/business-continuity-and-disaster-recovery",
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
+ "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
+ "service": "SAP",
"services": [
- "AKS"
+ "SAP"
],
- "severity": "High",
- "subcategory": "Requirements",
- "text": "Define non-functional requirements such as SLAs, RTO (Recovery Time Objective) and RPO (Recovery Point Objective).",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Activate SAP EarlyWatch Alert for all SAP components.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
+ "waf": "Performance"
},
{
- "category": "Cost Governance",
- "checklist": "The AKS Checklist",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
+ "service": "SAP",
"services": [
- "AKS",
- "Cost"
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Use an external application such as kubecost to allocate costs to different users",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Review SAP application server to database server latency using SAP ABAPMeter report /SSA/CAT.",
+ "training": "https://me.sap.com/notes/0002879613",
+ "waf": "Performance"
},
{
- "category": "Cost Governance",
- "checklist": "The AKS Checklist",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
+ "service": "SAP",
+ "services": [
+ "SQL",
+ "Monitor",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Review SQL Server performance monitoring using CCMS.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
+ "link": "https://me.sap.com/notes/500235",
+ "service": "SAP",
"services": [
- "AKS",
- "Cost"
+ "VM",
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Use scale down mode to delete/deallocate nodes",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Test network latency between SAP application layer VMs and DBMS VMs (NIPING).",
+ "training": "https://me.sap.com/notes/1100926/E",
+ "waf": "Performance"
},
{
- "category": "Cost Governance",
- "checklist": "The AKS Checklist",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
+ "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
+ "service": "SAP",
"services": [
- "AKS",
- "Cost"
+ "Monitor",
+ "SAP"
],
"severity": "Medium",
- "subcategory": "Cost",
- "text": "When required use multi-instance partitioning GPU on AKS Clusters",
- "waf": "Cost"
+ "subcategory": " ",
+ "text": "Review SAP HANA studio alerts.",
+ "waf": "Performance"
},
{
- "category": "Cost Governance",
- "checklist": "The AKS Checklist",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
+ "category": "Performant",
+ "checklist": "SAP Checklist",
+ "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
+ "link": "https://me.sap.com/notes/1969700",
+ "service": "SAP",
"services": [
- "AKS",
- "Cost"
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "If running a Dev/Test cluster use NodePool Start/Stop",
- "waf": "Cost"
+ "severity": "Medium",
+ "subcategory": " ",
+ "text": "Perform SAP HANA health checks using HANA_Configuration_Minichecks.",
+ "waf": "Performance"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
"services": [
- "AKS",
- "AzurePolicy"
+ "VM",
+ "SAP"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
+ "subcategory": "Governance",
+ "text": "If you run Windows and Linux VMs in Azure, on-premises, or in other cloud environments, you can use the Update management center in Azure Automation to manage operating system updates, including security patches.",
+ "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "08951710-79a2-492a-adbc-06d7a401545b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
"services": [
- "AKS"
+ "SAP"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Separate applications from the control plane with user/system node pools",
+ "subcategory": "Governance",
+ "text": "Routinely review the SAP security OSS notes because SAP releases highly critical security patches, or hot fixes, that require immediate action to protect your SAP systems.",
+ "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
"services": [
- "AKS"
+ "SQL",
+ "SAP"
],
"severity": "Low",
- "subcategory": "Compliance",
- "text": "Add taint to your system nodepool to make it dedicated",
+ "subcategory": "Governance",
+ "text": "For SAP on SQL Server, you can disable the SQL Server system administrator account because the SAP systems on SQL Server don't use the account. Ensure that another user with system administrator rights can access the server before disabling the original system administrator account.",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
"services": [
- "ACR",
- "AKS"
+ "SQL",
+ "SAP"
],
- "severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use a private registry for your images, such as ACR",
+ "severity": "High",
+ "subcategory": "Governance",
+ "text": "Disable xp_cmdshell. The SQL Server feature xp_cmdshell enables a SQL Server internal operating system command shell. It's a potential risk in security audits.",
+ "training": "https://me.sap.com/notes/3019299/E",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "AKS"
+ "Storage",
+ "SQL",
+ "AKV",
+ "Backup",
+ "SAP"
],
- "severity": "Medium",
- "subcategory": "Compliance",
- "text": "Scan your images for vulnerabilities",
+ "severity": "High",
+ "subcategory": "Secrets",
+ "text": "Encrypting SAP HANA database servers on Azure uses SAP HANA native encryption technology. Additionally, if you are using SQL Server on Azure, use Transparent Data Encryption (TDE) to protect your data and log files and ensure that your backups are also encrypted.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "cc639637-a652-42ac-89e8-06965388e9de",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "SAP",
"services": [
- "AKS",
- "Defender"
+ "AKV",
+ "Storage",
+ "SAP"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Use Azure Security Center to detect security posture vulnerabilities",
+ "subcategory": "Secrets",
+ "text": "Azure Storage encryption is enabled for all Azure Resource Manager and classic storage accounts, and can't be disabled. Because your data is encrypted by default, you don't need to modify your code or applications to use Azure Storage encryption.",
+ "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "42d4aefe-2383-470e-b019-c30df24996b2",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "SAP",
"services": [
- "AKS"
+ "AKV",
+ "SAP"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "If required configure FIPS",
+ "severity": "High",
+ "subcategory": "Secrets",
+ "text": "Use Azure Key Vault to store your secrets and credentials",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "SAP",
"services": [
- "AKS"
+ "AzurePolicy",
+ "RBAC",
+ "AKV",
+ "Subscriptions",
+ "SAP"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Define app separation requirements (namespace/nodepool/cluster)",
+ "severity": "Medium",
+ "subcategory": "Secrets",
+ "text": "It is recommended to LOCK the Azure Resources post successful deployment to safeguard against unauthorized changes. You can also enforce LOCK constraints and rules on your per-subscription basis using customized Azure policies(Custome role).",
+ "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "SAP",
"services": [
- "AKS",
- "AKV"
+ "AKV",
+ "AzurePolicy",
+ "SAP"
],
"severity": "Medium",
"subcategory": "Secrets",
- "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
+ "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
+ "service": "SAP",
"services": [
- "AKS",
- "AKV"
+ "AKV",
+ "RBAC",
+ "AzurePolicy",
+ "SAP"
],
"severity": "High",
"subcategory": "Secrets",
- "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
+ "text": "Based on existing requirements, regulatory and compliance controls (internal/external) - Determine what Azure Policies and Azure RBAC role are needed",
+ "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "AKS",
- "AKV"
+ "AKV",
+ "Storage",
+ "SAP",
+ "Defender"
],
- "severity": "Medium",
+ "severity": "High",
"subcategory": "Secrets",
- "text": "If required add Key Management Service etcd encryption",
+ "text": "When enabling Microsoft Defender for Endpoint on SAP environment, recommend excluding data and log files on DBMS servers instead of targeting all servers. Follow your DBMS vendor's recommendations when excluding target files.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
+ "service": "SAP",
"services": [
- "AKS",
- "AKV"
+ "AKV",
+ "RBAC",
+ "SAP",
+ "Defender"
],
- "severity": "Low",
+ "severity": "High",
"subcategory": "Secrets",
- "text": "If required consider using Confidential Compute for AKS",
+ "text": "Delegate an SAP admin custom role with just-in-time access of Microsoft Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"waf": "Security"
},
{
- "category": "Governance and Security",
- "checklist": "The AKS Checklist",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "AKS",
"AKV",
- "Defender"
+ "SAP"
],
- "severity": "Medium",
+ "severity": "Low",
"subcategory": "Secrets",
- "text": "Consider using Defender for Containers",
+ "text": "encrypt data in transit by integrating the third-party security product with secure network communications (SNC) for DIAG (SAP GUI), RFC, and SPNEGO for HTTPS",
+ "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "AKV",
+ "SAP"
],
- "severity": "High",
- "subcategory": "Identity",
- "text": "Use managed identities instead of Service Principals",
+ "severity": "Medium",
+ "subcategory": "Secrets",
+ "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "AKV",
+ "SAP"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Integrate authentication with AAD (using the managed integration)",
+ "severity": "High",
+ "subcategory": "Secrets",
+ "text": "Use an Azure Key Vault per application per environment per region.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
+ "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "AKV",
+ "SAP"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Limit access to admin kubeconfig (get-credentials --admin)",
+ "severity": "High",
+ "subcategory": "Secrets",
+ "text": "To control and manage disk encryption keys and secrets for non-HANA Windows and non-Windows operating systems, use Azure Key Vault. SAP HANA isn't supported with Azure Key Vault, so you must use alternate methods like SAP ABAP or SSH keys.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
+ "service": "SAP",
"services": [
"RBAC",
- "Entra",
- "AKS"
+ "Subscriptions",
+ "SAP"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Integrate authorization with AAD RBAC",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Customize role-based access control (RBAC) roles for SAP on Azure spoke subscriptions to avoid accidental network-related changes",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
+ "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
+ "service": "SAP",
"services": [
- "RBAC",
- "Entra",
- "AKS"
+ "PrivateLink",
+ "NVA",
+ "SAP"
],
"severity": "High",
- "subcategory": "Identity",
- "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
+ "subcategory": "Security",
+ "text": "Isolate DMZs and NVAs from the rest of the SAP estate, configure Azure Private Link, and securely manage and control the SAP on Azure resources",
+ "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
+ "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "Storage",
+ "VM",
+ "SAP"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
+ "severity": "Low",
+ "subcategory": "Security",
+ "text": "Consider using Microsoft anti-malware software on Azure to protect your virtual machines from malicious files, adware, and other threats.",
+ "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "SAP",
+ "Defender"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "For AKS non-interactive logins use kubelogin (preview)",
+ "severity": "Low",
+ "subcategory": "Security",
+ "text": "For even more powerful protection, consider using Microsoft Defender for Endpoint.",
+ "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "SAP",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Identity",
- "text": "Disable AKS local accounts",
+ "severity": "High",
+ "subcategory": "Security",
+ "text": "Isolate the SAP application and database servers from the internet or from the on-premises network by passing all traffic through the hub virtual network, which is connected to the spoke network by virtual network peering. The peered virtual networks guarantee that the SAP on Azure solution is isolated from the public internet.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"services": [
- "Entra",
- "AKS"
+ "WAF",
+ "SAP"
],
"severity": "Low",
- "subcategory": "Identity",
- "text": "Configure if required Just-in-time cluster access",
+ "subcategory": "Security",
+ "text": "For internet-facing applications like SAP Fiori, make sure to distribute load per application requirements while maintaining security levels. For Layer 7 security, you can use a third-party Web Application Firewall (WAF) available in the Azure Marketplace.",
+ "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "waf": "Security"
+ },
+ {
+ "category": "Security, Governance and Compliance",
+ "checklist": "SAP Checklist",
+ "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
+ "service": "SAP",
+ "services": [
+ "AKV",
+ "Monitor",
+ "SAP"
+ ],
+ "severity": "Medium",
+ "subcategory": "Security",
+ "text": "To enable secure communication in Azure Monitor for SAP solutions, you can choose to use either a root certificate or a server certificate. We highly recommend that you use root certificates.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "Security"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
- "services": [
- "Entra",
- "AKS"
- ],
- "severity": "Low",
- "subcategory": "Identity",
- "text": "Configure if required AAD conditional access for AKS",
- "waf": "Security"
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availablity",
+ "text": "Enable 2 replicas to have 99.9% availability for read operations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "High Availablity",
+ "text": "Enable 3 replicas to have 99.9% availability for read/write operations",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
+ "services": [],
+ "severity": "High",
+ "subcategory": "High Availablity",
+ "text": "Leverage Availability Zones by enabling read and/or write replicas",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
"services": [
- "Entra",
- "AKS"
+ "ACR"
],
- "severity": "Low",
- "subcategory": "Identity",
- "text": "If required for Windows AKS workloads configure gMSA ",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Georeplication",
+ "text": "For regional redudancy, Manually create services in 2 or more regions for Search as it doesn't provide an automated method of replicating search indexes across geographic regions",
+ "waf": "Reliability"
},
{
- "category": "Identity and Access Management",
- "checklist": "The AKS Checklist",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
"services": [
- "Entra",
- "AKS"
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Identity",
- "text": "For finer control consider using a managed Kubelet Identity",
- "waf": "Security"
+ "subcategory": "Georeplication",
+ "text": "To synchronize data across multiple services either Use indexers for updating content on multiple services or Use REST APIs for pushing content updates on multiple services",
+ "waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
"services": [
- "ACR",
- "AKS",
- "AppGW"
+ "TrafficManager"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "If using AGIC, do not share an AppGW across clusters",
+ "subcategory": "Georeplication",
+ "text": "Use Azure Traffic Manager to coordinate requests",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
+ "category": "Operations Management",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
"services": [
- "AKS"
+ "Storage",
+ "Backup",
+ "ASR"
],
"severity": "High",
- "subcategory": "Best practices",
- "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
+ "subcategory": "Disaster Recovery",
+ "text": "Backup and Restore an Azure Cognitive Search Index. Use this sample code to back up index definition and snapshot to a series of Json files",
"waf": "Reliability"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
"services": [
- "AKS"
+ "Cost",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "For Windows workloads use Accelerated Networking",
- "waf": "Performance"
+ "subcategory": "Azure Monitor - enforce data collection rules",
+ "text": "Data collection rules in Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
"services": [
- "AKS",
- "LoadBalancer"
+ "Cost",
+ "Backup"
],
- "severity": "High",
- "subcategory": "Best practices",
- "text": "Use the standard ALB (as opposed to the basic one)",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "check backup instances with the underlying datasource not found",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
"services": [
- "VNet",
- "AKS"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Best practices",
- "text": "If using Azure CNI, consider using different Subnets for NodePools",
- "waf": "Security"
+ "subcategory": "Delete/archive",
+ "text": "Delete or archive unassociated services (disks, nics, ip addresses etc)",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "659d3958-fd77-4289-a835-556df2bfe456",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "services": [
+ "Cost"
+ ],
+ "severity": "Medium",
+ "subcategory": "Delete/archive",
+ "text": "Consider snooze and stop technique (snooze a service after x days, stop after 2x, delete/deallocate after 3x)",
+ "waf": "Cost"
+ },
+ {
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3b0d834a-3487-426d-b69c-6b5c2a26494b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "VNet",
- "AKS",
"Cost",
- "PrivateLink"
+ "Storage",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "Cost",
- "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
- "waf": "Security"
+ "subcategory": "Delete/archive",
+ "text": "Delete or archive unused resources (old backups, logs, storage accounts, etc...)",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "e8a03f97-8794-468d-96a7-86d60f96c97b",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
"services": [
- "VPN",
- "AKS"
+ "Cost",
+ "Storage",
+ "Backup",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "HA",
- "text": "If hybrid connectivity is required, use 2xER or ER+VPN for better availability",
- "waf": "Reliability"
+ "subcategory": "Delete/archive",
+ "text": "Consider a good balance between site recovery storage and backup for non mission critical applications",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
"services": [
- "AKS"
+ "Cost",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "IPAM",
- "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Log Analytics retention for workspaces",
+ "text": "Check spending and savings opportunities among the 40 different log analytics workspaces- use different retention and data collection for nonprod workspaces-create daily cap for awareness and tier sizing - If you do set a daily cap, in addition to creating an alert when the cap is reached,ensure that you also create an alert rule to be notified when some percentage has been reached (90% for example). - consider workspace transformation if possible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
"services": [
- "VNet",
- "AKS"
+ "Cost",
+ "Storage",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "IPAM",
- "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Policy",
+ "text": "Enforce a purging log policy and automation (if needed, logs can be moved to cold storage)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "59bb91a3-ed90-4cae-8cc8-4c37b6b780cb",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "High",
- "subcategory": "IPAM",
- "text": "If using Azure CNI, check the maximum pods/node (default 30)",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Run orphaned resources workbook - delete or snooze ghost items",
+ "text": "https://github.com/dolevshor/azure-orphan-resources",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9fe5c464-89d4-457a-a27c-3874d0102cac",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
"services": [
- "VNet",
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "IPAM",
- "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Shutdown/deallocate",
+ "text": "Shutdown underutilized instances",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/understand/analyze-unexpected-charges",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "Storage",
+ "Backup",
+ "VM"
],
- "severity": "High",
- "subcategory": "IPAM",
- "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "stopped/deallocated VMs: check disks",
+ "text": "Check that the disks are really needed, if not: delete. If they are needed, find lower storage tiers or use backup -",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
"services": [
- "AKS"
+ "Cost",
+ "Storage",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Operations",
- "text": "If required add your own CNI plugin",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "storage accounts lifecycle policy",
+ "text": "Consider moving unused storage to lower tier, with customized rule - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
+ "category": "Cleanup",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "f2bfe456-3b0d-4834-a348-726de69c6b5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Operations",
- "text": "If required configure Public IP per node in AKS",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Tagging",
+ "text": "Use specific tags for temporary items with 'delete by DATE' format - and automate monthly cleanup",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
+ "category": "DB/App tuning",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a26494b-69ba-4d37-aad5-3cc78e1d7666",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice",
"services": [
- "AKS"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
- "waf": "Reliability"
+ "subcategory": "DB optimization",
+ "text": "Plan for db optimization with the intent of downsizing the related services (and improve performance)",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
+ "category": "DB/APP tuning",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7357c449-674b-45ed-a5a8-59c7733be2a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "App modernization",
+ "text": "Modernizing the app towards a microservices architecture will have the effect of letting the app scale according to the single service and not the entire stack",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
+ "category": "DB/APP tuning",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a27b765a-91be-41f3-a8ef-394c2bd463cb",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"services": [
- "AKS"
+ "Cost",
+ "Storage",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
- "waf": "Reliability"
+ "subcategory": "DB optimization",
+ "text": "optimizing the DB queries will increase performance and allow better right-sizing of storage and VMs",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
+ "category": "DB/APP tuning",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "bac75819-59bb-491a-9ed9-0cae2cc84c37",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
"services": [
- "AKS",
- "NVA"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Demand shaping",
+ "text": "Using demand shaping on PaaS services will optimize costs and performances",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b6b780cb-9fe5-4c46-989d-457a927c3874",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging",
"services": [
- "AKS"
+ "Cost",
+ "Entra"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "If using a public API endpoint, restrict the IP addresses that can access it",
- "waf": "Security"
+ "subcategory": "Advisor",
+ "text": "Start from the Azure Advisor page suggestions.",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "VM"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Use private clusters if your requirements mandate it",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Advisor",
+ "text": "Make sure advisor is configured for VM right sizing ",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "881a1bd5-d1e4-44a1-a659-d3958fd77289",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
"services": [
- "AKS",
- "AzurePolicy"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
- "waf": "Security"
+ "subcategory": "Automation",
+ "text": "Consider implementing IaC scripts or devops pipelines to match the cost governance process",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b835556d-f2bf-4e45-93b0-d834a348726d",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
"services": [
- "AKS",
- "AzurePolicy"
+ "Cost",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Automation",
+ "text": "Set up cost alerts for applications that have variable costs (ideally for all of them)",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e69c6b5c-2a26-4494-a69b-ad37aad53cc7",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
"services": [
- "AKS",
- "AzurePolicy"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Use Kubernetes network policies to increase intra-cluster security",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Automation",
+ "text": "Use Azure Automation: Automate repetitive tasks can help you save time and resources, reducing costs in the process. ",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8e1d7666-7357-4c44-a674-b5ed85a859c7",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
"services": [
- "AKS",
- "WAF"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Security",
- "text": "Use a WAF for web workloads (UIs or APIs)",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Automation",
+ "text": "Run orphaned resources workbook",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "733be2a1-a27b-4765-a91b-e1f388ef394c",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"services": [
- "DDoS",
- "VNet",
- "AKS"
+ "Cost",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Use DDoS Standard in the AKS Virtual Network",
- "waf": "Security"
+ "subcategory": "Baseline",
+ "text": "Try and establish a baseline of monthly spending and an acceptable saving target against the baseline (new services will not be optimized at this stage)",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2bd463cb-bac7-4581-a59b-b91a3ed90cae",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
"services": [
- "AKS"
+ "Cost",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Security",
- "text": "If required add company HTTP Proxy",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Baseline",
+ "text": "Establish a cost optimization baseline by using a policy that tags every new resource as #NEW",
+ "waf": "Cost"
},
{
- "category": "Network Topology and Connectivity",
- "checklist": "The AKS Checklist",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2cc84c37-b6b7-480c-a9fe-5c46489d457a",
+ "link": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management-config",
"services": [
- "AKS"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Consider using a service mesh for advanced microservice communication management",
- "waf": "Security"
+ "subcategory": "Baseline",
+ "text": "Organize resources to maximize cost insights and accountability",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "927c3874-d010-42ca-a6aa-e01e6a84de5d",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json",
"services": [
- "AKS",
- "Monitor"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Alerting",
- "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Budgets",
+ "text": "Create budgets",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e36d1d92-881a-41bd-9d1e-44a19659d395",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator",
"services": [
- "Entra",
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Check regularly Azure Advisor for recommendations on your cluster",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Cost Analysis",
+ "text": "In cost analysis - use daily granularity, grouped by service name to analyze the spending of the past 3 months and identify the top 3 spenders",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8fd77289-b835-4556-bf2b-fe4563b0d834",
+ "link": "https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Enable AKS auto-certificate rotation",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Cost Analysis",
+ "text": "Check daily for cost spikes and anomalies (ideally with automatic billing exports)",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a348726d-e69c-46b5-a2a2-6494b69bad37",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Cost Analysis",
+ "text": "Automate cost retrieval for deep analysis or integration",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "aad53cc7-8e1d-4766-9735-7c449674b5ed",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"services": [
- "AKS"
+ "Cost",
+ "ACR"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Free services",
+ "text": "Take advantage of Azure free services: Azure offers a number of free services, such as DevOps, Azure Container Registry, and Azure Logic Apps, that can help you save costs on development and operations. ",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "96c96ad8-844c-4f3b-8b38-c886ba2c0214",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Tagging",
+ "text": "Tag shared resources",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
+ "category": "Process Administration",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "99014a5d-3ce5-474d-acbd-9792a6bcca2b",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Tagging",
+ "text": "Consider using tags to all services for cost allocation",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
+ "category": "reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4fea1dbf-3dd9-45d4-ac7c-891dcb1f7d57",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Consider using AKS command invoke on private clusters",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "automation",
+ "text": "Consider Reservation automation to track and promptly react to changes",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "description": "check by searching the Meter Category Licenses in the Cost analysys",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "SQL",
+ "AzurePolicy",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "For planned events consider using Node Auto Drain",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "check AHUB is applied to all Windows VMs, RHEL and SQL",
+ "text": "run the script on all windows VMs https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- consider implementing a policy if windows VMs are created frequently",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "LoadBalancer"
],
- "severity": "High",
- "subcategory": "Compliance",
- "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Check Red Hat Licences if applicable",
+ "text": " this can be also put under AHUB if you already have licenses https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a76af4a6-91e8-4839-ada4-6667e13c1056",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"services": [
- "AKS"
+ "Cost",
+ "AppSvc"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Use custom Node RG (aka 'Infra RG') name",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "Saving plans will provide 17% on select app service plans",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Compliance",
- "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
- "waf": "Operations"
+ "subcategory": "Planning",
+ "text": "Consolidate reserved VM families with flexibility option (no more than 4-5 families)",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "ARS",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Taint Windows nodes",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Reservations/savings plans",
+ "text": "Utilize Azure Reserved Instances: This feature allows you to reserve VMs for a period of 1 or 3 years, providing significant cost savings compared to PAYG prices.",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a785c6fe-96c9-46ad-a844-cf3b2b38c886",
+ "link": "https://azure.microsoft.com/resources/achieving-compliant-data-residency-and-security-with-azure/",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Keep windows containers patch level in sync with host patch level",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Reservations/savings plans",
+ "text": "Plan for Azure Savings Plans for all the workloads that are dynamic and need maximum flexibility",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "description": "Via Diagnostic Settings at the cluster level",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ba2c0214-9901-44a5-b3ce-574dccbd9792",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
"services": [
- "AKS",
- "Monitor"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Reservations/savings plans",
+ "text": "Plan for Azure Reservations for all the workloads that are less dynamic and won't change much",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
"services": [
- "AKS"
+ "Cost",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Compliance",
- "text": "If required use nodePool snapshots",
+ "severity": "Medium",
+ "subcategory": "Reserve storage",
+ "text": "Only larger disks can be reserved => 1 TiB -",
"waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
"services": [
- "AKS",
- "Cost"
+ "Cost",
+ "VM"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Consider spot node pools for non time-sensitive workloads",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Reserve VMs with normalized and rationalized sizes",
+ "text": "After the right-sizing optimization",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
"services": [
- "AKS",
- "Cost"
+ "Cost",
+ "SQL",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Cost",
- "text": "Consider AKS virtual node for quick bursting",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "SQL Database AHUB",
+ "text": "Check if applicable and enforce policy/change https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
"services": [
- "AKS",
- "Monitor"
+ "Cost",
+ "SQL",
+ "VM"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "SQL Database Reservations",
+ "text": "The VM + license part discount (ahub + 3YRI) is around 70% discount",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e13c1056-75c1-4e94-9b45-9837ff7ae7c6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities",
"services": [
- "AKS",
- "Monitor"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Tracking",
+ "text": "Make sure you Azure Reservations and Savings plans are close to 100% utilization or make the necessary changes to reach it.",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
+ "category": "Reservations",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3b475a5-c7ac-4be4-abbe-64dd89f2e877",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations",
"services": [
- "AKS",
- "Monitor"
+ "Cost",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor CPU and memory utilization of the nodes",
- "waf": "Operations"
+ "subcategory": "Tracking",
+ "text": "Make sure that your reservations usage is close to 100%. If not, either enforce an allowed SKU policy or exchange the reservation",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "78468d55-a785-4c6f-b96c-96ad8844cf3b",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review",
"services": [
- "AKS",
- "Monitor"
+ "Cost",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
- "waf": "Operations"
+ "subcategory": "Automation",
+ "text": "Plan and enforce a On/Off policy for production services, where possible",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2b38c886-ba2c-4021-9990-14a5d3ce574d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"services": [
- "Storage",
- "EventHubs",
- "AKS",
- "ServiceBus",
- "Monitor"
+ "Cost",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor OS disk queue depth in nodes",
- "waf": "Operations"
+ "subcategory": "Automation",
+ "text": "Plan and enforce a On-Demand policy with auto-shutdown for non-production services, where possible",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
"services": [
- "AKS",
- "NVA",
- "LoadBalancer",
- "Monitor"
+ "Cost",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
- "waf": "Operations"
+ "subcategory": "Autoscale",
+ "text": "Consider using a VMSS to match demand rather than flat sizing",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"service": "AKS",
"services": [
- "AKS",
- "Monitor"
+ "Cost",
+ "AKS"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Subscribe to resource health notifications for your AKS cluster",
- "waf": "Operations"
+ "subcategory": "Autoscale",
+ "text": "Use AKS autoscaler to match your clusters usage (make sure the pods requirements match the scaler)",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "93665720-2bff-4456-9b0d-934a359c363e",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Resources",
- "text": "Configure requests and limits in your pod specs",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Autoscale",
+ "text": "Right-size PaaS service according to average use and accomodate spikes with auto or manual scaling",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7dd61623-a364-4a90-9eba-e38ead53cc7d",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"services": [
- "AKS"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Resources",
- "text": "Enforce resource quotas for namespaces",
- "waf": "Operations"
+ "subcategory": "Autoscale",
+ "text": "Plan for demand shaping where applicable",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e2e8aaab-3571-4549-ab91-53d89f89dc7b",
"services": [
- "AKS",
- "Subscriptions"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Resources",
- "text": "Ensure your subscription has enough quota to scale out your nodepools",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Autoscale",
+ "text": "Consider implementing a service re-scaling logic within the application",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/savings-plan/",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
- "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
"services": [
- "AKS"
+ "Cost",
+ "Backup"
],
- "severity": "High",
- "subcategory": "Resources",
- "text": "Configure Liveness and Readiness probes for all deployments",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Backup",
+ "text": "Move recovery points to vault-archive where applicable (Validate)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
"services": [
- "AKS"
+ "Cost",
+ "VM",
+ "LoadBalancer"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use the Cluster Autoscaler",
- "waf": "Performance"
+ "subcategory": "Databricks",
+ "text": "Consider using Spot VMs with fallback where possible. Consider autotermination of clusters.",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Customize node configuration for AKS node pools",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "Functions - Reuse connections",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Scalability",
- "text": "Use the Horizontal Pod Autoscaler when required",
- "waf": "Performance"
+ "subcategory": "Functions",
+ "text": "Functions - Cache data locally",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Scalability",
- "text": "Consider an appropriate node size, not too large or too small",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "Functions - Cold starts-Use the 'Run from package' functionality. This way, the code is downloaded as a single zip file. This can, for example, result in significant improvements with Javascript functions, which have a lot of node modules.Use language specific tools to reduce the package size, for example, tree shaking Javascript applications.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "Functions - Keep your functions warm",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Consider subscribing to EventGrid Events for AKS automation",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "When using autoscale with different functions, there might be one driving all the autoscale for all the resources - consider moving it to a separate consumption plan (and consider higher plan for CPU)",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "For long running operation on an AKS cluster consider event termination",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "Function apps in a given plan are all scaled together, so any issues with scaling can affect all apps in the plan.",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
"services": [
- "AKS"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Functions",
+ "text": "Am I billed for 'await time'? This question is typically asked in the context of a C# function that does an async operation and waits for the result, e.g. await Task.Delay(1000) or await client.GetAsync('http://google.com'). The answer is yes - the GB second calculation is based on the start and end time of the function and the memory usage over that period. What actually happens over that time in terms of CPU activity is not factored into the calculation.One exception to this rule is if you are using durable functions. You are not billed for time spent at awaits in orchestrator functions.apply demand shaping techinques where possible (dev environments?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "df03a822-cd46-43cb-abc8-ac299ebc91a4",
+ "link": "https://learn.microsoft.com/azure/sentinel/quickstart-onboard",
"services": [
- "Storage",
- "AKS"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "Use ephemeral OS disks",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "Evaluate your network topology against networking costs and where applicable reduce the egress and peering data",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
"services": [
- "Storage",
- "AKS"
+ "Cost",
+ "FrontDoor",
+ "EventHubs"
],
- "severity": "High",
- "subcategory": "Storage",
- "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "Frontdoor - Turn off the default homepageIn the application settings of your App, set AzureWebJobsDisableHomepage to true. This will return a 204 (No Content) to the PoP so only header data is returned.",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
"services": [
- "Storage",
- "AKS"
+ "Cost",
+ "AppSvc",
+ "FrontDoor"
],
- "severity": "Low",
- "subcategory": "Storage",
- "text": "For hyper performance storage option use Ultra Disks on AKS",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Networking",
+ "text": "Frontdoor - Route to something that returns nothing. Either set up a Function, Function Proxy, or add a route in your WebApp that returns 200 (OK) and sends no or minimal content. The advantage of this is you will be able to log out when it is called.",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "f843e52f-4722-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview",
"services": [
- "Storage",
- "AKS",
- "SQL"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
- "waf": "Performance"
+ "subcategory": "PaaS",
+ "text": "Consider using free tiers where applicable for all non-production environments",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b9de39ac-0e7c-428d-a936-657202bff456",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"services": [
- "Storage",
- "AKS"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Storage",
- "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
- "waf": "Performance"
+ "subcategory": "Serverless",
+ "text": "Using serverless patterns for spikes can help keeping costs down",
+ "waf": "Cost"
},
{
- "category": "Operations",
- "checklist": "The AKS Checklist",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
"services": [
- "Storage",
- "AKS"
+ "Cost",
+ "Storage"
],
"severity": "Medium",
"subcategory": "Storage",
- "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
- "waf": "Performance"
+ "text": "Consider archiving tiers for less used data",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "description": "Define a resource group structure for placement of Azure Arc-enabled servers resources",
- "guid": "585e1112-9bd7-4ba0-82f7-b94ef6e043d2",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
"services": [
- "Arc"
+ "Cost",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Capacity Planning",
- "text": "One or more resource groups is required for onboarding servers into Azure",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Check disk sizes where the size does not match the tier (i.e. A 513 GiB disk will pay a P30 (1TiB) and consider resizing",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "guid": "aa359271-8e6e-4205-8725-769e46691e88",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#azure-subscription-and-service-limits",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
"services": [
- "Entra",
- "Arc"
+ "Cost",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Capacity Planning",
- "text": "Take Azure Active Directory object limitations into account",
- "waf": "Performance"
+ "subcategory": "Storage",
+ "text": "Consider using standard SSD rather than Premium or Ultra where possible",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "description": "The following resource providers needs to be registered: Microsoft.HybridCompute, Microsoft.GuestConfiguration, Microsoft.HybridConnectivity",
- "guid": "deace4bb-1deb-44c6-9fc3-fc14eeaa3692",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#azure-resource-providers",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
"services": [
- "Subscriptions",
- "Arc"
+ "Cost",
+ "Storage"
],
- "severity": "High",
- "subcategory": "General",
- "text": "Has the Resource providers required been registered in all subscriptions",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "For storage accounts, make sure that the chosen tier is not adding up transaction charges (it might be cheaper to move to the next tier)",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "description": "Aligning with an existing or creating an Azure tagging strategy is recommended. Resource tags allow you to quickly locate it, automate operational tasks amd more. ",
- "guid": "c6d37331-65c7-4acb-b44b-be609d79f2e8",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/resource-tagging/",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
"services": [
- "Arc"
+ "Cost",
+ "Storage",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "General",
- "text": "Has a tagging strategy for Azure Arc-enabled servers been defined",
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "For ASR, consider using Standard SSD disks if the RPO/RTO and replication throughput allow it",
"waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "description": "Installation of the connected machine agent is supported on most newer Windows and Linux operative systems, review the link to se the latest list",
- "guid": "7778424c-5167-475c-9fa9-5b96ad88408e",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#supported-operating-systems",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
"services": [
- "Arc"
+ "Cost",
+ "Storage"
],
- "severity": "High",
- "subcategory": "General",
- "text": "What operating systems need to be Azure Arc-enabled",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "storage",
+ "text": "Storage accounts: check hot tier and/or GRS necessary",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "description": "There are software requirements to the agent installation. Some might require a system reboot after installation, review to link",
- "guid": "372734b8-76ba-428f-8145-901365d38e53",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#software-requirements",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
"services": [
- "Arc"
+ "Cost",
+ "Storage"
],
- "severity": "High",
- "subcategory": "General",
- "text": "Are required software installed on Windows and Linux servers to support the installation",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Storage",
+ "text": "Disks - validate use of Premium SSD disks everywhere: for example, non-prod could swap to Standard SSD or on-demand Premium SSD ",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "guid": "d44c7c89-19ca-41f6-b521-5ae514ba34d4",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/?products=azure-arc®ions=all",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
"services": [
- "Arc"
+ "Cost",
+ "Monitor",
+ "EventHubs"
],
- "severity": "High",
- "subcategory": "General",
- "text": "Make sure to use a supported Azure region",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Synapse",
+ "text": "Create budgets to manage costs and create alerts that automatically notify stakeholders of spending anomalies and overspending risks.",
+ "waf": "Cost"
},
{
- "category": "Foundation",
- "checklist": "Azure Arc Review",
- "description": "The scope include organization into management groups, subscriptions, and resource groups.",
- "guid": "f9ccbd86-8266-4abc-a264-f9a19bf39d95",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/organize-inventory-servers#organize-resources-with-built-in-azure-hierarchies",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
"services": [
- "Subscriptions",
- "Arc"
+ "Cost",
+ "Storage"
],
- "severity": "Low",
- "subcategory": "Organization",
- "text": "Define the structure for Azure management of resources",
- "waf": "Performance"
+ "severity": "Medium",
+ "subcategory": "Synapse",
+ "text": "Export cost data to a storage account for additional data analysis.",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "description": "Define RBAC rules to the servers / resource groups as required for servers management, the 'Azure Connected Machine Resource Administrator' or 'Hybrid Server Resource Administrator' role would be sufficient for management of the Azure Arc-enabled servers resources in Azure",
- "guid": "9bf39d95-d44c-47c8-a19c-a1f6d5215ae5",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#identity-and-access-control",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
"services": [
- "Entra",
- "RBAC",
- "Arc"
+ "Cost",
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Access",
- "text": "Assign RBAC rights to Azure AD user/group access for managing Azure Arc-enabled servers",
- "waf": "Security"
+ "subcategory": "Synapse",
+ "text": "Control costs for a dedicated SQL pool by pausing the resource when it is not in use.",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "guid": "14ba34d4-585e-4111-89bd-7ba012f7b94e",
- "link": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-nonaad",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
"services": [
- "Entra",
- "AKV",
- "Arc"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Access",
- "text": "Consider using managed identities for applications to access Azure resources like Key Vault example in link",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Synapse",
+ "text": "Enable the serverless Apache Spark automatic pause feature and set your timeout value accordingly.",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "description": "An Azure subscription must be parented to the same Azure AD tenant",
- "guid": "35ac9322-23e1-4380-8523-081a94174158",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#azure-subscription-and-service-limits",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
"services": [
- "Entra",
- "Subscriptions",
- "Arc"
+ "Cost"
],
- "severity": "High",
- "subcategory": "Requirements",
- "text": "An Azure Active Directory tenant must be available with at least one subscription",
- "waf": "Operations"
+ "severity": "Medium",
+ "subcategory": "Synapse",
+ "text": "Create multiple Apache Spark pool definitions of various sizes.",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "description": "Users (or SPs) need the 'Azure Connected Machine Onboarding' or 'Contributor' role to onboarding of servers",
- "guid": "33ee7ad6-c6d3-4733-865c-7acbe44bbe60",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#required-permissions",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
"services": [
- "Entra",
- "RBAC",
- "Arc"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Requirements",
- "text": "Define which users (AAD user/groups) has access to onboard Azure Arc-enabled servers",
- "waf": "Security"
+ "subcategory": "Synapse",
+ "text": "Purchase Azure Synapse commit units (SCU) for one year with a pre-purchase plan to save on your Azure Synapse Analytics costs.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "description": "Ensure to only add the rights to users or groups that is required to perform their role",
- "guid": "9d79f2e8-7778-4424-a516-775c6fa95b96",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/onboard-service-principal#create-a-service-principal-for-onboarding-at-scale",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
"services": [
- "Entra",
- "RBAC",
- "Arc"
+ "Cost",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Use the principle of least privileged",
- "waf": "Security"
+ "subcategory": "VM",
+ "text": "Use Spot VMs for interruptible jobs: These are VMs that can be bid on and purchased at a discounted price, providing a cost-effective solution for non-critical workloads.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "description": "A service principle with the 'Azure Connected Machine Onboarding' role is required for at-scale onboarding of servers, consider more SP's if onboarding is done by different teams/decentralized management",
- "guid": "ad88408e-3727-434b-a76b-a28f21459013",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/onboard-service-principal#create-a-service-principal-for-onboarding-at-scale",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
"services": [
- "Entra",
- "RBAC",
- "Arc"
+ "Cost",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "How many Service Principals are needed for onboarding Arc-enabled servers into Azure",
- "waf": "Security"
+ "subcategory": "VM",
+ "text": "Right-sizing all VMs",
+ "waf": "Cost"
},
{
- "category": "Identity",
- "checklist": "Azure Arc Review",
- "description": "Consider assigning the rights for the 'Azure Connected Machine Onboarding' role at the resource group level, to control the resource creation",
- "guid": "65d38e53-f9cc-4bd8-9826-6abca264f9a1",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/prerequisites#required-permissions",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
"services": [
- "Entra",
- "RBAC",
- "Arc"
+ "Cost",
+ "VM"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Limit the rights to onboard Azure Arc-enabled servers to the desired resource groups",
- "waf": "Security"
+ "subcategory": "VM",
+ "text": "Swap VM sized with normalized and most recent sizes",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "description": "Plan for agent deployments at scale",
- "guid": "6ee79d6b-5c2a-4364-a4b6-9bad38aad53c",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/plan-at-scale-deployment",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
"services": [
+ "Cost",
"Monitor",
- "Arc"
+ "VM"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Define a strategy for agent provisioning",
- "waf": "Operations"
+ "subcategory": "VM",
+ "text": "right-sizing VMs - start with monitoring usage below 5% and then work up to 40%",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Cost"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "description": "Use Microsoft Update to ensure that the connected machine agent is always up-to-date",
- "guid": "c78e1d76-6673-457c-9496-74c5ed85b859",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-agent#upgrade-the-agent",
+ "category": "Right-sizing",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
"services": [
- "Monitor",
- "Arc"
+ "Cost",
+ "VM"
],
+ "severity": "Medium",
+ "subcategory": "VM",
+ "text": "Containerizing an application can improve VM density and save money on scaling it",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Cost"
+ },
+ {
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "High",
- "subcategory": "Management",
- "text": "Define a strategy for agent updates",
- "waf": "Operations"
+ "subcategory": "Metaprompting",
+ "text": "Follow Metaprompting guardrails for resonsible AI",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "description": "Recommendation is to use Azure Policy, or another automation tool like Azure DevOps - important is to avoid configuration drift.",
- "guid": "c7733be2-a1a2-47b7-95a9-1be1f388ff39",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-vm-extensions",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "AzurePolicy",
- "Arc"
+ "Entra",
+ "APIM"
],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Define a strategy for extension installation",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Load Balancing",
+ "text": "Consider Gateway patterns with APIM or solutions like AI central for better rate limiting, load balancing, authentication and logging",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "description": "Use automatic upgrades where available and define an update strategy for all extensions not supporting automatic upgrades.",
- "guid": "4c2bd463-cbbb-4c86-a195-abb91a4ed90d",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-automatic-vm-extension-upgrade?tabs=azure-portal",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "Monitor"
],
"severity": "High",
- "subcategory": "Management",
- "text": "Define a strategy for extension updates",
- "waf": "Operations"
+ "subcategory": "Monitoring",
+ "text": "Enable monitoring for your AOAI instances",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "description": "Azure Automanage help implement Microsoft best-practices for servers management in Azure",
- "guid": "7a927c39-74d1-4102-aac6-aae01e6a84de",
- "link": "https://learn.microsoft.com/azure/automanage/automanage-arc",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
"services": [
+ "AKV",
"Monitor",
- "Arc"
+ "Subscriptions"
],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Consider using Azure Automanage to control settings and avoid configuration drift on servers",
- "waf": "Operations"
+ "severity": "High",
+ "subcategory": "Alerts",
+ "text": "Create alerts to notify teams of events such as an entry in the activity log created by an action performed on the resource, such as regenerating its subscription keys or a metric threshold such as the number of errors exceeding 10 in an hour",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "guid": "37b6b780-cbaf-4e6c-9658-9d457a927c39",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/plan-at-scale-deployment#phase-3-manage-and-operate",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "Monitor"
],
"severity": "High",
"subcategory": "Monitoring",
- "text": "Monitor for unresponsive agents",
- "waf": "Operations"
+ "text": "Monitor token usage to prevent service disruptions due to capacity",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "guid": "74d1102c-ac6a-4ae0-8e6a-84de5df47d2d",
- "link": "https://learn.microsoft.com/azure/azure-monitor/agents/log-analytics-agent#data-collected",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Design a monitoring strategy to send metrics and logs to an Log Analytics workspace",
- "waf": "Operations"
+ "subcategory": "Observability",
+ "text": "observe metrics like processed inference tokens, generated completion tokens monitor for rate limit",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "guid": "92881b1c-d5d1-4e54-a296-59e3958fd782",
- "link": "https://learn.microsoft.com/azure/service-health/resource-health-alert-monitor-guide",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "APIM"
],
- "severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use notification in Activity logs to receive notification on unexpected changes to the resources",
- "waf": "Operations"
+ "severity": "Low",
+ "subcategory": "Observability",
+ "text": "Enable and configure Diagnostics for the Azure OpenAI Service. If not sufficient, consider using a gateway such as Azure API Managements in front of Azure OpenAI to log both incoming prompts and outgoing responses, where permitted",
+ "waf": "Operational Excellence"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "guid": "89c93555-6d02-4bfe-9564-b0d834a34872",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/learn/tutorial-enable-vm-insights",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Infrastructure Deployment",
+ "text": "Use Infrastructure as code to deploy the Azure OpenAI Service, model deployments, and all related resources",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "Entra"
],
+ "severity": "High",
+ "subcategory": "Authentication",
+ "text": "Use Microsoft Entra Authentication with Managed Identity instead of API Key",
+ "waf": "Security"
+ },
+ {
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Evaluation",
+ "text": "Evaluate the performance/accuracy of the system with a known golden dataset which has the inputs and the correct answers. Leverage capabilities in PromptFlow for Evaluation.",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Hosting model",
+ "text": "Evaluate usage of Provisioned throughput model ",
+ "waf": "Performance"
+ },
+ {
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Content Safety",
+ "text": "Review and implement Azure AI content safety",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Throughput definition",
+ "text": "Define and evaluate the throughput of the system based on tokens & response per minute and align with requirements",
+ "waf": "Performance"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Use Azure Monitor for compliance and operational monitoring",
- "waf": "Operations"
+ "subcategory": "Latency improvement",
+ "text": "Improve latency of the system by limiting token sizes, streaming options for applications like chatbots or conversational interfaces. Streaming can enhance the perceived performance of Azure OpenAI applications by delivering responses to users in an incremental manner",
+ "waf": "Performance"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "guid": "5df47d2d-9288-41b1-ad5d-1e54a29659e3",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/plan-at-scale-deployment#phase-3-manage-and-operate",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "ServiceBus",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Create an alert to identify Azure Arc-enabled servers that aren't using the latest version of the Azure connected machine agent",
- "waf": "Operations"
+ "subcategory": "Elasticity segregation",
+ "text": "Estimate elasticity demands to determine synchronous and batch request segregation based on priority. For high priority, use synchronous approach and for low priority, asynchronous batch processing with queue is preferred",
+ "waf": "Performance"
},
{
- "category": "Management and Monitoring",
- "checklist": "Azure Arc Review",
- "description": "Use Update Management in Azure Automation or the new Update Management Center (preview) functionality to ensure update management of servers",
- "guid": "ae2cc84c-37b6-4b78-8cba-fe6c46589d45",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/hybrid/server/best-practices/arc-update-management",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Benchmarking",
+ "text": "Benchmark token consumption requirements based on estimated demands from consumers. Consider using the Azure OpenAI benchmarking tool to help you validate the throughput if you are using Provisioned Throughput Unit deployments",
+ "waf": "Performance"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Elasticity ",
+ "text": "If you are using Provisioned Throughput Units (PTUs), consider deploying a token-per-minute (TPM) deployment for overflow requests. Use a gateway to route requests to the TPM deployment when the PTU limits are reached.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Model choice",
+ "text": "Choose the right model for the right task. Pick models with right tradeoff between speed, quality of response and output complexity",
+ "waf": "Performance"
+ },
+ {
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Fine tuning",
+ "text": "Have a baseline for performance without fine-tuning for knowing whether or not fine-tuning has improved model performance",
+ "waf": "Performance"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"services": [
- "Monitor",
- "Arc"
+ "ACR"
],
"severity": "Low",
- "subcategory": "Security",
- "text": "Use Azure Arc-enabled servers to control software updates deployments to servers",
- "waf": "Operations"
+ "subcategory": "Multi-region architecture",
+ "text": "Deploy multiple OAI instances across regions",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "The Connected Machine Agent will by default communicate with Azure services over public Internet connectivity using HTTPS (TCP port 443)",
- "guid": "f6e043d2-aa35-4927-88e6-e2050725769e",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/network-requirements?tabs=azure-cloud#details",
+ "category": "BC and DR",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "Entra",
+ "APIM"
],
"severity": "High",
- "subcategory": "Networking",
- "text": "Define a connectivity method from the server to Azure",
- "waf": "Operations"
+ "subcategory": "Load balancing",
+ "text": "Implement retry & healthchecks with Gateway pattern like APIM",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "The Connected Machine Agent can be configured to use a proxy server, it is recommended to define the proxy server address using 'azcmagent config set proxy.url' command on the local system.",
- "guid": "46691e88-35ac-4932-823e-13800523081a",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/manage-agent#update-or-remove-proxy-settings",
- "services": [
- "Arc"
- ],
+ "category": "BC and DR",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Is a proxy server a required for communication over the Public Internet",
- "waf": "Operations"
+ "subcategory": "Quotas",
+ "text": "Ensure having adequate quotas of TPM & RPM for the workload",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "The Connected Machine Agent can use a Private Link for communication with Azure Services over an existing ExpressRoute or VPN connection",
- "guid": "94174158-33ee-47ad-9c6d-3733165c7acb",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/private-link-security",
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "UX best practice",
+ "text": "Review the considerations in HAI toolkit guidance and apply those interaction practices for the slution",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
"services": [
- "VPN",
- "PrivateLink",
- "ExpressRoute",
- "Arc"
+ "ACR"
],
"severity": "Medium",
- "subcategory": "Networking",
- "text": "Is a private (not public Internet) connection required?",
- "waf": "Operations"
+ "subcategory": "Load balancing",
+ "text": "Deploy separate fine tuned models across regions if finetuning is employed",
+ "waf": "Reliability"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "Firewall configuration might be required for the agent to communicate with Azure, use the link to see ServiceTags and/or URL's required",
- "guid": "e44bbe60-9d79-4f2e-a777-8424c516775c",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/network-requirements?tabs=azure-cloud#service-tags",
+ "category": "BC and DR",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "Backup",
+ "ASR"
],
+ "severity": "Medium",
+ "subcategory": "Data Backup and Disaster Recovery",
+ "text": "Regularly backup and replicate critical data to ensure data availability and recoverability in case of data loss or system failures. Leverage Azure's backup and disaster recovery services to protect your data.",
+ "waf": "Reliability"
+ },
+ {
+ "category": "BC and DR",
+ "checklist": "Azure OpenAI Review",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "SLA considerations",
+ "text": "Azure AI search service tiers should be choosen to have a SLA ",
+ "waf": "Reliability"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Data Sensitivity",
+ "text": "Classify data and sensitivity, labeling with Microsoft Purview before generating the embeddings and make sure to treat the embeddings generated with same sensitivity and classification",
+ "waf": "Security"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "High",
- "subcategory": "Networking",
- "text": "Will Firewall configurations be needed in order to ensure communication with Azure Services?",
+ "subcategory": "Encryption at Rest",
+ "text": "Encrypt data used for RAG with SSE/Disk encryption with optional BYOK",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "Use available automation tool for the system in question to regularly update the Azure endpoints",
- "guid": "6fa95b96-ad88-4408-b372-734b876ba28f",
- "link": "https://www.microsoft.com/download/details.aspx?id=56519",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "ACR"
],
- "severity": "Low",
- "subcategory": "Networking",
- "text": "Can the Firewall or Proxy rules be automated updated if Service Tags or IP addresses change",
+ "severity": "High",
+ "subcategory": "Transit Encryption",
+ "text": "Ensure TLS is enforced for data in transit across data sources, AI search used for Retrieval-Augmented Generation (RAG) and LLM communication",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "Configure Servers to use Transport Layer Security (TLS) version 1.2",
- "guid": "21459013-65d3-48e5-9f9c-cbd868266abc",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/network-requirements?tabs=azure-cloud#transport-layer-security-12-protocol",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "RBAC"
],
"severity": "High",
- "subcategory": "Networking",
- "text": "Always use secure communication for Azure where possible",
+ "subcategory": "Access Control",
+ "text": "Use RBAC to manage access to Azure OpenAI services. Assign appropriate permissions to users and restrict access based on their roles and responsibilities",
"waf": "Security"
},
{
- "category": "Networking",
- "checklist": "Azure Arc Review",
- "description": "All extensions (like log analytics etc.) have separate network requirements, be sure to include all in the network design.",
- "guid": "a264f9a1-9bf3-49d9-9d44-c7c8919ca1f6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/hybrid/arc-enabled-servers/eslz-arc-servers-connectivity#define-extensions-connectivity-method",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Data Masking and Redaction",
+ "text": "Implement data encryption, masking or redaction techniques to hide sensitive data or replace it with obfuscated values in non-production environments or when sharing data for testing or troubleshooting purposes",
+ "waf": "Security"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
"services": [
- "PrivateLink",
"Monitor",
- "Arc"
+ "Sentinel",
+ "Defender"
],
- "severity": "Low",
- "subcategory": "Networking",
- "text": "Include communication for Azure Arc-enabled Servers extensions in the design (firewall/proxy/private link)",
+ "severity": "High",
+ "subcategory": "Threat Detection and Monitoring",
+ "text": "Utilize Azure Defender to detect and respond to security threats and set up monitoring and alerting mechanisms to identify suspicious activities or breaches. Leverage Azure Sentinel for advanced threat detection and response",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "ac6aae01-e6a8-44de-9df4-7d2d92881b1c",
- "link": "https://learn.microsoft.com/azure/governance/policy/",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"services": [
- "AzurePolicy",
- "Arc"
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Management",
- "text": "Use Azure Policy to implement a governance model for hybrid connected servers",
+ "subcategory": "Data Retention and Disposal",
+ "text": "Establish data retention and disposal policies to adhere to compliance regulations. Implement secure deletion methods for data that is no longer required and maintain an audit trail of data retention and disposal activities",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "5c2a3649-4b69-4bad-98aa-d53cc78e1d76",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "services": [
- "Arc"
- ],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Consider using Machine configurations for in guest OS configurations",
- "waf": "Operations"
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Jail break Safety",
+ "text": "Implement Prompt shields and groundedness detection using Content Safety ",
+ "waf": "Operational Excellence"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "667357c4-4967-44c5-bd85-b859c7733be2",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/machine-configuration-create",
- "services": [
- "AzurePolicy",
- "Arc"
- ],
- "severity": "Medium",
- "subcategory": "Management",
- "text": "Evaluate the need for custom Guest Configuration policies",
- "waf": "Operations"
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Data Privacy and Compliance",
+ "text": "Ensure compliance with relevant data protection regulations, such as GDPR or HIPAA, by implementing privacy controls and obtaining necessary consents or permissions for data processing activities.",
+ "waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "49674c5e-d85b-4859-a773-3be2a1a27b77",
- "link": "https://learn.microsoft.com/azure/automation/change-tracking/overview",
- "services": [
- "Monitor",
- "Arc"
- ],
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Consider using change tracking for tracking changes made on the servers",
- "waf": "Operations"
+ "subcategory": "Employee Awareness and Training",
+ "text": "Educate your employees about data security best practices, the importance of handling data securely, and potential risks associated with data breaches. Encourage them to follow data security protocols diligently.",
+ "waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "d5d1e54a-2965-49e3-a58f-d78289c93555",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/data-residency",
- "services": [
- "Arc"
- ],
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Environment segregation",
+ "text": "Keep production data separate from development and testing data. Only use real sensitive data in production and utilize anonymized or synthetic data in development and test environments.",
+ "waf": "Security"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Requirements",
- "text": "Make sure to use an Azure region for storing the metadata approved by the organization",
+ "subcategory": "Index Segregation",
+ "text": "If you have varying levels of data sensitivity, consider creating separate indexes for each level. For instance, you could have one index for general data and another for sensitive data, each governed by different access protocols",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "195abb91-a4ed-490d-ae2c-c84c37b6b780",
- "link": "https://learn.microsoft.com/azure/key-vault/general/basic-concepts",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
"services": [
- "AKV",
- "Arc"
+ "RBAC",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Secrets",
- "text": "Use Azure Key Vault for certificate management on servers",
+ "subcategory": "Sensitive Data in Separate Instances",
+ "text": "Take segregation a step further by placing sensitive datasets in different instances of the service. Each instance can be controlled with its own specific set of RBAC policies",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "description": "Consider using a short-lived Azure AD service principal client secrets.",
- "guid": "6d02bfe4-564b-40d8-94a3-48726ee79d6b",
- "link": "https://learn.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal#option-2-create-a-new-application-secret",
- "services": [
- "Storage",
- "Entra",
- "AKV",
- "Arc"
- ],
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "High",
- "subcategory": "Secrets",
- "text": "What is the acceptable life time of the secret used by SP's",
+ "subcategory": "Embedding and Vector handling",
+ "text": "Recognize that embeddings and vectors generated from sensitive information are themselves sensitive. This data should be afforded the same protective measures as the source material",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "description": "A private key is saved to the disk, ensure this is protected using disk encryption",
- "guid": "a1a27b77-5a91-4be1-b388-ff394c2bd463",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#using-disk-encryption",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"services": [
- "AKV",
- "Arc"
+ "RBAC"
],
- "severity": "Medium",
- "subcategory": "Secrets",
- "text": "Secure the public key for Azure Arc-enabled Servers",
+ "severity": "High",
+ "subcategory": "Access control",
+ "text": "Apply RBAC to th data stores having embeddings and vectors and scope access based on role's access requirements",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "description": "Local administrator is required to install the Connected Machine Agent on Windows and Linux systems",
- "guid": "29659e39-58fd-4782-a9c9-35556d02bfe4",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/onboard-portal#install-manually",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "PrivateLink"
],
"severity": "High",
- "subcategory": "Security",
- "text": "Ensure there is local administrator access for executing the agent installation",
+ "subcategory": "Network security",
+ "text": "Configure private endpoint for AI services to restrict service access within your network",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "description": "Members of the local administrator group on Windows and users with root privileges on Linux, have permissions to manage the agent via command line.",
- "guid": "564b0d83-4a34-4872-9ee7-9d6b5c2a3649",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#agent-security-and-permissions",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "Firewall",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Security",
- "text": "Limit the amount of users with local administrator rights to the servers",
+ "severity": "High",
+ "subcategory": "Network security",
+ "text": "Enforce strict inbound and outbound traffic control with Azure Firewall and UDRs and limit the external integration points",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "4b69bad3-8aad-453c-a78e-1d76667357c4",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/managed-identity-authentication",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Control Network Access",
+ "text": "Implement network segmentation and access controls to restrict access to the LLM application only to authorized users and systems and prevent lateral movement",
+ "waf": "Security"
+ },
+ {
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "Arc"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Consider using and restricting access to managed identities for applications.",
- "waf": "Security"
+ "subcategory": "Token Optimization",
+ "text": "Use prompt compression tools like LLMLingua or gprtrim",
+ "waf": "Cost Optimization"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "description": "Use Defender for Endpoint or another AV and EDR solution to protect endpoints",
- "guid": "5a91be1f-388f-4f39-9c2b-d463cbbbc868",
- "link": "https://learn.microsoft.com/azure/security-center/security-center-get-started",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"services": [
- "Defender",
- "Arc"
+ "AKV",
+ "Entra"
],
+ "severity": "High",
+ "subcategory": "Secure APIs and Endpoints",
+ "text": "Ensure that APIs and endpoints used by the LLM application are properly secured with authentication and authorization mechanisms, such as Managed identities, API keys or OAuth, to prevent unauthorized access.",
+ "waf": "Security"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Enable Defender for Servers for all servers to secure hybrid workloads from threats",
+ "subcategory": "Implement Strong Authentication",
+ "text": "Enforce strong end user authentication mechanisms, such as multi-factor authentication, to prevent unauthorized access to the LLM application and associated network resources",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "cbafe6c4-6589-4d45-9a92-7c3974d1102c",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
"services": [
- "Arc"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Define controls to detect security misconfigurations and track compliance",
+ "subcategory": "Use Network Monitoring",
+ "text": "Implement network monitoring tools to detect and analyze network traffic for any suspicious or malicious activities. Enable logging to capture network events and facilitate forensic analysis in case of security incidents",
"waf": "Security"
},
{
- "category": "Security, Governance and Compliance",
- "checklist": "Azure Arc Review",
- "guid": "cbbbc868-195a-4bb9-8a4e-d90dae2cc84c",
- "link": "https://learn.microsoft.com/azure/azure-arc/servers/security-overview#extension-allowlists-and-blocklists",
- "services": [
- "Arc"
- ],
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Security",
- "text": "Use allow- or block-lists to control what extensions can be installed on the Azure Arc-enabled servers",
+ "subcategory": "Security Audits and Penetration Testing",
+ "text": "Conduct security audits and penetration testing to identify and address any network security weaknesses or vulnerabilities in the LLM application's network infrastructure",
"waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "Using the correct approach to feed a datalake with cold data and having the Kusto query engine at your disposal at the same time, as in the short-term storage",
- "guid": "ba7da7be-9951-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/data-explorer/kusto/management/data-export/continuous-data-export",
- "service": "Azure Data Explorer",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Infrastructure Deployment",
+ "text": "Azure AI Services are properly tagged for better management",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Low",
+ "subcategory": "Infrastructure Deployment",
+ "text": "Azure AI Service accounts follows organizational naming conventions",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Diagnostics Logging",
+ "text": "Diagnostic logs in Azure AI services resources should be enabled",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Identity and Access Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
"services": [
- "Storage",
- "Cost"
+ "Entra"
],
- "subcategory": "Replication",
- "text": "Leverage External Tables and Continuous data export overview to reduce costs",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Entra ID based access",
+ "text": "Key access (local authentication) is recommended to be disabled for security. After disabling key based access, Microsoft Entra ID becomes the only access method, which allows maintaining minimum privilege principle and granular control. ",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "Azure Data Explorer provides an optional follower capability for a leader cluster to be followed by other follower clusters for read-only access to the leader's data and metadata. Changes in the leader, such as create, append, and drop are automatically synchronized to the follower. While the leaders could span Azure regions, the follower clusters should be hosted in the same region(s) as the leader. If the leader cluster is down or databases or tables are accidentally dropped, the follower clusters will lose access until access is recovered in the leader.",
- "guid": "56a22586-f490-4641-addd-ea8a377cdeb3",
- "link": "https://learn.microsoft.com/azure/data-explorer/follower?tabs=csharp",
- "service": "Azure Data Explorer",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
"services": [
- "Storage"
+ "AKV",
+ "Entra"
],
- "subcategory": "Replication",
- "text": "To share data, explore Leader-follower cluster configuration",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Secure Key Management",
+ "text": "Store and manage keys securely using Azure Key Vault. Avoid hard-coding or embedding sensitive keys within your LLM application's code and retrieve them securely from Azure Key Vault using managed identities",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "Azure Data Explorer doesn't support automatic protection against the outage of an entire Azure region. This disruption can happen during a natural disaster, like an earthquake. If you require a solution for a disaster recovery situation, do the following steps to ensure business continuity. In these steps, you'll replicate your clusters, management, and data ingestion in two Azure paired regions.",
- "guid": "861bb2bc-14ae-4a6e-95d8-d9a3adc218e6",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#create-multiple-independent-clusters",
- "service": "Azure Data Explorer",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
"services": [
- "ASR"
+ "AKV"
],
- "subcategory": "Replication",
- "text": "To protect against regional failure, create Multiple independent clusters, preferably in two Azure Paired regions",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Key Rotation and Expiration",
+ "text": "Regularly rotate and expire keys stored in Azure Key Vault to minimize the risk of unauthorized access.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "guid": "436b0635-cb45-4e57-a603-324ace8cc123",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#replicate-management-activities",
- "service": "Azure Data Explorer",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
"services": [
- "Storage",
- "RBAC"
+ "Cost"
],
- "subcategory": "Replication",
- "text": "Replicate all management activities such as creating new tables or managing user roles on each cluster.",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Token Optimization",
+ "text": "Use tiktoken to understand token sizes for token optimizations in conversational mode",
+ "waf": "Cost Optimization"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "guid": "18ca6017-0265-4f4b-a46a-393af7f31728",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution",
- "service": "Azure Data Explorer",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
"services": [],
- "subcategory": "Replication",
- "text": "Ingest data into each cluster in parallel",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Secure coding practice",
+ "text": "Follow secure coding practices to prevent common vulnerabilities such as injection attacks, cross-site scripting (XSS), or security misconfigurations",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "This configuration is also called 'always-on'. For critical application deployments with no tolerance for outages, you should use multiple Azure Data Explorer clusters across Azure paired regions.",
- "guid": "58a9c279-9c42-4bb6-9d0c-65556246b338",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-active-configuration",
- "service": "Azure Data Explorer",
- "services": [
- "ACR"
- ],
- "subcategory": "DR Configuration",
- "text": "For critical application with no tolerance for outages, create Active-Active-Active (always-on) configuration",
- "waf": "Reliability"
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "High",
+ "subcategory": "Patching and updates",
+ "text": "Setup a process to regularly update and patch the LLM libraries and other system components",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "This configuration is identical to the active-active-active configuration, but only involves two Azure paired regions. Configure dual ingestion, processing, and curation. Users are routed to the nearest region. The cluster SKU must be the same across regions.",
- "guid": "563a4dc7-4a74-48b6-922a-d190916a6649",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-configuration",
- "service": "Azure Data Explorer",
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
"services": [
- "ACR"
+ "AzurePolicy"
],
- "subcategory": "DR Configuration",
- "text": "For critical applications, create Active-Active configuration in two paired regions",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Governance",
+ "text": "Adhere to Azure OpenAI or other LLMs terms of use, policies and guidance and allowed use cases",
+ "waf": "Operational Excellence"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "The Active-Hot configuration is similar to the Active-Active configuration in dual ingest, processing, and curation. While the standby cluster is online for ingestion, process, and curation, it isn't available to query. The standby cluster doesn't need to be in the same SKU as the primary cluster. It can be of a smaller SKU and scale, which may result in it being less performant. In a disaster scenario, users are redirected to the standby cluster, which can optionally be scaled up to increase performance.",
- "guid": "8fadfe27-7de2-483b-8ac3-52baa9b75708",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-hot-standby-configuration",
- "service": "Azure Data Explorer",
- "services": [],
- "subcategory": "DR Configuration",
- "text": "For applications, which required only read during failure, create Active-Hot standby configuration",
- "waf": "Reliability"
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "services": [
+ "Cost"
+ ],
+ "severity": "Medium",
+ "subcategory": "Cost familiarization",
+ "text": "Understand difference in cost of base models and fine tuned models and token step sizes",
+ "waf": "Cost Optimization"
},
{
- "category": "BC and DR",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "This solution offers the least resiliency (highest RPO and RTO), is the lowest in cost and highest in effort. In this configuration, there's no data recovery cluster. Configure continuous export of curated data (unless raw and intermediate data is also required) to a storage account that is configured GRS (Geo Redundant Storage). A data recovery cluster is spun up if there is a disaster recovery scenario. At that time, DDLs, configuration, policies, and processes are applied. Data is ingested from storage with the ingestion property kustoCreationTime to over-ride the ingestion time that defaults to system time.",
- "guid": "49aa8092-dc8e-4b9d-8bb7-3b26a5a67eba",
- "link": "https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#on-demand-data-recovery-configuration",
- "service": "Azure Data Explorer",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"services": [
- "Storage",
- "ASR",
- "AzurePolicy",
"Cost"
],
- "subcategory": "DR Configuration",
- "text": "For applications, where cost is a concern and can withstand some downtime during failure, create on-demand data recovery cluster configuration",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Batch processing",
+ "text": "Batch requests, where possible, to minimize the per-call overhead which can reduce overall costs. Ensure you optimize batch size",
+ "waf": "Cost Optimization"
},
{
- "category": "Operations Management",
- "checklist": "Azure Data Explorer Review Checklist",
- "description": "All database objects, policies, and configurations should be persisted in source control so they can be released to the cluster from your release automation tool.",
- "guid": "5a907e1e-348e-4f25-9c27-d32e8bbac757",
- "link": "https://learn.microsoft.com/azure/data-explorer/devops",
- "service": "Azure Data Explorer",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "AzurePolicy"
+ "Cost",
+ "Monitor"
],
- "subcategory": "IaC",
- "text": "Wrap DevOps and source control around all your code",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Cost monitoring",
+ "text": "Set up a cost tracking system that monitors model usage and use that information to help inform model choices and prompt sizes",
+ "waf": "Cost Optimization"
},
{
- "category": "Operations Management",
- "checklist": "Azure Data Explorer Review Checklist",
- "guid": "1559ab91-53e8-4908-ae28-b84c33b6b780",
- "link": "https://learn.microsoft.com/azure/data-explorer/devops",
- "service": "Azure Data Explorer",
- "services": [],
- "subcategory": "IaC",
- "text": "Design, develop, and implement validation routines to ensure all clusters are in-sync from a data perspective.",
- "training": "https://learn.microsoft.com/learn/modules/azure-active-directory/",
- "waf": "Reliability"
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "services": [
+ "Cost"
+ ],
+ "severity": "Medium",
+ "subcategory": "Token limit",
+ "text": "Set a maximum limit on the number of tokens per model response (max_tokens and the number of completions to generate). Optimize the size to ensure it is large enough for a valid response",
+ "waf": "Cost Optimization"
},
{
"category": "Operations Management",
- "checklist": "Azure Data Explorer Review Checklist",
- "guid": "8b9fe5c4-1049-4d40-9a82-2c3474d00f18",
- "link": "https://learn.microsoft.com/azure/data-explorer/devops",
- "service": "Azure Data Explorer",
+ "checklist": "Azure OpenAI Review",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
"services": [],
- "subcategory": "IaC",
- "text": "Be fully cognizant of what it takes to build a cluster from scratch. Leverage Infrastructure as a Code for your deployments",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "AI Search Reliability",
+ "text": "Review the guidance provided on setting up AI search for Reliability",
+ "waf": "Operational Excellence"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
"services": [
- "Entra"
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Entra ID",
- "text": "Use long-live revocable token, cache your token and acquire your silently using Microsoft Identity Library",
- "waf": "Reliability"
+ "subcategory": "AI Search Vector Limits",
+ "text": "Plan and manage AI Search Vector storage",
+ "waf": "Operational Excellence"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"services": [
- "Entra"
+ "ACR"
],
"severity": "Medium",
- "subcategory": "AAD B2C",
- "text": "Make sure that your sign-in user flows are backed up and resilient. Make sure that the code that you use to sign-in your users are backed up and recoverable. Resilient interfaces with external processes",
- "waf": "Reliability"
+ "subcategory": "DevOps",
+ "text": "Ensure deployment of Azure OpenAI instances across your various environments, such as development, test, and production supporting lrarning & experimentation. Apply LLMOps practices to automate the lifecycle management of your GenAI applications",
+ "waf": "Operational Excellence"
},
{
- "category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
"services": [
- "Entra"
+ "Cost",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "AAD B2C",
- "text": "Custom brand assets should be hosted on a CDN",
- "waf": "Performance"
+ "severity": "High",
+ "subcategory": "Costing Model",
+ "text": "Evaluate usage of billing models - PAYG vs PTU. Start with PAYG and consider PTU when the usage is predictable in production since it offers dedicated memory and compute, reserved capacity, and consistent maximum latency for the specified model version",
+ "waf": "Cost Optimization"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
- "services": [
- "Entra"
- ],
- "severity": "Low",
- "subcategory": "AAD B2C",
- "text": "Have multiple identiy providers (i.e., login with your microsoft, google, facebook accounts)",
- "waf": "Reliability"
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "DevOps",
+ "text": "Evaluate the quality of prompts and applications when switching between model versions",
+ "waf": "Operational Excellence"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"services": [
- "Entra",
- "VM"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Windows Server AD",
- "text": "Follow VM rules for high availability on the VM level (premium disks, two or more in a region, in different availability zones)",
- "waf": "Reliability"
+ "subcategory": "Development",
+ "text": "Evaluate, monitor and refine your GenAI apps for features like groundedness, relevance, accuracy, coherence and fluency",
+ "waf": "Operational Excellence"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "services": [
- "Entra"
- ],
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Windows Server AD",
- "text": "Don't replicate! Replication can create issues with directory synchronization",
- "waf": "Reliability"
+ "subcategory": "Development",
+ "text": "Evaluate your Azure AI Search results based on different search parameters",
+ "waf": "Operational Excellence"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "services": [
- "Entra"
- ],
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Windows Server AD",
- "text": "Have active-active for multi-regions",
- "waf": "Reliability"
+ "subcategory": "Development",
+ "text": "Look at fine tuning models as way of increasing accuracy only when you have tried other basic approaches like prompt engineering and RAG with your data",
+ "waf": "Operational Excellence"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "services": [
- "Entra"
- ],
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Development",
+ "text": "Use prompt engineering techniques to improve the accuracy of LLM responses",
+ "waf": "Operational Excellence"
+ },
+ {
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Entra Domain Services",
- "text": "Add Azure AD Domain service stamps to additional regions and locations",
- "waf": "Reliability"
+ "subcategory": "Security Audits and Penetration Testing",
+ "text": "Red team your GenAI applications",
+ "waf": "Security"
},
{
"category": "Operations Management",
- "checklist": "Identity Review Checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "services": [
- "Entra"
- ],
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Entra Domain Services",
- "text": "Use Replica Sets for DR",
- "waf": "Reliability"
+ "subcategory": "End user feedback",
+ "text": "Provide end users with scoring options for LLM responses and track these scores. ",
+ "waf": "Operational Excellence"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Automatic instance repairs ensure that unhealthy instances are promptly identified and replaced, maintaining a set of healthy instances within your scale set.",
- "guid": "7e13c105-675c-41e9-95b4-59837ff7ae7c",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs",
- "service": "VMSS",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"services": [
- "VM"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "VM Scale Sets",
- "text": "Enable automatic instance repairs for enhanced VM Scale Sets resiliency",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Quota Management",
+ "text": "Consider Quota management practices. Use dynamic quota for certain use cases when your application can use extra capacity opportunistically or the application itself is driving the rate at which the Azure OpenAI API is called",
+ "waf": "Cost Optimization"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Ensure that Azure Backup is utilized appropriately to meet your organization's resiliency requirements for Azure virtual machines (VMs).",
- "guid": "4d874a74-8b66-42d6-b150-512a66498f6d",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-vms-introduction",
- "service": "VM",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
"services": [
- "VM",
- "Backup"
+ "LoadBalancer",
+ "ACR",
+ "Entra",
+ "APIM"
],
- "severity": "High",
- "subcategory": "Virtual Machines",
- "text": "Consider Azure Backup to meet your resiliency requirements for Azure VMs",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Load Balancing",
+ "text": "Use Load balancer solutions like APIM based gateway for balancing load and capacity across services and regions",
+ "waf": "Operational Excellence"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Single Instance VMs using Premium SSD or Ultra Disk for all Operating System Disks and Data Disks are guaranteed to have Virtual Machine Connectivity of at least 99.9%",
- "guid": "8052d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "VM",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc411",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython-new&pivots=programming-language-studio#import-training-data-from-azure-blob-store",
+ "service": "Azure OpenAI",
"services": [
- "VM"
+ "Storage"
],
- "severity": "High",
- "subcategory": "Virtual Machines",
- "text": "Use Premium or Ultra disks for production VMs",
+ "severity": "Medium",
+ "subcategory": "Fine tuning",
+ "text": "Follow the guidance for fine-tuning with large data files and import the data from an Azure blob store. Large files, 100 MB or larger, can become unstable when uploaded through multipart forms because the requests are atomic and can't be retried or resumed",
"waf": "Reliability"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Azure automatically replicates managed disks within a region to ensure data durability and protect against single-point failures.",
- "guid": "b31e38c3-f298-412b-8363-cffe179b599d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview",
- "service": "VM",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc412",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest",
+ "service": "Azure OpenAI",
"services": [
- "VM"
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Virtual Machines",
- "text": "Ensure Managed Disks are used for all VMs",
+ "severity": "Medium",
+ "subcategory": "Monitoring",
+ "text": "Manage rate limits for your model deployments and monitor usage of tokens per minute (TPM) and requests per minute (RPM) for pay-as-you-go deployments",
"waf": "Reliability"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Temporary disks are intended for short-term storage of non-persistent data such as page files, swap files, or SQL Server tempdb. Storing persistent data on temporary disks can lead to data loss during maintenance events or VM redeployment.",
- "guid": "e0d5973c-d4ce-432c-8881-37f6f7c4c0d4",
- "link": "https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview#temporary-disk",
- "service": "VM",
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc413",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai",
+ "service": "Azure OpenAI",
"services": [
- "Storage",
- "VM",
- "SQL"
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Virtual Machines",
- "text": "Do not use the Temp disk for anything that is not acceptable to be lost",
+ "subcategory": "Monitoring",
+ "text": "Monitor provision-managed utilization if you're using the provisioned throughput payment model",
"waf": "Reliability"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Co-locate your compute, storage, networking, and data resources across an availability zone, and replicate this arrangement in other availability zones.",
- "guid": "e514548d-2447-4ec6-9138-b8200f1ce16e",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "services": [
- "Storage",
- "ACR",
- "VM"
- ],
+ "category": "Responsible AI",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc414",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/content-filters",
+ "service": "Azure OpenAI",
+ "services": [],
"severity": "Medium",
- "subcategory": "Virtual Machines",
- "text": "Leverage Availability Zones for your VMs in regions where they are supported",
+ "subcategory": "Content Safety",
+ "text": "Tune content filters to minimize false positives from overly aggressive filters",
"waf": "Reliability"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Use at least two VMs in Availability Sets to isolate VMs on different fault and update domains.",
- "guid": "5a785d6f-e96c-496a-b884-4cf3b2b38c88",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "VM",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc415",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/encrypt-data-at-rest",
+ "service": "Azure OpenAI",
"services": [
- "VM"
+ "AKV"
],
"severity": "Medium",
- "subcategory": "Virtual Machines",
- "text": "For regions that do not support Availability Zones deploy VMs into Availability Sets",
- "waf": "Reliability"
+ "subcategory": "Key Management",
+ "text": "Use customer-managed keys for fine-tuned models and training data that's uploaded to Azure OpenAI",
+ "waf": "Security"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Azure provides multiple options for VM redundancy to meet different requirements (Availability Zones, Virtual Machine Scale Sets, Availability Sets, Azure Site Recovery)",
- "guid": "6ba2c021-4991-414a-9d3c-e574dccbd979",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc416",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
"services": [
- "ASR",
- "VM"
+ "LoadBalancer"
],
- "severity": "High",
- "subcategory": "Virtual Machines",
- "text": "Avoid running a production workload on a single VM",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Jailbreak protection",
+ "text": "Implement jailbreak risk detection to safeguard your language model deployments against prompt injection attacks",
+ "waf": "Security"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Azure Site Recovery enables you to achieve low RTO (Recovery Time Objective) for your Azure and hybrid VMs by providing continuous replication and failover capabilities.",
- "guid": "2a6bcca2-b5fe-4a1e-af3d-d95d48c7c891",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
- "services": [
- "ASR",
- "AVS",
- "VM"
- ],
- "severity": "High",
- "subcategory": "Virtual Machines",
- "text": "For Azure and on-premises VMs (Hyper-V/Phyiscal/VMware) with low RTO requirements use Azure Site Recovery",
- "waf": "Reliability"
+ "category": "Governance and Security",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc417",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Quota exhaustion",
+ "text": "Use security controls like throttling, service isolation and gateway pattern to prevent attacks that might exhaust model usage quotas",
+ "waf": "Security"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "By using Capacity Reservations, you can effectively manage capacity for critical workloads, ensuring resource availability in specified regions.",
- "guid": "bd7bb012-f7b9-45e0-9e15-8e3ea3992c2d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/capacity-reservation-overview",
- "service": "VM",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a9",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "VM"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Virtual Machines",
- "text": "Use Capacity Reservations for critical workloads that require guaranteed capacity",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Cost estimation",
+ "text": "Develop your cost model, considering prompt sizes. Understanding prompt input and response sizes and how text translates into tokens helps you create a viable cost model",
+ "waf": "Cost Optimization"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "By ensuring that the necessary quotas are increased in your DR region before testing failover with ASR, you can avoid any potential resource constraints during the recovery process for failed over VMs.",
- "guid": "e6e2065b-3a76-4af4-a691-e8939ada4666",
- "link": "https://learn.microsoft.com/azure/quotas/per-vm-quota-requests",
- "service": "VM",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a1",
+ "link": "https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/",
+ "service": "Azure OpenAI",
"services": [
- "ASR",
- "VM"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Virtual Machines",
- "text": "Increase quotas in DR region before testing failover with ASR",
- "waf": "Reliability"
+ "subcategory": "Model selection",
+ "text": "Consider model pricing and capabilities when you choose models. Start with less-costly models for less-complex tasks like text generation or completion tasks and for complex tasks like language translation or content understanding, consider using more advanced models. Optimize costs while still achieving the desired application performance",
+ "waf": "Cost Optimization"
},
{
- "category": "Compute",
- "checklist": "Resiliency Review",
- "description": "Scheduled Events is an Azure Metadata Service that provides information about upcoming maintenance events for virtual machines (VMs). By leveraging Scheduled Events, you can proactively prepare your applications for VM maintenance, minimizing disruption and improving the availability of your VMs.",
- "guid": "6d3b475a-5c7a-4cbe-99bb-e64dd8902e87",
- "link": "https://learn.microsoft.com/azure/virtual-machines/windows/scheduled-events",
- "service": "VM",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "VM"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Virtual Machines",
- "text": "Utilize Scheduled Events to prepare for VM maintenance",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Usage Optimization",
+ "text": "Maximize Azure OpenAI price breakpoints like fine-tuning and model breakpoints like image generation to your advantage. Fine-tuning is charged per hour, use as much time as you have available per hour to improve results without slipping into the next billing period. The cost for generating 100 images is the same as the cost for 1 image",
+ "waf": "Cost Optimization"
},
{
- "category": "Data",
- "checklist": "Resiliency Review",
- "description": "Use Zone-redundant Storage (ZRS) in the primary region for scenarios that require high availability and for restricting replication to a particular country or region. For protection against regional disasters, use Geo-zone-redundant Storage (GZRS), which combines ZRS in the primary region with geo-replication to a secondary region?.",
- "guid": "48c7c891-dcb1-4f7d-9769-ae568ba38d4a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Azure Storage",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a3",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "Storage"
+ "Cost"
],
"severity": "Medium",
- "subcategory": "Storage Accounts",
- "text": "Choose the most appropriate data redundancy option for Azure Storage based on your requirements",
- "waf": "Reliability"
+ "subcategory": "Usage Optimization",
+ "text": "Remove unused fine-tuned models when they're no longer being consumed to avoid incurring an ongoing hosting fee",
+ "waf": "Cost Optimization"
},
{
- "category": "Data",
- "checklist": "Resiliency Review",
- "description": "Assigning a Delete lock to your storage account helps protect the availability of your data, minimizing the risk of disruptions to your business operations.",
- "guid": "85e2213d-bd7b-4b01-8f7b-95e06e158e3e",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "category": "Cost Optimization",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8g",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"services": [
- "Storage"
+ "Cost"
],
- "severity": "Low",
- "subcategory": "Storage Accounts",
- "text": "Apply a Delete lock to prevent accidental or malicious deletion of storage accounts",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Token Optimization",
+ "text": "Create concise prompts that provide enough context for the model to generate a useful response. Also ensure that you optimize the limit of the response length.",
+ "waf": "Cost Optimization"
},
{
- "category": "Data",
- "checklist": "Resiliency Review",
- "description": "Container soft delete protects your data from being accidentally deleted by maintaining the deleted data in the system for a specified period of time.",
- "guid": "a3992c2d-e6e2-4065-a3a7-6af4a691e893",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
- "services": [
- "Storage"
- ],
- "severity": "Low",
- "subcategory": "Storage Accounts",
- "text": "Enable soft delete for Storage Account Containers",
- "waf": "Reliability"
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec219",
+ "link": "https://learn.microsoft.com/azure/ai-services/create-account-bicep",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "IaC",
+ "text": "Use infrastructure as code (IaC) to deploy Azure OpenAI, model deployments, and other infrastructure required for fine-tuning models",
+ "waf": "Operational Excellence"
},
{
- "category": "Data",
- "checklist": "Resiliency Review",
- "description": "Blob soft delete protects an individual blob and its versions, snapshots, and metadata from accidental deletes or overwrites by maintaining the deleted data in the system for a specified period of time.",
- "guid": "9ada4666-7e13-4c10-96b9-153d89f89dc7",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
- "services": [
- "Storage"
- ],
- "severity": "Low",
- "subcategory": "Storage Accounts",
- "text": "Enable soft delete for blobs",
- "waf": "Reliability"
+ "category": "Operations Management",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5855",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/service/openai",
+ "service": "Azure OpenAI",
+ "services": [],
+ "severity": "Medium",
+ "subcategory": "Development",
+ "text": "Consider using dedicated model deployments per consumer group to provide per-model usage isolation that can help prevent noisy neighbors between your consumer groups",
+ "waf": "Operational Excellence"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "Azure Backup enhanced soft delete provides critical protection against ransomware attacks by retaining deleted backups, enabling recovery from potential ransomware encryption or deletion.",
- "guid": "b44be3b1-a27f-48b9-b91b-e1038df03a82",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about",
- "service": "Azure Backup",
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
"services": [
- "Backup"
+ "APIM",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Enable Azure Backup enhanced soft delete for improved data protection and recovery",
- "waf": "Reliability"
+ "subcategory": "Development best practices",
+ "text": "Implement an error handling policy at the global level",
+ "waf": "Operations"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "Azure Backup's multi-user authorization enables fine-grained control over user access to backup resources, allowing you to restrict privileges and ensure proper authentication and authorization for backup operations.",
- "guid": "2cd463cb-bbc8-4ac2-a9eb-c92a43da1dae",
- "link": "https://learn.microsoft.com/azure/backup/multi-user-authorization-concept",
- "service": "Azure Backup",
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
"services": [
- "Backup"
+ "APIM",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Backup",
- "text": "Implement multi-user authorization for Azure Backup to ensure secure and controlled access to backup resources",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Development best practices",
+ "text": "Ensure all APIs policies include a element.",
+ "waf": "Operations"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "Azure Immutable Storage provides an additional layer of security by ensuring that backup data stored in the vault cannot be modified or deleted for a specified retention period. This helps safeguard your backups from ransomware attacks that may attempt to compromise or manipulate your backup data.",
- "guid": "2cc88147-0607-4c1c-aa0e-614658dd458e",
- "link": "https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-concept?source=recommendations&tabs=recovery-services-vault",
- "service": "Azure Backup",
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
"services": [
- "Storage",
- "Backup"
+ "ACR",
+ "APIM",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Backup",
- "text": "Implement Immutable Storage for your vaults to protect against ransomware and prevent unauthorized modifications to backups",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Development best practices",
+ "text": "Use Policy Fragments to avoid repeating same policies definitions across multiple APIs",
+ "waf": "Operations"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "Clearly define your organization's business continuity and disaster recovery requirements for your Azure environment. This includes identifying the critical applications, data, and services that need to be protected, as well as specifying the desired recovery objectives and strategies.",
- "guid": "72e52e36-11dd-458c-9a4b-1521e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-business-continuity-disaster-recovery",
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
"services": [
- "ASR"
+ "APIM"
],
- "severity": "High",
- "subcategory": "Design",
- "text": "Define business continuity and disaster recovery requirements",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Monetization",
+ "text": "If you are planning to monetize your APIs, review the 'monetization support' article for best practices",
+ "waf": "Operations"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "Ensure that your Azure architectures are designed with a focus on reliability. Consider implementing fault-tolerant mechanisms, redundancy, and resiliency patterns to minimize the impact of failures and maximize the availability of your applications and services.",
- "guid": "c2399c4d-7b67-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/architecture/reliability/architect",
- "services": [],
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
+ "services": [
+ "Monitor",
+ "APIM"
+ ],
"severity": "High",
- "subcategory": "Design",
- "text": "Implement reliability best practices in Azure architectures",
- "waf": "Reliability"
+ "subcategory": "Monitoring",
+ "text": "Enable Diagnostics Settings to export logs to Azure Monitor",
+ "waf": "Operations"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "IaC configurations can play a role in your disaster recovery plan, particularly in situations where recovery time is not time-sensitive. In the event of infrastructure recreation in a second region, IaC can be used to reproduce the necessary infrastructure.",
- "guid": "fe237de2-43b1-46c3-8d7a-a9b7570449aa",
- "link": "https://learn.microsoft.com/azure/well-architected/devops/automation-infrastructure",
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
"services": [
- "ASR",
- "RBAC"
+ "Monitor",
+ "APIM"
],
"severity": "Medium",
- "subcategory": "DevOps",
- "text": "Implement Infrastructure as Code (IaC) for Rapid Infrastructure Recovery",
- "waf": "Reliability"
+ "subcategory": "Monitoring",
+ "text": "Enable Application Insights for more detailed telemetry",
+ "waf": "Operations"
},
{
- "category": "General",
- "checklist": "Resiliency Review",
- "description": "Azure offers region pairs that are geographically separated and can be used for cross-region replication and disaster recovery. These region pairs provide redundancy and protection against regional or large-scale disasters.",
- "guid": "dcb1f7d5-769a-4e56-aba3-8d4a85e2213d",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "category": "Governance",
+ "checklist": "Azure API Management Review",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
"services": [
- "ASR"
+ "Monitor",
+ "APIM"
],
- "severity": "Medium",
- "subcategory": "Multi-region",
- "text": "Plan for cross-region recovery by leveraging region pairs",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Monitoring",
+ "text": "Configure alerts on the most critical metrics",
+ "waf": "Operations"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "By deploying an Application Gateway with a minimum instance count of two, you will have at least two instances available under normal circumstances. In the event that one of the instances encounters a problem, the other instance will handle the traffic while a new instance is being created. This approach significantly reduces the risk of service disruption and ensures a seamless experience for your users.",
- "guid": "93c76286-37a5-451c-9b04-e4f1854387e5",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant#autoscaling-and-high-availability",
+ "category": "Identity and Access Management",
+ "checklist": "Azure API Management Review",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
"services": [
- "AppGW"
+ "AKV",
+ "APIM",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Application Gateways",
- "text": "Deploy Application Gateways with a minimum instance count of 2 to avoid instance provisioning downtime",
- "waf": "Reliability"
+ "severity": "High",
+ "subcategory": "Data protection",
+ "text": "Ensure that custom SSL certificates are stored an Azure Key Vault so they can be securely accessed and updated",
+ "waf": "Security"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "The v2 SKU offers several advantages and critical new features that enhance the availability and resilience of your application infrastructure. One notable feature supported by the v2 SKU is zone redundancy, which allows an Application Gateway deployment to span multiple Availability Zones.",
- "guid": "ced126cd-032a-4f5b-8fc6-998a535e3378",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "category": "Identity and Access Management",
+ "checklist": "Azure API Management Review",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
"services": [
- "Storage",
- "AppGW"
+ "Entra",
+ "APIM"
],
"severity": "High",
- "subcategory": "Application Gateways",
- "text": "Deploy Azure Application Gateway v2 for zone redundancy support",
- "waf": "Reliability"
+ "subcategory": "Identity",
+ "text": "Protect incoming requests to APIs (data plane) with Azure AD",
+ "waf": "Security"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "Azure Front Door provides automatic failover capabilities, ensuring continuity in the event of a primary region becoming unavailable. However, during the failover process, there may be a brief period (typically 20-60 seconds) when clients cannot reach the application. It is essential to review the Azure Front Door service level agreement (SLA) to determine whether relying solely on Front Door meets your business requirements for high availability. ",
- "guid": "97e31c67-d68c-4f6a-92a1-194956d697dc",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/multi-region#azure-front-door",
+ "category": "Identity and Access Management",
+ "checklist": "Azure API Management Review",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
"services": [
- "FrontDoor"
+ "Entra",
+ "APIM"
],
- "severity": "Low",
- "subcategory": "Azure Front Door",
- "text": "Consider a redundant traffic management solution in conjunction with Azure Front Door",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Identity",
+ "text": "Use Microsoft Entra ID to authenticate users in the Developer Portal",
+ "waf": "Security"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "By implementing Traffic Manager, you can configure it to continuously monitor the health of your application endpoints and automatically redirect traffic to an alternate endpoint when necessary. This automation minimizes downtime and provides a more seamless experience for your users during disaster recovery scenarios.",
- "guid": "8df03a82-2cd4-463c-abbc-8ac299ebc92a",
- "link": "https://learn.microsoft.com/azure/networking/disaster-recovery-dns-traffic-manager",
+ "category": "Identity and Access Management",
+ "checklist": "Azure API Management Review",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
"services": [
- "ASR",
- "TrafficManager",
- "DNS",
- "Monitor"
+ "Entra",
+ "APIM"
],
- "severity": "Low",
- "subcategory": "DNS",
- "text": "Plan for automated failover using Traffic Manager for DNS Traffic",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Privileged access",
+ "text": "Create appropriate groups to control the visibility of the products",
+ "waf": "Security"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "To eliminate a single point of failure in your on-premises DNS services and ensure reliable DNS resolution during business continuity and disaster recovery scenarios, it is recommended to utilize Azure DNS Private Resolvers in multiple regions. By deploying two or more Azure DNS private resolvers across different regions, you can enable DNS failover and achieve resiliency in your DNS infrastructure.",
- "guid": "43da1dae-2cc8-4814-9060-7c1cca0e6146",
- "link": "https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover",
- "service": "DNS",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
"services": [
- "ASR",
- "ACR",
- "DNS"
+ "APIM"
],
- "severity": "Low",
- "subcategory": "DNS",
- "text": "Implement DNS Failover using Azure DNS Private Resolvers",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Best practices",
+ "text": "Use Backends feature to eliminate redundant API backend configurations",
+ "waf": "Operations"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "Use an on-premises data gateway cluster to avoid single points of failure and to load balance traffic across gateways.",
- "guid": "89f89dc7-b44b-4e3b-8a27-f8b9e91be103",
- "link": "https://learn.microsoft.com/data-integration/gateway/service-gateway-high-availability-clusters",
- "service": "Data Gateways",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
"services": [
- "ACR"
+ "APIM",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Data Gateways",
- "text": "Use on-premises data gateway clusters to ensure high availability for business-critical data",
- "waf": "Reliability"
+ "subcategory": "Best practices",
+ "text": "Use Named Values to store common values that can be used in policies",
+ "waf": "Operations"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "When using ExpressRoute, it's important to design for high availability by incorporating redundancy in both the partner and customer networks. This can include multiple ExpressRoute circuits, redundant connections from your network to Microsoft, and ensuring your on-premises network equipment has redundant connections.",
- "guid": "c0e7c28d-c936-4657-802b-ff4564b0d934",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
"services": [
- "ExpressRoute"
+ "ACR",
+ "APIM",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "ExpressRoute",
- "text": "Ensure redundancy within both the partner network and customer network when utilizing ExpressRoute for high availability",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "For DR, leverage the premium tier with deployments scaled across two or more regions for 99.99% SLA",
"waf": "Reliability"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "The primary circuit should handle regular traffic while the backup circuit stays ready to take over if the primary circuit fails. Utilize BGP attributes to influence routing and designate your primary and backup circuits effectively.",
- "guid": "a359c373-e7dd-4616-83a3-64a907ebae48",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
"services": [
- "ExpressRoute",
- "Backup"
+ "APIM",
+ "ASR"
],
"severity": "Medium",
- "subcategory": "ExpressRoute",
- "text": "When using multiple ExpressRoute circuits ensure that routing allows for a primary and backup",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "Deploy at least one unit in two or more availability zones for an increased SLA of 99.99%",
"waf": "Reliability"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "S2S VPN connection can provide a cost-effective, resilient backup solution in the event of an ExpressRoute circuit failure. By using S2S VPN as a failover, you can maintain connectivity to your Azure resources without relying solely on ExpressRoute.",
- "guid": "ead53cc7-de2e-48aa-ab35-71549ab9153d",
- "link": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
"services": [
- "VPN",
- "ExpressRoute",
- "Cost",
- "Backup"
+ "APIM",
+ "Backup",
+ "ASR"
],
- "severity": "Low",
- "subcategory": "ExpressRoute",
- "text": "Consider deploying site-to-site VPN as a backup for your ExpressRoute private peering",
+ "severity": "High",
+ "subcategory": "Business continuity and disaster recovery",
+ "text": "Ensure there is an automated backup routine",
"waf": "Reliability"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "Standard Load Balancer SKU offers an SLA of 99.99% and a higher level of service availability compared to the Basic Load Balancer SKU.",
- "guid": "778468d5-5a78-45d6-be96-c96ad8844cf3",
- "link": "https://learn.microsoft.com/azure/load-balancer/skus",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
"services": [
- "LoadBalancer"
+ "APIM",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Load Balancers",
- "text": "Leverage the Standard SKU for Load Balancers that handle traffic to production applications",
+ "subcategory": "Failover and Caching",
+ "text": "Use Policies to add a fail-over backend URL and caching to reduce failing calls.",
"waf": "Reliability"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "By configuring the load balancer with a zone-redundant frontend, it can serve zonal resources in any zone with a single IP address. As long as at least one zone remains healthy within the region, the IP address associated with the frontend can survive one or more zone failures. It is recommended to have multiple zonal resources, such as virtual machines from different zones, in the backend pool of the load balancer. ",
- "guid": "b2b38c88-6ba2-4c02-8499-114a5d3ce574",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "f96ddac5-77ec-4fa9-8833-4327f052059e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-cache-external",
"services": [
- "VM",
- "LoadBalancer"
+ "APIM",
+ "AzurePolicy"
],
- "severity": "Low",
- "subcategory": "Load Balancers",
- "text": "For load balancers, consider using a zone-redundant frontend with multiple zonal resources in the backend",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Performance and scalability",
+ "text": "Consider using a external cache policy for APIs that can benefit from caching",
+ "training": "https://learn.microsoft.com/training/modules/improve-api-performance-with-apim-caching-policy/"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "When designing health probes for your Azure Load Balancer, it is important to follow best practices to ensure reliable and accurate monitoring of your backend instances.",
- "guid": "dccbd979-2a6b-4cca-8b5f-ea1ebf3dd95d",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-custom-probe-overview#design-guidance",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
"services": [
- "Monitor",
- "LoadBalancer"
+ "APIM",
+ "AzurePolicy",
+ "EventHubs"
],
"severity": "Low",
- "subcategory": "Load Balancers",
- "text": "Select the right protocol, appropriate intervals and timeouts, representative paths and probe responses when defining Load Balancer Health Probes",
- "waf": "Reliability"
+ "subcategory": "Performance and scalability",
+ "text": "If you need to log at high performance levels, consider Event Hubs policy",
+ "waf": "Operations"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "When choosing the best option for deploying NVAs in Azure, it is crucial to consider the vendor's recommendations and validate that the specific design has been vetted and validated by the NVA vendor. The vendor should also provide the necessary NVA configuration for seamless integration in Azure.",
- "guid": "8b1188b3-c6a4-46ce-a544-451e192d3442",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
"services": [
- "NVA"
+ "APIM",
+ "AzurePolicy"
],
- "severity": "High",
- "subcategory": "NVAs",
- "text": "Deploy Network Virtual Appliances (NVAs) in a vendor supported configuration for High Availability",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Performance and scalability",
+ "text": "Apply throttling policies to control the number of requests per second",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "Performance"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "By deploying VPN Gateways in an active-active mode, you can distribute VPN traffic across multiple gateways, improving reliability and ensuring continuous connectivity in case of failures or maintenance.",
- "guid": "927139b8-2110-42db-b6ea-f11e6f843e53",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
"services": [
- "VPN",
- "ACR"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "VPN Gateways",
- "text": "Deploy Azure VPN Gateways in an active-active mode to ensure high availability and redundancy for your VPN connections.",
- "waf": "Reliability"
+ "subcategory": "Performance and scalability",
+ "text": "Configure autoscaling to scale out the number of instances when the load increases",
+ "waf": "Performance"
},
{
- "category": "Network",
- "checklist": "Resiliency Review",
- "description": "Zone-redundant SKUs ensure that your VPN gateways are physically and logically separated within a region, providing resiliency and scalability. This deployment configuration safeguards your on-premises network connectivity to Azure from zone-level failures.",
- "guid": "f4722d92-8c1b-41cd-921f-54b29b9de39a",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/about-zone-redundant-vnet-gateways",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
"services": [
- "VPN"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "VPN Gateways",
- "text": "Use zone-redundant SKUs when deploying VPN Gateways to enhance resilience and protect against zone-level failures",
- "waf": "Reliability"
+ "subcategory": "Performance and scalability",
+ "text": "Deploy self-hosted gateways where Azure doesn't have a region close to the backend APIs.",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "Container Apps Review",
- "guid": "af416482-663c-4ed6-b195-b44c7068e09c",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support",
- "service": "Container Apps",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Leverage Availability Zones if regionally applicable",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
+ "services": [
+ "APIM"
+ ],
+ "severity": "Medium",
+ "subcategory": "Premium Tier",
+ "text": "Use the premium tier for production workloads.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Container Apps Review",
- "guid": "95bc80ec-6499-4d14-a7d2-7d296b1d8abc",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment",
- "service": "Container Apps",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Use more than one replica and enable Zone Redundancy.",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
+ "services": [
+ "APIM",
+ "AzurePolicy"
+ ],
+ "severity": "Medium",
+ "subcategory": "Request Routing",
+ "text": "In multi-region model, use Policies to route the requests to regional backends based on availability or latency.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Container Apps Review",
- "guid": "ccaa4fc2-fdbc-4432-8bb7-f7e6469e4dc3",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
- "service": "Container Apps",
- "services": [],
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
+ "services": [
+ "Entra",
+ "APIM"
+ ],
"severity": "High",
- "subcategory": "High Availability",
- "text": "For cross-region DR, deploy container apps in multiple regions and follow active/active or active/passive application guidance.",
+ "subcategory": "Resource Limits",
+ "text": "Be aware of APIM's limits",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Container Apps Review",
- "guid": "2ffada86-c031-4933-bf7d-0c45bc4e5919",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity",
- "service": "Container Apps",
+ "category": "Management",
+ "checklist": "Azure API Management Review",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
"services": [
- "TrafficManager",
- "FrontDoor"
+ "APIM"
],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Use Front Door or Traffic Manager to route traffic to the closest region",
- "waf": "Reliability"
- },
- {
- "category": "Application Deployment",
- "checklist": "Azure Spring Apps Review",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
- "services": [],
- "severity": "Medium",
- "subcategory": "DevOps",
- "text": "Azure Spring Apps permits two deployments for every app, only one of which receives production traffic. You can achieve zero downtime with blue green deployment strategies. Blue green deployment is only available in Standard and Enterprise tiers. You could automate deployment using CI/CD with ADO/GitHub actions",
+ "subcategory": "Self-Hosted",
+ "text": "Ensure that the self-hosted gateway deployments are resilient.",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure Spring Apps Review",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure API Management Review",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
"services": [
- "ASR",
- "TrafficManager",
+ "Entra",
+ "APIM",
"FrontDoor"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Azure Spring Apps instances could be created in multiple regions for your applications and traffic could be routed by Traffic Manager/Front Door.",
- "waf": "Reliability"
+ "subcategory": "Connectivity",
+ "text": "Use Azure Front Door in front of APIM for multi-region deployment",
+ "waf": "Performance"
},
{
- "category": "BC and DR",
- "checklist": "Azure Spring Apps Review",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure API Management Review",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
"services": [
- "ACR"
+ "APIM",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "In supported region, Azure Spring Apps can be deployed as zone redundant, which means that instances are automatically distributed across availability zones. This feature is only available in Standard and Enterprise tiers.",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "Azure Spring Apps Review",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
- "services": [],
- "severity": "Medium",
- "subcategory": "High Availability",
- "text": "Use more than 1 app instance for your apps",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Deploy the service within a Virtual Network (VNet)",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Spring Apps Review",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure API Management Review",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
"services": [
- "Monitor"
+ "Monitor",
+ "APIM",
+ "Entra",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Monitoring",
- "text": "Monitor Azure Spring Apps with logs, metrics and tracing. Integrate ASA with application insights and track failures and create workbooks.",
- "waf": "Reliability"
- },
- {
- "category": "Operations",
- "checklist": "Azure Spring Apps Review",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
- "services": [],
- "severity": "Medium",
- "subcategory": "Scalability",
- "text": "Set up autoscaling in Spring Cloud Gateway",
- "waf": "Reliability"
- },
- {
- "category": "Operations",
- "checklist": "Azure Spring Apps Review",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
- "services": [],
- "severity": "Low",
- "subcategory": "Scalability",
- "text": "Enable autoscale for the apps with Standard consumption & dedicated plan.",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Deploy network security groups (NSG) to your subnets to restrict or monitor traffic to/from APIM.",
+ "waf": "Security"
},
{
- "category": "Operations",
- "checklist": "Azure Spring Apps Review",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure API Management Review",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
+ "services": [
+ "Entra",
+ "APIM",
+ "PrivateLink",
+ "VNet"
+ ],
"severity": "Medium",
- "subcategory": "Support",
- "text": "Use Enterprise plan for commercial support of spring boot for mission critical apps. With other tiers you get OSS support.",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Deploy Private Endpoints to filter incoming traffic when APIM is not deployed to a VNet.",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "IoT Hub Review",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
- "services": [],
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure API Management Review",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
+ "services": [
+ "APIM"
+ ],
"severity": "High",
- "subcategory": "High Availability",
- "text": "Leverage Availability Zones if regionally applicable (this is automatically enabled)",
- "waf": "Reliability"
+ "subcategory": "Security",
+ "text": "Disable Public Network Access",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "IoT Hub Review",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "services": [],
+ "category": "Platform automation and DevOps",
+ "checklist": "Azure API Management Review",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
+ "services": [
+ "APIM"
+ ],
"severity": "Medium",
- "subcategory": "High Availability",
- "text": "Be aware of Microsoft-initiated failovers. These are exercised by Microsoft in rare situations to fail over all the IoT hubs from an affected region to the corresponding geo-paired region.",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "IoT Hub Review",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "IoT Hub Review",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Learn how to trigger a manual failover.",
- "waf": "Reliability"
- },
- {
- "category": "BC and DR",
- "checklist": "IoT Hub Review",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
- "services": [],
- "severity": "High",
- "subcategory": "High Availability",
- "text": "Learn how to fail back after a failover.",
- "waf": "Reliability"
+ "subcategory": "Automation",
+ "text": "Simplify management with PowerShell automation scripts",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "a96b96ad-8840-48f3-9273-4c876ba28021",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-resiliency",
+ "category": "Platform automation and DevOps",
+ "checklist": "Azure API Management Review",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
"services": [
- "VNet",
- "DNS"
+ "Entra",
+ "APIM"
],
- "severity": "High",
- "subcategory": "Azure Private DNS",
- "text": "Verify that Zones are linked to Vnets in multiple regions",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Best practices",
+ "text": "Configure APIM via Infrastructure-as-code. Review DevOps best practices from the Cloud Adaption Framework APIM Landing Zone Accelerator",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "45901465-d38e-453f-accb-d969266acca2",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-resiliency",
+ "category": "Platform automation and DevOps",
+ "checklist": "Azure API Management Review",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
"services": [
- "DNS"
+ "Entra",
+ "APIM"
],
- "severity": "High",
- "subcategory": "Azure Private DNS",
- "text": "If different Zones are used between regions, verify a plan for making sure that Zones are up to date in a DR failover situation",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Best practices",
+ "text": "Promote usage of Visual Studio Code APIM extension for faster API development",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "74faa19b-f39d-495d-94c7-c8919ca1f6d5",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-traffic-manager?toc=%2Fazure%2Fdns%2Ftoc.json",
+ "category": "Platform automation and DevOps",
+ "checklist": "Azure API Management Review",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
"services": [
- "ASR",
- "TrafficManager",
- "DNS"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "Azure DNS",
- "text": "Plan for disaster recovery with Azure DNS and Traffic Manager",
- "waf": "Reliability"
+ "subcategory": "DevOps",
+ "text": "Implement DevOps and CI/CD in your workflow",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "315ae524-ba34-4d45-a5e1-2139bd7bb012",
- "link": "https://learn.microsoft.com/azure/dns/private-resolver-reliability#availability-zones",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
"services": [
- "DNS"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "Azure DNS Resolver",
- "text": "Enable availability zones with Private Resolver",
- "waf": "Reliability"
+ "subcategory": "APIs",
+ "text": "Secure APIs using client certificate authentication",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "f7b95e06-e154-4e2a-a359-2828e6e20517",
- "link": "https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
+ "service": "APIM",
"services": [
- "ASR",
- "DNS"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "Azure DNS Resolver",
- "text": "Plan for failover with Private Resolvers in a Disaster Recovery",
- "waf": "Reliability"
+ "subcategory": "APIs",
+ "text": "Secure backend services using client certificate authentication",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "2676ae46-691e-4883-9ad9-42223e138105",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-virtual-machines?toc=%2Fazure%2Fvirtual-machines%2Ftoc.json&bc=%2Fazure%2Fvirtual-machines%2Fbreadcrumb%2Ftoc.json&tabs=graph",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
+ "service": "APIM",
"services": [
- "DNS",
- "VM"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "VM Based DNS Service",
- "text": "Follow VM Guidance for resillency of VM",
- "waf": "Reliability"
+ "subcategory": "APIs",
+ "text": "Review 'Recommendations to mitigate OWASP API Security Top 10 threats' article and check what is applicable to your APIs",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DNS Review Checklist",
- "guid": "23081a94-1741-4583-9ff7-ad7c6d373316",
- "link": "https://www.windows-active-directory.com/azure-ad-dns-for-custom-domain-names-with-advanced-dns-settings.html",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
+ "service": "APIM",
"services": [
- "Entra",
- "DNS",
- "VM"
+ "APIM"
],
"severity": "Medium",
- "subcategory": "VM Based DNS Service",
- "text": "IF AD based DNS, follow the Identity -> Windows Server AD path",
- "waf": "Reliability"
+ "subcategory": "APIs",
+ "text": "Use Authorizations feature to simplify management of OAuth 2.0 token for your backend APIs",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "1fc2fc14-eea6-4e69-b8d9-a3edc218e687",
- "link": "https://polite-sea-0995b240f.2.azurestaticapps.net/technical-delivery-playbook/azure-services/analytics/purview/",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage FTA Resillency Handbook",
- "waf": "Reliability"
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
+ "service": "APIM",
+ "services": [
+ "APIM"
+ ],
+ "severity": "High",
+ "subcategory": "Ciphers",
+ "text": "Use the latest TLS version when encrypting information in transit. Disable outdated and unnecessary protocols and ciphers when possible.",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "ab067acb-49e5-4b96-8332-4ecf8cc13318",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
+ "service": "APIM",
"services": [
- "ASR"
+ "AKV",
+ "APIM"
],
"severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Plan for Data Center level outage",
- "waf": "Reliability"
+ "subcategory": "Data protection",
+ "text": "Ensure that secrets (Named values) are stored an Azure Key Vault so they can be securely accessed and updated",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "description": "1. Create the new account 2. Migrate configuration items 3. Run scans 4. Migrate custom typedefs and custom assets 5. Migrate relationships 6. Migrate glossary terms 7. Assign classifications to assets 8. Assign contacts to assets",
- "guid": "da611702-69f4-4fb4-aa3d-3ef7f3176c4b",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
+ "service": "APIM",
"services": [
- "ASR"
+ "Entra",
+ "APIM"
],
"severity": "Medium",
- "subcategory": "Disaster Recovery",
- "text": "Practice Failover for BCDR",
- "waf": "Reliability"
+ "subcategory": "Identities",
+ "text": "Use managed identities to authenticate to other Azure resources whenever possible",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "97b15b8a-219a-44ab-bb57-879024d22678",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Security",
+ "checklist": "Azure API Management Review",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
+ "service": "APIM",
"services": [
- "Backup"
+ "WAF",
+ "Entra",
+ "APIM",
+ "AppGW"
],
"severity": "High",
- "subcategory": "Backup and Restore ",
- "text": "Plan a backup strategy and take regular backups",
- "waf": "Reliability"
+ "subcategory": "Network",
+ "text": "Use web application firewall (WAF) by deploying Application Gateway in front of APIM",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "6d20b56c-56a9-4581-89bf-8d8e5c586b7d",
- "link": "https://learn.microsoft.com/purview/manage-kafka-dotnet",
- "service": "Purview",
+ "category": "BCDR",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Ensure that your backups are protected against attacks. This should include encryption of the backups to protect against loss of confidentiality. For regular Azure service backup, backup data is automatically encrypted using Azure platform-managed keys. You can also choose to encrypt the backup using a customer-managed key. In this case, ensure this customer-managed key in the key vault is also in the backup scope.",
+ "guid": "676f6951-0368-49e9-808d-c33a692c9a64",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/sql-database-security-baseline#br-2-encrypt-backup-data",
"services": [
- "EventHubs"
+ "SQL",
+ "AKV",
+ "Backup"
],
- "severity": "Low",
- "subcategory": "Purview Accounts Replications",
- "text": "Use Microsoft Purview's Event Hubs to subscribe and create entities to another account",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "8cdc15ac-c075-4ee9-a130-a8889579e76b",
- "link": "https://learn.microsoft.com/purview/deployment-best-practices",
- "service": "Purview",
- "services": [],
"severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow Purview accounts architectures and deployment best practices",
- "waf": "Reliability"
+ "subcategory": "Azure Key Vault",
+ "text": "Protect your backup data with encryption and store keys safely in Azure Key Vault",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "896e710a-7da7-4be9-a56d-14d3c49d997c",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-collections",
- "service": "Purview",
- "services": [],
+ "category": "BCDR",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Azure SQL Database uses SQL Server technology to create full backups every week, differential backup every 12-24 hours, and transaction log backup every 5 to 10 minutes. By default, SQL Database stores data in geo-redundant storage blobs that are replicated to a paired region.",
+ "guid": "e2518261-b3bc-4bd1-b331-637fb2df833f",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/sql-database-security-baseline#br-1-ensure-regular-automated-backups",
+ "services": [
+ "SQL",
+ "Storage",
+ "Backup"
+ ],
"severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow Collection Architectures and best practices",
- "waf": "Reliability"
+ "subcategory": "Backup",
+ "text": "Configure Azure SQL Database automated backups",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "b3d1325a-a225-4c6f-9e06-85edddea8a4b",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-asset-lifecycle",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow Assest lifecycle best practices",
- "waf": "Reliability"
+ "category": "BCDR",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "By default, SQL Database stores data in geo-redundant storage blobs that are replicated to a paired region. For SQL Database, the backup storage redundancy can be configured at the time of database creation or can be updated for an existing database; the changes made to an existing database apply to future backups only.",
+ "guid": "f8c7cda2-3ed7-43fb-a100-85dcd12a0ee4",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/automated-backups-overview?tabs=single-database&view=azuresql#backup-storage-redundancy",
+ "services": [
+ "SQL",
+ "Storage",
+ "Backup"
+ ],
+ "severity": "Low",
+ "subcategory": "Backup",
+ "text": "Enable geo-redundant backup storage to protect against single region failure and data loss",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "7cdeb3c6-1fc2-4fc1-9eea-6e69d8d9a3ed",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-automation",
- "service": "Purview",
- "services": [],
+ "category": "Code",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Malicious code can potentially circumvent security controls. Before deploying custom code to production, it is essential to review what's being deployed. Use a database tool like Azure Data Studio that supports source control. Implement tools and logic for code analysis, vulnerability and credential scanning.",
+ "guid": "7ca9f006-d2a9-4652-951c-de8e4ac5e76e",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/transparent-data-encryption-byok-create-server",
+ "services": [
+ "SQL"
+ ],
"severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow automation best practices",
- "waf": "Reliability"
+ "subcategory": "Source Control and Code Review",
+ "text": "Use Source Control systems to store, maintain and review application code deployed inside Azure SQLDB Database",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "c218e687-ab06-47ac-a49e-5b9603324ecf",
- "link": "https://learn.microsoft.com/purview/disaster-recovery",
- "service": "Purview",
+ "category": "Data Discovery and Classification",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "In case of classification requirements Purview is the preferred option. Only use SQL Data Discovery & Classification in case Purview is not an option. Discover columns that potentially contain sensitive data. What is considered sensitive data heavily depends on the customer, compliance regulation, etc., and needs to be evaluated by the users in charge of that data. Classify the columns to use advanced sensitivity-based auditing and protection scenarios. Review results of automated discovery and finalize the classification if necessary.",
+ "guid": "d401509b-2629-4484-9a7f-af0d29a7778f",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/data-discovery-and-classification-overview?view=azuresql#faq---advanced-classification-capabilities",
"services": [
- "Backup"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow Backup and Migration Best practices",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Data Discovery and Classification",
+ "text": "Plan and configure Data Discovery & Classification to protect the sensitive data",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "8cc13318-da61-4170-869f-4fb4aa3d3ef7",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-glossary",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow Purview Glossary Best Practices",
- "waf": "Reliability"
+ "category": "Data Masking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Usage of this feature is recommended only if column encryption is not an option and there is a specific requirement to preserve data types and formats. Dynamic data masking limits sensitive data exposure by masking it to non-privileged users. Dynamic data masking helps prevent unauthorized access to sensitive data by enabling customers to designate how much of the sensitive data to reveal with minimal impact on the application layer.",
+ "guid": "9391fd50-135e-453e-90a7-c1a23f88cc13",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/dynamic-data-masking-overview",
+ "services": [
+ "SQL"
+ ],
+ "severity": "Low",
+ "subcategory": "Data Masking",
+ "text": "Use Data Masking to prevent unauthorized non-admin users data access if no encryption is possible",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "f3176c4b-97b1-45b8-a219-a4abeb578790",
- "link": "https://learn.microsoft.com/purview/concept-workflow",
- "service": "Purview",
- "services": [],
- "severity": "Low",
- "subcategory": "Data catalog",
- "text": "Leverage Workflows ",
- "waf": "Reliability"
+ "category": "Defender",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "SQL Advanced Threat Detection (ATP) provides a layer of security that detects potential vulnerabilities and anomalous activity in databases such as SQL injection attacks and unusual behavior patterns. When a potential threat is detected Threat Detection sends an actionable real-time alert by email and in Microsoft Defender for Cloud, which includes clear investigation and remediation steps for the specific threat.",
+ "guid": "4e52d73f-5d37-428f-b3a2-e6997e835979",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/threat-detection-configure",
+ "services": [
+ "SQL",
+ "EventHubs",
+ "Defender"
+ ],
+ "severity": "High",
+ "subcategory": "Advanced Threat Protection",
+ "text": "Review and complete Advanced Threat Protection (ATP) configuration",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "24d22678-6d20-4b56-a56a-958119bf8d8e",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-security",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data catalog",
- "text": "Follow Purview Security Best Practices",
- "waf": "Reliability"
+ "category": "Defender",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Enable Microsoft Defender for Azure SQL at the subscription level to automatically onboard and protect all existing and future servers and databases. When you enable on the subscription level, all databases in Azure SQL Database and Azure SQL Managed Instance are protected. You can then disable them individually if you choose. If you want to manually manage which databases are protected, disable at the subscription level and enable each database that you want protected.",
+ "guid": "dff87489-9edb-4cef-bdda-86e8212b2aa1",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/azure-defender-for-sql?view=azuresql#enable-microsoft-defender-for-sql ",
+ "services": [
+ "SQL",
+ "Subscriptions",
+ "Defender"
+ ],
+ "severity": "High",
+ "subcategory": "Defender for Azure SQL",
+ "text": "Enable Microsoft Defender for Azure SQL",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "5c586b7d-8cdc-415a-ac07-5ee9b130a888",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-lineage-azure-data-factory",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data Map",
- "text": "Follow Purview Data Lineage Best Practices",
- "waf": "Reliability"
+ "category": "Defender",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Microsoft Defender for Azure SQL ATP detects anomalous activities indicating unusual and potentially harmful attempts to access or exploit databases. Alerts can be configured and generated and will be reported in the Defender for console.",
+ "guid": "ca342fdf-d25a-4427-b105-fcd50ff8a0ea",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/threat-detection-configure",
+ "services": [
+ "SQL",
+ "Monitor",
+ "Defender"
+ ],
+ "severity": "High",
+ "subcategory": "Defender for Azure SQL",
+ "text": "Prepare a security response plan to promptly react to Microsoft Defender for Azure SQL alerts",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "9579e76b-896e-4710-a7da-7be9956d14d3",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-scanning",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data Map",
- "text": "Follow Best Practices for Scanning Registered Sources",
- "waf": "Reliability"
+ "category": "Defender",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Azure SQLDB vulnerability assessment is a service that provides visibility into your security state. Vulnerability assessment includes actionable steps to resolve security issues and enhance your database security. It can help you to monitor a dynamic database environment where changes are difficult to track and improve your SQL security posture.",
+ "guid": "a6101ae7-534c-45ab-86fd-b34c55ea21ca",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/sql-azure-vulnerability-assessment-overview",
+ "services": [
+ "SQL",
+ "Monitor",
+ "Defender"
+ ],
+ "severity": "High",
+ "subcategory": "Vulnerability Assessment",
+ "text": "Configure Vulnerability Assessment (VA) findings and review recommendations",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "c49d997c-b3d1-4325-aa22-5c6f4e0685ed",
- "link": "https://learn.microsoft.com/purview/concept-best-practices-classification",
- "service": "Purview",
- "services": [],
- "severity": "Medium",
- "subcategory": "Data Map",
- "text": "Follow Classification Best Practices in Governance Portal",
- "waf": "Reliability"
+ "category": "Defender",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Microsoft Defender for Cloud provides vulnerability assessment for your Azure SQL Databases. Vulnerability assessment scans your databases for software vulnerabilities and provides a list of findings. You can use the findings to remediate software vulnerabilities and disable findings.",
+ "guid": "c8c5f112-1e50-4f77-9264-8195b4cd61ac",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/sql-azure-vulnerability-assessment-find?view=azuresql",
+ "services": [
+ "SQL",
+ "Defender"
+ ],
+ "severity": "High",
+ "subcategory": "Vulnerability Assessment",
+ "text": "Regularly review of Vulnerability Assessment (VA) findings and recommendations and prepare a plan to fix",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "ddea8a4b-7cde-4b3c-91fc-2fc14eea6e69",
- "link": "https://learn.microsoft.com/purview/sensitivity-labels-frequently-asked-questions",
- "service": "Purview",
- "services": [],
+ "category": "Encryption",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Always Encrypted with Secure Enclaves expands confidential computing capabilities of Always Encrypted by enabling in-place encryption and richer confidential queries. Always Encrypted with Secure Enclaves addresses these limitations by allowing some computations on plaintext data inside a secure enclave on the server side. Usage of this feature is recommended for the cases where you need to limit administrator access and need your queries to support more than equality matching of encrypted columns.",
+ "guid": "65d7e54a-10a6-4094-b673-9ff3809c9277",
+ "link": "https://learn.microsoft.com/sql/relational-databases/security/encryption/always-encrypted-enclaves",
+ "services": [
+ "SQL"
+ ],
"severity": "Medium",
- "subcategory": "Data Map",
- "text": "Perform Sensitivity Labelling in the Purview Data Map",
- "waf": "Reliability"
+ "subcategory": "Always Encrypted",
+ "text": "If protecting sensitive PII data from admin users is a key requirement, but Column Encryption limitations cannot be tolerated, consider the adoption of Always Encrypted with Secure Enclaves",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "d8d9a3ed-c218-4e68-9ab0-67acb49e5b96",
- "link": "https://learn.microsoft.com/purview/concept-data-share",
- "service": "Purview",
+ "category": "Encryption",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "With Azure SQL Database, you can apply symmetric encryption to a column of data by using Transact-SQL. This approach is called column encryption, because you can use it to encrypt specific columns with different encryption keys. Doing so gives you more granular encryption capability than TDE, which encrypts data in pages. Using Always Encrypted to ensure sensitive data isn't exposed in plaintext in Azure SQL Database or SQL Managed Instance, even in memory/in use. Always Encrypted protects the data from Database Administrators (DBAs) and cloud admins (or bad actors who can impersonate high-privileged but unauthorized users) and gives you more control over who can access your data.",
+ "guid": "c03ce136-e3d5-4e17-bf25-ed955ee480d3",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#control-access-of-application-users-to-sensitive-data-through-encryption",
"services": [
+ "SQL",
+ "AKV",
"Storage"
],
"severity": "Low",
- "subcategory": "Data Sharing",
- "text": "Leverage Azure Storage in-place data sharing with Microsoft Purview",
- "waf": "Reliability"
- },
- {
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "03324ecf-8cc1-4331-ada6-1170269f4fb4",
- "link": "https://learn.microsoft.com/purview/concept-insights",
- "service": "Purview",
- "services": [],
- "severity": "Low",
- "subcategory": "Data Estate",
- "text": "Leverage Data Estate Insights",
- "waf": "Reliability"
+ "subcategory": "Column Encryption",
+ "text": "To protect sensitive PII data from non-admin users in specific table columns, consider using Column Encryption",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "aa3d3ef7-f317-46c4-a97b-15b8a219a4ab",
- "link": "https://learn.microsoft.com/purview/catalog-adoption-insights",
- "service": "Purview",
- "services": [],
- "severity": "Low",
- "subcategory": "Data Estate",
- "text": "Use Data stewardship and Catalog adoption",
- "waf": "Reliability"
+ "category": "Encryption",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Enabled by default, Transparent data encryption (TDE) helps to protect the database files against information disclosure by performing real-time encryption and decryption of the database, associated backups, and transaction log files 'at rest', without requiring changes to the application.",
+ "guid": "c614ac47-bebf-4061-b0a1-43e0c6b5e00d",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/transparent-data-encryption-byok-create-server",
+ "services": [
+ "SQL",
+ "Storage",
+ "Backup"
+ ],
+ "severity": "High",
+ "subcategory": "Transparent Data Encryption",
+ "text": "Ensure Transparent Data Encryption (TDE) is kept enabled",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "eb578790-24d2-4267-a6d2-0b56c56a9581",
- "link": "https://learn.microsoft.com/purview/concept-insights",
- "service": "Purview",
- "services": [],
- "severity": "Low",
- "subcategory": "Data Estate",
- "text": "Use Inventory and Ownership",
- "waf": "Reliability"
+ "category": "Encryption",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "If separation of duties in the management of keys and data within the organization is required, leverage Customer Managed Keys (CMK) for Transparent Data Encryption (TDE) for your Azure SQLDB and use Azure Key Vault to store (refer to its checklist). Leverage this feature when you have strict security requirements which cannot be met by the managed service keys.",
+ "guid": "2edb4165-4f54-47cc-a891-5c82c2f21e25",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/transparent-data-encryption-byok-overview",
+ "services": [
+ "SQL",
+ "AKV"
+ ],
+ "severity": "Medium",
+ "subcategory": "Transparent Data Encryption",
+ "text": "Use customer-managed keys (CMK) in Azure Key Vault (AKV) if you need increased transparency and granular control over the TDE protection",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "19bf8d8e-5c58-46b7-b8cd-c15acc075ee9",
- "link": "https://learn.microsoft.com/purview/glossary-insights",
- "service": "Purview",
- "services": [],
- "severity": "Low",
- "subcategory": "Data Estate",
- "text": "Leverage Insights for Glossary, Classifications, Sensitivity Labels",
- "waf": "Reliability"
+ "category": "Encryption",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The minimal Transport Layer Security (TLS) version setting allows customers to choose which version of TLS their SQL database uses. It's possible to change the minimum TLS version by using the Azure portal, Azure PowerShell, and the Azure CLI.",
+ "guid": "7754b605-57fd-4bcb-8213-52c39d8e8225",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/connectivity-settings?source=recommendations&view=azuresql&tabs=azure-portal#minimal-tls-version",
+ "services": [
+ "SQL"
+ ],
+ "severity": "High",
+ "subcategory": "Transport Layer Security",
+ "text": "Enforce minimum TLS version to the latest available",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "b130a888-9579-4e76-a896-e710a7da7be9",
- "link": "https://learn.microsoft.com/purview/compliance-manager",
- "service": "Purview",
- "services": [],
+ "category": "Identity",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Use Azure Active Directory (Azure AD) authentication for centralized identity management. Use SQL Authentication only if really necessary and document as exceptions.",
+ "guid": "c9b8b6bf-2c6b-453d-b400-de9a43a549d7",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/authentication-aad-overview",
+ "services": [
+ "SQL",
+ "Entra"
+ ],
"severity": "Medium",
- "subcategory": "Data Quality ",
- "text": "Generate assessment scores",
- "waf": "Reliability"
+ "subcategory": "Azure Active Directory",
+ "text": "Leverage Azure AD authentication for connections to Azure SQL Databases",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "956d14d3-c49d-4997-ab3d-1325aa225c6f",
- "link": "https://learn.microsoft.com/purview/compliance-manager-scoring",
- "service": "Purview",
- "services": [],
+ "category": "Identity",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Using Azure AD groups simplifies permission management and both the group owner, and the resource owner can add/remove members to/from the group. Create a separate group for Azure AD administrators for each logical server. Monitor Azure AD group membership changes using Azure AD audit activity reports.",
+ "guid": "29820254-1d14-4778-ae90-ff4aeba504a3",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#central-management-for-identities",
+ "services": [
+ "SQL",
+ "Monitor",
+ "Entra"
+ ],
"severity": "Medium",
- "subcategory": "Data Quality ",
- "text": "Profiling- get summaries of data content",
- "waf": "Reliability"
+ "subcategory": "Azure Active Directory",
+ "text": "Create a separate Azure AD group with two admin accounts for each Azure SQL Database logical server",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "4e0685ed-ddea-48a4-a7cd-eb3c61fc2fc1",
- "link": "https://learn.microsoft.com/purview/concept-policies-data-owner#microsoft-purview-policy-concepts",
- "service": "Purview",
+ "category": "Identity",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Ensure that distinct system and user assigned managed identities, that are dedicated to the function, with least permissions assigned, are used for communication from Azure services and applications to the Azure SQLDB databases.",
+ "guid": "df3a09ee-03bb-4198-8637-d141acf5f289",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#minimize-the-use-of-password-based-authentication-for-applications",
"services": [
- "AzurePolicy"
+ "SQL",
+ "Entra"
],
- "severity": "Low",
- "subcategory": "Data Policy",
- "text": "Follow Microsoft Purview Data Owner access policies",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Azure Active Directory",
+ "text": "Minimize the use of password-based authentication for applications",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "4eea6e69-d8d9-4a3e-bc21-8e687ab067ac",
- "link": "https://learn.microsoft.com/purview/concept-self-service-data-access-policy",
- "service": "Purview",
+ "category": "Identity",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "System or User assigned managed identities enable Azure SQLDB to authenticate to other cloud services (e.g. Azure Key Vault) without storing credentials in code. Once enabled, all necessary permissions can be granted via Azure role-based-access-control to the specific Azure SQLDB instance. Do not share user assigned managed identities across multiple services if not strictly required.",
+ "guid": "69891194-5074-4e30-8f69-4efc3c580900",
+ "link": "https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview",
"services": [
- "AzurePolicy"
+ "ACR",
+ "RBAC",
+ "Entra",
+ "SQL",
+ "AKV"
],
"severity": "Low",
- "subcategory": "Data Policy",
- "text": "Follow Self-service access policies",
- "waf": "Reliability"
+ "subcategory": "Managed Identities",
+ "text": "Assign Azure SQL Database a managed identity for outbound resource access",
+ "waf": "Security"
},
{
- "category": "Operations management",
- "checklist": "Microsoft Purview Review Checklist",
- "guid": "b49e5b96-0332-44ec-b8cc-13318da61170",
- "link": "https://learn.microsoft.com/purview/concept-policies-devops",
- "service": "Purview",
+ "category": "Identity",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Use an Azure AD integrated authentication that eliminates the use of passwords. Password-based authentication methods are a weaker form of authentication. Credentials can be compromised or mistakenly given away. Use single sign-on authentication using Windows credentials. Federate the on-premises AD domain with Azure AD and use integrated Windows authentication (for domain-joined machines with Azure AD).",
+ "guid": "88287d4a-8bb8-4640-ad78-03f51354d003",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/authentication-aad-configure?view=azuresql&tabs=azure-powershell#active-directory-integrated-authentication",
"services": [
- "AzurePolicy"
+ "SQL",
+ "Entra"
],
- "severity": "Low",
- "subcategory": "Data Policy",
- "text": "Follow DevOps policies",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Passwords",
+ "text": "Minimize the use of password-based authentication for users",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "65285269-440c-44be-9d3e-0844276d4bdc",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foudations-playbooks-ADB_v1.docx",
- "services": [],
- "severity": "High",
- "subcategory": "Best Practices",
- "text": "Reference Databricks HA/DR playbook",
- "waf": "Reliability"
+ "category": "Ledger",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The hash of the latest block in the database ledger is called the database digest. It represents the state of all ledger tables in the database at the time when the block was generated. Generating a database digest is efficient, because it involves computing only the hashes of the blocks that were recently appended. Azure Confidential Ledger is one of the supported store, it can be used and supports automatic generation and storage of database digests. Azure Ledger provides advanced security features like Blockchain Ledger Proof and Confidential Hardware Enclaves. Use it only if advanced security features are required, otherwise revert to Azure storage.",
+ "guid": "0e853380-50ba-4bce-b2fd-5c7391c85ecc",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/technology-choices/multiparty-computing-service#confidential-ledger-and-azure-blob-storage",
+ "services": [
+ "SQL",
+ "Storage"
+ ],
+ "severity": "Medium",
+ "subcategory": "Database Digest",
+ "text": "Use Azure Confidential Ledger to store database digests only if advanced security features are required",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "89d558b9-37d3-4974-b111-2dbd7aaf12e6",
- "link": "https://learn.microsoft.com/azure/databricks/security/secrets/secret-scopes",
+ "category": "Ledger",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The hash of the latest block in the database ledger is called the database digest. It represents the state of all ledger tables in the database at the time when the block was generated. Generating a database digest is efficient, because it involves computing only the hashes of the blocks that were recently appended. Azure Blob Storage with Immutable Storage feature can be used and supports automatic generation and storage of database digests. To prevent tampering of your digest files, configure and lock a retention policy for your container.",
+ "guid": "afefb2d3-95da-4ac9-acf5-33d18b32ef9a",
+ "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-digest-management",
"services": [
- "Backup"
+ "SQL",
+ "Storage",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup Your Workspace Configuration including ARM templates and Secret Scopes",
- "waf": "Reliability"
+ "subcategory": "Database Digest",
+ "text": "If Azure storage account is used to store database digests, ensure security is properly configured",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "b94ee5ef-47d2-4d92-a81b-1cd6d1f54b29",
- "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/sharing-metadata-across-different-databricks-workspaces-using/ba-p/3679757",
+ "category": "Ledger",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Ledger provides a form of data integrity called forward integrity, which provides evidence of data tampering on data in your ledger tables. The database verification process takes as input one or more previously generated database digests. It then recomputes the hashes stored in the database ledger based on the current state of the ledger tables. If the computed hashes don't match the input digests, the verification fails. The failure indicates that the data has been tampered with. The verification process reports all inconsistencies that it detects.",
+ "guid": "f8d4ffda-8aac-4cc6-b72b-c81cb8625420",
+ "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-database-verification",
"services": [
- "ACR",
- "Backup"
+ "SQL",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Share MetaData Across different Databricks Workspaces using Hive External Metastore",
- "waf": "Reliability"
+ "subcategory": "Integrity",
+ "text": "Schedule the Ledger verification process regularly to verify data integrity",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "769e3969-0e78-428a-a936-657d03b0f466",
- "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/disaster-recovery-strategy-in-azure-databricks-using-the-hive/ba-p/3684581",
+ "category": "Ledger",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The Ledger feature provides tamper-evidence capabilities in your database. You can cryptographically attest to other parties, such as auditors or other business parties, that your data hasn't been tampered with. Ledger helps protect data from any attacker or high-privileged user, including database administrators (DBAs), system administrators, and cloud administrators.",
+ "guid": "2563f498-e2d3-42ea-9e7b-5517881a06a2",
+ "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-overview",
"services": [
- "ASR",
- "Backup"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Plan Disaster Recovery Strategy in Databricks using the Hive External Metastore",
- "waf": "Reliability"
+ "subcategory": "Ledger",
+ "text": "If cryptographic proof of data integrity is a critical requirement, Ledger feature should be considered",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "4b1d944a-3598-437e-b79d-6c6d3a364a5b",
- "link": "https://www.databricks.com/blog/2021/04/20/attack-of-the-delta-clones-against-disaster-recovery-availability-complexity.html",
+ "category": "Ledger",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Depending on the type of tampering, there are cases where you can repair the ledger without losing data. In the article contained in the --More Info-- column, different scenarios and recovery techniques are described.",
+ "guid": "804fc554-6554-4842-91c1-713b32f99902",
+ "link": "https://learn.microsoft.com/sql/relational-databases/security/ledger/ledger-how-to-recover-after-tampering",
"services": [
- "Backup"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup your data with deep and shallow clones",
- "waf": "Reliability"
+ "subcategory": "Recovery",
+ "text": "Prepare a response plan to investigate and repair a database after a tampering event",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "description": "Download the blob using Secondary Endpoint in RAGRS Storage Account",
- "guid": "7abae48a-bd54-4cd7-ae2e-86768357c559",
- "link": "https://techcommunity.microsoft.com/t5/azure-paas-blog/download-the-blob-using-secondary-endpoint-in-ragrs-storage/ba-p/2403750",
+ "category": "Logging",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Azure SQL Database Auditing tracks database events and writes them to an audit log in your Azure storage account. Auditing helps you understand database activity and gain insight into discrepancies and anomalies that could indicate business concerns or suspected security violations as well as helps you meet regulatory compliance. By default auditing policy includes all actions (queries, stored procedures and successful and failed logins) against the databases, which may result in high volume of audit logs. It's recommended for customers to configure auditing for different types of actions and action groups using PowerShell.",
+ "guid": "4082e31d-35f4-4a49-8507-d3172cc930a6",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/auditing-overview",
"services": [
+ "SQL",
"Storage",
- "Backup"
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Backup",
- "text": "Backup your data to Azure Storage RA-GRS",
- "waf": "Reliability"
+ "subcategory": "Auditing",
+ "text": "Ensure that Azure SQL Database Auditing is enabled at the server level",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "675c5ee8-5b85-49c7-944c-e3b1a28b875a",
- "link": "https://learn.microsoft.com/azure/databricks/dev-tools/index-ci-cd",
+ "category": "Logging",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Azure SQL Database Auditing logs can be written to external storage accounts, Log Analytics workspace or Event Hub. Be sure to protect the target repository using backups and secured configuration. Use Azure SQL Database Managed Identity to access the storage and set an explicit retention period. Do not grant permissions to administrators to the audit log repository. Use a different target storage for --Enabling Auditing of Microsoft support operations--. ",
+ "guid": "9b64bc50-b60f-4035-bf7a-28c4806dfb46",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/auditing-overview",
"services": [
+ "Storage",
+ "EventHubs",
+ "Monitor",
+ "SQL",
+ "Entra",
"Backup"
],
- "severity": "High",
- "subcategory": "Backup",
- "text": "Backup your code with DevOps",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Auditing",
+ "text": "Ensure that Azure SQL Database Auditing logs are backed up and secured in the selected repository type",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "a1bf1038-9f03-4a4d-8ce4-63dbbbc8682a",
- "link": "https://learn.microsoft.com/azure/databricks/administration-guide/disaster-recovery",
+ "category": "Logging",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The Azure Monitor activity log is a platform log in Azure that provides insight into subscription-level events. The activity log includes information like when a resource is modified. It is recommended to send this activity log to the same external storage repository as the Azure SQL Database Audit Log (storage account, Log Analytics workspace, Event Hub).",
+ "guid": "fcd34708-87ac-4efc-aaf6-57a47f76644a",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
"services": [
- "ASR"
+ "Storage",
+ "EventHubs",
+ "Monitor",
+ "SQL",
+ "Subscriptions"
],
- "severity": "High",
- "subcategory": "Disaster Recovery",
- "text": "Plan for Disaster recovery using Active/Active or Active/Passive Configuration",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Auditing",
+ "text": "Ensure that Azure SQL Database Activity Log is collected and integrated with Auditing logs",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "description": "Migration package to log all Databricks resources for backup and/or migrating to another Databricks workspace",
- "guid": "5abc92a4-eda1-4dae-8cc8-5c47c6b781cc",
- "link": "https://github.com/databrickslabs/migrate",
+ "category": "Logging",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Forward any logs from Azure SQL to your Security Information and Event Management (SIEM) and Security Orchestration Automation and Response (SOAR). Ensure that you are monitoring different types of Azure assets for potential threats and anomalies. Focus on getting high-quality alerts to reduce false positives for analysts to sort through. Alerts can be sourced from log data, agents, or other data.",
+ "guid": "f96e127e-9572-453a-b325-ff89ae9f6b44",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/auditing-overview",
"services": [
- "Backup"
+ "SQL",
+ "Monitor"
],
"severity": "Medium",
- "subcategory": "Migration",
- "text": "Use Databricks Migration tools",
- "waf": "Reliability"
- },
- {
- "category": "Operations Management",
- "checklist": "DataBricks Review Checklist",
- "guid": "a0e6c465-89d5-458b-a37d-3974d1112dbd",
- "link": "https://github.com/databrickslabs/databricks-sync",
- "services": [],
- "severity": "Low",
- "subcategory": "Migration",
- "text": "Use Databricks Sync",
- "waf": "Reliability"
+ "subcategory": "SIEM/SOAR",
+ "text": "Ensure that Azure SQL Database Auditing logs are being presented in to your organizations SIEM/SOAR",
+ "waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Disable image export to prevent data exfiltration. Note that this will prevent image import of images into another ACR instance.",
- "guid": "ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e",
- "link": "https://learn.microsoft.com/azure/container-registry/data-loss-prevention",
- "service": "ACR",
+ "category": "Logging",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Forward any logs from Azure SQL to your Security Information and Event Management (SIEM) and Security Orchestration Automation and Response (SOAR), which can be used to set up custom threat detections. Ensure that you are monitoring different types of Azure assets for potential threats and anomalies. Focus on getting high-quality alerts to reduce false positives for analysts to sort through. Alerts can be sourced from log data, agents, or other data.",
+ "guid": "41503bf8-73da-4a10-af9f-5f7fceb5456f",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
"services": [
- "ACR"
+ "SQL",
+ "Monitor"
],
- "severity": "High",
- "subcategory": "Data Protection",
- "text": "Disable Azure Container Registry image export",
+ "severity": "Medium",
+ "subcategory": "SIEM/SOAR",
+ "text": "Ensure that Azure SQL Database Activity Log data is presented in to your SIEM/SOAR",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Enable audit compliance visibility by enabling Azure Policy for Azure Container Registry",
- "guid": "d503547c-d447-4e82-9128-a7100f1cac6d",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-azure-policy",
- "service": "ACR",
+ "category": "Logging",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Security Operation Center (SOC) team should create an incident response plan (playbooks or manual responses) to investigate and mitigate tampering, malicious activities, and other anomalous behaviors.",
+ "guid": "19ec7c97-c563-4e1d-82f0-54d6ec12e754",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
"services": [
- "ACR",
- "AzurePolicy"
+ "SQL",
+ "EventHubs"
],
- "severity": "High",
- "subcategory": "Data Protection",
- "text": "Enable Azure Policies for Azure Container Registry",
+ "severity": "Medium",
+ "subcategory": "SIEM/SOAR",
+ "text": "Ensure that you have response plans for malicious or aberrant audit logging events",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "The Azure Key Vault (AKV) is used to store a signing key that can be utilized by?notation?with the notation AKV plugin (azure-kv) to sign and verify container images and other artifacts. The Azure Container Registry (ACR) allows you to attach these signatures using the?az?or?oras?CLI commands.",
- "guid": "d345293c-7639-4637-a551-c5c04e401955",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "When you create a logical server from the Azure portal for Azure SQL Database, the result is a public endpoint that is visible and reachable over the public network (Public Access). You can then limit connectivity based on firewall rules and Service Endpoint. You can also configure private connectivity only limiting connections to internal networks using Private Endpoint (Private Access). Private Access using Private Endpoint should be the default unless a business case or performance/technical reason applies that cannot support it. Usage of Private Endpoints has performance implications that need to be considered and assessed.",
+ "guid": "2c6d356a-1784-475b-a42c-ec187dc8c925",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview",
"services": [
- "ACR",
- "AKV"
+ "SQL",
+ "PrivateLink"
],
"severity": "High",
- "subcategory": "Data Protection",
- "text": "Sign and Verify containers with notation (Notary v2)",
+ "subcategory": "Connectivity",
+ "text": "Review Public vs. Private Access connectivity methods and select the appropriate one for the workload",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Azure Container Registry automatically encrypts images and other artifacts that you store. By default, Azure automatically encrypts the registry content at rest by using service-managed keys. By using a customer-managed key, you can supplement default encryption with an additional encryption layer.",
- "guid": "0bd05dc2-efd5-4d76-8d41-d2500cc47b49",
- "link": "https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "IMPORTANT: Connections to private endpoint only support Proxy as the connection policy. When using private endpoints connections are proxied via the Azure SQL Database gateway to the database nodes. Clients will not have a direct connection.",
+ "guid": "557b3ce5-bada-4296-8d52-a2d447bc1718",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/connectivity-architecture",
"services": [
- "ACR",
- "AKV"
+ "SQL",
+ "PrivateLink",
+ "AzurePolicy"
],
- "severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Encrypt registry with a customer managed key",
+ "severity": "Low",
+ "subcategory": "Connectivity",
+ "text": "Keep default Azure SQL Database Connection Policy if not differently required and justified",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Use managed identities to secure ACRPull/Push RBAC access from client applications",
- "guid": "8f42d78e-79dc-47b3-9bd2-a1a27e7a8e90",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "This option configures the firewall to allow all connections from Azure, including connections from the subscriptions of other customers. If you select this option, make sure that your login and user permissions limit access to authorized users only. If not strictly required, keep this setting to OFF.",
+ "guid": "f48efacf-4405-4e8d-9dd0-16c5302ed082",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview",
"services": [
- "RBAC",
- "Entra",
- "ACR"
+ "SQL",
+ "Subscriptions"
],
"severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Use Managed Identities to connect instead of Service Principals",
+ "subcategory": "Connectivity",
+ "text": "Ensure Allow Azure Services and Resources to Access this Server setting is disabled in Azure SQL Database firewall",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "The local Administrator account is disabled by default and should not be enabled. Use either Token or RBAC-based access methods instead",
- "guid": "be0e38ce-e297-411b-b363-caaab79b198d",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Azure SQL Database has a new built-in feature that allows native integration with external REST endpoints. This means that integration of Azure SQL Database with Azure Functions, Azure Logic Apps, Cognitive Services, Event Hubs, Event Grid, Azure Containers, API Management and in general any REST or even GraphQL endpoint. If not properly restricted, code inside an Azure SQL Database database could leverage this mechanism to exfiltrate data. If not strictly required, it is recommended to block or restrict this feature using Outbound Firewall Rules.",
+ "guid": "cb3274a7-e36d-46f6-8de5-46d30c8dde8e",
+ "link": "https://learn.microsoft.com/sql/relational-databases/system-stored-procedures/sp-invoke-external-rest-endpoint-transact-sql",
"services": [
- "RBAC",
- "Entra",
- "ACR"
+ "SQL",
+ "APIM",
+ "EventHubs"
],
- "severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Disable local authentication for management plane access",
+ "severity": "Medium",
+ "subcategory": "Outbound Control",
+ "text": "Block or restrict outbound REST API calls to external endpoints",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Disable Administrator account and assign RBAC roles to principals for ACR Pull/Push operations",
- "guid": "387e5ced-126c-4d13-8af5-b20c6998a646",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Outbound firewall rules limit network traffic from the Azure SQL Database logical server to a customer defined list of Azure Storage accounts and Azure SQL Database logical servers. Any attempt to access storage accounts or databases not in this list is denied.",
+ "guid": "a566dd3d-314e-4a94-9378-102c42d82b38",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/outbound-firewall-rule-overview",
"services": [
- "RBAC",
- "Entra",
- "ACR"
+ "SQL",
+ "Storage"
],
- "severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Assign AcrPull & AcrPush RBAC roles rather than granting Administrative access to identity principals",
+ "severity": "Medium",
+ "subcategory": "Outbound Control",
+ "text": "If outbound network access is required, it is recommended to configure outbound networking restrictions using built-in Azure SQL Database control feature",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Disable anonymous pull/push access",
- "guid": "e338997e-41c7-47d7-acf6-a62a1194956d",
- "link": "https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Private Endpoint is created inside a subnet in an Azure Virtual Network. Proper security configuration must be applied also to the containing network environment, including NSG/ASG, UDR, firewall, monitoring and auditing.",
+ "guid": "246cd832-f550-4af0-9c74-ca9baeeb8860",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/private-endpoint-overview?view=azuresql#disable-public-access-to-your-logical-server",
"services": [
- "Entra",
- "ACR"
+ "Firewall",
+ "PrivateLink",
+ "Monitor",
+ "SQL",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Identity and Access Control",
- "text": "Disable Anonymous pull access",
+ "subcategory": "Private Access",
+ "text": "If Private Access connectivity is used, ensure that you are using the Private Endpoint, Azure Virtual Network, Azure Firewall, and Azure Network Security Group checklists",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Token authentication doesn't support assignment to an AAD principal. Any tokens provided are able to be used by anyone who can access the token",
- "guid": "698dc3a2-fd27-4b2e-8870-1a1252beedf6",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication?tabs=azure-cli",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "When adding a Private Endpoint connection, public routing to your logical server isn't blocked by default. In the --Firewall and virtual networks-- pane, the setting --Deny public network access-- is not selected by default. To disable public network access, ensure that you select --Deny public network access--.",
+ "guid": "3a0808ee-ea7a-47ab-bdce-920a6a2b3881",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/private-endpoint-overview?view=azuresql#disable-public-access-to-your-logical-server",
"services": [
- "Entra",
- "ACR"
+ "SQL",
+ "PrivateLink",
+ "VNet"
],
"severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Disable repository-scoped access tokens",
+ "subcategory": "Private Access",
+ "text": "If Private Endpoint (Private Access) is used, consider disabling Public Access connectivity",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Deploy container images to an ACR behind a Private endpoint within a trusted network",
- "guid": "b3bec3d4-f343-47c1-936d-b55f27a71eee",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Network Security Group (NSG) and Application Security Group (ASG) can be now applied to subnet containing Private Endpoints to restrict connections to Azure SQLDB based on internal source IP ranges.",
+ "guid": "8600527e-e8c4-4424-90ef-1f0dca0224f2",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview#network-security-of-private-endpoints",
"services": [
- "EventHubs",
- "Entra",
- "ACR",
- "PrivateLink"
+ "SQL",
+ "PrivateLink",
+ "VNet"
],
- "severity": "High",
- "subcategory": "Identity and Access Control",
- "text": "Deploy images from a trusted environment",
+ "severity": "Medium",
+ "subcategory": "Private Access",
+ "text": "If Private Endpoint (Private Access) is used, apply NSG and eventually ASG to limit incoming source IP address ranges",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Only tokens with an ACR audience can be used for authentication. Used when enabling Conditional access policies for ACR",
- "guid": "3a041fd3-2947-498b-8288-b3c6a56ceb54",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-enable-conditional-access-policy",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "A Managed Instance (SQL MI) can be isolated inside a virtual network to prevent external access. Applications and tools that are in the same or peered virtual network in the same region could access it directly. Applications and tools that are in different region could use virtual-network-to-virtual-network connection or ExpressRoute circuit peering to establish connection. Customer should use Network Security Groups (NSG), and eventually internal firewalls, to restrict access over port 1433 only to resources that require access to a managed instance.",
+ "guid": "18123ef4-a0a6-45e3-87fe-7f454f65d975",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/connectivity-architecture-overview",
"services": [
- "Entra",
- "ACR",
- "AzurePolicy"
+ "SQL",
+ "ExpressRoute",
+ "VNet"
],
"severity": "Medium",
- "subcategory": "Identity and Access Control",
- "text": "Disable Azure ARM audience tokens for authentication",
+ "subcategory": "Private Access",
+ "text": "Apply Network Security Groups (NSG) and firewall rules to restrict access to Azure SQL Managed Instance internal subnet",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Set up a diagnostic setting to send 'repositoryEvents' & 'LoginEvents' to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the ACR resource itself.",
- "guid": "8a488cde-c486-42bc-9bd2-1be77f26e5e6",
- "link": "https://learn.microsoft.com/azure/container-registry/monitor-service",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Azure Virtual Network Service Endpoint is preferred solution if you want to establish a direct connection to the Azure SQL Database backend nodes using Redirect policy. This will allow access in high performance mode and is the recommended approach from a performance perspective.",
+ "guid": "55187443-6852-4fbd-99c6-ce303597ca7f",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview?view=azuresql#ip-vs-virtual-network-firewall-rules",
"services": [
- "Entra",
- "ACR",
- "Monitor"
+ "SQL",
+ "AzurePolicy",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Logging and Monitoring",
- "text": "Enable diagnostics logging",
+ "severity": "High",
+ "subcategory": "Public Access",
+ "text": "If Public Access connectivity is used, leverage Service Endpoint to restrict access from selected Azure Virtual Networks",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Service supports disabling public network access either through using service-level IP ACL filtering rule (not NSG or Azure Firewall) or using a 'Disable Public Network Access' toggle switch",
- "guid": "21d41d25-00b7-407a-b9ea-b40fd3290798",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-private-link",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The Azure SQL Database firewall allows you to specify IP address ranges from which communications are accepted. This approach is fine for stable IP addresses that are outside the Azure private network.",
+ "guid": "a73e32da-b3f4-4960-b5ec-2f42a557bf31",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/network-access-controls-overview",
"services": [
- "VNet",
- "ACR",
- "PrivateLink",
- "Firewall"
+ "SQL",
+ "Storage"
],
"severity": "Medium",
- "subcategory": "Network Security",
- "text": "Control inbound network access with Private Link",
+ "subcategory": "Public Access",
+ "text": "If Public Access connectivity is used, ensure that only specific known IPs are added to the firewall",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Disable public network access if inbound network access is secured using Private Link",
- "guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "We recommend that you use database-level IP firewall rules whenever possible. This practice enhances security and makes your database more portable. Use server-level IP firewall rules for administrators. Also use them when you have many databases that have the same access requirements, and you don't want to configure each database individually.",
+ "guid": "e0f31ac9-35c8-4bfd-9865-edb60ffc6768",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/firewall-configure",
"services": [
- "ACR",
- "PrivateLink"
+ "SQL",
+ "Storage"
],
- "severity": "Medium",
- "subcategory": "Network Security",
- "text": "Disable Public Network access",
+ "severity": "Low",
+ "subcategory": "Public Access",
+ "text": "If Public Access connectivity is used and controlled by Azure SQL Database firewall rules, use database-level over server-level IP rules",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Only the ACR Premium SKU supports Private Link access",
- "guid": "fc833934-8b26-42d6-ac5f-512925498f6d",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-skus",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "A Managed Instance (SQL MI) can be isolated inside a virtual network to prevent external access. The Managed Instance public endpoint is not enabled by default, must be explicitly enabled, only if strictly required. If company policy disallows the use of public endpoints, use Azure Policy to prevent enabling public endpoints in the first place.",
+ "guid": "b8435656-143e-41a8-9922-61d34edb751a",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/public-endpoint-overview",
"services": [
- "ACR",
- "PrivateLink"
+ "SQL",
+ "AzurePolicy",
+ "VNet"
],
- "severity": "Medium",
- "subcategory": "Network Security",
- "text": "Use an Azure Container Registry SKU that supports Private Link (Premium SKU)",
+ "severity": "High",
+ "subcategory": "Public Access",
+ "text": "Do not enable Azure SQL Managed Instance public endpoint",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Azure Defender for containers or equivalent service should be used to scan container images for vulnerabilities",
- "guid": "bad37dac-43bc-46ce-8d7a-a9b24604489a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction",
- "service": "ACR",
+ "category": "Networking",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "A Managed Instance (SQL MI) public endpoint is not enabled by default, must be explicitly enabled, only if strictly required. In this case, it is recommended to apply a Network Security Groups (NSG) to restrict access to port 3342 only to trusted source IP addresses.",
+ "guid": "057dd298-8726-4aa6-b590-1f81d2e30421",
+ "link": "https://learn.microsoft.com/azure/azure-sql/managed-instance/public-endpoint-overview",
"services": [
- "ACR",
- "Defender"
+ "SQL",
+ "VNet"
],
- "severity": "Low",
- "subcategory": "Network Security",
- "text": "Enable Defender for Containers to scan Azure Container Registry for vulnerabilities",
+ "severity": "High",
+ "subcategory": "Public Access",
+ "text": "Restrict access if Azure SQL Managed Instance public endpoint is required",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
- "guid": "4451e1a2-d345-4293-a763-9637a551c5c0",
- "service": "ACR",
+ "category": "Privileged Access",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Most operations, support, and troubleshooting performed by Microsoft personnel and sub-processors do not require access to customer data. In those rare circumstances where such access is required, Customer Lockbox for Microsoft Azure provides an interface for customers to review and approve or reject customer data access requests. In support scenarios where Microsoft needs to access customer data, Azure SQL Database supports Customer Lockbox to provide an interface for you to review and approve or reject customer data access requests.",
+ "guid": "37b6eb0f-553d-488f-8a8a-cb9bf97388ff",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"services": [
- "ACR"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "Vulnerability Management",
- "text": "Deploy validated container images",
+ "severity": "Low",
+ "subcategory": "Lockbox",
+ "text": "Review and enable Customer Lockbox for Azure SQL Database access by Microsoft personnel",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Container Registry Security Review",
- "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
- "guid": "4e401955-387e-45ce-b126-cd132af5b20c",
- "service": "ACR",
+ "category": "Privileged Access",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "The principle of least privilege states that users shouldn't have more privileges than needed to complete their tasks. High-privileged database and server users can perform many configuration and maintenance activities on the database and can also drop databases in Azure SQL instance. Tracking database owners and privileged accounts is important to avoid having excessive permission.",
+ "guid": "5fe5281f-f0f9-4842-a682-8baf18bd8316",
+ "link": "https://learn.microsoft.com/azure/azure-sql/database/security-best-practice?view=azuresql#implement-principle-of-least-privilege",
"services": [
- "ACR"
+ "SQL"
],
- "severity": "High",
- "subcategory": "Vulnerability Management",
- "text": "Use up-to-date platforms, languages, protocols and frameworks",
+ "severity": "Medium",
+ "subcategory": "Permissions",
+ "text": "Ensure that users are assigned the minimum level of access necessarily to complete their job functions",
"waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "PostgreSQL Review Checklist",
- "guid": "65285269-441c-44bf-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview",
- "service": "PostgreSQL",
+ "category": "Privileged Access",
+ "checklist": "Azure SQLDB Security Checklist (Preview)",
+ "description": "Identities (both Users and SPNs) should be scoped to the least amount of access needed to perform the function. A higher number of tightly scoped SPNs should be used, instead of having one SPN with multiple sets of unrelated permissions. For example, if there are three external web applications hosted on-prem that make queries to the Azure SQL Database, they should not all use the same SPN for these activities. Instead, they should each have their own tightly scoped SPN.",
+ "guid": "7b5b55e5-4750-4920-be97-eb726c256a5c",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/sql-database-security-baseline#im-3-use-azure-ad-single-sign-on-sso-for-application-access",
"services": [
- "SQL"
+ "SQL",
+ "Entra"
],
- "severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage Flexible Server",
- "waf": "Reliability"
+ "severity": "Low",
+ "subcategory": "Permissions",
+ "text": "Ensure that distinct applications will be assigned different credentials with minimal permissions to access Azure SQL Database",
+ "waf": "Security"
},
{
- "category": "Operations Management",
- "checklist": "PostgreSQL Review Checklist",
- "guid": "016ccf31-ae5a-41eb-9888-9535e227896d",
- "link": "https://learn.microsoft.com/azure/postgresql/flexible-server/overview#architecture-and-high-availability",
- "service": "PostgreSQL",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
"services": [
- "SQL"
+ "AKV",
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Best Practices",
- "text": "Leverage Availability Zones where regionally applicable",
- "waf": "Reliability"
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal.",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "PostgreSQL Review Checklist",
- "guid": "31b67c67-be59-4519-8083-845d587cb391",
- "link": "https://learn.microsoft.com/azure/postgresql/single-server/concepts-business-continuity#cross-region-read-replicas",
- "service": "PostgreSQL",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
"services": [
- "SQL"
+ "WAF",
+ "FrontDoor",
+ "AzurePolicy"
],
"severity": "Medium",
- "subcategory": "Best Practices",
- "text": "Leverage cross-region read replicas for BCDR",
- "waf": "Reliability"
+ "subcategory": "Front Door",
+ "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Apply guidance from the Microsoft cloud security benchmark related to Storage",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
"services": [
- "Storage"
+ "WAF",
+ "AppGW",
+ "AzurePolicy",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": " Overview",
- "text": "Consider the 'Azure security baseline for storage'",
+ "subcategory": "Front Door",
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
"services": [
- "Storage",
- "PrivateLink"
+ "WAF",
+ "FrontDoor",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Networking",
- "text": "Consider using private endpoints for Azure Storage",
+ "subcategory": "Front Door",
+ "text": "Deploy your WAF policy for Front Door in 'Prevention' mode' so that Web Application Firewall takes appropriate action to allow or deny traffic.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Newly created storage accounts are created using the ARM deployment model, so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage accounts with classic deployment model in a subscription",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
"services": [
- "Storage",
- "RBAC",
- "Subscriptions"
+ "TrafficManager",
+ "FrontDoor",
+ "EventHubs"
],
- "severity": "Medium",
- "subcategory": "Governance",
- "text": "Ensure older storage accounts are not using 'classic deployment model'",
+ "severity": "High",
+ "subcategory": "Front Door",
+ "text": "Avoid placing Traffic Manager behind Front Door.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
"services": [
- "Storage",
- "Defender"
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Governance",
- "text": "Enable Microsoft Defender for all of your storage accounts",
+ "subcategory": "Front Door",
+ "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "The soft-delete mechanism allows to recover accidentally deleted blobs.",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
"services": [
- "Storage"
+ "FrontDoor"
],
- "severity": "Medium",
- "subcategory": "Data Availability",
- "text": "Enable 'soft delete' for blobs",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Front Door",
+ "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
"services": [
- "Storage"
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Confidentiality",
- "text": "Disable 'soft delete' for blobs",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Soft delete for containers enables you to recover a container after it has been deleted, for example recover from an accidental delete operation.",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
"services": [
- "Storage"
+ "FrontDoor"
+ ],
+ "severity": "Low",
+ "subcategory": "Front Door",
+ "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
+ "waf": "Performance"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "services": [
+ "Cost",
+ "AKV",
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Data Availability",
- "text": "Enable 'soft delete' for containers",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Consider selectively disabling 'soft delete' for certain blob containers, for example if the application must ensure that deleted information is immediately deleted, e.g. for confidentiality, privacy or compliance reasons. ",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
"services": [
- "Storage"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Confidentiality",
- "text": "Disable 'soft delete' for containers",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Prevents accidental deletion of a storage account, by forcing the user to first remove the deletion lock, prior to deletion",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
"services": [
- "Storage"
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Data Availability",
- "text": "Enable resource locks on storage accounts",
+ "subcategory": "Front Door",
+ "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Consider 'legal hold' or 'time-based retention' policies for blobs, so that is is impossible to delete the blob, the container, or the storage account. Please note that 'impossible' actually means 'impossible'; once a storage account contains an immutable blob, the only way to 'get rid' of that storage account is by cancelling the Azure subscription.",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"services": [
- "Storage",
- "Subscriptions",
- "AzurePolicy"
+ "FrontDoor"
+ ],
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
+ "waf": "Security"
+ },
+ {
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "services": [
+ "WAF",
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Data Availability, Compliance",
- "text": "Consider immutable blobs",
+ "subcategory": "Front Door",
+ "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"services": [
- "Storage"
+ "WAF",
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Networking",
- "text": "Require HTTPS, i.e. disable port 80 on the storage account",
+ "subcategory": "Front Door",
+ "text": "Tune the Azure Front Door WAF for your workload by configuring the WAF in Detection mode to reduce and fix false positive detections.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "When configuring a custom domain (hostname) on a storage account, check whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your storage account.",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
"services": [
- "Storage"
+ "WAF",
+ "FrontDoor",
+ "AzurePolicy"
],
"severity": "High",
- "subcategory": "Networking",
- "text": "When enforcing HTTPS (disabling HTTP), check that you do not use custom domains (CNAME) for the storage account.",
+ "subcategory": "Front Door",
+ "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Requiring HTTPS when a client uses a SAS token to access blob data helps to minimize the risk of credential loss.",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
"services": [
- "Storage"
+ "WAF",
+ "FrontDoor"
],
- "severity": "Medium",
- "subcategory": "Networking",
- "text": "Limit shared access signature (SAS) tokens to HTTPS connections only",
+ "severity": "High",
+ "subcategory": "Front Door",
+ "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "AAD tokens should be favored over shared access signatures, wherever possible",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "WAF",
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Use Azure Active Directory (Azure AD) tokens for blob access",
+ "subcategory": "Front Door",
+ "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "When assigning a role to a user, group, or application, grant that security principal only those permissions that are necessary for them to perform their tasks. Limiting access to resources helps prevent both unintentional and malicious misuse of your data.",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "RBAC"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Least privilege in IaM permissions",
+ "subcategory": "Front Door",
+ "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "A user delegation SAS is secured with Azure Active Directory (Azure AD) credentials and also by the permissions specified for the SAS. A user delegation SAS is analogous to a service SAS in terms of its scope and function, but offers security benefits over the service SAS. ",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "WAF",
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "When using SAS, prefer 'user delegation SAS' over storage-account-key based SAS.",
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on AAD authentication makes it easier to tie storage access to a user. ",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "Monitor",
- "AKV"
+ "WAF",
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Consider disabling storage account keys, so that only AAD access (and user delegation SAS) is supported.",
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Use Activity Log data to identify 'when', 'who', 'what' and 'how' the security of your storage account is being viewed or changed (i.e. storage account keys, access policies, etc.).",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
"services": [
- "Storage",
- "Monitor",
- "AKV",
- "AzurePolicy"
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Monitoring",
- "text": "Consider using Azure Monitor to audit control plane operations on the storage account",
+ "severity": "Low",
+ "subcategory": "Front Door",
+ "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "A key expiration policy enables you to set a reminder for the rotation of the account access keys. The reminder is displayed if the specified interval has elapsed and the keys have not yet been rotated.",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "AKV",
- "AzurePolicy"
+ "WAF",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "When using storage account keys, consider enabling a 'key expiration policy'",
+ "subcategory": "Front Door",
+ "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "A SAS expiration policy specifies a recommended interval over which the SAS is valid. SAS expiration policies apply to a service SAS or an account SAS. When a user generates service SAS or an account SAS with a validity interval that is larger than the recommended interval, they'll see a warning.",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "AzurePolicy"
+ "WAF",
+ "Monitor",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Consider configuring an SAS expiration policy",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Capture logs and metrics by turning on Diagnostic Settings. Include resource activity logs, access logs, health probe logs, and WAF logs. Set up alerts.",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Stored access policies give you the option to revoke permissions for a service SAS without having to regenerate the storage account keys. ",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "AKV",
- "AzurePolicy"
+ "WAF",
+ "Sentinel",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Consider linking SAS to a stored access policy",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
"services": [
- "Storage",
- "AKV"
+ "FrontDoor",
+ "Backup"
],
"severity": "Medium",
- "subcategory": "CI/CD",
- "text": "Consider configuring your application's source code repository to detect checked-in connection strings and storage account keys.",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Choose a routing method that supports your deployment strategy. The weighted method, which distributes traffic based on the configured weight coefficient, supports active-active models. A priority-based value that configures the primary region to receive all traffic and send traffic to the secondary region as a backup supports active-passive models. Combine the preceding methods with latency so that the origin with the lowest latency receives traffic.",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Ideally, your application should be using a managed identity to authenticate to Azure Storage. If that is not possible, consider having the storage credential (connection string, storage account key, SAS, service principal credential) in Azure KeyVault or an equivalent service.",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Consider storing connection strings in Azure KeyVault (in scenarios where managed identities are not possible)",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Support redundancy by having multiple origins in one or more back-end pools. Always have redundant instances of your application and make sure each instance exposes an endpoint or origin. You can place those origins in one or more back-end pools.",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Use near-term expiration times on an ad hoc SAS service SAS or account SAS. In this way, even if a SAS is compromised, it's valid only for a short time. This practice is especially important if you cannot reference a stored access policy. Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "AzurePolicy"
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Strive for short validity periods for ad-hoc SAS",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Set a timeout on forwarding requests to the back end. Adjust the timeout setting according to your endpoints' needs. If you don't, Azure Front Door might close the connection before the origin sends the response. You can also lower the default timeout for Azure Front Door if all of your origins have a shorter timeout.",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "When creating a SAS, be as specific and restrictive as possible. Prefer a SAS for a single resource and operation over a SAS which gives much broader access.",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Apply a narrow scope to a SAS",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Decide if your application requires session affinity. If you have high reliability requirements, we recommend that you disable session affinity.",
+ "waf": "Reliability"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "A SAS can include parameters on which client IP addresses or address ranges are authorized to request a resource using the SAS. ",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "Consider scoping SAS to a specific client IP address, wherever possible",
+ "subcategory": "Front Door",
+ "text": "Send the host header to the back end. The back-end services should be aware of the host name so that they can create rules to accept traffic only from that host.",
"waf": "Security"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "A SAS cannot constrain how much data a client uploads; given the pricing model of amount of storage over time, it might make sense to validate whether clients uploaded maliciously large contents.",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "FrontDoor"
],
- "severity": "Low",
- "subcategory": "Identity and Access Management",
- "text": "Consider checking uploaded data, after clients used a SAS to upload a file. ",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Use caching for endpoints that support it.",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "When accessing blob storage via SFTP using a 'local user account', the 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive than SFTP access. Unfortunately, as of early 2023, local users are the only form of identity management that is currently supported for the SFTP endpoint",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra",
- "RBAC"
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "SFTP: Limit the amount of 'local users' for SFTP access, and audit whether access is needed over time.",
- "waf": "Security"
+ "severity": "Low",
+ "subcategory": "Front Door",
+ "text": "Disable health checks in single back-end pools. If you have only one origin configured in your Azure Front Door origin group, these calls are unnecessary. This is only recommended if you can't have multiple origins in your endpoint.",
+ "waf": "Cost"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
"services": [
"Storage",
- "Entra"
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Identity and Access Management",
- "text": "SFTP: The SFTP endpoint does not support POSIX-like ACLs.",
- "waf": "Security"
- },
- {
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature that enables web apps from a different domain to loosen the same-origin policy. When enabling CORS, keep the CorsRules to the least privilege.",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
- "services": [
- "Storage",
- "AzurePolicy"
- ],
- "severity": "High",
- "subcategory": "Networking",
- "text": "Avoid overly broad CORS policies",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "We recommend using the Premium Tier for leveraging the Security reports while the Standard Azure Front Door Profile provides only traffic reports under built-in analytics/reports.",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Data at rest is always encrypted server-side, and in addition might be encrypted client-side as well. Server-side encryption might happen using a platform-managed key (default) or customer-managed key. Client-side encryption might happen by either having the client supply an encryption/decryption key on a per-blob basis to Azure storage, or by completely handling encryption on the client-side. thus not relying on Azure Storage at all for confidentiality guarantees.",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
"services": [
- "Storage"
+ "AKV",
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Confidentiality and Encryption",
- "text": "Determine how data at rest should be encrypted. Understand the thread model for data.",
- "waf": "Security"
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Use wildcard TLS certificates when possible.",
+ "waf": "Operations"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"services": [
- "Storage"
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Confidentiality and Encryption",
- "text": "Determine which/if platform encryption should be used.",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Optimize your application query string for caching. For purely static content, ignore query strings to maximize your use of the cache. If your application uses query strings, consider including them in the cache key. Including the query strings in the cache key allows Azure Front Door to serve cached responses or other responses, based on your configuration.",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
"services": [
- "Storage"
+ "Storage",
+ "FrontDoor"
],
"severity": "Medium",
- "subcategory": "Confidentiality and Encryption",
- "text": "Determine which/if client-side encryption should be used.",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Use file compression when you're accessing downloadable content.",
+ "waf": "Performance"
},
{
- "category": "Security",
- "checklist": "Azure Storage Review Checklist",
- "description": "Leverage Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) to find storage accounts which allow anonymous blob access.",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
"services": [
- "Storage",
- "Entra"
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Identity and Access Management",
- "text": "Consider whether public blob access is needed, or whether it can be disabled for certain storage accounts. ",
- "waf": "Security"
+ "subcategory": "Front Door",
+ "text": "Consider migrating to Standard or Premium SKU if you are using Classic Azure Front Door currently as Classic Azure Front Door will be deprecated by March 2027.",
+ "waf": "Operations"
},
{
- "category": "Operations Management",
- "checklist": "Azure Storage Review Checklist",
- "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
"services": [
- "Storage"
+ "TrafficManager",
+ "Storage",
+ "FrontDoor"
],
- "severity": "High",
- "subcategory": "Platform Version",
- "text": "Leverage a storagev2 account type for better performance and reliability",
+ "severity": "Medium",
+ "subcategory": "Front Door",
+ "text": "Consider using Traffic Manager load balancing Azure Front Door and a third party CDN provider CDN profile for mission critical high availability scenario. ",
"waf": "Reliability"
},
{
- "category": "BC and DR",
- "checklist": "Azure Storage Review Checklist",
- "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Azure Storage",
+ "category": "Network Topology and Connectivity",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
"services": [
- "Storage"
+ "AppSvc",
+ "FrontDoor"
],
"severity": "High",
- "subcategory": "Availablity",
- "text": "Leverage GRS, ZRS or GZRS storage for the highest availability",
- "waf": "Reliability"
+ "subcategory": "Front Door",
+ "text": "When using Front Door with origin as App services, consider locking down the traffic to app services only through Azure Front Door using access restrictions. ",
+ "waf": "Security"
},
{
- "category": "BC and DR",
- "checklist": "Azure Storage Review Checklist",
- "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
- "service": "Azure Storage",
+ "category": "Operations Management",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"services": [
- "Storage"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Failover",
- "text": "For write operation after failover, use customer-Managed Failover ",
+ "subcategory": "Best Practices",
+ "text": "Leverage Flexible Server",
"waf": "Reliability"
},
{
"category": "Operations Management",
- "checklist": "Azure Storage Review Checklist",
- "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
- "service": "Azure Storage",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
"services": [
- "Storage"
+ "SQL"
],
- "severity": "Medium",
- "subcategory": "Failover",
- "text": "Understand Microsoft-Managed Failover details",
+ "severity": "High",
+ "subcategory": "Best Practices",
+ "text": "Leverage Availability Zones where regionally applicable",
"waf": "Reliability"
},
{
"category": "Operations Management",
- "checklist": "Azure Storage Review Checklist",
- "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
- "service": "Azure Storage",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
"services": [
- "Storage"
+ "SQL"
],
"severity": "Medium",
- "subcategory": "Data Protection",
- "text": "Enable Soft Delete",
+ "subcategory": "Best Practices",
+ "text": "Leverage Data-in replication for cross-region DR scenarios",
"waf": "Reliability"
}
],
"metadata": {
"name": "Master checklist",
- "timestamp": "June 24, 2024"
+ "timestamp": "October 02, 2024"
},
"severities": [
{
diff --git a/checklists/container_apps_checklist.en.json b/checklists/container_apps_checklist.en.json
index e292c2a34..f1bd47089 100644
--- a/checklists/container_apps_checklist.en.json
+++ b/checklists/container_apps_checklist.en.json
@@ -10,6 +10,7 @@
"id": "01.01.01",
"cost": 1,
"severity": "High",
+ "query": "resources | where type =~ 'Microsoft.App/managedEnvironments' | project name, resourceGroup, location, zoneRedundancy = tolower(tostring(properties.zoneRedundant)) | extend Compliance = iff(zoneRedundancy == 'true', true, false)",
"link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support"
},
{
@@ -22,6 +23,7 @@
"id": "01.01.02",
"cost": 1,
"severity": "High",
+ "query": "resources | where type =~ 'Microsoft.App/containerApps' | project name, resourceGroup, location, minReplicas = toint(properties.template.scale.minReplicas), maxReplicas = toint(properties.template.scale.maxReplicas) | extend Compliance = iff(minReplicas >= 1, true, false)",
"link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment"
},
{
diff --git a/checklists/datasecurity_checklist.en.json b/checklists/datasecurity_checklist.en.json
new file mode 100644
index 000000000..9b36bb46e
--- /dev/null
+++ b/checklists/datasecurity_checklist.en.json
@@ -0,0 +1,811 @@
+{
+ "items": [
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Restrict use of local users on sql workloads on Synapse",
+ "description": "Restrict the use of local authentication methods for data plane access. Instead, use Microsoft Entra ID as the default authentication method to control your data plane access.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "32d41e36-11c8-417b-8afb-c410d4391898",
+ "id": "A01.01",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use managed identity to authenticate to the services",
+ "description": "Use Microsoft Entra ID as the default authentication method to control your data plane access.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "cd289bed-6b17-4cb8-8454-61e1aee3453a",
+ "id": "A01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/synapse-service-identity?context=%2Fazure%2Fsynapse-analytics%2Fcontext%2Fcontext"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Separate and limit highly privileged/administrative users and enable MFA and conditional policies",
+ "description": "If not required for routine administrative operations, disable or restrict any local admin accounts for only emergency use.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "ec823923-7a15-42d6-ac5e-402925388e5d",
+ "id": "A01.03",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use Azure RBAC to control access on storage and Synapse RBAC to control access on workspace level depending on the personas of the team to fine grain the access on data and compute",
+ "description": "Azure Synapse also includes Synapse role-based access control (RBAC) roles to manage different aspects of Synapse Studio. Leverage these built-in roles to assign permissions to users, groups, or other security principals to manage who can Publish code artifacts and list or access published code artifacts,Execute code on Apache Spark pools and integration runtimes,Access linked (data) services that are protected by credentials,Monitor or cancel job executions, review job output and execution logs.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "a9c27d9c-42bb-46cd-8c79-99a246f3389a",
+ "id": "A01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/security/synapse-workspace-understand-what-role-you-need"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Implement RLS, CLS and data masking on sql workloads in dedicated sql pool to add additional layer of security",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "7f42c78e-78cb-46a2-8ad1-a0916e6a8d8f",
+ "id": "A01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/sql/relational-databases/security/row-level-security?view=sql-server-ver16&context=%2Fazure%2Fsynapse-analytics%2Fcontext%2Fcontext"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Use managed vnet workspace to restrict the access over public internet",
+ "description": "When you create your Azure Synapse workspace, you can choose to associate it to a Microsoft Azure Virtual Network. The Virtual Network associated with your workspace is managed by Azure Synapse. This Virtual Network is called a Managed workspace Virtual Network. This can be selected when deploying a workspace",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "e2436b03-36db-455e-8796-0eee0bdf4cc2",
+ "id": "B01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/security/synapse-workspace-managed-vnet?view=sql-server-ver16"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Configure private endpoints to connect to the external services and disable public access",
+ "description": "To protect any sensitive data, it's recommended to disable public access to the workspace endpoints entirely. By doing so, it ensures all workspace endpoints can only be accessed using�private endpoints.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "efc4d761-c31d-425f-bbb4-7a393a040ed3",
+ "id": "B01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/security/synapse-workspace-managed-private-endpoints?view=sql-server-ver16"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "If enabling public access highly recommended to configure IP firewall rules",
+ "description": "If public access needs to be enabled, it's highly recommended to configure the IP firewall rules to allow inbound connections only from the specified list of public IP addresses.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "294798b1-178a-42c5-a46c-eb544350d092",
+ "id": "B01.03",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/security/synapse-workspace-ip-firewall"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Deploy SHIR VMs in your vnet if you are working with sensitive data that shouldn�t leave your corporate network",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "d234292b-7528-4537-a551-c5bf4e4f1854",
+ "id": "B01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/create-self-hosted-integration-runtime?tabs=data-factory"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Enable Data Exfiltration Protection (DEP)",
+ "description": "This can be done only when deploying the workspace, but Python libraries installed from public repositories like PyPI are not supported. (Think about the limitation before enabling it)",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "287d5cdc-126c-4c03-8af5-b1fc6898a535",
+ "id": "B01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/security/how-to-create-a-workspace-with-data-exfiltration-protection"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data Encryption at rest using Customer managed Keys for workspace",
+ "description": "First layer of encryption is done by Microsoft managed keys, you can add a second layer of encryption using Customer managed Keys",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "e337897e-31b6-47d6-9be5-962a1193846d",
+ "id": "C01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/security/workspaces-encryption"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data Encryption in transit ",
+ "description": "Azure Synapse leverages TLS to ensure data is encrypted in motion. SQL dedicated pools support TLS 1.0, TLS 1.1, and TLS 1.2 versions for encryption wherein Microsoft-provided drivers use TLS 1.2 by default. Serverless SQL pool and Apache Spark pool use TLS 1.2 for all outbound connections.",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "697cc391-ed16-4b2d-886f-0a1241bddde6",
+ "id": "C01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/synapse-analytics/guidance/security-white-paper-data-protection#data-in-transit"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Store passwords, secerts and keys in Azure key vault",
+ "description": "Use Keyvaults to store your secrets and credentials",
+ "waf": "Security",
+ "service": "Azure Synapse Analytics",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25e4d5",
+ "id": "C01.03",
+ "severity": "High"
+ },
+ {
+ "category": " ",
+ "subcategory": " ",
+ "text": "Use Azure Key Vault secrets in pipeline activities",
+ "description": "You can store credentials or secret values in an Azure Key Vault and use them during pipeline execution to pass to your activities.",
+ "guid": "a3aec2c4-e243-46b0-936d-b55e17960eee",
+ "id": "D01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/how-to-use-azure-key-vault-secrets-pipeline-activities"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Restrict use of local users whereever necessary",
+ "description": "Restrict the use of local authentication methods for data plane access. Instead, use Microsoft Entra ID as the default authentication method to control your data plane access.",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "0bdf4cc2-efc4-4d76-8c31-d25ffbb47a39",
+ "id": "E01.01",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use managed identity to authenticate to the services",
+ "description": "Managed identities eliminate the need to manage credentials. Managed identities provide an identity for the service instance when connecting to resources that support Microsoft Entra authentication.",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "3a040ed3-2947-498b-8178-a2c5a46ceb54",
+ "id": "E01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/data-factory-service-identity"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Separate and limit highly privileged/administrative users and enable MFA and conditional policies",
+ "description": "If not required for routine administrative operations, disable or restrict any local admin accounts for only emergency use.",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "id": "E01.03",
+ "severity": "High"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Disable access over public internet and configure either firewall rules or trusted services rules",
+ "service": "Azure Data Factory",
+ "guid": "4e4f1854-287d-45cd-a126-cc032af5b1fc",
+ "id": "F01.01",
+ "severity": "Medium"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Deploy SHIR VMs in your vnet if you are working with sensitive data that shouldn�t leave your corporate network",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "6898a535-e337-4897-b31b-67d67be5962a",
+ "id": "F01.02",
+ "severity": "Medium"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Use managed vnet IR to restrict the access over public internet for Azure Integration Runtime",
+ "description": "When you create an Azure integration runtime within a Data Factory managed virtual network, the integration runtime is provisioned with the managed virtual network. It uses private endpoints to securely connect to supported data stores.",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "1193846d-697c-4c39-8ed1-6b2d186f0a12",
+ "id": "F01.03",
+ "severity": "Medium"
+ },
+ {
+ "category": "Network Security",
+ "subcategory": " ",
+ "text": "Configure managed private endpoints to connect to resources using managed azure IR",
+ "description": "Managed private endpoints are private endpoints created in the Data Factory managed virtual network that establishes a private link to Azure resources. Data Factory manages these private endpoints on your behalf.",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "41bddde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "id": "F01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/managed-virtual-network-private-endpoint#managed-private-endpoints"
+ },
+ {
+ "category": " ",
+ "subcategory": " ",
+ "text": "Configure Private Links to connect to sources in customer Vnet and data factory",
+ "description": "By using Azure Private Link, you can connect to various platform as a service (PaaS) deployments in Azure via a private endpoint. A private endpoint is a private IP address within a specific virtual network and subnet",
+ "guid": "b47a393a-0804-4272-a479-8b1578b219a4",
+ "id": "G01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/data-factory-private-link"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data Encryption at rest by Microsoft managed keys",
+ "description": "This is a default setting",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "6ceb5443-5135-4922-9442-93bb628637a5",
+ "id": "H01.01",
+ "severity": "Medium"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data Encryption in transit by Microsoft managed keys",
+ "description": "This is a default setting",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "5119b08e-8f58-4543-a7e9-cec166cd072a",
+ "id": "H01.02",
+ "severity": "Medium"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data Encryption in transit by BYOK (Customer managed keys)",
+ "description": "When you specify a customer-managed key, Data Factory uses�both�the factory system key and the CMK to encrypt customer data. Missing either would result in Deny of Access to data and factory.",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "f9b241a9-98a5-435e-9378-97e71ca7da8c",
+ "id": "H01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/enable-customer-managed-key"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Store passwords, secrets in Azure Key Vault",
+ "waf": "Security",
+ "service": "Azure Data Factory",
+ "guid": "faa62a15-9495-46da-a7dc-3a23267b2258",
+ "id": "H01.04",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/data-factory/store-credentials-in-key-vault, https:/learn.microsoft.com/azure/data-factory/how-to-use-azure-key-vault-secrets-pipeline-activities"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Use Azure Key Vault secrets in pipeline activities",
+ "description": "You can store credentials or secret values in an Azure Key Vault and use them during pipeline execution to pass to your activities.",
+ "service": "Azure Data Factory",
+ "guid": "6f4a1652-bddd-4ea8-a487-cdec4861bc3b",
+ "id": "H01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/how-to-use-azure-key-vault-secrets-pipeline-activities"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Encrypt credentials for on-premises using SHIR data stores in Azure Data Factory",
+ "description": "You can encrypt and store credentials for any of your on-premises data stores (linked services with sensitive information) on a machine with self-hosted integration runtime.",
+ "service": "Azure Data Factory",
+ "guid": "c14aeb7e-66e8-4d9a-9bec-218e6436b173",
+ "id": "H01.06",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/data-factory/encrypt-credentials-self-hosted-integration-runtime"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Define roles and responsibilities to manage Microsoft Purview in control plane and data plane",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "6db55f57-9603-4334-adf9-cc23418db612",
+ "id": "I01.01",
+ "severity": "Medium"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Define roles and tasks required to deploy and manage Microsoft Purview inside an Azure subscription (control plane)",
+ "description": "Use Azure RBACs for this",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "8126504b-b47a-4393-a080-427294798b15",
+ "id": "I01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/best-practices"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Define roles and task needed to perform data management and governance using Microsoft Purview. (Data plane for Data Map and Data Catalog.)",
+ "description": "Use Microsoft Purview roles for this.",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "78b219a4-6ceb-4544-9513-5922744293bb",
+ "id": "I01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/purview/classic-data-governance-permissions#roles, https://learn.microsoft.com/azure/role-based-access-control/best-practices"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Assign roles to Microsoft Entra groups instead of assigning roles to individual users.",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "628637a5-5119-4b08-b8f5-854387e9cec1",
+ "id": "I01.04",
+ "severity": "Medium"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use Azure�Active Directory Entitlement Management�to map user access to Microsoft Entra groups using Access Packages.",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "66cd072a-f9b2-441a-a98a-535e737897e7",
+ "id": "I01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/active-directory/governance/entitlement-management-overview"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Enforce multifactor authentication for Microsoft Purview users, especially, for users with privileged roles such as collection admins, data source admins or data curators.",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "1ca7da8c-faa6-42a1-9949-56da97dc3a23",
+ "id": "I01.06",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use Microsoft Entra ID to provide authentication and authorization to all users, security groups registered in Entra, service principal and managed identities inside collections in Microsoft Purview",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "267b2258-6f4a-4165-8bdd-dea8a487cdec",
+ "id": "I01.07",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Define Least Privilege model and Lower exposure of privileged accounts",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "4861bc3b-c14a-4eb7-b66e-8d9a3bec218e",
+ "id": "I01.08",
+ "severity": "High"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Enable�end-to-end network isolation�using Private Link Service. (Microsoft Purview Data Map)",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "6436b173-6db5-45f5-9960-3334bdf9cc23",
+ "id": "J01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/purview/catalog-private-link-end-to-end"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Use�Microsoft Purview Firewall�to disable Public access. (Microsoft Purview Data Map)",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "418db612-8126-4504-ab47-a393a0804272",
+ "id": "J01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/purview/catalog-private-link-end-to-end#firewalls-to-restrict-public-access"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Deploy�Network Security Group (NSG) rules�for subnets where Azure data sources private endpoints, Microsoft Purview private endpoints and self-hosted runtime VMs are deployed. (Microsoft Purview Data Map)",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "94798b15-78b2-419a-96ce-b54435135922",
+ "id": "J01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-security#use-network-security-groups"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Implement Microsoft Purview with private endpoints managed by a Network Virtual Appliance, such as�Azure Firewall�for network inspection and network filtering. (Microsoft Purview Data Map)",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "744293bb-6286-437a-9511-9b08e8f58543",
+ "id": "J01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/firewall/overview"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Deploy private endpoints for Microsoft Purview accounts to add another layer of security, so only client calls that are originated from within the virtual network are allowed to access the Microsoft Purview account",
+ "description": "This private endpoint is also a prerequisite for the portal private endpoint. The Microsoft Purview�portal�private endpoint is required to enable connectivity to Microsoft Purview governance portal using a private network. Microsoft Purview can scan data sources in Azure or an on-premises environment by using ingestion private endpoints. Limitations on using private endpoints https://learn.microsoft.com/purview/catalog-private-link-troubleshoot",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "87e9cec1-66cd-4072-af9b-241a998a535e",
+ "id": "J01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/purview/concept-best-practices-network"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Block public access using Microsoft Purview firewall",
+ "description": "https://learn.microsoft.com/purview/catalog-private-link-end-to-end#firewalls-to-restrict-public-access. Limitation to be reviewed: https://learn.microsoft.com/purview/catalog-private-link-troubleshoot",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "b7bcdb3b-51eb-42ec-84ed-a6e59d8d9a2e",
+ "id": "J01.06",
+ "severity": "Medium"
+ },
+ {
+ "category": "Network security",
+ "subcategory": " ",
+ "text": "Use Network Security Groups to filter network traffic to and from Azure resources in an Azure virtual network",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "db217e67-6abf-4669-aa48-e5a96f2223ec",
+ "id": "J01.07",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/private-link/disable-private-endpoint-network-policy, https:/learn.microsoft.com/purview/concept-best-practices-security#use-network-security-groups"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "If you have sensitive data that cannot leave the boundary of your on-prem vnet it is highly recommended to use SHIR VMs inside your corporate vnet to extract your metadata ",
+ "description": "https://learn.microsoft.com/purview/concept-best-practices-security#apply-security-best-practices-for-self-hosted-runtime-vms",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "e8cb1231-8ca5-4017-b158-e3fb3aa3c2de",
+ "id": "K01.01",
+ "severity": "High"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Use Azure RBACs to restrict the access of your storage account (not managed by MS) only to intended users.",
+ "description": "Metadata is extracted and stored in Microsoft Purview Data Map, if you are not using managed storage account for your Purview account they are open to be accessed by all so implement proper RBACs and retrict the access of Data to only intended users. Applicable to Accounts deployed after December 15, 2023 (or deployed using API version 2023-05-01-preview onwards",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "7f3165c3-a87a-405b-9a20-9949bda47778",
+ "id": "K01.02",
+ "severity": "Medium"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data in rest is encrypted by microsoft managed keys",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "f24d1167-85c2-4fa5-9c56-a948008be7d7",
+ "id": "K01.03",
+ "severity": "Medium"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Data in transit is encrypted by TLS 1.3",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "27f7b9e9-1be1-4f38-aff3-9812bd463cbb",
+ "id": "K01.04",
+ "severity": "Medium"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Always use Azure key vaults to store all credentials if not using managed identities or without password need methods",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "bc8ac199-ebb9-41a4-9d90-dae2cc881370",
+ "id": "K01.05",
+ "severity": "High"
+ },
+ {
+ "category": "Protection against accidential deletion",
+ "subcategory": " ",
+ "text": "Prevent accidental deletion of Microsoft Purview accounts by applying resource Locks",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "6f7c0cba-fe61-4465-add4-57e927139b82",
+ "id": "L01.01",
+ "severity": "Medium"
+ },
+ {
+ "category": " ",
+ "subcategory": " ",
+ "text": "Plan for a break glass strategy for your Microsoft Entra tenant, Azure subscription and Microsoft Purview accounts to prevent tenant-wide account lockout.",
+ "description": "https://learn.microsoft.com/purview/concept-best-practices-collections#design-recommendations",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4722d928",
+ "id": "M01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access"
+ },
+ {
+ "category": "Additional security recommendation",
+ "subcategory": " ",
+ "text": "Integrate with Microsoft 365 and Microsoft Defender for Cloud",
+ "waf": "Security",
+ "service": "Microsoft Purview",
+ "guid": "15f51296-5398-4e6d-bd23-7dd142b16c21",
+ "id": "N01.01",
+ "severity": "Medium"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Define Least Privilege model and Lower exposure of privileged accounts",
+ "description": "Separate admin accounts from normal user accounts.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "id": "O01.01",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Configure single sign-on and unified login. Enable multi-factor authentication.",
+ "description": "Azure Databricks supports Microsoft Entra ID conditional access, which allows administrators to control where and when users are permitted to sign in to Azure Databricks. Conditional access policies can restrict sign-in to your corporate network or can require multi-factor authentication (MFA).",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "id": "O01.02",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/databricks/security/auth/#single-sign-on"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use token management.",
+ "description": "Customers can use the Token Management API or UI controls to enable or disable personal access tokens (PATs) for REST API authentication, limit the users who are allowed to use PATs, set the maximum lifetime for new tokens, and manage existing tokens. Highly-secure customers typically provision a maximum token lifetime for new tokens for a workspace. This feature requires the Premium pricing tier.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "352beee0-79b5-488d-bfc5-972cd4cd21b0",
+ "id": "O01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/admin/access-control/tokens"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Separate admin accounts from normal user accounts",
+ "description": "If you have Databricks administrators who are also normal users of the Databricks platform (for example, there�s a lead data engineer who administers the platform and also does data engineering work), Databricks recommends creating a separate account for administrative tasks. It�s important to note that as part of the Azure RBAC model, users that are given Contributor or above permissions to the Resource Group for a deployed Azure Databricks workspace automatically become administrators when they login to that workspace. Therefore, the same considerations outlined above should be applied to Azure portal users too.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "77036e5e-6b4b-4fd3-b503-547c1447dc56",
+ "id": "O01.04",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "SCIM synchronization of users and groups.",
+ "description": "SCIM (System for Cross-domain Identity Management) allows you to sync users and groups from Microsoft Entra ID to Azure Databricks. There are three major benefits of this approach: 1. When you remove a user, the user is automatically removed from Databricks. 2. Users can also be disabled temporarily via SCIM. Customers have used this capability for scenarios where customers believe that an account may be compromised and need to investigate 3. Groups are automatically synchronized Please refer to the documentation for detailed instructions on how to configure SCIM for Azure Databricks. This feature requires the Premium pricing tier",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "028a71ff-f1ce-415d-b3f0-d5e872d42e36",
+ "id": "O01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/admin/users-groups/scim/"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Limit cluster creation rights.",
+ "description": "Using either cluster policies or the older cluster ACLs, admins can define what users or groups within the organization are able to create clusters. Cluster ACLs allow you to specify which users can attach a notebook to a given cluster. Note that if a user shares a notebook already attached to a standard mode cluster, the recipient will also be able to execute code on that cluster. This does not apply to clusters that enforce user isolation: SQL Warehouses, high concurrency with table ACLs clusters, and high concurrency with credential passthrough clusters. Customers who use Unity Catalog can also enable single-user clusters to enforce isolation clusters.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "11cc57b4-a4b1-4410-b43a-58a9c2289b3d",
+ "id": "O01.06",
+ "severity": "Medium"
+ },
+ {
+ "category": " ",
+ "subcategory": " ",
+ "text": "Restrict workspace admins",
+ "description": "Account admins can configure a workspace setting called RestrictWorkspaceAdmins to restrict workspace admins to only change a job owner to themselves and the job run as setting to a service principal that they have the Service Principal User role on.",
+ "guid": "6b57dfc6-5546-41e1-a3e3-453a3c863964",
+ "id": "P01.01",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/databricks/admin/workspace-settings/restrict-workspace-admins"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Store passwords, secrets in Azure Key Vault",
+ "description": "It�s important to note that even if customers use Azure Key Vault to store their secrets, access controls still need to be defined within Azure Databricks. This is because the same service identity is used to retrieve the secret for all users of an Azure Databricks workspace.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "8b662d6c-15f5-4129-9539-8e6ded237dd1",
+ "id": "Q01.01",
+ "severity": "High"
+ },
+ {
+ "category": " ",
+ "subcategory": " ",
+ "text": "Regenerate/rotate keys if using them periodically",
+ "guid": "42b16c21-d799-49a6-96f4-389a8f42c78e",
+ "id": "R01.01",
+ "severity": "High"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use clusters that support user isolation.",
+ "description": "Clusters with user isolation include enforcement such that each user runs as a different non-privileged user account on the cluster host. Languages are also limited to those that can be implemented in an isolated manner (SQL and Python), and Spark APIs must be on an allowlist of those we believe to be isolation-safe.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "78c06a73-a22a-4495-9e7a-8dc4a20e27c3",
+ "id": "S01.01",
+ "severity": "Medium"
+ },
+ {
+ "category": "Identity and Access Management",
+ "subcategory": " ",
+ "text": "Use service principals to run production jobs. Use proper access control for workspace level (ACLs), account level (RBACs) and data level (Unity catalog) security controls",
+ "description": "It is against security best practices to tie production workloads to individual user accounts, and so we recommend configuring Service Principals within Databricks. Service Principles separate administrator and user actions from the workload and prevent workloads from being impacted if a user leaves an organization. With Databricks, you can configure jobs to run as service principals and generate Personal Access Tokens for Service Principals.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "e29711b1-352b-4eee-879b-588defc5972c",
+ "id": "S01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/security/auth/access-control/"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Avoid storing production data in DBFS.",
+ "description": "By default, DBFS is a filesystem that is accessible to all users of the given workspace and can be accessed via API. This is not necessarily a major data exfiltration concern as you can limit access to accessing data via the DBFS API or Databricks cli using IP access lists or private network access. However, as use of Azure Databricks grows and more users join a workspace, those users would have access to any data stored in DBFS, creating the potential for undesired information sharing. Databricks recommends that our customers do not store production data in DBFS.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "d4cd21b0-7703-46e5-b6b4-bfd3d503547c",
+ "id": "T01.01",
+ "severity": "High"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Encrypt storage and restrict access.",
+ "description": "For the storage accounts that you manage, it is your responsibility to ensure that the storage accounts are protected according to your requirements. Examples might include: Encryption with your customer-managed key, Restrict access to trusted networks with a storage firewall, Anonymous public access is not allowed",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "1447dc56-028a-471f-bf1c-e15dd3f0d5e8",
+ "id": "T01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/security/keys/customer-managed-keys"
+ },
+ {
+ "category": "Data Protection",
+ "subcategory": " ",
+ "text": "Add a customer-managed key for managed services and workspace storage",
+ "description": "Add a customer-managed key for select data stored within the Azure Databricks control plane, such as notebooks, secrets, Databricks SQL queries, and Databricks SQL query history and for the root storage account used for DBFS. Azure Databricks requires access to this key for ongoing operations. You can revoke access to the key to prevent Azure Databricks from accessing encrypted data within the control plane (or in our backups). This is like a �nuclear option� where the workspace ceases to function, but it provides an emergency control for extreme situations. This feature requires the Premium pricing tier.",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "72d42e36-11cc-457b-9a4b-1410e43a58a9",
+ "id": "T01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/security/keys/customer-managed-keys"
+ },
+ {
+ "category": "Networking",
+ "subcategory": " ",
+ "text": "Enable IP access lists to restrict access to certain IP addresses.",
+ "description": "Configure IP access lists that restrict the IP addresses that can authenticate to Databricks at account console and workspace level by checking if the user or API client is coming from a known good IP address range such as a VPN or office network. Established user sessions do not work if the user moves to a bad IP address, such as when disconnecting from the VPN. ",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "277de183-b1ac-4252-a9a9-b64608489a8f",
+ "id": "U01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/security/network/front-end/ip-access-list"
+ },
+ {
+ "category": "Networking",
+ "subcategory": " ",
+ "text": "Configure and use Azure Private Link to access Azure resources.",
+ "description": "Azure Private Link provides a private network route from one Azure environment to another. Private Link can be configured both between Azure Databricks users and the control plane, and also between the control plane and the data plane. Between Databricks users and the control plane, Private Link provides strong controls that limit the source for inbound requests. If a company already routes traffic through an Azure environment, they can use Private Link so that the communication between users and the Azure Databricks control plane does not traverse public IP addresses. This feature requires the Premium pricing tier. Use Azure Private Link to connect from Azure Databricks to your Azure resources. Not only does Private Link ensure",
+ "waf": "Security",
+ "service": "Azure Databricks",
+ "guid": "82db8eb9-d1ba-473b-86a5-a57eba8dd4b3",
+ "id": "U01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/databricks/security/network/classic/private-link"
+ }
+ ],
+ "categories": [
+ ],
+ "waf": [
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Security"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Performance"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "status": [
+ {
+ "name": "Not verified",
+ "description": "This check has not been looked at yet"
+ },
+ {
+ "name": "Open",
+ "description": "There is an action item associated to this check"
+ },
+ {
+ "name": "Fulfilled",
+ "description": "This check has been verified, and there are no further action items associated to it"
+ },
+ {
+ "name": "Not required",
+ "description": "Recommendation understood, but not needed by current requirements"
+ },
+ {
+ "name": "N/A",
+ "description": "Not applicable for current design"
+ }
+ ],
+ "severities": [
+ {
+ "name": "High"
+ },
+ {
+ "name": "Medium"
+ },
+ {
+ "name": "Low"
+ }
+ ],
+ "metadata": {
+ "name": "Use the 'Import latest checklist' button to get the latest version of a review checklist",
+ "state": "Preview",
+ "waf": "Security",
+ "timestamp": "10/17/2024 09:16:59"
+ }
+}
+
diff --git a/checklists/keyvault_checklist.en.json b/checklists/keyvault_checklist.en.json
index 22d87d85c..06511dda5 100644
--- a/checklists/keyvault_checklist.en.json
+++ b/checklists/keyvault_checklist.en.json
@@ -119,6 +119,19 @@
"cost": 1,
"severity": "Medium",
"link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "RBAC is recommended to control access to your key vault. Familiarize yourself with the Key Vault's access control guidance.",
+ "waf": "Security",
+ "service": "Key Vault",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "id": "05.01",
+ "cost": 1,
+ "severity": "Medium",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli"
}
],
"categories": [
@@ -206,6 +219,6 @@
"name": "Azure Key Vault",
"state": "Preview",
"waf": "reliability",
- "timestamp": "March 21, 2024"
+ "timestamp": "September 23, 2024"
}
-}
+}
\ No newline at end of file
diff --git a/checklists/keyvault_checklist.es.json b/checklists/keyvault_checklist.es.json
new file mode 100644
index 000000000..42951a981
--- /dev/null
+++ b/checklists/keyvault_checklist.es.json
@@ -0,0 +1,224 @@
+{
+ "categories": [
+ {
+ "name": "Gestión de identidades y accesos"
+ },
+ {
+ "name": "Topología de red y conectividad"
+ },
+ {
+ "name": "BC y RD"
+ },
+ {
+ "name": "Seguridad"
+ },
+ {
+ "name": "Administración"
+ },
+ {
+ "name": "Gobernanza"
+ },
+ {
+ "name": "Operaciones"
+ }
+ ],
+ "items": [
+ {
+ "category": "Gobernanza",
+ "cost": 1,
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "id": "01.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "subcategory": "Procedimientos recomendados de implementación",
+ "text": "Familiarícese con los procedimientos recomendados de Key Vault, como las recomendaciones de aislamiento, el control de acceso, la protección de datos, la copia de seguridad y el registro.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "cost": 1,
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "id": "02.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "subcategory": "Alta disponibilidad",
+ "text": "Key Vault es un servicio administrado y Microsoft se encargará de la conmutación por error dentro de la región y entre ellas. Familiarícese con la disponibilidad y la redundancia de Key Vault.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "cost": 1,
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "id": "02.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "subcategory": "Alta disponibilidad",
+ "text": "El contenido del almacén de claves se replica dentro de la región y en una región secundaria a una distancia mínima de 150 millas, pero dentro de la misma geografía para mantener una alta durabilidad de las claves y los secretos. Familiarícese con la replicación de datos de Key Vault.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "BC y RD",
+ "cost": 1,
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "id": "02.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "subcategory": "Alta disponibilidad",
+ "text": "Durante la conmutación por error, no se pueden cambiar las configuraciones y valores de la directiva de acceso o del firewall. El almacén de claves estará en modo de solo lectura durante la conmutación por error. Familiarícese con las instrucciones de conmutación por error de Key Vault.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Administración",
+ "cost": 1,
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "id": "03.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "subcategory": "Continuidad del negocio y recuperación ante desastres",
+ "text": "Al realizar una copia de seguridad de un objeto de almacén de claves, como un secreto, una clave o un certificado, la operación de copia de seguridad descargará el objeto como un blob cifrado. Este blob no se puede descifrar fuera de Azure. Para obtener datos utilizables de este blob, debe restaurar el blob en un almacén de claves dentro de la misma suscripción de Azure y la misma geografía de Azure. Familiarícese con las instrucciones de copia de seguridad y restauración de Key Vault.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Administración",
+ "cost": 1,
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "id": "03.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "subcategory": "Continuidad del negocio y recuperación ante desastres",
+ "text": "Si desea protegerse contra la eliminación accidental o malintencionada de los secretos, configure las características de protección contra eliminación temporal y purga en el almacén de claves.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Administración",
+ "cost": 1,
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "id": "03.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Bajo",
+ "subcategory": "Continuidad del negocio y recuperación ante desastres",
+ "text": "Los recursos eliminados temporalmente de Key Vault se conservan durante un período establecido de 90 días naturales. Familiarícese con las instrucciones de eliminación temporal de Key Vault.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Administración",
+ "cost": 1,
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "id": "03.04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Bajo",
+ "subcategory": "Continuidad del negocio y recuperación ante desastres",
+ "text": "Descripción de las limitaciones de la copia de seguridad de Key Vault. Key Vault no admite la capacidad de realizar copias de seguridad de más de 500 versiones anteriores de un objeto de clave, secreto o certificado. Al intentar hacer una copia de seguridad de una clave, un secreto o un objeto de certificado, es posible que se produzca un error. No es posible eliminar versiones anteriores de una clave, un secreto o un certificado.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Administración",
+ "cost": 1,
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "id": "03.05",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Bajo",
+ "subcategory": "Continuidad del negocio y recuperación ante desastres",
+ "text": "Actualmente, Key Vault no proporciona una manera de realizar una copia de seguridad de un almacén de claves completo en una sola operación y las claves, los secretos y los certificados deben respaldarse de forma individual. Familiarícese con las instrucciones de copia de seguridad y restauración de Key Vault.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Administración",
+ "cost": 1,
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "id": "04.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "subcategory": "Continuidad del negocio y recuperación ante desastres",
+ "text": "Se recomienda la protección de purga cuando se utilizan claves para el cifrado para evitar la pérdida de datos. La protección de purga es un comportamiento opcional de Key Vault y no está habilitada de forma predeterminada. La protección de purga solo se puede habilitar una vez que se habilita la eliminación temporal. Se puede activar a través de CLI, PowerShell o Portal.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Seguridad",
+ "cost": 1,
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "id": "05.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Se recomienda RBAC para controlar el acceso al almacén de claves. Familiarícese con las instrucciones de control de acceso de Key Vault.",
+ "waf": "Seguridad"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Key Vault",
+ "state": "Preview",
+ "timestamp": "September 23, 2024",
+ "waf": "reliability"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Medio"
+ },
+ {
+ "name": "Bajo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta comprobación aún no se ha examinado",
+ "name": "No verificado"
+ },
+ {
+ "description": "Hay un elemento de acción asociado a esta comprobación",
+ "name": "Abrir"
+ },
+ {
+ "description": "Esta comprobación se ha verificado y no hay más elementos de acción asociados a ella",
+ "name": "Cumplido"
+ },
+ {
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
+ "name": "No es necesario"
+ },
+ {
+ "description": "No aplicable para el diseño actual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidad"
+ },
+ {
+ "name": "Seguridad"
+ },
+ {
+ "name": "Costar"
+ },
+ {
+ "name": "Operaciones"
+ },
+ {
+ "name": "Rendimiento"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sí"
+ },
+ {
+ "name": "No"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/keyvault_checklist.ja.json b/checklists/keyvault_checklist.ja.json
new file mode 100644
index 000000000..7cf14d6ae
--- /dev/null
+++ b/checklists/keyvault_checklist.ja.json
@@ -0,0 +1,224 @@
+{
+ "categories": [
+ {
+ "name": "ID およびアクセス管理"
+ },
+ {
+ "name": "ネットワーク トポロジと接続性"
+ },
+ {
+ "name": "BC と DR"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "管理"
+ },
+ {
+ "name": "統治"
+ },
+ {
+ "name": "オペレーションズ"
+ }
+ ],
+ "items": [
+ {
+ "category": "統治",
+ "cost": 1,
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "id": "01.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "高い",
+ "subcategory": "デプロイのベスト プラクティス",
+ "text": "Key Vault のベスト プラクティス (分離の推奨事項、アクセス制御、データ保護、バックアップ、ログ記録など) について理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "cost": 1,
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "id": "02.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "subcategory": "高可用性",
+ "text": "Key Vault はマネージド サービスであり、Microsoft はリージョン内およびリージョン間のフェールオーバーを処理します。Key Vault の可用性と冗長性について理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "cost": 1,
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "id": "02.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "subcategory": "高可用性",
+ "text": "キー コンテナーの内容は、リージョン内と少なくとも 150 マイル離れたセカンダリ リージョンにレプリケートされますが、キーとシークレットの高い持続性を維持するために、同じ地域内でレプリケートされます。Key Vault のデータ レプリケーションについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "BC と DR",
+ "cost": 1,
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "id": "02.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "subcategory": "高可用性",
+ "text": "フェールオーバー中は、アクセス ポリシーまたはファイアウォールの構成と設定を変更することはできません。キー コンテナーは、フェールオーバー中は読み取り専用モードになります。Key Vault のフェールオーバー ガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "id": "03.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "subcategory": "ビジネス継続性と災害復旧",
+ "text": "シークレット、キー、証明書などのキー コンテナー オブジェクトをバックアップすると、バックアップ操作によってオブジェクトが暗号化された BLOB としてダウンロードされます。この BLOB は、Azure の外部で暗号化を解除できません。この BLOB から使用可能なデータを取得するには、BLOB を同じ Azure サブスクリプションと Azure 地域内のキー コンテナーに復元する必要があります。Key Vault のバックアップと復元のガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "id": "03.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "高い",
+ "subcategory": "ビジネス継続性と災害復旧",
+ "text": "シークレットの偶発的または悪意のある削除に対する保護が必要な場合は、キー コンテナーで論理的な削除と消去保護機能を構成します。",
+ "waf": "確実"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "id": "03.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "低い",
+ "subcategory": "ビジネス継続性と災害復旧",
+ "text": "Key Vault の論理的に削除されたリソースは、90 暦日の一定期間保持されます。Key Vault の論理的な削除のガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "id": "03.04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低い",
+ "subcategory": "ビジネス継続性と災害復旧",
+ "text": "Key Vault のバックアップの制限事項を理解します。Key Vault では、キー、シークレット、または証明書オブジェクトの過去のバージョンを 500 個以上バックアップする機能はサポートされていません。キー、シークレット、または証明書オブジェクトをバックアップしようとすると、エラーが発生する可能性があります。以前のバージョンのキー、シークレット、または証明書を削除することはできません。",
+ "waf": "確実"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "id": "03.05",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低い",
+ "subcategory": "ビジネス継続性と災害復旧",
+ "text": "現在、Key Vault では 1 回の操作でキー コンテナー全体をバックアップする方法は提供されておらず、キー、シークレット、証明書を個別にバックアップする必要があります。Key Vault のバックアップと復元のガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "id": "04.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "subcategory": "ビジネス継続性と災害復旧",
+ "text": "データの損失を防ぐために、暗号化にキーを使用する場合は、パージ保護をお勧めします。消去保護はオプションの Key Vault の動作であり、既定では有効になっていません。消去保護は、論理的な削除が有効になった場合にのみ有効にできます。CLI、PowerShell、またはポータルを使用してオンにすることができます。",
+ "waf": "確実"
+ },
+ {
+ "category": "安全",
+ "cost": 1,
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "id": "05.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "RBAC は、キー コンテナーへのアクセスを制御するために推奨されます。Key Vault のアクセス制御ガイダンスについて理解しておいてください。",
+ "waf": "安全"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Key Vault",
+ "state": "Preview",
+ "timestamp": "September 23, 2024",
+ "waf": "reliability"
+ },
+ "severities": [
+ {
+ "name": "高い"
+ },
+ {
+ "name": "中程度"
+ },
+ {
+ "name": "低い"
+ }
+ ],
+ "status": [
+ {
+ "description": "このチェックはまだ見ていません",
+ "name": "未確認"
+ },
+ {
+ "description": "このチェックにはアクションアイテムが関連付けられています",
+ "name": "開ける"
+ },
+ {
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
+ "name": "達成"
+ },
+ {
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
+ },
+ {
+ "description": "現在のデザインには適用されません",
+ "name": "該当なし"
+ }
+ ],
+ "waf": [
+ {
+ "name": "確実"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "費用"
+ },
+ {
+ "name": "オペレーションズ"
+ },
+ {
+ "name": "パフォーマンス"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "はい"
+ },
+ {
+ "name": "いいえ"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/keyvault_checklist.ko.json b/checklists/keyvault_checklist.ko.json
new file mode 100644
index 000000000..71e16a630
--- /dev/null
+++ b/checklists/keyvault_checklist.ko.json
@@ -0,0 +1,224 @@
+{
+ "categories": [
+ {
+ "name": "ID 및 액세스 관리"
+ },
+ {
+ "name": "네트워크 토폴로지 및 연결성"
+ },
+ {
+ "name": "BC 및 DR"
+ },
+ {
+ "name": "안전"
+ },
+ {
+ "name": "경영"
+ },
+ {
+ "name": "지배구조"
+ },
+ {
+ "name": "작업"
+ }
+ ],
+ "items": [
+ {
+ "category": "지배구조",
+ "cost": 1,
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "id": "01.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "높다",
+ "subcategory": "배포 모범 사례Deployment best practices",
+ "text": "격리 권장 사항, 액세스 제어, 데이터 보호, 백업 및 로깅과 같은 Key Vault의 모범 사례를 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "cost": 1,
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "id": "02.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "보통",
+ "subcategory": "고가용성",
+ "text": "Key Vault는 관리형 서비스이며 Microsoft는 지역 내 및 지역 간에 장애 조치(failover)를 처리합니다. Key Vault의 가용성 및 중복성을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "cost": 1,
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "id": "02.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "보통",
+ "subcategory": "고가용성",
+ "text": "키 자격 증명 모음의 콘텐츠는 키와 비밀의 높은 내구성을 유지하기 위해 지역 내에서 그리고 최소 150마일 떨어진 보조 지역에 복제되지만 동일한 지역 내에 복제됩니다. Key Vault의 데이터 복제를 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "BC 및 DR",
+ "cost": 1,
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "id": "02.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "보통",
+ "subcategory": "고가용성",
+ "text": "장애 조치(failover) 중에는 액세스 정책 또는 방화벽 구성 및 설정을 변경할 수 없습니다. 키 자격 증명 모음은 장애 조치(failover) 중에 읽기 전용 모드가 됩니다. Key Vault의 장애 조치(failover) 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "경영",
+ "cost": 1,
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "id": "03.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "보통",
+ "subcategory": "비즈니스 연속성 및 재해 복구",
+ "text": "비밀, 키 또는 인증서와 같은 키 자격 증명 모음 개체를 백업할 때 백업 작업은 개체를 암호화된 Blob으로 다운로드합니다. 이 Blob은 Azure 외부에서 암호 해독할 수 없습니다. 이 Blob에서 사용 가능한 데이터를 가져오려면 동일한 Azure 구독 및 Azure geography 내의 키 자격 증명 모음으로 Blob을 복원해야 합니다. Key Vault의 백업 및 복원 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "경영",
+ "cost": 1,
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "id": "03.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "높다",
+ "subcategory": "비즈니스 연속성 및 재해 복구",
+ "text": "비밀의 우발적 또는 악의적 삭제로부터 보호하려면 키 자격 증명 모음에서 일시 삭제 및 제거 보호 기능을 구성합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "경영",
+ "cost": 1,
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "id": "03.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "낮다",
+ "subcategory": "비즈니스 연속성 및 재해 복구",
+ "text": "Key Vault의 일시 삭제된 리소스는 90일의 설정된 기간 동안 보존됩니다. Key Vault의 일시 삭제 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "경영",
+ "cost": 1,
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "id": "03.04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "낮다",
+ "subcategory": "비즈니스 연속성 및 재해 복구",
+ "text": "Key Vault의 백업 제한 사항을 이해합니다. Key Vault는 500개가 넘는 이전 버전의 키, 비밀 또는 인증서 개체를 백업하는 기능을 지원하지 않습니다. 키, 비밀 또는 인증서 개체를 백업하려고 하면 오류가 발생할 수 있습니다. 이전 버전의 키, 비밀 또는 인증서는 삭제할 수 없습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "경영",
+ "cost": 1,
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "id": "03.05",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "낮다",
+ "subcategory": "비즈니스 연속성 및 재해 복구",
+ "text": "Key Vault는 현재 단일 작업으로 전체 키 자격 증명 모음을 백업하는 방법을 제공하지 않으며 키, 비밀 및 인증서는 개별적으로 백업해야 합니다. Key Vault의 백업 및 복원 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "경영",
+ "cost": 1,
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "id": "04.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "보통",
+ "subcategory": "비즈니스 연속성 및 재해 복구",
+ "text": "데이터 손실을 방지하기 위해 암호화에 키를 사용하는 경우 제거 보호를 사용하는 것이 좋습니다. 제거 보호는 선택적 Key Vault 동작이며 기본적으로 사용하도록 설정되어 있지 않습니다. 제거 보호는 일시 삭제를 사용하도록 설정한 후에만 사용하도록 설정할 수 있습니다. CLI, PowerShell 또는 포털을 통해 켤 수 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "안전",
+ "cost": 1,
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "id": "05.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "RBAC는 키 자격 증명 모음에 대한 액세스를 제어하는 데 권장됩니다. Key Vault의 액세스 제어 지침을 숙지합니다.",
+ "waf": "안전"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Key Vault",
+ "state": "Preview",
+ "timestamp": "September 23, 2024",
+ "waf": "reliability"
+ },
+ "severities": [
+ {
+ "name": "높다"
+ },
+ {
+ "name": "보통"
+ },
+ {
+ "name": "낮다"
+ }
+ ],
+ "status": [
+ {
+ "description": "이 검사는 아직 검토되지 않았습니다",
+ "name": "확인되지 않음"
+ },
+ {
+ "description": "이 검사와 연관된 작업 항목이 있습니다",
+ "name": "열다"
+ },
+ {
+ "description": "이 검사는 확인되었으며 이와 관련된 추가 작업 항목이 없습니다",
+ "name": "성취"
+ },
+ {
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
+ "name": "필요 없음"
+ },
+ {
+ "description": "현재 설계에는 적용되지 않습니다.",
+ "name": "해당 없음"
+ }
+ ],
+ "waf": [
+ {
+ "name": "신뢰도"
+ },
+ {
+ "name": "안전"
+ },
+ {
+ "name": "비용"
+ },
+ {
+ "name": "작업"
+ },
+ {
+ "name": "공연"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "예"
+ },
+ {
+ "name": "아니요"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/keyvault_checklist.pt.json b/checklists/keyvault_checklist.pt.json
new file mode 100644
index 000000000..2172bae1d
--- /dev/null
+++ b/checklists/keyvault_checklist.pt.json
@@ -0,0 +1,224 @@
+{
+ "categories": [
+ {
+ "name": "Gerenciamento de identidade e acesso"
+ },
+ {
+ "name": "Topologia e conectividade de rede"
+ },
+ {
+ "name": "BC e DR"
+ },
+ {
+ "name": "Segurança"
+ },
+ {
+ "name": "Gestão"
+ },
+ {
+ "name": "Governança"
+ },
+ {
+ "name": "Operações"
+ }
+ ],
+ "items": [
+ {
+ "category": "Governança",
+ "cost": 1,
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "id": "01.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "subcategory": "Práticas recomendadas de implantação",
+ "text": "Familiarize-se com as práticas recomendadas do Key Vault, como recomendações de isolamento, controle de acesso, proteção de dados, backup e registro em log.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "cost": 1,
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "id": "02.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "Média",
+ "subcategory": "Alta disponibilidade",
+ "text": "O Key Vault é um serviço gerenciado e a Microsoft lidará com o failover dentro e entre regiões. Familiarize-se com a disponibilidade e a redundância do Key Vault.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "cost": 1,
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "id": "02.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "Média",
+ "subcategory": "Alta disponibilidade",
+ "text": "O conteúdo do cofre de chaves é replicado dentro da região e para uma região secundária a pelo menos 150 milhas de distância, mas dentro da mesma geografia para manter a alta durabilidade de suas chaves e segredos. Familiarize-se com a replicação de dados do Key Vault.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "BC e DR",
+ "cost": 1,
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "id": "02.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "Média",
+ "subcategory": "Alta disponibilidade",
+ "text": "Durante o failover, as configurações e configurações de política de acesso ou firewall não podem ser alteradas. O cofre de chaves estará no modo somente leitura durante o failover. Familiarize-se com as diretrizes de failover do Key Vault.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão",
+ "cost": 1,
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "id": "03.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "Média",
+ "subcategory": "Continuidade de negócios e recuperação de desastres",
+ "text": "Quando você faz backup de um objeto do cofre de chaves, como um segredo, uma chave ou um certificado, a operação de backup baixa o objeto como um blob criptografado. Esse blob não pode ser descriptografado fora do Azure. Para obter dados utilizáveis desse blob, você deve restaurar o blob em um cofre de chaves dentro da mesma assinatura do Azure e da mesma geografia do Azure. Familiarize-se com as diretrizes de backup e restauração do Key Vault.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão",
+ "cost": 1,
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "id": "03.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "subcategory": "Continuidade de negócios e recuperação de desastres",
+ "text": "Se você quiser proteção contra exclusão acidental ou mal-intencionada de seus segredos, configure recursos de proteção de exclusão reversível e limpeza em seu cofre de chaves.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão",
+ "cost": 1,
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "id": "03.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Baixo",
+ "subcategory": "Continuidade de negócios e recuperação de desastres",
+ "text": "Os recursos excluídos temporariamente do Key Vault são retidos por um período definido de 90 dias corridos. Familiarize-se com as diretrizes de exclusão reversível do Key Vault.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão",
+ "cost": 1,
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "id": "03.04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Baixo",
+ "subcategory": "Continuidade de negócios e recuperação de desastres",
+ "text": "Entenda as limitações de backup do Key Vault. O Key Vault não dá suporte à capacidade de fazer backup de mais de 500 versões anteriores de um objeto de chave, segredo ou certificado. A tentativa de fazer backup de uma chave, segredo ou objeto de certificado pode resultar em um erro. Não é possível excluir versões anteriores de uma chave, segredo ou certificado.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão",
+ "cost": 1,
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "id": "03.05",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Baixo",
+ "subcategory": "Continuidade de negócios e recuperação de desastres",
+ "text": "Atualmente, o Key Vault não fornece uma maneira de fazer backup de um cofre de chaves inteiro em uma única operação e chaves, segredos e certificados devem ser copiados individualmente. Familiarize-se com as diretrizes de backup e restauração do Key Vault.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão",
+ "cost": 1,
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "id": "04.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "Média",
+ "subcategory": "Continuidade de negócios e recuperação de desastres",
+ "text": "A proteção contra limpeza é recomendada ao usar chaves para criptografia para evitar a perda de dados. A proteção contra limpeza é um comportamento opcional do Key Vault e não está habilitada por padrão. A proteção contra limpeza só pode ser habilitada depois que a exclusão reversível estiver habilitada. Ele pode ser ativado via CLI, PowerShell ou Portal.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Segurança",
+ "cost": 1,
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "id": "05.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "O RBAC é recomendado para controlar o acesso ao cofre de chaves. Familiarize-se com as diretrizes de controle de acesso do Key Vault.",
+ "waf": "Segurança"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Key Vault",
+ "state": "Preview",
+ "timestamp": "September 23, 2024",
+ "waf": "reliability"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Média"
+ },
+ {
+ "name": "Baixo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta verificação ainda não foi analisada",
+ "name": "Não verificado"
+ },
+ {
+ "description": "Há um item de ação associado a essa verificação",
+ "name": "Abrir"
+ },
+ {
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
+ "name": "Cumprido"
+ },
+ {
+ "description": "Recomendação compreendida, mas não necessária pelos requisitos atuais",
+ "name": "Não é necessário"
+ },
+ {
+ "description": "Não aplicável para o projeto atual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidade"
+ },
+ {
+ "name": "Segurança"
+ },
+ {
+ "name": "Custar"
+ },
+ {
+ "name": "Operações"
+ },
+ {
+ "name": "Desempenho"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sim"
+ },
+ {
+ "name": "Não"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/keyvault_checklist.zh-Hant.json b/checklists/keyvault_checklist.zh-Hant.json
new file mode 100644
index 000000000..be96fafec
--- /dev/null
+++ b/checklists/keyvault_checklist.zh-Hant.json
@@ -0,0 +1,224 @@
+{
+ "categories": [
+ {
+ "name": "身份和訪問管理"
+ },
+ {
+ "name": "網路拓撲和連接"
+ },
+ {
+ "name": "BC 和DR"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "管理"
+ },
+ {
+ "name": "統轄"
+ },
+ {
+ "name": "操作"
+ }
+ ],
+ "items": [
+ {
+ "category": "統轄",
+ "cost": 1,
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "id": "01.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "高",
+ "subcategory": "部署最佳實踐",
+ "text": "熟悉 Key Vault 的最佳實踐,例如隔離建議、訪問控制、數據保護、備份和日誌記錄。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "cost": 1,
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "id": "02.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "中等",
+ "subcategory": "高可用性",
+ "text": "Key Vault 是一項託管服務,Microsoft 將處理區域內和區域之間的故障轉移。熟悉 Key Vault 的可用性和冗餘。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "cost": 1,
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "id": "02.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "中等",
+ "subcategory": "高可用性",
+ "text": "密鑰保管庫的內容將在區域內複製到至少 150 英里外的次要區域,但要在同一地理位置內,以保持金鑰和機密的高持久性。熟悉 Key Vault 的數據複製。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "BC 和DR",
+ "cost": 1,
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "id": "02.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "中等",
+ "subcategory": "高可用性",
+ "text": "在故障轉移期間,無法訪問策略或防火牆配置和設置。在故障轉移期間,金鑰保管庫將處於只讀模式。熟悉 Key Vault 的故障轉移指南。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "id": "03.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "中等",
+ "subcategory": "業務連續性和災難恢復",
+ "text": "備份金鑰保管庫物件(例如機密、金鑰或證書)時,備份操作會將該物件下載為加密的 blob。無法在 Azure 外部解密此 blob。若要從此 blob 獲取可用數據,必須將 blob 還原到同一 Azure 訂閱和 Azure 地理位置中的金鑰保管庫中。熟悉 Key Vault 的備份和還原指南。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "id": "03.02",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "高",
+ "subcategory": "業務連續性和災難恢復",
+ "text": "如果要防止意外或惡意刪除機密,請在密鑰保管庫上配置軟刪除和清除保護功能。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "id": "03.03",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "低",
+ "subcategory": "業務連續性和災難恢復",
+ "text": "Key Vault 的軟刪除資源將保留 90 個日曆日的固定期限。熟悉 Key Vault 的軟刪除指南。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "id": "03.04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低",
+ "subcategory": "業務連續性和災難恢復",
+ "text": "瞭解 Key Vault 的備份限制。Key Vault 不支援備份超過 500 個金鑰、機密或證書對象的過去版本。嘗試備份金鑰、金鑰或證書物件可能會導致錯誤。無法刪除金鑰、金鑰或證書的早期版本。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "id": "03.05",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低",
+ "subcategory": "業務連續性和災難恢復",
+ "text": "Key Vault 目前不提供在單個操作中備份整個 Key Vault 的方法,並且必須單獨備份密鑰、機密和證書。熟悉 Key Vault 的備份和還原指南。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "管理",
+ "cost": 1,
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "id": "04.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "中等",
+ "subcategory": "業務連續性和災難恢復",
+ "text": "使用金鑰進行加密時,建議使用清除保護,以防止數據丟失。清除保護是一種可選的 Key Vault 行為,預設情況下未啟用。只有在啟用軟刪除後,才能啟用清除保護。可以通過 CLI、PowerShell 或 Portal 打開它。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "安全",
+ "cost": 1,
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "id": "05.01",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "建議使用 RBAC 來控制對 Key Vault 的訪問。熟悉 Key Vault 的訪問控制指南。",
+ "waf": "安全"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Key Vault",
+ "state": "Preview",
+ "timestamp": "September 23, 2024",
+ "waf": "reliability"
+ },
+ "severities": [
+ {
+ "name": "高"
+ },
+ {
+ "name": "中等"
+ },
+ {
+ "name": "低"
+ }
+ ],
+ "status": [
+ {
+ "description": "尚未查看此檢查",
+ "name": "未驗證"
+ },
+ {
+ "description": "存在與此檢查關聯的操作項",
+ "name": "打開"
+ },
+ {
+ "description": "此檢查已經過驗證,沒有與之關聯的其他操作項",
+ "name": "實現"
+ },
+ {
+ "description": "建議已理解,但當前要求不需要",
+ "name": "不需要"
+ },
+ {
+ "description": "不適用於當前設計",
+ "name": "不適用"
+ }
+ ],
+ "waf": [
+ {
+ "name": "可靠性"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "成本"
+ },
+ {
+ "name": "操作"
+ },
+ {
+ "name": "性能"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "是的"
+ },
+ {
+ "name": "不"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/network_appdelivery_checklist.en.json b/checklists/network_appdelivery_checklist.en.json
index 865b67d2d..3407ea617 100644
--- a/checklists/network_appdelivery_checklist.en.json
+++ b/checklists/network_appdelivery_checklist.en.json
@@ -1,16 +1,5 @@
{
"items": [
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal",
- "waf": "Operations",
- "service": "Front Door",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "id": "A01.01",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "App delivery",
@@ -94,7 +83,7 @@
"id": "A01.08",
"severity": "Medium",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview"
+ "link": "https://learn.microsoft.com/azure/application-gateway/tutorial-protect-application-gateway-ddos"
},
{
"category": "Network Topology and Connectivity",
@@ -122,18 +111,6 @@
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "id": "A01.11",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "App delivery",
@@ -183,78 +160,6 @@
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Deploy your WAF policy for Front Door in 'Prevention' mode.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "id": "A01.16",
- "ammp": true,
- "severity": "High",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Avoid combining Azure Traffic Manager and Azure Front Door.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "id": "A01.17",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "id": "A01.18",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
- "waf": "Performance",
- "service": "Front Door",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "id": "A01.19",
- "severity": "Low",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
- "waf": "Reliability",
- "service": "Front Door",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "id": "A01.20",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
- "waf": "Performance",
- "service": "Front Door",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "id": "A01.21",
- "severity": "Low",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "Load Balancer",
@@ -268,172 +173,10 @@
"graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
"link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
- "waf": "Operations",
- "service": "Front Door",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "id": "A01.23",
- "ammp": true,
- "severity": "High",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
- "waf": "Operations",
- "service": "Front Door",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "id": "A01.24",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "id": "A01.25",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "id": "A01.26",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "id": "A01.27",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Tune the Azure Front Door WAF for your workload. Reduce false positive detections.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "id": "A01.28",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "id": "A01.29",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "id": "A01.30",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "id": "A01.31",
- "ammp": true,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "id": "A01.32",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "id": "A01.33",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
- "waf": "Security",
- "service": "Front Door",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "id": "A01.34",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "id": "A01.35",
- "severity": "Low",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic"
- },
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "id": "A01.36",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
- "text": "Enable the Azure Application Gateway WAF bot protection rule set The bot rules detect good and bad bots.",
+ "text": "Enable the Azure Application Gateway WAF bot protection rule set. The bot rules detect good and bad bots.",
"waf": "Security",
"service": "App Gateway",
"guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
@@ -446,19 +189,20 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
- "text": "Enable request body inspection feature enabled in Azure Application Gateway WAF policy.",
+ "text": "Ensure if request body inspection feature is enabled in Azure Application Gateway WAF policy.",
"waf": "Security",
"service": "App Gateway",
"guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
"id": "A01.38",
"ammp": true,
"severity": "High",
+ "graph": "resources | where type =~ 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | extend compliant = (properties['policySettings']['requestBodyCheck'] == 'true' and properties['policySettings']['state'] =~ 'Enabled') | distinct id, name, compliant",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection"
},
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
- "text": "Tune the Azure Application Gateway WAF for your workload. Reduce false positive detections.",
+ "text": "Tune the Azure Application Gateway WAF in detection mode for your workload. Reduce false positive detections.",
"waf": "Security",
"service": "App Gateway",
"guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
@@ -477,8 +221,7 @@
"id": "A01.40",
"ammp": true,
"severity": "High",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings"
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations"
},
{
"category": "Network Topology and Connectivity",
@@ -546,17 +289,6 @@
"severity": "Medium",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Add diagnostic settings to save your Azure Front Door WAF logs.",
- "waf": "Operations",
- "service": "Front Door",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "id": "A01.47",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
@@ -568,17 +300,6 @@
"severity": "Medium",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
- "waf": "Operations",
- "service": "Front Door",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "id": "A01.49",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
@@ -612,17 +333,6 @@
"severity": "Medium",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway"
},
- {
- "category": "Network Topology and Connectivity",
- "subcategory": "Front Door",
- "text": "Make sure your origins only take traffic from your Azure Front Door instance.",
- "waf": "Security",
- "service": "Front Door",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "id": "A01.53",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions"
- },
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
@@ -632,7 +342,9 @@
"guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
"id": "A01.54",
"severity": "High",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways'| extend compliant = (properties['backendHttpSettingsCollection'][0]['properties']['port'] =~ '443') |where properties['backendHttpSettingsCollection'][0]['properties']['port'] =~ '443'|distinct id,name,compliant",
"link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview"
+
},
{
"category": "Network Topology and Connectivity",
@@ -670,7 +382,7 @@
{
"category": "Network Topology and Connectivity",
"subcategory": "App Gateway",
- "text": "Enable connection draining during planned service updates to prevent connection loss to existing membrs of the backend pool",
+ "text": "Enable connection draining during planned service updates to prevent connection loss to existing members of the backend pool",
"waf": "Security",
"service": "App Gateway",
"guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
@@ -823,6 +535,6 @@
"name": "Azure Application Delivery Networking",
"state": "GA",
"waf": "all",
- "timestamp": "March 15, 2024"
+ "timestamp": "September 23, 2024"
}
}
\ No newline at end of file
diff --git a/checklists/network_appdelivery_checklist.es.json b/checklists/network_appdelivery_checklist.es.json
index 6720132f4..00a6ac527 100644
--- a/checklists/network_appdelivery_checklist.es.json
+++ b/checklists/network_appdelivery_checklist.es.json
@@ -1,34 +1,23 @@
{
"categories": [
{
- "name": "Topología y conectividad de red"
+ "name": "Topología de red y conectividad"
}
],
"items": [
{
- "category": "Topología y conectividad de red",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "id": "A01.01",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Si usa certificados TLS administrados por el cliente con Azure Front Door, use la versión de certificado \"más reciente\". Reduzca el riesgo de interrupciones causadas por la renovación manual de certificados",
- "waf": "Operaciones"
- },
- {
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
"id": "A01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
"severity": "Medio",
"subcategory": "Entrega de aplicaciones",
- "text": "Realice la entrega de aplicaciones dentro de las zonas de aterrizaje tanto para aplicaciones internas (corporativas) como externas (en línea).",
+ "text": "Realice la entrega de aplicaciones dentro de las zonas de aterrizaje para aplicaciones internas (corporativas) y externas (en línea).",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
"guid": "553585a6-abe0-11ed-afa1-0242ac120002",
"id": "A01.03",
@@ -41,7 +30,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
"guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
"id": "A01.04",
@@ -49,22 +38,22 @@
"service": "Load Balancer",
"severity": "Medio",
"subcategory": "Equilibrador de carga",
- "text": "Asegúrese de que usa la SKU estándar para Azure Load Balancers",
+ "text": "Asegúrese de que usa la SKU estándar para los equilibradores de carga de Azure.",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "9432621a-8397-4654-a882-5bc856b7ef83",
"id": "A01.05",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
"service": "Load Balancer",
"severity": "Medio",
"subcategory": "Equilibrador de carga",
- "text": "Asegúrese de que las direcciones IP de front-end de Load Balancers tengan redundancia de zona (a menos que necesite front-end zonal).",
+ "text": "Asegúrese de que las direcciones IP de front-end de Load Balancers sean redundantes de zona (a menos que necesite front-end zonales).",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
"guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
"id": "A01.06",
@@ -77,32 +66,32 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
- "description": "La administración de proxies inversos en general y de WAF en particular está más cerca de la aplicación que de la red, por lo que pertenecen a la misma suscripción que la aplicación. La centralización de Application Gateway y WAF en la suscripción de conectividad puede ser correcta si la administra un solo equipo.",
+ "category": "Topología de red y conectividad",
+ "description": "La administración de proxies inversos en general y WAF en particular está más cerca de la aplicación que de las redes, por lo que pertenecen a la misma suscripción que la aplicación. La centralización de Application Gateway y WAF en la suscripción de conectividad puede ser correcta si la administra un solo equipo.",
"guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
"id": "A01.07",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "Medio",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Implemente Azure Application Gateway v2 o aplicaciones virtuales de red de asociados que se usan para proxy de conexiones HTTP(S) entrantes dentro de la red virtual de la zona de aterrizaje y con las aplicaciones que están protegiendo.",
+ "text": "Implemente Azure Application Gateway v2 o NVA de asociados que se usan para proxy de conexiones HTTP(S) entrantes dentro de la red virtual de la zona de aterrizaje y con las aplicaciones que protegen.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
"id": "A01.08",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "Medio",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Use una red DDoS o planes de protección IP para todas las direcciones IP públicas en las zonas de aterrizaje de la aplicación.",
+ "text": "Utilice una red DDoS o planes de protección IP para todas las direcciones IP públicas en las zonas de aterrizaje de aplicaciones.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
"guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
"id": "A01.09",
@@ -115,7 +104,7 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
"guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
"id": "A01.10",
@@ -128,32 +117,20 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "id": "A01.11",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Use Azure Front Door con directivas de WAF para entregar y ayudar a proteger aplicaciones HTTP/S globales que abarcan varias regiones de Azure.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3f29812b-2363-4cef-b179-b599de0d5973",
"id": "A01.12",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "Front Door",
"severity": "Medio",
"subcategory": "Entrega de aplicaciones",
- "text": "Al usar Front Door y Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Front Door. Bloquee Application Gateway para recibir tráfico solo de Front Door.",
+ "text": "Al usar Front Door y Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Front Door. Bloquee Application Gateway para recibir tráfico solo desde Front Door.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
"ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
"id": "A01.13",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -165,7 +142,7 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
"id": "A01.14",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
@@ -177,92 +154,20 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
"id": "A01.15",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "Medio",
"subcategory": "Entrega de aplicaciones",
- "text": "Para reducir el número de puertos de firewall abiertos para las conexiones entrantes en la red, considere la posibilidad de usar Microsoft Entra ID Application Proxy para proporcionar a los usuarios remotos acceso seguro y autenticado a las aplicaciones internas.",
+ "text": "Para reducir el número de puertos de firewall abiertos para las conexiones entrantes en la red, considere la posibilidad de usar el proxy de aplicación de Microsoft Entra ID para proporcionar a los usuarios remotos acceso seguro y autenticado a las aplicaciones internas.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Seguridad"
},
{
"ammp": true,
- "category": "Topología y conectividad de red",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "id": "A01.16",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Implemente la directiva de WAF para Front Door en modo de \"prevención\".",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "id": "A01.17",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Evite combinar Azure Traffic Manager y Azure Front Door.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "id": "A01.18",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Use el mismo nombre de dominio en Azure Front Door y su origen. Los nombres de host no coincidentes pueden causar errores sutiles.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "id": "A01.19",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "Bajo",
- "subcategory": "Puerta",
- "text": "Deshabilite los sondeos de estado cuando solo haya un origen en un grupo de orígenes de Azure Front Door.",
- "waf": "Rendimiento"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "id": "A01.20",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Seleccione puntos de conexión de sondeo de estado correctos para Azure Front Door. Considere la posibilidad de crear puntos de conexión de estado que comprueben todas las dependencias de la aplicación.",
- "waf": "Fiabilidad"
- },
- {
- "category": "Topología y conectividad de red",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "id": "A01.21",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "Bajo",
- "subcategory": "Puerta",
- "text": "Use sondeos de estado de HEAD con Azure Front Door para reducir el tráfico que Front Door envía a la aplicación.",
- "waf": "Rendimiento"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
"guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
"id": "A01.22",
@@ -270,174 +175,12 @@
"service": "Load Balancer",
"severity": "Alto",
"subcategory": "Equilibrador de carga",
- "text": "Use Azure NAT Gateway en lugar de reglas de salida de Load Balancer para mejorar la escalabilidad de SNAT",
+ "text": "Use Azure NAT Gateway en lugar de las reglas de salida de Load Balancer para mejorar la escalabilidad de SNAT",
"waf": "Fiabilidad"
},
{
"ammp": true,
- "category": "Topología y conectividad de red",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "id": "A01.23",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Use certificados TLS administrados con Azure Front Door. Reduzca los costos operativos y el riesgo de interrupciones debido a las renovaciones de certificados.",
- "waf": "Operaciones"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "id": "A01.24",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Defina la configuración de WAF de Azure Front Door como código. Mediante el uso de código, puede adoptar más fácilmente una nueva versión del conjunto de reglas y obtener protección adicional.",
- "waf": "Operaciones"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "id": "A01.25",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Use TLS de un extremo a otro con Azure Front Door. Use TLS para las conexiones de los clientes a Front Door y de Front Door al origen.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "id": "A01.26",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Use el redireccionamiento de HTTP a HTTPS con Azure Front Door. Apoye a los clientes más antiguos redirigiéndolos automáticamente a una solicitud HTTPS.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "id": "A01.27",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Habilite el WAF de Azure Front Door. Proteja su aplicación de una variedad de ataques.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "id": "A01.28",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Ajuste el WAF de Azure Front Door para su carga de trabajo. Reduzca las detecciones de falsos positivos.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "id": "A01.29",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Habilite la característica de inspección del cuerpo de la solicitud habilitada en la directiva WAF de Azure Front Door.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "id": "A01.30",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Habilite los conjuntos de reglas predeterminados de WAF de Azure Front Door. Los conjuntos de reglas predeterminados detectan y bloquean los ataques comunes.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "id": "A01.31",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Puerta",
- "text": "Habilite el conjunto de reglas de protección contra bots de Azure Front Door WAF. Las reglas de bots detectan bots buenos y malos.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "id": "A01.32",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Use la versión más reciente del conjunto de reglas de WAF de Azure Front Door. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "id": "A01.33",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Agregue limitación de velocidad al WAF de Azure Front Door. La limitación de velocidad bloquea a los clientes que envían accidental o intencionadamente grandes cantidades de tráfico en un corto período de tiempo.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "id": "A01.34",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Use un umbral alto para los límites de frecuencia de WAF de Azure Front Door. Los umbrales de límite de velocidad altos evitan el bloqueo del tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura. ",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "id": "A01.35",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "Bajo",
- "subcategory": "Puerta",
- "text": "Si no espera tráfico de todas las regiones geográficas, utilice filtros geográficos para bloquear el tráfico de países no esperados.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "id": "A01.36",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Especifique la ubicación desconocida (ZZ) al filtrar geográficamente el tráfico con el WAF de Azure Front Door. Evite bloquear accidentalmente solicitudes legítimas cuando las direcciones IP no puedan coincidir geográficamente.",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
"guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
"id": "A01.37",
@@ -445,70 +188,69 @@
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Habilitación del conjunto de reglas de protección contra bots de WAF de Azure Application Gateway Las reglas de bots detectan bots buenos y malos.",
+ "text": "Habilite el conjunto de reglas de protección contra bots de WAF de Azure Application Gateway. Las reglas de bots detectan bots buenos y malos.",
"waf": "Seguridad"
},
{
"ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
"id": "A01.38",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Habilite la característica de inspección del cuerpo de la solicitud habilitada en la directiva WAF de Azure Application Gateway.",
+ "text": "Asegúrese de que la característica de inspección del cuerpo de la solicitud esté habilitada en la directiva WAF de Azure Application Gateway.",
"waf": "Seguridad"
},
{
"ammp": true,
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
"id": "A01.39",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Ajuste el WAF de Azure Application Gateway para la carga de trabajo. Reduzca las detecciones de falsos positivos.",
+ "text": "Ajuste el WAF de Azure Application Gateway en modo de detección para la carga de trabajo. Reduzca las detecciones de falsos positivos.",
"waf": "Seguridad"
},
{
"ammp": true,
- "category": "Topología y conectividad de red",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "category": "Topología de red y conectividad",
"guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
"id": "A01.40",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Implemente la directiva de WAF para Application Gateway en modo de \"prevención\".",
+ "text": "Implemente la directiva de WAF para Application Gateway en modo \"Prevención\".",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
"id": "A01.41",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
"service": "App Gateway",
"severity": "Medio",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Agregue limitación de velocidad al WAF de Azure Application Gateway. La limitación de velocidad bloquea a los clientes que envían accidental o intencionadamente grandes cantidades de tráfico en un corto período de tiempo.",
+ "text": "Agregue limitación de velocidad al WAF de Azure Application Gateway. La limitación de velocidad bloquea a los clientes que envían accidental o intencionalmente grandes cantidades de tráfico en un corto período de tiempo.",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
"id": "A01.42",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
"service": "App Gateway",
"severity": "Medio",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Use un umbral alto para los límites de frecuencia de WAF de Azure Application Gateway. Los umbrales de límite de velocidad altos evitan el bloqueo del tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura. ",
+ "text": "Use un umbral alto para los límites de velocidad de WAF de Azure Application Gateway. Los umbrales de límite de velocidad altos evitan bloquear el tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura. ",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "99937189-ff78-492a-b9ca-18d828d82b37",
"id": "A01.43",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
@@ -519,7 +261,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
"id": "A01.44",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
@@ -530,18 +272,18 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
"id": "A01.45",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
"service": "App Gateway",
"severity": "Medio",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Use la versión más reciente del conjunto de reglas de WAF de Azure Application Gateway. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
+ "text": "Use la versión más reciente del conjunto de reglas WAF de Azure Application Gateway. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
"id": "A01.46",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
@@ -552,18 +294,7 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "id": "A01.47",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Agregue la configuración de diagnóstico para guardar los registros de WAF de Azure Front Door.",
- "waf": "Operaciones"
- },
- {
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "92664c60-47e3-4591-8b1b-8d557656e686",
"id": "A01.48",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
@@ -574,18 +305,7 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "id": "A01.49",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Envíe registros de WAF de Azure Front Door a Microsoft Sentinel.",
- "waf": "Operaciones"
- },
- {
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
"id": "A01.50",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
@@ -596,7 +316,7 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
"id": "A01.51",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
@@ -607,7 +327,7 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
"id": "A01.52",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
@@ -618,18 +338,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "id": "A01.53",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "Medio",
- "subcategory": "Puerta",
- "text": "Asegúrese de que los orígenes solo toman tráfico de la instancia de Azure Front Door.",
- "waf": "Seguridad"
- },
- {
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
"id": "A01.54",
"link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
@@ -640,7 +349,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
"id": "A01.55",
"link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
@@ -651,7 +360,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
"id": "A01.56",
"link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
@@ -662,7 +371,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
"id": "A01.57",
"link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
@@ -673,29 +382,29 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
"id": "A01.58",
"link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
"service": "App Gateway",
"severity": "Alto",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Habilite el drenaje de conexiones durante las actualizaciones de servicio planificadas para evitar la pérdida de conexión a los miembros existentes del grupo de back-end",
+ "text": "Habilite el drenaje de conexiones durante las actualizaciones de servicio planeadas para evitar la pérdida de conexión con los miembros existentes del grupo de back-end",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
"id": "A01.59",
"link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
"service": "App Gateway",
"severity": "Bajo",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Crear páginas de error personalizadas para mostrar una experiencia de usuario personalizada",
+ "text": "Cree páginas de error personalizadas para mostrar una experiencia de usuario personalizada",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
"id": "A01.60",
"link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
@@ -706,7 +415,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
"id": "A01.61",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
@@ -717,7 +426,7 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "29dcc19f-a8fa-4c35-8281-290577538793",
"id": "A01.62",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
@@ -728,7 +437,7 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
"id": "A01.63",
"link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
@@ -739,7 +448,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
"id": "A01.64",
"link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
@@ -750,21 +459,21 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
"id": "A01.65",
"link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
"service": "App Gateway",
"severity": "Bajo",
"subcategory": "Puerta de enlace de aplicaciones",
- "text": "Uso de Application Gateway para obtener compatibilidad nativa con los protocolos WebSocket y HTTP/2",
+ "text": "Use Application Gateway para obtener compatibilidad nativa con los protocolos WebSocket y HTTP/2",
"waf": "Seguridad"
}
],
"metadata": {
"name": "Azure Application Delivery Networking",
"state": "GA",
- "timestamp": "March 15, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -792,7 +501,7 @@
"name": "Cumplido"
},
{
- "description": "Recomendación entendida, pero no necesaria por los requisitos actuales",
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
"name": "No es necesario"
},
{
diff --git a/checklists/network_appdelivery_checklist.ja.json b/checklists/network_appdelivery_checklist.ja.json
index 825e1ba93..fe7726f2e 100644
--- a/checklists/network_appdelivery_checklist.ja.json
+++ b/checklists/network_appdelivery_checklist.ja.json
@@ -1,34 +1,23 @@
{
"categories": [
{
- "name": "ネットワークトポロジと接続性"
+ "name": "ネットワーク トポロジと接続性"
}
],
"items": [
{
- "category": "ネットワークトポロジと接続性",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "id": "A01.01",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door でカスタマー マネージド TLS 証明書を使用する場合は、\"最新\" の証明書バージョンを使用します。証明書の手動更新によって引き起こされる停止のリスクを軽減",
- "waf": "オペレーションズ"
- },
- {
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
"id": "A01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
"severity": "中程度",
- "subcategory": "アプリ配信",
- "text": "内部向けアプリ (corp) と外部向けアプリ (online) の両方のランディング ゾーン内でアプリ配信を実行します。",
+ "subcategory": "アプリの配信",
+ "text": "ランディング ゾーン内で、内部向けアプリ (corp) と外部向けアプリ (online) の両方のアプリ配信を実行します。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
"guid": "553585a6-abe0-11ed-afa1-0242ac120002",
"id": "A01.03",
@@ -41,7 +30,7 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
"guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
"id": "A01.04",
@@ -49,11 +38,11 @@
"service": "Load Balancer",
"severity": "中程度",
"subcategory": "ロードバランサー",
- "text": "Azure Load Balancer に Standard SKU を使用していることを確認する",
+ "text": "Azure Load Balancers に Standard SKU を使用していることを確認します",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "9432621a-8397-4654-a882-5bc856b7ef83",
"id": "A01.05",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
@@ -64,7 +53,7 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
"guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
"id": "A01.06",
@@ -72,37 +61,37 @@
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Application Gateway v2 は、IP プレフィックスが /24 以上のサブネットにデプロイする必要があります",
+ "text": "Application Gateways v2 は、IP プレフィックスが /24 以上のサブネットにデプロイする必要があります",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
- "description": "リバースプロキシ全般、特にWAFの管理は、ネットワークよりもアプリケーションに近いため、アプリと同じサブスクリプションに属します。Application Gateway と WAF を接続サブスクリプションに一元化することは、1 つのチームによって管理されている場合は問題ない場合があります。",
+ "category": "ネットワーク トポロジと接続性",
+ "description": "リバースプロキシの管理全般、特にWAFの管理は、ネットワーキングよりもアプリケーションに近いため、アプリと同じサブスクリプションに属します。Application Gateway と WAF を接続サブスクリプションに一元化することは、1 つのチームによって管理されている場合は問題ない可能性があります。",
"guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
"id": "A01.07",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "ランディング ゾーン仮想ネットワーク内およびそれらがセキュリティで保護しているアプリと共に、受信 HTTP(S) 接続のプロキシに使用される Azure Application Gateway v2 またはパートナーの NVA をデプロイします。",
+ "text": "ランディング ゾーン仮想ネットワーク内の受信 HTTP(S) 接続のプロキシに使用される Azure Application Gateway v2 またはパートナー NVA と、それらがセキュリティ保護しているアプリをデプロイします。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
"id": "A01.08",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して DDoS ネットワークまたは IP 保護プランを使用します。",
+ "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して、DDoS ネットワークまたは IP 保護プランを使用します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
"guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
"id": "A01.09",
@@ -110,12 +99,12 @@
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "最小数のインスタンスが 2 つになる自動スケーリングを構成します。",
+ "text": "自動スケールは、最小インスタンス数が 2 になるように構成します。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
"guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
"id": "A01.10",
@@ -128,32 +117,20 @@
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "id": "A01.11",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door と WAF ポリシーを使用して、複数の Azure リージョンにまたがるグローバル HTTP/S アプリを配信し、保護します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3f29812b-2363-4cef-b179-b599de0d5973",
"id": "A01.12",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "Front Door",
"severity": "中程度",
- "subcategory": "アプリ配信",
+ "subcategory": "アプリの配信",
"text": "Front Door と Application Gateway を使用して HTTP/S アプリを保護する場合は、Front Door で WAF ポリシーを使用します。Application Gateway をロックダウンして、Front Door からのトラフィックのみを受信します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
"ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
"id": "A01.13",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -165,104 +142,32 @@
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
"id": "A01.14",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "低い",
- "subcategory": "アプリ配信",
- "text": "ユーザーが内部アプリケーションへのアクセスのみを必要とする場合、Microsoft Entra ID アプリケーション プロキシは Azure Virtual Desktop (AVD) の代替として検討されていますか?",
+ "subcategory": "アプリの配信",
+ "text": "ユーザーが内部アプリケーションへのアクセスのみを必要とする場合、Microsoft Entra ID アプリケーション プロキシは Azure Virtual Desktop (AVD) の代替手段として検討されていますか?",
"training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
"id": "A01.15",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "中程度",
- "subcategory": "アプリ配信",
- "text": "ネットワーク内の着信接続用に開かれているファイアウォール ポートの数を減らすには、Microsoft Entra ID アプリケーション プロキシを使用して、リモート ユーザーに内部アプリケーションへの安全で認証されたアクセスを提供することを検討してください。",
+ "subcategory": "アプリの配信",
+ "text": "ネットワーク内の着信接続用に開かれるファイアウォール ポートの数を減らすには、Microsoft Entra ID アプリケーション プロキシを使用して、リモート ユーザーに内部アプリケーションへの安全で認証されたアクセスを提供することを検討してください。",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "安全"
},
{
"ammp": true,
- "category": "ネットワークトポロジと接続性",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "id": "A01.16",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Front Door の WAF ポリシーを \"防止\" モードでデプロイします。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "id": "A01.17",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Traffic Manager と Azure Front Door の組み合わせは避けてください。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "id": "A01.18",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door と配信元で同じドメイン名を使用します。ホスト名が一致しないと、微妙なバグが発生する可能性があります。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "id": "A01.19",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "低い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door 配信元グループに配信元が 1 つしかない場合は、正常性プローブを無効にします。",
- "waf": "パフォーマンス"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "id": "A01.20",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door に適した正常性プローブ エンドポイントを選択します。アプリケーションのすべての依存関係をチェックする正常性エンドポイントを構築することを検討してください。",
- "waf": "確実"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "id": "A01.21",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "低い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door で HEAD 正常性プローブを使用して、Front Door がアプリケーションに送信するトラフィックを減らします。",
- "waf": "パフォーマンス"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
"guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
"id": "A01.22",
@@ -270,174 +175,12 @@
"service": "Load Balancer",
"severity": "高い",
"subcategory": "ロードバランサー",
- "text": "Load Balancer の送信規則の代わりに Azure NAT Gateway を使用して、SNAT のスケーラビリティを向上させる",
+ "text": "Load Balancer のアウトバウンド規則の代わりに Azure NAT Gateway を使用して SNAT のスケーラビリティを向上させる",
"waf": "確実"
},
{
"ammp": true,
- "category": "ネットワークトポロジと接続性",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "id": "A01.23",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door でマネージド TLS 証明書を使用します。運用コストと、証明書の更新による停止のリスクを軽減します。",
- "waf": "オペレーションズ"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "id": "A01.24",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF の構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
- "waf": "オペレーションズ"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "id": "A01.25",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door でエンド ツー エンドの TLS を使用します。クライアントから Front Door への接続、および Front Door から配信元への接続には TLS を使用します。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "id": "A01.26",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door で HTTP から HTTPS へのリダイレクトを使用します。古いクライアントをHTTPSリクエストに自動的にリダイレクトすることでサポートします。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "id": "A01.27",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF を有効にします。さまざまな攻撃からアプリケーションを保護します。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "id": "A01.28",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "ワークロードに合わせて Azure Front Door WAF を調整します。誤検知を減らします。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "id": "A01.29",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF ポリシーで要求本文検査機能を有効にします。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "id": "A01.30",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF の既定の規則セットを有効にします。既定のルール セットは、一般的な攻撃を検出してブロックします。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "id": "A01.31",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "高い",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF ボット保護ルール セットを有効にします。ボットルールは、良いボットと悪いボットを検出します。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "id": "A01.32",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "最新の Azure Front Door WAF ルール セット バージョンを使用します。ルール セットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "id": "A01.33",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF にレート制限を追加します。レート制限は、クライアントが短期間に大量のトラフィックを誤ってまたは意図的に送信することをブロックします。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "id": "A01.34",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF のレート制限には、高いしきい値を使用します。高いレート制限しきい値は、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多数の要求に対する保護を提供します。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "id": "A01.35",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "低い",
- "subcategory": "フロントドア",
- "text": "すべての地域からのトラフィックが想定されていない場合は、地域フィルタを使用して、想定外の国からのトラフィックをブロックします。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "id": "A01.36",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF を使用してトラフィックをジオフィルター処理するときに、不明な (ZZ) 場所を指定します。IP アドレスを地理的に一致させることができない場合に、正当な要求を誤ってブロックしないようにします。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
"guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
"id": "A01.37",
@@ -445,40 +188,39 @@
"service": "App Gateway",
"severity": "高い",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Azure Application Gateway WAF ボット保護ルール セットを有効にする ボット ルールは、良いボットと悪いボットを検出します。",
+ "text": "Azure Application Gateway WAF ボット保護ルール セットを有効にします。ボット ルールは、良いボットと悪いボットを検出します。",
"waf": "安全"
},
{
"ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
"id": "A01.38",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
"service": "App Gateway",
"severity": "高い",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Azure Application Gateway WAF ポリシーで有効になっている要求本文検査機能を有効にします。",
+ "text": "Azure Application Gateway WAF ポリシーで要求本文の検査機能が有効になっているかどうかを確認します。",
"waf": "安全"
},
{
"ammp": true,
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
"id": "A01.39",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
"service": "App Gateway",
"severity": "高い",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "ワークロードに合わせて Azure Application Gateway WAF を調整します。誤検知を減らします。",
+ "text": "ワークロードの検出モードで Azure Application Gateway WAF を調整します。誤検出を減らします。",
"waf": "安全"
},
{
"ammp": true,
- "category": "ネットワークトポロジと接続性",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "category": "ネットワーク トポロジと接続性",
"guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
"id": "A01.40",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
"service": "App Gateway",
"severity": "高い",
"subcategory": "アプリケーション・ゲートウェイ",
@@ -486,84 +228,73 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
"id": "A01.41",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Azure Application Gateway WAF にレート制限を追加します。レート制限は、クライアントが短期間に大量のトラフィックを誤ってまたは意図的に送信することをブロックします。",
+ "text": "Azure Application Gateway WAF にレート制限を追加します。レート制限は、クライアントが誤ってまたは意図的に短時間に大量のトラフィックを送信するのをブロックします。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
"id": "A01.42",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Azure Application Gateway の WAF レート制限には高いしきい値を使用します。高いレート制限しきい値は、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多数の要求に対する保護を提供します。",
+ "text": "Azure Application Gateway WAF のレート制限には高いしきい値を使用します。レート制限のしきい値を高くすると、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多くのリクエストに対する保護を提供します。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "99937189-ff78-492a-b9ca-18d828d82b37",
"id": "A01.43",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
"service": "App Gateway",
"severity": "低い",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "すべての地域からのトラフィックが想定されていない場合は、地域フィルタを使用して、想定外の国からのトラフィックをブロックします。",
+ "text": "すべての地理的地域からのトラフィックを想定していない場合は、geo フィルタを使用して、想定外の国からのトラフィックをブロックします。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
"id": "A01.44",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Azure Application Gateway WAF でトラフィックを geo フィルタリングするときに、不明 (ZZ) の場所を指定します。IP アドレスを地理的に一致させることができない場合に、正当な要求を誤ってブロックしないようにします。",
+ "text": "Azure Application Gateway WAF を使用してトラフィックを geo フィルタリングする場合は、不明な (ZZ) 場所を指定します。IP アドレスを地理的に一致できない場合に、正当な要求を誤ってブロックしないようにします。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
"id": "A01.45",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "最新バージョンの Azure Application Gateway WAF ルール セットを使用します。ルール セットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
+ "text": "最新の Azure Application Gateway WAF ルール セット バージョンを使用します。ルールセットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
"id": "A01.46",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "診断設定を追加して、Azure Application Gateway の WAF ログを保存します。",
+ "text": "診断設定を追加して、Azure Application Gateway WAF ログを保存します。",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "id": "A01.47",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "診断設定を追加して、Azure Front Door WAF ログを保存します。",
- "waf": "オペレーションズ"
- },
- {
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "92664c60-47e3-4591-8b1b-8d557656e686",
"id": "A01.48",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
@@ -574,29 +305,18 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "id": "A01.49",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "Azure Front Door WAF ログを Microsoft Sentinel に送信します。",
- "waf": "オペレーションズ"
- },
- {
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
"id": "A01.50",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Azure Application Gateway の WAF 構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
+ "text": "Azure Application Gateway WAF 構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
"id": "A01.51",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
@@ -607,40 +327,29 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
"id": "A01.52",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "バックエンドの受信トラフィックをフィルター処理して、Application Gateway サブネットからの接続 (NSG など) のみを受け入れるようにします。",
- "waf": "安全"
- },
- {
- "category": "ネットワークトポロジと接続性",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "id": "A01.53",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "中程度",
- "subcategory": "フロントドア",
- "text": "配信元が Azure Front Door インスタンスからのトラフィックのみを受け取るようにします。",
+ "text": "バックエンドの受信トラフィックをフィルター処理して、Application Gateway サブネット (NSG など) からの接続のみを受け入れるようにします。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
"id": "A01.54",
"link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
"service": "App Gateway",
"severity": "高い",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "バックエンド・サーバーへのトラフィックを暗号化する必要があります。",
+ "text": "バックエンド サーバーへのトラフィックを暗号化する必要があります。",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
"id": "A01.55",
"link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
@@ -651,29 +360,29 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
"id": "A01.56",
"link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "HTTPをHTTPSにリダイレクトする",
+ "text": "HTTP を HTTPS にリダイレクトする",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
"id": "A01.57",
"link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "ゲートウェイ管理の Cookie を使用して、ユーザー セッションから同じサーバーにトラフィックを送信して処理する",
+ "text": "ゲートウェイで管理される Cookie を使用して、ユーザーセッションからのトラフィックを同じサーバーに転送して処理する",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
"id": "A01.58",
"link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
@@ -684,7 +393,7 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
"id": "A01.59",
"link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
@@ -695,29 +404,29 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
"id": "A01.60",
"link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "HTTPリクエストとレスポンスヘッダーを編集して、クライアントとサーバー間のルーティングと情報交換を容易にします",
+ "text": "HTTP 要求と応答ヘッダーを編集して、クライアントとサーバー間のルーティングと情報交換を容易にします",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
"id": "A01.61",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Front Door を構成して、グローバルな Web トラフィック ルーティングとトップレベルのエンド ユーザーのパフォーマンスを最適化し、迅速なグローバル フェールオーバーを通じて信頼性を確保します",
+ "text": "Front Door を構成して、グローバル Web トラフィックのルーティングと最上位のエンドユーザーのパフォーマンス、および迅速なグローバル フェイルオーバーによる信頼性を最適化する",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "29dcc19f-a8fa-4c35-8281-290577538793",
"id": "A01.62",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
@@ -728,7 +437,7 @@
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
"id": "A01.63",
"link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
@@ -739,32 +448,32 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
"id": "A01.64",
"link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
"service": "App Gateway",
"severity": "中程度",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "SSL証明書管理を一元化して、バックエンドサーバーファームからの暗号化と復号化のオーバーヘッドを削減",
+ "text": "SSL証明書管理を一元化して、バックエンドサーバーファームからの暗号化と復号化のオーバーヘッドを削減します",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
"id": "A01.65",
"link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
"service": "App Gateway",
"severity": "低い",
"subcategory": "アプリケーション・ゲートウェイ",
- "text": "Application Gateway を使用して WebSocket と HTTP/2 プロトコルをネイティブにサポートする",
+ "text": "Application Gateway を使用して WebSocket プロトコルと HTTP/2 プロトコルをネイティブにサポートする",
"waf": "安全"
}
],
"metadata": {
"name": "Azure Application Delivery Networking",
"state": "GA",
- "timestamp": "March 15, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -780,7 +489,7 @@
],
"status": [
{
- "description": "このチェックはまだ検討されていません",
+ "description": "このチェックはまだ見ていません",
"name": "未確認"
},
{
@@ -788,12 +497,12 @@
"name": "開ける"
},
{
- "description": "このチェックは検証済みで、これ以上のアクションアイテムは関連付けられていません",
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
"name": "達成"
},
{
- "description": "推奨事項は理解されているが、現在の要件では不要",
- "name": "必要なし"
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
},
{
"description": "現在のデザインには適用されません",
diff --git a/checklists/network_appdelivery_checklist.ko.json b/checklists/network_appdelivery_checklist.ko.json
index 78aeb20b1..ed56c52d5 100644
--- a/checklists/network_appdelivery_checklist.ko.json
+++ b/checklists/network_appdelivery_checklist.ko.json
@@ -1,34 +1,23 @@
{
"categories": [
{
- "name": "네트워크 토폴로지 및 연결"
+ "name": "네트워크 토폴로지 및 연결성"
}
],
"items": [
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "id": "A01.01",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door에서 고객 관리형 TLS 인증서를 사용하는 경우 '최신' 인증서 버전을 사용합니다. 수동 인증서 갱신으로 인한 중단 위험 감소",
- "waf": "작업"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
"id": "A01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
"severity": "보통",
- "subcategory": "앱 제공",
- "text": "랜딩 존 내에서 내부 연결(corp) 및 외부 연결 앱(온라인) 모두에 대해 앱 배달을 수행합니다.",
+ "subcategory": "앱 배송",
+ "text": "내부 방향(corp) 및 외부 방향 앱(온라인) 모두에 대해 landing zone 내에서 앱 배달을 수행합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
"guid": "553585a6-abe0-11ed-afa1-0242ac120002",
"id": "A01.03",
@@ -41,7 +30,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
"guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
"id": "A01.04",
@@ -53,7 +42,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "9432621a-8397-4654-a882-5bc856b7ef83",
"id": "A01.05",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
@@ -64,7 +53,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
"guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
"id": "A01.06",
@@ -72,12 +61,12 @@
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "Application Gateway v2는 IP 접두사가 /24보다 크거나 같은 서브넷에 배포해야 합니다.",
+ "text": "Application Gateways v2는 IP 접두사가 /24보다 크거나 같은 서브넷에 배포해야 합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"description": "일반적으로 역방향 프록시 및 특히 WAF의 관리는 네트워킹보다 애플리케이션에 더 가깝기 때문에 앱과 동일한 구독에 속합니다. 연결 구독에서 Application Gateway 및 WAF를 중앙 집중화하는 것은 단일 팀에서 관리하는 경우 괜찮을 수 있습니다.",
"guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
"id": "A01.07",
@@ -85,12 +74,12 @@
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "랜딩 영역 가상 네트워크 내에서 그리고 보안 중인 앱을 사용하여 인바운드 HTTP(S) 연결을 프록시하는 데 사용되는 Azure Application Gateway v2 또는 파트너 NVA를 배포합니다.",
+ "text": "랜딩 존 가상 네트워크 내에서 그리고 보안 중인 앱을 사용하여 인바운드 HTTP(S) 연결을 프록시하는 데 사용되는 Azure Application Gateway v2 또는 파트너 NVA를 배포합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
"id": "A01.08",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -102,7 +91,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
"guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
"id": "A01.09",
@@ -110,12 +99,12 @@
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "최소 인스턴스 수를 2개로 자동 크기 조정을 구성합니다.",
+ "text": "최소 2개의 인스턴스로 자동 크기 조정을 구성합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
"guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
"id": "A01.10",
@@ -128,32 +117,20 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "id": "A01.11",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "WAF 정책과 함께 Azure Front Door를 사용하여 여러 Azure 지역에 걸쳐 있는 글로벌 HTTP/S 앱을 제공하고 보호할 수 있습니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3f29812b-2363-4cef-b179-b599de0d5973",
"id": "A01.12",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "Front Door",
"severity": "보통",
- "subcategory": "앱 제공",
+ "subcategory": "앱 배송",
"text": "Front Door 및 Application Gateway를 사용하여 HTTP/S 앱을 보호하는 경우 Front Door에서 WAF 정책을 사용합니다. Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
"ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
"id": "A01.13",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -165,104 +142,32 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
"id": "A01.14",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "낮다",
- "subcategory": "앱 제공",
- "text": "사용자가 내부 애플리케이션에만 액세스해야 하는 경우 Microsoft Entra ID 애플리케이션 프록시가 AVD(Azure Virtual Desktop)의 대안으로 고려되었나요?",
+ "subcategory": "앱 배송",
+ "text": "사용자가 내부 애플리케이션에만 액세스해야 하는 경우 Microsoft Entra ID 애플리케이션 프록시를 AVD(Azure Virtual Desktop)의 대안으로 고려했나요?",
"training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
"id": "A01.15",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "보통",
- "subcategory": "앱 제공",
- "text": "네트워크에서 들어오는 연결에 대해 열려 있는 방화벽 포트 수를 줄이려면 Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 내부 애플리케이션에 대한 안전하고 인증된 액세스를 제공하는 것이 좋습니다.",
+ "subcategory": "앱 배송",
+ "text": "네트워크에서 들어오는 연결에 대해 열려 있는 방화벽 포트 수를 줄이려면 Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 내부 애플리케이션에 대한 안전하고 인증된 액세스 권한을 부여하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "안전"
},
{
"ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "id": "A01.16",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "'방지' 모드에서 Front Door에 대한 WAF 정책을 배포합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "id": "A01.17",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Traffic Manager와 Azure Front Door를 결합하지 마세요.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "id": "A01.18",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door 및 원본에서 동일한 도메인 이름을 사용합니다. 호스트 이름이 일치하지 않으면 미묘한 버그가 발생할 수 있습니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "id": "A01.19",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "낮다",
- "subcategory": "정문",
- "text": "Azure Front Door 원본 그룹에 원본이 하나만 있는 경우 상태 프로브를 사용하지 않도록 설정합니다.",
- "waf": "공연"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "id": "A01.20",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door에 대한 양호한 상태 프로브 엔드포인트를 선택합니다. 애플리케이션의 모든 종속성을 확인하는 상태 엔드포인트를 빌드하는 것이 좋습니다.",
- "waf": "신뢰도"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "id": "A01.21",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "낮다",
- "subcategory": "정문",
- "text": "Azure Front Door와 함께 HEAD 상태 프로브를 사용하여 Front Door가 애플리케이션으로 보내는 트래픽을 줄입니다.",
- "waf": "공연"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
"guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
"id": "A01.22",
@@ -275,169 +180,7 @@
},
{
"ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "id": "A01.23",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door에서 관리형 TLS 인증서를 사용합니다. 운영 비용을 줄이고 인증서 갱신으로 인한 중단 위험을 줄입니다.",
- "waf": "작업"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "id": "A01.24",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door WAF 구성을 코드로 정의합니다. 코드를 사용하면 새 규칙 집합 버전을 보다 쉽게 채택하고 추가 보호를 얻을 수 있습니다.",
- "waf": "작업"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "id": "A01.25",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door에서 엔드투엔드 TLS를 사용합니다. 클라이언트에서 Front Door로, Front Door에서 원본으로 연결하는 데 TLS를 사용합니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "id": "A01.26",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door에서 HTTP에서 HTTPS로 리디렉션을 사용합니다. 이전 클라이언트를 HTTPS 요청으로 자동 리디렉션하여 지원합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "id": "A01.27",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door WAF를 사용하도록 설정합니다. 다양한 공격으로부터 애플리케이션을 보호합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "id": "A01.28",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "워크로드에 맞게 Azure Front Door WAF를 튜닝합니다. 가양성 탐지를 줄입니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "id": "A01.29",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door WAF 정책에서 요청 본문 검사 기능을 사용하도록 설정합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "id": "A01.30",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door WAF 기본 규칙 집합을 사용하도록 설정합니다. 기본 규칙 집합은 일반적인 공격을 탐지하고 차단합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "id": "A01.31",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "높다",
- "subcategory": "정문",
- "text": "Azure Front Door WAF 봇 보호 규칙 집합을 사용하도록 설정합니다. 봇 규칙은 좋은 봇과 나쁜 봇을 감지합니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "id": "A01.32",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "최신 Azure Front Door WAF 규칙 집합 버전을 사용합니다. 규칙 집합 업데이트는 현재 위협 환경을 고려하기 위해 정기적으로 업데이트됩니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "id": "A01.33",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 짧은 시간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "id": "A01.34",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door WAF 속도 제한에 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호 기능을 제공합니다. ",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "id": "A01.35",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "낮다",
- "subcategory": "정문",
- "text": "모든 지역에서 트래픽이 발생하지 않을 것으로 예상되는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "id": "A01.36",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 않도록 합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
"guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
"id": "A01.37",
@@ -445,40 +188,39 @@
"service": "App Gateway",
"severity": "높다",
"subcategory": "앱 게이트웨이",
- "text": "Azure Application Gateway WAF 봇 보호 규칙 집합 사용Enable the Azure Application Gateway WAF bot protection rule set 봇 규칙은 좋은 봇과 나쁜 봇을 검색합니다.",
+ "text": "Azure Application Gateway WAF 봇 보호 규칙 집합을 사용하도록 설정합니다. 봇 규칙은 좋은 봇과 나쁜 봇을 감지합니다.",
"waf": "안전"
},
{
"ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
"id": "A01.38",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
"service": "App Gateway",
"severity": "높다",
"subcategory": "앱 게이트웨이",
- "text": "Azure Application Gateway WAF 정책에서 요청 본문 검사 기능을 사용하도록 설정합니다.",
+ "text": "Azure Application Gateway WAF 정책에서 요청 본문 검사 기능이 사용하도록 설정되어 있는지 확인합니다.",
"waf": "안전"
},
{
"ammp": true,
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
"id": "A01.39",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
"service": "App Gateway",
"severity": "높다",
"subcategory": "앱 게이트웨이",
- "text": "워크로드에 대한 Azure Application Gateway WAF를 조정합니다. 가양성 탐지를 줄입니다.",
+ "text": "워크로드에 대한 검색 모드에서 Azure Application Gateway WAF를 튜닝합니다. 거짓 긍정 탐지를 줄입니다.",
"waf": "안전"
},
{
"ammp": true,
- "category": "네트워크 토폴로지 및 연결",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
"id": "A01.40",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
"service": "App Gateway",
"severity": "높다",
"subcategory": "앱 게이트웨이",
@@ -486,51 +228,51 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
"id": "A01.41",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "Azure Application Gateway WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 짧은 시간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
+ "text": "Azure Application Gateway WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 단기간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
"id": "A01.42",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "Azure Application Gateway WAF 속도 제한에 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호 기능을 제공합니다. ",
+ "text": "Azure Application Gateway WAF 속도 제한에 대해 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호를 제공합니다. ",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "99937189-ff78-492a-b9ca-18d828d82b37",
"id": "A01.43",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
"service": "App Gateway",
"severity": "낮다",
"subcategory": "앱 게이트웨이",
- "text": "모든 지역에서 트래픽이 발생하지 않을 것으로 예상되는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
+ "text": "모든 지역에서 트래픽이 발생할 것으로 예상되지 않는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
"id": "A01.44",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "Azure Application Gateway WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 않도록 합니다.",
+ "text": "Azure Application Gateway WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 마세요.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
"id": "A01.45",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
@@ -541,7 +283,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
"id": "A01.46",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
@@ -552,18 +294,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "id": "A01.47",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "진단 설정을 추가하여 Azure Front Door WAF 로그를 저장합니다.",
- "waf": "작업"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "92664c60-47e3-4591-8b1b-8d557656e686",
"id": "A01.48",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
@@ -574,18 +305,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "id": "A01.49",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "Azure Front Door WAF 로그를 Microsoft Sentinel로 보냅니다.",
- "waf": "작업"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
"id": "A01.50",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
@@ -596,7 +316,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
"id": "A01.51",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
@@ -607,40 +327,29 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
"id": "A01.52",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "Application Gateway 서브넷의 연결(예: NSG 사용)만 허용하도록 백 엔드에서 인바운드 트래픽을 필터링합니다.",
- "waf": "안전"
- },
- {
- "category": "네트워크 토폴로지 및 연결",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "id": "A01.53",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "보통",
- "subcategory": "정문",
- "text": "원본이 Azure Front Door 인스턴스의 트래픽만 가져와야 합니다.",
+ "text": "Application Gateway 서브넷의 연결(예: NSG)만 허용하도록 백 엔드에서 인바운드 트래픽을 필터링합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
"id": "A01.54",
"link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
"service": "App Gateway",
"severity": "높다",
"subcategory": "앱 게이트웨이",
- "text": "백 엔드 서버에 대한 트래픽을 암호화해야 합니다.",
+ "text": "백엔드 서버에 대한 트래픽을 암호화해야 합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
"id": "A01.55",
"link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
@@ -651,7 +360,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
"id": "A01.56",
"link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
@@ -662,7 +371,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
"id": "A01.57",
"link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
@@ -673,7 +382,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
"id": "A01.58",
"link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
@@ -684,62 +393,62 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
"id": "A01.59",
"link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
"service": "App Gateway",
"severity": "낮다",
"subcategory": "앱 게이트웨이",
- "text": "사용자 지정 오류 페이지를 만들어 개인화된 사용자 환경 표시",
+ "text": "사용자 지정 오류 페이지를 만들어 개인화된 사용자 경험을 표시합니다.",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
"id": "A01.60",
"link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "HTTP 요청 및 응답 헤더를 편집하여 클라이언트와 서버 간의 라우팅 및 정보 교환을 보다 쉽게 할 수 있습니다.",
+ "text": "클라이언트와 서버 간의 라우팅 및 정보 교환을 보다 쉽게 하기 위해 HTTP 요청 및 응답 헤더를 편집합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
"id": "A01.61",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "빠른 글로벌 장애 조치(failover)를 통해 글로벌 웹 트래픽 라우팅 및 최상위 계층 최종 사용자 성능 및 안정성을 최적화하도록 Front Door 구성",
+ "text": "Front Door를 구성하여 글로벌 웹 트래픽 라우팅, 최상위 최종 사용자 성능 및 빠른 글로벌 장애 조치(failover)를 통해 안정성을 최적화합니다.",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "29dcc19f-a8fa-4c35-8281-290577538793",
"id": "A01.62",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "전송 계층 부하 분산 사용Use transport layer load balancing",
+ "text": "전송 계층 부하 분산 사용",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
"id": "A01.63",
"link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
"service": "App Gateway",
"severity": "보통",
"subcategory": "앱 게이트웨이",
- "text": "단일 게이트웨이에서 여러 웹 응용 프로그램에 대한 호스트 또는 도메인 이름을 기반으로 라우팅 구성Configure routing based on host or domain name for multiple web applications on a single gateway",
+ "text": "단일 게이트웨이에서 여러 웹 응용 프로그램에 대한 호스트 또는 도메인 이름을 기반으로 라우팅을 구성합니다.",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
"id": "A01.64",
"link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
@@ -750,7 +459,7 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
"id": "A01.65",
"link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
@@ -764,7 +473,7 @@
"metadata": {
"name": "Azure Application Delivery Networking",
"state": "GA",
- "timestamp": "March 15, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -792,7 +501,7 @@
"name": "성취"
},
{
- "description": "권장 사항은 이해되었지만 현재 요구 사항에 필요하지 않음",
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
"name": "필요 없음"
},
{
diff --git a/checklists/network_appdelivery_checklist.pt.json b/checklists/network_appdelivery_checklist.pt.json
index 78c0f3099..e5bbf1cc0 100644
--- a/checklists/network_appdelivery_checklist.pt.json
+++ b/checklists/network_appdelivery_checklist.pt.json
@@ -1,159 +1,136 @@
{
"categories": [
{
- "name": "Topologia de rede e conectividade"
+ "name": "Topologia e conectividade de rede"
}
],
"items": [
{
- "category": "Topologia de rede e conectividade",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "id": "A01.01",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Se você usar certificados TLS gerenciados pelo cliente com o Azure Front Door, use a versão de certificado 'Mais recente'. Reduzir o risco de paralisações causadas pela renovação manual de certificados",
- "waf": "Operações"
- },
- {
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
"id": "A01.02",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
"severity": "Média",
"subcategory": "Entrega de aplicativos",
- "text": "Execute a entrega de aplicativos dentro das zonas de aterrissagem para aplicativos internos (corp) e externos (online).",
+ "text": "Execute a entrega de aplicativos em zonas de destino para aplicativos internos (corporativos) e externos (online).",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
"guid": "553585a6-abe0-11ed-afa1-0242ac120002",
"id": "A01.03",
"link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Verifique se você está usando o SKU do Application Gateway v2",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Verifique se você está usando o SKU do Gateway de Aplicativo v2",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
"guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
"id": "A01.04",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
"service": "Load Balancer",
"severity": "Média",
- "subcategory": "Balanceador de Carga",
- "text": "Verifique se você está usando a SKU padrão para seus Balanceadores de Carga do Azure",
+ "subcategory": "Balanceador de carga",
+ "text": "Verifique se você está usando o SKU Standard para seus Azure Load Balancers",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "9432621a-8397-4654-a882-5bc856b7ef83",
"id": "A01.05",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
"service": "Load Balancer",
"severity": "Média",
- "subcategory": "Balanceador de Carga",
- "text": "Verifique se os endereços IP de front-end dos Load Balancers são redundantes por zona (a menos que você precise de frontends zonais).",
+ "subcategory": "Balanceador de carga",
+ "text": "Verifique se os endereços IP de front-end dos Load Balancers têm redundância de zona (a menos que você precise de front-ends zonais).",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
"guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
"id": "A01.06",
"link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Seus Application Gateways v2 devem ser implantados em sub-redes com prefixos IP iguais ou maiores que /24",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Seus Gateways de Aplicativo v2 devem ser implantados em sub-redes com prefixos IP iguais ou maiores que /24",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
- "description": "A administração de proxies reversos em geral e do WAF em particular está mais próxima do aplicativo do que da rede, portanto, eles pertencem à mesma assinatura que o aplicativo. Centralizar o Application Gateway e o WAF na assinatura de conectividade pode ser OK se for gerenciado por uma única equipe.",
+ "category": "Topologia e conectividade de rede",
+ "description": "A administração de proxies reversos em geral e WAF em particular está mais próxima do aplicativo do que da rede, portanto, eles pertencem à mesma assinatura que o aplicativo. Centralizar o Gateway de Aplicativo e o WAF na assinatura de conectividade pode ser OK se ele for gerenciado por uma única equipe.",
"guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
"id": "A01.07",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Implante o Gateway de Aplicativo do Azure v2 ou NVAs de parceiros usados para fazer proxy de conexões HTTP(S) de entrada na rede virtual da zona de aterrissagem e com os aplicativos que eles estão protegendo.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Implante o Gateway de Aplicativo do Azure v2 ou NVAs de parceiros usados para proxy de conexões HTTP(S) de entrada na rede virtual da zona de destino e com os aplicativos que eles estão protegendo.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
"id": "A01.08",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Use uma rede DDoS ou planos de proteção IP para todos os endereços IP públicos nas zonas de aterrissagem do aplicativo.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Use uma rede DDoS ou planos de proteção de IP para todos os endereços IP públicos em zonas de destino do aplicativo.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
"guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
"id": "A01.09",
"link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Configure o dimensionamento automático com uma quantidade mínima de duas instâncias.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Configure o dimensionamento automático com uma quantidade mínima de instâncias de duas.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
"guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
"id": "A01.10",
"link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Implantar o Application Gateway em zonas de disponibilidade",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Implantar o Gateway de Aplicativo em Zonas de Disponibilidade",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "id": "A01.11",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Use o Azure Front Door com políticas WAF para fornecer e ajudar a proteger aplicativos HTTP/S globais que abrangem várias regiões do Azure.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3f29812b-2363-4cef-b179-b599de0d5973",
"id": "A01.12",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "Front Door",
"severity": "Média",
"subcategory": "Entrega de aplicativos",
- "text": "Ao usar o Front Door e o Application Gateway para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Front Door. Bloqueie o Application Gateway para receber tráfego somente do Front Door.",
+ "text": "Ao usar o Front Door e o Gateway de Aplicativo para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Front Door. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Front Door.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
"id": "A01.13",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -165,606 +142,338 @@
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
"id": "A01.14",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "Baixo",
"subcategory": "Entrega de aplicativos",
- "text": "Se os usuários precisarem apenas de acesso a aplicativos internos, o Proxy de Aplicativo de ID do Microsoft Entra foi considerado uma alternativa à Área de Trabalho Virtual (AVD) do Azure?",
+ "text": "Se os usuários precisarem apenas de acesso a aplicativos internos, o Proxy de Aplicativo de ID do Microsoft Entra foi considerado como uma alternativa à AVD (Área de Trabalho Virtual) do Azure?",
"training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
"id": "A01.15",
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
"service": "Entra",
"severity": "Média",
"subcategory": "Entrega de aplicativos",
- "text": "Para reduzir o número de portas de firewall abertas para conexões de entrada em sua rede, considere o uso do Microsoft Entra ID Application Proxy para dar aos usuários remotos acesso seguro e autenticado a aplicativos internos.",
+ "text": "Para reduzir o número de portas de firewall abertas para conexões de entrada em sua rede, considere usar o Proxy de Aplicativo de ID do Microsoft Entra para fornecer aos usuários remotos acesso seguro e autenticado a aplicativos internos.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Topologia de rede e conectividade",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "id": "A01.16",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Implante sua política de WAF para Front Door no modo 'Prevenção'.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "id": "A01.17",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Evite combinar o Gerenciador de Tráfego do Azure e o Azure Front Door.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "id": "A01.18",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Use o mesmo nome de domínio no Azure Front Door e sua origem. Nomes de host incompatíveis podem causar bugs sutis.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "id": "A01.19",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "Baixo",
- "subcategory": "Porta da Frente",
- "text": "Desabilite os testes de integridade quando houver apenas uma origem em um grupo de origem do Azure Front Door.",
- "waf": "Desempenho"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "id": "A01.20",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Selecione bons pontos de extremidade de teste de integridade para o Azure Front Door. Considere a criação de pontos de extremidade de integridade que verifiquem todas as dependências do seu aplicativo.",
- "waf": "Fiabilidade"
- },
- {
- "category": "Topologia de rede e conectividade",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "id": "A01.21",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "Baixo",
- "subcategory": "Porta da Frente",
- "text": "Use testes de integridade do HEAD com o Azure Front Door para reduzir o tráfego que o Front Door envia para seu aplicativo.",
- "waf": "Desempenho"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
"guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
"id": "A01.22",
"link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
"service": "Load Balancer",
"severity": "Alto",
- "subcategory": "Balanceador de Carga",
- "text": "Usar o Gateway NAT do Azure em vez das regras de saída do Load Balancer para melhor escalabilidade do SNAT",
+ "subcategory": "Balanceador de carga",
+ "text": "Usar o Gateway NAT do Azure em vez das regras de saída do Load Balancer para melhorar a escalabilidade SNAT",
"waf": "Fiabilidade"
},
{
"ammp": true,
- "category": "Topologia de rede e conectividade",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "id": "A01.23",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Use certificados TLS gerenciados com o Azure Front Door. Reduza o custo operacional e o risco de paralisações devido a renovações de certificados.",
- "waf": "Operações"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "id": "A01.24",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Defina sua configuração do WAF do Azure Front Door como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
- "waf": "Operações"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "id": "A01.25",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Use o TLS de ponta a ponta com o Azure Front Door. Use o TLS para conexões de seus clientes com o Front Door e do Front Door com sua origem.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "id": "A01.26",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Use o redirecionamento HTTP para HTTPS com o Azure Front Door. Ofereça suporte a clientes mais antigos redirecionando-os para uma solicitação HTTPS automaticamente.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "id": "A01.27",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Habilite o WAF do Azure Front Door. Proteja seu aplicativo contra uma série de ataques.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "id": "A01.28",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Ajuste o WAF do Azure Front Door para sua carga de trabalho. Reduza as detecções de falsos positivos.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "id": "A01.29",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Habilite o recurso de inspeção do corpo de solicitação habilitado na política WAF do Azure Front Door.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "id": "A01.30",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Habilite os conjuntos de regras padrão do WAF do Azure Front Door. Os conjuntos de regras padrão detectam e bloqueiam ataques comuns.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "id": "A01.31",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "Alto",
- "subcategory": "Porta da Frente",
- "text": "Habilite o conjunto de regras de proteção de bot do WAF do Azure Front Door. As regras de bot detectam bots bons e ruins.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "id": "A01.32",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Use a versão mais recente do conjunto de regras do WAF do Azure Front Door. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário atual de ameaças.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "id": "A01.33",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Adicione o limite de taxa ao WAF do Azure Front Door. A limitação de taxa bloqueia clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "id": "A01.34",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Use um limite alto para os limites de taxa do WAF do Azure Front Door. Limites de limite de taxa alta evitam o bloqueio de tráfego legítimo, ao mesmo tempo em que fornecem proteção contra um número extremamente alto de solicitações que podem sobrecarregar sua infraestrutura. ",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "id": "A01.35",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "Baixo",
- "subcategory": "Porta da Frente",
- "text": "Se você não está esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "id": "A01.36",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Azure Front Door. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
"guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
"id": "A01.37",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
- "text": "Habilitar o conjunto de regras de proteção de bot WAF do Gateway de Aplicativo do Azure As regras de bot detectam bots bons e ruins.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Habilite o conjunto de regras de proteção contra bot do WAF do Gateway de Aplicativo do Azure. As regras de bot detectam bots bons e ruins.",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
"id": "A01.38",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
- "text": "Habilite o recurso de inspeção do corpo de solicitação habilitado na política WAF do Gateway de Aplicativo do Azure.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Verifique se o recurso de inspeção do corpo da solicitação está habilitado na política WAF do Gateway de Aplicativo do Azure.",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
"id": "A01.39",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
- "text": "Ajuste o WAF do Gateway de Aplicativo do Azure para sua carga de trabalho. Reduza as detecções de falsos positivos.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Ajuste o WAF do Gateway de Aplicativo do Azure no modo de detecção para sua carga de trabalho. Reduza as detecções de falsos positivos.",
"waf": "Segurança"
},
{
"ammp": true,
- "category": "Topologia de rede e conectividade",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "category": "Topologia e conectividade de rede",
"guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
"id": "A01.40",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
- "text": "Implante sua política de WAF para o Application Gateway no modo 'Prevenção'.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Implante sua política de WAF para Gateway de Aplicativo no modo 'Prevenção'.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
"id": "A01.41",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Adicione o limite de taxa ao WAF do Gateway de Aplicativo do Azure. A limitação de taxa bloqueia clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Adicione a limitação de taxa ao WAF do Gateway de Aplicativo do Azure. A limitação de taxa bloqueia os clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
"id": "A01.42",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Use um limite alto para os limites de taxa do WAF do Gateway de Aplicativo do Azure. Limites de limite de taxa alta evitam o bloqueio de tráfego legítimo, ao mesmo tempo em que fornecem proteção contra um número extremamente alto de solicitações que podem sobrecarregar sua infraestrutura. ",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Use um limite alto para os limites de taxa do WAF do Gateway de Aplicativo do Azure. Os limites de limite de taxa altos evitam o bloqueio do tráfego legítimo, ao mesmo tempo em que fornecem proteção contra números extremamente altos de solicitações que podem sobrecarregar sua infraestrutura. ",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "99937189-ff78-492a-b9ca-18d828d82b37",
"id": "A01.43",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
"service": "App Gateway",
"severity": "Baixo",
- "subcategory": "Gateway de aplicativo",
- "text": "Se você não está esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Se você não estiver esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
"id": "A01.44",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
+ "subcategory": "Gateway de Aplicativo",
"text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Gateway de Aplicativo do Azure. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
"id": "A01.45",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Use a versão mais recente do conjunto de regras do WAF do Gateway de Aplicativo do Azure. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário atual de ameaças.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Use a versão mais recente do conjunto de regras do WAF do Gateway de Aplicativo do Azure. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário de ameaças atual.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
"id": "A01.46",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Adicione configurações de diagnóstico para salvar seus logs WAF do Gateway de Aplicativo do Azure.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Adicione configurações de diagnóstico para salvar os logs do WAF do Gateway de Aplicativo do Azure.",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "id": "A01.47",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Adicione configurações de diagnóstico para salvar seus logs do WAF do Azure Front Door.",
- "waf": "Operações"
- },
- {
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "92664c60-47e3-4591-8b1b-8d557656e686",
"id": "A01.48",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
+ "subcategory": "Gateway de Aplicativo",
"text": "Envie logs do WAF do Gateway de Aplicativo do Azure para o Microsoft Sentinel.",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "id": "A01.49",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Envie logs do WAF do Azure Front Door para o Microsoft Sentinel.",
- "waf": "Operações"
- },
- {
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
"id": "A01.50",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Defina sua configuração do WAF do Gateway de Aplicativo do Azure como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Defina a configuração do WAF do Gateway de Aplicativo do Azure como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
"id": "A01.51",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Use políticas de WAF em vez da configuração de WAF herdada.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Use as Políticas do WAF em vez da configuração herdada do WAF.",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
"id": "A01.52",
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Filtre o tráfego de entrada nos back-ends para que eles só aceitem conexões da sub-rede do Application Gateway, por exemplo, com NSGs.",
- "waf": "Segurança"
- },
- {
- "category": "Topologia de rede e conectividade",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "id": "A01.53",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "Média",
- "subcategory": "Porta da Frente",
- "text": "Certifique-se de que suas origens recebam apenas o tráfego de sua instância do Azure Front Door.",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Filtre o tráfego de entrada nos back-ends para que eles aceitem apenas conexões da sub-rede do Gateway de Aplicativo, por exemplo, com NSGs.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
"id": "A01.54",
"link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
+ "subcategory": "Gateway de Aplicativo",
"text": "Você deve criptografar o tráfego para os servidores de back-end.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
"id": "A01.55",
"link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
+ "subcategory": "Gateway de Aplicativo",
"text": "Você deve usar um Web Application Firewall.",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
"id": "A01.56",
"link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
+ "subcategory": "Gateway de Aplicativo",
"text": "Redirecionar HTTP para HTTPS",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
"id": "A01.57",
"link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Usar cookies gerenciados por gateway para direcionar o tráfego de uma sessão de usuário para o mesmo servidor para processamento",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Use cookies gerenciados por gateway para direcionar o tráfego de uma sessão de usuário para o mesmo servidor para processamento",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
"id": "A01.58",
"link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
"service": "App Gateway",
"severity": "Alto",
- "subcategory": "Gateway de aplicativo",
- "text": "Habilite a drenagem de conexão durante as atualizações de serviço planejadas para evitar a perda de conexão com membrs existentes do pool de back-end",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Habilitar a drenagem de conexão durante atualizações de serviço planejadas para evitar a perda de conexão para membros existentes do pool de back-end",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
"id": "A01.59",
"link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
"service": "App Gateway",
"severity": "Baixo",
- "subcategory": "Gateway de aplicativo",
- "text": "Criar páginas de erro personalizadas para exibir uma experiência de usuário personalizada",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Crie páginas de erro personalizadas para exibir uma experiência de usuário personalizada",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
"id": "A01.60",
"link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
+ "subcategory": "Gateway de Aplicativo",
"text": "Edite solicitações HTTP e cabeçalhos de resposta para facilitar o roteamento e a troca de informações entre o cliente e o servidor",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
"id": "A01.61",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Configure o Front Door para otimizar o roteamento de tráfego global da Web e o desempenho do usuário final de nível superior e a confiabilidade por meio de failover global rápido",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Configure o Front Door para otimizar o roteamento de tráfego da Web global e o desempenho e a confiabilidade do usuário final de nível superior por meio de failover global rápido",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "29dcc19f-a8fa-4c35-8281-290577538793",
"id": "A01.62",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Usar balanceamento de carga da camada de transporte",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Usar o balanceamento de carga da camada de transporte",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
"id": "A01.63",
"link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Configurar o roteamento com base no host ou nome de domínio para vários aplicativos Web em um único gateway",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Configurar o roteamento com base no host ou no nome de domínio para vários aplicativos Web em um único gateway",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
"id": "A01.64",
"link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
"service": "App Gateway",
"severity": "Média",
- "subcategory": "Gateway de aplicativo",
- "text": "Centralize o gerenciamento de certificados SSL para reduzir a sobrecarga de criptografia e descriptografia de um farm de servidores back-end",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Centralize o gerenciamento de certificados SSL para reduzir a sobrecarga de criptografia e descriptografia de um farm de servidores de back-end",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
"id": "A01.65",
"link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
"service": "App Gateway",
"severity": "Baixo",
- "subcategory": "Gateway de aplicativo",
- "text": "Usar o Application Gateway para suporte nativo para protocolos WebSocket e HTTP/2",
+ "subcategory": "Gateway de Aplicativo",
+ "text": "Usar o Gateway de Aplicativo para obter suporte nativo para protocolos WebSocket e HTTP/2",
"waf": "Segurança"
}
],
"metadata": {
"name": "Azure Application Delivery Networking",
"state": "GA",
- "timestamp": "March 15, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -788,7 +497,7 @@
"name": "Abrir"
},
{
- "description": "Essa verificação foi verificada e não há outros itens de ação associados a ela",
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
"name": "Cumprido"
},
{
@@ -796,7 +505,7 @@
"name": "Não é necessário"
},
{
- "description": "Não aplicável ao projeto atual",
+ "description": "Não aplicável para o projeto atual",
"name": "N/A"
}
],
diff --git a/checklists/network_appdelivery_checklist.zh-Hant.json b/checklists/network_appdelivery_checklist.zh-Hant.json
index ad6337422..20b5c1b82 100644
--- a/checklists/network_appdelivery_checklist.zh-Hant.json
+++ b/checklists/network_appdelivery_checklist.zh-Hant.json
@@ -5,17 +5,6 @@
}
],
"items": [
- {
- "category": "網路拓撲和連接",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "id": "A01.01",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "如果將客戶管理的 TLS 證書用於 Azure Front Door,請使用“最新”證書版本。降低手動續訂證書導致的中斷風險",
- "waf": "操作"
- },
{
"category": "網路拓撲和連接",
"guid": "b71ca41b-3a80-48f3-a6cd-22cdf197c1cf",
@@ -23,7 +12,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
"severity": "中等",
"subcategory": "應用交付",
- "text": "在面向內部 (corp) 和面向外部的應用 (online) 的登陸區域內執行應用交付。",
+ "text": "在面向內部 (公司) 和面向外部的應用程式 (線上) 的登陸區域內執行應用程式交付。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
@@ -36,7 +25,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "確保使用應用程式閘道 v2 SKU",
+ "text": "確保使用的是應用程式閘道 v2 SKU",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
@@ -60,7 +49,7 @@
"service": "Load Balancer",
"severity": "中等",
"subcategory": "負載均衡器",
- "text": "確保負載均衡器前端IP位址是區域冗餘的(除非需要區域性前端)。",
+ "text": "確保您的負載均衡器前端IP位址是區域冗餘的(除非您需要可用區前端)。",
"waf": "安全"
},
{
@@ -78,14 +67,14 @@
},
{
"category": "網路拓撲和連接",
- "description": "一般而言,反向代理的管理,特別是 WAF 的管理更接近應用程式而不是網路,因此它們與應用程式屬於同一訂閱。如果應用程式閘道和 WAF 由單個團隊管理,則在連接訂閱中集中應用程式閘道和 WAF 可能是可以的。",
+ "description": "一般來說,反向代理(尤其是 WAF)的管理更接近應用程式而不是網路,因此它們與應用程式屬於同一訂閱。如果應用程式閘道和 WAF 由一個團隊管理,則將其集中在連接訂閱中可能是可以的。",
"guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
"id": "A01.07",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "部署 Azure 應用程式閘道 v2 或合作夥伴 NVA,用於在登陸區域虛擬網路中代理入站 HTTP(S) 連接,並使用它們所保護的應用。",
+ "text": "部署 Azure 應用程式閘道 v2 或合作夥伴 NVA,用於在登陸區虛擬網路中代理入站 HTTP(S) 連接,以及它們所保護的應用。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
@@ -110,7 +99,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "使用至少兩個實例數配置自動縮放。",
+ "text": "配置自動縮放,最小實例數為 2。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "可靠性"
},
@@ -123,22 +112,10 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "跨可用性區域部署應用程式閘道",
+ "text": "跨可用區部署應用程式閘道",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "可靠性"
},
- {
- "category": "網路拓撲和連接",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "id": "A01.11",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "將 Azure Front Door 與 WAF 策略配合使用,以交付和幫助保護跨多個 Azure 區域的全域 HTTP/S 應用。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
- },
{
"category": "網路拓撲和連接",
"guid": "3f29812b-2363-4cef-b179-b599de0d5973",
@@ -160,7 +137,7 @@
"service": "Traffic Manager",
"severity": "高",
"subcategory": "流量管理員",
- "text": "使用流量管理器提供跨 HTTP/S 以外的協定的全域應用。",
+ "text": "使用流量管理器交付跨 HTTP/S 以外的協定的全域應用。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "可靠性"
},
@@ -172,7 +149,7 @@
"service": "Entra",
"severity": "低",
"subcategory": "應用交付",
- "text": "如果使用者只需要訪問內部應用程式,是否考慮將 Microsoft Entra ID 應用程式代理作為 Azure 虛擬桌面 (AVD) 的替代方法?",
+ "text": "如果使用者只需要存取內部應用程式,是否考慮將 Microsoft Entra ID 應用程式代理作為 Azure 虛擬桌面 (AVD) 的替代方案?",
"training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "安全"
},
@@ -184,82 +161,10 @@
"service": "Entra",
"severity": "中等",
"subcategory": "應用交付",
- "text": "若要減少為網路中的傳入連接打開的防火牆埠數,請考慮使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對內部應用程式的安全且經過身份驗證的訪問。",
+ "text": "要減少網路中為傳入連接打開的防火牆埠數,請考慮使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對內部應用程式的安全且經過身份驗證的訪問。",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "安全"
},
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "id": "A01.16",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "在「預防」模式下部署 Front Door 的 WAF 策略。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "id": "A01.17",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "避免將 Azure 流量管理器和 Azure Front Door 結合使用。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "id": "A01.18",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "在 Azure Front Door 和源上使用相同的功能變數名稱。主機名不匹配可能會導致細微的錯誤。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "id": "A01.19",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "低",
- "subcategory": "前門",
- "text": "當 Azure Front Door 源組中只有一個源時,禁用運行狀況探測。",
- "waf": "性能"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "id": "A01.20",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "為 Azure Front Door 選擇良好的運行狀況探測終結點。請考慮構建運行狀況終結點,以檢查應用程式的所有依賴項。",
- "waf": "可靠性"
- },
- {
- "category": "網路拓撲和連接",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "id": "A01.21",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "低",
- "subcategory": "前門",
- "text": "將 HEAD 運行狀況探測與 Azure Front Door 配合使用,以減少 Front Door 發送到應用程式的流量。",
- "waf": "性能"
- },
{
"ammp": true,
"category": "網路拓撲和連接",
@@ -270,171 +175,9 @@
"service": "Load Balancer",
"severity": "高",
"subcategory": "負載均衡器",
- "text": "使用 Azure NAT 閘道而不是負載均衡器出站規則,以獲得更好的 SNAT 可伸縮性",
+ "text": "使用 Azure NAT 閘道而不是負載均衡器出站規則來提高 SNAT 可伸縮性",
"waf": "可靠性"
},
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "id": "A01.23",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "將託管 TLS 證書與 Azure Front Door 配合使用。降低運營成本和因證書續訂而導致的中斷風險。",
- "waf": "操作"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "id": "A01.24",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "將 Azure Front Door WAF 配置定義為代碼。通過使用代碼,您可以更輕鬆地採用新的規則集版本並獲得額外的保護。",
- "waf": "操作"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "id": "A01.25",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "將端到端 TLS 與 Azure Front Door 配合使用。使用 TLS 進行從用戶端到 Front Door 的連接,以及從 Front Door 到源的連接。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "id": "A01.26",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "將 HTTP 到 HTTPS 重定向與 Azure Front Door 配合使用。通過自動將較舊的用戶端重定向到 HTTPS 請求來支援它們。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "id": "A01.27",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "啟用 Azure Front Door WAF。保護您的應用程式免受一系列攻擊。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "id": "A01.28",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "針對工作負載優化 Azure Front Door WAF。減少誤報檢測。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "id": "A01.29",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "啟用在 Azure Front Door WAF 策略中啟用的請求正文檢查功能。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "id": "A01.30",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "啟用 Azure Front Door WAF 預設規則集。默認規則集檢測並阻止常見攻擊。",
- "waf": "安全"
- },
- {
- "ammp": true,
- "category": "網路拓撲和連接",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "id": "A01.31",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "高",
- "subcategory": "前門",
- "text": "啟用 Azure Front Door WAF 機器人保護規則集。機器人規則檢測好的和壞的機器人。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "id": "A01.32",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "使用最新的 Azure Front Door WAF 規則集版本。規則集更新會定期更新,以考慮當前的威脅形勢。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "id": "A01.33",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "向 Azure Front Door WAF 添加速率限制。速率限制會阻止客戶端在短時間內意外或有意發送大量流量。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "id": "A01.34",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "對 Azure Front Door WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎結構不堪重負的大量請求提供保護。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "id": "A01.35",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "低",
- "subcategory": "前門",
- "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選器來阻止來自非預期國家/地區的流量。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "id": "A01.36",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "使用 Azure Front Door WAF 對流量進行地理篩選時,請指定未知 (ZZ) 位置。避免在IP位址無法進行地理匹配時意外阻止合法請求。",
- "waf": "安全"
- },
{
"ammp": true,
"category": "網路拓撲和連接",
@@ -445,7 +188,7 @@
"service": "App Gateway",
"severity": "高",
"subcategory": "應用程式閘道",
- "text": "啟用 Azure 應用程式閘道 WAF 機器人保護規則集 機器人規則可檢測好機器人和壞機器人。",
+ "text": "啟用 Azure 應用程式閘道 WAF 機器人保護規則集。機器人規則檢測好的機器人和壞的機器人。",
"waf": "安全"
},
{
@@ -457,7 +200,7 @@
"service": "App Gateway",
"severity": "高",
"subcategory": "應用程式閘道",
- "text": "啟用 Azure 應用程式閘道 WAF 策略中啟用的請求正文檢查功能。",
+ "text": "確保 Azure 應用程式閘道 WAF 策略中是否啟用了請求正文檢查功能。",
"waf": "安全"
},
{
@@ -469,16 +212,15 @@
"service": "App Gateway",
"severity": "高",
"subcategory": "應用程式閘道",
- "text": "針對工作負載優化 Azure 應用程式閘道 WAF。減少誤報檢測。",
+ "text": "在檢測模式下優化工作負載的 Azure 應用程式閘道 WAF。減少誤報檢測。",
"waf": "安全"
},
{
"ammp": true,
"category": "網路拓撲和連接",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
"guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
"id": "A01.40",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
"service": "App Gateway",
"severity": "高",
"subcategory": "應用程式閘道",
@@ -493,7 +235,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "向 Azure 應用程式閘道 WAF 添加速率限制。速率限制會阻止客戶端在短時間內意外或有意發送大量流量。",
+ "text": "向 Azure 應用程式閘道 WAF 添加速率限制。Rate limit 會阻止客戶端在短時間內意外或故意發送大量流量。",
"waf": "安全"
},
{
@@ -504,7 +246,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "對 Azure 應用程式閘道 WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎結構不堪重負的大量請求提供保護。",
+ "text": "對 Azure 應用程式閘道 WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎設施不堪重負的極大量請求提供保護。",
"waf": "安全"
},
{
@@ -515,7 +257,7 @@
"service": "App Gateway",
"severity": "低",
"subcategory": "應用程式閘道",
- "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選器來阻止來自非預期國家/地區的流量。",
+ "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選條件來阻止來自非預期國家/地區的流量。",
"waf": "安全"
},
{
@@ -526,7 +268,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "使用 Azure 應用程式閘道 WAF 對流量進行地理篩選時,請指定未知 (ZZ) 位置。避免在IP位址無法進行地理匹配時意外阻止合法請求。",
+ "text": "在使用 Azure 應用程式閘道 WAF 對流量進行異地篩選時,指定未知 (ZZ) 位置。避免在IP位址無法進行異地匹配時意外阻止合法請求。",
"waf": "安全"
},
{
@@ -551,17 +293,6 @@
"text": "添加診斷設置以保存 Azure 應用程式閘道 WAF 紀錄。",
"waf": "操作"
},
- {
- "category": "網路拓撲和連接",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "id": "A01.47",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "添加診斷設置以保存 Azure Front Door WAF 紀錄。",
- "waf": "操作"
- },
{
"category": "網路拓撲和連接",
"guid": "92664c60-47e3-4591-8b1b-8d557656e686",
@@ -573,17 +304,6 @@
"text": "將 Azure 應用程式閘道 WAF 紀錄發送到 Microsoft Sentinel。",
"waf": "操作"
},
- {
- "category": "網路拓撲和連接",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "id": "A01.49",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "將 Azure Front Door WAF 日誌發送到 Microsoft Sentinel。",
- "waf": "操作"
- },
{
"category": "網路拓撲和連接",
"guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
@@ -614,18 +334,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "篩選後端中的入站流量,以便它們僅接受來自應用程式閘道子網的連接,例如使用NSG。",
- "waf": "安全"
- },
- {
- "category": "網路拓撲和連接",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "id": "A01.53",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "中等",
- "subcategory": "前門",
- "text": "確保源僅從 Azure Front Door 實例獲取流量。",
+ "text": "篩選後端中的入站流量,使其僅接受來自應用程式閘道子網的連接,例如使用NSG的連接。",
"waf": "安全"
},
{
@@ -636,7 +345,7 @@
"service": "App Gateway",
"severity": "高",
"subcategory": "應用程式閘道",
- "text": "您應該對發往後端伺服器的流量進行加密。",
+ "text": "您應該對到後端伺服器的流量進行加密。",
"waf": "安全"
},
{
@@ -669,7 +378,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "使用閘道管理的 Cookie 將流量從使用者工作階段定向到同一伺服器進行處理",
+ "text": "使用閘道託管的 Cookie 將流量從使用者工作階段定向到同一伺服器進行處理",
"waf": "操作"
},
{
@@ -680,7 +389,7 @@
"service": "App Gateway",
"severity": "高",
"subcategory": "應用程式閘道",
- "text": "在計劃的服務更新期間啟用連接耗盡,以防止與後端池的現有 membr 的連接丟失",
+ "text": "在計劃內服務更新期間啟用連接耗盡,以防止後端池的現有成員失去連接",
"waf": "安全"
},
{
@@ -713,7 +422,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "配置 Front Door,通過快速全域故障轉移優化全球 Web 流量路由和頂級最終使用者性能和可靠性",
+ "text": "配置 Front Door 以優化全域 Web 流量路由和頂級最終使用者性能,並通過快速全域故障轉移實現可靠性",
"waf": "性能"
},
{
@@ -724,7 +433,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "使用傳輸層負載平衡",
+ "text": "使用傳輸層負載均衡",
"waf": "性能"
},
{
@@ -735,7 +444,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "根據主機名或域名為單個閘道上的多個 Web 應用程式配置路由",
+ "text": "為單個閘道上的多個 Web 應用程式配置基於主機名稱或功能變數名稱的路由",
"waf": "安全"
},
{
@@ -746,7 +455,7 @@
"service": "App Gateway",
"severity": "中等",
"subcategory": "應用程式閘道",
- "text": "集中管理 SSL 證書,以減少後端伺服器場的加密和解密開銷",
+ "text": "集中 SSL 證書管理以減少後端伺服器場的加密和解密開銷",
"waf": "安全"
},
{
@@ -757,14 +466,14 @@
"service": "App Gateway",
"severity": "低",
"subcategory": "應用程式閘道",
- "text": "使用應用程式閘道對 WebSocket 和 HTTP/2 協定提供本機支援",
+ "text": "使用應用程式閘道實現對 WebSocket 和 HTTP/2 協定的本機支援",
"waf": "安全"
}
],
"metadata": {
"name": "Azure Application Delivery Networking",
"state": "GA",
- "timestamp": "March 15, 2024",
+ "timestamp": "September 23, 2024",
"waf": "all"
},
"severities": [
@@ -780,15 +489,15 @@
],
"status": [
{
- "description": "此檢查尚未查看",
+ "description": "尚未查看此檢查",
"name": "未驗證"
},
{
- "description": "有一個與此檢查關聯的措施項",
+ "description": "存在與此檢查關聯的操作項",
"name": "打開"
},
{
- "description": "此檢查已通過驗證,並且沒有與之關聯的進一步操作項",
+ "description": "此檢查已經過驗證,沒有與之關聯的其他操作項",
"name": "實現"
},
{
diff --git a/checklists/sap_checklist.en.json b/checklists/sap_checklist.en.json
index 4eefc8d82..ebbd36020 100644
--- a/checklists/sap_checklist.en.json
+++ b/checklists/sap_checklist.en.json
@@ -72,7 +72,8 @@
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"severity": "High",
"training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering"
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant"
},
{
"category": "Business Continuity and Disaster Recovery",
@@ -125,7 +126,8 @@
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"severity": "High",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq"
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr"
},
{
"category": "Business Continuity and Disaster Recovery",
@@ -201,7 +203,8 @@
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"severity": "High",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections"
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))"
},
{
"category": "Business Continuity and Disaster Recovery",
@@ -318,7 +321,8 @@
"text": "Deploy both VMs in the high-availability pair in an availability set or in availability zones. These VMs should be the same size and have the same storage configuration.",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"severity": "Medium",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)"
},
{
"category": "Business Continuity and Disaster Recovery",
@@ -413,7 +417,8 @@
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"severity": "High",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security"
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)"
},
{
"category": "Identity and Access",
@@ -564,10 +569,12 @@
"waf": "Operations",
"service": "SAP",
"text": "enforce existing Management Group policies to SAP Subscriptions",
+ "description": "Keep your management group hierarchy reasonably flat, no more than four.",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)"
},
{
"category": "Management Group and Subscriptions",
@@ -578,7 +585,8 @@
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"severity": "High",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape"
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "graph": "Resources | summarize count()"
},
{
"category": "Management Group and Subscriptions",
@@ -589,7 +597,8 @@
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"severity": "High",
"training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape"
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId"
},
{
"category": "Management Group and Subscriptions",
@@ -600,7 +609,8 @@
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"severity": "High",
"training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview"
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc"
},
{
"category": "Management Group and Subscriptions",
@@ -642,7 +652,8 @@
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant"
},
{
"category": "Management and Monitoring",
@@ -824,7 +835,8 @@
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance"
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant"
},
{
"category": "Management and Monitoring",
@@ -939,10 +951,12 @@
"waf": "Reliability",
"service": "SAP",
"text": "Local and global VNet peering provide connectivity and are the preferred approaches to ensure connectivity between landing zones for SAP deployments across multiple Azure regions",
+ "description": "When configuring VNet peering, use the Allow traffic to remote virtual networks setting.",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview"
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)"
},
{
"category": "Network Topology and Connectivity",
@@ -964,7 +978,8 @@
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"severity": "Medium",
"training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations"
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant"
},
{
"category": "Network Topology and Connectivity",
@@ -997,7 +1012,8 @@
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"severity": "High",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing"
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)"
},
{
"category": "Network Topology and Connectivity",
@@ -1008,7 +1024,8 @@
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"severity": "High",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations"
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId"
},
{
"category": "Network Topology and Connectivity",
@@ -1041,7 +1058,8 @@
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json"
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant"
},
{
"category": "Network Topology and Connectivity",
@@ -1118,7 +1136,8 @@
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"severity": "High",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat"
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking"
},
{
"category": "Network Topology and Connectivity",
@@ -1140,7 +1159,8 @@
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"severity": "Medium",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works"
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc"
},
{
"category": "Network Topology and Connectivity",
@@ -1422,7 +1442,8 @@
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"severity": "High",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview"
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName"
},
{
"category": "Security, Governance and Compliance",
@@ -1510,7 +1531,8 @@
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"severity": "High",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices"
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName"
},
{
"category": "Security, Governance and Compliance",
@@ -1680,6 +1702,6 @@
"name": "SAP Checklist",
"state": "GA",
"waf": "all",
- "timestamp": "May 14, 2024"
+ "timestamp": "October 02, 2024"
}
-}
+}
\ No newline at end of file
diff --git a/checklists/sap_checklist.es.json b/checklists/sap_checklist.es.json
index f2e3de649..6d23a5b98 100644
--- a/checklists/sap_checklist.es.json
+++ b/checklists/sap_checklist.es.json
@@ -4,7 +4,7 @@
"name": "Identidad y acceso"
},
{
- "name": "Topología y conectividad de red"
+ "name": "Topología de red y conectividad"
},
{
"name": "Seguridad, gobernanza y cumplimiento"
@@ -24,7 +24,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "ACSS",
- "text": "Azure Center for SAP Solutions (ACSS) es una oferta de Azure que convierte a SAP en una carga de trabajo de nivel superior en Azure. ACSS es una solución integral que permite crear y ejecutar sistemas SAP como una carga de trabajo unificada en Azure y proporciona una base más fluida para la innovación. Puede aprovechar las funcionalidades de administración de los sistemas SAP nuevos y existentes basados en Azure.",
+ "text": "Azure Center for SAP solutions (ACSS) es una oferta de Azure que convierte a SAP en una carga de trabajo de nivel superior en Azure. ACSS es una solución integral que permite crear y ejecutar sistemas SAP como una carga de trabajo unificada en Azure y proporciona una base más fluida para la innovación. Puede aprovechar las capacidades de administración de los sistemas SAP basados en Azure nuevos y existentes.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
"waf": "Operaciones"
},
@@ -46,7 +46,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Copia de seguridad y restauración",
- "text": "Realice una recuperación a un momento dado de sus bases de datos de producción en cualquier momento y en un período de tiempo que cumpla con su RTO; La recuperación a un momento dado suele incluir errores del operador al eliminar datos en la capa DBMS o a través de SAP, por cierto",
+ "text": "Realice una recuperación a un momento dado para sus bases de datos de producción en cualquier momento y en un período de tiempo que cumpla con su RTO; La recuperación a un momento dado suele incluir errores del operador que eliminan datos en la capa DBMS o a través de SAP, por cierto",
"waf": "Fiabilidad"
},
{
@@ -55,7 +55,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Recuperación ante desastres",
- "text": "Pruebe los tiempos de copia de seguridad y recuperación para verificar que cumplen con los requisitos de RTO para restaurar todos los sistemas simultáneamente después de un desastre.",
+ "text": "Pruebe los tiempos de copia de seguridad y recuperación para verificar que cumplan con los requisitos de RTO para restaurar todos los sistemas simultáneamente después de un desastre.",
"waf": "Fiabilidad"
},
{
@@ -65,7 +65,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperación ante desastres",
- "text": "Puede replicar el almacenamiento estándar entre regiones emparejadas, pero no puede usar el almacenamiento estándar para almacenar las bases de datos o los discos duros virtuales. Las copias de seguridad solo se pueden replicar entre las regiones emparejadas que utilice. Para todos los demás datos, ejecute la replicación mediante características nativas de DBMS, como SQL Server Always On o SAP HANA System Replication. Use una combinación de Site Recovery, rsync o robocopy y otro software de terceros para la capa de aplicación de SAP.",
+ "text": "Puede replicar el almacenamiento estándar entre regiones emparejadas, pero no puede usar el almacenamiento estándar para almacenar sus bases de datos o discos duros virtuales. Solo puede replicar copias de seguridad entre las regiones emparejadas que utilice. Para todos los demás datos, ejecute la replicación mediante características nativas de DBMS, como SQL Server Always On o SAP HANA System Replication. Utilice una combinación de Site Recovery, rsync o robocopy y otro software de terceros para la capa de aplicación de SAP.",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "Fiabilidad"
},
@@ -82,12 +82,13 @@
},
{
"category": "Continuidad del negocio y recuperación ante desastres",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperación ante desastres",
- "text": "Configure conexiones de ExpressRoute desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria. Además, como alternativa al uso de ExpressRoute, considere la posibilidad de configurar conexiones VPN desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria.",
+ "text": "Configure las conexiones de ExpressRoute desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria. Además, como alternativa al uso de ExpressRoute, considere la posibilidad de configurar conexiones VPN desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria.",
"training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
"waf": "Fiabilidad"
},
@@ -129,12 +130,13 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperación ante desastres",
- "text": "Se debe usar la tecnología de replicación de bases de datos nativas para sincronizar la base de datos en un par de alta disponibilidad.",
+ "text": "Se debe usar la tecnología de replicación de base de datos nativa para sincronizar la base de datos en un par de alta disponibilidad.",
"training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidad"
},
{
"category": "Continuidad del negocio y recuperación ante desastres",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
"service": "SAP",
@@ -150,7 +152,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperación ante desastres",
- "text": "Use Site Recovery para replicar un servidor de aplicaciones en un sitio de recuperación ante desastres. Site Recovery también puede ayudar a replicar máquinas virtuales de clúster de servicios centrales en el sitio de recuperación ante desastres. Al invocar la recuperación ante desastres, deberá volver a configurar el clúster de Linux Pacemaker en el sitio de recuperación ante desastres (por ejemplo, reemplazar el VIP o SBD, ejecutar corosync.conf, etc.).",
+ "text": "Use Site Recovery para replicar un servidor de aplicaciones en un sitio de recuperación ante desastres. Site Recovery también puede ayudar a replicar máquinas virtuales de clúster de servicios centrales en el sitio de recuperación ante desastres. Al invocar la recuperación ante desastres, deberá volver a configurar el clúster de Linux Pacemaker en el sitio de recuperación ante desastres (por ejemplo, reemplazar el VIP o el SBD, ejecutar corosync.conf, etc.).",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "Fiabilidad"
},
@@ -172,7 +174,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "En el caso de SAP y bases de datos de SAP, considere la posibilidad de implementar clústeres de conmutación por error automática. En Windows, los clústeres de conmutación por error de Windows Server admiten la conmutación por error. En Linux, Linux Pacemaker o herramientas de terceros como SIOS Protection Suite y Veritas InfoScale admiten la conmutación por error.",
+ "text": "En el caso de SAP y bases de datos de SAP, considere la posibilidad de implementar clústeres de conmutación por error automática. En Windows, los clústeres de conmutación por error de Windows Server admiten la conmutación por error. En Linux, Linux Pacemaker o herramientas de terceros, como SIOS Protection Suite y Veritas InfoScale, admiten la conmutación por error.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -183,7 +185,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Azure no admite arquitecturas en las que las máquinas virtuales principal y secundaria compartan el almacenamiento de los datos de DBMS. Para la capa DBMS, el patrón de arquitectura común es replicar bases de datos al mismo tiempo y con pilas de almacenamiento diferentes a las que usan las máquinas virtuales principal y secundaria.",
+ "text": "Azure no admite arquitecturas en las que las máquinas virtuales principal y secundaria compartan almacenamiento para los datos de DBMS. Para la capa DBMS, el patrón de arquitectura común es replicar bases de datos al mismo tiempo y con pilas de almacenamiento diferentes a las que usan las máquinas virtuales principales y secundarias.",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
"waf": "Fiabilidad"
},
@@ -194,7 +196,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Los datos de DBMS y los archivos de registro de transacciones y puesta al día se almacenan en el almacenamiento en bloque compatible con Azure o en Azure NetApp Files. Azure Files o Azure Premium Files no se admiten como almacenamiento para datos de DBMS o archivos de registro de puesta al día con la carga de trabajo de SAP.",
+ "text": "Los datos de DBMS y los archivos de registro de transacciones/puesta al día se almacenan en el almacenamiento en bloque compatible con Azure o en Azure NetApp Files. Azure Files o Azure Premium Files no se admiten como almacenamiento para datos de DBMS ni archivos de registro de puesta al día con la carga de trabajo de SAP.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
"waf": "Fiabilidad"
},
@@ -205,18 +207,19 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Puede usar discos compartidos de Azure en Windows para componentes ASCS + SCS y escenarios específicos de alta disponibilidad. Configure los clústeres de conmutación por error por separado para los componentes de la capa de aplicación de SAP y la capa de DBMS. Actualmente, Azure no admite arquitecturas de alta disponibilidad que combinen componentes de la capa de aplicación de SAP y la capa de DBMS en un clúster de conmutación por error.",
+ "text": "Puede usar discos compartidos de Azure en Windows para componentes ASCS + SCS y escenarios específicos de alta disponibilidad. Configure los clústeres de conmutación por error por separado para los componentes de la capa de aplicación de SAP y la capa de DBMS. Actualmente, Azure no admite arquitecturas de alta disponibilidad que combinen los componentes de la capa de aplicación de SAP y la capa de DBMS en un clúster de conmutación por error.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidad"
},
{
"category": "Continuidad del negocio y recuperación ante desastres",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "La mayoría de los clústeres de conmutación por error para los componentes de la capa de aplicación (ASCS) de SAP y la capa de DBMS requieren una dirección IP virtual para un clúster de conmutación por error. Azure Load Balancer debe controlar la dirección IP virtual para todos los demás casos. Un principio de diseño es usar un equilibrador de carga por configuración de clúster. Te recomendamos que utilices la versión estándar del equilibrador de carga (SKU de equilibrador de carga estándar).",
+ "text": "La mayoría de los clústeres de conmutación por error para los componentes de la capa de aplicación (ASCS) de SAP y la capa de DBMS requieren una dirección IP virtual para un clúster de conmutación por error. Azure Load Balancer debe controlar la dirección IP virtual para todos los demás casos. Un principio de diseño es usar un equilibrador de carga por configuración de clúster. Te recomendamos que utilices la versión estándar del equilibrador de carga (SKU de Standard Load Balancer).",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -238,7 +241,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Antes de implementar la infraestructura de alta disponibilidad, y en función de la región que elija, determine si desea realizar la implementación con un conjunto de disponibilidad de Azure o una zona de disponibilidad.",
+ "text": "Antes de implementar la infraestructura de alta disponibilidad, y en función de la región que elija, determine si desea implementar con un conjunto de disponibilidad de Azure o con una zona de disponibilidad.",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -249,7 +252,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Si desea cumplir los acuerdos de nivel de servicio de infraestructura para las aplicaciones de los componentes de SAP (servicios centrales, servidores de aplicaciones y bases de datos), debe elegir las mismas opciones de alta disponibilidad (máquinas virtuales, conjuntos de disponibilidad, zonas de disponibilidad) para todos los componentes.",
+ "text": "Si desea cumplir los acuerdos de nivel de servicio de infraestructura para sus aplicaciones para componentes de SAP (servicios centrales, servidores de aplicaciones y bases de datos), debe elegir las mismas opciones de alta disponibilidad (máquinas virtuales, conjuntos de disponibilidad, zonas de disponibilidad) para todos los componentes.",
"waf": "Fiabilidad"
},
{
@@ -259,7 +262,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "No mezcle servidores de diferentes roles en el mismo conjunto de disponibilidad. Mantenga las máquinas virtuales de servicios centrales, las máquinas virtuales de base de datos y las máquinas virtuales de aplicaciones en sus propios conjuntos de disponibilidad",
+ "text": "No mezcle servidores de diferentes roles en el mismo conjunto de disponibilidad. Mantenga las máquinas virtuales de servicios centrales, las máquinas virtuales de bases de datos y las máquinas virtuales de aplicaciones en sus propios conjuntos de disponibilidad",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -270,7 +273,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Alta disponibilidad",
- "text": "No se pueden implementar conjuntos de disponibilidad de Azure dentro de una zona de disponibilidad de Azure a menos que se usen grupos de selección de ubicación de proximidad.",
+ "text": "No se pueden implementar conjuntos de disponibilidad de Azure en una zona de disponibilidad de Azure a menos que se usen grupos de selección de ubicación por proximidad.",
"training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"waf": "Fiabilidad"
},
@@ -281,7 +284,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Al crear conjuntos de disponibilidad, use el número máximo de dominios de error y dominios de actualización disponibles. Por ejemplo, si implementa más de dos máquinas virtuales en un conjunto de disponibilidad, use el número máximo de dominios de error (tres) y suficientes dominios de actualización para limitar el efecto de posibles errores de hardware físico, interrupciones de red o interrupciones de energía, además del mantenimiento planeado de Azure. El número predeterminado de dominios de error es dos y no puede cambiarlo en línea más adelante.",
+ "text": "Al crear conjuntos de disponibilidad, use el número máximo de dominios de error y dominios de actualización disponibles. Por ejemplo, si implementa más de dos máquinas virtuales en un conjunto de disponibilidad, use el número máximo de dominios de error (tres) y suficientes dominios de actualización para limitar el efecto de posibles errores de hardware físico, interrupciones de red o interrupciones de energía, además del mantenimiento planeado de Azure. El número predeterminado de dominios de error es dos y no se puede cambiar en línea más adelante.",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -292,7 +295,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Cuando se usan grupos de selección con selección de ubicación de proximidad de Azure en una implementación de conjunto de disponibilidad, los tres componentes de SAP (servicios centrales, servidor de aplicaciones y base de datos) deben estar en el mismo grupo con selección de ubicación de proximidad.",
+ "text": "Cuando se usan grupos de selección de ubicación de proximidad de Azure en una implementación de conjunto de disponibilidad, los tres componentes de SAP (servicios centrales, servidor de aplicaciones y base de datos) deben estar en el mismo grupo de selección de ubicación por proximidad.",
"waf": "Fiabilidad"
},
{
@@ -302,7 +305,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidad",
- "text": "Use un grupo de selección de ubicación de proximidad por SID de SAP. Los grupos no abarcan zonas de disponibilidad ni regiones de Azure",
+ "text": "Utilice un grupo de ubicación de proximidad por SID de SAP. Los grupos no se extienden entre zonas de disponibilidad ni regiones de Azure",
"waf": "Fiabilidad"
},
{
@@ -323,12 +326,13 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Alta disponibilidad",
- "text": "Actualmente, Azure no admite la combinación de ASCS y alta disponibilidad de base de datos en el mismo clúster de Linux Pacemaker; sepáralos en grupos individuales. Sin embargo, puede combinar hasta cinco clústeres de servicios centrales en un par de máquinas virtuales.",
+ "text": "Actualmente, Azure no admite la combinación de ASCS y DB HA en el mismo clúster de Linux Pacemaker; sepárelos en grupos individuales. Sin embargo, puede combinar hasta cinco clústeres de servicios centrales en un par de máquinas virtuales.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidad"
},
{
"category": "Continuidad del negocio y recuperación ante desastres",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
@@ -344,7 +348,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Alta disponibilidad",
- "text": "Azure admite la instalación y configuración de SAP HANA y las instancias de ASCS/SCS y ERS en el mismo clúster de alta disponibilidad que se ejecuta en Red Hat Enterprise Linux (RHEL).",
+ "text": "Azure admite la instalación y configuración de SAP HANA, ASCS/SCS e instancias de ERS en el mismo clúster de alta disponibilidad que se ejecuta en Red Hat Enterprise Linux (RHEL).",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -366,7 +370,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Almacenamiento",
- "text": "Debe ejecutar SAP HANA en Azure solo en los tipos de almacenamiento certificados por SAP. Tenga en cuenta que ciertos volúmenes deben ejecutarse en determinadas configuraciones de disco, cuando corresponda. Estas configuraciones incluyen la habilitación del acelerador de escritura y el uso del almacenamiento premium. También debe asegurarse de que el sistema de archivos que se ejecuta en el almacenamiento es compatible con el DBMS que se ejecuta en la máquina.",
+ "text": "Debe ejecutar SAP HANA en Azure solo en los tipos de almacenamiento certificados por SAP. Tenga en cuenta que ciertos volúmenes deben ejecutarse en ciertas configuraciones de disco, cuando corresponda. Estas configuraciones incluyen la habilitación del Acelerador de escritura y el uso del almacenamiento Premium. También debe asegurarse de que el sistema de archivos que se ejecuta en el almacenamiento sea compatible con el DBMS que se ejecuta en la máquina.",
"training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "Fiabilidad"
},
@@ -388,7 +392,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Almacenamiento",
- "text": "Es posible que los diferentes servicios de almacenamiento nativos de Azure (como Azure Files, Azure NetApp Files, Azure Shared Disk) no estén disponibles en todas las regiones. Por lo tanto, para tener una configuración de SAP similar en la región de recuperación ante desastres después de la conmutación por error, asegúrese de que el servicio de almacenamiento correspondiente se ofrece en el sitio de recuperación ante desastres.",
+ "text": "Es posible que los diferentes servicios de almacenamiento nativo de Azure (como Azure Files, Azure NetApp Files, Azure Shared Disk) no estén disponibles en todas las regiones. Por lo tanto, para tener una configuración de SAP similar en la región de recuperación ante desastres después de la conmutación por error, asegúrese de que el servicio de almacenamiento correspondiente se ofrezca en el sitio de recuperación ante desastres.",
"waf": "Fiabilidad"
},
{
@@ -408,7 +412,7 @@
"service": "SAP",
"severity": "Bajo",
"subcategory": " ",
- "text": "En el caso de usar Azure Premium Storage con SAP HANA, se puede usar el almacenamiento SSD estándar de Azure para seleccionar una solución de almacenamiento rentable. Sin embargo, tenga en cuenta que la elección de SSD estándar o almacenamiento de Azure HDD estándar afectará al Acuerdo de Nivel de Servicio de las máquinas virtuales individuales. Además, para sistemas con menor rendimiento de E/S y baja latencia, como entornos que no son de producción, se pueden usar máquinas virtuales de series inferiores.",
+ "text": "En el caso de usar Azure Premium Storage con SAP HANA, el almacenamiento SSD estándar de Azure se puede usar para seleccionar una solución de almacenamiento económica en cuanto a costos. Sin embargo, tenga en cuenta que la elección del almacenamiento SSD estándar o HDD estándar de Azure afectará al Acuerdo de Nivel de Servicio de las máquinas virtuales individuales. Además, para sistemas con menor rendimiento de E/S y baja latencia, como entornos que no son de producción, se pueden usar máquinas virtuales de series inferiores.",
"waf": "Costar"
},
{
@@ -418,11 +422,12 @@
"service": "SAP",
"severity": "Bajo",
"subcategory": " ",
- "text": "Como configuración alternativa de menor costo (multipropósito), puede elegir una SKU de bajo rendimiento para las máquinas virtuales del servidor de base de datos de HANA que no son de producción. Sin embargo, es importante tener en cuenta que algunos tipos de máquinas virtuales, como la serie E, no están certificadas para HANA (directorio de hardware de SAP HANA) o no pueden alcanzar una latencia de almacenamiento inferior a 1 ms.",
+ "text": "Como configuración alternativa de menor costo (multipropósito), puede elegir una SKU de bajo rendimiento para las máquinas virtuales de servidor de base de datos HANA que no son de producción. Sin embargo, es importante tener en cuenta que algunos tipos de máquinas virtuales, como la serie E, no están certificadas por HANA (directorio de hardware de SAP HANA) o no pueden alcanzar una latencia de almacenamiento inferior a 1 ms.",
"waf": "Costar"
},
{
"category": "Identidad y acceso",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
@@ -439,7 +444,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Aplicación de la propagación de la entidad de seguridad para reenviar la identidad de la aplicación en la nube de SAP a SAP local (incluida IaaS) a través del conector en la nube",
+ "text": "Aplicación de la propagación de la entidad de seguridad para reenviar la identidad de la aplicación en la nube de SAP a SAP local (incluida la IaaS) a través del conector en la nube",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
"waf": "Seguridad"
},
@@ -460,7 +465,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI mediante SAML.",
+ "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI, mediante SAML.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "Seguridad"
},
@@ -470,7 +475,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI mediante SAML.",
+ "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI, mediante SAML.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
"waf": "Seguridad"
},
@@ -481,7 +486,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Puede implementar SSO en la GUI de SAP mediante SAP NetWeaver SSO o una solución de partner.",
+ "text": "Puede implementar el inicio de sesión único en la interfaz gráfica de usuario de SAP mediante el inicio de sesión único de SAP NetWeaver o una solución de socio.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "Seguridad"
},
@@ -491,7 +496,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere el servidor de inicio de sesión seguro de SAP, que es un componente de la solución SSO de SAP.",
+ "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere la posibilidad de utilizar SAP Secure Login Server, que es un componente de la solución SAP SSO.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "Seguridad"
},
@@ -502,7 +507,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere el servidor de inicio de sesión seguro de SAP, que es un componente de la solución SSO de SAP.",
+ "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere la posibilidad de utilizar SAP Secure Login Server, que es un componente de la solución SAP SSO.",
"waf": "Seguridad"
},
{
@@ -572,11 +577,13 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Identidad",
- "text": "Si usa SAP SuccessFactors, considere la posibilidad de usar el aprovisionamiento automatizado de usuarios de Azure AD. Con esta integración, a medida que agrega nuevos empleados a SAP SuccessFactors, puede crear automáticamente sus cuentas de usuario en Azure AD. Opcionalmente, puede crear cuentas de usuario en Microsoft 365 u otras aplicaciones SaaS compatibles con Azure AD. Utilice la escritura diferida de la dirección de correo electrónico en SAP SuccessFactors.",
+ "text": "Si usa SAP SuccessFactors, considere la posibilidad de usar el aprovisionamiento automatizado de usuarios de Azure AD. Con esta integración, a medida que agregue nuevos empleados a SAP SuccessFactors, puede crear automáticamente sus cuentas de usuario en Azure AD. Opcionalmente, puede crear cuentas de usuario en Microsoft 365 u otras aplicaciones SaaS compatibles con Azure AD. Utilice la reescritura de la dirección de correo electrónico en SAP SuccessFactors.",
"waf": "Seguridad"
},
{
"category": "Grupo de administración y suscripciones",
+ "description": "Mantenga la jerarquía del grupo de administración razonablemente plana, no más de cuatro.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
@@ -588,28 +595,31 @@
},
{
"category": "Grupo de administración y suscripciones",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "Alto",
"subcategory": "Suscripciones",
- "text": "Integre aplicaciones estrechamente acopladas en la misma suscripción de SAP para evitar una complejidad adicional de enrutamiento y administración",
+ "text": "Integre aplicaciones estrechamente acopladas en la misma suscripción de SAP para evitar la complejidad adicional del enrutamiento y la administración",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
"waf": "Operaciones"
},
{
"category": "Grupo de administración y suscripciones",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "Alto",
"subcategory": "Suscripciones",
- "text": "Aprovechar la suscripción como unidad de escalado y escalar nuestros recursos, considere implementar la suscripción por entorno, por ejemplo. Sandbox, no-prod, prod ",
+ "text": "Aprovechar la suscripción como unidad de escala y escalar nuestros recursos, considere implementar la suscripción por entorno, por ejemplo. Sandbox, no prod, prod ",
"training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
"waf": "Operaciones"
},
{
"category": "Grupo de administración y suscripciones",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
@@ -626,7 +636,7 @@
"service": "SAP",
"severity": "Bajo",
"subcategory": "Suscripciones",
- "text": "La API de cuota es una API de REST que se puede usar para ver y administrar las cuotas de los servicios de Azure. Considere usarlo si es necesario.",
+ "text": "La API de cuota es una API de REST que puede usar para ver y administrar las cuotas de los servicios de Azure. Considere usarlo si es necesario.",
"waf": "Operaciones"
},
{
@@ -636,7 +646,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Suscripciones",
- "text": "Si realiza la implementación en una zona de disponibilidad, asegúrese de que la implementación de la zona de la máquina virtual esté disponible una vez que se haya aprobado la cuota. Envíe una solicitud de soporte técnico con la suscripción, la serie de máquinas virtuales, el número de CPU y la zona de disponibilidad necesarias.",
+ "text": "Si se implementa en una zona de disponibilidad, asegúrese de que la implementación de zona de la máquina virtual esté disponible una vez que se haya aprobado la cuota. Envíe una solicitud de soporte técnico con la suscripción, la serie de máquinas virtuales, el número de CPU y la zona de disponibilidad necesarias.",
"waf": "Operaciones"
},
{
@@ -646,18 +656,19 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Suscripciones",
- "text": "Asegúrese de que los servicios y funciones requeridos estén disponibles dentro de las regiones de implementación elegidas, por ejemplo. ANF, Zona, etc.",
+ "text": "Asegúrese de que los servicios y funciones necesarios estén disponibles dentro de las regiones de implementación elegidas, por ejemplo. ANF, Zona, etc.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "Operaciones"
},
{
"category": "Grupo de administración y suscripciones",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
"severity": "Medio",
"subcategory": "Suscripciones",
- "text": "Aproveche la etiqueta de recurso de Azure para la categorización de costos y la agrupación de recursos (facturación, departamento (o unidad de negocio), entorno (producción, fase, desarrollo), nivel (nivel web, nivel de aplicación), propietario de la aplicación, ProjectName)",
+ "text": "Aproveche la etiqueta de recurso de Azure para la categorización de costos y la agrupación de recursos (: BillTo, Departamento (o unidad de negocio), Medio ambiente (producción, Fase, Desarrollo), Nivel (nivel web, nivel de aplicación), Propietario de la aplicación, Nombre del proyecto)",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Operaciones"
},
@@ -667,7 +678,7 @@
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
"severity": "Alto",
- "subcategory": "BCDR",
+ "subcategory": "BCDR (en inglés)",
"text": "Ayude a proteger la base de datos de HANA mediante el servicio Azure Backup.",
"training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "Fiabilidad"
@@ -678,8 +689,8 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
"service": "SAP",
"severity": "Medio",
- "subcategory": "BCDR",
- "text": "Si implementa Azure NetApp Files para la base de datos HANA, Oracle o DB2, use la herramienta Azure Application Consistent Snapshot (AzAcSnap) para tomar instantáneas coherentes con la aplicación. AzAcSnap también es compatible con las bases de datos de Oracle. Considere la posibilidad de usar AzAcSnap en una máquina virtual central en lugar de en máquinas virtuales individuales.",
+ "subcategory": "BCDR (en inglés)",
+ "text": "Si implementa Azure NetApp Files para la base de datos HANA, Oracle o DB2, use la herramienta Azure Application Consistent Snapshot (AzAcSnap) para tomar instantáneas coherentes con la aplicación. AzAcSnap también es compatible con bases de datos de Oracle. Considere la posibilidad de usar AzAcSnap en una máquina virtual central en lugar de en máquinas virtuales individuales.",
"waf": "Fiabilidad"
},
{
@@ -689,7 +700,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Administración",
- "text": "Asegúrese de que la zona horaria coincida entre el sistema operativo y el sistema SAP.",
+ "text": "Asegúrese de que las zonas horarias coincidan entre el sistema operativo y el sistema SAP.",
"waf": "Operaciones"
},
{
@@ -720,7 +731,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Administración",
- "text": "Si se asocia con los clientes mediante la administración de sus propiedades de SAP, considere la posibilidad de usar Azure Lighthouse. Azure Lighthouse permite a los proveedores de servicios administrados usar los servicios de identidad nativos de Azure para autenticarse en el entorno de los clientes. Pone el control en manos de los clientes, ya que pueden revocar el acceso en cualquier momento y auditar las acciones de los proveedores de servicios.",
+ "text": "Si se asocia con los clientes mediante la administración de sus propiedades de SAP, considere la posibilidad de Azure Lighthouse. Azure Lighthouse permite a los proveedores de servicios administrados usar los servicios de identidad nativos de Azure para autenticarse en el entorno de los clientes. Pone el control en manos de los clientes, ya que pueden revocar el acceso en cualquier momento y auditar las acciones de los proveedores de servicios.",
"waf": "Operaciones"
},
{
@@ -730,7 +741,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Administración",
- "text": "Use Azure Update Manager para comprobar el estado de las actualizaciones disponibles para una sola máquina virtual o varias máquinas virtuales y considere la posibilidad de programar revisiones periódicas.",
+ "text": "Use Azure Update Manager para comprobar el estado de las actualizaciones disponibles para una sola máquina virtual o varias máquinas virtuales y considere la posibilidad de programar la aplicación periódica de revisiones.",
"training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
"waf": "Operaciones"
},
@@ -752,7 +763,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "Use Azure Monitor para soluciones SAP para supervisar las cargas de trabajo de SAP (SAP HANA, clústeres de SUSE de alta disponibilidad y sistemas SQL) en Azure. Considere la posibilidad de complementar las soluciones de Azure Monitor para SAP con SAP Solution Manager.",
+ "text": "Use las soluciones de Azure Monitor para SAP para supervisar las cargas de trabajo de SAP (SAP HANA, clústeres de SUSE de alta disponibilidad y sistemas SQL) en Azure. Considere la posibilidad de complementar las soluciones de Azure Monitor para SAP con SAP Solution Manager.",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "Operaciones"
},
@@ -763,7 +774,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Monitorización",
- "text": "Ejecute una comprobación de extensión de máquina virtual para SAP. VM Extension for SAP usa la identidad administrada asignada de una máquina virtual (VM) para acceder a los datos de configuración y supervisión de VM. La comprobación garantiza que todas las métricas de rendimiento de la aplicación SAP proceden de la extensión de Azure para SAP subyacente.",
+ "text": "Ejecute una extensión de máquina virtual para la comprobación de SAP. VM Extension for SAP usa la identidad administrada asignada de una máquina virtual (VM) para acceder a los datos de configuración y supervisión de VM. La comprobación garantiza que todas las métricas de rendimiento de la aplicación SAP procedan de la extensión de Azure para SAP subyacente.",
"training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
"waf": "Operaciones"
},
@@ -817,7 +828,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "Ejecute el informe de resistencia para asegurarse de que la configuración de toda la infraestructura de Azure aprovisionada (proceso, base de datos, redes, almacenamiento, Site Recovery) cumple con la configuración definida por Cloud Adaption Framework para Azure.",
+ "text": "Ejecute el informe de resistencia para asegurarse de que la configuración de toda la infraestructura de Azure aprovisionada (proceso, base de datos, redes, almacenamiento, Site Recovery) cumpla con la configuración definida por Cloud Adaption Framework para Azure.",
"training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "Fiabilidad"
},
@@ -834,12 +845,13 @@
},
{
"category": "Gestión y Seguimiento",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
"severity": "Medio",
"subcategory": "Monitorización",
- "text": "El etiquetado de Azure se puede aprovechar para agrupar y realizar un seguimiento lógico de los recursos, automatizar sus implementaciones y, lo que es más importante, proporcionar visibilidad de los costos incurridos.",
+ "text": "El etiquetado de Azure se puede aprovechar para agrupar y realizar un seguimiento lógicos de los recursos, automatizar sus implementaciones y, lo que es más importante, proporcionar visibilidad de los costos incurridos.",
"training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
"waf": "Operaciones"
},
@@ -850,7 +862,7 @@
"service": "SAP",
"severity": "Bajo",
"subcategory": "Rendimiento",
- "text": "Use la supervisión de latencia entre máquinas virtuales para aplicaciones sensibles a la latencia.",
+ "text": "Utilice la supervisión de latencia entre máquinas virtuales para aplicaciones sensibles a la latencia.",
"waf": "Rendimiento"
},
{
@@ -860,7 +872,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Rendimiento",
- "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones SAP.",
+ "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones de SAP.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "Fiabilidad"
},
@@ -871,7 +883,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Rendimiento",
- "text": "Excluya todos los sistemas de archivos de bases de datos y programas ejecutables de los análisis antivirus. Incluirlos podría dar lugar a problemas de rendimiento. Consulte con los proveedores de bases de datos para obtener detalles prescriptivos sobre la lista de exclusión. Por ejemplo, Oracle recomienda excluir /oracle//sapdata de los análisis antivirus.",
+ "text": "Excluya todos los sistemas de archivos de bases de datos y programas ejecutables de los análisis antivirus. Incluirlos podría provocar problemas de rendimiento. Consulte con los proveedores de bases de datos para obtener detalles prescriptivos sobre la lista de exclusión. Por ejemplo, Oracle recomienda excluir /oracle//sapdata de los análisis antivirus.",
"waf": "Rendimiento"
},
{
@@ -881,7 +893,7 @@
"service": "SAP",
"severity": "Bajo",
"subcategory": "Rendimiento",
- "text": "Considere la posibilidad de recopilar estadísticas de base de datos completas para bases de datos que no son de HANA después de la migración. Por ejemplo, implemente la nota de SAP 1020260 - Entrega de estadísticas de Oracle.",
+ "text": "Considere la posibilidad de recopilar estadísticas completas de bases de datos que no sean de HANA después de la migración. Por ejemplo, implemente la nota de SAP 1020260 - Entrega de estadísticas de Oracle.",
"waf": "Rendimiento"
},
{
@@ -891,7 +903,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Rendimiento",
- "text": "Considere la posibilidad de usar Oracle Automatic Storage Management (ASM) para todas las implementaciones de Oracle que usan SAP en Azure.",
+ "text": "Considere la posibilidad de usar Oracle Automatic Storage Management (ASM) para todas las implementaciones de Oracle que utilicen SAP en Azure.",
"training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
"waf": "Rendimiento"
},
@@ -902,7 +914,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Rendimiento",
- "text": "En el caso de SAP en Azure que ejecuta Oracle, una colección de scripts SQL puede ayudarle a diagnosticar problemas de rendimiento. Los informes de repositorio automático de cargas de trabajo (AWR) contienen información valiosa para diagnosticar problemas en el sistema Oracle. Le recomendamos que ejecute un informe de AWR durante varias sesiones y elija las horas punta para él, a fin de garantizar una amplia cobertura del análisis.",
+ "text": "En el caso de SAP en Azure que ejecuta Oracle, una colección de scripts SQL puede ayudarle a diagnosticar problemas de rendimiento. Los informes de Automatic Workload Repository (AWR) contienen información valiosa para diagnosticar problemas en el sistema Oracle. Le recomendamos que ejecute un informe de AWR durante varias sesiones y elija las horas punta para él, a fin de garantizar una amplia cobertura del análisis.",
"training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
"waf": "Rendimiento"
},
@@ -913,45 +925,47 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Fiabilidad",
- "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones SAP.",
+ "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones de SAP.",
"training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "SAP",
"severity": "Medio",
"subcategory": "Entrega de aplicaciones",
- "text": "Para la entrega segura de aplicaciones HTTP/S, use Application Gateway v2 y asegúrese de que la protección y las directivas de WAF están habilitadas.",
+ "text": "Para la entrega segura de aplicaciones HTTP/S, use Application Gateway v2 y asegúrese de que la protección y las directivas de WAF estén habilitadas.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "Medio",
"subcategory": "DNS",
- "text": "Si el DNS o el nombre virtual de la máquina virtual no se cambia durante la migración a Azure, el DNS en segundo plano y los nombres virtuales conectan muchas interfaces del sistema en el entorno de SAP, y los clientes solo conocen a veces las interfaces que los desarrolladores definen a lo largo del tiempo. Los desafíos de conexión surgen entre varios sistemas cuando los nombres virtuales o DNS cambian después de las migraciones, y se recomienda conservar los alias DNS para evitar este tipo de dificultades.",
+ "text": "Si el DNS o el nombre virtual de la máquina virtual no se cambia durante la migración a Azure, el DNS en segundo plano y los nombres virtuales conectan muchas interfaces del sistema en el entorno de SAP, y los clientes solo a veces son conscientes de las interfaces que los desarrolladores definen a lo largo del tiempo. Surgen desafíos de conexión entre varios sistemas cuando los nombres virtuales o de DNS cambian después de las migraciones, y se recomienda conservar los alias de DNS para evitar este tipo de dificultades.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "Medio",
"subcategory": "DNS",
- "text": "Utilice diferentes zonas DNS para distinguir cada entorno (espacio aislado, desarrollo, preproducción y producción) entre sí. La excepción es para las implementaciones de SAP con su propia red virtual; en este caso, es posible que las zonas DNS privadas no sean necesarias.",
+ "text": "Utilice diferentes zonas DNS para distinguir cada entorno (espacio aislado, desarrollo, preproducción y producción) entre sí. La excepción es para las implementaciones de SAP con su propia red virtual; aquí, es posible que las zonas DNS privadas no sean necesarias.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "description": "Al configurar el emparejamiento de red virtual, use la opción Permitir tráfico a redes virtuales remotas.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
@@ -962,18 +976,19 @@
"waf": "Fiabilidad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
"service": "SAP",
"severity": "Alto",
"subcategory": "Híbrido",
- "text": "No se admite la implementación de ninguna aplicación virtual de red entre la aplicación SAP y el servidor de base de datos SAP",
+ "text": "No se admite la implementación de ninguna NVA entre la aplicación SAP y el servidor de base de datos SAP",
"training": "https://me.sap.com/notes/2731110",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
@@ -984,84 +999,87 @@
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
"service": "SAP",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Considere la posibilidad de implementar aplicaciones virtuales de red (NVA) entre regiones solo si se usan aplicaciones virtuales de red de asociados. Las aplicaciones virtuales de red entre regiones o redes virtuales no son necesarias si hay aplicaciones virtuales de red nativas. Al implementar tecnologías de redes de asociados y aplicaciones virtuales de red, siga las instrucciones del proveedor para comprobar las configuraciones conflictivas con las redes de Azure.",
+ "text": "Considere la posibilidad de implementar aplicaciones virtuales de red (NVA) entre regiones solo si se usan NVA de asociados. Las aplicaciones virtuales de red entre regiones o redes virtuales no son necesarias si hay aplicaciones virtuales de red nativas. Al implementar tecnologías de redes de asociados y NVA, siga las instrucciones del proveedor para comprobar las configuraciones conflictivas con las redes de Azure.",
"training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
"link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"service": "SAP",
"severity": "Medio",
"subcategory": "Híbrido",
- "text": "Virtual WAN administra la conectividad entre redes virtuales de radio para topologías basadas en WAN virtuales (sin necesidad de configurar el enrutamiento definido por el usuario [UDR] o NVA), y el rendimiento máximo de red para el tráfico de red virtual a red virtual en el mismo centro virtual es de 50 gigabits por segundo. Si es necesario, las zonas de aterrizaje de SAP pueden usar el emparejamiento de red virtual para conectarse a otras zonas de aterrizaje y superar esta limitación de ancho de banda.",
+ "text": "Virtual WAN administra la conectividad entre redes virtuales de radio para topologías basadas en WAN virtuales (sin necesidad de configurar el enrutamiento definido por el usuario [UDR] o NVA) y el rendimiento máximo de red para el tráfico de red virtual a red virtual en el mismo centro virtual es de 50 gigabits por segundo. Si es necesario, las zonas de aterrizaje de SAP pueden usar el emparejamiento de red virtual para conectarse a otras zonas de aterrizaje y superar esta limitación de ancho de banda.",
"training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
+ "subcategory": "Plan de PI",
"text": "No se recomienda la asignación de direcciones IP públicas a la máquina virtual que ejecuta SAP Workload.",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
+ "subcategory": "Plan de PI",
"text": "Considere la posibilidad de reservar la dirección IP en el lado de la recuperación ante desastres al configurar ASR",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "Alto",
- "subcategory": "Plan de propiedad intelectual",
+ "subcategory": "Plan de PI",
"text": "Evite el uso de intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "6e154e3a-a359-4282-ae6e-206173686af4",
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
"severity": "Medio",
- "subcategory": "Plan de propiedad intelectual",
+ "subcategory": "Plan de PI",
"text": "Aunque Azure le ayuda a crear varias subredes delegadas en una red virtual, solo puede existir una subred delegada en una red virtual para Azure NetApp Files. Se producirá un error al intentar crear un nuevo volumen si se utiliza más de una subred delegada para Azure NetApp Files.",
"training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "Operaciones"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
"severity": "Medio",
"subcategory": "Internet",
- "text": "Use Azure Firewall para controlar el tráfico saliente de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado del tráfico Este/Oeste (si la organización lo requiere)",
+ "text": "Use Azure Firewall para controlar el tráfico de salida de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado de tráfico este/oeste (si la organización lo requiere)",
"training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
"link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
"service": "SAP",
@@ -1072,29 +1090,29 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "Medio",
"subcategory": "Internet",
- "text": "Use directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
+ "text": "Use las directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
"training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "SAP",
"severity": "Medio",
"subcategory": "Internet",
- "text": "Aproveche las directivas de Web Application Firewall en Azure Front Door cuando use Azure Front Door y Application Gateway para proteger las aplicaciones HTTP/S. Bloquee Application Gateway para recibir tráfico solo de Azure Front Door.",
+ "text": "Aproveche las directivas de firewall de aplicaciones web de Azure Front Door cuando use Azure Front Door y Application Gateway para proteger las aplicaciones HTTP/S. Bloquee Application Gateway para recibir tráfico solo desde Azure Front Door.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "5ada4332-4e13-4811-9231-81aa41742694",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
@@ -1105,7 +1123,7 @@
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "SAP",
@@ -1116,51 +1134,53 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "SAP",
"severity": "Medio",
"subcategory": "Internet",
- "text": "Para evitar la pérdida de datos, use Azure Private Link para acceder de forma segura a los recursos de plataforma como servicio, como Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, etc. El punto de conexión privado de Azure también puede ayudar a proteger el tráfico entre redes virtuales y servicios como Azure Storage, Azure Backup, etc. El tráfico entre la red virtual y el servicio habilitado para punto de conexión privado viaja a través de la red global de Microsoft, lo que impide su exposición a la red pública de Internet.",
+ "text": "Para evitar la pérdida de datos, use Azure Private Link para acceder de forma segura a los recursos de la plataforma como servicio, como Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, etc. Azure Private Endpoint también puede ayudar a proteger el tráfico entre redes virtuales y servicios como Azure Storage, Azure Backup, etc. El tráfico entre la red virtual y el servicio habilitado para el punto de conexión privado viaja a través de la red global de Microsoft, lo que impide su exposición a la red pública de Internet.",
"training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentación",
- "text": "Asegúrese de que las redes aceleradas de Azure están habilitadas en las máquinas virtuales que se usan en las capas de aplicación SAP y DBMS.",
+ "text": "Asegúrese de que las redes aceleradas de Azure estén habilitadas en las máquinas virtuales usadas en las capas de aplicación SAP y DBMS.",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
"service": "SAP",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "Asegúrese de que las implementaciones internas de Azure Load Balancer están configuradas para usar Direct Server Return (DSR). Esta configuración (Habilitación de IP flotante) reducirá la latencia cuando se utilicen configuraciones internas del equilibrador de carga para configuraciones de alta disponibilidad en la capa DBMS.",
+ "text": "Asegúrese de que las implementaciones internas de Azure Load Balancer están configuradas para usar Direct Server Return (DSR). Esta configuración (Habilitación de IP flotante) reducirá la latencia cuando se utilicen configuraciones de equilibrador de carga internas para configuraciones de alta disponibilidad en la capa DBMS.",
"training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "Puede usar reglas de grupo de seguridad de aplicaciones (ASG) y NSG para definir listas de control de acceso de seguridad de red entre la aplicación SAP y las capas DBMS. Los ASG agrupan las máquinas virtuales para ayudar a administrar su seguridad.",
+ "text": "Puede usar el grupo de seguridad de aplicaciones (ASG) y las reglas de NSG para definir listas de control de acceso de seguridad de red entre la aplicación SAP y las capas de DBMS. Los ASG agrupan las máquinas virtuales para ayudar a administrar su seguridad.",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "Seguridad"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
@@ -1171,7 +1191,7 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "fa96c96a-d885-418f-9827-34c886ba2802",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
@@ -1182,29 +1202,29 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentación",
- "text": "NO se admite en absoluto la ejecución de una capa de servidor de aplicaciones de SAP y una capa de DBMS divididas entre el entorno local y Azure. Ambas capas deben residir completamente en el entorno local o en Azure.",
+ "text": "NO se admite en absoluto la ejecución de una capa de servidor de aplicaciones SAP y una capa de DBMS dividida entre local y Azure. Ambas capas deben residir completamente en el entorno local o en Azure.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentación",
- "text": "No se recomienda hospedar el sistema de administración de bases de datos (DBMS) y las capas de aplicación de los sistemas SAP en diferentes redes virtuales y conectarlas con el emparejamiento de redes virtuales debido a los costos sustanciales que puede producir un tráfico de red excesivo entre las capas. Se recomienda el uso de subredes dentro de la red virtual de Azure para separar la capa de aplicación de SAP y la capa de DBMS.",
+ "text": "No se recomienda hospedar el sistema de administración de bases de datos (DBMS) y las capas de aplicación de los sistemas SAP en diferentes redes virtuales y conectarlas con el emparejamiento de redes virtuales debido a los costos sustanciales que puede producir un tráfico de red excesivo entre las capas. Se recomienda usar subredes dentro de la red virtual de Azure para separar la capa de aplicación de SAP y la capa de DBMS.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "Costar"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "402a9846-d515-4061-aff8-cd30088693fa",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
"service": "SAP",
@@ -1215,17 +1235,17 @@
"waf": "Rendimiento"
},
{
- "category": "Topología y conectividad de red",
+ "category": "Topología de red y conectividad",
"guid": "87585797-5551-4d53-bb7d-a94ee415734d",
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
"service": "SAP",
"severity": "Medio",
"subcategory": "Segmentación",
- "text": "En el caso de las implementaciones de SAP RISE/ECS, el emparejamiento virtual es la forma preferida de establecer la conectividad con el entorno de Azure existente del cliente. Tanto la red virtual de SAP como las redes virtuales del cliente están protegidas con grupos de seguridad de red (NSG), lo que permite la comunicación en los puertos de SAP y de base de datos a través del emparejamiento de redes virtuales",
+ "text": "En el caso de las implementaciones de SAP RISE/ECS, el emparejamiento virtual es la forma preferida de establecer la conectividad con el entorno de Azure existente del cliente. Tanto la red virtual de SAP como las redes virtuales del cliente están protegidas con grupos de seguridad de red (NSG), lo que permite la comunicación en SAP y los puertos de base de datos a través del emparejamiento de redes virtuales",
"waf": "Seguridad"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
@@ -1235,27 +1255,27 @@
"waf": "Costar"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
"service": "SAP",
"severity": "Medio",
"subcategory": " ",
- "text": "Revise la supervisión integrada de Site Recovery, si se usa para SAP.",
+ "text": "Revise la supervisión integrada de Site Recovery, donde se use para SAP.",
"waf": "Costar"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
"link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
"service": "SAP",
"severity": "Alto",
"subcategory": " ",
- "text": "Revise la guía Supervisión del entorno del sistema SAP HANA.",
+ "text": "Revise la guía Supervisión del panorama del sistema SAP HANA.",
"waf": "Operaciones"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
"link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
"service": "SAP",
@@ -1265,7 +1285,7 @@
"waf": "Operaciones"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
"link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
"service": "SAP",
@@ -1275,7 +1295,7 @@
"waf": "Operaciones"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
"link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
"service": "SAP",
@@ -1285,7 +1305,7 @@
"waf": "Operaciones"
},
{
- "category": "Excelencia operativa",
+ "category": "Excelencia Operacional",
"guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
"service": "SAP",
"severity": "Alto",
@@ -1294,7 +1314,7 @@
"waf": "Operaciones"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
"link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
"service": "SAP",
@@ -1304,7 +1324,7 @@
"waf": "Rendimiento"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
"link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
"service": "SAP",
@@ -1315,7 +1335,7 @@
"waf": "Rendimiento"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
"link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
"service": "SAP",
@@ -1326,7 +1346,7 @@
"waf": "Rendimiento"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
"service": "SAP",
"severity": "Medio",
@@ -1335,7 +1355,7 @@
"waf": "Rendimiento"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
"link": "https://me.sap.com/notes/500235",
"service": "SAP",
@@ -1346,7 +1366,7 @@
"waf": "Rendimiento"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
"link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
"service": "SAP",
@@ -1356,7 +1376,7 @@
"waf": "Rendimiento"
},
{
- "category": "Rendimiento",
+ "category": "Performant",
"guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
"link": "https://me.sap.com/notes/1969700",
"service": "SAP",
@@ -1372,7 +1392,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": "Si ejecuta máquinas virtuales Windows y Linux en Azure, en el entorno local o en otros entornos en la nube, puede usar el Centro de administración de actualizaciones de Automatización de Azure para administrar las actualizaciones del sistema operativo, incluidas las revisiones de seguridad.",
+ "text": "Si ejecuta máquinas virtuales Windows y Linux en Azure, en el entorno local o en otros entornos en la nube, puede usar el Centro de administración de actualizaciones de Azure Automation para administrar las actualizaciones del sistema operativo, incluidas las revisiones de seguridad.",
"training": "https://learn.microsoft.com/azure/automation/update-management/overview",
"waf": "Seguridad"
},
@@ -1383,7 +1403,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Gobernanza",
- "text": "Revise de forma rutinaria las notas de seguridad de SAP OSS, ya que SAP publica parches de seguridad muy críticos, o revisiones, que requieren una acción inmediata para proteger sus sistemas SAP.",
+ "text": "Revise de forma rutinaria las notas del OSS de seguridad de SAP, ya que SAP publica parches de seguridad muy críticos, o correcciones en caliente, que requieren una acción inmediata para proteger sus sistemas SAP.",
"training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "Seguridad"
},
@@ -1404,7 +1424,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Gobernanza",
- "text": "Deshabilite xp_cmdshell. La característica de SQL Server xp_cmdshell habilita un shell de comandos del sistema operativo interno de SQL Server. Es un riesgo potencial en las auditorías de seguridad.",
+ "text": "Deshabilite xp_cmdshell. La característica SQL Server xp_cmdshell habilita un shell de comandos del sistema operativo interno de SQL Server. Es un riesgo potencial en las auditorías de seguridad.",
"training": "https://me.sap.com/notes/3019299/E",
"waf": "Seguridad"
},
@@ -1415,7 +1435,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Secretos",
- "text": "El cifrado de servidores de bases de datos de SAP HANA en Azure usa la tecnología de cifrado nativa de SAP HANA. Además, si usa SQL Server en Azure, use el cifrado de datos transparente (TDE) para proteger los datos y los archivos de registro y asegurarse de que las copias de seguridad también están cifradas.",
+ "text": "El cifrado de servidores de base de datos de SAP HANA en Azure usa la tecnología de cifrado nativa de SAP HANA. Además, si usa SQL Server en Azure, use el cifrado de datos transparente (TDE) para proteger los datos y los archivos de registro y asegurarse de que las copias de seguridad también estén cifradas.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "Seguridad"
},
@@ -1426,12 +1446,13 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Secretos",
- "text": "El cifrado de Azure Storage está habilitado para todas las cuentas de Azure Resource Manager y de almacenamiento clásico, y no se puede deshabilitar. Dado que los datos están cifrados de forma predeterminada, no es necesario modificar el código o las aplicaciones para usar el cifrado de Azure Storage.",
+ "text": "El cifrado de Azure Storage está habilitado para todas las cuentas de Azure Resource Manager y de almacenamiento clásico, y no se puede deshabilitar. Dado que los datos están cifrados de forma predeterminada, no es necesario modificar el código ni las aplicaciones para usar el cifrado de Azure Storage.",
"training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "Seguridad"
},
{
"category": "Seguridad, gobernanza y cumplimiento",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
@@ -1448,7 +1469,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Secretos",
- "text": "Se recomienda bloquear los recursos de Azure después de la implementación correcta para protegerse contra cambios no autorizados. También puede aplicar restricciones y reglas de LOCK por suscripción mediante directivas de Azure personalizadas (rol personalizado).",
+ "text": "Se recomienda bloquear los recursos de Azure después de la implementación correcta para protegerse contra cambios no autorizados. También puede aplicar restricciones y reglas de LOCK por suscripción mediante directivas de Azure personalizadas (rol Custome).",
"training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "Seguridad"
},
@@ -1459,7 +1480,7 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Secretos",
- "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención de los objetos eliminados.",
+ "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención para los objetos eliminados.",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Seguridad"
},
@@ -1470,7 +1491,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Secretos",
- "text": "En función de los requisitos existentes, controles normativos y de cumplimiento (internos y externos): determine qué directivas de Azure y el rol de RBAC de Azure son necesarios",
+ "text": "En función de los requisitos existentes, controles normativos y de cumplimiento (internos y externos): determine qué rol de Azure Policies y Azure RBAC son necesarios",
"training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "Seguridad"
},
@@ -1481,7 +1502,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Secretos",
- "text": "Al habilitar Microsoft Defender para punto de conexión en el entorno de SAP, se recomienda excluir los archivos de datos y registro en los servidores DBMS en lugar de dirigirse a todos los servidores. Siga las recomendaciones de su proveedor de DBMS al excluir archivos de destino.",
+ "text": "Al habilitar Microsoft Defender para punto de conexión en el entorno de SAP, se recomienda excluir los archivos de datos y registros en servidores DBMS en lugar de dirigirse a todos los servidores. Siga las recomendaciones de su proveedor de DBMS al excluir archivos de destino.",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "Seguridad"
},
@@ -1514,12 +1535,13 @@
"service": "SAP",
"severity": "Medio",
"subcategory": "Secretos",
- "text": "De forma predeterminada, utilice claves administradas por Microsoft para la funcionalidad de cifrado de entidad de seguridad y use claves administradas por el cliente cuando sea necesario.",
+ "text": "De forma predeterminada, use claves administradas por Microsoft para la funcionalidad de cifrado principal y use claves administradas por el cliente cuando sea necesario.",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Seguridad"
},
{
"category": "Seguridad, gobernanza y cumplimiento",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
@@ -1536,7 +1558,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Secretos",
- "text": "Para controlar y administrar claves y secretos de cifrado de disco para sistemas operativos Windows y Windows que no son de HANA, use Azure Key Vault. SAP HANA no es compatible con Azure Key Vault, por lo que debe usar métodos alternativos como SAP ABAP o claves SSH.",
+ "text": "Para controlar y administrar las claves y los secretos de cifrado de disco para sistemas operativos Windows y Windows que no son de HANA, use Azure Key Vault. SAP HANA no es compatible con Azure Key Vault, por lo que debe usar métodos alternativos como SAP ABAP o claves SSH.",
"training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
"waf": "Seguridad"
},
@@ -1547,7 +1569,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Seguridad",
- "text": "Personalización de los roles de control de acceso basado en rol (RBAC) para SAP en suscripciones de Azure spoke para evitar cambios accidentales relacionados con la red",
+ "text": "Personalice los roles de control de acceso basado en roles (RBAC) para las suscripciones de SAP en Azure spoke para evitar cambios accidentales relacionados con la red",
"training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "Seguridad"
},
@@ -1558,7 +1580,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Seguridad",
- "text": "Aísle las redes perimetrales y las aplicaciones virtuales de red del resto del patrimonio de SAP, configure Azure Private Link y administre y controle de forma segura los recursos de SAP en Azure",
+ "text": "Aísle las DMZ y las NVA del resto del patrimonio de SAP, configure Azure Private Link y administre y controle de forma segura los recursos de SAP en Azure",
"training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "Seguridad"
},
@@ -1569,7 +1591,7 @@
"service": "SAP",
"severity": "Bajo",
"subcategory": "Seguridad",
- "text": "Considere la posibilidad de usar el software antimalware de Microsoft en Azure para proteger las máquinas virtuales de archivos malintencionados, adware y otras amenazas.",
+ "text": "Considere la posibilidad de usar el software antimalware de Microsoft en Azure para proteger sus máquinas virtuales de archivos malintencionados, adware y otras amenazas.",
"training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
"waf": "Seguridad"
},
@@ -1591,7 +1613,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Seguridad",
- "text": "Aísle los servidores de aplicaciones y bases de datos de SAP de Internet o de la red local pasando todo el tráfico a través de la red virtual del centro de conectividad, que está conectada a la red radial mediante el emparejamiento de red virtual. Las redes virtuales emparejadas garantizan que la solución de SAP en Azure esté aislada de la red pública de Internet.",
+ "text": "Aísle los servidores de bases de datos y aplicaciones de SAP de Internet o de la red local pasando todo el tráfico a través de la red virtual del concentrador, que está conectada a la red radial mediante el emparejamiento de red virtual. Las redes virtuales emparejadas garantizan que la solución de SAP en Azure esté aislada de la red pública de Internet.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "Seguridad"
},
@@ -1620,8 +1642,8 @@
],
"metadata": {
"name": "SAP Checklist",
- "state": "Preview",
- "timestamp": "May 14, 2024",
+ "state": "GA",
+ "timestamp": "October 02, 2024",
"waf": "all"
},
"severities": [
@@ -1649,7 +1671,7 @@
"name": "Cumplido"
},
{
- "description": "Recomendación entendida, pero no necesaria por los requisitos actuales",
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
"name": "No es necesario"
},
{
diff --git a/checklists/sap_checklist.ja.json b/checklists/sap_checklist.ja.json
index 7a879b034..f0dc1acde 100644
--- a/checklists/sap_checklist.ja.json
+++ b/checklists/sap_checklist.ja.json
@@ -1,10 +1,10 @@
{
"categories": [
{
- "name": "ID とアクセス"
+ "name": "IDとアクセス"
},
{
- "name": "ネットワークトポロジと接続性"
+ "name": "ネットワーク トポロジと接続性"
},
{
"name": "セキュリティ、ガバナンス、コンプライアンス"
@@ -24,7 +24,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "ACSSの",
- "text": "Azure Center for SAP solutions (ACSS) は、SAP を Azure 上のトップレベルのワークロードにする Azure オファリングです。ACSS は、SAP システムを Azure 上の統合ワークロードとして作成および実行し、イノベーションのためのよりシームレスな基盤を提供するエンドツーエンドのソリューションです。新規と既存の Azure ベースの SAP システムの両方の管理機能を利用できます。",
+ "text": "Azure Center for SAP solutions (ACSS) は、SAP を Azure 上の最上位のワークロードにする Azure オファリングです。ACSS は、Azure 上の統合ワークロードとして SAP システムを作成および実行し、イノベーションのためのよりシームレスな基盤を提供するエンドツーエンドのソリューションです。新しい Azure ベースの SAP システムと既存の SAP システムの両方の管理機能を利用できます。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -35,204 +35,207 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "SDAFの",
- "text": "Azure では、Linux と Windows での SAP デプロイの自動化がサポートされています。SAP Deployment Automation Framework は、SAP 環境をデプロイ、インストール、および保守できるオープンソースのオーケストレーション ツールです。",
+ "text": "Azure では、Linux と Windows での SAP デプロイの自動化がサポートされています。SAP Deployment Automation Framework は、SAP 環境をデプロイ、インストール、保守できるオープンソースのオーケストレーションツールです。",
"training": "https://github.com/Azure/sap-automation",
"waf": "オペレーションズ"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
"service": "SAP",
"severity": "中程度",
"subcategory": "バックアップと復元",
- "text": "運用データベースのポイントインタイム リカバリを、RTOを満たす任意の時点および時間枠で実行します。ポイント・イン・タイム・リカバリには、通常、DBMSレイヤー上またはSAPを介してデータを削除するオペレーター・エラーが含まれます",
+ "text": "運用データベースのポイントインタイムリカバリを、RTOを満たす任意の時点と時間枠で実行します。ポイントインタイムリカバリには、通常、DBMSレイヤーまたはSAPを介してデータを削除するオペレーターのエラーが含まれます",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
"service": "SAP",
"severity": "中程度",
- "subcategory": "災害復旧",
- "text": "バックアップと復旧の時間をテストして、災害発生後にすべてのシステムを同時に復元するための RTO 要件を満たしていることを確認します。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "バックアップ時間とリカバリ時間をテストして、災害後にすべてのシステムを同時にリストアするための RTO 要件を満たしていることを確認します。",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "b651423c-8552-42db-a545-5cb50c05527a",
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"service": "SAP",
"severity": "高い",
- "subcategory": "災害復旧",
- "text": "ペアのリージョン間で Standard Storage をレプリケートすることはできますが、Standard Storage を使用してデータベースや仮想ハード ディスクを格納することはできません。バックアップは、使用するペアのリージョン間でのみレプリケートできます。その他のすべてのデータについては、SQL Server Always On や SAP HANA システム レプリケーションなどのネイティブ DBMS 機能を使用してレプリケーションを実行します。SAP アプリケーション層には、Site Recovery、rsync または robocopy、およびその他のサードパーティ ソフトウェアを組み合わせて使用します。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "ペアになっているリージョン間で標準ストレージをレプリケートすることはできますが、データベースや仮想ハード ディスクの保存に標準ストレージを使用することはできません。バックアップをレプリケートできるのは、使用するペアのリージョン間でのみです。他のすべてのデータについては、SQL Server Always On や SAP HANA システム レプリケーションなどのネイティブ DBMS 機能を使用してレプリケーションを実行します。SAP アプリケーション層には、Site Recovery、rsync または robocopy、およびその他のサードパーティ ソフトウェアを組み合わせて使用します。",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
"service": "SAP",
"severity": "中程度",
- "subcategory": "災害復旧",
- "text": "Azure Availability Zones を使用して高可用性を実現する場合は、SAP アプリケーション サーバーとデータベース サーバー間の待機時間を考慮する必要があります。待機時間が長いゾーンでは、SAP アプリケーション サーバーとデータベース サーバーが常に同じゾーンで実行されていることを確認するための運用手順を実施する必要があります。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "Azure Availability Zones を使用して高可用性を実現する場合は、SAP アプリケーション サーバーとデータベース サーバー間の待機時間を考慮する必要があります。レイテンシーの高いゾーンでは、SAP アプリケーション・サーバーとデータベース・サーバーが常に同じゾーンで実行されていることを確認するための運用手順を整備する必要があります。",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "SAP",
"severity": "高い",
- "subcategory": "災害復旧",
- "text": "オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの ExpressRoute 接続を設定します。また、ExpressRoute を使用する代わりに、オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの VPN 接続を設定することも検討してください。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの ExpressRoute 接続を設定します。また、ExpressRoute を使用する代わりに、オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの VPN 接続を設定することを検討してください。",
"training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
"link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
"service": "SAP",
"severity": "低い",
- "subcategory": "災害復旧",
- "text": "証明書、シークレット、キーなどのキー コンテナーの内容をリージョン間でレプリケートして、DR リージョン内のデータの暗号化を解除できるようにします。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "証明書、シークレット、キーなどのキー コンテナーの内容をリージョン間でレプリケートして、DR リージョンのデータを復号化できるようにします。",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
"service": "SAP",
"severity": "中程度",
- "subcategory": "災害復旧",
- "text": "プライマリ仮想ネットワークとディザスター リカバリー仮想ネットワークをピアリングします。たとえば、HANA システム レプリケーションの場合、SAP HANA DB 仮想ネットワークは、ディザスター リカバリー サイトの SAP HANA DB 仮想ネットワークにピアリングする必要があります。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "プライマリ仮想ネットワークとディザスター リカバリー仮想ネットワークをピアリングします。たとえば、HANA システム レプリケーションの場合、SAP HANA DB 仮想ネットワークをディザスター リカバリー サイトの SAP HANA DB 仮想ネットワークにピアリングする必要があります。",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
"service": "SAP",
"severity": "低い",
- "subcategory": "災害復旧",
- "text": "SAP デプロイに Azure NetApp Files ストレージを使用する場合は、少なくとも、Premium レベルの 2 つのリージョンに 2 つの Azure NetApp Files アカウントを作成します。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "SAP デプロイに Azure NetApp Files ストレージを使用する場合は、少なくとも Premium レベルの 2 つのリージョンに 2 つの Azure NetApp Files アカウントを作成します。",
"training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
"link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
"service": "SAP",
"severity": "高い",
- "subcategory": "災害復旧",
- "text": "ネイティブのデータベースレプリケーションテクノロジーを使用して、HAペアでデータベースを同期する必要があります。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "ネイティブ・データベース・レプリケーション・テクノロジーを使用して、HAペアのデータベースを同期する必要があります。",
"training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
"service": "SAP",
"severity": "高い",
- "subcategory": "災害復旧",
- "text": "プライマリ仮想ネットワーク (VNet) の CIDR は、DR サイトの VNet の CIDR と競合したり重複したりしないようにする必要があります",
+ "subcategory": "ディザスタリカバリ",
+ "text": "プライマリ仮想ネットワーク (VNet) の CIDR は、DR サイトの VNet の CIDR と競合したり、重複したりしないようにする必要があります",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
"service": "SAP",
"severity": "高い",
- "subcategory": "災害復旧",
- "text": "Site Recovery を使用して、アプリケーション サーバーを DR サイトにレプリケートします。Site Recovery は、セントラル サービス クラスター VM を DR サイトにレプリケートする場合にも役立ちます。DR を呼び出すときは、DR サイトで Linux Pacemaker クラスターを再構成する必要があります (たとえば、VIP または SBD の置き換え、corosync.conf の実行など)。",
+ "subcategory": "ディザスタリカバリ",
+ "text": "Site Recovery を使用して、アプリケーション サーバーを DR サイトにレプリケートします。Site Recovery は、セントラル サービス クラスター VM を DR サイトにレプリケートするのにも役立ちます。DR を呼び出すときは、DR サイトで Linux Pacemaker クラスターを再構成する必要があります (たとえば、VIP または SBD の置き換え、corosync.conf の実行など)。",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "単一障害点に対する SAP ソフトウェアの可用性を検討します。これには、SAP NetWeaver や SAP S/4HANA アーキテクチャ、SAP ABAP、ASCS + SCS で使用される DBMS などのアプリケーション内の単一障害点が含まれます。また、SAP Web ディスパッチャなどの他のツールも必要です。",
+ "text": "単一障害点に対する SAP ソフトウェアの可用性を検討します。これには、SAP NetWeaver や SAP S/4HANA アーキテクチャ、SAP ABAP や ASCS + SCS で使用される DBMS などのアプリケーション内の単一障害点が含まれます。また、SAP Web Dispatcher などの他のツールも含みます。",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "SAP および SAP データベースの場合は、自動フェールオーバー クラスターの実装を検討してください。Windows では、Windows Server フェールオーバー クラスタリングがフェールオーバーをサポートします。Linux では、Linux Pacemaker や、SIOS Protection Suite や Veritas InfoScale などのサードパーティツールがフェイルオーバーをサポートしています。",
+ "text": "SAP および SAP データベースの場合は、自動フェールオーバー クラスターの実装を検討してください。Windows では、Windows Server フェールオーバー クラスタリングはフェールオーバーをサポートします。Linux では、Linux Pacemaker や SIOS Protection Suite や Veritas InfoScale などのサードパーティツールがフェイルオーバーをサポートしています。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
"link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "Azure では、プライマリ VM とセカンダリ VM が DBMS データのストレージを共有するアーキテクチャはサポートされていません。DBMSレイヤーの場合、一般的なアーキテクチャパターンは、プライマリおよびセカンダリVMが使用するストレージスタックとは異なるストレージスタックを使用して、データベースを同時にレプリケートすることです。",
+ "text": "Azure では、プライマリ VM とセカンダリ VM が DBMS データのストレージを共有するアーキテクチャはサポートされていません。DBMS レイヤーの一般的なアーキテクチャ パターンは、プライマリ VM とセカンダリ VM が使用するものとは異なるストレージ スタックを使用して、データベースを同時にレプリケートすることです。",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
"link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "DBMS データとトランザクション/REDO ログ ファイルは、Azure でサポートされているブロック ストレージまたは Azure NetApp Files に格納されます。Azure Files または Azure Premium Files は、SAP ワークロードでの DBMS データや再実行ログ ファイルのストレージとしてはサポートされていません。",
+ "text": "DBMS データとトランザクション/再実行ログ ファイルは、Azure でサポートされているブロック ストレージまたは Azure NetApp Files に格納されます。Azure Files または Azure Premium Files は、SAP ワークロードでの DBMS データや再実行ログ ファイルのストレージとしてサポートされていません。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
"link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "Windows の Azure 共有ディスクは、ASCS + SCS コンポーネントと特定の高可用性シナリオに使用できます。フェールオーバー クラスターは、SAP アプリケーション層コンポーネントと DBMS 層に対して個別に設定します。現在、Azure では、SAP アプリケーション レイヤー コンポーネントと DBMS レイヤーを 1 つのフェールオーバー クラスターに結合する高可用性アーキテクチャはサポートされていません。",
+ "text": "Windows の Azure 共有ディスクは、ASCS + SCS コンポーネントと特定の高可用性シナリオに使用できます。フェールオーバー クラスターは、SAP アプリケーション レイヤー コンポーネントと DBMS レイヤー用に別々に設定します。Azure では現在、SAP アプリケーション レイヤー コンポーネントと DBMS レイヤーを 1 つのフェールオーバー クラスターに結合する高可用性アーキテクチャはサポートされていません。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "SAP アプリケーション レイヤー コンポーネント (ASCS) と DBMS レイヤーのほとんどのフェールオーバー クラスターでは、フェールオーバー クラスターの仮想 IP アドレスが必要です。 Azure Load Balancer は、他のすべてのケースで仮想 IP アドレスを処理する必要があります。設計原則の 1 つは、クラスター構成ごとに 1 つのロード バランサーを使用することです。ロード バランサーの Standard バージョン (Standard Load Balancer SKU) を使用することをお勧めします。",
+ "text": "SAP アプリケーション レイヤー コンポーネント (ASCS) と DBMS レイヤーのほとんどのフェールオーバー クラスターには、フェールオーバー クラスターの仮想 IP アドレスが必要です。 Azure Load Balancer は、他のすべてのケースで仮想 IP アドレスを処理する必要があります。設計原則の 1 つは、クラスター構成ごとに 1 つのロード バランサーを使用することです。ロード バランサーの Standard バージョン (Standard Load Balancer SKU) を使用することをお勧めします。",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "ロードバランサーでフローティング IP が有効になっていることを確認します",
+ "text": "フローティング IP がロードバランサーで有効になっていることを確認します",
"training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
"link": "https://learn.microsoft.com/azure/virtual-machines/availability",
"service": "SAP",
@@ -243,7 +246,7 @@
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
"link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
"service": "SAP",
@@ -253,142 +256,143 @@
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "cbe05bbe-209d-4490-ba47-778424d11678",
"link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "同じ可用性セット内に異なるロールのサーバーを混在させないでください。セントラル サービス VM、データベース VM、アプリケーション VM を独自の可用性セットに保持する",
+ "text": "同じ可用性セットに異なる役割のサーバーを混在させないでください。中央サービス VM、データベース VM、アプリケーション VM を独自の可用性セットに保持します",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
"link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
"service": "SAP",
"severity": "中程度",
"subcategory": "高可用性",
- "text": "近接通信配置グループを使用しない限り、Azure 可用性ゾーン内に Azure 可用性セットをデプロイすることはできません。",
+ "text": "近接配置グループを使用しない限り、Azure 可用性ゾーン内に Azure 可用性セットをデプロイすることはできません。",
"training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "9674e7c7-7796-4181-8920-09f4429543ba",
"link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "可用性セットを作成するときは、使用可能な障害ドメインと更新ドメインの最大数を使用します。たとえば、1 つの可用性セットに 2 つ以上の VM をデプロイする場合は、Azure の計画メンテナンスに加えて、潜在的な物理ハードウェア障害、ネットワークの停止、または停電の影響を制限するために、最大数の障害ドメイン (3 つ) と十分な更新ドメインを使用します。障害ドメインの既定の数は 2 であり、後でオンラインで変更することはできません。",
+ "text": "可用性セットを作成するときは、使用可能な障害ドメインと更新ドメインの最大数を使用します。たとえば、1 つの可用性セットに 2 つ以上の VM をデプロイする場合は、Azure の計画メンテナンスに加えて、潜在的な物理ハードウェア障害、ネットワーク停止、または電源中断の影響を制限するために、最大数の障害ドメイン (3) と十分な更新ドメインを使用します。障害ドメインのデフォルトの数は 2 で、後でオンラインで変更することはできません。",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "可用性セットのデプロイで Azure 近接通信配置グループを使用する場合は、3 つの SAP コンポーネント (セントラル サービス、アプリケーション サーバー、データベース) をすべて同じ近接通信配置グループに含める必要があります。",
+ "text": "可用性セットのデプロイで Azure 近接配置グループを使用する場合、3 つの SAP コンポーネント (中央サービス、アプリケーション サーバー、データベース) すべてが同じ近接配置グループに存在する必要があります。",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "SAP SID ごとに 1 つの近接配置グループを使用します。グループは、Availability Zones や Azure リージョンにまたがっていません",
+ "text": "SAP SID ごとに 1 つの近接配置グループを使用します。グループは Availability Zones または Azure リージョンにまたがっていません",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
"severity": "高い",
"subcategory": "高可用性",
- "text": "オペレーティング システムに応じて、次のいずれかのサービスを使用して SAP セントラル サービス クラスターを実行します。",
+ "text": "次のいずれかのサービスを使用して、オペレーティング システムに応じて SAP セントラル サービス クラスターを実行します。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "ed46b937-913e-4018-9c62-8393ab037e53",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
"service": "SAP",
"severity": "中程度",
"subcategory": "高可用性",
- "text": "現在、Azure では、同じ Linux Pacemaker クラスターでの ASCS と DB HA の組み合わせはサポートされていません。それらを個々のクラスターに分離します。ただし、最大 5 つの複数のセントラル サービス クラスターを 1 つの VM のペアに結合できます。",
+ "text": "現在、Azure では、同じ Linux Pacemaker クラスターでの ASCS と DB HA の組み合わせはサポートされていません。それらを個々のクラスターに分割します。ただし、最大 5 つの複数の中央サービス クラスターを 1 つの VM のペアに結合できます。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
"severity": "中程度",
"subcategory": "高可用性",
- "text": "両方の VM を高可用性ペアの可用性セットまたは可用性ゾーンにデプロイします。これらの VM は、同じサイズで、同じストレージ構成を持つ必要があります。",
+ "text": "両方の VM を高可用性ペア、可用性セット、または可用性ゾーンにデプロイします。これらの VM は、同じサイズで、同じストレージ構成である必要があります。",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "7f684ebc-95da-425e-b329-e782dbed050f",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
"service": "SAP",
"severity": "中程度",
"subcategory": "高可用性",
- "text": "Azure では、Red Hat Enterprise Linux (RHEL) で実行されている同じ高可用性クラスターへの SAP HANA インスタンスと ASCS/SCS インスタンスと ERS インスタンスのインストールと構成がサポートされています。",
+ "text": "Azure では、Red Hat Enterprise Linux (RHEL) で実行されている同じ高可用性クラスター上での SAP HANA インスタンスと ASCS/SCS インスタンスと ERS インスタンスのインストールと構成がサポートされています。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
"service": "SAP",
"severity": "高い",
"subcategory": "貯蔵",
- "text": "Premium マネージド SSD ですべての運用システムを実行し、Azure NetApp Files または Ultra Disk Storage を使用します。少なくとも、OS ディスクは Premium レベルにすることで、パフォーマンスの向上と最高の SLA を実現できます。",
+ "text": "すべての運用システムを Premium マネージド SSD で実行し、Azure NetApp Files または Ultra Disk Storage を使用します。少なくとも、OS ディスクは Premium レベルにある必要があるため、パフォーマンスの向上と最高の SLA を実現できます。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
"link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
"service": "SAP",
"severity": "高い",
"subcategory": "貯蔵",
- "text": "SAP HANA on Azure は、SAP によって認定された種類のストレージでのみ実行する必要があります。該当する場合は、特定のボリュームを特定のディスク構成で実行する必要があることに注意してください。これらの構成には、書き込みアクセラレータの有効化と Premium Storage の使用が含まれます。また、ストレージ上で稼働するファイル システムが、マシン上で稼働する DBMS と互換性があることを確認する必要もあります。",
+ "text": "Azure で SAP HANA を実行するのは、SAP によって認定されたストレージの種類のみにしてください。特定のボリュームは、該当する場合、特定のディスク構成で実行する必要があることに注意してください。これらの構成には、書き込みアクセラレータの有効化と Premium ストレージの使用が含まれます。また、ストレージ上で実行されるファイルシステムが、マシン上で実行される DBMS と互換性があることを確認する必要があります。",
"training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
"link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
"service": "SAP",
"severity": "高い",
"subcategory": "貯蔵",
- "text": "SAP ワークロードに使用するストレージの種類に応じて、高可用性を構成することを検討してください。Azure で使用できる一部のストレージ サービスは Azure Site Recovery でサポートされていないため、高可用性の構成が異なる場合があります。",
+ "text": "SAP ワークロードに使用するストレージのタイプに応じて、高可用性を構成することを検討してください。Azure で使用できる一部のストレージ サービスは Azure Site Recovery でサポートされていないため、高可用性の構成が異なる場合があります。",
"training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
"waf": "確実"
},
{
- "category": "ビジネス継続性と災害復旧",
+ "category": "事業継続性と災害復旧",
"guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
"link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
"service": "SAP",
"severity": "高い",
"subcategory": "貯蔵",
- "text": "さまざまなネイティブ Azure ストレージ サービス (Azure Files、Azure NetApp Files、Azure Shared Disk など) は、リージョンによっては利用できない場合があります。そのため、フェールオーバー後に DR リージョンで同様の SAP 設定を行うには、それぞれのストレージ サービスが DR サイトで提供されていることを確認します。",
+ "text": "さまざまなネイティブ Azure ストレージ サービス (Azure Files、Azure NetApp Files、Azure Shared Disk など) は、すべてのリージョンで使用できるとは限りません。そのため、フェールオーバー後に DR リージョンで同様の SAP を設定するには、それぞれのストレージ サービスが DR サイトで提供されていることを確認します。",
"waf": "確実"
},
{
@@ -398,7 +402,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "SAP システムのスタート/ストップを自動化してコストを管理します。",
+ "text": "SAPシステムのStart-Stopを自動化してコストを管理します。",
"waf": "費用"
},
{
@@ -408,7 +412,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": " ",
- "text": "SAP HANA で Azure Premium Storage を使用する場合は、Azure Standard SSD ストレージを使用して、コスト意識の高いストレージ ソリューションを選択できます。ただし、Standard SSD または Standard HDD Azure Storage を選択すると、個々の VM の SLA に影響することに注意してください。また、非運用環境など、I/O スループットが低く待機時間が短いシステムでは、下位のシリーズ VM を使用できます。",
+ "text": "Azure Premium Storage を SAP HANA と共に使用する場合、Azure Standard SSD ストレージを使用して、コストを意識したストレージ ソリューションを選択できます。ただし、Standard SSD または Standard HDD Azure ストレージを選択すると、個々の VM の SLA に影響することに注意してください。また、非本番環境など、I/O スループットが低く、レイテンシが低いシステムでは、下位シリーズの VM を使用できます。",
"waf": "費用"
},
{
@@ -418,43 +422,44 @@
"service": "SAP",
"severity": "低い",
"subcategory": " ",
- "text": "低コストの代替構成 (多目的) として、非運用環境の HANA データベース サーバー VM に低パフォーマンスの SKU を選択できます。ただし、E シリーズなどの一部の VM の種類は、HANA 認定 (SAP HANA Hardware Directory) されていないか、ストレージ待機時間を 1 ミリ秒未満にできないことに注意することが重要です。",
+ "text": "低コストの代替構成 (多目的) として、非運用 HANA データベース サーバー VM に低パフォーマンスの SKU を選択できます。ただし、E シリーズなどの一部の VM タイプは、HANA 認定 (SAP HANA ハードウェア ディレクトリ) されていないか、1 ミリ秒未満のストレージ待機時間を実現できないことに注意してください。",
"waf": "費用"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
"severity": "高い",
"subcategory": "同一性",
- "text": "管理グループ、サブスクリプション、リソース グループ、およびリソースに RBAC モデルを適用する",
+ "text": "管理グループ、サブスクリプション、リソース グループ、リソースに RBAC モデルを適用する",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "45911475-e39e-4530-accc-d979366bcda2",
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Cloud Connector を介して SAP クラウド アプリケーションからオンプレミス (IaaS を含む) に ID を転送するためのプリンシパル伝達を適用する",
+ "text": "クラウド コネクタを介して SAP クラウド アプリケーションから SAP オンプレミス (IaaS を含む) に ID を転送するためのプリンシパル伝達の強制",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAML を使用して Azure AD で SAP Analytics Cloud、SAP Cloud Platform、Business by Design、SAP Qualtrics、SAP C4C などの SAP SaaS アプリケーションに SSO を実装します。",
+ "text": "SAML を使用して、SAP Analytics Cloud、SAP Cloud Platform、Business by Design、SAP Qualtrics、SAP C4C with Azure AD などの SAP SaaS アプリケーションに SSO を実装します。",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
@@ -465,7 +470,7 @@
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
"service": "SAP",
"severity": "中程度",
@@ -475,88 +480,88 @@
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP NetWeaver SSO またはパートナーソリューションを使用して、SAP GUI への SSO を実装できます。",
+ "text": "SAP NetWeaver SSO またはパートナソリューションを使用して、SAP GUI への SSO を実装することができます。",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP GUI および Web ブラウザアクセスの SSO には、設定とメンテナンスが容易なため、SNC/Kerberos/SPNEGO (シンプルで保護された GSSAPI ネゴシエーションメカニズム) を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP セキュアログインサーバーを検討してください。",
+ "text": "SAP GUIおよびWebブラウザアクセスのSSOには、構成と保守が容易なSNC / Kerberos / SPNEGO(シンプルで保護されたGSSAPIネゴシエーションメカニズム)を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP Secure Login Server を検討してください。",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
"link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP GUI および Web ブラウザアクセスの SSO には、設定とメンテナンスが容易なため、SNC/Kerberos/SPNEGO (シンプルで保護された GSSAPI ネゴシエーションメカニズム) を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP セキュアログインサーバーを検討してください。",
+ "text": "SAP GUIおよびWebブラウザアクセスのSSOには、構成と保守が容易なSNC / Kerberos / SPNEGO(シンプルで保護されたGSSAPIネゴシエーションメカニズム)を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP Secure Login Server を検討してください。",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "16785d6f-a96c-496a-b885-18f482734c88",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "OAuth for SAP NetWeaver を使用して SSO を実装し、サードパーティまたはカスタムアプリケーションが SAP NetWeaver OData サービスにアクセスできるようにします。",
+ "text": "SAP NetWeaver の OAuth を使用して SSO を実装し、サードパーティまたはカスタムアプリケーションが SAP NetWeaver OData サービスにアクセスできるようにします。",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "a747c350-8d4c-449c-93af-393dbca77c48",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP HANAへのSSOの実装",
+ "text": "SAP HANA への SSO の実装",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "Azure AD は、RISE でホストされている SAP システムの ID プロバイダーであると考えてください。詳細については、「サービスと Azure AD の統合」を参照してください。",
+ "text": "Azure AD は、RISE でホストされている SAP システムの ID プロバイダーと考えてください。詳細については、「サービスと Azure AD の統合」を参照してください。",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
"link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP にアクセスするアプリケーションでは、プリンシパル伝搬を使用して SSO を確立することができます。",
+ "text": "SAP にアクセスするアプリケーションの場合は、プリンシパル伝搬を使用して SSO を確立することができます。",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP Identity Authentication Service (IAS) を必要とする SAP BTP サービスまたは SaaS ソリューションを使用している場合は、SAP Cloud Identity Authentication Services と Azure AD の間に SSO を実装して、それらの SAP サービスにアクセスすることを検討してください。この統合により、SAP IAS はプロキシ ID プロバイダーとして機能し、認証要求を中央ユーザー ストアおよび ID プロバイダーとして Azure AD に転送できます。",
+ "text": "SAP Identity Authentication Service (IAS) を必要とする SAP BTP サービスまたは SaaS ソリューションを使用している場合は、SAP Cloud Identity Authentication サービスと Azure AD の間に SSO を実装して、それらの SAP サービスにアクセスすることを検討してください。この統合により、SAP IAS はプロキシ ID プロバイダーとして機能し、認証要求を中央ユーザー ストアおよび ID プロバイダーとして Azure AD に転送できます。",
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
"service": "SAP",
@@ -566,56 +571,61 @@
"waf": "安全"
},
{
- "category": "ID とアクセス",
+ "category": "IDとアクセス",
"guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
"service": "SAP",
"severity": "中程度",
"subcategory": "同一性",
- "text": "SAP SuccessFactors を使用している場合は、Azure AD の自動ユーザー プロビジョニングの使用を検討してください。この統合により、SAP SuccessFactors に新しい従業員を追加するときに、Azure AD でユーザー アカウントを自動的に作成できます。 必要に応じて、Microsoft 365 または Azure AD でサポートされているその他の SaaS アプリケーションでユーザー アカウントを作成できます。 SAP SuccessFactors へのメール アドレスの書き戻しを使用します。",
+ "text": "SAP SuccessFactors を使用している場合は、Azure AD 自動ユーザー プロビジョニングの使用を検討してください。この統合により、新しい従業員を SAP SuccessFactors に追加すると、Azure AD でそのユーザー アカウントを自動的に作成できます。必要に応じて、Microsoft 365 または Azure AD でサポートされている他の SaaS アプリケーションでユーザー アカウントを作成できます。メール アドレスを SAP SuccessFactors に書き戻します。",
"waf": "安全"
},
{
"category": "管理グループとサブスクリプション",
+ "description": "管理グループの階層を適度にフラットに保ちます (4 つ以下)。",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "既存の管理グループ ポリシーを SAP サブスクリプションに適用する",
+ "text": "既存の管理グループポリシーをSAPサブスクリプションに適用",
"training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
"waf": "オペレーションズ"
},
{
"category": "管理グループとサブスクリプション",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "緊密に結合されたアプリケーションを同じSAPサブスクリプションに統合し、ルーティングと管理の複雑さを回避",
+ "text": "緊密に結合されたアプリケーションを同じSAPサブスクリプションに統合して、ルーティングと管理の複雑さを回避",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
"waf": "オペレーションズ"
},
{
"category": "管理グループとサブスクリプション",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "サブスクリプションをスケール ユニットとして活用し、リソースをスケーリングし、環境ごとにサブスクリプションをデプロイすることを検討してください。サンドボックス、非製品、製品",
+ "text": "サブスクリプションをスケールユニットとして活用し、リソースをスケーリングし、環境ごとにサブスクリプションをデプロイすることを検討してください。サンドボックス、非製品、製品",
"training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
"waf": "オペレーションズ"
},
{
"category": "管理グループとサブスクリプション",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "サブスクリプションのプロビジョニングの一環としてクォータを確実に増やす (例: サブスクリプション内で使用可能な VM コアの合計数)",
+ "text": "サブスクリプションのプロビジョニングの一部としてクォータの増加を確認する (例: サブスクリプション内の使用可能な VM コアの合計)",
"training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"waf": "オペレーションズ"
},
@@ -626,7 +636,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "サブスクリプション",
- "text": "クォータ API は、Azure サービスのクォータを表示および管理するために使用できる REST API です。必要に応じて使用を検討してください。",
+ "text": "Quota API は、Azure サービスのクォータを表示および管理するために使用できる REST API です。必要に応じて使用を検討してください。",
"waf": "オペレーションズ"
},
{
@@ -636,7 +646,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "可用性ゾーンにデプロイする場合は、クォータが承認されたら、VM のゾーン デプロイが使用可能であることを確認します。必要なサブスクリプション、VM シリーズ、CPU の数、可用性ゾーンを含むサポート リクエストを送信します。",
+ "text": "可用性ゾーンにデプロイする場合は、クォータが承認されたら、VM のゾーン デプロイが使用可能であることを確認してください。サブスクリプション、VM シリーズ、CPU の数、必要な可用性ゾーンを含むサポート リクエストを送信します。",
"waf": "オペレーションズ"
},
{
@@ -646,18 +656,19 @@
"service": "SAP",
"severity": "高い",
"subcategory": "サブスクリプション",
- "text": "必要なサービスと機能が、選択した展開リージョン内で利用可能であることを確認します。ANF、ゾーンなど",
+ "text": "必要なサービスと機能が、選択したデプロイ リージョン内で使用できることを確認します。ANF、ゾーンなど",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "オペレーションズ"
},
{
"category": "管理グループとサブスクリプション",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
"severity": "中程度",
"subcategory": "サブスクリプション",
- "text": "コストの分類とリソースのグループ化 (BillTo、部門 (または部署)、環境 (運用、ステージ、開発)、層 (Web 層、アプリケーション層)、アプリケーション所有者、プロジェクト名) に Azure リソース タグを活用します",
+ "text": "コストの分類とリソースのグループ化に Azure リソース タグを活用します (: BillTo、部門 (または部署)、環境 (運用、ステージ、開発)、階層 (Web 層、アプリケーション層)、アプリケーション所有者、ProjectName)",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "オペレーションズ"
},
@@ -667,8 +678,8 @@
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
"severity": "高い",
- "subcategory": "BCDR (英語)",
- "text": "Azure Backup サービスを使用して HANA データベースを保護するのに役立ちます。",
+ "subcategory": "BCDRの",
+ "text": "Azure Backup サービスを使用して HANA データベースを保護します。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "確実"
},
@@ -678,8 +689,8 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
"service": "SAP",
"severity": "中程度",
- "subcategory": "BCDR (英語)",
- "text": "HANA、Oracle、または DB2 データベースに Azure NetApp Files をデプロイする場合は、Azure アプリケーション整合性スナップショット ツール (AzAcSnap) を使用して、アプリケーション整合性スナップショットを作成します。AzAcSnap は Oracle データベースもサポートしています。個々の VM ではなく、中央の VM で AzAcSnap を使用することを検討してください。",
+ "subcategory": "BCDRの",
+ "text": "HANA 、 Oracle 、または DB2 データベースに Azure NetApp Files をデプロイする場合は、 Azure アプリケーション整合性スナップショット ツール (AzAcSnap) を使用して、アプリケーション整合性スナップショットを作成します。AzAcSnap は Oracle データベースもサポートしています。AzAcSnap は、個々の VM ではなく、中央の VM で使用することを検討してください。",
"waf": "確実"
},
{
@@ -699,7 +710,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "管理",
- "text": "異なるアプリケーション サービスを同じクラスターにグループ化しないでください。たとえば、DRBDとセントラルサービスクラスタを同じクラスタに組み合わせないでください。ただし、同じ Pacemaker クラスターを使用して、約 5 つの異なるセントラル サービス (マルチ SID クラスター) を管理できます。",
+ "text": "同じクラスター内で異なるアプリケーション サービスをグループ化しないでください。たとえば、DRBDと中央サービスクラスタを同じクラスタに組み合わせないでください。ただし、同じ Pacemaker クラスターを使用して、約 5 つの異なる中央サービス (マルチ SID クラスター) を管理できます。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
@@ -710,7 +721,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "管理",
- "text": "スヌーズ モデルで開発/テスト システムを実行して、Azure の実行コストを節約および最適化することを検討してください。",
+ "text": "Azure の実行コストを節約して最適化するために、スヌーズ モデルで開発/テスト システムを実行することを検討してください。",
"waf": "費用"
},
{
@@ -720,7 +731,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "管理",
- "text": "お客様の SAP 資産を管理することでお客様と提携する場合は、Azure Lighthouse をご検討ください。Azure Lighthouse を使用すると、マネージド サービス プロバイダーは Azure ネイティブ ID サービスを使用して、顧客の環境に対する認証を行うことができます。顧客はいつでもアクセスを取り消し、サービスプロバイダーの行動を監査できるため、制御を顧客の手に委ねることができます。",
+ "text": "お客様の SAP 資産を管理することでお客様と提携する場合は、Azure Lighthouse をご検討ください。Azure Lighthouse を使用すると、マネージド サービス プロバイダーは Azure ネイティブ ID サービスを使用して、顧客の環境に対して認証を行うことができます。これにより、顧客はいつでもアクセスを取り消し、サービスプロバイダーの行動を監査できるため、制御が顧客の手に委ねられます。",
"waf": "オペレーションズ"
},
{
@@ -730,7 +741,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "管理",
- "text": "Azure Update Manager を使用して、1 つまたは複数の VM で利用可能な更新プログラムの状態を確認し、定期的な修正プログラムの適用をスケジュールすることを検討します。",
+ "text": "Azure Update Manager を使用して、1 つまたは複数の VM で利用可能な更新プログラムの状態を確認し、定期的な修正プログラムの適用をスケジュールすることを検討してください。",
"training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -741,7 +752,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "管理",
- "text": "SAP Landscape Management (LaMa) を使用して SAP Basis の運用を最適化および管理します。Azure 用の SAP LaMa コネクタを使用して、SAP システムの再配置、コピー、複製、更新を行います。",
+ "text": "SAP Landscape Management (LaMa) を使用して、SAP Basis の運用を最適化および管理します。Azure 用の SAP LaMa コネクタを使用して、SAP システムの再配置、コピー、複製、更新を行います。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -752,7 +763,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "Azure Monitor for SAP solutions を使用して、Azure 上の SAP ワークロード (SAP HANA、高可用性 SUSE クラスター、SQL システム) を監視します。Azure Monitor for SAP solutions を SAP Solution Manager で補完することを検討してください。",
+ "text": "Azure Monitor for SAP solutions を使用して、Azure 上の SAP ワークロード (SAP HANA、高可用性 SUSE クラスター、SQL システム) を監視します。SAP Solution Manager を使用して Azure Monitor for SAP solutions を補完することを検討してください。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -763,7 +774,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "モニタリング",
- "text": "SAP の VM 拡張機能チェックを実行します。VM Extension for SAP では、仮想マシン (VM) の割り当てられたマネージド ID を使用して、VM の監視および構成データにアクセスします。このチェックにより、SAP アプリケーションのすべてのパフォーマンス メトリックが、基になる Azure Extension for SAP からのものであることが確認されます。",
+ "text": "SAP の VM 拡張機能チェックを実行します。VM Extension for SAP は、仮想マシン (VM) の割り当てられたマネージド ID を使用して、VM の監視データと構成データにアクセスします。このチェックにより、SAP アプリケーションのすべてのパフォーマンス メトリックが、基になる Azure Extension for SAP からのものであることが保証されます。",
"training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -774,7 +785,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "アクセス制御とコンプライアンス レポートに Azure Policy を使用します。Azure Policy には、一貫したポリシーの遵守と迅速な違反検出を保証するために、組織全体の設定を適用する機能が用意されています。",
+ "text": "Azure Policy を使用して、アクセス制御とコンプライアンス レポートを作成します。Azure Policy には、組織全体の設定を適用して、一貫したポリシーの遵守と迅速な違反検出を確保する機能があります。",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "オペレーションズ"
},
@@ -796,7 +807,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "プロビジョニングされた Azure インフラストラクチャで SAP HANA の品質チェックを実行して、プロビジョニングされた VM が SAP HANA on Azure のベスト プラクティスに準拠していることを確認します。",
+ "text": "プロビジョニングされた Azure インフラストラクチャで SAP HANA の品質チェックを実行し、プロビジョニングされた VM が SAP HANA on Azure のベスト プラクティスに準拠していることを確認します。",
"waf": "オペレーションズ"
},
{
@@ -806,7 +817,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "モニタリング",
- "text": "Azure サブスクリプションごとに、ゾーン デプロイの前に Azure 可用性ゾーンで待機時間テストを実行して、SAP on Azure のデプロイ用に待機時間の短いゾーンを選択します。",
+ "text": "Azure サブスクリプションごとに、ゾーン デプロイの前に Azure 可用性ゾーンで待機時間テストを実行して、Azure 上の SAP のデプロイに待機時間の短いゾーンを選択します。",
"training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
"waf": "パフォーマンス"
},
@@ -817,7 +828,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "回復性レポートを実行して、プロビジョニングされた Azure インフラストラクチャ (コンピューティング、データベース、ネットワーク、ストレージ、Site Recovery) 全体の構成が、Cloud Adaption Framework for Azure によって定義された構成に準拠していることを確認します。",
+ "text": "回復性レポートを実行して、プロビジョニングされた Azure インフラストラクチャ全体 (コンピューティング、データベース、ネットワーク、ストレージ、Site Recovery) の構成が、Cloud Adaption Framework for Azure で定義された構成に準拠していることを確認します。",
"training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "確実"
},
@@ -828,18 +839,19 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "SAP 用 Microsoft Sentinel ソリューションを使用して脅威保護を実装します。このソリューションを使用して、SAPシステムを監視し、ビジネスロジック層とアプリケーション層全体で高度な脅威を検出します。",
+ "text": "SAP 用の Microsoft Sentinel ソリューションを使用して脅威保護を実装します。このソリューションを使用して、SAPシステムを監視し、ビジネスロジックとアプリケーションレイヤー全体で高度な脅威を検出します。",
"training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "安全"
},
{
"category": "管理と監視",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
"severity": "中程度",
"subcategory": "モニタリング",
- "text": "Azure のタグ付けを利用して、リソースを論理的にグループ化して追跡し、デプロイを自動化し、最も重要なこととして、発生したコストを可視化できます。",
+ "text": "Azure のタグ付けを活用すると、リソースを論理的にグループ化して追跡し、デプロイを自動化し、最も重要なこととして、発生したコストを可視化できます。",
"training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -850,7 +862,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "パフォーマンス",
- "text": "待機時間の影響を受けやすいアプリケーションには、VM 間の待機時間の監視を使用します。",
+ "text": "レイテンシの影響を受けやすいアプリケーションには、VM 間のレイテンシ監視を使用します。",
"waf": "パフォーマンス"
},
{
@@ -871,7 +883,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "パフォーマンス",
- "text": "すべてのデータベース・ファイル・システムおよび実行可能プログラムをウイルス対策スキャンから除外します。これらを含めると、パフォーマンスの問題が発生する可能性があります。除外リストの規範的な詳細については、データベースベンダーに確認してください。たとえば、ウイルス対策スキャンから/oracle//sapdataを除外することをお薦めします。",
+ "text": "すべてのデータベース・ファイル・システムと実行可能プログラムをアンチウィルス・スキャンから除外します。それらを含めると、パフォーマンスの問題が発生する可能性があります。除外リストに関する規定の詳細については、データベースベンダーに確認してください。たとえば、Oracle では、ウイルス対策スキャンから /oracle//sapdata を除外することをお薦めします。",
"waf": "パフォーマンス"
},
{
@@ -881,7 +893,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "パフォーマンス",
- "text": "移行後に、HANA以外のデータベースの完全なデータベース統計を収集することを検討してください。たとえば、SAP ノート 1020260 - Oracle 統計の配信を実装します。",
+ "text": "移行後に、HANA 以外のデータベースの完全なデータベース統計を収集することを検討してください。たとえば、SAP ノート 1020260 - Oracle 統計の配信を実装します。",
"waf": "パフォーマンス"
},
{
@@ -891,7 +903,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "パフォーマンス",
- "text": "SAP on Azure を使用するすべての Oracle デプロイには、Oracle Automatic Storage Management (ASM) の使用を検討してください。",
+ "text": "SAP on Azure を使用するすべての Oracle デプロイに Oracle Automatic Storage Management (ASM) を使用することを検討してください。",
"training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
"waf": "パフォーマンス"
},
@@ -902,7 +914,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "パフォーマンス",
- "text": "Oracle を実行している SAP on Azure の場合、SQL スクリプトのコレクションは、パフォーマンスの問題の診断に役立ちます。 自動ワークロード・リポジトリ(AWR)レポートには、Oracleシステムの問題を診断するための貴重な情報が含まれています。AWRレポートは、複数のセッションで実行し、ピーク時間を選択して、分析を広範囲にカバーすることをお薦めします。",
+ "text": "Oracle を実行している SAP on Azure の場合、SQL スクリプトのコレクションはパフォーマンスの問題の診断に役立ちます。 自動ワークロード・リポジトリ(AWR)レポートには、Oracleシステムの問題を診断するための貴重な情報が含まれています。AWR レポートは、複数のセッションで実行し、ピーク時間を選択して、分析の範囲を広く設定することをお勧めします。",
"training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
"waf": "パフォーマンス"
},
@@ -918,51 +930,53 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "SAP",
"severity": "中程度",
- "subcategory": "アプリ配信",
+ "subcategory": "アプリの配信",
"text": "HTTP/S アプリを安全に配信するには、Application Gateway v2 を使用し、WAF の保護とポリシーが有効になっていることを確認します。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "中程度",
"subcategory": "DNSの",
- "text": "Azure への移行中に仮想マシンの DNS または仮想名が変更されない場合、バックグラウンド DNS と仮想名によって SAP ランドスケープ内の多くのシステム インターフェイスが接続され、お客様は、開発者が時間の経過と共に定義するインターフェイスに気付くことがあります。移行後に仮想名または DNS 名が変更されると、さまざまなシステム間で接続の問題が発生するため、このような問題を防ぐために DNS エイリアスを保持することをお勧めします。",
+ "text": "Azure への移行中に仮想マシンの DNS または仮想名が変更されない場合、バックグラウンド DNS と仮想名は SAP ランドスケープ内の多くのシステム インターフェイスに接続され、開発者は時間の経過と共に定義するインターフェイスをお客様が認識することがよくあります。移行後に仮想名やDNS名が変更されると、さまざまなシステム間で接続の問題が発生するため、この種の問題を防ぐためにDNSエイリアスを保持することをお勧めします。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "中程度",
"subcategory": "DNSの",
- "text": "異なる DNS ゾーンを使用して、各環境 (サンドボックス、開発、運用前、運用) を互いに区別します。例外は、独自の VNet を使用する SAP デプロイの場合です。ここでは、プライベート DNS ゾーンは必要ない場合があります。",
+ "text": "異なるDNSゾーンを使用して、各環境(サンドボックス、開発、プリプロダクション、およびプロダクション)を相互に区別します。例外は、独自の VNet を持つ SAP デプロイです。ここでは、プライベート DNS ゾーンは必要ないかもしれません。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "description": "VNet ピアリングを構成する場合は、 [リモート仮想ネットワークへのトラフィックを許可する] 設定を使用します。",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "ローカルとグローバルの VNet ピアリングは接続を提供し、複数の Azure リージョンにまたがる SAP デプロイのランディング ゾーン間の接続を確保するための推奨されるアプローチです",
+ "text": "ローカルおよびグローバル VNet ピアリングは接続を提供し、複数の Azure リージョンにまたがる SAP デプロイのランディング ゾーン間の接続を確保するための推奨されるアプローチです",
"training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
"waf": "確実"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
"service": "SAP",
@@ -973,40 +987,42 @@
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "Azure リージョンとオンプレミスの場所をまたいだグローバルなトランジット接続が必要な新規ネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに Virtual WAN を使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要はなく、SAP on Azure デプロイの標準に従うことができます。",
+ "text": "Virtual WAN は、Azure リージョンとオンプレミスの場所間でグローバルなトランジット接続が必要な新しいネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要がなく、SAP on Azure デプロイの標準に従うことができます。",
"training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
"service": "SAP",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "パートナーの NVA が使用されている場合にのみ、リージョン間でネットワーク仮想アプライアンス (NVA) をデプロイすることを検討してください。ネイティブ NVA が存在する場合、リージョン間または VNet 間の NVA は必要ありません。パートナーのネットワーク テクノロジと NVA をデプロイする場合は、ベンダーのガイダンスに従って、Azure ネットワークと競合する構成を確認します。",
+ "text": "リージョン間でネットワーク仮想アプライアンス (NVA) をデプロイするのは、パートナーの NVA が使用されている場合にのみ検討してください。ネイティブ NVA が存在する場合、リージョン間または VNet 間の NVA は必要ありません。パートナー ネットワーク テクノロジと NVA をデプロイする場合は、ベンダーのガイダンスに従って、Azure ネットワークと競合する構成を確認します。",
"training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
"link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"service": "SAP",
"severity": "中程度",
"subcategory": "ハイブリッド",
- "text": "Virtual WAN は、仮想 WAN ベースのトポロジのスポーク VNet 間の接続を管理し (ユーザー定義ルーティング (UDR) または NVA を設定する必要はありません)、同じ仮想ハブ内の VNet 間トラフィックの最大ネットワーク スループットは 50 ギガビット/秒です。必要に応じて、SAP ランディング ゾーンは VNet ピアリングを使用して他のランディング ゾーンに接続し、この帯域幅の制限を克服できます。",
+ "text": "Virtual WAN は、Virtual WAN ベースのトポロジのスポーク VNet 間の接続を管理し (ユーザー定義ルーティング (UDR) や NVA を設定する必要はありません)、同じ仮想ハブ内の VNet 間トラフィックの最大ネットワーク スループットは 50 ギガビット/秒です。必要に応じて、SAP ランディング ゾーンでは VNet ピアリングを使用して他のランディング ゾーンに接続し、この帯域幅の制限を克服できます。",
"training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
@@ -1017,18 +1033,19 @@
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
"severity": "高い",
"subcategory": "IPプラン",
- "text": "ASRの設定時にDR側でIPアドレスを予約することを検討してください",
+ "text": "ASR を設定するときは、DR 側で IP アドレスを予約することを検討してください",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
@@ -1039,95 +1056,97 @@
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "6e154e3a-a359-4282-ae6e-206173686af4",
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
"severity": "中程度",
"subcategory": "IPプラン",
- "text": "Azure では 1 つの VNet に複数の委任されたサブネットを作成できますが、Azure NetApp Files の VNet に存在できる委任されたサブネットは 1 つだけです。Azure NetApp Files に複数の委任されたサブネットを使用すると、新しいボリュームを作成しようとしても失敗します。",
+ "text": "Azure では VNet に複数の委任サブネットを作成するのに役立ちますが、Azure NetApp Files の VNet に存在できる委任サブネットは 1 つだけです。Azure NetApp Files に複数の委任されたサブネットを使用すると、新しいボリュームを作成しようとすると失敗します。",
"training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "オペレーションズ"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルター処理 (組織で必要な場合) を管理します",
+ "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルタリング (組織で必要な場合) を管理します",
"training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
"link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Application Gateway、SAP Web Dispatcher、およびその他のサードパーティ サービスの比較に示すように、Application Gateway が SAP Web アプリのリバース プロキシとして機能する場合、Application Gateway と Web Application Firewall には制限があります。",
+ "text": "Application Gateway、SAP Web Dispatcher、およびその他のサードパーティサービスの比較に示すように、Application Gateway が SAP Web アプリのリバースプロキシとして機能する場合、Application Gateway と Web Application Firewall には制限があります。",
"training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン全体でグローバル保護を提供します。",
+ "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン間でグローバルな保護を提供します。",
"training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure Front Door と Application Gateway を使用して HTTP/S アプリケーションを保護する場合は、Azure Front Door の Web アプリケーション ファイアウォール ポリシーを利用します。Application Gateway をロックダウンして、Azure Front Door からのトラフィックのみを受信します。",
+ "text": "Azure Front Door と Application Gateway を使用して HTTP/S アプリケーションを保護している場合は、Azure Front Door の Web アプリケーション ファイアウォール ポリシーを利用します。Azure Front Door からのトラフィックのみを受信するように Application Gateway をロックダウンします。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "5ada4332-4e13-4811-9231-81aa41742694",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Web アプリケーション ファイアウォールを使用して、インターネットに公開されているトラフィックをスキャンします。別のオプションとして、ロード バランサーや、Application Gateway やサードパーティ ソリューションなどのファイアウォール機能が組み込まれているリソースと共に使用することもできます。",
+ "text": "Web アプリケーション ファイアウォールを使用して、インターネットに公開されているトラフィックをスキャンします。別のオプションは、ロード バランサーで使用するか、Application Gateway やサードパーティ ソリューションなどのファイアウォール機能が組み込まれているリソースで使用することです。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "Azure リージョンとオンプレミスの場所をまたいだグローバルなトランジット接続が必要な新規ネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに Virtual WAN を使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要はなく、SAP on Azure デプロイの標準に従うことができます。",
+ "text": "Virtual WAN は、Azure リージョンとオンプレミスの場所間でグローバルなトランジット接続が必要な新しいネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要がなく、SAP on Azure デプロイの標準に従うことができます。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "SAP",
"severity": "中程度",
"subcategory": "インターネット",
- "text": "データ漏えいを防ぐには、Azure Private Link を使用して、Azure Blob Storage、Azure Files、Azure Data Lake Storage Gen2、Azure Data Factory などのサービスとしてのプラットフォーム リソースに安全にアクセスします。Azure プライベート エンドポイントは、VNet と Azure Storage、Azure Backup などのサービス間のトラフィックをセキュリティで保護するのにも役立ちます。VNet とプライベート エンドポイント対応サービス間のトラフィックは、Microsoft グローバル ネットワークを経由するため、パブリック インターネットへの公開は防止されます。",
+ "text": "データ漏えいを防ぐには、Azure Private Link を使用して、Azure Blob Storage、Azure Files、Azure Data Lake Storage Gen2、Azure Data Factory などのサービスとしてのプラットフォーム リソースに安全にアクセスします。Azure プライベート エンドポイントは、VNet と Azure Storage、Azure Backup などのサービス間のトラフィックをセキュリティで保護するのにも役立ちます。VNet とプライベート エンドポイント対応サービス間のトラフィックは、Microsoft グローバル ネットワークを経由するため、パブリック インターネットに公開されるのを防ぎます。",
"training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
@@ -1138,73 +1157,74 @@
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
"service": "SAP",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "Azure Load Balancer の内部デプロイが Direct Server Return (DSR) を使用するように設定されていることを確認します。この設定 (フローティング IP の有効化) により、DBMS レイヤーの高可用性構成に内部ロード バランサー構成が使用されている場合の待機時間が短縮されます。",
+ "text": "Azure Load Balancer の内部デプロイが Direct Server Return (DSR) を使用するように設定されていることを確認します。この設定 (フローティング IP の有効化) は、DBMS レイヤーの高可用性構成に内部ロード バランサー構成を使用する場合のレイテンシを短縮します。",
"training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "アプリケーション セキュリティ グループ (ASG) と NSG 規則を使用して、SAP アプリケーション層と DBMS 層の間にネットワーク セキュリティのアクセス制御リストを定義できます。ASG は、仮想マシンをグループ化してセキュリティの管理に役立てます。",
+ "text": "アプリケーション セキュリティ グループ (ASG) ルールと NSG ルールを使用して、SAP アプリケーションと DBMS レイヤー間のネットワーク セキュリティ アクセス制御リストを定義できます。ASG は、セキュリティの管理に役立つ仮想マシンをグループ化します。",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "安全"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高い",
"subcategory": "セグメンテーション",
- "text": "ピアリングされていない異なる Azure VNet への SAP アプリケーション レイヤーと SAP DBMS の配置はサポートされていません。",
+ "text": "ピアリングされていない異なる Azure VNet に SAP アプリケーション レイヤーと SAP DBMS を配置することはサポートされていません。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "fa96c96a-d885-418f-9827-34c886ba2802",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "SAP アプリケーションで最適なネットワーク待機時間を実現するには、Azure 近接通信配置グループの使用を検討してください。",
+ "text": "SAP アプリケーションでのネットワーク待機時間を最適化するには、Azure 近接通信配置グループの使用を検討してください。",
"training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高い",
"subcategory": "セグメンテーション",
- "text": "オンプレミスと Azure の間で分割された SAP アプリケーション サーバー レイヤーと DBMS レイヤーを実行することは、まったくサポートされていません。どちらのレイヤーも、オンプレミスまたは Azure に完全に存在する必要があります。",
+ "text": "オンプレミスと Azure の間で分割された SAP アプリケーション サーバー レイヤーと DBMS レイヤーの実行はまったくサポートされていません。どちらのレイヤーも、オンプレミスまたは Azure に完全に存在する必要があります。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高い",
"subcategory": "セグメンテーション",
- "text": "SAP システムのデータベース管理システム (DBMS) レイヤーとアプリケーション レイヤーを異なる VNet でホストし、それらを VNet ピアリングに接続することは、レイヤー間の過剰なネットワーク トラフィックによって生成される可能性があるため、お勧めしません。Azure 仮想ネットワーク内のサブネットを使用して、SAP アプリケーション レイヤーと DBMS レイヤーを分離することをお勧めします。",
+ "text": "データベース管理システム (DBMS) と SAP システムのアプリケーション層を異なる VNet でホストし、それらを VNet ピアリングで接続することは、層間の過剰なネットワーク トラフィックによって大きなコストが発生する可能性があるため、お勧めしません。Azure 仮想ネットワーク内のサブネットを使用して、SAP アプリケーション レイヤーと DBMS レイヤーを分離することをお勧めします。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "費用"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "402a9846-d515-4061-aff8-cd30088693fa",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
"service": "SAP",
@@ -1215,17 +1235,17 @@
"waf": "パフォーマンス"
},
{
- "category": "ネットワークトポロジと接続性",
+ "category": "ネットワーク トポロジと接続性",
"guid": "87585797-5551-4d53-bb7d-a94ee415734d",
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
"service": "SAP",
"severity": "中程度",
"subcategory": "セグメンテーション",
- "text": "SAP RISE/ECS デプロイの場合、仮想ピアリングは、お客様の既存の Azure 環境との接続を確立するための推奨される方法です。SAP vnet と顧客 VNet の両方がネットワーク セキュリティ グループ (NSG) で保護され、vnet ピアリングを介した SAP ポートとデータベース ポートでの通信が可能になります",
+ "text": "SAP RISE/ECS デプロイの場合、仮想ピアリングは、お客様の既存の Azure 環境との接続を確立するための推奨される方法です。SAP vnet と顧客 vnet はどちらもネットワーク セキュリティ グループ (NSG) で保護されているため、vnet ピアリングを介して SAP ポートとデータベース ポートで通信できます",
"waf": "安全"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
@@ -1235,27 +1255,27 @@
"waf": "費用"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "Site Recovery の組み込み監視 (SAP で使用されている場合) を確認します。",
+ "text": "Site Recovery の組み込み監視 (SAP に使用されている場所) を確認します。",
"waf": "費用"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
"link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
"service": "SAP",
"severity": "高い",
"subcategory": " ",
- "text": "SAP HANA システム ランドスケープの監視に関するガイダンスを確認します。",
+ "text": "SAP HANA システムランドスケープの監視のガイダンスを確認します。",
"waf": "オペレーションズ"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
"link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
"service": "SAP",
@@ -1265,7 +1285,7 @@
"waf": "オペレーションズ"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
"link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
"service": "SAP",
@@ -1275,7 +1295,7 @@
"waf": "オペレーションズ"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
"link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
"service": "SAP",
@@ -1285,7 +1305,7 @@
"waf": "オペレーションズ"
},
{
- "category": "オペレーショナル・エクセレンス",
+ "category": "オペレーショナルエクセレンス",
"guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
"service": "SAP",
"severity": "高い",
@@ -1321,7 +1341,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "SAP ABAPMeter report /SSA/CAT を使用して、SAP アプリケーション サーバーからデータベース サーバー間の待機時間を確認します。",
+ "text": "SAP ABAPMeter レポート /SSA/CAT を使用して、SAP アプリケーション サーバーとデータベース サーバー間の待機時間を確認します。",
"training": "https://me.sap.com/notes/0002879613",
"waf": "パフォーマンス"
},
@@ -1331,7 +1351,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "CCMS を使用した SQL Server のパフォーマンス監視を確認します。",
+ "text": "CCMS を使用した SQL Server パフォーマンス監視を確認します。",
"waf": "パフォーマンス"
},
{
@@ -1341,7 +1361,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "SAP アプリケーション レイヤー VM と DBMS VM 間のネットワーク待機時間をテストします (NIPING)。",
+ "text": "SAP アプリケーション レイヤー VM と DBMS VM 間のネットワーク遅延をテストします (NIPING)。",
"training": "https://me.sap.com/notes/1100926/E",
"waf": "パフォーマンス"
},
@@ -1352,7 +1372,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "SAP HANA Studio アラートを確認します。",
+ "text": "SAP HANA Studio のアラートを確認します。",
"waf": "パフォーマンス"
},
{
@@ -1362,7 +1382,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": " ",
- "text": "HANA_Configuration_Minichecks を使用して SAP HANA ヘルスチェックを実行します。",
+ "text": "HANA_Configuration_Minichecksを使用して SAP HANA ヘルスチェックを実行します。",
"waf": "パフォーマンス"
},
{
@@ -1383,7 +1403,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "統治",
- "text": "SAP は、SAP システムを保護するために即時のアクションを必要とする非常に重要なセキュリティ パッチまたはホット フィックスをリリースしているため、SAP セキュリティ OSS ノートを定期的に確認してください。",
+ "text": "SAP は、SAP システムを保護するために即時のアクションが必要な非常に重要なセキュリティパッチ (ホットフィックス) をリリースするため、SAP セキュリティ OSS ノートを定期的に確認してください。",
"training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "安全"
},
@@ -1394,7 +1414,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "統治",
- "text": "SQL Server 上の SAP システムではアカウントを使用しないため、SQL Server 上の SAP システム管理者アカウントを無効にすることができます。元のシステム管理者アカウントを無効にする前に、システム管理者権限を持つ別のユーザーがサーバーにアクセスできることを確認してください。",
+ "text": "SQL Server 上の SAP システムではアカウントが使用されないため、SQL Server on SQL Server システム管理者アカウントを無効にすることができます。元のシステム管理者アカウントを無効にする前に、システム管理者権限を持つ別のユーザーがサーバーにアクセスできることを確認してください。",
"waf": "安全"
},
{
@@ -1404,7 +1424,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "統治",
- "text": "xp_cmdshellを無効にします。SQL Server 機能xp_cmdshell、SQL Server 内部オペレーティング システムのコマンド シェルを有効にします。これは、セキュリティ監査における潜在的なリスクです。",
+ "text": "xp_cmdshellを無効にします。SQL Server 機能xp_cmdshellは、SQL Server 内部オペレーティング システム コマンド シェルを有効にします。これは、セキュリティ監査における潜在的なリスクです。",
"training": "https://me.sap.com/notes/3019299/E",
"waf": "安全"
},
@@ -1415,7 +1435,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "秘密",
- "text": "Azure 上の SAP HANA データベース サーバーの暗号化では、SAP HANA ネイティブ暗号化テクノロジが使用されます。さらに、Azure で SQL Server を使用している場合は、Transparent Data Encryption (TDE) を使用してデータとログ ファイルを保護し、バックアップも暗号化されるようにします。",
+ "text": "Azure 上の SAP HANA データベース サーバーの暗号化には、SAP HANA ネイティブの暗号化テクノロジが使用されます。さらに、Azure で SQL Server を使用している場合は、Transparent Data Encryption (TDE) を使用してデータとログ ファイルを保護し、バックアップも暗号化されるようにします。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "安全"
},
@@ -1426,12 +1446,13 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "秘密",
- "text": "Azure Storage の暗号化は、すべての Azure Resource Manager とクラシック ストレージ アカウントに対して有効になっており、無効にすることはできません。データは既定で暗号化されるため、Azure Storage 暗号化を使用するためにコードやアプリケーションを変更する必要はありません。",
+ "text": "Azure Storage の暗号化は、すべての Azure Resource Manager アカウントとクラシック ストレージ アカウントに対して有効になっており、無効にすることはできません。データは既定で暗号化されるため、Azure Storage の暗号化を使用するためにコードやアプリケーションを変更する必要はありません。",
"training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "安全"
},
{
"category": "セキュリティ、ガバナンス、コンプライアンス",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
@@ -1448,7 +1469,7 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "秘密",
- "text": "デプロイが成功したら、Azure リソースを LOCK して、承認されていない変更から保護することをお勧めします。また、カスタマイズされた Azure ポリシー (Custome ロール) を使用して、サブスクリプションごとに LOCK の制約とルールを適用することもできます。",
+ "text": "デプロイが成功したら、承認されていない変更から保護するために、Azure リソースをロックすることをお勧めします。また、カスタマイズされた Azure ポリシー (カスタム ロール) を使用して、サブスクリプションごとに LOCK 制約とルールを適用することもできます。",
"training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "安全"
},
@@ -1470,7 +1491,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "秘密",
- "text": "既存の要件、規制、コンプライアンス制御 (内部/外部) に基づいて、必要な Azure ポリシーと Azure RBAC ロールを決定します",
+ "text": "既存の要件、規制、コンプライアンス制御 (内部/外部) に基づいて - 必要な Azure ポリシーと Azure RBAC ロールを決定します",
"training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "安全"
},
@@ -1481,7 +1502,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "秘密",
- "text": "SAP 環境でMicrosoft Defender for Endpointを有効にする場合は、すべてのサーバーを対象とするのではなく、DBMS サーバー上のデータとログ ファイルを除外することをお勧めします。ターゲット ファイルを除外する場合は、DBMS ベンダーの推奨事項に従ってください。",
+ "text": "SAP 環境でMicrosoft Defender for Endpointを有効にする場合は、すべてのサーバーをターゲットにするのではなく、DBMS サーバー上のデータ ファイルとログ ファイルを除外することをお勧めします。ターゲット ファイルを除外する場合は、DBMS ベンダーの推奨事項に従ってください。",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "安全"
},
@@ -1503,7 +1524,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "秘密",
- "text": "サードパーティのセキュリティ製品を DIAG (SAP GUI)、RFC、および SPNEGO for HTTPS のセキュアネットワーク通信 (SNC) と統合することにより、転送中のデータを暗号化します。",
+ "text": "サードパーティのセキュリティ製品を DIAG (SAP GUI)、RFC、HTTPS の SPNEGO の Secure Network Communications (SNC) と統合することで、転送中のデータを暗号化します。",
"training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
"waf": "安全"
},
@@ -1514,12 +1535,13 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "秘密",
- "text": "プリンシパル暗号化機能には既定で Microsoft マネージド キーを使用し、必要に応じてカスタマー マネージド キーを使用します。",
+ "text": "プリンシパル暗号化機能には Microsoft マネージド キーが既定で設定され、必要に応じてカスタマー マネージド キーが使用されます。",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
"category": "セキュリティ、ガバナンス、コンプライアンス",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
@@ -1536,7 +1558,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "秘密",
- "text": "HANA 以外の Windows オペレーティング システムと Windows 以外のオペレーティング システムのディスク暗号化キーとシークレットを制御および管理するには、Azure Key Vault を使用します。SAP HANA は Azure Key Vault ではサポートされていないため、SAP ABAP キーや SSH キーなどの代替方法を使用する必要があります。",
+ "text": "HANA 以外の Windows および Windows 以外のオペレーティング システムのディスク暗号化キーとシークレットを制御および管理するには、Azure Key Vault を使用します。SAP HANA は Azure Key Vault ではサポートされていないため、SAP ABAP キーや SSH キーなどの別の方法を使用する必要があります。",
"training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
"waf": "安全"
},
@@ -1547,7 +1569,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "安全",
- "text": "SAP on Azure スポーク サブスクリプションのロールベースのアクセス制御 (RBAC) ロールをカスタマイズして、偶発的なネットワーク関連の変更を回避します",
+ "text": "SAP on Azure スポーク サブスクリプションのロールベースのアクセス制御 (RBAC) ロールをカスタマイズして、ネットワーク関連の偶発的な変更を回避する",
"training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "安全"
},
@@ -1558,7 +1580,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "安全",
- "text": "DMZ と NVA を SAP 資産の残りの部分から分離し、Azure Private Link を構成し、SAP on Azure リソースを安全に管理および制御します",
+ "text": "DMZ と NVA を他の SAP 資産から分離し、Azure Private Link を構成し、SAP on Azure リソースを安全に管理および制御します",
"training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "安全"
},
@@ -1580,7 +1602,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "安全",
- "text": "さらに強力な保護を行うには、Microsoft Defender for Endpointの使用を検討してください。",
+ "text": "さらに強力な保護を行うには、Microsoft Defender for Endpoint の使用を検討してください。",
"training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
"waf": "安全"
},
@@ -1591,7 +1613,7 @@
"service": "SAP",
"severity": "高い",
"subcategory": "安全",
- "text": "仮想ネットワーク ピアリングによってスポーク ネットワークに接続されているハブ仮想ネットワークを介してすべてのトラフィックを渡すことで、SAP アプリケーションとデータベース サーバーをインターネットまたはオンプレミス ネットワークから分離します。ピアリングされた仮想ネットワークにより、SAP on Azure ソリューションがパブリック インターネットから分離されることが保証されます。",
+ "text": "仮想ネットワーク ピアリングによってスポーク ネットワークに接続されているハブ仮想ネットワークを介してすべてのトラフィックを通過させることにより、SAP アプリケーション サーバーとデータベース サーバーをインターネットまたはオンプレミス ネットワークから分離します。ピアリングされた仮想ネットワークにより、SAP on Azure ソリューションがパブリック インターネットから分離されることが保証されます。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "安全"
},
@@ -1602,7 +1624,7 @@
"service": "SAP",
"severity": "低い",
"subcategory": "安全",
- "text": "SAP Fiori などのインターネットに接続するアプリケーションの場合は、セキュリティレベルを維持しながら、アプリケーション要件ごとに負荷を分散してください。レイヤー 7 セキュリティについては、Azure Marketplace で入手できるサードパーティの Web アプリケーション ファイアウォール (WAF) を使用できます。",
+ "text": "SAP Fiori のようなインターネットに接続するアプリケーションの場合は、セキュリティレベルを維持しながら、アプリケーション要件ごとに負荷を分散してください。レイヤー 7 セキュリティのために、Azure Marketplace で入手できるサードパーティの Web アプリケーション ファイアウォール (WAF) を使用できます。",
"training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
"waf": "安全"
},
@@ -1613,15 +1635,15 @@
"service": "SAP",
"severity": "中程度",
"subcategory": "安全",
- "text": "Azure Monitor for SAP solutions でセキュリティで保護された通信を有効にするには、ルート証明書またはサーバー証明書のいずれかを使用することを選択できます。ルート証明書を使用することを強くお勧めします。",
+ "text": "Azure Monitor for SAP solutions でセキュリティで保護された通信を有効にするには、ルート証明書またはサーバー証明書のどちらを使用するかを選択できます。ルート証明書を使用することを強くお勧めします。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "安全"
}
],
"metadata": {
"name": "SAP Checklist",
- "state": "Preview",
- "timestamp": "May 14, 2024",
+ "state": "GA",
+ "timestamp": "October 02, 2024",
"waf": "all"
},
"severities": [
@@ -1637,7 +1659,7 @@
],
"status": [
{
- "description": "このチェックはまだ検討されていません",
+ "description": "このチェックはまだ見ていません",
"name": "未確認"
},
{
@@ -1645,12 +1667,12 @@
"name": "開ける"
},
{
- "description": "このチェックは検証済みで、これ以上のアクションアイテムは関連付けられていません",
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
"name": "達成"
},
{
- "description": "推奨事項は理解されているが、現在の要件では不要",
- "name": "必要なし"
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
},
{
"description": "現在のデザインには適用されません",
diff --git a/checklists/sap_checklist.ko.json b/checklists/sap_checklist.ko.json
index 031c9a576..1b4098a14 100644
--- a/checklists/sap_checklist.ko.json
+++ b/checklists/sap_checklist.ko.json
@@ -4,7 +4,7 @@
"name": "ID 및 액세스"
},
{
- "name": "네트워크 토폴로지 및 연결"
+ "name": "네트워크 토폴로지 및 연결성"
},
{
"name": "보안, 거버넌스 및 규정 준수"
@@ -13,7 +13,7 @@
"name": "관리 및 모니터링"
},
{
- "name": "관리 그룹 및 구독"
+ "name": "관리 그룹 및 구독Management Group and Subscriptions"
}
],
"items": [
@@ -24,7 +24,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "증권 시세 표시기",
- "text": "ACSS(Azure Center for SAP solutions)는 SAP를 Azure의 최상위 워크로드로 만드는 Azure 제품입니다. ACSS는 Azure에서 SAP 시스템을 통합 워크로드로 만들고 실행할 수 있도록 하는 엔드투엔드 솔루션으로, 혁신을 위한 보다 원활한 기반을 제공합니다. 신규 및 기존 Azure 기반 SAP 시스템 모두에 대한 관리 기능을 활용할 수 있습니다.",
+ "text": "ACSS(Azure Center for SAP solutions)는 SAP를 Azure의 최상위 워크로드로 만드는 Azure 제품입니다. ACSS는 Azure에서 SAP 시스템을 통합 워크로드로 만들고 실행할 수 있도록 하는 엔드투엔드 솔루션으로, 혁신을 위한 보다 원활한 기반을 제공합니다. 새 Azure 기반 SAP 시스템과 기존 Azure 기반 SAP 시스템 모두에 대한 관리 기능을 활용할 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
"waf": "작업"
},
@@ -35,22 +35,22 @@
"service": "SAP",
"severity": "보통",
"subcategory": "증권 시세 표시기",
- "text": "Azure는 Linux 및 Windows에서 SAP 배포 자동화를 지원합니다. SAP Deployment Automation Framework는 SAP 환경을 배포, 설치 및 유지 관리할 수 있는 오픈 소스 오케스트레이션 도구입니다.",
+ "text": "Azure는 Linux 및 Windows에서 SAP 배포 자동화를 지원합니다. SAP Deployment Automation Framework는 SAP 환경을 배포, 설치 및 유지 관리할 수 있는 오픈 소스 오케스트레이션 툴입니다.",
"training": "https://github.com/Azure/sap-automation",
"waf": "작업"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
"service": "SAP",
"severity": "보통",
"subcategory": "백업 및 복원",
- "text": "RTO를 충족하는 시점과 시간 프레임에서 프로덕션 데이터베이스에 대한 특정 시점으로 복구를 수행합니다. 특정 시점 복구에는 일반적으로 DBMS 계층 또는 SAP를 통해 데이터를 삭제하는 운영자 오류가 포함됩니다",
+ "text": "RTO를 충족하는 언제든지 특정 시점과 시간 프레임에서 프로덕션 데이터베이스에 대한 특정 시점 복구를 수행합니다. 특정 시점 복구에는 일반적으로 DBMS 계층 또는 SAP를 통해 데이터를 삭제하는 운영자 오류가 포함됩니다",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
"service": "SAP",
"severity": "보통",
@@ -59,50 +59,51 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "b651423c-8552-42db-a545-5cb50c05527a",
"link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"service": "SAP",
"severity": "높다",
"subcategory": "재해 복구",
- "text": "쌍을 이루는 지역 간에 표준 스토리지를 복제할 수 있지만 표준 스토리지를 사용하여 데이터베이스 또는 가상 하드 디스크를 저장할 수는 없습니다. 사용하는 쌍을 이루는 지역 간에만 백업을 복제할 수 있습니다. 다른 모든 데이터의 경우 SQL Server Always On 또는 SAP HANA 시스템 복제와 같은 네이티브 DBMS 기능을 사용하여 복제를 실행합니다. SAP 애플리케이션 계층에 Site Recovery, rsync 또는 robocopy 및 기타 타사 소프트웨어의 조합을 사용합니다.",
+ "text": "쌍을 이루는 지역 간에 표준 스토리지를 복제할 수 있지만 표준 스토리지를 사용하여 데이터베이스 또는 가상 하드 디스크를 저장할 수는 없습니다. 사용하는 쌍을 이루는 지역 간에만 백업을 복제할 수 있습니다. 다른 모든 데이터의 경우 SQL Server Always On 또는 SAP HANA 시스템 복제와 같은 기본 DBMS 기능을 사용하여 복제를 실행합니다. SAP 애플리케이션 계층에 Site Recovery, rsync 또는 robocopy 및 기타 타사 소프트웨어를 조합하여 사용합니다.",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
"service": "SAP",
"severity": "보통",
"subcategory": "재해 복구",
- "text": "Azure 가용성 영역을 사용하여 고가용성을 달성하는 경우 SAP 애플리케이션 서버와 데이터베이스 서버 간의 대기 시간을 고려해야 합니다. 대기 시간이 긴 영역의 경우 SAP 애플리케이션 서버와 데이터베이스 서버가 항상 동일한 영역에서 실행되도록 운영 절차를 마련해야 합니다.",
+ "text": "고가용성을 달성하기 위해 Azure 가용성 영역을 사용하는 경우 SAP 애플리케이션 서버와 데이터베이스 서버 간의 대기 시간을 고려해야 합니다. 대기 시간이 긴 영역의 경우 SAP 애플리케이션 서버와 데이터베이스 서버가 항상 동일한 영역에서 실행되도록 운영 절차를 마련해야 합니다.",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "SAP",
"severity": "높다",
"subcategory": "재해 복구",
- "text": "온-프레미스에서 기본 및 보조 Azure 재해 복구 지역으로의 ExpressRoute 연결을 설정합니다. 또한 ExpressRoute를 사용하는 대신 온-프레미스에서 주 및 보조 Azure 재해 복구 지역으로 VPN 연결을 설정하는 것이 좋습니다.",
+ "text": "온-프레미스에서 주 및 보조 Azure 재해 복구 지역으로의 ExpressRoute 연결을 설정합니다. 또한 ExpressRoute를 사용하는 대신 온-프레미스에서 주 및 보조 Azure 재해 복구 지역으로 VPN 연결을 설정하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
"link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
"service": "SAP",
"severity": "낮다",
"subcategory": "재해 복구",
- "text": "DR 지역에서 데이터의 암호를 해독할 수 있도록 지역 간에 인증서, 비밀 또는 키와 같은 키 자격 증명 모음 콘텐츠를 복제합니다.",
+ "text": "DR 지역에서 데이터의 암호를 해독할 수 있도록 인증서, 비밀 또는 키와 같은 키 자격 증명 모음 콘텐츠를 지역 간에 복제합니다.",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
"service": "SAP",
@@ -112,7 +113,7 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
"service": "SAP",
@@ -123,7 +124,7 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
"link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
"service": "SAP",
@@ -134,18 +135,19 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
"service": "SAP",
"severity": "높다",
"subcategory": "재해 복구",
- "text": "기본 VNet(가상 네트워크)에 대한 CIDR은 DR 사이트 VNet의 CIDR과 충돌하거나 겹치지 않아야 합니다",
+ "text": "기본 VNet(가상 네트워크)의 CIDR은 DR 사이트 VNet의 CIDR과 충돌하거나 겹치지 않아야 합니다",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
"service": "SAP",
"severity": "높다",
@@ -155,7 +157,7 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
@@ -166,18 +168,18 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "SAP 및 SAP 데이터베이스의 경우 자동 장애 조치(failover) 클러스터를 구현하는 것이 좋습니다. Windows에서 Windows Server 장애 조치(failover) 클러스터링은 장애 조치(failover)를 지원합니다. Linux에서 Linux Pacemaker 또는 SIOS Protection Suite 및 Veritas InfoScale과 같은 타사 툴은 장애 조치를 지원합니다.",
+ "text": "SAP 및 SAP 데이터베이스의 경우 자동 장애 조치(failover) 클러스터를 구현하는 것이 좋습니다. Windows에서 Windows Server 장애 조치(failover) 클러스터링은 장애 조치(failover)를 지원합니다. Linux에서 Linux Pacemaker 또는 SIOS Protection Suite 및 Veritas InfoScale과 같은 타사 도구는 장애 조치를 지원합니다.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
"link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
"service": "SAP",
@@ -188,18 +190,18 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
"link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "DBMS 데이터 및 트랜잭션/다시 실행 로그 파일은 Azure 지원 블록 스토리지 또는 Azure NetApp Files에 저장됩니다. Azure Files 또는 Azure Premium Files는 DBMS 데이터 및/또는 SAP 워크로드가 있는 다시 실행 로그 파일에 대한 스토리지로 지원되지 않습니다.",
+ "text": "DBMS 데이터 및 트랜잭션/다시 실행 로그 파일은 Azure 지원 블록 스토리지 또는 Azure NetApp Files에 저장됩니다. Azure Files 또는 Azure Premium Files는 SAP 워크로드를 사용하여 DBMS 데이터 및/또는 다시 실행 로그 파일에 대한 스토리지로 지원되지 않습니다.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
"link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
"service": "SAP",
@@ -210,40 +212,41 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "SAP ASCS(애플리케이션 계층 구성 요소) 및 DBMS 계층에 대한 대부분의 장애 조치(failover) 클러스터에는 장애 조치(failover) 클러스터에 대한 가상 IP 주소가 필요합니다. Azure Load Balancer는 다른 모든 경우에 대한 가상 IP 주소를 처리해야 합니다. 한 가지 설계 원칙은 클러스터 구성당 하나의 부하 분산 장치를 사용하는 것입니다. 부하 분산 장치의 표준 버전(표준 Load Balancer SKU)을 사용하는 것이 좋습니다.",
+ "text": "SAP ASCS(애플리케이션 계층 구성 요소) 및 DBMS 계층에 대한 대부분의 장애 조치(failover) 클러스터에는 장애 조치(failover) 클러스터에 대한 가상 IP 주소가 필요합니다. Azure Load Balancer는 다른 모든 경우에 대해 가상 IP 주소를 처리해야 합니다. 한 가지 설계 원칙은 클러스터 구성당 하나의 부하 분산 장치를 사용하는 것입니다. 부하 분산 장치의 표준 버전(표준 Load Balancer SKU)을 사용하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "로드 밸런서에서 유동 IP가 사용하도록 설정되어 있는지 확인합니다.",
+ "text": "로드 밸런서에서 부동 IP가 활성화되어 있는지 확인합니다.",
"training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
"link": "https://learn.microsoft.com/azure/virtual-machines/availability",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "고가용성 인프라를 배포하기 전에 선택한 지역에 따라 Azure 가용성 집합 또는 가용성 영역을 사용하여 배포할지 여부를 결정합니다.",
+ "text": "고가용성 인프라를 배포하기 전에 선택한 지역에 따라 Azure 가용성 집합을 사용하여 배포할지 또는 가용성 영역을 사용하여 배포할지를 결정합니다.",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
"link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
"service": "SAP",
@@ -253,18 +256,18 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "cbe05bbe-209d-4490-ba47-778424d11678",
"link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "동일한 가용성 집합에 서로 다른 역할의 서버를 혼합하지 마십시오. 중앙 서비스 VM, 데이터베이스 VM, 애플리케이션 VM을 자체 가용성 집합으로 유지",
+ "text": "동일한 가용성 집합에서 서로 다른 역할의 서버를 혼합하지 마십시오. 중앙 서비스 VM, 데이터베이스 VM, 애플리케이션 VM을 자체 가용성 집합으로 유지",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
"link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
"service": "SAP",
@@ -275,18 +278,18 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "9674e7c7-7796-4181-8920-09f4429543ba",
"link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
"service": "SAP",
"severity": "높다",
"subcategory": "고가용성",
- "text": "가용성 집합을 만들 때 사용 가능한 최대 장애 도메인 및 업데이트 도메인 수를 사용합니다. 예를 들어 하나의 가용성 집합에 두 개 이상의 VM을 배포하는 경우 Azure의 계획된 유지 관리 외에도 잠재적인 물리적 하드웨어 오류, 네트워크 중단 또는 전원 중단의 영향을 제한하기 위해 최대 장애 도메인 수(3개)와 충분한 업데이트 도메인을 사용합니다. 장애 도메인의 기본 수는 2개이며 나중에 온라인으로 변경할 수 없습니다.",
+ "text": "가용성 집합을 만들 때 사용 가능한 최대 장애 도메인 및 업데이트 도메인 수를 사용합니다. 예를 들어 하나의 가용성 집합에 두 개 이상의 VM을 배포하는 경우 Azure 계획된 유지 관리 외에도 잠재적인 물리적 하드웨어 오류, 네트워크 중단 또는 전원 중단의 영향을 제한할 수 있는 최대 장애 도메인 수(3개)와 충분한 업데이트 도메인을 사용합니다. 장애 도메인의 기본 수는 2개이며 나중에 온라인으로 변경할 수 없습니다.",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
@@ -296,7 +299,7 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
@@ -306,7 +309,7 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
@@ -317,61 +320,62 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "ed46b937-913e-4018-9c62-8393ab037e53",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
"service": "SAP",
"severity": "보통",
"subcategory": "고가용성",
- "text": "Azure는 현재 동일한 Linux Pacemaker 클러스터에서 ASCS와 DB HA의 결합을 지원하지 않습니다. 개별 클러스터로 분리합니다. 그러나 최대 5개의 여러 중앙 서비스 클러스터를 한 쌍의 VM으로 결합할 수 있습니다.",
+ "text": "Azure는 현재 동일한 Linux Pacemaker 클러스터에서 ASCS와 DB HA를 결합하는 것을 지원하지 않습니다. 개별 클러스터로 분리합니다. 그러나 최대 5개의 여러 중앙 서비스 클러스터를 한 쌍의 VM으로 결합할 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
"severity": "보통",
"subcategory": "고가용성",
- "text": "가용성 집합 또는 가용성 영역의 고가용성 쌍에 두 VM을 모두 배포합니다. 이러한 VM은 크기가 동일하고 스토리지 구성이 동일해야 합니다.",
+ "text": "가용성 집합 또는 가용성 영역의 고가용성 쌍에 두 VM을 모두 배포합니다. 이러한 VM은 크기가 동일해야 하며 스토리지 구성이 동일해야 합니다.",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "7f684ebc-95da-425e-b329-e782dbed050f",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
"service": "SAP",
"severity": "보통",
"subcategory": "고가용성",
- "text": "Azure는 RHEL(Red Hat Enterprise Linux)에서 실행되는 동일한 고가용성 클러스터에 SAP HANA, ASCS/SCS 및 ERS 인스턴스의 설치 및 구성을 지원합니다.",
+ "text": "Azure는 RHEL(Red Hat Enterprise Linux)에서 실행되는 동일한 고가용성 클러스터에서 SAP HANA와 ASCS/SCS 및 ERS 인스턴스의 설치 및 구성을 지원합니다.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
"service": "SAP",
"severity": "높다",
"subcategory": "보관",
- "text": "프리미엄 관리형 SSD에서 모든 프로덕션 시스템을 실행하고 Azure NetApp Files 또는 Ultra Disk Storage를 사용합니다. 적어도 OS 디스크는 프리미엄 계층에 있어야 더 나은 성능과 최상의 SLA를 달성할 수 있습니다.",
+ "text": "프리미엄 관리형 SSD에서 모든 프로덕션 시스템을 실행하고 Azure NetApp Files 또는 Ultra Disk Storage를 사용합니다. 적어도 OS 디스크는 더 나은 성능과 최상의 SLA를 달성할 수 있도록 프리미엄 계층에 있어야 합니다.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
"link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
"service": "SAP",
"severity": "높다",
"subcategory": "보관",
- "text": "Azure의 SAP HANA는 SAP에서 인증한 스토리지 유형에서만 실행해야 합니다. 특정 볼륨은 해당되는 경우 특정 디스크 구성에서 실행되어야 합니다. 이러한 구성에는 Write Accelerator 사용 및 Premium Storage 사용이 포함됩니다. 또한 스토리지에서 실행되는 파일 시스템이 시스템에서 실행되는 DBMS와 호환되는지 확인해야 합니다.",
+ "text": null,
"training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": "비즈니스 연속성 및 재해 복구Business Continuity and Disaster Recovery",
"guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
"link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
"service": "SAP",
@@ -382,13 +386,13 @@
"waf": "신뢰도"
},
{
- "category": "비즈니스 연속성 및 재해 복구",
+ "category": null,
"guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
"link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
"service": "SAP",
"severity": "높다",
"subcategory": "보관",
- "text": "일부 지역에서는 다양한 네이티브 Azure Storage 서비스(예: Azure Files, Azure NetApp Files, Azure Shared Disk)를 사용하지 못할 수 있습니다. 따라서 장애 조치(failover) 후 DR 지역에서 유사한 SAP를 설정하려면 해당 스토리지 서비스가 DR 사이트에서 제공되는지 확인합니다.",
+ "text": null,
"waf": "신뢰도"
},
{
@@ -408,27 +412,28 @@
"service": "SAP",
"severity": "낮다",
"subcategory": " ",
- "text": "SAP HANA와 함께 Azure Premium Storage를 사용하는 경우 Azure 표준 SSD 스토리지를 사용하여 비용에 민감한 스토리지 솔루션을 선택할 수 있습니다. 그러나 표준 SSD 또는 표준 HDD Azure Storage를 선택하면 개별 VM의 SLA에 영향을 줍니다. 또한 비프로덕션 환경과 같이 I/O 처리량이 낮고 대기 시간이 짧은 시스템의 경우 더 낮은 시리즈 VM을 사용할 수 있습니다.",
+ "text": "SAP HANA와 함께 Azure Premium Storage를 사용하는 경우 Azure Standard SSD Storage를 사용하여 비용에 민감한 스토리지 솔루션을 선택할 수 있습니다. 그러나 표준 SSD 또는 표준 HDD Azure Storage를 선택하면 개별 VM의 SLA에 영향을 줍니다. 또한 비프로덕션 환경과 같이 I/O 처리량이 낮고 대기 시간이 짧은 시스템의 경우 더 낮은 시리즈 VM을 사용할 수 있습니다.",
"waf": "비용"
},
{
- "category": "비용 최적화",
+ "category": null,
"guid": "9877f353-2591-4e8b-8381-e9043fed1010",
"link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
"service": "SAP",
"severity": "낮다",
"subcategory": " ",
- "text": "저렴한 대체 구성(다목적)으로 비프로덕션 HANA 데이터베이스 서버 VM에 대해 저성능 SKU를 선택할 수 있습니다. 그러나 E 시리즈와 같은 일부 VM 유형은 HANA 인증(SAP HANA 하드웨어 디렉터리)되지 않았거나 1ms 미만의 스토리지 대기 시간을 달성할 수 없습니다.",
+ "text": "저렴한 대체 구성(다목적)으로 비프로덕션 HANA 데이터베이스 서버 VM에 대해 저성능 SKU를 선택할 수 있습니다. 그러나 E 시리즈와 같은 일부 VM 유형은 HANA 인증(SAP HANA 하드웨어 디렉터리)되지 않았거나 1ms 미만의 스토리지 대기 시간을 달성할 수 없다는 점에 유의해야 합니다.",
"waf": "비용"
},
{
"category": "ID 및 액세스",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
- "severity": "높다",
+ "severity": null,
"subcategory": "신원",
- "text": "관리 그룹, 구독, 리소스 그룹 및 리소스에 대한 RBAC 모델 적용Enforce a RBAC model for management groups, subscriptions, resource groups and resources",
+ "text": null,
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
@@ -439,7 +444,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "클라우드 커넥터를 통해 SAP 클라우드 애플리케이션에서 SAP 온-프레미스(IaaS 포함)로 ID를 전달하기 위한 보안 주체 전파 적용",
+ "text": "클라우드 커넥터를 통해 SAP 클라우드 애플리케이션에서 SAP 온-프레미스(IaaS 포함)로 ID를 전달하기 위한 주체 전파 적용",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
"waf": "안전"
},
@@ -450,19 +455,19 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAML을 사용하여 Azure AD로 SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics 및 SAP C4C와 같은 SAP SaaS 애플리케이션에 대한 SSO를 구현합니다.",
- "waf": "안전"
+ "text": "SAML을 사용하여 Azure AD를 사용하여 SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics 및 SAP C4C와 같은 SAP SaaS 애플리케이션에 SSO를 구현합니다.",
+ "waf": null
},
{
"category": "ID 및 액세스",
"guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
- "severity": "보통",
- "subcategory": "신원",
+ "severity": null,
+ "subcategory": null,
"text": "SAML을 사용하여 SAP Fiori 및 SAP Web GUI와 같은 SAP NetWeaver 기반 웹 애플리케이션에 대한 SSO를 구현합니다.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "안전"
+ "waf": null
},
{
"category": "ID 및 액세스",
@@ -470,7 +475,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAML을 사용하여 SAP Fiori 및 SAP Web GUI와 같은 SAP NetWeaver 기반 웹 애플리케이션에 대한 SSO를 구현합니다.",
+ "text": null,
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
"waf": "안전"
},
@@ -481,7 +486,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAP NetWeaver SSO 또는 파트너 솔루션을 사용하여 SAP GUI에 대한 SSO를 구현할 수 있습니다.",
+ "text": "SAP NetWeaver SSO 또는 파트너 솔루션을 사용하여 SAP GUI에 SSO를 구현할 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "안전"
},
@@ -491,7 +496,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAP GUI 및 웹 브라우저 액세스를 위한 SSO의 경우 구성 및 유지 관리가 용이하여 SNC/Kerberos/SPNEGO(간단하고 보호된 GSSAPI 협상 메커니즘)를 구현합니다. X.509 클라이언트 인증서를 사용하는 SSO의 경우 SAP SSO 솔루션의 구성 요소인 SAP 보안 로그인 서버를 고려합니다.",
+ "text": "SAP GUI 및 웹 브라우저 액세스용 SSO의 경우 구성 및 유지 관리가 용이하여 SNC/Kerberos/SPNEGO(간단하고 보호된 GSSAPI 협상 메커니즘)를 구현합니다. X.509 클라이언트 인증서를 사용하는 SSO의 경우 SAP SSO 솔루션의 구성 요소인 SAP Secure Login Server를 고려합니다.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "안전"
},
@@ -502,7 +507,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAP GUI 및 웹 브라우저 액세스를 위한 SSO의 경우 구성 및 유지 관리가 용이하여 SNC/Kerberos/SPNEGO(간단하고 보호된 GSSAPI 협상 메커니즘)를 구현합니다. X.509 클라이언트 인증서를 사용하는 SSO의 경우 SAP SSO 솔루션의 구성 요소인 SAP 보안 로그인 서버를 고려합니다.",
+ "text": null,
"waf": "안전"
},
{
@@ -542,7 +547,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAP에 액세스하는 애플리케이션의 경우 보안 주체 전파를 사용하여 SSO를 설정할 수 있습니다.",
+ "text": "SAP에 액세스하는 애플리케이션의 경우 주체 전파를 사용하여 SSO를 설정할 수 있습니다.",
"waf": "안전"
},
{
@@ -552,7 +557,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAP IAS(Identity Authentication Service)가 필요한 SAP BTP 서비스 또는 SaaS 솔루션을 사용하는 경우 SAP Cloud Identity Authentication Services와 Azure AD 간에 SSO를 구현하여 해당 SAP 서비스에 액세스하는 것이 좋습니다. 이 통합을 통해 SAP IAS는 프록시 ID 공급자 역할을 하고 중앙 사용자 저장소 및 ID 공급자인 Azure AD에 인증 요청을 전달할 수 있습니다.",
+ "text": "SAP IAS(Identity Authentication Service)가 필요한 SAP BTP 서비스 또는 SaaS 솔루션을 사용하는 경우 SAP Cloud Identity Authentication Services와 Azure AD 간에 SSO를 구현하여 해당 SAP 서비스에 액세스하는 것이 좋습니다. 이 통합을 통해 SAP IAS는 프록시 ID 공급자 역할을 하고 중앙 사용자 저장소 및 ID 공급자로 Azure AD에 인증 요청을 전달할 수 있습니다.",
"waf": "안전"
},
{
@@ -572,11 +577,13 @@
"service": "SAP",
"severity": "보통",
"subcategory": "신원",
- "text": "SAP SuccessFactors를 사용하는 경우 Azure AD 자동화된 사용자 프로비저닝을 사용하는 것이 좋습니다. 이 통합을 통해 SAP SuccessFactors에 새 직원을 추가할 때 Azure AD에서 해당 사용자 계정을 자동으로 만들 수 있습니다. 필요에 따라 Microsoft 365 또는 Azure AD 지원하는 기타 SaaS 애플리케이션에서 사용자 계정을 만들 수 있습니다. SAP SuccessFactors에 이메일 주소의 쓰기 저장을 사용합니다.",
+ "text": "SAP SuccessFactors를 사용하는 경우 Azure AD 자동화된 사용자 프로비저닝을 사용하는 것이 좋습니다. 이 통합을 통해 SAP SuccessFactors에 신입 사원을 추가할 때 Azure AD에서 해당 사용자 계정을 자동으로 생성할 수 있습니다. 필요에 따라 Microsoft 365 또는 Azure AD에서 지원하는 기타 SaaS 애플리케이션에서 사용자 계정을 만들 수 있습니다. SAP SuccessFactors에 이메일 주소의 쓰기 저장을 사용합니다.",
"waf": "안전"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
+ "description": "관리 그룹 계층 구조를 4개 이하로 합리적으로 평평하게 유지합니다.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
@@ -587,7 +594,8 @@
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
@@ -598,7 +606,8 @@
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
@@ -609,18 +618,19 @@
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
"severity": "높다",
"subcategory": "구독",
- "text": "구독 프로비저닝의 일부로 할당량 증가 확인(예: 구독 내에서 사용 가능한 총 VM 코어)",
+ "text": "구독 프로비저닝의 일부로 할당량 증가를 보장(예: 구독 내에서 사용 가능한 총 VM 코어 수)",
"training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
"guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
"link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
"service": "SAP",
@@ -630,34 +640,35 @@
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
"guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
"link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
"service": "SAP",
"severity": "높다",
"subcategory": "구독",
- "text": "가용성 영역에 배포하는 경우 할당량이 승인되면 VM의 영역 배포를 사용할 수 있는지 확인합니다. 필요한 구독, VM 시리즈, CPU 수 및 가용성 영역을 사용하여 지원 요청을 제출합니다.",
+ "text": "가용성 영역에 배포하는 경우 할당량이 승인되면 VM의 영역 배포를 사용할 수 있는지 확인합니다. 필요한 구독, VM 시리즈, CPU 수 및 가용성 영역을 포함한 지원 요청을 제출합니다.",
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
"guid": "e6e20617-3686-4af4-9791-f8935ada4332",
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
"service": "SAP",
"severity": "높다",
"subcategory": "구독",
- "text": "예를 들어 선택한 배포 지역 내에서 필요한 서비스 및 기능을 사용할 수 있는지 확인합니다. ANF, 지역 등.",
+ "text": "필요한 서비스 및 기능이 선택한 배포 지역 내에서 사용할 수 있는지 확인합니다(예: ). ANF, 지역 등.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "작업"
},
{
- "category": "관리 그룹 및 구독",
+ "category": "관리 그룹 및 구독Management Group and Subscriptions",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
"severity": "보통",
"subcategory": "구독",
- "text": "비용 분류 및 리소스 그룹화를 위해 Azure 리소스 태그 활용(BillTo, 부서(또는 사업부), 환경(프로덕션, 스테이지, 개발), 계층(웹 계층, 애플리케이션 계층), 애플리케이션 소유자, 프로젝트 이름)",
+ "text": "비용 분류 및 리소스 그룹화를 위해 Azure 리소스 태그 활용(BillTo, 부서(또는 사업부), 환경(프로덕션, 스테이지, 개발), 계층(웹 계층, 응용 프로그램 계층), 응용 프로그램 소유자, 프로젝트 이름)",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "작업"
},
@@ -667,7 +678,7 @@
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
"severity": "높다",
- "subcategory": "BCDR (영문)",
+ "subcategory": "BCDR",
"text": "Azure Backup 서비스를 사용하여 HANA 데이터베이스를 보호할 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "신뢰도"
@@ -678,8 +689,8 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
"service": "SAP",
"severity": "보통",
- "subcategory": "BCDR (영문)",
- "text": "HANA, Oracle 또는 DB2 데이터베이스용 Azure NetApp Files를 배포하는 경우 Azure 애플리케이션 일치 스냅샷 도구(AzAcSnap)를 사용하여 애플리케이션 일치 스냅샷을 만듭니다. AzAcSnap은 Oracle 데이터베이스도 지원합니다. 개별 VM이 아닌 중앙 VM에서 AzAcSnap을 사용하는 것이 좋습니다.",
+ "subcategory": "BCDR",
+ "text": "HANA, Oracle 또는 DB2 데이터베이스에 Azure NetApp Files를 배포하는 경우 Azure 애플리케이션 일치 스냅샷 도구(AzAcSnap)를 사용하여 애플리케이션 일치 스냅샷을 만듭니다. AzAcSnap은 Oracle 데이터베이스도 지원합니다. 개별 VM이 아닌 중앙 VM에서 AzAcSnap을 사용하는 것이 좋습니다.",
"waf": "신뢰도"
},
{
@@ -710,7 +721,7 @@
"service": "SAP",
"severity": "낮다",
"subcategory": "경영",
- "text": "Azure 실행 비용을 절감하고 최적화하기 위해 다시 알림 모델에서 개발/테스트 시스템을 실행하는 것이 좋습니다.",
+ "text": "Azure 실행 비용을 절약하고 최적화하기 위해 스누즈 모델에서 개발/테스트 시스템을 실행하는 것이 좋습니다.",
"waf": "비용"
},
{
@@ -720,7 +731,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "경영",
- "text": "SAP 자산을 관리하여 고객과 파트너 관계를 맺는 경우 Azure Lighthouse를 사용하는 것이 좋습니다. Azure Lighthouse를 사용하면 관리 서비스 공급자가 Azure 네이티브 ID 서비스를 사용하여 고객 환경에 인증할 수 있습니다. 고객은 언제든지 액세스 권한을 취소하고 서비스 제공업체의 조치를 감사할 수 있으므로 고객의 손에 제어 권한을 부여합니다.",
+ "text": "SAP 자산을 관리하여 고객과 파트너 관계를 맺는 경우 Azure Lighthouse를 사용하는 것이 좋습니다. Azure Lighthouse를 사용하면 관리 서비스 공급자가 Azure 네이티브 ID 서비스를 사용하여 고객 환경에 인증할 수 있습니다. 고객은 언제든지 액세스 권한을 취소하고 서비스 제공업체의 조치를 감사할 수 있으므로 제어권을 고객에게 부여합니다.",
"waf": "작업"
},
{
@@ -730,7 +741,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "경영",
- "text": "Azure Update Manager를 사용하여 단일 VM 또는 여러 VM에 대해 사용 가능한 업데이트의 상태를 확인하고 정기적인 패치를 예약하는 것이 좋습니다.",
+ "text": "Azure 업데이트 관리자를 사용하여 단일 VM 또는 여러 VM에 대해 사용 가능한 업데이트의 상태를 확인하고 정기적인 패치를 예약하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
"waf": "작업"
},
@@ -774,7 +785,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "모니터링",
- "text": "액세스 제어 및 규정 준수 보고에 Azure Policy를 사용합니다. Azure Policy는 일관된 정책 준수와 빠른 위반 감지를 보장하기 위해 조직 전체 설정을 적용하는 기능을 제공합니다. ",
+ "text": "액세스 제어 및 규정 준수 보고에 Azure Policy를 사용합니다. Azure Policy는 일관된 정책 준수와 빠른 위반 감지를 보장하기 위해 조직 전체 설정을 적용할 수 있는 기능을 제공합니다. ",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "작업"
},
@@ -817,7 +828,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "모니터링",
- "text": "복원력 보고서를 실행하여 프로비저닝된 전체 Azure 인프라(컴퓨팅, 데이터베이스, 네트워킹, 스토리지, Site Recovery)의 구성이 Azure용 클라우드 적응 프레임워크에서 정의한 구성을 준수하는지 확인합니다.",
+ "text": "복원력 보고서를 실행하여 프로비저닝된 전체 Azure 인프라(컴퓨팅, 데이터베이스, 네트워킹, 스토리지, Site Recovery)의 구성이 Azure용 Cloud Adaption Framework에서 정의한 구성을 준수하는지 확인합니다.",
"training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "신뢰도"
},
@@ -828,12 +839,13 @@
"service": "SAP",
"severity": "보통",
"subcategory": "모니터링",
- "text": "SAP용 Microsoft Sentinel 솔루션을 사용하여 위협 방지를 구현합니다. 이 솔루션을 사용하여 SAP 시스템을 모니터링하고 비즈니스 로직 및 애플리케이션 계층 전체에서 정교한 위협을 탐지할 수 있습니다.",
+ "text": "SAP용 Microsoft Sentinel 솔루션을 사용하여 위협 방지를 구현합니다. 이 솔루션을 사용하여 SAP 시스템을 모니터링하고 비즈니스 로직 및 애플리케이션 계층 전반에서 정교한 위협을 탐지할 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "안전"
},
{
"category": "관리 및 모니터링",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
@@ -871,7 +883,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "공연",
- "text": "모든 데이터베이스 파일 시스템 및 실행 프로그램을 바이러스 백신 검사에서 제외합니다. 이를 포함하면 성능 문제가 발생할 수 있습니다. 제외 목록에 대한 규범적 세부 정보는 데이터베이스 공급업체에 문의하십시오. 예를 들어 Oracle은 바이러스 백신 검사에서 /oracle//sapdata를 제외할 것을 권장합니다.",
+ "text": "모든 데이터베이스 파일 시스템 및 실행 프로그램을 바이러스 백신 검사에서 제외합니다. 이를 포함하면 성능 문제가 발생할 수 있습니다. 제외 목록에 대한 규범적 세부 정보는 데이터베이스 공급업체에 문의하십시오. 예를 들어 Oracle은 바이러스 백신 검사에서 /oracle//sapdata를 제외하는 것이 좋습니다.",
"waf": "공연"
},
{
@@ -891,7 +903,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "공연",
- "text": "Azure에서 SAP를 사용하는 모든 Oracle 배포에 Oracle ASM(Automatic Storage Management)을 사용하는 것이 좋습니다.",
+ "text": "Azure에서 SAP를 사용하는 모든 Oracle 배포에 Oracle ASM(자동 스토리지 관리)을 사용하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
"waf": "공연"
},
@@ -902,7 +914,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "공연",
- "text": "Oracle을 실행하는 Azure의 SAP의 경우 SQL 스크립트 컬렉션은 성능 문제를 진단하는 데 도움이 될 수 있습니다. AWR(Automatic Workload Repository) 보고서에는 Oracle 시스템의 문제점을 진단하는 데 유용한 정보가 포함되어 있습니다. 여러 세션 동안 AWR 보고서를 실행하고 피크 시간을 선택하여 광범위한 분석 범위를 보장하는 것이 좋습니다.",
+ "text": "Oracle을 실행하는 Azure의 SAP의 경우 SQL 스크립트 컬렉션을 통해 성능 문제를 진단할 수 있습니다. AWR(Automatic Workload Repository) 보고서에는 Oracle 시스템의 문제를 진단하는 데 유용한 정보가 포함되어 있습니다. 여러 세션 동안 AWR 보고서를 실행하고 최대 피크 시간을 선택하여 분석에 대한 광범위한 적용 범위를 보장하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
"waf": "공연"
},
@@ -918,29 +930,29 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "SAP",
"severity": "보통",
- "subcategory": "앱 제공",
+ "subcategory": "앱 배송",
"text": "HTTP/S 앱을 안전하게 배달하려면 Application Gateway v2를 사용하고 WAF 보호 및 정책이 사용하도록 설정되어 있는지 확인합니다.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "보통",
"subcategory": "DNS (영문)",
- "text": "Azure로 마이그레이션하는 동안 가상 머신의 DNS 또는 가상 이름이 변경되지 않은 경우 백그라운드 DNS 및 가상 이름은 SAP 환경의 많은 시스템 인터페이스를 연결하며, 고객은 시간이 지남에 따라 개발자가 정의하는 인터페이스를 인식하는 경우에만 인식할 수 있습니다. 마이그레이션 후 가상 또는 DNS 이름이 변경될 때 다양한 시스템 간에 연결 문제가 발생하며, 이러한 유형의 문제를 방지하기 위해 DNS 별칭을 유지하는 것이 좋습니다.",
+ "text": "Azure로 마이그레이션하는 동안 가상 머신의 DNS 또는 가상 이름이 변경되지 않은 경우 백그라운드 DNS 및 가상 이름은 SAP 환경의 많은 시스템 인터페이스를 연결하며, 고객은 시간이 지남에 따라 개발자가 정의하는 인터페이스를 가끔씩만 인식할 수 있습니다. 마이그레이션 후 가상 또는 DNS 이름이 변경될 때 다양한 시스템 간에 연결 문제가 발생하며, 이러한 유형의 문제를 방지하기 위해 DNS 별칭을 유지하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
@@ -951,7 +963,9 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "description": "VNet 피어링을 구성할 때 원격 가상 네트워크에 대한 트래픽 허용 설정을 사용합니다.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
@@ -962,7 +976,7 @@
"waf": "신뢰도"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
"service": "SAP",
@@ -973,18 +987,19 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
"severity": "보통",
"subcategory": "잡종",
- "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 신규, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
+ "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 새로운, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
"training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
"service": "SAP",
@@ -995,7 +1010,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
"link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"service": "SAP",
@@ -1006,18 +1021,20 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "높다",
"subcategory": "IP 플랜",
- "text": "SAP 워크로드를 실행하는 VM에 대한 공용 IP 할당은 권장되지 않습니다.",
+ "text": "SAP Workload를 실행하는 VM에 공용 IP를 할당하는 것은 권장되지 않습니다.",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
@@ -1028,7 +1045,7 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
@@ -1039,51 +1056,52 @@
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "6e154e3a-a359-4282-ae6e-206173686af4",
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
"severity": "보통",
"subcategory": "IP 플랜",
- "text": "Azure는 VNet에서 여러 위임된 서브넷을 만드는 데 도움이 되지만 Azure NetApp Files용 VNet에는 위임된 서브넷이 하나만 존재할 수 있습니다. Azure NetApp Files에 대해 둘 이상의 위임된 서브넷을 사용하는 경우 새 볼륨을 만들려는 시도가 실패합니다.",
+ "text": "Azure는 VNet에서 여러 위임된 서브넷을 만드는 데 도움이 되지만 Azure NetApp Files용 VNet에는 하나의 위임된 서브넷만 존재할 수 있습니다. Azure NetApp Files에 대해 둘 이상의 위임된 서브넷을 사용하는 경우 새 볼륨을 만들려는 시도가 실패합니다.",
"training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "작업"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
"severity": "보통",
"subcategory": "인터넷",
- "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다",
+ "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다.",
"training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
"link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
"service": "SAP",
"severity": "보통",
"subcategory": "인터넷",
- "text": "Application Gateway, SAP Web Dispatcher 및 기타 타사 서비스 간의 비교에서 볼 수 있듯이 Application Gateway가 SAP 웹앱에 대한 역방향 프록시 역할을 하는 경우 Application Gateway 및 Web Application Firewall에 제한 사항이 있습니다.",
+ "text": "Application Gateway, SAP Web Dispatcher 및 기타 타사 서비스 간의 비교에서 볼 수 있듯이 Application Gateway 및 Web Application Firewall SAP 웹앱에 대한 역방향 프록시 역할을 하는 경우 Application Gateway 및 Web Application Firewall에 대한 제한 사항이 있습니다.",
"training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "보통",
"subcategory": "인터넷",
- "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역에서 전역 보호를 제공합니다.",
+ "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역 전체에서 글로벌 보호를 제공합니다.",
"training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "SAP",
@@ -1094,29 +1112,29 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "5ada4332-4e13-4811-9231-81aa41742694",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "보통",
"subcategory": "인터넷",
- "text": "웹 애플리케이션 방화벽을 사용하여 트래픽이 인터넷에 노출될 때 트래픽을 검사합니다. 또 다른 옵션은 부하 분산 장치 또는 Application Gateway 또는 타사 솔루션과 같은 기본 제공 방화벽 기능이 있는 리소스와 함께 사용하는 것입니다.",
+ "text": "웹 응용 프로그램 방화벽을 사용하여 인터넷에 노출될 때 트래픽을 검사합니다. 또 다른 옵션은 부하 분산 장치 또는 Application Gateway 또는 타사 솔루션과 같은 기본 제공 방화벽 기능이 있는 리소스와 함께 사용하는 것입니다.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "SAP",
"severity": "보통",
"subcategory": "인터넷",
- "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 신규, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
+ "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 새로운, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "SAP",
@@ -1127,7 +1145,8 @@
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
@@ -1138,29 +1157,30 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
"service": "SAP",
"severity": "보통",
"subcategory": "세분화",
- "text": "Azure Load Balancer에 대한 내부 배포가 DSR(Direct Server Return)을 사용하도록 설정되어 있는지 확인합니다. 이 설정(유동 IP 사용)은 DBMS 계층의 고가용성 구성에 내부 부하 분산 장치 구성을 사용할 때 대기 시간을 줄입니다.",
+ "text": "Azure Load Balancer에 대한 내부 배포가 DSR(Direct Server Return)을 사용하도록 설정되어 있는지 확인합니다. 이 설정(유동 IP 사용)은 DBMS 계층의 고가용성 구성에 내부 로드 밸런서 구성을 사용할 때 대기 시간을 줄입니다.",
"training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
"severity": "보통",
"subcategory": "세분화",
- "text": "ASG(애플리케이션 보안 그룹) 및 NSG 규칙을 사용하여 SAP 애플리케이션과 DBMS 계층 간에 네트워크 보안 액세스 제어 목록을 정의할 수 있습니다. ASG는 보안을 관리하는 데 도움이 되도록 가상 머신을 그룹화합니다.",
+ "text": "ASG(애플리케이션 보안 그룹) 및 NSG 규칙을 사용하여 SAP 애플리케이션과 DBMS 계층 간의 네트워크 보안 액세스 제어 목록을 정의할 수 있습니다. ASG는 가상 머신을 그룹화하여 보안을 관리하는 데 도움을 줍니다.",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "안전"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
@@ -1171,7 +1191,7 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "fa96c96a-d885-418f-9827-34c886ba2802",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
@@ -1182,7 +1202,7 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
@@ -1193,18 +1213,18 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "높다",
"subcategory": "세분화",
- "text": "계층 간의 과도한 네트워크 트래픽으로 인해 발생할 수 있는 상당한 비용 때문에 다른 VNet에서 SAP 시스템의 DBMS(데이터베이스 관리 시스템) 및 애플리케이션 계층을 호스트하고 VNet 피어링과 연결하는 것은 권장되지 않습니다. Azure 가상 네트워크 내에서 서브넷을 사용하여 SAP 애플리케이션 계층과 DBMS 계층을 분리하는 것이 좋습니다.",
+ "text": "계층 간의 과도한 네트워크 트래픽으로 인해 발생할 수 있는 상당한 비용 때문에 DBMS(데이터베이스 관리 시스템) 및 SAP 시스템의 애플리케이션 계층을 서로 다른 VNet에 호스트하고 VNet 피어링과 연결하는 것은 권장되지 않습니다. Azure 가상 네트워크 내의 서브넷을 사용하여 SAP 애플리케이션 계층과 DBMS 계층을 분리하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "비용"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "402a9846-d515-4061-aff8-cd30088693fa",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
"service": "SAP",
@@ -1215,7 +1235,7 @@
"waf": "공연"
},
{
- "category": "네트워크 토폴로지 및 연결",
+ "category": "네트워크 토폴로지 및 연결성",
"guid": "87585797-5551-4d53-bb7d-a94ee415734d",
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
"service": "SAP",
@@ -1290,7 +1310,7 @@
"service": "SAP",
"severity": "높다",
"subcategory": " ",
- "text": "프리미엄 디스크(V1)를 사용할 때 M 시리즈에 쓰기 가속기 사용Enabling Write accelerator for M series when using premium disks(V1)",
+ "text": "프리미엄 디스크(V1)를 사용하는 경우 M 시리즈에 쓰기 가속기 사용",
"waf": "작업"
},
{
@@ -1310,7 +1330,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": " ",
- "text": "모든 SAP 구성 요소에 대해 SAP EarlyWatch Alert를 활성화합니다.",
+ "text": "모든 SAP 구성요소에 대해 SAP EarlyWatch Alert를 활성화합니다.",
"training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
"waf": "공연"
},
@@ -1352,7 +1372,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": " ",
- "text": "SAP HANA Studio 경고를 검토합니다.",
+ "text": "SAP HANA Studio 알림을 검토합니다.",
"waf": "공연"
},
{
@@ -1362,7 +1382,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": " ",
- "text": "HANA_Configuration_Minichecks를 사용하여 SAP HANA 상태 검사를 수행합니다.",
+ "text": "HANA_Configuration_Minichecks를 사용하여 SAP HANA 상태 점검을 수행합니다.",
"waf": "공연"
},
{
@@ -1394,7 +1414,7 @@
"service": "SAP",
"severity": "낮다",
"subcategory": "지배구조",
- "text": "SQL Server SAP의 경우 SQL Server SAP 시스템에서 계정을 사용하지 않으므로 SQL Server 시스템 관리자 계정을 사용하지 않도록 설정할 수 있습니다. 원래 시스템 관리자 계정을 비활성화하기 전에 시스템 관리자 권한이 있는 다른 사용자가 서버에 액세스할 수 있는지 확인합니다.",
+ "text": "SQL Server SAP의 경우 SQL Server 시스템 관리자 계정을 사용하지 않으므로 SQL Server 시스템 관리자 계정을 사용하지 않도록 설정할 수 있습니다. 원래 시스템 관리자 계정을 비활성화하기 전에 시스템 관리자 권한이 있는 다른 사용자가 서버에 액세스할 수 있는지 확인합니다.",
"waf": "안전"
},
{
@@ -1404,7 +1424,7 @@
"service": "SAP",
"severity": "높다",
"subcategory": "지배구조",
- "text": "xp_cmdshell 비활성화합니다. SQL Server 기능 xp_cmdshell SQL Server 내부 운영 체제 명령 셸을 사용할 수 있습니다. 이는 보안 감사에서 발생할 수 있는 잠재적 위험입니다.",
+ "text": "xp_cmdshell 비활성화합니다. SQL Server 기능 xp_cmdshell SQL Server 내부 운영 체제 명령 셸을 사용하도록 설정합니다. 이는 보안 감사에서 잠재적인 위험입니다.",
"training": "https://me.sap.com/notes/3019299/E",
"waf": "안전"
},
@@ -1415,7 +1435,7 @@
"service": "SAP",
"severity": "높다",
"subcategory": "비밀",
- "text": "Azure에서 SAP HANA 데이터베이스 서버를 암호화하는 데는 SAP HANA 네이티브 암호화 기술이 사용됩니다. 또한 Azure에서 SQL Server를 사용하는 경우 TDE(투명한 데이터 암호화)를 사용하여 데이터 및 로그 파일을 보호하고 백업도 암호화되도록 합니다.",
+ "text": "Azure에서 SAP HANA 데이터베이스 서버를 암호화하려면 SAP HANA 네이티브 암호화 기술을 사용합니다. 또한 Azure에서 SQL Server를 사용하는 경우 TDE(투명한 데이터 암호화)를 사용하여 데이터 및 로그 파일을 보호하고 백업도 암호화되도록 합니다.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "안전"
},
@@ -1426,12 +1446,13 @@
"service": "SAP",
"severity": "보통",
"subcategory": "비밀",
- "text": "Azure Storage 암호화는 모든 Azure Resource Manager 및 클래식 스토리지 계정에 대해 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다. 데이터는 기본적으로 암호화되므로 Azure Storage 암호화를 사용하기 위해 코드 또는 애플리케이션을 수정할 필요가 없습니다.",
+ "text": "Azure Storage 암호화는 모든 Azure Resource Manager 및 클래식 스토리지 계정에 대해 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다. 데이터는 기본적으로 암호화되므로 Azure Storage 암호화를 사용하기 위해 코드나 애플리케이션을 수정할 필요가 없습니다.",
"training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "안전"
},
{
"category": "보안, 거버넌스 및 규정 준수",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
@@ -1448,7 +1469,7 @@
"service": "SAP",
"severity": "보통",
"subcategory": "비밀",
- "text": "무단 변경으로부터 보호하기 위해 성공적인 배포 후 Azure 리소스를 잠그는 것이 좋습니다. 사용자 지정된 Azure 정책(Custome 역할)을 사용하여 구독별로 LOCK 제약 조건 및 규칙을 적용할 수도 있습니다.",
+ "text": "무단 변경으로부터 보호하기 위해 성공적인 배포 후 Azure 리소스를 잠그는 것이 좋습니다. 또한 사용자 지정된 Azure 정책(Custome 역할)을 사용하여 구독별로 LOCK 제약 조건 및 규칙을 적용할 수 있습니다.",
"training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "안전"
},
@@ -1520,12 +1541,13 @@
},
{
"category": "보안, 거버넌스 및 규정 준수",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
"severity": "높다",
"subcategory": "비밀",
- "text": "애플리케이션, 환경, 지역당 Azure Key Vault를 사용합니다.",
+ "text": "애플리케이션당 환경, 지역별 Azure Key Vault를 사용합니다.",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "안전"
},
@@ -1547,7 +1569,7 @@
"service": "SAP",
"severity": "높다",
"subcategory": "안전",
- "text": "실수로 인한 네트워크 관련 변경을 방지하기 위해 Azure의 SAP 스포크 구독에 대한 RBAC(역할 기반 액세스 제어) 역할 사용자 지정",
+ "text": "Azure 스포크 구독의 SAP에 대한 RBAC(역할 기반 액세스 제어) 역할을 사용자 지정하여 실수로 인한 네트워크 관련 변경을 방지합니다.",
"training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "안전"
},
@@ -1558,7 +1580,7 @@
"service": "SAP",
"severity": "높다",
"subcategory": "안전",
- "text": "나머지 SAP 자산에서 DMZ 및 NVA를 격리하고, Azure Private Link를 구성하고, Azure의 SAP 리소스를 안전하게 관리 및 제어합니다",
+ "text": "SAP 자산의 나머지 부분에서 DMZ 및 NVA를 격리하고, Azure Private Link를 구성하고, Azure의 SAP 리소스를 안전하게 관리 및 제어합니다.",
"training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "안전"
},
@@ -1591,7 +1613,7 @@
"service": "SAP",
"severity": "높다",
"subcategory": "안전",
- "text": "가상 네트워크 피어링을 통해 스포크 네트워크에 연결된 허브 가상 네트워크를 통해 모든 트래픽을 전달하여 SAP 애플리케이션 및 데이터베이스 서버를 인터넷 또는 온-프레미스 네트워크에서 격리합니다. 피어링된 가상 네트워크는 Azure의 SAP 솔루션이 공용 인터넷에서 격리되도록 보장합니다.",
+ "text": "가상 네트워크 피어링을 통해 스포크 네트워크에 연결된 허브 가상 네트워크를 통해 모든 트래픽을 전달하여 인터넷 또는 온-프레미스 네트워크에서 SAP 애플리케이션 및 데이터베이스 서버를 격리합니다. 피어링된 가상 네트워크는 Azure의 SAP 솔루션이 공용 인터넷에서 격리되도록 보장합니다.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "안전"
},
@@ -1620,8 +1642,8 @@
],
"metadata": {
"name": "SAP Checklist",
- "state": "Preview",
- "timestamp": "May 14, 2024",
+ "state": "GA",
+ "timestamp": "October 02, 2024",
"waf": "all"
},
"severities": [
@@ -1649,7 +1671,7 @@
"name": "성취"
},
{
- "description": "권장 사항은 이해되었지만 현재 요구 사항에 필요하지 않음",
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
"name": "필요 없음"
},
{
diff --git a/checklists/sap_checklist.pt.json b/checklists/sap_checklist.pt.json
index 348587c15..138ba54ef 100644
--- a/checklists/sap_checklist.pt.json
+++ b/checklists/sap_checklist.pt.json
@@ -1,13 +1,13 @@
{
"categories": [
{
- "name": "Identidade e Acesso"
+ "name": "Identidade e acesso"
},
{
- "name": "Topologia de rede e conectividade"
+ "name": "Topologia e conectividade de rede"
},
{
- "name": "Segurança, Governança e Compliance"
+ "name": "Segurança, Governança e Conformidade"
},
{
"name": "Gestão e Monitoramento"
@@ -24,7 +24,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "ACSS",
- "text": "O Azure Center for SAP solutions (ACSS) é uma oferta do Azure que torna o SAP uma carga de trabalho de nível superior no Azure. O ACSS é uma solução de ponta a ponta que permite criar e executar sistemas SAP como uma carga de trabalho unificada no Azure e fornece uma base mais perfeita para a inovação. Você pode aproveitar os recursos de gerenciamento para sistemas SAP novos e existentes baseados no Azure.",
+ "text": "O ACSS (Centro de Soluções SAP) do Azure é uma oferta do Azure que torna o SAP uma carga de trabalho de nível superior no Azure. O ACSS é uma solução de ponta a ponta que permite criar e executar sistemas SAP como uma carga de trabalho unificada no Azure e fornece uma base mais perfeita para a inovação. Você pode aproveitar os recursos de gerenciamento para sistemas SAP novos e existentes baseados no Azure.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
"waf": "Operações"
},
@@ -35,7 +35,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "SDAF",
- "text": "O Azure dá suporte à automação de implantações SAP no Linux e no Windows. O SAP Deployment Automation Framework é uma ferramenta de orquestração de código aberto que pode implantar, instalar e manter ambientes SAP.",
+ "text": "O Azure dá suporte à automação de implantações do SAP no Linux e no Windows. O SAP Deployment Automation Framework é uma ferramenta de orquestração de software livre que pode implementar, instalar e manter ambientes SAP.",
"training": "https://github.com/Azure/sap-automation",
"waf": "Operações"
},
@@ -46,7 +46,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Backup e restauração",
- "text": "Executar uma recuperação point-in-time para seus bancos de dados de produção em qualquer ponto e em um período de tempo que atenda ao seu RTO; A recuperação point-in-time normalmente inclui erros do operador excluindo dados na camada DBMS ou por meio do SAP, incidentalmente",
+ "text": "Execute uma recuperação pontual para seus bancos de dados de produção a qualquer momento e em um período de tempo que atenda ao seu RTO; a recuperação point-in-time normalmente inclui erros do operador que excluem dados na camada DBMS ou por meio do SAP, incidentalmente",
"waf": "Fiabilidade"
},
{
@@ -65,7 +65,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperação de desastres",
- "text": "Você pode replicar o armazenamento padrão entre regiões emparelhadas, mas não pode usar o armazenamento padrão para armazenar seus bancos de dados ou discos rígidos virtuais. Você pode replicar backups somente entre regiões emparelhadas que você usa. Para todos os outros dados, execute sua replicação usando recursos nativos de DBMS, como SQL Server Always On ou SAP HANA System Replication. Use uma combinação de Site Recovery, rsync ou robocopy e outros softwares de terceiros para a camada de aplicativos SAP.",
+ "text": "Você pode replicar o armazenamento padrão entre regiões emparelhadas, mas não pode usar o armazenamento padrão para armazenar seus bancos de dados ou discos rígidos virtuais. Você pode replicar backups somente entre regiões emparelhadas que você usa. Para todos os outros dados, execute a replicação usando recursos nativos do DBMS, como SQL Server Always On ou Replicação do Sistema SAP HANA. Use uma combinação de Site Recovery, rsync ou robocopy e outros softwares de terceiros para a camada de aplicativo SAP.",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "Fiabilidade"
},
@@ -76,18 +76,19 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Recuperação de desastres",
- "text": "Ao usar as Zonas de Disponibilidade do Azure para obter alta disponibilidade, você deve considerar a latência entre servidores de aplicativos SAP e servidores de banco de dados. Para zonas com altas latências, os procedimentos operacionais precisam estar em vigor para garantir que os servidores de aplicativos SAP e os servidores de banco de dados estejam sendo executados na mesma zona o tempo todo.",
+ "text": "Ao usar as Zonas de Disponibilidade do Azure para obter alta disponibilidade, você deve considerar a latência entre os servidores de aplicativos SAP e os servidores de banco de dados. Para zonas com altas latências, os procedimentos operacionais precisam estar em vigor para garantir que os servidores de aplicativos SAP e os servidores de banco de dados estejam em execução na mesma zona o tempo todo.",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidade"
},
{
"category": "Continuidade de negócios e recuperação de desastres",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperação de desastres",
- "text": "Configure conexões de Rota Expressa do local para as regiões primária e secundária de recuperação de desastres do Azure. Além disso, como alternativa ao uso da Rota Expressa, considere configurar conexões VPN locais para as regiões primária e secundária de recuperação de desastres do Azure.",
+ "text": "Configure conexões do ExpressRoute do local para as regiões de recuperação de desastre primárias e secundárias do Azure. Além disso, como alternativa ao uso do ExpressRoute, considere configurar conexões VPN do local para as regiões primárias e secundárias de recuperação de desastre do Azure.",
"training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
"waf": "Fiabilidade"
},
@@ -98,7 +99,7 @@
"service": "SAP",
"severity": "Baixo",
"subcategory": "Recuperação de desastres",
- "text": "Replique o conteúdo do cofre de chaves, como certificados, segredos ou chaves entre regiões, para que você possa descriptografar dados na região de recuperação de desastres.",
+ "text": "Replique o conteúdo do cofre de chaves, como certificados, segredos ou chaves entre regiões, para que você possa descriptografar dados na região de recuperação de desastre.",
"waf": "Fiabilidade"
},
{
@@ -108,7 +109,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Recuperação de desastres",
- "text": "Emparelhar as redes virtuais primária e de recuperação de desastres. Por exemplo, para a replicação do sistema HANA, uma rede virtual SAP HANA DB precisa ser emparelhada para a rede virtual SAP HANA DB do site de recuperação de desastres.",
+ "text": "Emparelhe as redes virtuais primárias e de recuperação de desastre. Por exemplo, para a Replicação do Sistema HANA, uma rede virtual de banco de dados do SAP HANA precisa ser emparelhada com a rede virtual de banco de dados do SAP HANA do site de recuperação de desastres.",
"waf": "Fiabilidade"
},
{
@@ -129,18 +130,19 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperação de desastres",
- "text": "A tecnologia de replicação de banco de dados nativo deve ser usada para sincronizar o banco de dados em um par de HA.",
+ "text": "A tecnologia de replicação de banco de dados nativa deve ser usada para sincronizar o banco de dados em um par de HA.",
"training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidade"
},
{
"category": "Continuidade de negócios e recuperação de desastres",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperação de desastres",
- "text": "O CIDR da rede virtual primária (VNet) não deve entrar em conflito ou se sobrepor ao CIDR da VNet do site de recuperação de desastres",
+ "text": "O CIDR da VNet (rede virtual) primária não deve entrar em conflito ou se sobrepor ao CIDR da VNet do site de recuperação de desastre",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -150,7 +152,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Recuperação de desastres",
- "text": "Use a Recuperação de Site para replicar um servidor de aplicativos para um site de recuperação de desastres. A Recuperação de Site também pode ajudar na replicação de VMs de cluster de serviços centrais para o site de recuperação de desastres. Ao invocar o DR, você precisará reconfigurar o cluster do Linux Pacemaker no site de DR (por exemplo, substitua o VIP ou o SBD, execute o corosync.conf e muito mais).",
+ "text": "Use o Site Recovery para replicar um servidor de aplicativos para um site de recuperação de desastre. O Site Recovery também pode ajudar a replicar VMs de cluster de serviços centrais para o site de recuperação de desastre. Ao invocar a DR, você precisará reconfigurar o cluster do Linux Pacemaker no site de DR (por exemplo, substituir o VIP ou SBD, executar corosync.conf e muito mais).",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "Fiabilidade"
},
@@ -161,7 +163,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Considere a disponibilidade do software SAP em relação a pontos únicos de falha. Isso inclui pontos únicos de falha em aplicativos como SGBDs utilizados nas arquiteturas SAP NetWeaver e SAP S/4HANA, SAP ABAP e ASCS + SCS. Além disso, outras ferramentas, como o SAP Web Dispatcher.",
+ "text": "Considere a disponibilidade do software SAP em relação a pontos únicos de falha. Isso inclui pontos únicos de falha em aplicativos, como SGBDs utilizados nas arquiteturas SAP NetWeaver e SAP S/4HANA, SAP AP e ASCS + SCS. Além disso, outras ferramentas, como o SAP Web Dispatcher.",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
"waf": "Fiabilidade"
},
@@ -172,7 +174,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Para bancos de dados SAP e SAP, considere a implementação de clusters de failover automático. No Windows, o Clustering de Failover do Windows Server oferece suporte a failover. No Linux, Linux Pacemaker ou ferramentas de terceiros como SIOS Protection Suite e Veritas InfoScale suportam failover.",
+ "text": "Para bancos de dados SAP e SAP, considere implementar clusters de failover automáticos. No Windows, o Clustering de Failover do Windows Server dá suporte ao failover. No Linux, o Linux Pacemaker ou ferramentas de terceiros, como o SIOS Protection Suite e o Veritas InfoScale, oferecem suporte ao failover.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -183,7 +185,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "O Azure não oferece suporte a arquiteturas nas quais as VMs primária e secundária compartilham armazenamento para dados DBMS. Para a camada DBMS, o padrão de arquitetura comum é replicar bancos de dados ao mesmo tempo e com pilhas de armazenamento diferentes daquelas que as VMs primária e secundária usam.",
+ "text": "O Azure não dá suporte a arquiteturas nas quais as VMs primárias e secundárias compartilham armazenamento para dados do DBMS. Para a camada DBMS, o padrão de arquitetura comum é replicar bancos de dados ao mesmo tempo e com pilhas de armazenamento diferentes daquelas que as VMs primárias e secundárias usam.",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
"waf": "Fiabilidade"
},
@@ -194,7 +196,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Os dados do DBMS e os arquivos de log de transação/refazer são armazenados no armazenamento em bloco com suporte do Azure ou nos Arquivos do Azure NetApp. Os Arquivos do Azure ou os Arquivos Premium do Azure não têm suporte como armazenamento para dados DBMS e/ou arquivos de log de refazer com a carga de trabalho SAP.",
+ "text": "Os dados do DBMS e os arquivos de log de transação/redo são armazenados no armazenamento em blocos com suporte do Azure ou no Azure NetApp Files. Não há suporte para Arquivos do Azure ou Arquivos Premium do Azure como armazenamento para dados do DBMS e/ou arquivos de log de restauração com carga de trabalho do SAP.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
"waf": "Fiabilidade"
},
@@ -205,18 +207,19 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Você pode usar discos compartilhados do Azure no Windows para componentes ASCS + SCS e cenários específicos de alta disponibilidade. Configure seus clusters de failover separadamente para componentes da camada de aplicativo SAP e a camada DBMS. No momento, o Azure não oferece suporte a arquiteturas de alta disponibilidade que combinam componentes da camada de aplicativo SAP e a camada DBMS em um cluster de failover.",
+ "text": "Você pode usar discos compartilhados do Azure no Windows para componentes ASCS + SCS e cenários específicos de alta disponibilidade. Configure seus clusters de failover separadamente para os componentes da camada de aplicativo SAP e a camada DBMS. Atualmente, o Azure não dá suporte a arquiteturas de alta disponibilidade que combinam componentes da camada de aplicativo SAP e a camada DBMS em um cluster de failover.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidade"
},
{
"category": "Continuidade de negócios e recuperação de desastres",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "A maioria dos clusters de failover para ASCS (Application Layer Components, componentes da camada de aplicativo) SAP e a camada DBMS exigem um endereço IP virtual para um cluster de failover. O Balanceador de Carga do Azure deve manipular o endereço IP virtual para todos os outros casos. Um princípio de design é usar um balanceador de carga por configuração de cluster. Recomendamos que você use a versão padrão do balanceador de carga (SKU do Standard Load Balancer).",
+ "text": "A maioria dos clusters de failover para componentes da camada de aplicativo SAP (ASCS) e a camada DBMS exigem um endereço IP virtual para um cluster de failover. O Azure Load Balancer deve lidar com o endereço IP virtual para todos os outros casos. Um princípio de design é usar um balanceador de carga por configuração de cluster. Recomendamos que você use a versão padrão do balanceador de carga (SKU do Balanceador de Carga Padrão).",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -227,7 +230,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Verifique se o IP flutuante está habilitado no balanceador de carga",
+ "text": "Certifique-se de que o IP flutuante esteja habilitado no balanceador de carga",
"training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -238,7 +241,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Antes de implantar sua infraestrutura de alta disponibilidade, e dependendo da região escolhida, determine se deseja implantar com um conjunto de disponibilidade do Azure ou uma zona de disponibilidade.",
+ "text": "Antes de implantar sua infraestrutura de alta disponibilidade e dependendo da região escolhida, determine se deseja implantar com um conjunto de disponibilidade do Azure ou uma zona de disponibilidade.",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -249,7 +252,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Se desejar atender aos SLAs de infraestrutura de seus aplicativos para componentes SAP (serviços centrais, servidores de aplicativos e bancos de dados), você deverá escolher as mesmas opções de alta disponibilidade (VMs, conjuntos de disponibilidade, zonas de disponibilidade) para todos os componentes.",
+ "text": "Se você quiser atender aos SLAs de infraestrutura para seus aplicativos para componentes SAP (serviços centrais, servidores de aplicativos e bancos de dados), deverá escolher as mesmas opções de alta disponibilidade (VMs, conjuntos de disponibilidade, zonas de disponibilidade) para todos os componentes.",
"waf": "Fiabilidade"
},
{
@@ -259,7 +262,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Não misture servidores de funções diferentes no mesmo conjunto de disponibilidade. Mantenha VMs de serviços centrais, VMs de banco de dados, VMs de aplicativos em seus próprios conjuntos de disponibilidade",
+ "text": "Não misture servidores de funções diferentes no mesmo conjunto de disponibilidade. Mantenha VMs de serviços centrais, VMs de banco de dados e VMs de aplicativos em seus próprios conjuntos de disponibilidade",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -270,7 +273,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Alta disponibilidade",
- "text": "Você não pode implantar conjuntos de disponibilidade do Azure em uma zona de disponibilidade do Azure, a menos que use grupos de posicionamento de proximidade.",
+ "text": "Você não pode implantar conjuntos de disponibilidade do Azure em uma zona de disponibilidade do Azure, a menos que use grupos de posicionamento por proximidade.",
"training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"waf": "Fiabilidade"
},
@@ -281,7 +284,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Ao criar conjuntos de disponibilidade, use o número máximo de domínios de falha e atualize domínios disponíveis. Por exemplo, se você implantar mais de duas VMs em um conjunto de disponibilidade, use o número máximo de domínios de falha (três) e domínios de atualização suficientes para limitar o efeito de possíveis falhas de hardware físico, interrupções de rede ou interrupções de energia, além da manutenção planejada do Azure. O número padrão de domínios de falha é dois e você não pode alterá-lo online mais tarde.",
+ "text": "Ao criar conjuntos de disponibilidade, use o número máximo de domínios de falha e atualize os domínios disponíveis. Por exemplo, se você implantar mais de duas VMs em um conjunto de disponibilidade, use o número máximo de domínios de falha (três) e domínios de atualização suficientes para limitar o efeito de possíveis falhas de hardware físico, interrupções de rede ou interrupções de energia, além da manutenção planejada do Azure. O número padrão de domínios de falha é dois e você não pode alterá-lo online posteriormente.",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -292,7 +295,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Quando você usa grupos de posicionamento de proximidade do Azure em uma implantação de conjunto de disponibilidade, todos os três componentes SAP (serviços centrais, servidor de aplicativos e banco de dados) devem estar no mesmo grupo de posicionamento de proximidade.",
+ "text": "Quando você usa grupos de posicionamento por proximidade do Azure em uma implantação de conjunto de disponibilidade, todos os três componentes SAP (serviços centrais, servidor de aplicativos e banco de dados) devem estar no mesmo grupo de posicionamento por proximidade.",
"waf": "Fiabilidade"
},
{
@@ -302,7 +305,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Use um grupo de posicionamento de proximidade por SAP SID. Os grupos não se estendem por zonas de disponibilidade ou regiões do Azure",
+ "text": "Use um grupo de posicionamento por proximidade por SID SAP. Os grupos não se estendem por Zonas de Disponibilidade ou regiões do Azure",
"waf": "Fiabilidade"
},
{
@@ -312,7 +315,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Alta disponibilidade",
- "text": "Use um dos seguintes serviços para executar clusters de serviços centrais SAP, dependendo do sistema operacional.",
+ "text": "Use um dos serviços a seguir para executar clusters de serviços centrais do SAP, dependendo do sistema operacional.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -323,12 +326,13 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Alta disponibilidade",
- "text": "No momento, o Azure não oferece suporte à combinação de ASCS e HA de banco de dados no mesmo cluster do Linux Pacemaker; Separe-os em agrupamentos individuais. No entanto, você pode combinar até cinco clusters de serviços centrais em um par de VMs.",
+ "text": "Atualmente, o Azure não dá suporte à combinação de ASCS e DB HA no mesmo cluster do Linux Pacemaker; separe-os em clusters individuais. No entanto, você pode combinar até cinco vários clusters de serviços centrais em um par de VMs.",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidade"
},
{
"category": "Continuidade de negócios e recuperação de desastres",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
@@ -344,7 +348,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Alta disponibilidade",
- "text": "O Azure oferece suporte à instalação e configuração de instâncias SAP HANA e ASCS/SCS e ERS no mesmo cluster de alta disponibilidade em execução no Red Hat Enterprise Linux (RHEL).",
+ "text": "O Azure dá suporte à instalação e configuração de instâncias do SAP HANA e ASCS/SCS e ERS no mesmo cluster de alta disponibilidade em execução no RHEL (Red Hat Enterprise Linux).",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -355,7 +359,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Armazenamento",
- "text": "Execute todos os sistemas de produção em SSDs gerenciados Premium e use o Azure NetApp Files ou o Ultra Disk Storage. Pelo menos o disco do sistema operacional deve estar na camada Premium para que você possa obter melhor desempenho e o melhor SLA.",
+ "text": "Execute todos os sistemas de produção em SSDs gerenciados Premium e use o Azure NetApp Files ou o Armazenamento em Disco Ultra. Pelo menos o disco do sistema operacional deve estar na camada Premium para que você possa obter melhor desempenho e o melhor SLA.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -366,7 +370,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Armazenamento",
- "text": "Você deve executar o SAP HANA no Azure somente nos tipos de armazenamento certificados pela SAP. Observe que determinados volumes devem ser executados em determinadas configurações de disco, quando aplicável. Essas configurações incluem a habilitação do Acelerador de Gravação e o uso do armazenamento Premium. Você também precisa garantir que o sistema de arquivos executado no armazenamento seja compatível com o DBMS executado na máquina.",
+ "text": "Você deve executar o SAP HANA no Azure somente nos tipos de armazenamento certificados pelo SAP. Observe que determinados volumes devem ser executados em determinadas configurações de disco, quando aplicável. Essas configurações incluem habilitar o Acelerador de Gravação e usar o armazenamento Premium. Você também precisa garantir que o sistema de arquivos executado no armazenamento seja compatível com o DBMS executado na máquina.",
"training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "Fiabilidade"
},
@@ -377,7 +381,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Armazenamento",
- "text": "Considere configurar a alta disponibilidade dependendo do tipo de armazenamento usado para suas cargas de trabalho SAP. Alguns serviços de armazenamento disponíveis no Azure não têm suporte no Azure Site Recovery, portanto, sua configuração de alta disponibilidade pode ser diferente.",
+ "text": "Considere configurar a alta disponibilidade dependendo do tipo de armazenamento que você usa para suas cargas de trabalho SAP. Alguns serviços de armazenamento disponíveis no Azure não têm suporte no Azure Site Recovery, portanto, sua configuração de alta disponibilidade pode ser diferente.",
"training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
"waf": "Fiabilidade"
},
@@ -388,41 +392,42 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Armazenamento",
- "text": "Diferentes serviços de armazenamento nativos do Azure (como Arquivos do Azure, Arquivos do Azure NetApp, Disco Compartilhado do Azure) podem não estar disponíveis em todas as regiões. Portanto, para ter uma configuração SAP semelhante na região de DR após o failover, certifique-se de que o respectivo serviço de armazenamento seja oferecido no local de DR.",
+ "text": "Diferentes serviços de armazenamento nativos do Azure (como Arquivos do Azure, Azure NetApp Files, Disco Compartilhado do Azure) podem não estar disponíveis em todas as regiões. Portanto, para ter uma configuração SAP semelhante na região de recuperação de desastre após o failover, verifique se o respectivo serviço de armazenamento é oferecido no site de recuperação de desastre.",
"waf": "Fiabilidade"
},
{
- "category": "Otimização de Custos",
+ "category": "Otimização de custos",
"guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
"link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Automatize o Start-Stop do sistema SAP para gerenciar custos.",
+ "text": "Automatize o sistema SAP Start-Stop para gerenciar custos.",
"waf": "Custar"
},
{
- "category": "Otimização de Custos",
+ "category": "Otimização de custos",
"guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
"link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
"service": "SAP",
"severity": "Baixo",
"subcategory": " ",
- "text": "No caso de usar o Armazenamento Premium do Azure com o SAP HANA, o armazenamento SSD padrão do Azure pode ser usado para selecionar uma solução de armazenamento econômica. No entanto, observe que escolher o armazenamento padrão SSD ou HDD padrão do Azure afetará o SLA das VMs individuais. Além disso, para sistemas com menor taxa de transferência de E/S e baixa latência, como ambientes que não são de produção, VMs de série mais baixa podem ser usadas.",
+ "text": "No caso de usar o Armazenamento Premium do Azure com o SAP HANA, o armazenamento SSD Standard do Azure pode ser usado para selecionar uma solução de armazenamento econômica. No entanto, observe que escolher o armazenamento SSD Standard ou HDD Standard do Azure afetará o SLA das VMs individuais. Além disso, para sistemas com menor taxa de transferência de E/S e baixa latência, como ambientes de não produção, as VMs de série inferior podem ser usadas.",
"waf": "Custar"
},
{
- "category": "Otimização de Custos",
+ "category": "Otimização de custos",
"guid": "9877f353-2591-4e8b-8381-e9043fed1010",
"link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
"service": "SAP",
"severity": "Baixo",
"subcategory": " ",
- "text": "Como uma configuração alternativa de baixo custo (multiuso), você pode escolher uma SKU de baixo desempenho para suas VMs de servidor de banco de dados HANA que não são de produção. No entanto, é importante observar que alguns tipos de VM, como a série E, não são certificados pelo HANA (SAP HANA Hardware Directory) ou não podem atingir latência de armazenamento inferior a 1ms.",
+ "text": "Como uma configuração alternativa de baixo custo (multiuso), você pode escolher um SKU de baixo desempenho para suas VMs de servidor de banco de dados HANA que não são de produção. No entanto, é importante observar que alguns tipos de VM, como a série E, não são certificados pelo HANA (Diretório de Hardware do SAP HANA) ou não podem atingir uma latência de armazenamento inferior a 1 ms.",
"waf": "Custar"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
@@ -433,49 +438,49 @@
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "45911475-e39e-4530-accc-d979366bcda2",
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Impor a propagação principal para encaminhar a identidade do aplicativo de nuvem SAP para o SAP local (incluindo IaaS) por meio do conector de nuvem",
+ "text": "Impor a propagação da entidade de segurança para encaminhar a identidade do aplicativo de nuvem SAP para o SAP local (incluindo IaaS) por meio do conector de nuvem",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Implemente SSO em aplicativos SAP SaaS como SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics e SAP C4C com o Azure AD usando SAML.",
+ "text": "Implemente SSO para aplicativos SAP SaaS como SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics e SAP C4C com Azure AD usando SAML.",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Implemente SSO em aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
+ "text": "Implemente o SSO para aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Implemente SSO em aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
+ "text": "Implemente o SSO para aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
@@ -486,37 +491,37 @@
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido a sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
+ "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos/SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido à sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
"link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido a sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
+ "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos/SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido à sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "16785d6f-a96c-496a-b885-18f482734c88",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Implemente o SSO usando o OAuth for SAP NetWeaver para permitir que aplicativos de terceiros ou personalizados acessem os serviços OData do SAP NetWeaver.",
+ "text": "Implemente o SSO usando o OAuth para SAP NetWeaver para permitir que aplicativos personalizados ou de terceiros acessem os serviços OData do SAP NetWeaver.",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "a747c350-8d4c-449c-93af-393dbca77c48",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
"service": "SAP",
@@ -526,7 +531,7 @@
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
"service": "SAP",
@@ -536,58 +541,61 @@
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
"link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Para aplicativos que acessam o SAP, convém usar a propagação principal para estabelecer o SSO.",
+ "text": "Para aplicativos que acessam o SAP, talvez você queira usar a propagação principal para estabelecer o SSO.",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Se você estiver usando serviços SAP BTP ou soluções SaaS que exigem o SAP Identity Authentication Service (IAS), considere implementar SSO entre o SAP Cloud Identity Authentication Services e o Azure AD para acessar esses serviços SAP. Essa integração permite que o SAP IAS atue como um provedor de identidade de proxy e encaminhe solicitações de autenticação para o Azure AD como o repositório central do usuário e o provedor de identidade.",
+ "text": "Se você estiver usando serviços SAP BTP ou soluções SaaS que exigem o SAP Identity Authentication Service (IAS), considere implementar o SSO entre o SAP Cloud Identity Authentication Services e o Azure AD para acessar esses serviços SAP. Essa integração permite que o SAP IAS atue como um provedor de identidade proxy e encaminhe solicitações de autenticação para o Azure AD como o repositório central de usuários e o provedor de identidade.",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Implementar SSO no SAP BTP",
+ "text": "Implementar SSO para SAP BTP",
"waf": "Segurança"
},
{
- "category": "Identidade e Acesso",
+ "category": "Identidade e acesso",
"guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
"service": "SAP",
"severity": "Média",
"subcategory": "Identidade",
- "text": "Se você estiver usando o SAP SuccessFactors, considere usar o provisionamento automatizado de usuários do Azure AD. Com essa integração, à medida que você adiciona novos funcionários ao SAP SuccessFactors, pode criar automaticamente suas contas de usuário no Azure AD. Opcionalmente, você pode criar contas de usuário no Microsoft 365 ou em outros aplicativos SaaS com suporte no Azure AD. Use write-back do endereço de e-mail para SAP SuccessFactors.",
+ "text": "Se você estiver usando o SAP SuccessFactors, considere usar o provisionamento automatizado de usuários do Azure AD. Com essa integração, à medida que você adiciona novos funcionários ao SAP SuccessFactors, você pode criar automaticamente suas contas de usuário no Azure AD. Opcionalmente, você pode criar contas de usuário no Microsoft 365 ou em outros aplicativos SaaS compatíveis com o Azure AD. Use o write-back do endereço de email para o SAP SuccessFactors.",
"waf": "Segurança"
},
{
"category": "Grupo de Gerenciamento e Assinaturas",
+ "description": "Mantenha a hierarquia do grupo de gerenciamento razoavelmente plana, não mais do que quatro.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
"severity": "Média",
"subcategory": "Assinaturas",
- "text": "impor políticas existentes do Grupo de Gerenciamento às assinaturas SAP",
+ "text": "impor políticas existentes do Grupo de Gerenciamento às Assinaturas SAP",
"training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
"waf": "Operações"
},
{
"category": "Grupo de Gerenciamento e Assinaturas",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
@@ -599,23 +607,25 @@
},
{
"category": "Grupo de Gerenciamento e Assinaturas",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "Alto",
"subcategory": "Assinaturas",
- "text": "Aproveite a assinatura como unidade de escala e dimensione nossos recursos, considere implantar a assinatura por ambiente, por exemplo. Sandbox, não-prod, prod ",
+ "text": "Aproveite a assinatura como unidade de escala e dimensione nossos recursos, considere implantar a assinatura por ambiente, por exemplo. Caixa de areia, não-prod, prod ",
"training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
"waf": "Operações"
},
{
"category": "Grupo de Gerenciamento e Assinaturas",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
"severity": "Alto",
"subcategory": "Assinaturas",
- "text": "Garantir o aumento da cota como parte do provisionamento de assinatura (por exemplo, total de núcleos de VM disponíveis em uma assinatura)",
+ "text": "Garantir o aumento da cota como parte do provisionamento da assinatura (por exemplo, total de núcleos de VM disponíveis em uma assinatura)",
"training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"waf": "Operações"
},
@@ -636,7 +646,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Assinaturas",
- "text": "Se estiver implantando em uma zona de disponibilidade, verifique se a implantação da zona da VM estará disponível depois que a cota for aprovada. Envie uma solicitação de suporte com a assinatura, a série VM, o número de CPUs e a zona de disponibilidade necessárias.",
+ "text": "Se estiver implantando em uma zona de disponibilidade, verifique se a implantação da zona da VM está disponível depois que a cota for aprovada. Envie uma solicitação de suporte com a assinatura, a série de VMs, o número de CPUs e a zona de disponibilidade necessárias.",
"waf": "Operações"
},
{
@@ -652,6 +662,7 @@
},
{
"category": "Grupo de Gerenciamento e Assinaturas",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
@@ -679,7 +690,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "BCDR",
- "text": "Se você implantar os Arquivos NetApp do Azure para seu banco de dados HANA, Oracle ou DB2, use a ferramenta Azure Application Consistent Snapshot (AzAcSnap) para tirar instantâneos consistentes com o aplicativo. O AzAcSnap também suporta bancos de dados Oracle. Considere usar o AzAcSnap em uma VM central em vez de em VMs individuais.",
+ "text": "Se você implantar o Azure NetApp Files para seu banco de dados HANA, Oracle ou DB2, use a ferramenta AzAcSnap (Instantâneo Consistente com o Aplicativo do Azure) para tirar instantâneos consistentes com o aplicativo. O AzAcSnap também oferece suporte a bancos de dados Oracle. Considere usar o AzAcSnap em uma VM central em vez de em VMs individuais.",
"waf": "Fiabilidade"
},
{
@@ -689,7 +700,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Gestão",
- "text": "Garanta as correspondências de fuso horário entre o sistema operacional e o sistema SAP.",
+ "text": "Garanta correspondências de fuso horário entre o sistema operacional e o sistema SAP.",
"waf": "Operações"
},
{
@@ -699,7 +710,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Gestão",
- "text": "Não agrupe serviços de aplicativos diferentes no mesmo cluster. Por exemplo, não combine clusters DRBD e de serviços centrais no mesmo cluster. No entanto, você pode usar o mesmo cluster do Pacemaker para gerenciar aproximadamente cinco serviços centrais diferentes (cluster multi-SID).",
+ "text": "Não agrupe diferentes serviços de aplicativo no mesmo cluster. Por exemplo, não combine clusters DRBD e de serviços centrais no mesmo cluster. No entanto, você pode usar o mesmo cluster do Pacemaker para gerenciar aproximadamente cinco serviços centrais diferentes (cluster de vários SID).",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -710,7 +721,7 @@
"service": "SAP",
"severity": "Baixo",
"subcategory": "Gestão",
- "text": "Considere executar sistemas de desenvolvimento/teste em um modelo de soneca para economizar e otimizar os custos de execução do Azure.",
+ "text": "Considere executar sistemas de desenvolvimento/teste em um modelo de adiamento para economizar e otimizar os custos de execução do Azure.",
"waf": "Custar"
},
{
@@ -720,7 +731,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Gestão",
- "text": "Se você faz parceria com clientes gerenciando suas propriedades SAP, considere o Farol do Azure. O Azure Lighthouse permite que os provedores de serviços gerenciados usem os serviços de identidade nativos do Azure para se autenticar no ambiente dos clientes. Ele coloca o controle nas mãos dos clientes, porque eles podem revogar o acesso a qualquer momento e auditar as ações dos prestadores de serviços.",
+ "text": "Se você fizer parceria com clientes gerenciando suas propriedades SAP, considere o Azure Lighthouse. O Azure Lighthouse permite que os provedores de serviços gerenciados usem serviços de identidade nativos do Azure para se autenticar no ambiente dos clientes. Ele coloca o controle nas mãos dos clientes, pois eles podem revogar o acesso a qualquer momento e auditar as ações dos prestadores de serviços.",
"waf": "Operações"
},
{
@@ -752,7 +763,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Use as soluções do Azure Monitor for SAP para monitorar suas cargas de trabalho SAP (SAP HANA, clusters SUSE de alta disponibilidade e sistemas SQL) no Azure. Considere complementar o Azure Monitor para soluções SAP com o SAP Solution Manager.",
+ "text": "Use o Azure Monitor para soluções SAP para monitorar suas cargas de trabalho SAP (SAP HANA, clusters SUSE de alta disponibilidade e sistemas SQL) no Azure. Considere complementar o Azure Monitor para soluções SAP com o SAP Solution Manager.",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "Operações"
},
@@ -763,7 +774,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Monitorização",
- "text": "Execute uma verificação de extensão de VM para SAP. A Extensão de VM para SAP usa a identidade gerenciada atribuída de uma máquina virtual (VM) para acessar dados de monitoramento e configuração de VM. A verificação garante que todas as métricas de desempenho em seu aplicativo SAP venham da Extensão do Azure para SAP subjacente.",
+ "text": "Execute uma extensão de VM para verificação SAP. A Extensão de VM para SAP usa a identidade gerenciada atribuída de uma VM (máquina virtual) para acessar dados de monitoramento e configuração de VM. A verificação garante que todas as métricas de desempenho em seu aplicativo SAP venham da Extensão do Azure para SAP subjacente.",
"training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
"waf": "Operações"
},
@@ -774,7 +785,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Use a Política do Azure para controle de acesso e relatórios de conformidade. A Política do Azure fornece a capacidade de impor configurações em toda a organização para garantir a adesão consistente à política e a detecção rápida de violações. ",
+ "text": "Use o Azure Policy para controle de acesso e relatórios de conformidade. O Azure Policy fornece a capacidade de impor configurações em toda a organização para garantir a adesão consistente à política e a detecção rápida de violações. ",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "Operações"
},
@@ -785,7 +796,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Use o Monitor de Conexão no Inspetor de Rede do Azure para monitorar métricas de latência para bancos de dados SAP e servidores de aplicativos. Ou colete e exiba medições de latência de rede usando o Azure Monitor.",
+ "text": "Use o Monitor da Conexão no Observador de Rede do Azure para monitorar métricas de latência para bancos de dados SAP e servidores de aplicativos. Ou colete e exiba medidas de latência de rede usando o Azure Monitor.",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
"waf": "Operações"
},
@@ -817,7 +828,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Execute o Relatório de Resiliência para garantir que a configuração de toda a infraestrutura provisionada do Azure (Computação, Banco de Dados, Rede, Armazenamento, Recuperação de Site) esteja em conformidade com a configuração definida pelo Cloud Adaption Framework para Azure.",
+ "text": "Execute o Relatório de Resiliência para garantir que a configuração de toda a infraestrutura provisionada do Azure (Computação, Banco de Dados, Rede, Armazenamento, Site Recovery) esteja em conformidade com a configuração definida pelo Cloud Adaption Framework for Azure.",
"training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "Fiabilidade"
},
@@ -828,18 +839,19 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "Implemente a proteção contra ameaças usando a solução Microsoft Sentinel para SAP. Use esta solução para monitorar seus sistemas SAP e detectar ameaças sofisticadas em toda a lógica de negócios e camadas de aplicativos.",
+ "text": "Implemente a proteção contra ameaças usando a solução do Microsoft Sentinel para SAP. Use essa solução para monitorar seus sistemas SAP e detectar ameaças sofisticadas em toda a lógica de negócios e nas camadas de aplicativos.",
"training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "Segurança"
},
{
"category": "Gestão e Monitoramento",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
"severity": "Média",
"subcategory": "Monitorização",
- "text": "A marcação do Azure pode ser aproveitada para agrupar e controlar recursos logicamente, automatizar suas implantações e, o mais importante, fornecer visibilidade sobre os custos incorridos.",
+ "text": "A marcação do Azure pode ser aproveitada para agrupar e rastrear recursos logicamente, automatizar suas implantações e, o mais importante, fornecer visibilidade sobre os custos incorridos.",
"training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
"waf": "Operações"
},
@@ -860,7 +872,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Desempenho",
- "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastres para servidores de aplicativos SAP.",
+ "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastre para servidores de aplicativos SAP.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "Fiabilidade"
},
@@ -871,7 +883,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Desempenho",
- "text": "Exclua todos os sistemas de arquivos de banco de dados e programas executáveis das verificações antivírus. Incluí-los pode levar a problemas de desempenho. Verifique com os fornecedores do banco de dados para obter detalhes prescritivos na lista de exclusão. Por exemplo, a Oracle recomenda excluir /oracle//sapdata das verificações antivírus.",
+ "text": "Exclua todos os sistemas de arquivos de banco de dados e programas executáveis das verificações antivírus. Incluí-los pode levar a problemas de desempenho. Verifique com os fornecedores de banco de dados os detalhes prescritivos na lista de exclusão. Por exemplo, a Oracle recomenda excluir /oracle//sapdata das verificações antivírus.",
"waf": "Desempenho"
},
{
@@ -881,7 +893,7 @@
"service": "SAP",
"severity": "Baixo",
"subcategory": "Desempenho",
- "text": "Considere a coleta de estatísticas completas de banco de dados para bancos de dados não-HANA após a migração. Por exemplo, implemente a nota SAP 1020260 - Entrega de estatísticas Oracle.",
+ "text": "Considere coletar estatísticas completas do banco de dados para bancos de dados não HANA após a migração. Por exemplo, implemente a nota 1020260 do SAP - Entrega de estatísticas do Oracle.",
"waf": "Desempenho"
},
{
@@ -891,7 +903,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": "Desempenho",
- "text": "Considere o uso do Oracle Automatic Storage Management (ASM) para todas as implantações Oracle que usam SAP no Azure.",
+ "text": "Considere usar o ASM (Gerenciamento Automático de Armazenamento) do Oracle para todas as implantações do Oracle que usam o SAP no Azure.",
"training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
"waf": "Desempenho"
},
@@ -913,56 +925,58 @@
"service": "SAP",
"severity": "Alto",
"subcategory": "Fiabilidade",
- "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastres para servidores de aplicativos SAP.",
+ "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastre para servidores de aplicativos SAP.",
"training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Entrega de aplicativos",
- "text": "Para a entrega segura de aplicativos HTTP/S, use o Application Gateway v2 e verifique se a proteção e as políticas do WAF estão habilitadas.",
+ "text": "Para entrega segura de aplicativos HTTP/S, use o Gateway de Aplicativo v2 e verifique se a proteção e as políticas do WAF estão habilitadas.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "Média",
"subcategory": "DNS",
- "text": "Se o DNS ou o nome virtual da máquina virtual não for alterado durante a migração para o Azure, o DNS em segundo plano e os nomes virtuais conectam muitas interfaces do sistema no cenário SAP, e os clientes só às vezes estão cientes das interfaces que os desenvolvedores definem ao longo do tempo. Surgem desafios de conexão entre vários sistemas quando os nomes virtuais ou DNS mudam após as migrações, e é recomendável manter os aliases DNS para evitar esses tipos de dificuldades.",
+ "text": "Se o DNS ou o nome virtual da máquina virtual não for alterado durante a migração para o Azure, o DNS em segundo plano e os nomes virtuais conectarão muitas interfaces do sistema no cenário SAP, e os clientes só às vezes estarão cientes das interfaces que os desenvolvedores definem ao longo do tempo. Surgem desafios de conexão entre vários sistemas quando os nomes virtuais ou DNS são alterados após as migrações, e é recomendável manter os aliases DNS para evitar esses tipos de dificuldades.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "Média",
"subcategory": "DNS",
- "text": "Use zonas DNS diferentes para distinguir cada ambiente (sandbox, desenvolvimento, pré-produção e produção) um do outro. A exceção é para implantações SAP com sua própria VNet; aqui, zonas DNS privadas podem não ser necessárias.",
+ "text": "Use diferentes zonas DNS para distinguir cada ambiente (sandbox, desenvolvimento, pré-produção e produção) uns dos outros. A exceção é para implantações SAP com sua própria VNet; aqui, as zonas DNS privadas podem não ser necessárias.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "description": "Ao configurar o emparelhamento VNet, use a configuração Permitir tráfego para redes virtuais remotas.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Emparelhamento de rede virtual local e global fornecem conectividade e são as abordagens preferidas para garantir a conectividade entre zonas de aterrissagem para implantações SAP em várias regiões do Azure",
+ "text": "O emparelhamento VNet local e global fornece conectividade e é a abordagem preferencial para garantir a conectividade entre zonas de destino para implantações SAP em várias regiões do Azure",
"training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
"waf": "Fiabilidade"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
"link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
"service": "SAP",
@@ -973,62 +987,65 @@
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais onde você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
+ "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais em que você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
"training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
"service": "SAP",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "Considere a implantação de dispositivos virtuais de rede (NVAs) entre regiões somente se NVAs de parceiros forem usados. NVAs entre regiões ou VNets não são necessários se NVAs nativos estiverem presentes. Ao implantar tecnologias de rede de parceiros e NVAs, siga as orientações do fornecedor para verificar configurações conflitantes com a rede do Azure.",
+ "text": "Considere implantar NVAs (soluções de virtualização de rede) entre regiões somente se NVAs de parceiros forem usadas. NVAs entre regiões ou VNets não serão necessárias se NVAs nativas estiverem presentes. Ao implantar tecnologias de rede de parceiros e NVAs, siga as diretrizes do fornecedor para verificar configurações conflitantes com a rede do Azure.",
"training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
"link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"service": "SAP",
"severity": "Média",
"subcategory": "Híbrido",
- "text": "A WAN virtual gerencia a conectividade entre VNets spoke para topologias baseadas em WAN virtual (não há necessidade de configurar o roteamento definido pelo usuário [UDR] ou NVAs), e a taxa de transferência máxima de rede para o tráfego de VNet-to-VNet no mesmo hub virtual é de 50 gigabits por segundo. Se necessário, as zonas de aterrissagem SAP podem usar o emparelhamento de VNet para se conectar a outras zonas de aterrissagem e superar essa limitação de largura de banda.",
+ "text": "A WAN Virtual gerencia a conectividade entre VNets spoke para topologias baseadas em WAN virtual (não é necessário configurar UDR [roteamento definido pelo usuário] ou NVAs) e a taxa de transferência máxima de rede para tráfego de VNet para VNet no mesmo hub virtual é de 50 gigabits por segundo. Se necessário, as zonas de destino do SAP podem usar o emparelhamento VNet para se conectar a outras zonas de destino e superar essa limitação de largura de banda.",
"training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "Alto",
"subcategory": "Plano IP",
- "text": "A atribuição de IP público à VM que executa o SAP Workload não é recomendada.",
+ "text": "A atribuição de IP público à VM que executa a carga de trabalho SAP não é recomendada.",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
"severity": "Alto",
"subcategory": "Plano IP",
- "text": "Considere reservar o endereço IP no lado do DR ao configurar o ASR",
+ "text": "Considere reservar o endereço IP no lado da recuperação de desastre ao configurar o ASR",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
@@ -1039,18 +1056,19 @@
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "6e154e3a-a359-4282-ae6e-206173686af4",
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
"severity": "Média",
"subcategory": "Plano IP",
- "text": "Embora o Azure ajude você a criar várias sub-redes delegadas em uma rede virtual, apenas uma sub-rede delegada pode existir em uma rede virtual para arquivos do Azure NetApp. As tentativas de criar um novo volume falharão se você usar mais de uma sub-rede delegada para Arquivos do Azure NetApp.",
+ "text": "Embora o Azure ajude você a criar várias sub-redes delegadas em uma VNet, apenas uma sub-rede delegada pode existir em uma VNet para Azure NetApp Files. As tentativas de criar um novo volume falharão se você usar mais de uma sub-rede delegada para o Azure NetApp Files.",
"training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "Operações"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
@@ -1061,150 +1079,152 @@
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
"link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
"service": "SAP",
"severity": "Média",
"subcategory": "Internet",
- "text": "O Application Gateway e o Web Application Firewall têm limitações quando o Application Gateway serve como um proxy reverso para aplicativos Web SAP, conforme mostrado na comparação entre o Application Gateway, o SAP Web Dispatcher e outros serviços de terceiros.",
+ "text": "O Gateway de Aplicativo e o Firewall de Aplicativo Web têm limitações quando o Gateway de Aplicativo serve como um proxy reverso para aplicativos Web SAP, conforme mostrado na comparação entre o Gateway de Aplicativo, o SAP Web Dispatcher e outros serviços de terceiros.",
"training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Internet",
- "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre as regiões do Azure para conexões HTTP/S de entrada para uma zona de aterrissagem.",
+ "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre regiões do Azure para conexões HTTP/S de entrada para uma zona de destino.",
"training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Internet",
- "text": "Aproveite as políticas do Web Application Firewall no Azure Front Door quando estiver usando o Azure Front Door e o Application Gateway para proteger aplicativos HTTP/S. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Azure Front Door.",
+ "text": "Aproveite as políticas de Firewall de Aplicativo Web no Azure Front Door quando estiver usando o Azure Front Door e o Gateway de Aplicativo para proteger aplicativos HTTP/S. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Azure Front Door.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "5ada4332-4e13-4811-9231-81aa41742694",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Internet",
- "text": "Use um firewall de aplicativo Web para verificar seu tráfego quando ele estiver exposto à Internet. Outra opção é usá-lo com seu balanceador de carga ou com recursos que tenham recursos internos de firewall, como o Application Gateway ou soluções de terceiros.",
+ "text": "Use um firewall de aplicativo Web para verificar seu tráfego quando ele for exposto à Internet. Outra opção é usá-lo com o balanceador de carga ou com recursos que tenham recursos de firewall internos, como Gateway de Aplicativo ou soluções de terceiros.",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Internet",
- "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais onde você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
+ "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais em que você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "SAP",
"severity": "Média",
"subcategory": "Internet",
- "text": "Para evitar o vazamento de dados, use o Link Privado do Azure para acessar com segurança recursos de plataforma como serviço, como Armazenamento de Blobs do Azure, Arquivos do Azure, Azure Data Lake Storage Gen2, Azure Data Factory e muito mais. O Ponto de Extremidade Privado do Azure também pode ajudar a proteger o tráfego entre VNets e serviços como o Armazenamento do Azure, o Backup do Azure e muito mais. O tráfego entre sua rede virtual e o serviço habilitado para ponto de extremidade privado viaja pela rede global da Microsoft, o que impede sua exposição à Internet pública.",
+ "text": "Para evitar o vazamento de dados, use o Link Privado do Azure para acessar com segurança os recursos da plataforma como serviço, como Armazenamento de Blobs do Azure, Arquivos do Azure, Azure Data Lake Storage Gen2, Azure Data Factory e muito mais. O Ponto de Extremidade Privado do Azure também pode ajudar a proteger o tráfego entre VNets e serviços como Armazenamento do Azure, Backup do Azure e muito mais. O tráfego entre sua VNet e o serviço habilitado para Ponto de Extremidade Privado viaja pela rede global da Microsoft, o que impede sua exposição à Internet pública.",
"training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentação",
- "text": "Verifique se a rede acelerada do Azure está habilitada nas VMs usadas nas camadas de aplicativo SAP e DBMS.",
+ "text": "Verifique se a rede acelerada do Azure está habilitada nas VMs usadas no aplicativo SAP e nas camadas do DBMS.",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Verifique se as implantações internas do Azure Load Balancer estão configuradas para usar DSR (Direct Server Return). Essa configuração (Habilitando IP flutuante) reduzirá a latência quando as configurações internas do balanceador de carga forem usadas para configurações de alta disponibilidade na camada DBMS.",
+ "text": "Verifique se as implantações internas do Azure Load Balancer estão configuradas para usar o DSR (Retorno Direto do Servidor). Essa configuração (Habilitando IP Flutuante) reduzirá a latência quando as configurações do balanceador de carga interno forem usadas para configurações de alta disponibilidade na camada DBMS.",
"training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Você pode usar as regras ASG (grupo de segurança de aplicativo) e NSG para definir listas de controle de acesso de segurança de rede entre o aplicativo SAP e as camadas DBMS. Os ASGs agrupam máquinas virtuais para ajudar a gerenciar sua segurança.",
+ "text": "Você pode usar o ASG (grupo de segurança do aplicativo) e as regras do NSG para definir listas de controle de acesso de segurança de rede entre o aplicativo SAP e as camadas do DBMS. Os ASGs agrupam máquinas virtuais para ajudar a gerenciar sua segurança.",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentação",
- "text": "Não há suporte para a colocação da camada de aplicativo SAP e do SGBD SAP em diferentes VNets do Azure que não são emparelhadas.",
+ "text": "Não há suporte para a colocação da camada de aplicativo SAP e do DBMS SAP em diferentes VNets do Azure que não estão emparelhadas.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "fa96c96a-d885-418f-9827-34c886ba2802",
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Para obter a latência de rede ideal com aplicativos SAP, considere o uso de grupos de posicionamento de proximidade do Azure.",
+ "text": "Para obter a latência de rede ideal com aplicativos SAP, considere usar grupos de posicionamento por proximidade do Azure.",
"training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentação",
- "text": "NÃO há suporte para executar uma camada do SAP Application Server e uma camada de DBMS dividida entre o local e o Azure. Ambas as camadas precisam residir completamente no local ou no Azure.",
+ "text": "NÃO há suporte para executar uma camada do Servidor de Aplicativos SAP e uma camada do DBMS dividida entre o local e o Azure. Ambas as camadas precisam residir completamente no local ou no Azure.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segmentação",
- "text": "Não é recomendado hospedar o sistema de gerenciamento de banco de dados (DBMS) e as camadas de aplicativos dos sistemas SAP em diferentes VNets e conectá-los ao emparelhamento de VNet devido aos custos substanciais que o tráfego de rede excessivo entre as camadas pode produzir. Recomende o uso de sub-redes na rede virtual do Azure para separar a camada de aplicativo SAP e a camada DBMS.",
+ "text": "Não é recomendável hospedar o DBMS (sistema de gerenciamento de banco de dados) e as camadas de aplicativo de sistemas SAP em VNets diferentes e conectá-los ao emparelhamento VNet devido aos custos substanciais que o tráfego de rede excessivo entre as camadas pode produzir. Recomendamos o uso de sub-redes na rede virtual do Azure para separar a camada de aplicativo SAP e a camada de DBMS.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "Custar"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "402a9846-d515-4061-aff8-cd30088693fa",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
"service": "SAP",
@@ -1215,13 +1235,13 @@
"waf": "Desempenho"
},
{
- "category": "Topologia de rede e conectividade",
+ "category": "Topologia e conectividade de rede",
"guid": "87585797-5551-4d53-bb7d-a94ee415734d",
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
"service": "SAP",
"severity": "Média",
"subcategory": "Segmentação",
- "text": "Para implantações SAP RISE/ECS, o emparelhamento virtual é a maneira preferida de estabelecer conectividade com o ambiente existente do Azure do cliente. Tanto a vnet do SAP quanto a(s) vnet(s) do cliente são protegidas com grupos de segurança de rede (NSG), permitindo a comunicação nas portas SAP e de banco de dados por meio do emparelhamento vnet",
+ "text": "Para implantações do SAP RISE/ECS, o emparelhamento virtual é a maneira preferencial de estabelecer conectividade com o ambiente existente do Azure do cliente. Tanto a rede virtual SAP quanto a(s) rede virtual(is) do cliente são protegidas com NSG (grupos de segurança de rede), permitindo a comunicação nas portas SAP e de banco de dados por meio do emparelhamento de rede virtual",
"waf": "Segurança"
},
{
@@ -1231,7 +1251,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": " ",
- "text": "Revise os backups de banco de dados do SAP HANA para VMs do Azure.",
+ "text": "Examine os backups de banco de dados do SAP HANA para VMs do Azure.",
"waf": "Custar"
},
{
@@ -1241,7 +1261,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Revise o monitoramento interno do Site Recovery, quando usado para SAP.",
+ "text": "Examine o monitoramento interno do Site Recovery, quando usado para SAP.",
"waf": "Custar"
},
{
@@ -1251,7 +1271,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": " ",
- "text": "Revise as diretrizes de monitoramento do cenário do sistema SAP HANA.",
+ "text": "Revise as diretrizes Monitorando o cenário do sistema SAP HANA.",
"waf": "Operações"
},
{
@@ -1261,7 +1281,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Revise o Banco de Dados Oracle nas estratégias de backup de VM do Linux do Azure.",
+ "text": "Examine o Oracle Database nas estratégias de backup de VM Linux do Azure.",
"waf": "Operações"
},
{
@@ -1271,7 +1291,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Analise o uso do Armazenamento de Blobs do Azure com o SQL Server 2016.",
+ "text": "Examine o uso do Armazenamento de Blobs do Azure com o SQL Server 2016.",
"waf": "Operações"
},
{
@@ -1281,7 +1301,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Analise o uso do Backup Automatizado v2 para VMs do Azure.",
+ "text": "Examine o uso do Backup Automatizado v2 para VMs do Azure.",
"waf": "Operações"
},
{
@@ -1290,7 +1310,7 @@
"service": "SAP",
"severity": "Alto",
"subcategory": " ",
- "text": "Ativando o acelerador de gravação para a série M ao usar discos premium (V1)",
+ "text": "Habilitando o acelerador de gravação para a série M ao usar discos premium (V1)",
"waf": "Operações"
},
{
@@ -1300,7 +1320,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Testar a latência da zona de disponibilidade.",
+ "text": "Teste a latência da zona de disponibilidade.",
"waf": "Desempenho"
},
{
@@ -1341,7 +1361,7 @@
"service": "SAP",
"severity": "Média",
"subcategory": " ",
- "text": "Teste a latência de rede entre VMs de camada de aplicativo SAP e VMs DBMS (NIPING).",
+ "text": "Teste a latência de rede entre VMs da camada de aplicativo SAP e VMs do DBMS (NIPING).",
"training": "https://me.sap.com/notes/1100926/E",
"waf": "Desempenho"
},
@@ -1366,138 +1386,139 @@
"waf": "Desempenho"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "Média",
"subcategory": "Governança",
- "text": "Se você executar VMs do Windows e Linux no Azure, no local ou em outros ambientes de nuvem, poderá usar o Centro de gerenciamento de atualizações na Automação do Azure para gerenciar atualizações do sistema operacional, incluindo patches de segurança.",
+ "text": "Se você executar VMs do Windows e do Linux no Azure, localmente ou em outros ambientes de nuvem, poderá usar o Centro de gerenciamento de atualizações na Automação do Azure para gerenciar atualizações do sistema operacional, incluindo patches de segurança.",
"training": "https://learn.microsoft.com/azure/automation/update-management/overview",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "08951710-79a2-492a-adbc-06d7a401545b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "Média",
"subcategory": "Governança",
- "text": "Analise rotineiramente as notas de OSS de segurança do SAP porque o SAP lança patches de segurança altamente críticos, ou hot fixes, que exigem ação imediata para proteger seus sistemas SAP.",
+ "text": "Revise rotineiramente as notas de OSS de segurança do SAP porque o SAP lança patches de segurança altamente críticos, ou hot fixes, que exigem ação imediata para proteger seus sistemas SAP.",
"training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
"severity": "Baixo",
"subcategory": "Governança",
- "text": "Para SAP no SQL Server, você pode desabilitar a conta de administrador do sistema do SQL Server porque os sistemas SAP no SQL Server não usam a conta. Certifique-se de que outro usuário com direitos de administrador do sistema possa acessar o servidor antes de desabilitar a conta de administrador do sistema original.",
+ "text": "Para SAP no SQL Server, você pode desabilitar a conta de administrador do sistema do SQL Server porque os sistemas SAP no SQL Server não usam a conta. Certifique-se de que outro usuário com direitos de administrador do sistema possa acessar o servidor antes de desabilitar a conta original de administrador do sistema.",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
"severity": "Alto",
"subcategory": "Governança",
- "text": "Desative xp_cmdshell. O recurso do SQL Server xp_cmdshell habilita um shell de comando do sistema operacional interno do SQL Server. É um risco potencial em auditorias de segurança.",
+ "text": "Desative xp_cmdshell. O recurso SQL Server xp_cmdshell habilita um shell de comando do sistema operacional interno do SQL Server. É um risco potencial em auditorias de segurança.",
"training": "https://me.sap.com/notes/3019299/E",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "A criptografia de servidores de banco de dados SAP HANA no Azure usa a tecnologia de criptografia nativa do SAP HANA. Além disso, se você estiver usando o SQL Server no Azure, use a TDE (Criptografia de Dados Transparente) para proteger seus dados e arquivos de log e garantir que seus backups também sejam criptografados.",
+ "text": "A criptografia de servidores de banco de dados SAP HANA no Azure usa a tecnologia de criptografia nativa do SAP HANA. Além disso, se você estiver usando o SQL Server no Azure, use a TDE (Transparent Data Encryption) para proteger seus dados e arquivos de log e garantir que seus backups também sejam criptografados.",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
"link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
"service": "SAP",
"severity": "Média",
"subcategory": "Segredos",
- "text": "A criptografia de Armazenamento do Azure está habilitada para todas as contas clássicas e do Gerenciador de Recursos do Azure e não pode ser desabilitada. Como seus dados são criptografados por padrão, você não precisa modificar seu código ou aplicativos para usar a criptografia do Armazenamento do Azure.",
+ "text": "A criptografia do Armazenamento do Azure está habilitada para todas as contas de armazenamento clássicas e do Azure Resource Manager e não pode ser desabilitada. Como seus dados são criptografados por padrão, você não precisa modificar seu código ou aplicativos para usar a criptografia do Armazenamento do Azure.",
"training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "Usar o Cofre de Chaves do Azure para armazenar seus segredos e credenciais",
+ "text": "Usar o Azure Key Vault para armazenar seus segredos e credenciais",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "829e2edb-2173-4676-aff6-691b4935ada4",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"service": "SAP",
"severity": "Média",
"subcategory": "Segredos",
- "text": "É recomendável BLOQUEAR os Recursos do Azure após a implantação bem-sucedida para proteger contra alterações não autorizadas. Você também pode impor restrições e regras LOCK em sua base por assinatura usando políticas personalizadas do Azure (função Personalizada).",
+ "text": "É recomendável BLOQUEAR os Recursos do Azure após a implantação bem-sucedida para proteger contra alterações não autorizadas. Você também pode impor restrições e regras de LOCK por assinatura usando políticas personalizadas do Azure (função personalizada).",
"training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
"link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
"service": "SAP",
"severity": "Média",
"subcategory": "Segredos",
- "text": "Provisione o Cofre de Chaves do Azure com as políticas de exclusão e limpeza suaves habilitadas para permitir a proteção de retenção para objetos excluídos.",
+ "text": "Provisione o Azure Key Vault com as políticas de exclusão reversível e limpeza habilitadas para permitir a proteção de retenção para objetos excluídos.",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
"link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "Com base nos requisitos existentes, controles normativos e de conformidade (internos/externos) - Determine quais Políticas do Azure e a função RBAC do Azure são necessárias",
+ "text": "Com base nos requisitos existentes, controles regulatórios e de conformidade (internos/externos) – determine quais políticas do Azure e a função RBAC do Azure são necessárias",
"training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "Ao habilitar o Microsoft Defender for Endpoint no ambiente SAP, recomende excluir arquivos de dados e de log em servidores DBMS em vez de direcionar todos os servidores. Siga as recomendações do fornecedor do DBMS ao excluir arquivos de destino.",
+ "text": "Ao habilitar o Microsoft Defender para Ponto de Extremidade no ambiente SAP, recomendamos excluir dados e arquivos de log em servidores DBMS em vez de direcionar todos os servidores. Siga as recomendações do fornecedor do DBMS ao excluir arquivos de destino.",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "Delegue uma função personalizada de administrador SAP com acesso just-in-time do Microsoft Defender for Cloud.",
+ "text": "Delegue uma função personalizada de administrador do SAP com acesso just-in-time do Microsoft Defender para Nuvem.",
"training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
@@ -1508,62 +1529,63 @@
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
"link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
"service": "SAP",
"severity": "Média",
"subcategory": "Segredos",
- "text": "O padrão é chaves gerenciadas pela Microsoft para a funcionalidade de criptografia principal e use chaves gerenciadas pelo cliente quando necessário.",
+ "text": "Padrão para chaves gerenciadas pela Microsoft para funcionalidade de criptografia principal e use chaves gerenciadas pelo cliente quando necessário.",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "Use um Cofre de Chaves do Azure por aplicativo, por ambiente, por região.",
+ "text": "Use um Azure Key Vault por aplicativo por ambiente por região.",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
"link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segredos",
- "text": "Para controlar e gerenciar chaves de criptografia de disco e segredos para sistemas operacionais Windows e não Windows HANA, use o Cofre de Chaves do Azure. O SAP HANA não tem suporte com o Cofre de Chaves do Azure, portanto, você deve usar métodos alternativos, como chaves SAP ABAP ou SSH.",
+ "text": "Para controlar e gerenciar chaves e segredos de criptografia de disco para sistemas operacionais Windows e Windows não HANA, use o Azure Key Vault. Não há suporte para o SAP HANA com o Azure Key Vault, portanto, você deve usar métodos alternativos, como chaves SAP ABAP ou SSH.",
"training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "209d490d-a477-4784-84d1-16785d2fa56c",
"link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segurança",
- "text": "Personalizar funções RBAC (controle de acesso baseado em função) para SAP em assinaturas spoke do Azure para evitar alterações acidentais relacionadas à rede",
+ "text": "Personalizar funções RBAC (controle de acesso baseado em função) para assinaturas SAP on Azure spoke para evitar alterações acidentais relacionadas à rede",
"training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
"link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segurança",
- "text": "Isole DMZs e NVAs do restante do estado SAP, configure o Azure Private Link e gerencie e controle com segurança os recursos do SAP no Azure",
+ "text": "Isole DMZs e NVAs do restante da propriedade SAP, configure o Link Privado do Azure e gerencie e controle com segurança os recursos do SAP no Azure",
"training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
"link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"service": "SAP",
@@ -1574,40 +1596,40 @@
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
"link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
"service": "SAP",
"severity": "Baixo",
"subcategory": "Segurança",
- "text": "Para obter uma proteção ainda mais poderosa, considere usar o Microsoft Defender for Endpoint.",
+ "text": "Para obter uma proteção ainda mais poderosa, considere usar Microsoft Defender para Ponto de Extremidade.",
"training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "Alto",
"subcategory": "Segurança",
- "text": "Isole os servidores de aplicativo e banco de dados SAP da Internet ou da rede local passando todo o tráfego pela rede virtual de hub, que está conectada à rede spoke por emparelhamento de rede virtual. As redes virtuais emparelhadas garantem que a solução SAP no Azure seja isolada da Internet pública.",
+ "text": "Isole o aplicativo SAP e os servidores de banco de dados da Internet ou da rede local passando todo o tráfego pela rede virtual do hub, que está conectada à rede spoke por emparelhamento de rede virtual. As redes virtuais emparelhadas garantem que a solução SAP no Azure seja isolada da Internet pública.",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "Baixo",
"subcategory": "Segurança",
- "text": "Para aplicativos voltados para a Internet, como o SAP Fiori, certifique-se de distribuir a carga por requisitos de aplicativo, mantendo os níveis de segurança. Para segurança de Camada 7, você pode usar um WAF (Web Application Firewall) de terceiros disponível no Azure Marketplace.",
+ "text": "Para aplicativos voltados para a Internet, como o SAP Fiori, certifique-se de distribuir a carga por requisitos do aplicativo, mantendo os níveis de segurança. Para segurança de Camada 7, você pode usar um WAF (Firewall de Aplicativo Web) de terceiros disponível no Azure Marketplace.",
"training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
"waf": "Segurança"
},
{
- "category": "Segurança, Governança e Compliance",
+ "category": "Segurança, Governança e Conformidade",
"guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
"link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
"service": "SAP",
@@ -1620,8 +1642,8 @@
],
"metadata": {
"name": "SAP Checklist",
- "state": "Preview",
- "timestamp": "May 14, 2024",
+ "state": "GA",
+ "timestamp": "October 02, 2024",
"waf": "all"
},
"severities": [
@@ -1645,7 +1667,7 @@
"name": "Abrir"
},
{
- "description": "Essa verificação foi verificada e não há outros itens de ação associados a ela",
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
"name": "Cumprido"
},
{
@@ -1653,7 +1675,7 @@
"name": "Não é necessário"
},
{
- "description": "Não aplicável ao projeto atual",
+ "description": "Não aplicável para o projeto atual",
"name": "N/A"
}
],
diff --git a/checklists/sap_checklist.zh-Hant.json b/checklists/sap_checklist.zh-Hant.json
index efd944c04..18ad61421 100644
--- a/checklists/sap_checklist.zh-Hant.json
+++ b/checklists/sap_checklist.zh-Hant.json
@@ -7,7 +7,7 @@
"name": "網路拓撲和連接"
},
{
- "name": "安全性、治理與合規性"
+ "name": "安全性、治理和合規性"
},
{
"name": "管理和監控"
@@ -23,8 +23,8 @@
"link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
"service": "SAP",
"severity": "中等",
- "subcategory": "ACSS公司",
- "text": "Azure SAP 解決方案中心 (ACSS) 是一項 Azure 產品/服務,可使 SAP 成為 Azure 上的頂級工作負載。ACSS 是一種端到端解決方案,使你能夠在 Azure 上創建和運行 SAP 系統作為統一的工作負載,並為創新提供更無縫的基礎。可以利用新的和現有的基於 Azure 的 SAP 系統的管理功能。",
+ "subcategory": "原子芯 ACSS",
+ "text": "Azure SAP 解決方案 中心 (ACSS) 是一種 Azure 產品/服務,它使 SAP 成為 Azure 上的頂級工作負載。ACSS 是一種端到端解決方案,使你能夠在 Azure 上將 SAP 系統作為統一工作負載創建和運行,併為創新提供更無縫的基礎。您可以利用新的和現有的基於 Azure 的 SAP 系統的管理功能。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
"waf": "操作"
},
@@ -34,8 +34,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
"service": "SAP",
"severity": "中等",
- "subcategory": "SDAF型",
- "text": "Azure 支援在Linux和 Windows 中自動執行 SAP 部署。SAP 部署自動化框架是一種開源編排工具,可以部署、安裝和維護 SAP 環境。",
+ "subcategory": "SDAF",
+ "text": "Azure 支援在Linux和 Windows 中自動執行 SAP 部署。SAP Deployment Automation Framework 是一種開源編排工具,可以部署、安裝和維護 SAP 環境。",
"training": "https://github.com/Azure/sap-automation",
"waf": "操作"
},
@@ -45,8 +45,8 @@
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
"service": "SAP",
"severity": "中等",
- "subcategory": "備份和恢復",
- "text": "在符合 RTO 要求的任何時間點和時間範圍內對生產資料庫執行時間點恢復;時間點恢復通常包括操作員在DBMS層上或通過SAP刪除數據時出現的錯誤",
+ "subcategory": "備份和還原",
+ "text": "在滿足 RTO 的任何時間和時間範圍內對生產資料庫執行時間點恢復;時間點恢復通常包括操作員錯誤地刪除 DBMS 層或透過 SAP 刪除數據",
"waf": "可靠性"
},
{
@@ -65,7 +65,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "災難恢復",
- "text": "可以在配對區域之間複製標準存儲,但不能使用標準存儲來存儲資料庫或虛擬硬碟。您只能在使用的配對區域之間複製備份。對於所有其他數據,請使用本機 DBMS 功能(如 SQL Server Always On 或 SAP HANA 系統複製)運行複製。將 Site Recovery、rsync 或 robocopy 以及其他第三方軟體組合用於 SAP 應用程式層。",
+ "text": "您可以在配對區域之間複製標準存儲,但不能使用標準存儲來存儲資料庫或虛擬硬碟。您只能在您使用的配對區域之間複製備份。對於所有其他數據,請使用 SQL Server Always On 或 SAP HANA 系統複製等本機 DBMS 功能運行複製。將 Site Recovery、rsync 或 robocopy 以及其他第三方軟體組合用於 SAP 應用程式層。",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "可靠性"
},
@@ -82,12 +82,13 @@
},
{
"category": "業務連續性和災難恢復",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "SAP",
"severity": "高",
"subcategory": "災難恢復",
- "text": "設置從本地到主要和次要 Azure 災難恢復區域的 ExpressRoute 連接。此外,作為使用 ExpressRoute 的替代方法,請考慮設置從本地到主要和輔助 Azure 災難恢復區域的 VPN 連接。",
+ "text": "設置從本地到主要和輔助 Azure 災難恢復區域的 ExpressRoute 連接。此外,作為使用 ExpressRoute 的替代方法,請考慮設置從本地到主要和輔助 Azure 災難恢復區域的 VPN 連接。",
"training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
"waf": "可靠性"
},
@@ -98,7 +99,7 @@
"service": "SAP",
"severity": "低",
"subcategory": "災難恢復",
- "text": "跨區域複製證書、機密或密鑰等金鑰保管庫內容,以便解密DR區域中的數據。",
+ "text": "跨區域複製金鑰保管庫內容(如證書、機密或金鑰),以便可以在DR區域中解密資料。",
"waf": "可靠性"
},
{
@@ -108,7 +109,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "災難恢復",
- "text": "對等連接主虛擬網路和災難恢復虛擬網路。例如,對於 HANA 系統複製,需要將 SAP HANA DB 虛擬網路對等互連到災難恢復網站的 SAP HANA DB 虛擬網路。",
+ "text": "將主虛擬網路和災難恢復虛擬網路對等互連。例如,對於 HANA 系統複製,SAP HANA DB 虛擬網路需要與災難恢復網站的 SAP HANA DB 虛擬網路對等互連。",
"waf": "可靠性"
},
{
@@ -118,7 +119,7 @@
"service": "SAP",
"severity": "低",
"subcategory": "災難恢復",
- "text": "如果將 Azure NetApp 檔案儲存用於 SAP 部署,則至少要在兩個區域的高級層中創建兩個 Azure NetApp 檔帳戶。",
+ "text": "如果將 Azure NetApp Files 儲存用於 SAP 部署,則至少在兩個區域中的高級層中創建兩個 Azure NetApp Files 帳戶。",
"training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
"waf": "可靠性"
},
@@ -135,6 +136,7 @@
},
{
"category": "業務連續性和災難恢復",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
"service": "SAP",
@@ -150,7 +152,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "災難恢復",
- "text": "使用 Site Recovery 將應用程式伺服器複製到 DR 網站。Site Recovery 還可以説明將中心服務群集 VM 複製到DR網站。調用DR時,需要在DR網站上重新配置Linux Pacemaker群集(例如,替換VIP或SBD、運行 corosync.conf 等)。",
+ "text": "使用 Site Recovery 將應用程式伺服器複製到 DR 網站。Site Recovery 還可以説明將中心服務群集 VM 複製到DR網站。調用DR時,您需要在DR網站上重新配置Linux Pacemaker集群(例如,替換VIP或SBD、運行 corosync.conf 等)。",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "可靠性"
},
@@ -161,7 +163,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "考慮 SAP 軟體針對單點故障的可用性。這包括應用程式中的單點故障,例如 SAP NetWeaver 和 SAP S/4HANA 架構中使用的 DBMS、SAP ABAP 和 ASCS + SCS。此外,還有其他工具,例如 SAP Web Dispatcher。",
+ "text": "考慮 SAP 軟體的可用性,防止單點故障。這包括應用程式中的單點故障,例如 SAP NetWeaver 和 SAP S/4HANA 架構中使用的 DBMS、SAP ABAP 和 ASCS + SCS。此外,還可以使用其他工具,例如 SAP Web Dispatcher。",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
"waf": "可靠性"
},
@@ -172,7 +174,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "對於 SAP 和 SAP 資料庫,請考慮實現自動故障轉移群集。在 Windows 中,Windows Server 故障轉移群集支援故障轉移。在 Linux 中,Linux Pacemaker 或第三方工具(如 SIOS Protection Suite 和 Veritas InfoScale)支援故障轉移。",
+ "text": "對於 SAP 和 SAP 資料庫,請考慮實現自動故障轉移群集。在 Windows 中,Windows Server 故障轉移群集支援故障轉移。在Linux中,Linux Pacemaker或SIOS Protection Suite 和 Veritas InfoScale 等第三方工具支援故障轉移。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
@@ -183,7 +185,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "Azure 不支援主 VM 和輔助 VM 共用 DBMS 數據存儲的體系結構。對於 DBMS 層,常見的體系結構模式是同時複製資料庫,並使用與主虛擬機和輔助虛擬機使用的存儲堆疊不同的存儲堆疊。",
+ "text": "Azure 不支援主 VM 和輔助 VM 共用 DBMS 數據存儲的體系結構。對於 DBMS 層,常見的架構模式是同時複製資料庫,並且使用與主 VM 和輔助 VM 使用的儲存堆疊不同的儲存堆疊。",
"training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
"waf": "可靠性"
},
@@ -194,7 +196,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "DBMS 數據和事務/重做日誌檔存儲在 Azure 支援的塊存儲或 Azure NetApp 檔中。不支援將 Azure 檔案儲存或 Azure 高級檔儲存作為 DBMS 資料和/或使用 SAP 工作負載重做日誌檔的存儲。",
+ "text": "DBMS 數據和事務/重做日誌檔存儲在 Azure 支援的塊存儲或 Azure NetApp 檔中。不支援將 Azure 檔案儲存或 Azure 高級檔儲存作為 SAP 工作負載的 DBMS 資料和/或重做日誌檔的存儲。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
"waf": "可靠性"
},
@@ -205,18 +207,19 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "可以在 Windows 中將 Azure 共用磁碟用於 ASCS + SCS 元件和特定的高可用性方案。為 SAP 應用程式層元件和 DBMS 層單獨設置故障轉移群集。Azure 目前不支援將 SAP 應用程式層元件和 DBMS 層合併到一個故障轉移群集中的高可用性體系結構。",
+ "text": "您可以在 Windows 中使用 Azure 共用磁碟,以實現 ASCS + SCS 元件和特定的高可用性方案。分別為 SAP 應用程式層元件和 DBMS 層設置故障轉移集群。Azure 目前不支援將 SAP 應用程式層元件和 DBMS 層合併到一個故障轉移群集中的高可用性體系結構。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
{
"category": "業務連續性和災難恢復",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "SAP 應用程式層元件 (ASCS) 和 DBMS 層的大多數故障轉移群集都需要故障轉移群集的虛擬 IP 位址。 Azure 負載均衡器應處理所有其他情況的虛擬IP位址。一個設計原則是每個集群配置使用一個負載均衡器。建議使用標準版本的負載均衡器(標準負載均衡器 SKU)。",
+ "text": "SAP 應用程式層元件 (ASCS) 和 DBMS 層的大多數故障轉移群集都需要故障轉移群集的虛擬 IP 位址。 Azure 負載均衡器應處理所有其他情況下的虛擬IP位址。一種設計原則是每個集群配置使用一個負載均衡器。我們建議您使用標準版本的負載均衡器 (Standard Load Balancer SKU)。",
"training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "可靠性"
},
@@ -238,7 +241,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "在部署高可用性基礎結構之前,請根據所選的區域確定是使用 Azure 可用性集還是可用性區域進行部署。",
+ "text": "在部署高可用性基礎結構之前,根據您選擇的區域,確定是使用 Azure 可用性集還是可用性區域進行部署。",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "可靠性"
},
@@ -249,7 +252,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "如果要滿足 SAP 元件(中央服務、應用程式伺服器和資料庫)應用程式的基礎結構 SLA,則必須為所有元件選擇相同的高可用性選項(VM、可用性集、可用性區域)。",
+ "text": "如果要滿足 SAP 元件(中央服務、應用程式伺服器和資料庫)的應用程式的基礎設施 SLA,則必須為所有元件選擇相同的高可用性選項(VM、可用性集、可用區)。",
"waf": "可靠性"
},
{
@@ -259,7 +262,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "不要在同一可用性集中混合使用不同角色的伺服器。將中央服務 VM、資料庫 VM、應用程式 VM 保留在自己的可用性集中",
+ "text": "不要在同一可用性集中混合使用不同角色的伺服器。將中心服務 VM、資料庫 VM、應用程式 VM 保留在其自己的可用性集中",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "可靠性"
},
@@ -270,7 +273,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "高可用性",
- "text": "除非使用鄰近放置組,否則無法在 Azure 可用性區域內部署 Azure 可用性集。",
+ "text": "除非使用鄰近放置組,否則無法在 Azure 可用性區域中部署 Azure 可用性集。",
"training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"waf": "可靠性"
},
@@ -281,7 +284,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "創建可用性集時,請使用最大數量的容錯域和更新可用的域。例如,如果在一個可用性集中部署兩個以上的 VM,請使用最大數量的容錯域(三個)和足夠的更新域來限制潛在的物理硬體故障、網路中斷或電源中斷的影響,以及 Azure 計劃內維護。默認的容錯域數為 2,以後無法連線更改。",
+ "text": "創建可用性集時,請使用可用的容錯域和更新域的最大數量。例如,如果您在一個可用性集中部署兩個以上的 VM,除了 Azure 計劃內維護之外,還請使用最大數量的容錯域 (三個) 和足夠的更新域,以限制潛在物理硬體故障、網路中斷或電源中斷的影響。容錯域的預設數量為 2,以後無法在線更改。",
"training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "可靠性"
},
@@ -312,7 +315,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "高可用性",
- "text": "根據操作系統的不同,使用以下服務之一來運行 SAP 中心服務群集。",
+ "text": "使用以下服務之一運行 SAP Central Services 集群,具體取決於操作系統。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
@@ -323,18 +326,19 @@
"service": "SAP",
"severity": "中等",
"subcategory": "高可用性",
- "text": "Azure 目前不支援將 ASCS 和 DB HA 組合在同一 Linux Pacemaker 群集中;將它們分成單獨的集群。但是,最多可以將五個多個中心服務群集合併到一對 VM 中。",
+ "text": "Azure 目前不支援在同一個 Linux Pacemaker 群集中組合 ASCS 和 DB HA;將它們分成單獨的集群。但是,您最多可以將5個多個中央服務集群組合成一對VM。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
{
"category": "業務連續性和災難恢復",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
"severity": "中等",
"subcategory": "高可用性",
- "text": "在可用性集或可用性區域中的高可用性對中部署兩個 VM。這些 VM 的大小應相同,並具有相同的存儲配置。",
+ "text": "將高可用性對中的兩個 VM 部署在可用性集或可用性區域中。這些 VM 的大小應相同,並且具有相同的存儲配置。",
"waf": "可靠性"
},
{
@@ -344,7 +348,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "高可用性",
- "text": "Azure 支援在 Red Hat Enterprise Linux (RHEL) 上運行的同一高可用性群集上安裝和配置 SAP HANA 和 ASCS/SCS 和 ERS 實例。",
+ "text": "Azure 支援在 Red Hat Enterprise Linux (RHEL) 上運行的同一高可用性群集上安裝和配置 SAP HANA 以及 ASCS/SCS 和 ERS 實例。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
@@ -355,7 +359,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "存儲",
- "text": "在高級託管 SSD 上運行所有生產系統,並使用 Azure NetApp 檔或超級磁碟存儲。至少OS磁碟應位於高級層,以便您可以獲得更好的性能和最佳SLA。",
+ "text": "在高級託管 SSD 上運行所有生產系統,並使用 Azure NetApp Files 或超級磁碟存儲。至少OS磁碟應位於高級層上,以便您可以獲得更好的性能和最佳SLA。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "可靠性"
},
@@ -366,7 +370,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "存儲",
- "text": "應僅在 SAP 認證的存儲類型上運行 Azure 上的 SAP HANA。請注意,某些卷必須在某些磁碟配置(如果適用)上運行。這些配置包括啟用寫入加速器和使用高級存儲。您還需要確保在儲存上運行的檔案系統與在電腦上運行的 DBMS 相容。",
+ "text": "應僅在 SAP 認證的存儲類型上運行 Azure 上的 SAP HANA。請注意,某些卷必須在某些磁碟配置上運行(如果適用)。這些配置包括啟用 Write Accelerator 和使用高級存儲。您還需要確保在儲存上運行的檔案系統與計算機上運行的 DBMS 相容。",
"training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "可靠性"
},
@@ -377,7 +381,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "存儲",
- "text": "請考慮根據用於 SAP 工作負載的儲存類型配置高可用性。Azure Site Recovery 不支援 Azure 中提供的某些存儲服務,因此高可用性配置可能會有所不同。",
+ "text": "考慮根據您用於 SAP 工作負載的儲存類型配置高可用性。Azure Site Recovery 不支援 Azure 中提供的某些存儲服務,因此高可用性配置可能會有所不同。",
"training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
"waf": "可靠性"
},
@@ -388,7 +392,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "存儲",
- "text": "不同的本機 Azure 儲存服務(如 Azure 檔存儲、Azure NetApp 檔、Azure 共用磁碟)可能並非在所有區域都可用。因此,若要在故障轉移后在DR區域上設置類似的SAP,請確保在DR網站中提供相應的存儲服務。",
+ "text": "不同的本機 Azure 儲存服務(如 Azure 檔、Azure NetApp 檔、Azure 共用磁碟)可能並非在所有區域都可用。因此,要在故障轉移后在DR區域上進行類似的SAP設置,請確保在DR網站中提供相應的存儲服務。",
"waf": "可靠性"
},
{
@@ -398,7 +402,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "自動執行 SAP System Start-Stop 以管理成本。",
+ "text": "自動化 SAP System Start-Stop 以管理成本。",
"waf": "成本"
},
{
@@ -408,7 +412,7 @@
"service": "SAP",
"severity": "低",
"subcategory": " ",
- "text": "如果將 Azure 高級存儲與 SAP HANA 配合使用,則可以使用 Azure 標準 SSD 儲存來選擇成本敏感的儲存解決方案。但是,請注意,選擇“標準 SSD”或“標準 HDD Azure”存儲將影響各個 VM 的 SLA。此外,對於具有較低 I/O 輸送量和低延遲的系統(例如非生產環境),可以使用較低系列的 VM。",
+ "text": "如果將 Azure 高級存儲與 SAP HANA 配合使用,則可以使用 Azure 標準 SSD 儲存來選擇注重成本的儲存解決方案。但是,請注意,選擇標準 SSD 或標準 HDD Azure 儲存將影響單個 VM 的 SLA。此外,對於 I/O 輸送量較低且延遲較低的系統(如非生產環境),可以使用較低系列的 VM。",
"waf": "成本"
},
{
@@ -418,11 +422,12 @@
"service": "SAP",
"severity": "低",
"subcategory": " ",
- "text": "作為成本較低的替代配置(多用途),可以為非生產 HANA 資料庫伺服器 VM 選擇低性能 SKU。但是,請務必注意,某些 VM 類型(如 E 系列)未經 HANA 認證(SAP HANA 硬體目錄),或者無法實現小於 1 毫秒的存儲延遲。",
+ "text": "作為成本較低的替代配置(多用途),您可以為非生產 HANA 資料庫伺服器 VM 選擇低性能 SKU。但是,請務必注意,某些 VM 類型(如 E 系列)未經過 HANA 認證(SAP HANA 硬體目錄),或者無法實現小於 1 毫秒的存儲延遲。",
"waf": "成本"
},
{
"category": "身份和訪問",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
@@ -450,7 +455,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "使用 SAML 通過 Azure AD 實現 SAP SaaS 應用程式(如 SAP Analytics Cloud、SAP Cloud Platform、Business by Design、SAP Qualtrics 和 SAP C4C)的 SSO。",
+ "text": "使用 SAML 通過 Azure AD 實現對 SAP SaaS 應用程式(如 SAP Analytics Cloud、SAP Cloud Platform、Business by design、SAP Qualtrics 和 SAP C4C)的 SSO。",
"waf": "安全"
},
{
@@ -481,7 +486,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "可以使用SAP NetWeaver SSO 或合作夥伴解決方案將 SSO 實現到 SAP GUI。",
+ "text": "您可以使用 SAP NetWeaver SSO 或合作夥伴解決方案實現對 SAP GUI 的 SSO。",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "安全"
},
@@ -491,7 +496,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "對於 SAP GUI 和 Web 瀏覽器存取的 SSO,請實施 SNC/Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮 SAP 安全登錄伺服器,它是 SAP SSO 解決方案的一個元件。",
+ "text": "對於 SAP GUI 和 Web 瀏覽器訪問的 SSO,實施 SNC / Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮使用 SAP Secure Login Server,它是 SAP SSO 解決方案的一個元件。",
"training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "安全"
},
@@ -502,7 +507,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "對於 SAP GUI 和 Web 瀏覽器存取的 SSO,請實施 SNC/Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮 SAP 安全登錄伺服器,它是 SAP SSO 解決方案的一個元件。",
+ "text": "對於 SAP GUI 和 Web 瀏覽器訪問的 SSO,實施 SNC / Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮使用 SAP Secure Login Server,它是 SAP SSO 解決方案的一個元件。",
"waf": "安全"
},
{
@@ -512,7 +517,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "使用 OAuth for SAP NetWeaver 實現 SSO,以允許第三方或自定義應用程式訪問 SAP NetWeaver OData 服務。",
+ "text": "通過使用 SAP NetWeaver 的 OAuth 實施 SSO,以允許第三方或自定義應用程式訪問 SAP NetWeaver OData 服務。",
"waf": "安全"
},
{
@@ -522,7 +527,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "實現 SSO 到 SAP HANA",
+ "text": "實施SAP HANA的 SSO",
"waf": "安全"
},
{
@@ -542,7 +547,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "對於訪問 SAP 的應用程式,可能需要使用主體傳播來建立 SSO。",
+ "text": "對於訪問 SAP 的應用程式,您可能希望使用主體傳播來建立 SSO。",
"waf": "安全"
},
{
@@ -552,7 +557,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "如果使用的是需要 SAP Identity Authentication Service (IAS) 的 SAP BTP 服務或 SaaS 解決方案,請考慮在 SAP Cloud Identity Authentication Services 和 Azure AD 之間實現 SSO 以存取這些 SAP 服務。此集成允許 SAP IAS 充當代理標識提供者,並將身份驗證請求轉發到 Azure AD,作為中央使用者存儲和標識提供者。",
+ "text": "如果使用需要 SAP 身份驗證服務 (IAS) 的 SAP BTP 服務或 SaaS 解決方案,請考慮在 SAP Cloud Identity Authentication 服務和 Azure AD 之間實現 SSO 以存取這些 SAP 服務。此集成允許 SAP IAS 充當代理標識提供者,並將身份驗證請求轉發到作為中央使用者存儲和標識提供者的 Azure AD。",
"waf": "安全"
},
{
@@ -562,7 +567,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "實現 SSO 到 SAP BTP",
+ "text": "實施 SSO 到 SAP BTP",
"waf": "安全"
},
{
@@ -572,50 +577,55 @@
"service": "SAP",
"severity": "中等",
"subcategory": "身份",
- "text": "如果使用的是 SAP SuccessFactors,請考慮使用 Azure AD 自動使用者預配。通過此整合,當你向 SAP SuccessFactors 添加新員工時,可以在 Azure AD 中自動建立使用者帳戶。 (可選)可以在 Microsoft 365 或 Azure AD 支援的其他 SaaS 應用程式中建立使用者帳戶。 使用將電子郵件地址寫回 SAP SuccessFactors。",
+ "text": "如果使用的是 SAP SuccessFactors,請考慮使用 Azure AD 自動使用者預配。通過此整合,當您將新員工添加到 SAP SuccessFactors 時,您可以在 Azure AD 中自動建立其用戶帳戶。(可選)您可以在 Microsoft 365 或 Azure AD 支援的其他 SaaS 應用程式中創建用戶帳戶。",
"waf": "安全"
},
{
"category": "管理組和訂閱",
+ "description": "保持管理組層次結構合理平坦,不超過 4 個。",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
"severity": "中等",
"subcategory": "訂閱",
- "text": "對 SAP 訂閱強制實施現有管理組策略",
+ "text": "對 SAP 訂閱實施現有管理組策略",
"training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
"waf": "操作"
},
{
"category": "管理組和訂閱",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高",
"subcategory": "訂閱",
- "text": "將緊密耦合的應用程式集成到同一個 SAP 訂閱中,以避免額外的路由和管理複雜性",
+ "text": "將緊密耦合的應用程式集成到同一 SAP 訂閱中,以避免額外的路由和管理複雜性",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
"waf": "操作"
},
{
"category": "管理組和訂閱",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高",
"subcategory": "訂閱",
- "text": "利用訂閱作為縮放單元並擴展我們的資源,請考慮按環境部署訂閱,例如。沙箱、非生產、生產",
+ "text": "利用 Subscription 作為縮放單元並擴展我們的資源,考慮為每個環境部署 Subscription,例如。沙箱、非生產、生產",
"training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
"waf": "操作"
},
{
"category": "管理組和訂閱",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
"severity": "高",
"subcategory": "訂閱",
- "text": "確保在訂閱預配過程中增加配額(例如,訂閱中可用的 VM 核心總數)",
+ "text": "確保在訂閱預配過程中增加配額(例如,訂閱中的可用 VM 核心總數)",
"training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"waf": "操作"
},
@@ -636,7 +646,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "訂閱",
- "text": "如果部署到可用性區域,請確保在配額獲得批准后,VM 的區域部署可用。提交支援請求,其中包含所需的訂閱、VM 系列、CPU 數量和可用性區域。",
+ "text": "如果部署到可用區,請確保在配額獲得批准后,VM 的區域部署可用。提交支援請求,其中包含所需的訂閱、VM 系列、CPU 數量和可用區。",
"waf": "操作"
},
{
@@ -646,18 +656,19 @@
"service": "SAP",
"severity": "高",
"subcategory": "訂閱",
- "text": "確保所需的服務和功能在所選部署區域內可用,例如。ANF、區域等",
+ "text": "確保所需的服務和功能在選定的部署區域內可用,例如。ANF 、 Zone 等",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "操作"
},
{
"category": "管理組和訂閱",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
"severity": "中等",
"subcategory": "訂閱",
- "text": "利用 Azure 資源標記進行成本分類和資源分組(:BillTo、部門(或營業單位)、環境(生產、階段、開發)、層(Web 層、應用層)、應用程式擁有者、ProjectName)",
+ "text": "利用 Azure 資源標籤進行成本分類和資源組(:BillTo、部門(或營業單位)、環境(生產、階段、開發)、層(Web 層、應用程式層)、應用程式擁有者、ProjectName)",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "操作"
},
@@ -667,7 +678,7 @@
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
"severity": "高",
- "subcategory": "BCDR公司",
+ "subcategory": "BCDR",
"text": "使用 Azure 備份服務幫助保護 HANA 資料庫。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "可靠性"
@@ -678,8 +689,8 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
"service": "SAP",
"severity": "中等",
- "subcategory": "BCDR公司",
- "text": "如果為 HANA、Oracle 或 DB2 資料庫部署 Azure NetApp 檔,請使用 Azure 應用程式一致性快照工具( AzAcSnap )來創建應用程式一致性快照。AzAcSnap 還支援 Oracle 資料庫。請考慮在中央 VM 上使用 AzAcSnap,而不是在單個 VM 上使用 AzAcSnap。",
+ "subcategory": "BCDR",
+ "text": "如果您為 HANA、Oracle 或 DB2 資料庫部署 Azure NetApp 檔,請使用 Azure 應用程式一致性快照工具 (AzAcSnap) 拍攝應用程式一致性快照。AzAcSnap 還支援 Oracle 資料庫。考慮在中央 VM 上使用 AzAcSnap ,而不是在單個 VM 上使用。",
"waf": "可靠性"
},
{
@@ -699,7 +710,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "管理",
- "text": "不要將不同的應用程式服務分組到同一個集群中。例如,不要將DRBD和中央服務集群組合在同一集群上。但是,可以使用同一個 Pacemaker 群集來管理大約五個不同的中心服務(多 SID 群集)。",
+ "text": "不要將不同的應用程式服務分組到同一個集群中。例如,不要將DRBD和中央服務集群合併到同一個集群上。但是,您可以使用同一個 Pacemaker 集群來管理大約五個不同的中央服務(多 SID 集群)。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
@@ -710,7 +721,7 @@
"service": "SAP",
"severity": "低",
"subcategory": "管理",
- "text": "請考慮在暫停模型中運行開發/測試系統,以節省和優化 Azure 運行成本。",
+ "text": "考慮在推遲模型中運行開發/測試系統,以節省和優化 Azure 運行成本。",
"waf": "成本"
},
{
@@ -720,7 +731,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "管理",
- "text": "如果通過管理客戶的 SAP 資產與客戶合作,請考慮使用 Azure Lighthouse。Azure Lighthouse 允許託管服務提供者使用 Azure 本機標識服務對客戶的環境進行身份驗證。它將控制權交到客戶手中,因為他們可以隨時撤銷訪問許可權並審核服務提供者的行為。",
+ "text": "如果你通過管理客戶的 SAP 資產來與客戶合作,請考慮使用 Azure Lighthouse。Azure Lighthouse 允許託管服務提供者使用 Azure 原生標識服務對客戶的環境進行身份驗證。它將控制權交到客戶手中,因為他們可以隨時撤銷訪問許可權並審核服務提供者的行為。",
"waf": "操作"
},
{
@@ -730,7 +741,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "管理",
- "text": "使用 Azure Update Manager 檢查單個 VM 或多個 VM 的可用更新狀態,並考慮計劃定期修補。",
+ "text": "使用 Azure Update Manager 檢查單個 VM 或多個 VM 的可用更新的狀態,並考慮計劃定期修補。",
"training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
"waf": "操作"
},
@@ -741,7 +752,7 @@
"service": "SAP",
"severity": "低",
"subcategory": "管理",
- "text": "使用 SAP Landscape Management (LaMa) 優化和管理 SAP Basis 運營。使用適用於 Azure 的 SAP LaMa 連接器重新置放、複製、克隆和刷新 SAP 系統。",
+ "text": "使用 SAP Landscape Management (LaMa) 優化和管理 SAP Basis 運營。使用適用於 Azure 的 SAP LaMa 連接器來重新定位、複製、克隆和刷新 SAP 系統。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
"waf": "操作"
},
@@ -752,7 +763,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "監測",
- "text": "使用用於 SAP 解決方案的 Azure Monitor 監視 Azure 上的 SAP 工作負載(SAP HANA、高可用性 SUSE 群集和 SQL 系統)。請考慮使用 SAP 解決方案管理器補充用於 SAP 解決方案的 Azure Monitor。",
+ "text": "使用適用於 SAP 解決方案的 Azure Monitor 監視 Azure 上的 SAP 工作負載(SAP HANA、高可用性 SUSE 群集和 SQL 系統)。請考慮使用 SAP 解決方案管理器補充適用於 SAP 解決方案的 Azure Monitor。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "操作"
},
@@ -763,7 +774,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "監測",
- "text": "運行適用於 SAP 的 VM 擴展檢查。適用於 SAP 的 VM 擴展使用虛擬機 (VM) 的分配託管標識來訪問 VM 監視和配置數據。該檢查可確保 SAP 應用程式中的所有性能指標都來自適用於 SAP 的基礎 Azure 擴展。",
+ "text": "運行 VM Extension for SAP 檢查。適用於 SAP 的 VM 擴展使用虛擬機 (VM) 的分配託管標識來訪問 VM 監視和配置數據。該檢查可確保 SAP 應用程式中的所有性能指標都來自適用於 SAP 的基礎 Azure 擴展。",
"training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
"waf": "操作"
},
@@ -774,7 +785,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "監測",
- "text": "使用 Azure Policy 進行訪問控制和合規性報告。Azure Policy 提供了強制實施組織範圍設置的功能,以確保一致的策略遵守和快速違規檢測。",
+ "text": "使用 Azure Policy 進行訪問控制和合規性報告。Azure Policy 提供了強制實施組織範圍設置的功能,以確保一致的策略遵守和快速的違規檢測。",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "操作"
},
@@ -785,7 +796,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "監測",
- "text": "使用 Azure 網路觀察程式中的連接監視器監視 SAP 資料庫和應用程式伺服器的延遲指標。或者使用 Azure Monitor 收集和顯示網路延遲度量。",
+ "text": "使用 Azure 網路觀察程式中的連接監視器來監視 SAP 資料庫和應用程式伺服器的延遲指標。或者使用 Azure Monitor 收集和顯示網路延遲測量值。",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
"waf": "操作"
},
@@ -806,7 +817,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "監測",
- "text": "對於每個 Azure 訂閱,請在區域部署之前對 Azure 可用性區域運行延遲測試,以選擇用於在 Azure 上部署 SAP 的低延遲區域。",
+ "text": "對於每個 Azure 訂閱,在區域部署之前,請在 Azure 可用性區域上運行延遲測試,以選擇低延遲區域以在 Azure 上部署 SAP。",
"training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
"waf": "性能"
},
@@ -817,7 +828,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "監測",
- "text": "運行復原報告,確保整個預配的 Azure 基礎結構(計算、資料庫、網路、存儲、Site Recovery)的配置符合適用於 Azure 的 Cloud Adaption Framework 定義的配置。",
+ "text": "運行彈性報告,確保整個預配的 Azure 基礎結構(計算、資料庫、網路、存儲、Site Recovery)的配置符合 Cloud Adaption Framework for Azure 定義的配置。",
"training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "可靠性"
},
@@ -828,18 +839,19 @@
"service": "SAP",
"severity": "中等",
"subcategory": "監測",
- "text": "使用適用於 SAP 的 Microsoft Sentinel 解決方案實施威脅防護。使用此解決方案監視 SAP 系統,並檢測整個業務邏輯和應用程式層的複雜威脅。",
+ "text": "使用適用於 SAP 的 Microsoft Sentinel 解決方案實現威脅防護。使用此解決方案可監控您的 SAP 系統並檢測整個業務邏輯和應用程式層的複雜威脅。",
"training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "安全"
},
{
"category": "管理和監控",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
"severity": "中等",
"subcategory": "監測",
- "text": "Azure 標記可用於對資源進行邏輯分組和跟蹤,自動執行其部署,最重要的是,提供對所發生成本的可見性。",
+ "text": "可以利用 Azure 標記對資源進行邏輯分組和跟蹤、自動化部署,最重要的是,提供對所產生成本的可見性。",
"training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
"waf": "操作"
},
@@ -850,7 +862,7 @@
"service": "SAP",
"severity": "低",
"subcategory": "性能",
- "text": "對延遲敏感型應用程式使用虛擬機間延遲監視。",
+ "text": "對延遲敏感型應用程式使用虛擬機間延遲監控。",
"waf": "性能"
},
{
@@ -871,7 +883,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "性能",
- "text": "從防病毒掃描中排除所有資料庫檔系統和可執行程式。包含它們可能會導致性能問題。請與資料庫供應商聯繫,瞭解排除清單中的規範性詳細資訊。例如,Oracle 建議從防病毒掃描中排除 /oracle}sapdata。",
+ "text": "從防病毒掃描中排除所有資料庫檔系統和可執行程式。包含它們可能會導致性能問題。請與資料庫供應商聯繫,瞭解有關排除清單的規範性詳細資訊。例如,Oracle 建議從防病毒掃描中排除 /oracle//sapdata。",
"waf": "性能"
},
{
@@ -881,7 +893,7 @@
"service": "SAP",
"severity": "低",
"subcategory": "性能",
- "text": "請考慮在遷移後收集非 HANA 資料庫的完整資料庫統計資訊。例如,實施SAP 註釋1020260 - 交付 Oracle 統計資訊。",
+ "text": "考慮在遷移後收集非 HANA 資料庫的完整資料庫統計資訊。例如,實施SAP註釋 1020260 - Oracle 統計資訊的交付。",
"waf": "性能"
},
{
@@ -891,7 +903,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "性能",
- "text": "請考慮將 Oracle 自動儲存管理 (ASM) 用於使用 Azure 上的 SAP 的所有 Oracle 部署。",
+ "text": "請考慮將 Oracle Automatic Storage Management (ASM) 用於使用 Azure 上的 SAP 的所有 Oracle 部署。",
"training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
"waf": "性能"
},
@@ -902,7 +914,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "性能",
- "text": "對於運行 Oracle 的 Azure 上的 SAP,SQL 腳本集合可説明你診斷性能問題。 自動工作負載存儲庫 (AWR) 報告包含用於診斷 Oracle 系統中問題的寶貴資訊。我們建議您在多個工作階段期間運行 AWR 報告,並為其選擇高峰時間,以確保分析的廣泛覆蓋範圍。",
+ "text": "對於運行 Oracle 的 Azure 上的 SAP,一組 SQL 腳本可以説明你診斷性能問題。 Automatic Workload Repository (AWR) 報告包含用於診斷 Oracle 系統中問題的寶貴資訊。我們建議您在多個工作階段期間運行 AWR 報告,並為其選擇高峰時間,以確保分析的廣泛覆蓋範圍。",
"training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
"waf": "性能"
},
@@ -924,7 +936,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "應用交付",
- "text": "若要安全交付 HTTP/S 應用,請使用應用程式閘道 v2 並確保啟用 WAF 保護和策略。",
+ "text": "為了安全交付 HTTP/S 應用程式,請使用應用程式閘道 v2 並確保啟用 WAF 保護和策略。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
"waf": "安全"
},
@@ -934,8 +946,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "中等",
- "subcategory": "DNS功能變數名稱",
- "text": "如果在遷移到 Azure 期間未更改虛擬機器的 DNS 或虛擬名稱,則後台 DNS 和虛擬名稱將連接 SAP 環境中的許多系統介面,並且客戶有時只會知道開發人員隨時間推移定義的介面。遷移后,當虛擬或 DNS 名稱更改時,各種系統之間會出現連接挑戰,建議保留 DNS 別名以防止出現此類困難。",
+ "subcategory": "DNS 解析",
+ "text": "如果在遷移到 Azure 期間未更改虛擬機器的 DNS 或虛擬名稱,則後台 DNS 和虛擬名稱將連接 SAP 環境中的許多系統介面,並且客戶有時只會知道開發人員隨時間定義的介面。遷移后,當虛擬或 DNS 名稱發生變化時,各種系統之間會出現連接挑戰,建議保留 DNS 別名以防止出現這些類型的困難。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "操作"
},
@@ -945,19 +957,21 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "中等",
- "subcategory": "DNS功能變數名稱",
+ "subcategory": "DNS 解析",
"text": "使用不同的 DNS 區域來區分每個環境(沙箱、開發、預生產和生產)。具有自己的 VNet 的 SAP 部署除外;在這裡,私有 DNS 區域可能不是必需的。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "操作"
},
{
"category": "網路拓撲和連接",
+ "description": "配置 VNet 對等互連時,請使用允許流量流向遠端虛擬網路設置。",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
"severity": "中等",
"subcategory": "混合",
- "text": "本地和全域 VNet 對等互連提供連接,是確保跨多個 Azure 區域的 SAP 部署的登陸區域之間的連接的首選方法",
+ "text": "本地和全域 VNet 對等互連提供連接,是確保跨多個 Azure 區域進行 SAP 部署的登陸區域之間建立連接的首選方法",
"training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
"waf": "可靠性"
},
@@ -974,12 +988,13 @@
},
{
"category": "網路拓撲和連接",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
"severity": "中等",
"subcategory": "混合",
- "text": "在需要跨 Azure 區域和本地位置的全域傳輸連接的新網路、大型網路或全球網路中使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動設置 Azure 網路的可傳遞路由,並且可以遵循 Azure 部署上的 SAP 標準。",
+ "text": "在需要跨 Azure 區域和本地位置建立全球傳輸連接的新網路、大型網路或全球網路中,使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動為 Azure 網路設置可傳遞路由,並且可以遵循 Azure 上的 SAP 部署標準。",
"training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
"waf": "操作"
},
@@ -990,7 +1005,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "混合",
- "text": "僅當使用合作夥伴 NVA 時,才考慮在區域之間部署網路虛擬設備 (NVA)。如果存在本機 NVA,則不需要區域或 VNet 之間的 NVA。部署合作夥伴網路技術和 NVA 時,請按照供應商的指南驗證與 Azure 網路衝突的配置。",
+ "text": "僅當使用合作夥伴 NVA 時,才考慮在區域之間部署網路虛擬設備 (NVA)。如果存在本機 NVA,則不需要區域或 VNet 之間的 NVA。部署合作夥伴網路技術和 NVA 時,請按照供應商的指南驗證與 Azure 網路的衝突配置。",
"training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "操作"
},
@@ -1001,28 +1016,30 @@
"service": "SAP",
"severity": "中等",
"subcategory": "混合",
- "text": "虛擬 WAN 管理基於虛擬 WAN 的拓撲的分支 VNet 之間的連接(無需設置使用者定義的路由 [UDR] 或 NVA),同一虛擬中心中 VNet 到 VNet 流量的最大網路輸送量為每秒 50 G。如有必要,SAP 登陸區域可以使用 VNet 對等互連連接到其他登陸區域並克服此頻寬限制。",
+ "text": "虛擬 WAN 管理基於虛擬 WAN 的拓撲的分支 VNet 之間的連接(無需設置使用者定義的路由 [UDR] 或 NVA),同一虛擬中心中 VNet 到 VNet 流量的最大網路輸送量為每秒 50 Gb。如有必要,SAP 登陸區域可以使用 VNet 對等互連連接到其他登陸區域並克服此頻寬限制。",
"training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "操作"
},
{
"category": "網路拓撲和連接",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "高",
- "subcategory": "知識產權計劃",
+ "subcategory": "IP 計劃",
"text": "不建議將公共IP分配給運行SAP工作負載的 VM。",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
"severity": "高",
- "subcategory": "知識產權計劃",
+ "subcategory": "IP 計劃",
"text": "配置 ASR 時,請考慮在 DR 端保留 IP 位址",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "操作"
@@ -1033,8 +1050,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "高",
- "subcategory": "知識產權計劃",
- "text": "避免對生產網站和DR網站使用重疊的IP位址範圍。",
+ "subcategory": "IP 計劃",
+ "text": "避免對生產和DR網站使用重疊的IP位址範圍。",
"training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "操作"
},
@@ -1044,19 +1061,20 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
"severity": "中等",
- "subcategory": "知識產權計劃",
- "text": "雖然 Azure 確實可以説明您在 VNet 中創建多個委派子網,但 Azure NetApp 檔的 VNet 中只能存在一個委派子網。如果對 Azure NetApp 檔使用多個委託子網,則嘗試創建新卷將失敗。",
+ "subcategory": "IP 計劃",
+ "text": "雖然 Azure 確實可以説明您在 VNet 中創建多個委託子網,但 Azure NetApp 檔的 VNet 中只能存在一個委託子網。如果為 Azure NetApp Files 使用多個委託子網,則嘗試創建新卷將失敗。",
"training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "操作"
},
{
"category": "網路拓撲和連接",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
"severity": "中等",
"subcategory": "互聯網",
- "text": "使用 Azure 防火牆管理發往 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)",
+ "text": "使用 Azure 防火牆來管理到 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)",
"training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
"waf": "安全"
},
@@ -1078,7 +1096,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "互聯網",
- "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為與登陸區域的入站 HTTP/S 連接提供全域保護。",
+ "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為到登陸區域的入站 HTTP/S 連接提供全域保護。",
"training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "安全"
},
@@ -1100,7 +1118,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "互聯網",
- "text": "使用 Web 應用程式防火牆在流量暴露於 Internet 時對其進行掃描。另一種選擇是將其與負載均衡器或具有內置防火牆功能(如應用程式閘道或第三方解決方案)的資源一起使用。",
+ "text": "使用 Web 應用程式防火牆在流量暴露於 Internet 時對其進行掃描。另一種選擇是將它與負載均衡器或具有內置防火牆功能的資源(如應用程式閘道或第三方解決方案)一起使用。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "安全"
},
@@ -1111,7 +1129,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "互聯網",
- "text": "在需要跨 Azure 區域和本地位置的全域傳輸連接的新網路、大型網路或全球網路中使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動設置 Azure 網路的可傳遞路由,並且可以遵循 Azure 部署上的 SAP 標準。",
+ "text": "在需要跨 Azure 區域和本地位置建立全球傳輸連接的新網路、大型網路或全球網路中,使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動為 Azure 網路設置可傳遞路由,並且可以遵循 Azure 上的 SAP 部署標準。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
"waf": "性能"
},
@@ -1122,18 +1140,19 @@
"service": "SAP",
"severity": "中等",
"subcategory": "互聯網",
- "text": "若要防止數據洩露,請使用 Azure 專用連結安全地訪問平臺即服務資源,例如 Azure Blob 存儲、Azure 檔存儲、Azure Data Lake Storage Gen2、Azure 數據工廠等。Azure 專用終結點還有助於保護 VNet 與 Azure 存儲、Azure 備份等服務之間的流量。VNet 與啟用專用終結點的服務之間的流量通過 Microsoft 全球網路傳輸,從而防止其暴露在公共 Internet 上。",
+ "text": "為了防止數據洩露,請使用 Azure 專用連結安全地訪問平臺即服務資源,例如 Azure Blob 存儲、Azure 檔存儲、Azure Data Lake Storage Gen2、Azure 數據工廠等。Azure 專用終結點還可以幫助保護 VNet 與 Azure 存儲、Azure 備份等服務之間的流量。VNet 與啟用了專用終結點的服務之間的流量通過 Microsoft 全球網路傳輸,從而防止其暴露在公共 Internet 上。",
"training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
"severity": "高",
"subcategory": "分割",
- "text": "請確保在 SAP 應用程式和 DBMS 層中使用的 VM 上啟用了 Azure 加速網路。",
+ "text": "確保在 SAP 應用程式和 DBMS 層中使用的 VM 上啟用了 Azure 加速網路。",
"training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "性能"
},
@@ -1144,18 +1163,19 @@
"service": "SAP",
"severity": "中等",
"subcategory": "分割",
- "text": "請確保將 Azure 負載均衡器的內部部署設置為使用直接伺服器返回 (DSR)。此設置(啟用浮動IP)將減少內部負載均衡器配置用於 DBMS 層上的高可用性配置時的延遲。",
+ "text": "確保將 Azure 負載均衡器的內部部署設置為使用直接伺服器返回 (DSR)。當內部負載均衡器配置用於 DBMS 層上的高可用性配置時,此設置 (Enabling Floating IP) 將減少延遲。",
"training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "安全"
},
{
"category": "網路拓撲和連接",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
"severity": "中等",
"subcategory": "分割",
- "text": "可以使用應用程式安全組 (ASG) 和 NSG 規則在 SAP 應用程式層和 DBMS 層之間定義網路安全存取控制清單。ASG 對虛擬機進行分組,以説明管理其安全性。",
+ "text": "您可以使用應用程式安全組 (ASG) 和 NSG 規則來定義 SAP 應用程式和 DBMS 層之間的網路安全存取控制清單。ASG 對虛擬機進行分組以説明管理其安全性。",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "安全"
},
@@ -1177,7 +1197,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "分割",
- "text": "若要優化 SAP 應用程式的網路延遲,請考慮使用 Azure 鄰近放置組。",
+ "text": "為了實現 SAP 應用程式的最佳網路延遲,請考慮使用 Azure 鄰近放置組。",
"training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
"waf": "性能"
},
@@ -1188,7 +1208,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "分割",
- "text": "根本不支援在本地和 Azure 之間運行 SAP Application Server 層和 DBMS 層拆分。這兩個層都需要完全駐留在本地或 Azure 中。",
+ "text": "根本不支援在本地和 Azure 之間運行 SAP Application Server 層和 DBMS 層。這兩個層都需要完全駐留在本地或 Azure 中。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "性能"
},
@@ -1199,7 +1219,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "分割",
- "text": "不建議將資料庫管理系統 (DBMS) 和 SAP 系統的應用程式層託管在不同的 VNet 中,並將它們與 VNet 對等互連連接,因為層之間的過多網路流量可能會產生大量成本。建議使用 Azure 虛擬網路中的子網來分隔 SAP 應用程式層和 DBMS 層。",
+ "text": "建議不要將 SAP 系統的資料庫管理系統 (DBMS) 和應用程式層託管在不同的 VNet 中,並將它們與 VNet 對等互連連接,因為層之間過多的網路流量可能會產生大量成本。建議使用 Azure 虛擬網路中的子網來分隔 SAP 應用程式層和 DBMS 層。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "成本"
},
@@ -1210,7 +1230,7 @@
"service": "SAP",
"severity": "高",
"subcategory": "分割",
- "text": "如果將負載均衡器與Linux客戶機作業系統配合使用,請檢查Linux網路參數 net.ipv4.tcp_timestamps是否設置為0。",
+ "text": "如果將負載均衡器與 Linux 客戶機作業系統一起使用,請檢查 Linux 網路參數 net.ipv4.tcp_timestamps 是否設置為 0。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "性能"
},
@@ -1221,7 +1241,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": "分割",
- "text": "對於 SAP RISE/ECS 部署,虛擬對等互連是與客戶現有 Azure 環境建立連接的首選方式。SAP vnet 和客戶 vnet 都受網路安全組 (NSG) 保護,從而通過 VNet 對等互連在 SAP 和資料庫埠上進行通信",
+ "text": "對於 SAP RISE/ECS 部署,虛擬對等互連是與客戶的現有 Azure 環境建立連接的首選方式。SAP VNet 和客戶 VNet 都受到網路安全組 (NSG) 的保護,從而通過 VNet 對等互連在 SAP 和資料庫埠上進行通信",
"waf": "安全"
},
{
@@ -1251,7 +1271,7 @@
"service": "SAP",
"severity": "高",
"subcategory": " ",
- "text": "查看監視 SAP HANA 系統環境指南。",
+ "text": "查看監控 SAP HANA 系統環境指南。",
"waf": "操作"
},
{
@@ -1261,7 +1281,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "查看 Azure Linux VM 中的 Oracle 資料庫備份策略。",
+ "text": "查看 Azure Linux VM 中的 Oracle Database 備份策略。",
"waf": "操作"
},
{
@@ -1271,7 +1291,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "查看 Azure Blob 儲存與 SQL Server 2016 的配合。",
+ "text": "查看 Azure Blob Storage 與 SQL Server 2016 的使用方式。",
"waf": "操作"
},
{
@@ -1281,7 +1301,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "查看 Azure VM 自動備份 v2 的使用方式。",
+ "text": "查看 Azure VM 的自動備份 v2 的使用方式。",
"waf": "操作"
},
{
@@ -1290,7 +1310,7 @@
"service": "SAP",
"severity": "高",
"subcategory": " ",
- "text": "使用進階磁碟時開啟M系列的寫入加速器(V1)",
+ "text": "使用進階磁碟時為 M 系列開啟寫入加速器 (V1)",
"waf": "操作"
},
{
@@ -1300,7 +1320,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "測試可用性區域延遲。",
+ "text": "測試可用區延遲。",
"waf": "性能"
},
{
@@ -1321,7 +1341,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "使用 SAP ABAPMeter 報表 /SSA/CAT 查看 SAP 應用程式伺服器到資料庫伺服器的延遲。",
+ "text": "使用 SAP ABAPMeter 報告 /SSA/CAT 查看 SAP 應用程式伺服器到資料庫伺服器的延遲。",
"training": "https://me.sap.com/notes/0002879613",
"waf": "性能"
},
@@ -1331,7 +1351,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "查看使用 CCMS 的 SQL Server 性能監視。",
+ "text": "查看使用 CCMS 的 SQL Server 性能監控。",
"waf": "性能"
},
{
@@ -1341,7 +1361,7 @@
"service": "SAP",
"severity": "中等",
"subcategory": " ",
- "text": "測試 SAP 應用程式層 VM 和 DBMS VM (NIPING) 之間的網路延遲。",
+ "text": "測試 SAP 應用層 VM 和 DBMS VM 之間的網路延遲 (NIPING)。",
"training": "https://me.sap.com/notes/1100926/E",
"waf": "性能"
},
@@ -1366,72 +1386,73 @@
"waf": "性能"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "中等",
"subcategory": "統轄",
- "text": "如果在 Azure、本地或其他雲環境中運行 Windows 和 Linux VM,則可以使用 Azure 自動化中的更新管理中心來管理作業系統更新,包括安全修補程式。",
+ "text": "如果您在 Azure、本地或其他雲環境中運行 Windows 和 Linux VM,則可以使用 Azure 自動化中的更新管理中心來管理操作系統更新,包括安全補丁。",
"training": "https://learn.microsoft.com/azure/automation/update-management/overview",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "08951710-79a2-492a-adbc-06d7a401545b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "中等",
"subcategory": "統轄",
- "text": "定期查看 SAP 安全 OSS 說明,因為 SAP 會發佈高度關鍵的安全補丁或熱修復程式,需要立即採取行動來保護 SAP 系統。",
+ "text": "定期查看 SAP 安全 OSS 說明,因為 SAP 發佈了高度關鍵的安全補丁或熱修復程式,需要立即採取措施保護您的 SAP 系統。",
"training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
"severity": "低",
"subcategory": "統轄",
- "text": "對於 SQL Server 上的 SAP,可以禁用 SQL Server 系統管理員帳戶,因為 SQL Server 上的 SAP 系統不使用該帳戶。在禁用原始系統管理員帳戶之前,請確保具有系統管理員許可權的其他使用者可以訪問伺服器。",
+ "text": "對於 SQL Server 上的 SAP,您可以禁用 SQL Server 系統管理員帳戶,因為 SQL Server 上的 SAP 系統不使用該帳戶。在禁用原始系統管理員帳戶之前,請確保具有系統管理員許可權的其他使用者可以訪問伺服器。",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
"severity": "高",
"subcategory": "統轄",
- "text": "禁用xp_cmdshell。SQL Server 功能xp_cmdshell啟用 SQL Server 內部作業系統命令行介面。這是安全審計中的潛在風險。",
+ "text": "禁用 xp_cmdshell。SQL Server 功能xp_cmdshell啟用 SQL Server 內部作業系統命令 shell。這是安全審計中的潛在風險。",
"training": "https://me.sap.com/notes/3019299/E",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "高",
"subcategory": "秘密",
- "text": "加密 Azure 上的 SAP HANA 資料庫伺服器使用 SAP HANA 本機加密技術。此外,如果在 Azure 上使用 SQL Server,請使用透明數據加密 (TDE) 來保護數據和日誌檔,並確保備份也已加密。",
+ "text": "在 Azure 上加密 SAP HANA 資料庫伺服器使用 SAP HANA 本機加密技術。此外,如果使用 Azure 上的 SQL Server,請使用透明數據加密 (TDE) 來保護數據和日誌檔,並確保備份也已加密。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
"link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
"service": "SAP",
"severity": "中等",
"subcategory": "秘密",
- "text": "為所有 Azure 資源管理器和經典記憶體啟用了 Azure 儲存加密,並且無法禁用。由於預設情況下數據是加密的,因此無需修改代碼或應用程式即可使用 Azure 儲存加密。",
+ "text": "Azure 儲存加密已為所有 Azure Resource Manager 和經典存儲帳戶啟用,並且無法禁用。由於數據預設加密,因此無需修改代碼或應用程式即可使用 Azure 儲存加密。",
"training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
@@ -1442,186 +1463,187 @@
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "829e2edb-2173-4676-aff6-691b4935ada4",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"service": "SAP",
"severity": "中等",
"subcategory": "秘密",
- "text": "建議在成功部署后鎖定 Azure 資源,以防止未經授權的更改。還可以使用自定義的 Azure 策略(自定義角色)在每個訂閱的基礎上強制實施 LOCK 約束和規則。",
+ "text": "建議在成功部署后鎖定 Azure 資源,以防止未經授權的更改。您還可以使用自定義的 Azure 策略(自定義角色)按訂閱強制實施 LOCK 約束和規則。",
"training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
"link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
"service": "SAP",
"severity": "中等",
"subcategory": "秘密",
- "text": "預配啟用軟刪除和清除策略的 Azure Key Vault,以允許對已刪除物件進行保留保護。",
+ "text": "預配 Azure Key Vault 並啟用軟刪除和清除策略,以允許對已刪除的物件進行保留保護。",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
"link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
"service": "SAP",
"severity": "高",
"subcategory": "秘密",
- "text": "根據現有要求、法規和合規性控制(內部/外部) - 確定所需的 Azure 策略和 Azure RBAC 角色",
+ "text": "根據現有要求、法規和合規性控制(內部/外部)- 確定需要哪些 Azure 策略和 Azure RBAC 角色",
"training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "高",
"subcategory": "秘密",
- "text": "在 SAP 環境中啟用 Microsoft Defender for Endpoint 時,建議排除 DBMS 伺服器上的數據和日誌檔,而不是面向所有伺服器。排除目標檔時,請遵循 DBMS 供應商的建議。",
+ "text": "在 SAP 環境中啟用 Microsoft Defender for Endpoint 時,建議排除 DBMS 伺服器上的數據和日誌檔,而不是以所有伺服器為目標。排除目標檔時,請遵循 DBMS 供應商的建議。",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
"service": "SAP",
"severity": "高",
"subcategory": "秘密",
- "text": "委派具有 Microsoft Defender for Cloud 實時訪問許可權的 SAP 管理員自定義角色。",
+ "text": "委派 SAP 管理員自定義角色,使其具有 Microsoft Defender for Cloud 的即時訪問許可權。",
"training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "低",
"subcategory": "秘密",
- "text": "通過將第三方安全產品與 DIAG (SAP GUI)、RFC 和 SPNEGO for HTTPS 的安全網路通信 (SNC) 集成,對傳輸中的數據進行加密",
+ "text": "通過將第三方安全產品與適用於 DIAG (SAP GUI)、RFC 和 SPNEGO for HTTPS 的安全網路通信 (SNC) 集成,對傳輸中的數據進行加密",
"training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
"link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
"service": "SAP",
"severity": "中等",
"subcategory": "秘密",
- "text": "對於主體加密功能,預設使用 Microsoft 管理的金鑰,並在需要時使用客戶管理的密鑰。",
+ "text": "預設使用 Microsoft 管理的金鑰來實現主體加密功能,並在需要時使用客戶管理的金鑰。",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
"severity": "高",
"subcategory": "秘密",
- "text": "對每個應用程式、每個環境、每個區域使用 Azure Key Vault。",
+ "text": "每個區域每個環境的每個應用程式使用 Azure Key Vault。",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
"link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
"service": "SAP",
"severity": "高",
"subcategory": "秘密",
- "text": "若要控制和管理非 HANA Windows 和非 Windows 作業系統的磁碟加密密鑰和機密,請使用 Azure Key Vault。Azure Key Vault 不支援 SAP HANA,因此必須使用 SAP ABAP 或 SSH 密鑰等替代方法。",
+ "text": "要控制和管理非 HANA Windows 和非 Windows 作業系統的磁碟加密密鑰和機密,請使用 Azure Key Vault。Azure Key Vault 不支援 SAP HANA,因此必須使用 SAP ABAP 或 SSH 密鑰等替代方法。",
"training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "209d490d-a477-4784-84d1-16785d2fa56c",
"link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
"service": "SAP",
"severity": "高",
"subcategory": "安全",
- "text": "為 Azure 上的 SAP 分支訂閱自定義基於角色的訪問控制 (RBAC) 角色,以避免與網路相關的意外更改",
+ "text": "為 Azure 上的 SAP 分支訂閱自定義基於角色的訪問控制 (RBAC) 角色,以避免意外的與網路相關的更改",
"training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
"link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
"service": "SAP",
"severity": "高",
"subcategory": "安全",
- "text": "將 DMZ 和 NVA 與 SAP 資產的其餘部分隔離,配置 Azure 專用連結,並安全地管理和控制 Azure 上的 SAP 資源",
+ "text": "將 DMZ 和 NVA 與 SAP 資產的其餘部分隔離開來,配置 Azure 專用連結,並安全地管理和控制 Azure 上的 SAP 資源",
"training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
"link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"service": "SAP",
"severity": "低",
"subcategory": "安全",
- "text": "請考慮在 Azure 上使用 Microsoft 反惡意軟體來保護虛擬機免受惡意檔、廣告軟體和其他威脅的侵害。",
+ "text": "考慮在 Azure 上使用 Microsoft 反惡意軟體來保護虛擬機免受惡意文件、廣告軟體和其他威脅的侵害。",
"training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
"link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
"service": "SAP",
"severity": "低",
"subcategory": "安全",
- "text": "若要獲得更強大的保護,請考慮使用 Microsoft Defender for Endpoint。",
+ "text": "要獲得更強大的保護,請考慮使用 Microsoft Defender for Endpoint。",
"training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高",
"subcategory": "安全",
- "text": "通過中心虛擬網路傳遞所有流量,將 SAP 應用程式和資料庫伺服器與 Internet 或本地網路隔離開來,該中心虛擬網路通過虛擬網路對等互連連接到分支網路。對等互連虛擬網路保證 Azure 上的 SAP 解決方案與公共 Internet 隔離。",
+ "text": "通過中心虛擬網路傳遞所有流量,將 SAP 應用程式和資料庫伺服器與 Internet 或本地網路隔離開來,該虛擬網路通過虛擬網路對等互連連接到輻射網路。對等互連的虛擬網路保證 Azure 上的 SAP 解決方案與公共 Internet 隔離。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "低",
"subcategory": "安全",
- "text": "對於面向 Internet 的應用程式(如 SAP Fiori),請確保根據應用程式要求分配負載,同時保持安全級別。對於第 7 層安全性,可以使用 Azure 市場中提供的第三方 Web 應用程式防火牆 (WAF)。",
+ "text": "對於面向 Internet 的應用程式(如 SAP Fiori),請確保根據應用程式要求分配負載,同時保持安全級別。對於第 7 層安全性,您可以使用 Azure Marketplace 中提供的第三方 Web 應用程式防火牆 (WAF)。",
"training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
"waf": "安全"
},
{
- "category": "安全性、治理與合規性",
+ "category": "安全性、治理和合規性",
"guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
"link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
"service": "SAP",
"severity": "中等",
"subcategory": "安全",
- "text": "若要在用於 SAP 解決方案的 Azure Monitor 中啟用安全通信,可以選擇使用根證書或伺服器證書。我們強烈建議您使用根證書。",
+ "text": "若要在適用於 SAP 解決方案的 Azure Monitor 中啟用安全通信,可以選擇使用根證書或伺服器證書。我們強烈建議您使用根證書。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "安全"
}
],
"metadata": {
"name": "SAP Checklist",
- "state": "Preview",
- "timestamp": "May 14, 2024",
+ "state": "GA",
+ "timestamp": "October 02, 2024",
"waf": "all"
},
"severities": [
@@ -1637,19 +1659,19 @@
],
"status": [
{
- "description": "此檢查尚未查看",
+ "description": "尚未查看此檢查",
"name": "未驗證"
},
{
- "description": "有一個與此檢查關聯的操作項",
+ "description": "存在與此檢查關聯的操作項",
"name": "打開"
},
{
- "description": "此檢查已通過驗證,並且沒有與之關聯的進一步操作項",
+ "description": "此檢查已經過驗證,沒有與之關聯的其他操作項",
"name": "實現"
},
{
- "description": "建議已理解,但當前需求不需要",
+ "description": "建議已理解,但當前要求不需要",
"name": "不需要"
},
{
diff --git a/checklists/servicebus_checklist.en.json b/checklists/servicebus_checklist.en.json
index 12b9d0c7b..300558f74 100644
--- a/checklists/servicebus_checklist.en.json
+++ b/checklists/servicebus_checklist.en.json
@@ -1,367 +1,368 @@
{
- "items": [
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Leverage FTA Handbook",
- "waf": "Reliability",
- "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
- "id": "29.1",
- "severity": "Medium",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Leverage Availability Zones if regionally applicable",
- "description": "This will be turned on automatically for a new SB namespace created from the portal with the Premium SKUs in a zone-enabled region. Both the Service Bus metadata and the messages data are replicated across datacenters in the availability zones configuration",
- "waf": "Reliability",
- "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
- "id": "29.2",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones"
- },
- {
- "category": "Operations Management",
- "subcategory": "Geo-Disaster Recovery",
- "text": "Plan for Metadata replication during regional failure",
- "description": "If enabled, Implements namespace metadata replication to a secondary region. Does not replicate queue/topic message data. Premium sku only.",
- "waf": "Reliability",
- "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
- "id": "29.3",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery"
- },
- {
- "category": "Operations Management",
- "subcategory": "Geo-Disaster Recovery",
- "text": "Plan for Message replication during regional failure",
- "description": "If an outage cannot be tolerated, do not use the build-in metadata replication option. Leverage a replication pattern to replicate Service Bus messages across two or more sets of cross-region namespaces",
- "waf": "Reliability",
- "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
- "id": "29.4",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "For applications which require high throughput, use Patritioning ",
- "description": "Azure Service Bus uses a message broker to handle messages that are sent to a Service Bus queue or topic. By default, all messages that are sent to a queue or topic are handled by the same message broker process. This architecture can place a limitation on the overall throughput of the message queue. However, you can also partition a queue or topic when it is created",
- "waf": "Reliability",
- "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
- "id": "29.5",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Evaluate Premier-tier benefits of Azure Service Bus",
- "waf": "Reliability",
- "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
- "id": "29.6",
- "cost": 1,
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Ensure that Service Bus Messaging Exceptions are handled properly",
- "waf": "Reliability",
- "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
- "id": "29.7",
- "cost": 1,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Connect to Service Bus with the Advanced Messaging Queue Protocol (AMQP) and use Service Endpoints or Private Endpoints when possible.",
- "waf": "Reliability",
- "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
- "id": "29.8",
- "cost": 1,
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Review the Best Practices for performance improvements using Service Bus Messaging",
- "waf": "Reliability",
- "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
- "id": "29.9",
- "cost": 1,
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Implement geo-replication on the sender and receiver side to protect against outages and disasters",
- "waf": "Reliability",
- "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
- "id": "29.1",
- "cost": 1,
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "If you need mission-critical messaging with queues and topics, Service Bus Premium is recommended with Geo-Disaster Recovery.",
- "waf": "Reliability",
- "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
- "id": "29.11",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Implement high availability for the Service Bus namespace",
- "waf": "Reliability",
- "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
- "id": "29.12",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Ensure related messages are delivered in guaranteed order",
- "waf": "Reliability",
- "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
- "id": "29.13",
- "severity": "High",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Evaluate different Java Messaging Service (JMS) features through the JMS API",
- "waf": "Reliability",
- "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
- "id": "29.14",
- "severity": "Low",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Use .NET Nuget packages to communicate with Service Bus messaging entities",
- "waf": "Reliability",
- "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
- "id": "29.15",
- "severity": "Low",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Operations Management",
- "subcategory": "Best Practices",
- "text": "Implement resilience for transient fault handling when sending or receiving messages",
- "waf": "Reliability",
- "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
- "id": "29.16",
- "severity": "Medium",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
- },
- {
- "category": "Security",
- "subcategory": "Data Protection",
- "text": "Use customer-managed key option in data at rest encryption when required",
- "description": "Azure Service Bus Premium provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
- "id": "A01.01",
- "severity": "Low",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key"
- },
- {
- "category": "Security",
- "subcategory": "Data Protection",
- "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
- "description": "Communication between a client application and an Azure Service Bus namespace is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Service Bus namespace to require that clients send and receive data with a newer version of TLS.",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
- "id": "A01.02",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Avoid using root account when it is not necessary",
- "description": "When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has Manage permissions for the entire namespace. It's recommended that you treat this rule like an administrative root account and don't use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
- "id": "A02.01",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "When possible, your application should be using a managed identity to authenticate to Azure Service Bus. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
- "description": "A Service Bus client app running inside an Azure App Service application or in a virtual machine with enabled managed entities for Azure resources support does not need to handle SAS rules and keys, or any other access tokens. The client app only needs the endpoint address of the Service Bus Messaging namespace. ",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
- "id": "A02.02",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity"
- },
- {
- "category": "Security",
- "subcategory": "Identity and Access Management",
- "text": "Use least privilege data plane RBAC",
- "description": "When creating permissions, provide fine-grained control over a client's access to Azure Service Bus. Permissions in Azure Service Bus can and should be scoped to the individual resource level e.g. queue, topic or subscription. ",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
- "id": "A02.03",
- "severity": "High",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus"
- },
- {
- "category": "Security",
- "subcategory": "Monitoring",
- "text": "Enable logging for security investigation. Use Azure Monitor to trace resource logs and runtime audit logs (currently available only in the premium tier)",
- "description": "Azure Service Bus resource logs include operational logs, virtual network and IP filtering logs. Runtime audit logs capture aggregated diagnostic information for various data plane access operations (such as send or receive messages) in Service Bus.",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
- "id": "A03.01",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "Consider using private endpoints to access Azure Service Bus and disable public network access when applicable.",
- "description": "Azure Service Bus by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Service Bus traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
- "id": "A04.01",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service"
- },
- {
- "category": "Security",
- "subcategory": "Networking",
- "text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
- "description": "With IP firewall, you can restrict the public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
- "waf": "Security",
- "service": "Service Bus",
- "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
- "id": "A04.02",
- "severity": "Medium",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering"
+ "items": [
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Leverage FTA Handbook.",
+ "waf": "Reliability",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "id": "29.1",
+ "severity": "Medium",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Implement geo-replication on the sender and receiver side to protect against outages and disasters",
+ "waf": "Reliability",
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "id": "29.1",
+ "cost": 1,
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "If you need mission-critical messaging with queues and topics, Service Bus Premium is recommended with Geo-Disaster Recovery.",
+ "waf": "Reliability",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "id": "29.11",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Implement high availability for the Service Bus namespace",
+ "waf": "Reliability",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "id": "29.12",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Ensure related messages are delivered in guaranteed order",
+ "waf": "Reliability",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "id": "29.13",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Evaluate different Java Messaging Service (JMS) features through the JMS API",
+ "waf": "Reliability",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "id": "29.14",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Use .NET Nuget packages to communicate with Service Bus messaging entities",
+ "waf": "Reliability",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "id": "29.15",
+ "severity": "Low",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Implement resilience for transient fault handling when sending or receiving messages",
+ "waf": "Reliability",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "id": "29.16",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Leverage Availability Zones if regionally applicable",
+ "description": "This will be turned on automatically for a new SB namespace created from the portal with the Premium SKUs in a zone-enabled region. Both the Service Bus metadata and the messages data are replicated across datacenters in the availability zones configuration",
+ "waf": "Reliability",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "id": "29.2",
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Geo-Disaster Recovery",
+ "text": "Plan for Metadata replication during regional failure",
+ "description": "If enabled, Implements namespace metadata replication to a secondary region. Does not replicate queue/topic message data. Premium sku only.",
+ "waf": "Reliability",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "id": "29.3",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Geo-Disaster Recovery",
+ "text": "Plan for Message replication during regional failure",
+ "description": "If an outage cannot be tolerated, do not use the build-in metadata replication option. Leverage a replication pattern to replicate Service Bus messages across two or more sets of cross-region namespaces",
+ "waf": "Reliability",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "id": "29.4",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "For applications which require high throughput, use Patritioning ",
+ "description": "Azure Service Bus uses a message broker to handle messages that are sent to a Service Bus queue or topic. By default, all messages that are sent to a queue or topic are handled by the same message broker process. This architecture can place a limitation on the overall throughput of the message queue. However, you can also partition a queue or topic when it is created",
+ "waf": "Reliability",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "id": "29.5",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Evaluate Premier-tier benefits of Azure Service Bus",
+ "waf": "Reliability",
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "id": "29.6",
+ "cost": 1,
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Ensure that Service Bus Messaging Exceptions are handled properly",
+ "waf": "Reliability",
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "id": "29.7",
+ "cost": 1,
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Connect to Service Bus with the Advanced Messaging Queue Protocol (AMQP) and use Service Endpoints or Private Endpoints when possible.",
+ "waf": "Reliability",
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "id": "29.8",
+ "cost": 1,
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist"
+ },
+ {
+ "category": "Operations Management",
+ "subcategory": "Best Practices",
+ "text": "Review the Best Practices for performance improvements using Service Bus Messaging",
+ "waf": "Reliability",
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "id": "29.9",
+ "cost": 1,
+ "severity": "High",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Data Protection",
+ "text": "Use customer-managed key option in data at rest encryption when required",
+ "description": "Azure Service Bus Premium provides encryption of data at rest. If you use your own key, the data is still encrypted using the Microsoft-managed key, but in addition the Microsoft-managed key will be encrypted using the customer-managed key. ",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "id": "A01.01",
+ "severity": "Low",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Data Protection",
+ "text": "Enforce a minimum required version of Transport Layer Security (TLS) for requests ",
+ "description": "Communication between a client application and an Azure Service Bus namespace is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces permit clients to send and receive data with TLS 1.0 and above. To enforce stricter security measures, you can configure your Service Bus namespace to require that clients send and receive data with a newer version of TLS.",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "id": "A01.02",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Avoid using root account when it is not necessary",
+ "description": "When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey is automatically created for the namespace. This policy has Manage permissions for the entire namespace. It's recommended that you treat this rule like an administrative root account and don't use it in your application. Using AAD as an authentication provider with RBAC is recommended. ",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "id": "A02.01",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "When possible, disable SAS key authentication (or local authentication) and use only Microsoft Entra ID for authentication",
+ "description": "Microsoft Entra ID provides superior security and ease of use over shared access signatures (SAS). With Microsoft Entra ID, there’s no need to store the tokens in your code and risk potential security vulnerabilities. We recommend that you use Microsoft Entra ID with your Azure Service Bus applications when possible.",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "id": "A02.02",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "graph": "Resources | where type =~ 'microsoft.servicebus/namespaces' | extend compliant = iif(properties.disableLocalAuth == 'false', 'No', 'Yes') | project id, compliant",
+ "link": "https://learn.microsoft.com/en-us/azure/service-bus-messaging/disable-local-authentication"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Identity and Access Management",
+ "text": "Use least privilege data plane RBAC",
+ "description": "When creating permissions, provide fine-grained control over a client's access to Azure Service Bus. Permissions in Azure Service Bus can and should be scoped to the individual resource level e.g. queue, topic or subscription. ",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "id": "A02.03",
+ "severity": "High",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Monitoring",
+ "text": "Enable logging for security investigation. Use Azure Monitor to trace resource logs and runtime audit logs (currently available only in the premium tier)",
+ "description": "Azure Service Bus resource logs include operational logs, virtual network and IP filtering logs. Runtime audit logs capture aggregated diagnostic information for various data plane access operations (such as send or receive messages) in Service Bus.",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "id": "A03.01",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Consider using private endpoints to access Azure Service Bus and disable public network access when applicable.",
+ "description": "Azure Service Bus by default has a public IP address and is Internet-reachable. Private endpoints allow traffic between your virtual network and Azure Service Bus traverses over the Microsoft backbone network. In addition to that, you should disable public endpoints if those are not used. ",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "id": "A04.01",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service"
+ },
+ {
+ "category": "Security",
+ "subcategory": "Networking",
+ "text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
+ "description": "With IP firewall, you can restrict the public endpoint further to only a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing) notation. ",
+ "waf": "Security",
+ "service": "Service Bus",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "id": "A04.02",
+ "severity": "Medium",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering"
+ }
+ ],
+ "categories": [
+ {
+ "name": "Identity and Access Management"
+ },
+ {
+ "name": "Network Topology and Connectivity"
+ },
+ {
+ "name": "BC and DR"
+ },
+ {
+ "name": "Governance and Security"
+ },
+ {
+ "name": "Cost Governance"
+ },
+ {
+ "name": "Operations Management"
+ },
+ {
+ "name": "Application Deployment"
+ },
+ {
+ "name": "Security"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Security"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Performance"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "status": [
+ {
+ "name": "Not verified",
+ "description": "This check has not been looked at yet"
+ },
+ {
+ "name": "Open",
+ "description": "There is an action item associated to this check"
+ },
+ {
+ "name": "Fulfilled",
+ "description": "This check has been verified, and there are no further action items associated to it"
+ },
+ {
+ "name": "Not required",
+ "description": "Recommendation understood, but not needed by current requirements"
+ },
+ {
+ "name": "N/A",
+ "description": "Not applicable for current design"
+ }
+ ],
+ "severities": [
+ {
+ "name": "High"
+ },
+ {
+ "name": "Medium"
+ },
+ {
+ "name": "Low"
+ }
+ ],
+ "metadata": {
+ "name": "Service Bus Review Checklist",
+ "state": "Preview",
+ "waf": "all",
+ "timestamp": "September 17, 2024"
}
- ],
- "categories": [
- {
- "name": "Identity and Access Management"
- },
- {
- "name": "Network Topology and Connectivity"
- },
- {
- "name": "BC and DR"
- },
- {
- "name": "Governance and Security"
- },
- {
- "name": "Cost Governance"
- },
- {
- "name": "Operations Management"
- },
- {
- "name": "Application Deployment"
- },
- {
- "name": "Security"
- }
- ],
- "waf": [
- {
- "name": "Reliability"
- },
- {
- "name": "Security"
- },
- {
- "name": "Cost"
- },
- {
- "name": "Operations"
- },
- {
- "name": "Performance"
- }
- ],
- "yesno": [
- {
- "name": "Yes"
- },
- {
- "name": "No"
- }
- ],
- "status": [
- {
- "name": "Not verified",
- "description": "This check has not been looked at yet"
- },
- {
- "name": "Open",
- "description": "There is an action item associated to this check"
- },
- {
- "name": "Fulfilled",
- "description": "This check has been verified, and there are no further action items associated to it"
- },
- {
- "name": "Not required",
- "description": "Recommendation understood, but not needed by current requirements"
- },
- {
- "name": "N/A",
- "description": "Not applicable for current design"
- }
- ],
- "severities": [
- {
- "name": "High"
- },
- {
- "name": "Medium"
- },
- {
- "name": "Low"
- }
- ],
- "metadata": {
- "name": "Service Bus Review Checklist",
- "state": "Preview",
- "waf": "all",
- "timestamp": "April 05, 2024"
- }
}
diff --git a/checklists/servicebus_checklist.es.json b/checklists/servicebus_checklist.es.json
new file mode 100644
index 000000000..c1ed33a73
--- /dev/null
+++ b/checklists/servicebus_checklist.es.json
@@ -0,0 +1,367 @@
+{
+ "categories": [
+ {
+ "name": "Gestión de identidades y accesos"
+ },
+ {
+ "name": "Topología de red y conectividad"
+ },
+ {
+ "name": "BC y RD"
+ },
+ {
+ "name": "Gobernabilidad y seguridad"
+ },
+ {
+ "name": "Gobernanza de costos"
+ },
+ {
+ "name": "Gestión de Operaciones"
+ },
+ {
+ "name": "Implementación de aplicaciones"
+ },
+ {
+ "name": "Seguridad"
+ }
+ ],
+ "items": [
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "id": "29.1",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Aproveche el Manual de TLC.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "cost": 1,
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "id": "29.1",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Implemente la replicación geográfica en el lado del remitente y del receptor para protegerse contra interrupciones y desastres",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "id": "29.11",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Si necesita mensajería crítica con colas y temas, se recomienda Service Bus Premium con Geo-Disaster Recovery.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "id": "29.12",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Implementación de alta disponibilidad para el espacio de nombres de Service Bus",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "id": "29.13",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Alto",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Asegúrese de que los mensajes relacionados se entreguen en el orden garantizado",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "id": "29.14",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Bajo",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Evalúe diferentes características de Java Messaging Service (JMS) a través de la API de JMS",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "id": "29.15",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Bajo",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Uso de paquetes Nuget de .NET para comunicarse con entidades de mensajería de Service Bus",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "id": "29.16",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Implementación de la resiliencia para el control de errores transitorios al enviar o recibir mensajes",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "description": "Esto se activará automáticamente para un nuevo espacio de nombres SB creado desde el portal con las SKU Premium en una región habilitada para zonas. Tanto los metadatos de Service Bus como los datos de mensajes se replican en los centros de datos en la configuración de zonas de disponibilidad",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "id": "29.2",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
+ "severity": "Alto",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Aproveche las zonas de disponibilidad si corresponden regionalmente",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "description": "Si se habilita, implementa la replicación de metadatos del espacio de nombres en una región secundaria. No replica los datos de mensajes de cola/tema. Solo SKU Premium.",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "id": "29.3",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
+ "severity": "Medio",
+ "subcategory": "Recuperación de desastres geográficos",
+ "text": "Planeación de la replicación de metadatos durante un error regional",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "description": "Si no se puede tolerar una interrupción, no utilice la opción de replicación de metadatos integrada. Aproveche un patrón de replicación para replicar mensajes de Service Bus en dos o más conjuntos de espacios de nombres entre regiones",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "id": "29.4",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
+ "severity": "Medio",
+ "subcategory": "Recuperación de desastres geográficos",
+ "text": "Planeación de la replicación de mensajes durante un error regional",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "description": "Azure Service Bus usa un agente de mensajes para controlar los mensajes que se envían a una cola o un tema de Service Bus. De forma predeterminada, todos los mensajes que se envían a una cola o tema se controlan mediante el mismo proceso de agente de mensajes. Esta arquitectura puede limitar el rendimiento general de la cola de mensajes. Sin embargo, también puede particionar una cola o un tema cuando se crea",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "id": "29.5",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Para aplicaciones que requieren un alto rendimiento, utilice Patritioning ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "cost": 1,
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "id": "29.6",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Evalúe las ventajas de nivel Premier de Azure Service Bus",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "cost": 1,
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "id": "29.7",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
+ "severity": "Alto",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Asegúrese de que las excepciones de mensajería de Service Bus se controlan correctamente",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "cost": 1,
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "id": "29.8",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Medio",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Conéctese a Service Bus con el protocolo de cola de mensajería avanzada (AMQP) y use puntos de conexión de servicio o puntos de conexión privados cuando sea posible.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Gestión de Operaciones",
+ "cost": 1,
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "id": "29.9",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
+ "severity": "Alto",
+ "subcategory": "Prácticas recomendadas",
+ "text": "Revise los procedimientos recomendados para mejorar el rendimiento mediante la mensajería de Service Bus",
+ "waf": "Fiabilidad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Azure Service Bus Premium proporciona cifrado de datos en reposo. Si usa su propia clave, los datos se siguen cifrando con la clave administrada por Microsoft, pero además la clave administrada por Microsoft se cifrará con la clave administrada por el cliente. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "Bajo",
+ "subcategory": "Protección de datos",
+ "text": "Usar la opción de clave administrada por el cliente en el cifrado de datos en reposo cuando sea necesario",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "La comunicación entre una aplicación cliente y un espacio de nombres de Azure Service Bus se cifra mediante la seguridad de la capa de transporte (TLS). Los espacios de nombres de Azure Service Bus permiten a los clientes enviar y recibir datos con TLS 1.0 y versiones posteriores. Para aplicar medidas de seguridad más estrictas, puede configurar el espacio de nombres de Service Bus para que requiera que los clientes envíen y reciban datos con una versión más reciente de TLS.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "id": "A01.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "subcategory": "Protección de datos",
+ "text": "Aplicar una versión mínima requerida de la seguridad de la capa de transporte (TLS) para las solicitudes ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Al crear un espacio de nombres de Service Bus, se crea automáticamente una regla de SAS denominada RootManageSharedAccessKey para el espacio de nombres. Esta política tiene permisos de administración para todo el espacio de nombres. Se recomienda tratar esta regla como una cuenta raíz administrativa y no usarla en la aplicación. Se recomienda usar AAD como proveedor de autenticación con RBAC. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Evite usar la cuenta root cuando no sea necesario",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Una aplicación cliente de Service Bus que se ejecuta dentro de una aplicación de Azure App Service o en una máquina virtual con entidades administradas habilitadas para la compatibilidad con recursos de Azure no necesita controlar reglas y claves de SAS, ni ningún otro token de acceso. La aplicación cliente solo necesita la dirección del punto de conexión del espacio de nombres de mensajería de Service Bus. ",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "id": "A02.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Cuando sea posible, la aplicación debe usar una identidad administrada para autenticarse en Azure Service Bus. Si no es así, considere la posibilidad de tener la credencial de almacenamiento (SAS, credencial de entidad de servicio) en Azure Key Vault o en un servicio equivalente",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Al crear permisos, proporcione un control detallado sobre el acceso de un cliente a Azure Service Bus. Los permisos de Azure Service Bus pueden y deben limitarse al nivel de recurso individual, por ejemplo, cola, tema o suscripción. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "id": "A02.03",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "Alto",
+ "subcategory": "Gestión de identidades y accesos",
+ "text": "Usar RBAC del plano de datos con privilegios mínimos",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Los registros de recursos de Azure Service Bus incluyen registros operativos, redes virtuales y registros de filtrado de IP. Los registros de auditoría en tiempo de ejecución capturan información de diagnóstico agregada para varias operaciones de acceso al plano de datos (como enviar o recibir mensajes) en Service Bus.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "subcategory": "Monitorización",
+ "text": "Habilite el registro para la investigación de seguridad. Use Azure Monitor para realizar un seguimiento de los registros de recursos y los registros de auditoría en tiempo de ejecución (actualmente solo disponible en el nivel Premium)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "De forma predeterminada, Azure Service Bus tiene una dirección IP pública y es accesible desde Internet. Los puntos de conexión privados permiten el tráfico entre la red virtual y los recorridos de Azure Service Bus a través de la red troncal de Microsoft. Además de eso, debe deshabilitar los puntos de conexión públicos si no se utilizan. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "subcategory": "Gestión de redes",
+ "text": "Considere la posibilidad de usar puntos de conexión privados para acceder a Azure Service Bus y deshabilitar el acceso a la red pública cuando corresponda.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Seguridad"
+ },
+ {
+ "category": "Seguridad",
+ "description": "Con el firewall de IP, puede restringir aún más el punto de conexión público a solo un conjunto de direcciones IPv4 o rangos de direcciones IPv4 en notación CIDR (Classless Inter-Domain Routing). ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "id": "A04.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "subcategory": "Gestión de redes",
+ "text": "Considere la posibilidad de permitir solo el acceso al espacio de nombres de Azure Service Bus desde direcciones IP o intervalos específicos",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Seguridad"
+ }
+ ],
+ "metadata": {
+ "name": "Service Bus Review Checklist",
+ "state": "Preview",
+ "timestamp": "September 17, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Medio"
+ },
+ {
+ "name": "Bajo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta comprobación aún no se ha examinado",
+ "name": "No verificado"
+ },
+ {
+ "description": "Hay un elemento de acción asociado a esta comprobación",
+ "name": "Abrir"
+ },
+ {
+ "description": "Esta comprobación se ha verificado y no hay más elementos de acción asociados a ella",
+ "name": "Cumplido"
+ },
+ {
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
+ "name": "No es necesario"
+ },
+ {
+ "description": "No aplicable para el diseño actual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidad"
+ },
+ {
+ "name": "Seguridad"
+ },
+ {
+ "name": "Costar"
+ },
+ {
+ "name": "Operaciones"
+ },
+ {
+ "name": "Rendimiento"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sí"
+ },
+ {
+ "name": "No"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/servicebus_checklist.ja.json b/checklists/servicebus_checklist.ja.json
new file mode 100644
index 000000000..b469bc998
--- /dev/null
+++ b/checklists/servicebus_checklist.ja.json
@@ -0,0 +1,367 @@
+{
+ "categories": [
+ {
+ "name": "ID およびアクセス管理"
+ },
+ {
+ "name": "ネットワーク トポロジと接続性"
+ },
+ {
+ "name": "BC と DR"
+ },
+ {
+ "name": "ガバナンスとセキュリティ"
+ },
+ {
+ "name": "コストガバナンス"
+ },
+ {
+ "name": "オペレーションマネジメント"
+ },
+ {
+ "name": "アプリケーションのデプロイメント"
+ },
+ {
+ "name": "安全"
+ }
+ ],
+ "items": [
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "id": "29.1",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "FTAハンドブックを活用します。",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "cost": 1,
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "id": "29.1",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "送信側と受信側に geo レプリケーションを実装して、停止や災害から保護します",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "id": "29.11",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "キューとトピックを含むミッション クリティカルなメッセージングが必要な場合は、Service Bus Premium と Geo-Disaster Recovery をお勧めします。",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "id": "29.12",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "Service Bus 名前空間の高可用性を実装する",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "id": "29.13",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "高い",
+ "subcategory": "ベストプラクティス",
+ "text": "関連メッセージが保証された順序で配信されるようにする",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "id": "29.14",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "低い",
+ "subcategory": "ベストプラクティス",
+ "text": "JMS APIを使用したさまざまなJava Messaging Service(JMS)機能の評価",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "id": "29.15",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "低い",
+ "subcategory": "ベストプラクティス",
+ "text": ".NET Nuget パッケージを使用して Service Bus メッセージング エンティティと通信する",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "id": "29.16",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "メッセージの送受信時の一時的な障害処理の回復性を実装する",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "description": "これは、ポータルから作成された新しい SB 名前空間で、ゾーン対応リージョンの Premium SKU に対して自動的に有効になります。Service Bus メタデータとメッセージ データの両方が、可用性ゾーン構成のデータセンター間でレプリケートされます",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "id": "29.2",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
+ "severity": "高い",
+ "subcategory": "ベストプラクティス",
+ "text": "Availability Zones を活用する (地域的に該当する場合)",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "description": "有効にすると、セカンダリ リージョンへの名前空間メタデータ レプリケーションが実装されます。キュー/トピック・メッセージ・データを複製しません。プレミアムSKUのみ。",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "id": "29.3",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
+ "severity": "中程度",
+ "subcategory": "ジオディザスタリカバリ",
+ "text": "リージョン障害時のメタデータ レプリケーションの計画",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "description": "停止が許容できない場合は、組み込みのメタデータ レプリケーション オプションを使用しないでください。レプリケーション パターンを活用して、2 つ以上のリージョン間名前空間のセット間で Service Bus メッセージをレプリケートします",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "id": "29.4",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
+ "severity": "中程度",
+ "subcategory": "ジオディザスタリカバリ",
+ "text": "リージョン障害時のメッセージレプリケーションの計画",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "description": "Azure Service Bus は、メッセージ ブローカーを使用して、Service Bus キューまたはトピックに送信されるメッセージを処理します。デフォルトでは、キューまたはトピックに送信されるすべてのメッセージは、同じメッセージ・ブローカー・プロセスによって処理されます。このアーキテクチャでは、メッセージ キューの全体的なスループットに制限が課せられる可能性があります。ただし、キューまたはトピックは、作成時にパーティション分割することもできます",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "id": "29.5",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "高いスループットが必要なアプリケーションには、Patritioningを使用してください",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "cost": 1,
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "id": "29.6",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "Azure Service Bus の Premier レベルの利点を評価する",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "cost": 1,
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "id": "29.7",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
+ "severity": "高い",
+ "subcategory": "ベストプラクティス",
+ "text": "Service Bus メッセージングの例外が適切に処理されていることを確認する",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "cost": 1,
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "id": "29.8",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中程度",
+ "subcategory": "ベストプラクティス",
+ "text": "Advanced Messaging Queue Protocol (AMQP) を使用して Service Bus に接続し、可能な場合はサービス エンドポイントまたはプライベート エンドポイントを使用します。",
+ "waf": "確実"
+ },
+ {
+ "category": "オペレーションマネジメント",
+ "cost": 1,
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "id": "29.9",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
+ "severity": "高い",
+ "subcategory": "ベストプラクティス",
+ "text": "Service Bus メッセージングを使用したパフォーマンス向上のベスト プラクティスを確認する",
+ "waf": "確実"
+ },
+ {
+ "category": "安全",
+ "description": "Azure Service Bus Premium は、保存データの暗号化を提供します。独自のキーを使用する場合、データは引き続き Microsoft マネージド キーを使用して暗号化されますが、さらに Microsoft マネージド キーはカスタマー マネージド キーを使用して暗号化されます。",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "低い",
+ "subcategory": "データ保護",
+ "text": "必要に応じて、保存データの暗号化でカスタマー マネージド キー オプションを使用する",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "クライアント アプリケーションと Azure Service Bus 名前空間間の通信は、トランスポート層セキュリティ (TLS) を使用して暗号化されます。Azure Service Bus 名前空間を使用すると、クライアントは TLS 1.0 以上でデータを送受信できます。より厳格なセキュリティ対策を適用するために、クライアントが新しいバージョンの TLS を使用してデータを送受信することを要求するように Service Bus 名前空間を構成できます。",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "id": "A01.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "subcategory": "データ保護",
+ "text": "要求に対して最低限必要なバージョンの Transport Layer Security (TLS) を適用する",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Service Bus 名前空間を作成すると、名前空間に対して RootManageSharedAccessKey という名前の SAS ルールが自動的に作成されます。このポリシーには、名前空間全体に対する Manage アクセス許可があります。このルールは管理ルート アカウントのように扱い、アプリケーションで使用しないことをお勧めします。 RBAC を使用した認証プロバイダーとして AAD を使用することをお勧めします。",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "必要のないときに root アカウントを使用することは避けてください",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Azure App Service アプリケーション内、または Azure リソースのサポートに対して有効なマネージド エンティティを持つ仮想マシンで実行されている Service Bus クライアント アプリは、SAS のルールとキー、またはその他のアクセス トークンを処理する必要はありません。クライアント アプリに必要なのは、Service Bus メッセージング名前空間のエンドポイント アドレスのみです。",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "id": "A02.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "subcategory": "ID およびアクセス管理",
+ "text": "可能な場合は、アプリケーションでマネージド ID を使用して Azure Service Bus に対する認証を行う必要があります。そうでない場合は、ストレージ資格情報 (SAS、サービス プリンシパル資格情報) を Azure Key Vault または同等のサービスに持つことを検討してください",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Azure Service Bus のアクセス許可は、キュー、トピック、サブスクリプションなどの個々のリソース レベルにスコープを設定でき、またそうする必要があります。",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "id": "A02.03",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "高い",
+ "subcategory": "ID およびアクセス管理",
+ "text": "最小特権データ プレーン RBAC を使用する",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Azure Service Bus リソース ログには、操作ログ、仮想ネットワーク、IP フィルタリング ログが含まれます。ランタイム監査ログは、Service Bus でのさまざまなデータ プレーン アクセス操作 (メッセージの送受信など) の集計された診断情報をキャプチャします。",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "subcategory": "モニタリング",
+ "text": "セキュリティ調査のログ記録を有効にします。Azure Monitor を使用してリソース ログとランタイム監査ログをトレースする (現在は Premium レベルでのみ使用できます)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Azure Service Bus は、既定ではパブリック IP アドレスを持ち、インターネットからアクセスできます。プライベート エンドポイントを使用すると、仮想ネットワークと Azure Service Bus の間のトラフィックは、Microsoft のバックボーン ネットワークを経由します。それに加えて、パブリックエンドポイントが使用されていない場合は無効にする必要があります。",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "subcategory": "ネットワーキング",
+ "text": "プライベート エンドポイントを使用して Azure Service Bus にアクセスし、該当する場合はパブリック ネットワーク アクセスを無効にすることを検討してください。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "IP ファイアウォールを使用すると、パブリック エンドポイントを IPv4 アドレスのセットのみ、または CIDR (Classless Inter-Domain Routing) 表記の IPv4 アドレス範囲のみにさらに制限できます。",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "id": "A04.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "subcategory": "ネットワーキング",
+ "text": "特定の IP アドレスまたは範囲からのみ Azure Service Bus 名前空間へのアクセスを許可することを検討してください",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
+ }
+ ],
+ "metadata": {
+ "name": "Service Bus Review Checklist",
+ "state": "Preview",
+ "timestamp": "September 17, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高い"
+ },
+ {
+ "name": "中程度"
+ },
+ {
+ "name": "低い"
+ }
+ ],
+ "status": [
+ {
+ "description": "このチェックはまだ見ていません",
+ "name": "未確認"
+ },
+ {
+ "description": "このチェックにはアクションアイテムが関連付けられています",
+ "name": "開ける"
+ },
+ {
+ "description": "このチェックは検証済みであり、これ以上のアクション アイテムは関連付けられていません",
+ "name": "達成"
+ },
+ {
+ "description": "推奨事項は理解されているが、現在の要件では必要ではない",
+ "name": "必須ではありません"
+ },
+ {
+ "description": "現在のデザインには適用されません",
+ "name": "該当なし"
+ }
+ ],
+ "waf": [
+ {
+ "name": "確実"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "費用"
+ },
+ {
+ "name": "オペレーションズ"
+ },
+ {
+ "name": "パフォーマンス"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "はい"
+ },
+ {
+ "name": "いいえ"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/servicebus_checklist.ko.json b/checklists/servicebus_checklist.ko.json
new file mode 100644
index 000000000..ae118d051
--- /dev/null
+++ b/checklists/servicebus_checklist.ko.json
@@ -0,0 +1,367 @@
+{
+ "categories": [
+ {
+ "name": "ID 및 액세스 관리"
+ },
+ {
+ "name": "네트워크 토폴로지 및 연결성"
+ },
+ {
+ "name": "BC 및 DR"
+ },
+ {
+ "name": "거버넌스 및 보안"
+ },
+ {
+ "name": "비용 관리"
+ },
+ {
+ "name": "운영 관리"
+ },
+ {
+ "name": "응용 프로그램 배포"
+ },
+ {
+ "name": "안전"
+ }
+ ],
+ "items": [
+ {
+ "category": "운영 관리",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "id": "29.1",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "FTA 핸드북을 활용하십시오.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "cost": 1,
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "id": "29.1",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "송신자 및 수신자 측에서 지역 복제를 구현하여 중단 및 재해로부터 보호합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "id": "29.11",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "큐 및 토픽이 포함된 중요 업무용 메시징이 필요한 경우 Geo-Disaster Recovery와 함께 Service Bus Premium을 사용하는 것이 좋습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "id": "29.12",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "Service Bus 네임스페이스에 대한 고가용성 구현",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "id": "29.13",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "높다",
+ "subcategory": "권장사항",
+ "text": "관련 메시지가 보장된 순서로 전달되도록 보장",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "id": "29.14",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "낮다",
+ "subcategory": "권장사항",
+ "text": "JMS API를 통해 다양한 JMS(Java Messaging Service) 기능 평가",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "id": "29.15",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "낮다",
+ "subcategory": "권장사항",
+ "text": ".NET Nuget 패키지를 사용하여 Service Bus 메시징 엔터티와 통신Use .NET Nuget packages to communicate with Service Bus messaging entities",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "id": "29.16",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "메시지를 보내거나 받을 때 일시적인 오류 처리를 위한 복원력 구현Implement resilience for transient fault handling when sending or receiving messages",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "description": "이 기능은 영역 사용 지역의 프리미엄 SKU를 사용하여 포털에서 만든 새 SB 네임스페이스에 대해 자동으로 설정됩니다. Service Bus 메타데이터와 메시지 데이터는 모두 가용성 영역 구성의 데이터 센터 간에 복제됩니다",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "id": "29.2",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
+ "severity": "높다",
+ "subcategory": "권장사항",
+ "text": "지역적으로 적용 가능한 경우 가용 영역 활용Leverage Availability Zones if regionally applicable",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "description": "사용하도록 설정하면 보조 지역에 대한 네임스페이스 메타데이터 복제를 구현합니다. 큐/토픽 메시지 데이터를 복제하지 않습니다. 프리미엄 SKU만 해당됩니다.",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "id": "29.3",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
+ "severity": "보통",
+ "subcategory": "Geo-Disaster Recovery",
+ "text": "지역 오류 발생 시 메타데이터 복제 계획",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "description": "중단을 허용할 수 없는 경우 기본 제공 메타데이터 복제 옵션을 사용하지 마십시오. 복제 패턴을 활용하여 둘 이상의 지역 간 네임스페이스 집합에서 Service Bus 메시지를 복제합니다.",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "id": "29.4",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
+ "severity": "보통",
+ "subcategory": "Geo-Disaster Recovery",
+ "text": "지역 오류 중 메시지 복제 계획Plan for Message replication during regional failure",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "description": "Azure Service Bus는 메시지 브로커를 사용하여 Service Bus 큐 또는 토픽으로 전송되는 메시지를 처리합니다. 기본적으로 큐 또는 주제로 전송되는 모든 메시지는 동일한 메시지 브로커 프로세스에 의해 처리됩니다. 이 아키텍처는 메시지 큐의 전체 처리량을 제한할 수 있습니다. 그러나 큐 또는 항목을 만들 때 분할할 수도 있습니다",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "id": "29.5",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "높은 처리량이 필요한 응용 프로그램의 경우 Patritioning을 사용합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "cost": 1,
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "id": "29.6",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "Azure Service Bus의 프리미어 계층 혜택 평가",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "cost": 1,
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "id": "29.7",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
+ "severity": "높다",
+ "subcategory": "권장사항",
+ "text": "Service Bus 메시징 예외가 제대로 처리되었는지 확인",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "cost": 1,
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "id": "29.8",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "보통",
+ "subcategory": "권장사항",
+ "text": "AMQP(Advanced Messaging Queue Protocol)를 사용하여 Service Bus에 연결하고 가능한 경우 서비스 엔드포인트 또는 프라이빗 엔드포인트를 사용합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "운영 관리",
+ "cost": 1,
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "id": "29.9",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
+ "severity": "높다",
+ "subcategory": "권장사항",
+ "text": "Service Bus 메시징을 사용하여 성능 향상을 위한 모범 사례를 검토합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "category": "안전",
+ "description": "Azure Service Bus 프리미엄은 미사용 데이터의 암호화를 제공합니다. 사용자 고유의 키를 사용하는 경우 데이터는 여전히 Microsoft 관리형 키를 사용하여 암호화되지만 Microsoft 관리형 키도 고객 관리형 키를 사용하여 암호화됩니다. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "낮다",
+ "subcategory": "데이터 보호",
+ "text": "필요한 경우 미사용 데이터 암호화에서 고객 관리형 키 옵션을 사용합니다",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "클라이언트 애플리케이션과 Azure Service Bus 네임스페이스 간의 통신은 TLS(전송 계층 보안)를 사용하여 암호화됩니다. Azure Service Bus 네임스페이스를 사용하면 클라이언트가 TLS 1.0 이상을 사용하여 데이터를 보내고 받을 수 있습니다. 보다 엄격한 보안 조치를 적용하기 위해 클라이언트가 최신 버전의 TLS를 사용하여 데이터를 보내고 받도록 Service Bus 네임스페이스를 구성할 수 있습니다.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "id": "A01.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "보통",
+ "subcategory": "데이터 보호",
+ "text": "요청에 필요한 최소 버전의 TLS(전송 계층 보안) 적용 ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Service Bus 네임스페이스를 만들면 네임스페이스에 대해 RootManageSharedAccessKey라는 SAS 규칙이 자동으로 만들어집니다. 이 정책에는 전체 네임스페이스에 대한 관리 권한이 있습니다. 이 규칙은 관리 루트 계정처럼 취급하고 애플리케이션에서 사용하지 않는 것이 좋습니다. RBAC에서 AAD를 인증 공급자로 사용하는 것이 좋습니다. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "필요하지 않은 경우 루트 계정을 사용하지 마십시오.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Azure 리소스 지원을 위해 관리되는 엔터티가 사용하도록 설정된 가상 머신 또는 Azure App Service 애플리케이션 내에서 실행되는 Service Bus 클라이언트 앱은 SAS 규칙 및 키 또는 기타 액세스 토큰을 처리할 필요가 없습니다. 클라이언트 앱에는 Service Bus 메시징 네임스페이스의 엔드포인트 주소만 필요합니다. ",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "id": "A02.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "보통",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "가능한 경우 애플리케이션은 관리 ID를 사용하여 Azure Service Bus에 인증해야 합니다. 그렇지 않은 경우 Azure Key Vault 또는 동등한 서비스에 스토리지 자격 증명(SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "사용 권한을 만들 때 Azure Service Bus에 대한 클라이언트의 액세스를 세밀하게 제어할 수 있습니다. Azure Service Bus의 사용 권한은 개별 리소스 수준(예: 큐, 토픽 또는 구독)으로 범위를 지정할 수 있으며 지정해야 합니다. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "id": "A02.03",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "높다",
+ "subcategory": "ID 및 액세스 관리",
+ "text": "최소 권한 데이터 플레인 RBAC 사용",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Azure Service Bus 리소스 로그에는 작업 로그, 가상 네트워크 및 IP 필터링 로그가 포함됩니다. 런타임 감사 로그는 Service Bus에서 다양한 데이터 평면 액세스 작업(예: 메시지 보내기 또는 받기)에 대해 집계된 진단 정보를 캡처합니다.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "보통",
+ "subcategory": "모니터링",
+ "text": "보안 조사를 위해 로깅을 사용하도록 설정합니다. Azure Monitor를 사용하여 리소스 로그 및 런타임 감사 로그 추적(현재 프리미엄 계층에서만 사용 가능)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "Azure Service Bus는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 가상 네트워크와 Azure Service Bus 간의 트래픽이 Microsoft 백본 네트워크를 통과할 수 있습니다. 또한 공용 엔드포인트를 사용하지 않는 경우 사용하지 않도록 설정해야 합니다. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "보통",
+ "subcategory": "네트워킹",
+ "text": "프라이빗 엔드포인트를 사용하여 Azure Service Bus에 액세스하고 해당하는 경우 공용 네트워크 액세스를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "안전"
+ },
+ {
+ "category": "안전",
+ "description": "IP 방화벽을 사용하면 퍼블릭 엔드포인트를 CIDR(Classless Inter-Domain Routing) 표기법의 IPv4 주소 집합 또는 IPv4 주소 범위로만 추가로 제한할 수 있습니다. ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "id": "A04.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "보통",
+ "subcategory": "네트워킹",
+ "text": "특정 IP 주소 또는 범위에서만 Azure Service Bus 네임스페이스에 액세스할 수 있도록 허용하는 것이 좋습니다",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "안전"
+ }
+ ],
+ "metadata": {
+ "name": "Service Bus Review Checklist",
+ "state": "Preview",
+ "timestamp": "September 17, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "높다"
+ },
+ {
+ "name": "보통"
+ },
+ {
+ "name": "낮다"
+ }
+ ],
+ "status": [
+ {
+ "description": "이 검사는 아직 검토되지 않았습니다",
+ "name": "확인되지 않음"
+ },
+ {
+ "description": "이 검사와 연관된 작업 항목이 있습니다",
+ "name": "열다"
+ },
+ {
+ "description": "이 검사는 확인되었으며 이와 관련된 추가 작업 항목이 없습니다",
+ "name": "성취"
+ },
+ {
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
+ "name": "필요 없음"
+ },
+ {
+ "description": "현재 설계에는 적용되지 않습니다.",
+ "name": "해당 없음"
+ }
+ ],
+ "waf": [
+ {
+ "name": "신뢰도"
+ },
+ {
+ "name": "안전"
+ },
+ {
+ "name": "비용"
+ },
+ {
+ "name": "작업"
+ },
+ {
+ "name": "공연"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "예"
+ },
+ {
+ "name": "아니요"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/servicebus_checklist.pt.json b/checklists/servicebus_checklist.pt.json
new file mode 100644
index 000000000..a7921a661
--- /dev/null
+++ b/checklists/servicebus_checklist.pt.json
@@ -0,0 +1,367 @@
+{
+ "categories": [
+ {
+ "name": "Gerenciamento de identidade e acesso"
+ },
+ {
+ "name": "Topologia e conectividade de rede"
+ },
+ {
+ "name": "BC e DR"
+ },
+ {
+ "name": "Governança e segurança"
+ },
+ {
+ "name": "Governança de custos"
+ },
+ {
+ "name": "Gestão de Operações"
+ },
+ {
+ "name": "Implantação de aplicativos"
+ },
+ {
+ "name": "Segurança"
+ }
+ ],
+ "items": [
+ {
+ "category": "Gestão de Operações",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "id": "29.1",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Aproveite o Manual do FTA.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "cost": 1,
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "id": "29.1",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Implemente a replicação geográfica no lado do remetente e do destinatário para proteger contra interrupções e desastres",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "id": "29.11",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Se você precisar de mensagens críticas com filas e tópicos, o Service Bus Premium é recomendado com a Recuperação de Desastre Geográfico.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "id": "29.12",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Implementar alta disponibilidade para o namespace do Barramento de Serviço",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "id": "29.13",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Alto",
+ "subcategory": "Melhores práticas",
+ "text": "Certifique-se de que as mensagens relacionadas sejam entregues em ordem garantida",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "id": "29.14",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Baixo",
+ "subcategory": "Melhores práticas",
+ "text": "Avalie diferentes recursos do Java Messaging Service (JMS) por meio da API JMS",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "id": "29.15",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Baixo",
+ "subcategory": "Melhores práticas",
+ "text": "Usar pacotes Nuget do .NET para se comunicar com entidades de mensagens do Barramento de Serviço",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "id": "29.16",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Implementar resiliência para tratamento de falhas transitórias ao enviar ou receber mensagens",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "description": "Isso será ativado automaticamente para um novo namespace SB criado no portal com os SKUs Premium em uma região habilitada para zona. Os metadados do Barramento de Serviço e os dados das mensagens são replicados entre datacenters na configuração de zonas de disponibilidade",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "id": "29.2",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
+ "severity": "Alto",
+ "subcategory": "Melhores práticas",
+ "text": "Aproveite as zonas de disponibilidade, se aplicável regionalmente",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "description": "Se habilitado, implementa a replicação de metadados de namespace para uma região secundária. Não replica dados de mensagens de fila/tópico. Apenas sku premium.",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "id": "29.3",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
+ "severity": "Média",
+ "subcategory": "Recuperação de desastres geográficos",
+ "text": "Planejar a replicação de metadados durante a falha regional",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "description": "Se uma interrupção não puder ser tolerada, não use a opção de replicação de metadados integrados. Aproveitar um padrão de replicação para replicar mensagens do Barramento de Serviço em dois ou mais conjuntos de namespaces entre regiões",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "id": "29.4",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
+ "severity": "Média",
+ "subcategory": "Recuperação de desastres geográficos",
+ "text": "Planejar a replicação de mensagens durante uma falha regional",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "description": "O Barramento de Serviço do Azure usa um agente de mensagens para lidar com mensagens enviadas para uma fila ou tópico do Barramento de Serviço. Por padrão, todas as mensagens enviadas para uma fila ou tópico são tratadas pelo mesmo processo do agente de mensagens. Essa arquitetura pode colocar uma limitação na taxa de transferência geral da fila de mensagens. No entanto, você também pode particionar uma fila ou tópico quando ele é criado",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "id": "29.5",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Para aplicações que exigem alto rendimento, use Patritioning ",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "cost": 1,
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "id": "29.6",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Avaliar os benefícios da camada Premier do Barramento de Serviço do Azure",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "cost": 1,
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "id": "29.7",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
+ "severity": "Alto",
+ "subcategory": "Melhores práticas",
+ "text": "Verifique se as exceções de mensagens do Service Bus são tratadas corretamente",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "cost": 1,
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "id": "29.8",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "Média",
+ "subcategory": "Melhores práticas",
+ "text": "Conecte-se ao Barramento de Serviço com o AMQP (Advanced Messaging Queue Protocol) e use Pontos de Extremidade de Serviço ou Pontos de Extremidade Privados quando possível.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Gestão de Operações",
+ "cost": 1,
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "id": "29.9",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
+ "severity": "Alto",
+ "subcategory": "Melhores práticas",
+ "text": "Examine as práticas recomendadas para melhorias de desempenho usando o sistema de mensagens do Barramento de Serviço",
+ "waf": "Fiabilidade"
+ },
+ {
+ "category": "Segurança",
+ "description": "O Barramento de Serviço Premium do Azure fornece criptografia de dados em repouso. Se você usar sua própria chave, os dados ainda serão criptografados usando a chave gerenciada pela Microsoft, mas, além disso, a chave gerenciada pela Microsoft será criptografada usando a chave gerenciada pelo cliente. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "Baixo",
+ "subcategory": "Proteção de dados",
+ "text": "Usar a opção de chave gerenciada pelo cliente na criptografia de dados em repouso quando necessário",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "A comunicação entre um aplicativo cliente e um namespace do Barramento de Serviço do Azure é criptografada usando TLS (Transport Layer Security). Os namespaces do Barramento de Serviço do Azure permitem que os clientes enviem e recebam dados com TLS 1.0 e superior. Para impor medidas de segurança mais rígidas, você pode configurar o namespace do Barramento de Serviço para exigir que os clientes enviem e recebam dados com uma versão mais recente do TLS.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "id": "A01.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "Média",
+ "subcategory": "Proteção de dados",
+ "text": "Impor uma versão mínima necessária do TLS (Transport Layer Security) para solicitações ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Quando você cria um namespace do Barramento de Serviço, uma regra SAS chamada RootManageSharedAccessKey é criada automaticamente para o namespace. Essa política tem permissões de gerenciamento para todo o namespace. É recomendável que você trate essa regra como uma conta raiz administrativa e não a use em seu aplicativo. É recomendável usar o AAD como um provedor de autenticação com RBAC. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Evite usar a conta root quando não for necessário",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Um aplicativo cliente do Barramento de Serviço em execução dentro de um aplicativo do Serviço de Aplicativo do Azure ou em uma máquina virtual com entidades gerenciadas habilitadas para suporte a recursos do Azure não precisa lidar com regras e chaves SAS ou quaisquer outros tokens de acesso. O aplicativo cliente só precisa do endereço do ponto de extremidade do namespace do Sistema de Mensagens do Barramento de Serviço. ",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "id": "A02.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "Média",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Quando possível, seu aplicativo deve usar uma identidade gerenciada para se autenticar no Barramento de Serviço do Azure. Caso contrário, considere ter a credencial de armazenamento (SAS, credencial de entidade de serviço) no Azure Key Vault ou em um serviço equivalente",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Ao criar permissões, forneça controle refinado sobre o acesso de um cliente ao Barramento de Serviço do Azure. As permissões no Barramento de Serviço do Azure podem e devem ter como escopo o nível de recurso individual, por exemplo, fila, tópico ou assinatura. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "id": "A02.03",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "Alto",
+ "subcategory": "Gerenciamento de identidade e acesso",
+ "text": "Usar o RBAC do plano de dados com privilégios mínimos",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Os logs de recursos do Barramento de Serviço do Azure incluem logs operacionais, logs de rede virtual e filtragem de IP. Os logs de auditoria de tempo de execução capturam informações de diagnóstico agregadas para várias operações de acesso ao plano de dados (como enviar ou receber mensagens) no Barramento de Serviço.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "Média",
+ "subcategory": "Monitorização",
+ "text": "Habilite o registro em log para investigação de segurança. Usar o Azure Monitor para rastrear logs de recursos e logs de auditoria de runtime (atualmente disponível apenas na camada premium)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Por padrão, o Barramento de Serviço do Azure tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem que o tráfego entre sua rede virtual e o Barramento de Serviço do Azure atravesse a rede de backbone da Microsoft. Além disso, você deve desabilitar os endpoints públicos se eles não forem usados. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "Média",
+ "subcategory": "Rede",
+ "text": "Considere usar pontos de extremidade privados para acessar o Barramento de Serviço do Azure e desabilitar o acesso à rede pública quando aplicável.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Segurança"
+ },
+ {
+ "category": "Segurança",
+ "description": "Com o firewall IP, você pode restringir ainda mais o endpoint público a apenas um conjunto de endereços IPv4 ou intervalos de endereços IPv4 na notação CIDR (Classless Inter-Domain Routing). ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "id": "A04.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "Média",
+ "subcategory": "Rede",
+ "text": "Considere permitir apenas o acesso ao namespace do Barramento de Serviço do Azure de endereços IP ou intervalos específicos",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Segurança"
+ }
+ ],
+ "metadata": {
+ "name": "Service Bus Review Checklist",
+ "state": "Preview",
+ "timestamp": "September 17, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "Alto"
+ },
+ {
+ "name": "Média"
+ },
+ {
+ "name": "Baixo"
+ }
+ ],
+ "status": [
+ {
+ "description": "Esta verificação ainda não foi analisada",
+ "name": "Não verificado"
+ },
+ {
+ "description": "Há um item de ação associado a essa verificação",
+ "name": "Abrir"
+ },
+ {
+ "description": "Essa verificação foi verificada e não há mais itens de ação associados a ela",
+ "name": "Cumprido"
+ },
+ {
+ "description": "Recomendação compreendida, mas não necessária pelos requisitos atuais",
+ "name": "Não é necessário"
+ },
+ {
+ "description": "Não aplicável para o projeto atual",
+ "name": "N/A"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Fiabilidade"
+ },
+ {
+ "name": "Segurança"
+ },
+ {
+ "name": "Custar"
+ },
+ {
+ "name": "Operações"
+ },
+ {
+ "name": "Desempenho"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Sim"
+ },
+ {
+ "name": "Não"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/servicebus_checklist.zh-Hant.json b/checklists/servicebus_checklist.zh-Hant.json
new file mode 100644
index 000000000..e5e586ef9
--- /dev/null
+++ b/checklists/servicebus_checklist.zh-Hant.json
@@ -0,0 +1,367 @@
+{
+ "categories": [
+ {
+ "name": "身份和訪問管理"
+ },
+ {
+ "name": "網路拓撲和連接"
+ },
+ {
+ "name": "BC 和DR"
+ },
+ {
+ "name": "治理和安全"
+ },
+ {
+ "name": "成本治理"
+ },
+ {
+ "name": "運營管理"
+ },
+ {
+ "name": "應用程式部署"
+ },
+ {
+ "name": "安全"
+ }
+ ],
+ "items": [
+ {
+ "category": "運營管理",
+ "guid": "974a759c-763e-47d2-9161-3a7649907e0e",
+ "id": "29.1",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ASB_v1.docx",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "利用 FTA 手冊。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "cost": 1,
+ "guid": "49907e0e-338e-4e25-9c17-d32e8aaab757",
+ "id": "29.1",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/operational-excellence",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "在發送方和接收方端實施異地複製,以防止中斷和災難",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "1549ab81-53d8-49f8-ad17-b84b33b5a67f",
+ "id": "29.11",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "如果需要使用佇列和主題進行任務關鍵型消息傳送,建議使用 Service Bus Premium 和 Geo-Disaster Recovery。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "7b9ed5b3-1f38-4c40-9a82-2c2463cf0f18",
+ "id": "29.12",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "為 Service Bus 命名空間實現高可用性",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "ac699ef1-d5a8-43de-9de3-2c1881470607",
+ "id": "29.13",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "高",
+ "subcategory": "最佳實踐",
+ "text": "確保按保證的順序傳遞相關消息",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "c5c0e4e6-1465-48d2-958e-d67139b82110",
+ "id": "29.14",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "低",
+ "subcategory": "最佳實踐",
+ "text": "通過 JMS API 評估不同的 Java Messaging Service (JMS) 功能",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "2df26ee4-11e6-4f88-9e52-f4722dd68c5b",
+ "id": "29.15",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "低",
+ "subcategory": "最佳實踐",
+ "text": "使用 .NET Nuget 包與服務總線消息傳送實體通信",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "guid": "5c2521e5-4a69-4b9d-939a-c4e7c68d1d75",
+ "id": "29.16",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "在發送或接收消息時實現瞬態故障處理的彈性",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "description": "對於從門戶創建的新 SB 命名空間,將自動啟用此功能,並在啟用區域的區域中使用 Premium SKU。服務總線元數據和消息數據都會在可用性區域配置中的數據中心之間複製",
+ "guid": "338ee253-c17d-432e-aaaa-b7571549ab81",
+ "id": "29.2",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#availability-zones",
+ "severity": "高",
+ "subcategory": "最佳實踐",
+ "text": "利用可用區(如果區域適用)",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "description": "如果啟用,則實施到次要區域的命名空間元數據複製。不複製佇列/主題消息數據。僅限高級 SKU。",
+ "guid": "53d89f89-d17b-484b-93b5-a67f7b9ed5b3",
+ "id": "29.3",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters#geo-disaster-recovery",
+ "severity": "中等",
+ "subcategory": "異地災難恢復",
+ "text": "規劃區域故障期間的元數據複製",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "description": "如果無法容忍中斷,請不要使用內置元數據複製選項。利用複製模式跨兩組或多組跨區域命名空間複製服務總線消息",
+ "guid": "1f38c403-a822-4c24-93cf-0f18ac699ef1",
+ "id": "29.4",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-federation-overview",
+ "severity": "中等",
+ "subcategory": "異地災難恢復",
+ "text": "規劃區域故障期間的消息複製",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "description": "Azure 服務總線使用消息代理來處理發送到服務總線佇列或主題的消息。默認情況下,發送到佇列或主題的所有消息都由同一消息代理進程處理。此體系結構可能會限制消息佇列的總體輸送量。但是,您也可以在創建佇列或主題時對其進行分區",
+ "guid": "d5a83de4-de32-4c18-a147-0607c5c0e4e6",
+ "id": "29.5",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/data-partitioning-strategies#partitioning-azure-service-bus",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "對於需要高輸送量的應用程式,請使用 Patritioning",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "cost": 1,
+ "guid": "14658d24-58ed-4671-99b8-21102df26ee4",
+ "id": "29.6",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-outages-disasters",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "評估 Azure 服務總線的頂級權益",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "cost": 1,
+ "guid": "11e6f883-e52f-4472-8dd6-8c5b5c2521e5",
+ "id": "29.7",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-exceptions",
+ "severity": "高",
+ "subcategory": "最佳實踐",
+ "text": "確保正確處理 Service Bus 消息收發異常",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "cost": 1,
+ "guid": "4a69b9d3-39ac-44e7-a68d-1d75657202b4",
+ "id": "29.8",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/service-bus/reliability#checklist",
+ "severity": "中等",
+ "subcategory": "最佳實踐",
+ "text": "使用高級消息佇列協定 (AMQP) 連接到服務總線,並盡可能使用服務終結點或專用終結點。",
+ "waf": "可靠性"
+ },
+ {
+ "category": "運營管理",
+ "cost": 1,
+ "guid": "f4564b4d-974a-4759-a763-e7d261613a76",
+ "id": "29.9",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2",
+ "severity": "高",
+ "subcategory": "最佳實踐",
+ "text": "查看使用 Service Bus 消息傳送提高性能的最佳做法",
+ "waf": "可靠性"
+ },
+ {
+ "category": "安全",
+ "description": "Azure 服務總線高級版提供靜態數據加密。如果您使用自己的金鑰,則數據仍使用 Microsoft 管理的金鑰進行加密,但此外,Microsoft 管理的金鑰將使用客戶管理的密鑰進行加密。",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "id": "A01.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "低",
+ "subcategory": "數據保護",
+ "text": "需要時,在靜態數據加密中使用客戶管理的金鑰選項",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "用戶端應用程式與 Azure 服務總線命名空間之間的通信使用傳輸層安全性 (TLS) 進行加密。Azure 服務總線命名空間允許用戶端使用 TLS 1.0 及更高版本發送和接收數據。若要強制實施更嚴格的安全措施,可以將服務總線命名空間配置為要求用戶端使用較新版本的 TLS 發送和接收數據。",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "id": "A01.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "中等",
+ "subcategory": "數據保護",
+ "text": "對請求強制實施最低要求的傳輸層安全性 (TLS) 版本",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "創建服務總線命名空間時,會自動為命名空間創建名為 RootManageSharedAccessKey 的 SAS 規則。此策略具有整個命名空間的 Manage 許可權。建議您將此規則視為管理根帳戶,不要在應用程式中使用它。 建議使用 AAD 作為 RBAC 的身份驗證提供程式。",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "id": "A02.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "避免在不需要時使用 root 帳戶",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "在 Azure 應用服務應用程式內或在啟用了 Azure 資源支援的託管實體的虛擬機中運行的服務總線用戶端應用不需要處理 SAS 規則和密鑰或任何其他存取權杖。用戶端應用程式只需要 Service Bus Messaging 命名空間的終結點位址。",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "id": "A02.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "中等",
+ "subcategory": "身份和訪問管理",
+ "text": "如果可能,應用程式應使用託管標識向 Azure 服務總線進行身份驗證。如果沒有,請考慮在 Azure Key Vault 或等效服務中使用存儲憑據(SAS、服務主體憑據)",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "創建許可權時,請對用戶端對 Azure 服務總線的訪問提供精細控制。Azure 服務總線中的許可權可以而且應該限定為單個資源級別,例如佇列、主題或訂閱。",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "id": "A02.03",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "高",
+ "subcategory": "身份和訪問管理",
+ "text": "使用最低許可權數據平面 RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "Azure 服務總線資源日誌包括操作日誌、虛擬網路和IP篩選日誌。運行時審核日誌捕獲服務總線中各種數據平面訪問操作(例如發送或接收消息)的聚合診斷資訊。",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "id": "A03.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "中等",
+ "subcategory": "監測",
+ "text": "啟用記錄以進行安全調查。使用 Azure Monitor 追蹤資源紀錄和執行時審核紀錄(目前僅在進階層中可用 )",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "默認情況下,Azure 服務總線具有公共IP位址,並且可通過Internet訪問。專用終結點允許虛擬網路與 Azure 服務總線之間的流量遍歷 Microsoft 主幹網路。除此之外,如果未使用公有終端節點,則應禁用這些終端節點。",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "id": "A04.01",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "中等",
+ "subcategory": "聯網",
+ "text": "請考慮使用專用終結點訪問 Azure 服務總線,並在適用時禁用公用網路訪問。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
+ },
+ {
+ "category": "安全",
+ "description": "使用IP防火牆,您可以將公有終端節點進一步限製為僅一組 IPv4 位址或 CIDR(無類域間路由)表示法的 IPv4 位址範圍。",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "id": "A04.02",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "中等",
+ "subcategory": "聯網",
+ "text": "請考慮僅允許從特定IP位址或範圍訪問 Azure 服務總線命名空間",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
+ }
+ ],
+ "metadata": {
+ "name": "Service Bus Review Checklist",
+ "state": "Preview",
+ "timestamp": "September 17, 2024",
+ "waf": "all"
+ },
+ "severities": [
+ {
+ "name": "高"
+ },
+ {
+ "name": "中等"
+ },
+ {
+ "name": "低"
+ }
+ ],
+ "status": [
+ {
+ "description": "尚未查看此檢查",
+ "name": "未驗證"
+ },
+ {
+ "description": "存在與此檢查關聯的操作項",
+ "name": "打開"
+ },
+ {
+ "description": "此檢查已經過驗證,沒有與之關聯的其他操作項",
+ "name": "實現"
+ },
+ {
+ "description": "建議已理解,但當前要求不需要",
+ "name": "不需要"
+ },
+ {
+ "description": "不適用於當前設計",
+ "name": "不適用"
+ }
+ ],
+ "waf": [
+ {
+ "name": "可靠性"
+ },
+ {
+ "name": "安全"
+ },
+ {
+ "name": "成本"
+ },
+ {
+ "name": "操作"
+ },
+ {
+ "name": "性能"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "是的"
+ },
+ {
+ "name": "不"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/checklists/servicefabric_checklist.en.json b/checklists/servicefabric_checklist.en.json
new file mode 100644
index 000000000..e745da390
--- /dev/null
+++ b/checklists/servicefabric_checklist.en.json
@@ -0,0 +1,255 @@
+{
+ "items": [
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Use Standard SKU for production scenarios.",
+ "waf": "Reliability",
+ "service": "Azure Service Fabric",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "id": "A01.01",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant = (sku=~'{\"name\":\"Standard\"}') | distinct id,compliant",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/overview-managed-cluster#service-fabric-managed-cluster-skus"
+ },
+ {
+ "category": "Standard clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Use durability level Silver (5 VMs) or greater for production scenarios",
+ "waf": "Reliability",
+ "service": "Azure Service Fabric",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "id": "A01.02",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/clusters' | extend nodeTypes= array_concat(properties.nodeTypes) | mv-expand nodeTypes | summarize BronzeDurabilityCount = countif(nodeTypes.durabilityLevel == 'Bronze') by id | extend compliant = (BronzeDurabilityCount == 0) | distinct id,compliant",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity#durability-characteristics-of-the-cluster"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Consider using Availability Zones for your Service Fabric clusters. Service Fabric managed cluster supports deployments that span across multiple Availability Zones to provide zone resiliency. This configuration will ensure high-availability of the critical system services and your applications to protect from single-points-of-failure.",
+ "waf": "Reliability",
+ "service": "Azure Service Fabric",
+ "guid": "2363878d-55c4-4cbd-9bc2-94523c85f12e",
+ "id": "A01.03",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant= ( properties.zonalResiliency =~ 'true') | distinct id,compliant",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-availability-zones"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Consider using Azure API Management to expose and offload cross-cutting functionality for APIs hosted on the cluster. API Management can integrate with Service Fabric directly.",
+ "waf": "Reliability",
+ "service": "Azure Service Fabric",
+ "guid": "5ba74cc8-3ca2-44d5-9a67-bdc8e102e7b4",
+ "id": "A01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-api-management-overview"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Workload architecture",
+ "text": "For stateful workload scenarios, consider using Reliable Services. The Reliable Services model allows your services to stay up even in unreliable environments where your machines fail or hit network issues, or in cases where the services themselves encounter errors and crash or fail. For stateful services, your state is preserved even in the presence of network or other failures.",
+ "waf": "Reliability",
+ "service": "Azure Service Fabric",
+ "guid": "ef17bb8f-4e2c-488b-8ceb-a07c3d750dd3",
+ "id": "A01.05",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-reliable-services-introduction"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Avoid VM SKUs with temp disk offerings. Service Fabric uses managed disks by default, so avoiding temp disk offerings ensures you don't pay for unneeded resources.",
+ "waf": "Cost",
+ "service": "Azure Service Fabric",
+ "guid": "4da21268-f775-4c89-a271-eb80543c8df7",
+ "id": "B01.01",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | summarize compliant = countif(sku.name matches regex '^Standard_[^d]*$' ) by id",
+ "severity": "Medium"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "If you need to select a certain VM SKU for capacity reasons and it happens to offer temp disk, consider using temporary disk support for your stateless workloads.",
+ "waf": "Cost",
+ "service": "Azure Service Fabric",
+ "guid": "1890b796-f300-41a3-a8d4-29738c1f4ad0",
+ "id": "B01.02",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-stateless-node-type#temporary-disk-support"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster and workload architectures",
+ "text": "Align SKU selection and managed disk size with workload requirements. Matching your selection to your workload demands ensures you don't pay for unneeded resources.",
+ "waf": "Cost",
+ "service": "Azure Service Fabric",
+ "guid": "5247bb32-6778-49c7-8b40-e171c9a3ce1e",
+ "id": "B01.03",
+ "severity": "Medium"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Ensure Network Security Groups (NSG) are configured to restrict traffic flow between subnets and node types. For example, you may have an API Management instance (one subnet), a frontend subnet (exposing a website directly), and a backend subnet (accessible only to frontend).",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "6028759b-446a-41bc-8b0e-7728e61ca704",
+ "id": "C01.01",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-networking#manage-nsg-rules"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Deploy Key Vault certificates to Service Fabric cluster virtual machine scale sets. Centralizing storage of application secrets in Azure Key Vault allows you to control their distribution. Key Vault greatly reduces the chances that secrets may be accidentally leaked.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "4e98c903-14cf-4c72-9c45-b8b23bc4cbd8",
+ "id": "C01.02",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | extend compliant = (isnotnull(properties.virtualMachineProfile.osProfile.secrets))",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#deploy-key-vault-certificates-to-service-fabric-cluster-virtual-machine-scale-sets"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Apply an Access Control List (ACL) to your client certificate for your Service Fabric cluster. Using an ACL provides an additional level of authentication.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "001cbb6f-d88d-4431-8434-d01333397776",
+ "id": "C01.03",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#apply-an-access-control-list-acl-to-your-certificate-for-your-service-fabric-cluster"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster architecture",
+ "text": "Use resource requests and limits to govern resource usage across the nodes in your cluster. Enforcing resource limits helps ensure that one service doesn't consume too many resources and starve other services.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "4b74b7a5-bb1e-4fca-948c-037ba95fb73b",
+ "id": "C01.04",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-resource-governance#resource-governance-mechanism"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Workload architecture",
+ "text": "Encrypt Service Fabric package secret values. Encryption on your secret values provides an additional level of security.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "cd9233ba-f3aa-4353-8d2f-7ea4a64160e6",
+ "id": "C01.05",
+ "severity": "Medium",
+ "link": ""
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Workload architecture",
+ "text": "Include client certificates in Service Fabric applications. Having your applications use client certificates for authentication provides opportunities for security at both the cluster and workload level.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "44b989d4-9f72-42b6-99da-ec2a79f83299",
+ "id": "C01.06",
+ "severity": "Medium",
+ "link": ""
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Workload architecture",
+ "text": "Authenticate Service Fabric applications to Azure Resources using Managed Identity. Using Managed Identity allow you to securely manage the credentials in your code for authenticating to various services without saving them locally on a developer workstation or in source control.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "28e66ff7-4a77-4b2c-910d-0335f141208a",
+ "id": "C01.07",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-identity-managed-cluster-virtual-machine-scale-sets"
+ },
+ {
+ "category": "Managed clusters",
+ "subcategory": "Cluster and workload architectures",
+ "text": "Follow Service Fabric best practices when hosting untrusted applications. Following the best practices provides a security standard to follow.",
+ "waf": "Security",
+ "service": "Azure Service Fabric",
+ "guid": "f16c413c-00a6-43aa-852c-b97292c33a56",
+ "id": "C01.08",
+ "severity": "Medium",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#hosting-untrusted-applications-in-a-service-fabric-cluster"
+ }
+ ],
+ "categories": [
+ {
+ "name": "Managed clusters"
+ },
+ {
+ "name": "Standard clusters"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Security"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Performance"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "status": [
+ {
+ "name": "Not verified",
+ "description": "This check has not been looked at yet"
+ },
+ {
+ "name": "Open",
+ "description": "There is an action item associated to this check"
+ },
+ {
+ "name": "Fulfilled",
+ "description": "This check has been verified, and there are no further action items associated to it"
+ },
+ {
+ "name": "Not required",
+ "description": "Recommendation understood, but not needed by current requirements"
+ },
+ {
+ "name": "N/A",
+ "description": "Not applicable for current design"
+ }
+ ],
+ "severities": [
+ {
+ "name": "High"
+ },
+ {
+ "name": "Medium"
+ },
+ {
+ "name": "Low"
+ }
+ ],
+ "metadata": {
+ "name": "Azure Service Fabric Review Checklist",
+ "state": "Preview",
+ "waf": "All",
+ "timestamp": "September 18, 2024"
+ }
+}
\ No newline at end of file
diff --git a/checklists/waf_checklist.en.json b/checklists/waf_checklist.en.json
index 18de406b2..b8f933d83 100644
--- a/checklists/waf_checklist.en.json
+++ b/checklists/waf_checklist.en.json
@@ -6,6 +6,7 @@
"description": "Disable image export to prevent data exfiltration. Note that this will prevent image import of images into another ACR instance.",
"guid": "ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e",
"link": "https://learn.microsoft.com/azure/container-registry/data-loss-prevention",
+ "query": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | extend acrName = name, acrId = id | extend exportPolicyStatus = properties.policies.exportPolicy.status | extend compliant = iif(exportPolicyStatus =~ 'Disabled', true, false) | project acrName, acrId, exportPolicyStatus, compliant",
"service": "ACR",
"severity": "High",
"text": "Disable Azure Container Registry image export",
@@ -37,6 +38,7 @@
"arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure Container Registry Security Review",
"description": "Azure Container Registry automatically encrypts images and other artifacts that you store. By default, Azure automatically encrypts the registry content at rest by using service-managed keys. By using a customer-managed key, you can supplement default encryption with an additional encryption layer.",
+ "graph": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | extend acrName = name, acrId = id | extend encryptionStatus = properties.encryption.status | extend compliant = iif(encryptionStatus == 'disabled', false, true) | project acrName, acrId, encryptionStatus, compliant",
"guid": "0bd05dc2-efd5-4d76-8d41-d2500cc47b49",
"link": "https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys",
"service": "ACR",
@@ -59,6 +61,7 @@
"arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure Container Registry Security Review",
"description": "The local Administrator account is disabled by default and should not be enabled. Use either Token or RBAC-based access methods instead",
+ "graph": "resources | where type =~ 'microsoft.containerregistry/registries' | extend localAdminDisabled = properties.adminUserEnabled // Adjust this property as needed | extend compliant = iif(localAdminDisabled == 'false', true, false) // Check if local admin is disabled | project compliant, name, id, tags | distinct id, compliant",
"guid": "be0e38ce-e297-411b-b363-caaab79b198d",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity",
"service": "ACR",
@@ -70,6 +73,7 @@
"arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure Container Registry Security Review",
"description": "Disable Administrator account and assign RBAC roles to principals for ACR Pull/Push operations",
+ "graph": "resources | where type =~ 'microsoft.containerregistry/registries' | extend localAdminDisabled = properties.adminUserEnabled // Adjust this property as needed | extend compliant = iif(localAdminDisabled == 'false', true, false) // Check if local admin is disabled | project compliant, name, id, tags | distinct id, compliant",
"guid": "387e5ced-126c-4d13-8af5-b20c6998a646",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli",
"service": "ACR",
@@ -81,6 +85,7 @@
"arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure Container Registry Security Review",
"description": "Disable anonymous pull/push access",
+ "graph": "resources | where type =~ 'microsoft.containerregistry/registries' | extend compliant = iif(properties.anonymousPullEnabled == false, true, false) | project compliant, name, id, tags | distinct id, compliant",
"guid": "e338997e-41c7-47d7-acf6-a62a1194956d",
"link": "https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access",
"service": "ACR",
@@ -146,6 +151,7 @@
"arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure Container Registry Security Review",
"description": "Disable public network access if inbound network access is secured using Private Link",
+ "graph": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | where sku.name =~ 'Premium' // Check for Premium SKU | extend publicAccessEnabled = properties.publicNetworkAccess | extend defaultAction = tostring(properties.networkRuleSet.defaultAction) // Extract defaultAction | extend compliant = iif(publicAccessEnabled != 'Enabled' or defaultAction == 'Deny', true, false) | project name, id, publicAccessEnabled, defaultAction, compliant",
"guid": "cd289ced-6b17-4db8-8554-62f2aee4553a",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access",
"service": "ACR",
@@ -157,6 +163,7 @@
"arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure Container Registry Security Review",
"description": "Only the ACR Premium SKU supports Private Link access",
+ "graph": "resources | where type =~ 'Microsoft.ContainerRegistry/registries' | extend skuName = sku.name // Extract the SKU name | extend compliant = iif(skuName == 'Premium', true, false) // Check if SKU is Premium | project name, id, skuName, compliant",
"guid": "fc833934-8b26-42d6-ac5f-512925498f6d",
"link": "https://learn.microsoft.com/azure/container-registry/container-registry-skus",
"service": "ACR",
@@ -376,2818 +383,4219 @@
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
- "severity": "Low",
- "text": "If required for AKS Windows workloads HostProcess containers can be used",
- "waf": "Reliability"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "severity": "Low",
- "text": "Use KEDA if running event-driven workloads",
- "waf": "Performance"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
- "severity": "Low",
- "text": "Use Dapr to ease microservice development",
- "waf": "Operations"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
"severity": "High",
- "text": "Use the SLA-backed AKS offering",
- "waf": "Reliability"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "Low",
- "text": "Use Disruption Budgets in your pod and deployment definitions",
- "waf": "Reliability"
+ "text": "Deploy your WAF policy for Front Door in 'Prevention' mode' so that Web Application Firewall takes appropriate action to allow or deny traffic.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerregistry/registries",
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
"severity": "High",
- "text": "If using a private registry, configure region replication to store images in multiple regions",
- "waf": "Reliability"
+ "text": "Avoid placing Traffic Manager behind Front Door.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
- "severity": "Low",
- "text": "Use an external application such as kubecost to allocate costs to different users",
- "waf": "Cost"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
"severity": "Low",
- "text": "Use scale down mode to delete/deallocate nodes",
- "waf": "Cost"
+ "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
"severity": "Medium",
- "text": "When required use multi-instance partitioning GPU on AKS Clusters",
- "waf": "Cost"
+ "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
"severity": "Low",
- "text": "If running a Dev/Test cluster use NodePool Start/Stop",
- "waf": "Cost"
+ "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
- "severity": "Medium",
- "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
- "waf": "Security"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Separate applications from the control plane with user/system node pools",
- "waf": "Security"
+ "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "Low",
- "text": "Add taint to your system nodepool to make it dedicated",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Use a private registry for your images, such as ACR",
+ "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerregistry/registries",
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
- "severity": "Medium",
- "text": "Scan your images for vulnerabilities",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=~'Enabled') and (mode=~'Prevention')), enabledState, mode",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"severity": "High",
- "text": "Define app separation requirements (namespace/nodepool/cluster)",
+ "text": "Tune the Azure Front Door WAF for your workload by configuring the WAF in Detection mode to reduce and fix false positive detections.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
- "severity": "Medium",
- "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
"severity": "High",
- "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
+ "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"severity": "Medium",
- "text": "If required add Key Management Service etcd encryption",
+ "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
- "severity": "Low",
- "text": "If required consider using Confidential Compute for AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Consider using Defender for Containers",
+ "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
- "severity": "High",
- "text": "Use managed identities instead of Service Principals",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "Low",
+ "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Integrate authentication with AAD (using the managed integration)",
+ "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Limit access to admin kubeconfig (get-credentials --admin)",
- "waf": "Security"
+ "text": "Capture logs and metrics by turning on Diagnostic Settings. Include resource activity logs, access logs, health probe logs, and WAF logs. Set up alerts.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Integrate authorization with AAD RBAC",
- "waf": "Security"
+ "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Choose a routing method that supports your deployment strategy. The weighted method, which distributes traffic based on the configured weight coefficient, supports active-active models. A priority-based value that configures the primary region to receive all traffic and send traffic to the secondary region as a backup supports active-passive models. Combine the preceding methods with latency so that the origin with the lowest latency receives traffic.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
"severity": "High",
- "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
- "waf": "Security"
+ "text": "Support redundancy by having multiple origins in one or more back-end pools. Always have redundant instances of your application and make sure each instance exposes an endpoint or origin. You can place those origins in one or more back-end pools.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
"severity": "Medium",
- "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
- "waf": "Security"
+ "text": "Set a timeout on forwarding requests to the back end. Adjust the timeout setting according to your endpoints' needs. If you don't, Azure Front Door might close the connection before the origin sends the response. You can also lower the default timeout for Azure Front Door if all of your origins have a shorter timeout.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
"severity": "Medium",
- "text": "For AKS non-interactive logins use kubelogin (preview)",
- "waf": "Security"
+ "text": "Decide if your application requires session affinity. If you have high reliability requirements, we recommend that you disable session affinity.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
"severity": "Medium",
- "text": "Disable AKS local accounts",
+ "text": "Send the host header to the back end. The back-end services should be aware of the host name so that they can create rules to accept traffic only from that host.",
"waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Use caching for endpoints that support it.",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
"severity": "Low",
- "text": "Configure if required Just-in-time cluster access",
+ "text": "Disable health checks in single back-end pools. If you have only one origin configured in your Azure Front Door origin group, these calls are unnecessary. This is only recommended if you can't have multiple origins in your endpoint.",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "We recommend using the Premium Tier for leveraging the Security reports while the Standard Azure Front Door Profile provides only traffic reports under built-in analytics/reports.",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Use wildcard TLS certificates when possible.",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Optimize your application query string for caching. For purely static content, ignore query strings to maximize your use of the cache. If your application uses query strings, consider including them in the cache key. Including the query strings in the cache key allows Azure Front Door to serve cached responses or other responses, based on your configuration.",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Use file compression when you're accessing downloadable content.",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "Consider migrating to Standard or Premium SKU if you are using Classic Azure Front Door currently as Classic Azure Front Door will be deprecated by March 2027.",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "Medium",
+ "text": "Consider using Traffic Manager load balancing Azure Front Door and a third party CDN provider CDN profile for mission critical high availability scenario. ",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "High",
+ "text": "When using Front Door with origin as App services, consider locking down the traffic to app services only through Azure Front Door using access restrictions. ",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
"service": "AKS",
"severity": "Low",
- "text": "Configure if required AAD conditional access for AKS",
- "waf": "Security"
+ "text": "If required for AKS Windows workloads HostProcess containers can be used",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
"service": "AKS",
"severity": "Low",
- "text": "If required for Windows AKS workloads configure gMSA ",
- "waf": "Security"
+ "text": "Use KEDA if running event-driven workloads",
+ "waf": "Performance"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
"service": "AKS",
- "severity": "Medium",
- "text": "For finer control consider using a managed Kubelet Identity",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use Dapr to ease microservice development",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
"service": "AKS",
- "severity": "Medium",
- "text": "If using AGIC, do not share an AppGW across clusters",
+ "severity": "High",
+ "text": "Use the SLA-backed AKS offering",
"waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
"service": "AKS",
- "severity": "High",
- "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
+ "severity": "Low",
+ "text": "Use Disruption Budgets in your pod and deployment definitions",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure AKS Review",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
- "severity": "Medium",
- "text": "For Windows workloads use Accelerated Networking",
- "waf": "Performance"
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
+ "severity": "High",
+ "text": "If using a private registry, configure region replication to store images in multiple regions",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
"service": "AKS",
- "severity": "High",
- "text": "Use the standard ALB (as opposed to the basic one)",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "Use an external application such as kubecost to allocate costs to different users",
+ "waf": "Cost"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
"service": "AKS",
- "severity": "Medium",
- "text": "If using Azure CNI, consider using different Subnets for NodePools",
- "waf": "Security"
+ "severity": "Low",
+ "text": "Use scale down mode to delete/deallocate nodes",
+ "waf": "Cost"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
"service": "AKS",
"severity": "Medium",
- "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
- "waf": "Security"
+ "text": "When required use multi-instance partitioning GPU on AKS Clusters",
+ "waf": "Cost"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
"service": "AKS",
- "severity": "High",
- "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
- "waf": "Reliability"
+ "severity": "Low",
+ "text": "If running a Dev/Test cluster use NodePool Start/Stop",
+ "waf": "Cost"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
"service": "AKS",
- "severity": "High",
- "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Use Azure Policy for Kubernetes to ensure cluster compliance",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
"service": "AKS",
- "severity": "High",
- "text": "If using Azure CNI, check the maximum pods/node (default 30)",
- "waf": "Performance"
+ "severity": "Medium",
+ "text": "Separate applications from the control plane with user/system node pools",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
"service": "AKS",
"severity": "Low",
- "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
+ "text": "Add taint to your system nodepool to make it dedicated",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
"service": "AKS",
- "severity": "High",
- "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
- "waf": "Reliability"
+ "severity": "Medium",
+ "text": "Use a private registry for your images, such as ACR",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
+ "arm-service": "microsoft.containerregistry/registries",
"checklist": "Azure AKS Review",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
- "severity": "Low",
- "text": "If required add your own CNI plugin",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
+ "severity": "Medium",
+ "text": "Scan your images for vulnerabilities",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
"service": "AKS",
- "severity": "Low",
- "text": "If required configure Public IP per node in AKS",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Define app separation requirements (namespace/nodepool/cluster)",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
"service": "AKS",
"severity": "Medium",
- "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
- "waf": "Reliability"
+ "text": "Store your secrets in Azure Key Vault with the CSI Secrets Store driver",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
"service": "AKS",
- "severity": "Low",
- "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
- "waf": "Reliability"
+ "severity": "High",
+ "text": "If using Service Principals for the cluster, refresh credentials periodically (like quarterly)",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
"service": "AKS",
"severity": "Medium",
- "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
- "waf": "Reliability"
+ "text": "If required add Key Management Service etcd encryption",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
"service": "AKS",
- "severity": "High",
- "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
+ "severity": "Low",
+ "text": "If required consider using Confidential Compute for AKS",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
"service": "AKS",
"severity": "Medium",
- "text": "If using a public API endpoint, restrict the IP addresses that can access it",
+ "text": "Consider using Defender for Containers",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
"service": "AKS",
"severity": "High",
- "text": "Use private clusters if your requirements mandate it",
+ "text": "Use managed identities instead of Service Principals",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
"service": "AKS",
"severity": "Medium",
- "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
+ "text": "Integrate authentication with AAD (using the managed integration)",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
"service": "AKS",
- "severity": "High",
- "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
+ "severity": "Medium",
+ "text": "Limit access to admin kubeconfig (get-credentials --admin)",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
"service": "AKS",
- "severity": "High",
- "text": "Use Kubernetes network policies to increase intra-cluster security",
+ "severity": "Medium",
+ "text": "Integrate authorization with AAD RBAC",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
"service": "AKS",
"severity": "High",
- "text": "Use a WAF for web workloads (UIs or APIs)",
+ "text": "Use namespaces for restricting RBAC privilege in Kubernetes",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
"service": "AKS",
"severity": "Medium",
- "text": "Use DDoS Standard in the AKS Virtual Network",
+ "text": "For Pod Identity Access Management use Azure AD Workload Identity (preview)",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
"service": "AKS",
- "severity": "Low",
- "text": "If required add company HTTP Proxy",
+ "severity": "Medium",
+ "text": "For AKS non-interactive logins use kubelogin (preview)",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
"service": "AKS",
"severity": "Medium",
- "text": "Consider using a service mesh for advanced microservice communication management",
+ "text": "Disable AKS local accounts",
"waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
"service": "AKS",
- "severity": "High",
- "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "Configure if required Just-in-time cluster access",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
"service": "AKS",
"severity": "Low",
- "text": "Check regularly Azure Advisor for recommendations on your cluster",
- "waf": "Operations"
+ "text": "Configure if required AAD conditional access for AKS",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
"service": "AKS",
"severity": "Low",
- "text": "Enable AKS auto-certificate rotation",
- "waf": "Operations"
+ "text": "If required for Windows AKS workloads configure gMSA ",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
"service": "AKS",
- "severity": "High",
- "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "For finer control consider using a managed Kubelet Identity",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
"service": "AKS",
- "severity": "High",
- "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "If using AGIC, do not share an AppGW across clusters",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
"service": "AKS",
"severity": "High",
- "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
- "waf": "Operations"
+ "text": "Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with the application routing add-on.",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
"service": "AKS",
- "severity": "Low",
- "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "For Windows workloads use Accelerated Networking",
+ "waf": "Performance"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
"service": "AKS",
- "severity": "Low",
- "text": "Consider using AKS command invoke on private clusters",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use the standard ALB (as opposed to the basic one)",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
"service": "AKS",
- "severity": "Low",
- "text": "For planned events consider using Node Auto Drain",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "If using Azure CNI, consider using different Subnets for NodePools",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access PaaS services from the cluster",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
"service": "AKS",
"severity": "High",
- "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
- "waf": "Operations"
+ "text": "Choose the best CNI network plugin for your requirements (Azure CNI recommended)",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
"service": "AKS",
- "severity": "Low",
- "text": "Use custom Node RG (aka 'Infra RG') name",
- "waf": "Operations"
+ "severity": "High",
+ "text": "If using Azure CNI, size your subnet accordingly considering the maximum number of pods per node",
+ "waf": "Performance"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
"service": "AKS",
- "severity": "Medium",
- "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
- "waf": "Operations"
+ "severity": "High",
+ "text": "If using Azure CNI, check the maximum pods/node (default 30)",
+ "waf": "Performance"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "description": "For internal apps organizations often open the whole AKS subnet in their firewalls. This opens network access to the nodes too, and potentially to the pods as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only this one needs to be available to the app clients. Another reason is that if the IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses for services will reduce the maximum scalability of the cluster .",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
"service": "AKS",
"severity": "Low",
- "text": "Taint Windows nodes",
- "waf": "Operations"
+ "text": "If using private-IP LoadBalancer services, use a dedicated subnet (not the AKS subnet)",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
"service": "AKS",
- "severity": "Low",
- "text": "Keep windows containers patch level in sync with host patch level",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Size the service IP address range accordingly (it is going to limit the cluster scalability)",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "description": "Via Diagnostic Settings at the cluster level",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
"service": "AKS",
"severity": "Low",
- "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
- "waf": "Operations"
+ "text": "If required add your own CNI plugin",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
"service": "AKS",
"severity": "Low",
- "text": "If required use nodePool snapshots",
- "waf": "Cost"
+ "text": "If required configure Public IP per node in AKS",
+ "waf": "Performance"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
"service": "AKS",
- "severity": "Low",
- "text": "Consider spot node pools for non time-sensitive workloads",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Use an ingress controller to expose web-based apps instead of exposing them with LoadBalancer-type services",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
"service": "AKS",
"severity": "Low",
- "text": "Consider AKS virtual node for quick bursting",
- "waf": "Operations"
+ "text": "Use Azure NAT Gateway as outboundType for scaling egress traffic",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
"service": "AKS",
- "severity": "High",
- "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
"service": "AKS",
"severity": "High",
- "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
- "waf": "Operations"
+ "text": "Filter egress traffic with AzFW/NVA if your security requirements mandate it",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
"service": "AKS",
"severity": "Medium",
- "text": "Monitor CPU and memory utilization of the nodes",
- "waf": "Operations"
+ "text": "If using a public API endpoint, restrict the IP addresses that can access it",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
"service": "AKS",
- "severity": "Medium",
- "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use private clusters if your requirements mandate it",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
"service": "AKS",
"severity": "Medium",
- "text": "Monitor OS disk queue depth in nodes",
- "waf": "Operations"
+ "text": "For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used ",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
"service": "AKS",
- "severity": "Medium",
- "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Enable a Kubernetes Network Policy option (Calico/Azure)",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
"service": "AKS",
- "severity": "Medium",
- "text": "Subscribe to resource health notifications for your AKS cluster",
- "waf": "Operations"
+ "severity": "High",
+ "text": "Use Kubernetes network policies to increase intra-cluster security",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
"service": "AKS",
"severity": "High",
- "text": "Configure requests and limits in your pod specs",
- "waf": "Operations"
+ "text": "Use a WAF for web workloads (UIs or APIs)",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
"service": "AKS",
"severity": "Medium",
- "text": "Enforce resource quotas for namespaces",
- "waf": "Operations"
+ "text": "Use DDoS Standard in the AKS Virtual Network",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
"service": "AKS",
- "severity": "High",
- "text": "Ensure your subscription has enough quota to scale out your nodepools",
- "waf": "Operations"
+ "severity": "Low",
+ "text": "If required add company HTTP Proxy",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
- "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
"service": "AKS",
- "severity": "High",
- "text": "Configure Liveness and Readiness probes for all deployments",
- "waf": "Operations"
+ "severity": "Medium",
+ "text": "Consider using a service mesh for advanced microservice communication management",
+ "waf": "Security"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
"service": "AKS",
- "severity": "Medium",
- "text": "Use the Cluster Autoscaler",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Configure alerts on the most critical metrics (see Container Insights for recommendations)",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
"service": "AKS",
"severity": "Low",
- "text": "Customize node configuration for AKS node pools",
- "waf": "Performance"
+ "text": "Check regularly Azure Advisor for recommendations on your cluster",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
"service": "AKS",
- "severity": "Medium",
- "text": "Use the Horizontal Pod Autoscaler when required",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Enable AKS auto-certificate rotation",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
"service": "AKS",
"severity": "High",
- "text": "Consider an appropriate node size, not too large or too small",
- "waf": "Performance"
+ "text": "Have a regular process to upgrade your kubernetes version periodically (quarterly, for example), or use the AKS autoupgrade feature",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
"service": "AKS",
- "severity": "Low",
- "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Use kured for Linux node upgrades in case you are not using node-image upgrade",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
"service": "AKS",
- "severity": "Low",
- "text": "Consider subscribing to EventGrid Events for AKS automation",
- "waf": "Performance"
+ "severity": "High",
+ "text": "Have a regular process to upgrade the cluster node images periodically (weekly, for example)",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
"service": "AKS",
"severity": "Low",
- "text": "For long running operation on an AKS cluster consider event termination",
- "waf": "Performance"
+ "text": "Consider gitops to deploy applications or cluster configuration to multiple clusters",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
"service": "AKS",
"severity": "Low",
- "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
- "waf": "Performance"
+ "text": "Consider using AKS command invoke on private clusters",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
"service": "AKS",
- "severity": "High",
- "text": "Use ephemeral OS disks",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "For planned events consider using Node Auto Drain",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
"service": "AKS",
"severity": "High",
- "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
- "waf": "Performance"
+ "text": "Develop own governance practices to make sure no changes are performed by operators in the node RG (aka 'infra RG')",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
"service": "AKS",
"severity": "Low",
- "text": "For hyper performance storage option use Ultra Disks on AKS",
- "waf": "Performance"
+ "text": "Use custom Node RG (aka 'Infra RG') name",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
"service": "AKS",
"severity": "Medium",
- "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
- "waf": "Performance"
+ "text": "Do not use deprecated Kubernetes APIs in your YAML manifests",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
"service": "AKS",
- "severity": "Medium",
- "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Taint Windows nodes",
+ "waf": "Operations"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
"checklist": "Azure AKS Review",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
"service": "AKS",
- "severity": "Medium",
- "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
- "waf": "Performance"
+ "severity": "Low",
+ "text": "Keep windows containers patch level in sync with host patch level",
+ "waf": "Operations"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
- "service": "Entra",
- "severity": "Medium",
- "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "Via Diagnostic Settings at the cluster level",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "Send master logs (aka API logs) to Azure Monitor or your preferred log management solution",
"waf": "Operations"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
"severity": "Low",
- "text": "Ensure you have a Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants",
- "waf": "Operations"
+ "text": "If required use nodePool snapshots",
+ "waf": "Cost"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
"severity": "Low",
- "text": "Leverage Azure Lighthouse for Multi-Tenant Management",
+ "text": "Consider spot node pools for non time-sensitive workloads",
"waf": "Operations"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Entra",
- "severity": "Medium",
- "text": "Ensure that Azure Lighthouse is used for administering the tenant by partner",
- "waf": "Cost"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "Consider AKS virtual node for quick bursting",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "348ef254-c27d-442e-abba-c7571559ab91",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "High",
- "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Security"
+ "text": "Monitor your cluster metrics with Container Insights (or other tools like Prometheus)",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "High",
- "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Security"
+ "text": "Store and analyze your cluster logs with Container Insights (or other tools like Telegraf/ElasticSearch)",
+ "waf": "Operations"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
"severity": "Medium",
- "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Security"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
- "service": "Entra",
- "severity": "Low",
- "text": "Enforce Microsoft Entra ID conditional-access policies for any user with rights to Azure environments",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Security"
+ "text": "Monitor CPU and memory utilization of the nodes",
+ "waf": "Operations"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
- "service": "Entra",
- "severity": "High",
- "text": "Enforce multi-factor authentication for any user with rights to the Azure environments",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "Security"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "If using Azure CNI, monitor % of pod IPs consumed per node",
+ "waf": "Operations"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "I/O in the OS disk is a critical resource. If the OS in the nodes gets throttled on I/O, this could lead to unpredictable behavior, typically ending up in node being declared NotReady",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Monitor OS disk queue depth in nodes",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "If not using egress filtering with AzFW/NVA, monitor standard ALB allocated SNAT ports",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Subscribe to resource health notifications for your AKS cluster",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "High",
+ "text": "Configure requests and limits in your pod specs",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Enforce resource quotas for namespaces",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "AKS",
+ "severity": "High",
+ "text": "Ensure your subscription has enough quota to scale out your nodepools",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f4fd0602-7ab5-46f1-b66a-e9dea9654a65",
+ "link": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
+ "service": "AKS",
+ "severity": "High",
+ "text": "Configure Liveness and Readiness probes for all deployments",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Use the Cluster Autoscaler",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "Customize node configuration for AKS node pools",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Use the Horizontal Pod Autoscaler when required",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "Larger nodes will bring higher performance and features such as ephemeral disks and accelerated networking, but they will increase the blast radius and decrease the scaling granularity",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
+ "severity": "High",
+ "text": "Consider an appropriate node size, not too large or too small",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "If more than 5000 nodes are required for scalability then consider using an additional AKS cluster",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "Consider subscribing to EventGrid Events for AKS automation",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "For long running operation on an AKS cluster consider event termination",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "If required consider using Azure Dedicated Hosts for AKS nodes",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "High",
+ "text": "Use ephemeral OS disks",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
+ "severity": "High",
+ "text": "For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when running many pods/node since it requires high performance for running multiple pods and will generate huge logs with default AKS log rotation thresholds",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
+ "severity": "Low",
+ "text": "For hyper performance storage option use Ultra Disks on AKS",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance reasons",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
+ "severity": "Medium",
+ "text": "If using Azure Disks and AZs, consider having nodepools within a zone for LRS disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right zone or use ZRS disk for nodepools spanning multiple zones",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "Deploy your Azure landing zone connectivity resources in multiple regions, so that you can quickly support multi-region application landing zones and disaster recovery scenarios.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
+ "waf": "Operations"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Entra",
+ "severity": "Low",
+ "text": "Use Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
+ "waf": "Operations"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "Entra",
+ "severity": "High",
+ "text": "Use Azure Lighthouse for Multi-Tenant Management with the same IDs.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
+ "waf": "Operations"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
+ "severity": "High",
+ "text": "If you give a partner access to administer your tenant, use Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
+ "waf": "Cost"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "service": "Entra",
+ "severity": "High",
+ "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "service": "Entra",
+ "severity": "High",
+ "text": "Enforce Microsoft Entra ID Conditional Access policies for any user with rights to Azure environments.",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "service": "Entra",
+ "severity": "High",
+ "text": "Enforce multi-factor authentication for any user with rights to the Azure environments.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "If planning to switch from Active Directory Domain Services to Entra domain services, evaluate the compatibility of all workloads.",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "When using Microsoft Entra Domain Services use replica sets. Replica sets will improve the resiliency of your managed domain and allow you to deploy to additional regions. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
+ "waf": "Security"
+ },
+ {
+ "ammp": true,
+ "checklist": "Azure Landing Zone Review",
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "service": "Entra",
+ "severity": "High",
+ "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout. MFA will be turned on by default for all users in Oct 2024. We recommend updating these accounts to use passkey (FIDO2) or configure certificate-based authentication for MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Do not use on-premises synced accounts for Microsoft Entra ID role assignments, unless you have a scenario that specifically requires it.",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "When using Microsoft Entra ID Application Proxy to give remote users access to applications, manage it as a Platform resource as you can only have one instance per tenant.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "Use a hub-and-spoke network topology for network scenarios that require maximum flexibility.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Deploy shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS services.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Use a DDoS Network or IP protection plan for all public IP addresses in application landing zones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
+ "severity": "Medium",
+ "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "service": "ExpressRoute",
+ "severity": "Low",
+ "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualHubs",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "service": "ARS",
+ "severity": "Low",
+ "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "If you have more than 400 spoke networks in a region, deploy an additional hub to bypass VNet peering limits (500) and the maximum number of prefixes that can be advertised via ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "Limit the number of routes per route table to 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "High",
+ "text": "Use Standard Load Balancer SKU with a zone-redundant deployment, Selecting Standard SKU Load Balancer enhances reliability through availability zones and zone resiliency, ensuring deployments withstand zone and region failures. Unlike Basic, it supports global load balancing and offers an SLA.",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "High",
+ "text": "Ensure load balancer backend pool(s) contains at least two instances, Deploying Azure Load Balancers with at least two instances in the backend prevents a single point of failure and supports scalability.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
+ "severity": "Medium",
+ "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Do not use overlapping IP address ranges for production and disaster recovery sites.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "High",
+ "text": "Use Standard SKU and Zone-Redundant IPs when applicable, Public IP addresses in Azure can be of standard SKU, available as non-zonal, zonal, or zone-redundant. Zone-redundant IPs are accessible across all zones, resisting any single zone failure, thereby providing higher resilience. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
+ "service": "DNS",
+ "severity": "Medium",
+ "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
+ "service": "DNS",
+ "severity": "Medium",
+ "text": "For environments where name resolution across Azure and on-premises is required and there is no existing enterprise DNS service like Active Directory, use Azure DNS Private Resolver to route DNS requests to Azure or to on-premises DNS servers.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "service": "DNS",
+ "severity": "Low",
+ "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
+ "service": "DNS",
+ "severity": "High",
+ "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "Medium",
+ "text": "Implement a plan for managing DNS resolution between multiple Azure regions and when services fail over to another region",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "service": "Bastion",
+ "severity": "Medium",
+ "text": "Use Azure Bastion to securely connect to your network.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "service": "Bastion",
+ "severity": "Medium",
+ "text": "Use Azure Bastion in a subnet /26 or larger.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "WAF",
+ "severity": "Medium",
+ "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
+ "severity": "Low",
+ "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
+ "severity": "High",
+ "text": "When WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Plan for how to manage your network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "High",
+ "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "High",
+ "text": "Ensure there is a policy assignment to deny Public IP addresses directly tied to Virtual Machines. Use exclusions if public IPs are needed on specific VMs.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Use ExpressRoute as the primary connection to Azure. Use VPNs as a source of backup connectivity.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "When you use multiple ExpressRoute circuits or multiple on-prem locations, use BGP attributes to optimize routing.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Select the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuit peering location supports your Azure regions for the Local SKU.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
+ "service": "VPN",
+ "severity": "Medium",
+ "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "service": "VPN",
+ "severity": "Medium",
+ "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Use site-to-site VPN as failover of ExpressRoute, if only using a single ExpressRoute circuit.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "service": "ExpressRoute",
"severity": "Medium",
- "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "ExpressRoute",
+ "severity": "High",
+ "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
+ "service": "ExpressRoute",
+ "severity": "Medium",
+ "text": "Do not use ExpressRoute circuits for VNet-to-VNet communication.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Performance"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "Low",
+ "text": "Do not send Azure traffic to hybrid locations for inspection. Instead, follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network.",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
+ "service": "Firewall",
+ "severity": "Low",
+ "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Use application rules to filter outbound traffic on destination host name for supported protocols. Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over other protocols.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Use Azure Firewall Premium to enable additional security features.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Use IP Groups or IP prefixes to reduce number of IP table rules.",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Do not use wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it’s a sign that SNAT exhaustion might be imminent.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "If you are using Azure Firewall Premium, enable TLS Inspection.",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
+ "service": "Firewall",
+ "severity": "Low",
+ "text": "Use web categories to allow or deny outbound access to specific topics.",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "service": "Firewall",
+ "severity": "Medium",
+ "text": "Enable Azure Firewall DNS proxy configuration.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "Security"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs and metrics.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "Entra",
- "severity": "Medium",
- "text": "If planning to switch from Active Directory Domain Serivces to Entra domain services, evaluate the compatibility of all workloads",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
- "waf": "Security"
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "service": "Firewall",
+ "severity": "Low",
+ "text": "Implement backups for your firewall rules",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Operations"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
- "service": "Entra",
- "severity": "Medium",
- "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
- "waf": "Security"
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
+ "severity": "High",
+ "text": "Deploy Azure Firewall across multiple availability zones. Azure Firewall offers different SLAs depending on its deployment; in a single availability zone or across multiple, potentially improving reliability and performance.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Reliability"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
- "service": "Entra",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
"severity": "High",
- "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Security"
+ "text": "Configure DDoS Protection on the Azure Firewall VNet, Associate a DDoS protection plan with the virtual network hosting Azure Firewall to provide enhanced mitigation against DDoS attacks. Azure Firewall Manager integrates the creation of firewall infrastructure and DDoS protection plans. ",
+ "waf": "Reliability"
},
{
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Landing Zone Review",
- "guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "Entra",
- "severity": "Medium",
- "text": "Avoid using on-premises synced accounts for Microsoft Entra ID role assignments.",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "App Gateway",
+ "severity": "High",
+ "text": "Do not disrupt control-plane communication for Azure PaaS services injected into a virtual networks, such as with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Security"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Entra",
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
+ "service": "ExpressRoute",
"severity": "Medium",
- "text": "Where required, use Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications (hosted in the cloud or on-premises).",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Security"
},
{
"arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
+ "severity": "High",
+ "text": "Don't enable virtual network service endpoints by default on all subnets.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
+ "service": "Firewall",
"severity": "Medium",
- "text": "Leverage a network design based on the traditional hub-and-spoke network topology for network scenarios that require maximum flexibility.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
- "service": "VNet",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
+ "service": "ExpressRoute",
"severity": "High",
- "text": "Ensure that shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS servers.",
- "waf": "Cost"
+ "text": "Use at least a /27 prefix for your Gateway subnets.",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
- "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "VNet",
- "severity": "Medium",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
+ "service": "NSG",
+ "severity": "High",
+ "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
- "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "service": "NSG",
"severity": "Medium",
- "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance",
- "waf": "Reliability"
+ "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
- "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
- "service": "ExpressRoute",
- "severity": "Low",
- "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "NSG",
+ "severity": "Medium",
+ "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Network/virtualHubs",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
- "service": "ARS",
- "severity": "Low",
- "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
+ "service": "NSG",
+ "severity": "Medium",
+ "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
- "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
- "service": "VNet",
+ "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "NSG",
"severity": "Medium",
- "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
- "waf": "Performance"
+ "text": "Do not implement more than 900 NSG rules per NSG, due to the limit of 1000 rules.",
+ "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "waf": "Reliability"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
- "service": "VNet",
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
+ "service": "VWAN",
"severity": "Medium",
- "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "text": "Use Virtual WAN if your scenario is explicitly described in the list of Virtual WAN routing designs.",
+ "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "Operations"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "service": "VWAN",
"severity": "Medium",
- "text": "When connecting spoke virtual networks to the central hub virtual network, consider VNet peering limits (500), the maximum number of prefixes that can be advertised via ExpressRoute (1000)",
- "waf": "Reliability"
+ "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Performance"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
+ "service": "VWAN",
"severity": "Medium",
- "text": "Consider the limit of routes per route table (400).",
- "waf": "Reliability"
+ "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
- "service": "VNet",
- "severity": "High",
- "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings",
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "service": "VWAN",
+ "severity": "Medium",
+ "text": "Ensure that your virtual WAN network architecture aligns to an identified architecture scenario.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
- "service": "ExpressRoute",
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "service": "VWAN",
"severity": "Medium",
- "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
- "waf": "Security"
- },
- {
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
- "severity": "Low",
- "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "ExpressRoute",
- "severity": "High",
- "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "service": "VWAN",
+ "severity": "Medium",
+ "text": "Do not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
- "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
- "severity": "Low",
- "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Security"
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "service": "VWAN",
+ "severity": "Medium",
+ "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
- "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
- "severity": "High",
- "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16)",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Performance"
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "service": "VWAN",
+ "severity": "Medium",
+ "text": "Configure label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
- "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
- "service": "VNet",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "service": "VWAN",
"severity": "High",
- "text": "Avoid using overlapping IP address ranges for production and DR sites.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "text": "Assign at least a /23 prefix to virtual hubs to ensure enough IP space is available.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Network/dnsZones",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
- "severity": "Medium",
- "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operations"
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "High",
+ "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/dnsZones",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
- "service": "DNS",
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "Medium",
- "text": "For environments where name resolution across Azure and on-premises is required, consider using Azure DNS Private Resolver.",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Network/dnsZones",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
- "severity": "Low",
- "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
- "waf": "Operations"
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Medium",
+ "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/dnsZones",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "614658d3-558f-4d77-849b-821112df27ee",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
- "service": "DNS",
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "High",
- "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operations"
+ "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/bastionHosts",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
- "service": "Bastion",
- "severity": "Medium",
- "text": "Consider using Azure Bastion to securely connect to your network.",
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "service": "Policy",
+ "severity": "Low",
+ "text": "Use Azure Policy to control which services users can provision at the subscription/management group level.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/bastionHosts",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
- "service": "Bastion",
- "severity": "Medium",
- "text": "Use Azure Bastion in a subnet /26 or larger.",
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "High",
+ "text": "Use built-in policies where possible to minimize operational overhead.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "WAF",
+ "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "service": "Policy",
"severity": "Medium",
- "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
- "severity": "Low",
- "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Medium",
+ "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
- "severity": "High",
- "text": "Deploy WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
+ "service": "Policy",
+ "severity": "Medium",
+ "text": "If any data sovereignty requirements exist, Azure Policies should be deployed to enforce them.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
- "severity": "High",
- "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
+ "service": "Policy",
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, deploy sovereignty policy baseline and assign at correct management group level.",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
- "service": "VNet",
- "severity": "High",
- "text": "Assess and review network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed",
- "waf": "Reliability"
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
+ "service": "Policy",
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, document Sovereign Control objectives to policy mapping.",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/virtualNetworks",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
- "severity": "High",
- "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
+ "service": "Policy",
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, ensure process is in place for management of 'Sovereign Control objectives to policy mapping'.",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
- "service": "ExpressRoute",
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
+ "service": "Monitor",
"severity": "Medium",
- "text": "Ensure that you have investigated the possibility to use ExpressRoute as primary connection to Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
- "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"severity": "Medium",
- "text": "When you use multiple ExpressRoute circuits, or multiple on-prem locations, make sure to optimize routing with BGP attributes, if certain paths are preferred.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Decide whether to use a single Azure Monitor Logs workspace for all regions or to create multiple workspaces to cover various geographical regions. Each approach has advantages and disadvantages, including potential cross-region networking charges",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
- "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Monitor",
+ "severity": "High",
+ "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operations"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
+ "service": "VM",
"severity": "Medium",
- "text": "Ensure that you're using the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
- "service": "ExpressRoute",
- "severity": "High",
- "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
- "waf": "Cost"
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
+ "service": "VM",
+ "severity": "Medium",
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
- "service": "ExpressRoute",
- "severity": "High",
- "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuits' peering location supports your Azure regions for the Local SKU.",
- "waf": "Cost"
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "service": "VM",
+ "severity": "Medium",
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "microsoft.network/networkWatchers",
"checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
- "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
- "service": "ExpressRoute",
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Network Watcher",
"severity": "Medium",
- "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Use Network Watcher to proactively monitor traffic flows.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
- "service": "ExpressRoute",
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Monitor",
"severity": "Medium",
- "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Use Azure Monitor Logs for insights and reporting.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
- "service": "ExpressRoute",
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "service": "Monitor",
"severity": "Medium",
- "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Use Azure Monitor alerts for the generation of operational alerts.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/vpnGateways",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
- "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
- "service": "VPN",
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "Monitor",
"severity": "Medium",
- "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
- "waf": "Reliability"
+ "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/vpnGateways",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
- "service": "VPN",
- "severity": "Medium",
- "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Backup",
+ "severity": "Low",
+ "text": "When using Azure Backup, use the correct backup types (GRS, ZRS & LRS) for your backup, as the default setting is GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
- "severity": "High",
- "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Cost"
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "VM",
+ "severity": "Medium",
+ "text": "Use Azure guest policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
- "service": "ExpressRoute",
+ "description": "Use Azure Policy's guest configuration features to audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "VM",
"severity": "Medium",
- "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Monitor VM security configuration drift via Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
- "service": "ExpressRoute",
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
"severity": "Medium",
- "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
- "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
- "service": "ExpressRoute",
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "Backup",
"severity": "Medium",
- "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
- "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
- "service": "ExpressRoute",
- "severity": "Medium",
- "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "WAF",
+ "severity": "High",
+ "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
+ "waf": "Operations"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
- "service": "ExpressRoute",
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "WAF",
"severity": "Medium",
- "text": "Use site-to-site VPN as failover of ExpressRoute, especially if only using a single ExpressRoute circuit.",
- "waf": "Reliability"
+ "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
+ "waf": "Operations"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
- "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
- "service": "ExpressRoute",
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "Key Vault",
"severity": "High",
- "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
- "waf": "Reliability"
+ "text": "Use Azure Key Vault to store your secrets and credentials.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "d581a947-69a2-4783-942e-9df3664324c8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
- "service": "ExpressRoute",
- "severity": "High",
- "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
- "waf": "Reliability"
+ "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
- "service": "ExpressRoute",
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
- "service": "ExpressRoute",
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "ExpressRoute",
- "severity": "High",
- "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Reliability"
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
- "service": "ExpressRoute",
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operations"
+ "text": "Establish an automated process for key and certificate rotation.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Security"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
- "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
- "service": "ExpressRoute",
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Avoid using ExpressRoute circuits for VNet-to-VNet communication.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Performance"
+ "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
- "severity": "High",
- "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "Use an Azure Key Vault per application per environment per region.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
- "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
- "service": "Firewall",
- "severity": "Low",
- "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
- "service": "Firewall",
- "severity": "High",
- "text": "Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over protocols not supported by application rules.",
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "service": "Entra",
+ "severity": "Medium",
+ "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "service": "Defender",
"severity": "High",
- "text": "Use Azure Firewall Premium for additional security and protection.",
+ "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "service": "Defender",
"severity": "High",
- "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
+ "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
- "service": "Firewall",
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "service": "Defender",
"severity": "High",
- "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
+ "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
- "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
- "service": "Firewall",
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "service": "VM",
"severity": "High",
- "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance",
+ "text": "Enable Endpoint Protection on IaaS Servers.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
- "service": "Firewall",
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "service": "VM",
"severity": "Medium",
- "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Operations"
- },
- {
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
- "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
- "service": "Firewall",
- "severity": "Important",
- "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Operations"
- },
- {
- "ammp": true,
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
- "service": "Firewall",
- "severity": "High",
- "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
- "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
- "service": "Firewall",
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"severity": "Medium",
- "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use",
- "waf": "Performance"
+ "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
- "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
- "service": "Firewall",
- "severity": "Medium",
- "text": "Use IP Groups or IP prefixes to reduce number of IP table rules",
- "waf": "Performance"
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "High",
+ "text": "Centralized threat detection with correlated logs - consolidate security data in a central location where it can be correlated across various services via SIEM (security information and event management)",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
- "service": "Firewall",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
+ "service": "Entra",
"severity": "Medium",
- "text": "Avoid wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs",
- "waf": "Performance"
+ "text": "For Sovereign Landing Zone, enable transparancy logs on the Entra ID tenant.",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
- "service": "Firewall",
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "service": "Entra",
"severity": "Medium",
- "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it’s a sign that SNAT exhaustion might be imminent.",
- "waf": "Performance"
+ "text": "For Sovereign Landing Zone, enable customer Lockbox on the Entra ID tenant.",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Landing Zone Review",
- "guid": "346840b8-1064-496e-8396-4b1340172d52",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
- "service": "Firewall",
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Storage",
"severity": "High",
- "text": "Enable TLS Inspection",
- "waf": "Performance"
+ "text": "Enable secure transfer to storage accounts.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Landing Zone Review",
- "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
- "service": "Firewall",
- "severity": "Low",
- "text": "Use web categories to allow or deny outbound access to specific topics.",
- "waf": "Performance"
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
+ "service": "Storage",
+ "severity": "High",
+ "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
- "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
- "service": "Firewall",
- "severity": "Medium",
- "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
- "waf": "Performance"
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "service": "Key Vault",
+ "severity": "High",
+ "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
+ "waf": "Operations"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details",
- "service": "Firewall",
- "severity": "Medium",
- "text": "Enable Azure Firewall DNS proxy configuration ",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Follow Metaprompting guardrails for resonsible AI",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
- "severity": "Medium",
- "text": "Ensure there is a policy assignment to deny Public IP addresses directly tied to Virtual Machines",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Consider Gateway patterns with APIM or solutions like AI central for better rate limiting, load balancing, authentication and logging",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
- "service": "Firewall",
- "severity": "Low",
- "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Enable monitoring for your AOAI instances",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
- "severity": "Low",
- "text": "Implement backups for your firewall rules",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type == 'microsoft.insights/metricalerts' | extend compliant = (properties.targetResourceType =~ 'Microsoft.CognitiveServices/accounts') | project id, compliant",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Create alerts to notify teams of events such as an entry in the activity log created by an action performed on the resource, such as regenerating its subscription keys or a metric threshold such as the number of errors exceeding 10 in an hour",
+ "waf": "Operational Excellence"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Landing Zone Review",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "High",
- "text": "Ensure that control-plane communication for Azure PaaS services injected into a virtual network is not broken, for example with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Security"
+ "text": "Monitor token usage to prevent service disruptions due to capacity",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Security"
+ "text": "observe metrics like processed inference tokens, generated completion tokens monitor for rate limit",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/virtualNetworks",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
- "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "VNet",
- "severity": "Medium",
- "text": "Don't enable virtual network service endpoints by default on all subnets.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "Low",
+ "text": "Enable and configure Diagnostics for the Azure OpenAI Service. If not sufficient, consider using a gateway such as Azure API Managements in front of Azure OpenAI to log both incoming prompts and outgoing responses, where permitted",
+ "waf": "Operational Excellence"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Use Infrastructure as code to deploy the Azure OpenAI Service, model deployments, and all related resources",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/azureFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
- "severity": "Medium",
- "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Use Microsoft Entra Authentication with Managed Identity instead of API Key",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "High",
- "text": "Use at least a /27 prefix for your Gateway subnets",
- "waf": "Security"
+ "text": "Evaluate the performance/accuracy of the system with a known golden dataset which has the inputs and the correct answers. Leverage capabilities in PromptFlow for Evaluation.",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/networkSecurityGroups",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
- "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
- "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
- "service": "NSG",
- "severity": "Medium",
- "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Evaluate usage of Provisioned throughput model ",
+ "waf": "Performance"
},
{
- "arm-service": "Microsoft.Network/networkSecurityGroups",
- "checklist": "Azure Landing Zone Review",
- "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
- "service": "NSG",
- "severity": "Medium",
- "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Review and implement Azure AI content safety",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Network/networkSecurityGroups",
- "checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
- "severity": "Medium",
- "text": "The application team should use application security groups at the subnet-level NSGs to help protect multi-tier VMs within the landing zone.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Define and evaluate the throughput of the system based on tokens & response per minute and align with requirements",
+ "waf": "Performance"
},
{
- "arm-service": "Microsoft.Network/networkSecurityGroups",
- "checklist": "Azure Landing Zone Review",
- "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Security"
+ "text": "Improve latency of the system by limiting token sizes, streaming options for applications like chatbots or conversational interfaces. Streaming can enhance the perceived performance of Azure OpenAI applications by delivering responses to users in an incremental manner",
+ "waf": "Performance"
},
{
- "arm-service": "Microsoft.Network/networkSecurityGroups",
- "checklist": "Azure Landing Zone Review",
- "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Security"
+ "text": "Estimate elasticity demands to determine synchronous and batch request segregation based on priority. For high priority, use synchronous approach and for low priority, asynchronous batch processing with queue is preferred",
+ "waf": "Performance"
},
{
- "arm-service": "Microsoft.Network/networkSecurityGroups",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
- "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "NSG",
- "severity": "Medium",
- "text": "Consider the limit of NSG rules per NSG (1000).",
- "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "waf": "Reliability"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Benchmark token consumption requirements based on estimated demands from consumers. Consider using the Azure OpenAI benchmarking tool to help you validate the throughput if you are using Provisioned Throughput Unit deployments",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Consider Virtual WAN for simplified Azure networking management, and make sure your scenario is explicitly described in the list of Virtual WAN routing designs",
- "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
- "waf": "Operations"
+ "text": "If you are using Provisioned Throughput Units (PTUs), consider deploying a token-per-minute (TPM) deployment for overflow requests. Use a gateway to route requests to the TPM deployment when the PTU limits are reached.",
+ "waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Choose the right model for the right task. Pick models with right tradeoff between speed, quality of response and output complexity",
+ "waf": "Performance"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
+ "text": "Have a baseline for performance without fine-tuning for knowing whether or not fine-tuning has improved model performance",
"waf": "Performance"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"severity": "Low",
- "text": "Follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network",
- "waf": "Performance"
+ "text": "Deploy multiple OAI instances across regions",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
- "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "Medium",
- "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Implement retry & healthchecks with Gateway pattern like APIM",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Ensure that the network architecture is within the Azure Virtual WAN limits.",
+ "text": "Ensure having adequate quotas of TPM & RPM for the workload",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
- "waf": "Operations"
+ "text": "Review the considerations in HAI toolkit guidance and apply those interaction practices for the slution",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Make sure that your IaC deployments does not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
+ "text": "Deploy separate fine tuned models across regions if finetuning is employed",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
+ "text": "Regularly backup and replicate critical data to ensure data availability and recoverability in case of data loss or system failures. Leverage Azure's backup and disaster recovery services to protect your data.",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
- "service": "VWAN",
- "severity": "Medium",
- "text": "Make sure that your IaC deployments are configuring label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type == 'microsoft.search/searchservices' | extend compliant = (sku.name != 'free' and properties.replicaCount >= 3) | project id, compliant",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Azure AI search service tiers should be choosen to have a SLA ",
"waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "9c75dfef-573c-461c-a698-68598595581a",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
- "service": "VWAN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "Low",
+ "text": "Classify data and sensitivity, labeling with Microsoft Purview before generating the embeddings and make sure to treat the embeddings generated with same sensitivity and classification",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
"severity": "High",
- "text": "Assign enough IP space to virtual hubs, ideally a /23 prefix.",
- "waf": "Reliability"
+ "text": "Encrypt data used for RAG with SSE/Disk encryption with optional BYOK",
+ "waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
"severity": "High",
- "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
+ "text": "Ensure TLS is enforced for data in transit across data sources, AI search used for Retrieval-Augmented Generation (RAG) and LLM communication",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Medium",
- "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Use RBAC to manage access to Azure OpenAI services. Assign appropriate permissions to users and restrict access based on their roles and responsibilities",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes",
+ "text": "Implement data encryption, masking or redaction techniques to hide sensitive data or replace it with obfuscated values in non-production environments or when sharing data for testing or troubleshooting purposes",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/ai-onboarding",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Utilize Azure Defender to detect and respond to security threats and set up monitoring and alerting mechanisms to identify suspicious activities or breaches. Leverage Azure Sentinel for advanced threat detection and response",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
+ "text": "Establish data retention and disposal policies to adhere to compliance regulations. Implement secure deletion methods for data that is no longer required and maintain an audit trail of data retention and disposal activities",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "43334f24-9116-4341-a2ba-527526944008",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
- "service": "Policy",
- "severity": "Low",
- "text": "Use Azure Policy to control which services users can provision at the subscription/management group level",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Implement Prompt shields and groundedness detection using Content Safety ",
+ "waf": "Operational Excellence"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Ensure compliance with relevant data protection regulations, such as GDPR or HIPAA, by implementing privacy controls and obtaining necessary consents or permissions for data processing activities.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use built-in policies where possible to minimize operational overhead.",
+ "text": "Educate your employees about data security best practices, the importance of handling data securely, and potential risks associated with data breaches. Encourage them to follow data security protocols diligently.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
- "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Keep production data separate from development and testing data. Only use real sensitive data in production and utilize anonymized or synthetic data in development and test environments.",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
+ "text": "If you have varying levels of data sensitivity, consider creating separate indexes for each level. For instance, you could have one index for general data and another for sensitive data, each governed by different access protocols",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "19048384-5c98-46cb-8913-156a12476e49",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
+ "text": "Take segregation a step further by placing sensitive datasets in different instances of the service. Each instance can be controlled with its own specific set of RBAC policies",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Recognize that embeddings and vectors generated from sensitive information are themselves sensitive. This data should be afforded the same protective measures as the source material",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Apply RBAC to th data stores having embeddings and vectors and scope access based on role's access requirements",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
- "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
- "service": "Policy",
- "severity": "Medium",
- "text": "If any data sovereignty requirements exist, Azure Policies can be deployed to enforce them",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type =~ 'Microsoft.CognitiveServices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (properties.privateEndpointConnections != '[]' and properties.publicNetworkAccess !~ 'enabled')",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Configure private endpoint for AI services to restrict service access within your network",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
- "service": "Policy",
- "severity": "Medium",
- "text": "For Sovereign Landing Zone, sovereignty policy baseline' policy initiative is deployed and and assigned at correct MG level.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Enforce strict inbound and outbound traffic control with Azure Firewall and UDRs and limit the external integration points",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
- "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
- "service": "Policy",
- "severity": "Medium",
- "text": "For Sovereign Landing Zone, sovereign Control objectives to policy mapping' is documented.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Implement network segmentation and access controls to restrict access to the LLM application only to authorized users and systems and prevent lateral movement",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Authorization/policyDefinitions",
- "checklist": "Azure Landing Zone Review",
- "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
- "service": "Policy",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "For Sovereign Landing Zone, process is in place for CRUD of 'Sovereign Control objectives to policy mapping'.",
+ "text": "Use prompt compression tools like LLMLingua or gprtrim",
+ "waf": "Cost Optimization"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type =~ 'Microsoft.CognitiveServices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (isnotnull(identity))",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Ensure that APIs and endpoints used by the LLM application are properly secured with authentication and authorization mechanisms, such as Managed identities, API keys or OAuth, to prevent unauthorized access.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Insights/components",
- "checklist": "Azure Landing Zone Review",
- "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "waf": "Operations"
+ "text": "Enforce strong end user authentication mechanisms, such as multi-factor authentication, to prevent unauthorized access to the LLM application and associated network resources",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Insights/components",
- "checklist": "Azure Landing Zone Review",
- "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Monitor",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Operations"
+ "text": "Implement network monitoring tools to detect and analyze network traffic for any suspicious or malicious activities. Enable logging to capture network events and facilitate forensic analysis in case of security incidents",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "service": "VM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operations"
+ "text": "Conduct security audits and penetration testing to identify and address any network security weaknesses or vulnerabilities in the LLM application's network infrastructure",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
- "severity": "Medium",
- "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type == 'microsoft.cognitiveservices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (tags != '{}')",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "Low",
+ "text": "Azure AI Services are properly tagged for better management",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
- "severity": "Medium",
- "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "Low",
+ "text": "Azure AI Service accounts follows organizational naming conventions",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "microsoft.network/networkWatchers",
- "checklist": "Azure Landing Zone Review",
- "guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Network Watcher",
- "severity": "Medium",
- "text": "Use Network Watcher to proactively monitor traffic flows",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Diagnostic logs in Azure AI services resources should be enabled",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.Insights/components",
- "checklist": "Azure Landing Zone Review",
- "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Monitor",
- "severity": "Medium",
- "text": "Use Azure Monitor Logs for insights and reporting.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type =~ 'Microsoft.CognitiveServices/accounts' or type == 'microsoft.search/searchservices' | project id, compliant = (properties.disableLocalAuth == true)",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Key access (local authentication) is recommended to be disabled for security. After disabling key based access, Microsoft Entra ID becomes the only access method, which allows maintaining minimum privilege principle and granular control. ",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Insights/components",
- "checklist": "Azure Landing Zone Review",
- "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
- "service": "Monitor",
- "severity": "Medium",
- "text": "Use Azure Monitor alerts for the generation of operational alerts.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Store and manage keys securely using Azure Key Vault. Avoid hard-coding or embedding sensitive keys within your LLM application's code and retrieve them securely from Azure Key Vault using managed identities",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.Insights/components",
- "checklist": "Azure Landing Zone Review",
- "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "Monitor",
- "severity": "Medium",
- "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Regularly rotate and expire keys stored in Azure Key Vault to minimize the risk of unauthorized access.",
+ "waf": "Security"
},
{
- "arm-service": "Microsoft.RecoveryServices/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Backup",
- "severity": "Medium",
- "text": "When using Azure Backup, consider the different backup types (GRS, ZRS & LRS) as the default setting is GRS",
- "waf": "Reliability"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Use tiktoken to understand token sizes for token optimizations in conversational mode",
+ "waf": "Cost Optimization"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "VM",
- "severity": "Medium",
- "text": "Use Azure policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Follow secure coding practices to prevent common vulnerabilities such as injection attacks, cross-site scripting (XSS), or security misconfigurations",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "description": "Azure Policy's guest configuration features can audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
- "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "VM",
- "severity": "Medium",
- "text": "Monitor VM security configuration drift via Azure Policy.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Setup a process to regularly update and patch the LLM libraries and other system components",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
- "severity": "Medium",
- "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Adhere to Azure OpenAI or other LLMs terms of use, policies and guidance and allowed use cases",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.RecoveryServices/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "Backup",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
- "waf": "Operations"
+ "text": "Understand difference in cost of base models and fine tuned models and token step sizes",
+ "waf": "Cost Optimization"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"severity": "High",
- "text": "Leverage Availability Zones for your VMs in regions where they are supported.",
- "waf": "Reliability"
+ "text": "Batch requests, where possible, to minimize the per-call overhead which can reduce overall costs. Ensure you optimize batch size",
+ "waf": "Cost Optimization"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "High",
- "text": "Avoid running a production workload on a single VM.",
- "waf": "Reliability"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Set up a cost tracking system that monitors model usage and use that information to help inform model choices and prompt sizes",
+ "waf": "Cost Optimization"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Azure Load Balancer and Application Gateway distribute incoming network traffic across multiple resources.",
- "waf": "Reliability"
+ "text": "Set a maximum limit on the number of tokens per model response (max_tokens and the number of completions to generate). Optimize the size to ensure it is large enough for a valid response",
+ "waf": "Cost Optimization"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "WAF",
- "severity": "High",
- "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Plan and manage AI Search Vector storage",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
- "checklist": "Azure Landing Zone Review",
- "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "WAF",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
- "waf": "Operations"
+ "text": "Ensure deployment of Azure OpenAI instances across your various environments, such as development, test, and production supporting lrarning & experimentation. Apply LLMOps practices to automate the lifecycle management of your GenAI applications",
+ "waf": "Operational Excellence"
},
{
- "ammp": true,
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "5017f154-e3ab-4369-9829-e7e316183687",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
"severity": "High",
- "text": "Use Azure Key Vault to store your secrets and credentials",
- "waf": "Security"
+ "text": "Evaluate usage of billing models - PAYG vs PTU. Start with PAYG and consider PTU when the usage is predictable in production since it offers dedicated memory and compute, reserved capacity, and consistent maximum latency for the specified model version",
+ "waf": "Cost Optimization"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "guid": "a0477a20-9945-4bda-9333-4f2491163418",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
- "waf": "Security"
+ "text": "Evaluate the quality of prompts and applications when switching between model versions",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
- "waf": "Security"
+ "text": "Evaluate, monitor and refine your GenAI apps for features like groundedness, relevance, accuracy, coherence and fluency",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Evaluate your Azure AI Search results based on different search parameters",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
- "waf": "Security"
+ "text": "Look at fine tuning models as way of increasing accuracy only when you have tried other basic approaches like prompt engineering and RAG with your data",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "913156a1-2476-4e49-b541-acdce979377b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Establish an automated process for key and certificate rotation.",
- "waf": "Security"
+ "text": "Use prompt engineering techniques to improve the accuracy of LLM responses",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
+ "text": "Red team your GenAI applications",
"waf": "Security"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
- "waf": "Security"
+ "text": "Provide end users with scoring options for LLM responses and track these scores. ",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "High",
+ "text": "Consider Quota management practices. Use dynamic quota for certain use cases when your application can use extra capacity opportunistically or the application itself is driving the rate at which the Azure OpenAI API is called",
+ "waf": "Cost Optimization"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use an Azure Key Vault per application per environment per region.",
- "waf": "Security"
+ "text": "Use Load balancer solutions like APIM based gateway for balancing load and capacity across services and regions",
+ "waf": "Operational Excellence"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc411",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython-new&pivots=programming-language-studio#import-training-data-from-azure-blob-store",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
- "waf": "Security"
+ "text": "Follow the guidance for fine-tuning with large data files and import the data from an Azure blob store. Large files, 100 MB or larger, can become unstable when uploaded through multipart forms because the requests are atomic and can't be retried or resumed",
+ "waf": "Reliability"
},
{
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
- "service": "Key Vault",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc412",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
- "waf": "Security"
+ "text": "Manage rate limits for your model deployments and monitor usage of tokens per minute (TPM) and requests per minute (RPM) for pay-as-you-go deployments",
+ "waf": "Reliability"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc413",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
- "waf": "Security"
+ "text": "Monitor provision-managed utilization if you're using the provisioned throughput payment model",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "09945bda-4333-44f2-9911-634182ba5275",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
- "service": "Defender",
- "severity": "High",
- "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc414",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/content-filters",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Tune content filters to minimize false positives from overly aggressive filters",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
- "service": "Defender",
- "severity": "High",
- "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc415",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/encrypt-data-at-rest",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Use customer-managed keys for fine-tuned models and training data that's uploaded to Azure OpenAI",
"waf": "Security"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
- "service": "Defender",
- "severity": "High",
- "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "graph": "resources | where type == 'microsoft.cognitiveservices/accounts' and kind =~ 'contentsafety' | project id, compliant = 1",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc416",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Implement jailbreak risk detection to safeguard your language model deployments against prompt injection attacks",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
- "service": "VM",
- "severity": "High",
- "text": "Enable Endpoint Protection on IaaS Servers.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc417",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitor-openai",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Use security controls like throttling, service isolation and gateway pattern to prevent attacks that might exhaust model usage quotas",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Compute/virtualMachines",
- "checklist": "Azure Landing Zone Review",
- "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
- "link": "https://learn.microsoft.com/azure/security-center/",
- "service": "VM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a9",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
- "waf": "Security"
+ "text": "Develop your cost model, considering prompt sizes. Understanding prompt input and response sizes and how text translates into tokens helps you create a viable cost model",
+ "waf": "Cost Optimization"
},
{
- "arm-service": "Microsoft.Insights/components",
- "checklist": "Azure Landing Zone Review",
- "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a1",
+ "link": "https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
- "waf": "Security"
+ "text": "Consider model pricing and capabilities when you choose models. Start with less-costly models for less-complex tasks like text generation or completion tasks and for complex tasks like language translation or content understanding, consider using more advanced models. Optimize costs while still achieving the desired application performance",
+ "waf": "Cost Optimization"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
- "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "For Sovereign Landing Zone, transparancy logs is enabled on the Entra ID tenant.",
- "waf": "Security"
+ "text": "Maximize Azure OpenAI price breakpoints like fine-tuning and model breakpoints like image generation to your advantage. Fine-tuning is charged per hour, use as much time as you have available per hour to improve results without slipping into the next billing period. The cost for generating 100 images is the same as the cost for 1 image",
+ "waf": "Cost Optimization"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a3",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "Medium",
- "text": "For Sovereign Landing Zone, customer Lockbox is enabled on the Entra ID tenant.",
- "waf": "Security"
+ "text": "Remove unused fine-tuned models when they're no longer being consumed to avoid incurring an ongoing hosting fee",
+ "waf": "Cost Optimization"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Storage/storageAccounts",
- "checklist": "Azure Landing Zone Review",
- "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Storage",
- "severity": "High",
- "text": "Secure transfer to storage accounts should be enabled",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8g",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Create concise prompts that provide enough context for the model to generate a useful response. Also ensure that you optimize the limit of the response length.",
+ "waf": "Cost Optimization"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Storage/storageAccounts",
- "checklist": "Azure Landing Zone Review",
- "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
- "service": "Storage",
- "severity": "High",
- "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
- "waf": "Security"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec219",
+ "link": "https://learn.microsoft.com/azure/ai-services/create-account-bicep",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Use infrastructure as code (IaC) to deploy Azure OpenAI, model deployments, and other infrastructure required for fine-tuning models",
+ "waf": "Operational Excellence"
},
{
- "ammp": true,
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Landing Zone Review",
- "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "service": "Key Vault",
- "severity": "High",
- "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
- "waf": "Operations"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5855",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/service/openai",
+ "service": "Azure OpenAI",
+ "severity": "Medium",
+ "text": "Consider using dedicated model deployments per consumer group to provide per-model usage isolation that can help prevent noisy neighbors between your consumer groups",
+ "waf": "Operational Excellence"
},
{
"arm-service": "Microsoft.ApiManagement/service",
@@ -3611,171 +5019,183 @@
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Leverage zone-redundancy to ensure high availability in the event of zone-level failures. Use Premium V2/V3 or Isolated v2 tiers, which provide support for zone-redundant deployments and ensure minimal downtime during disasters.",
"guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
"service": "App Services",
"severity": "Low",
- "text": "Refer to baseline highly available zone-redundant web application architecture for best practices",
+ "text": "Implement a baseline highly available zone-redundant web application architecture. Ensure your Azure App Service is on Premium V2/V3 or Isolated v2 tiers for zone-redundant support.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Leverage staging slots for zero-downtime deployments and automated backups to ensure disaster recovery. Choose the appropriate tier (Standard or Premium) based on the number of slots and disaster recovery requirements.",
+ "graph": "resources | where type =~ 'microsoft.web/serverfarms' | extend compliant = (sku.tier == 'Premium' or sku.tier == 'Standard') | distinct id,compliant",
"guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
"service": "App Services",
"severity": "Medium",
- "text": "Use Premium and Standard tiers. These tiers support staging slots and automated backups.",
+ "text": "Use Premium and Standard tiers for staging slots and automated backups. Align your backup retention period with disaster recovery needs.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Availability Zones provide physical isolation across datacenters in a region, reducing downtime during outages. Verify your region supports Availability Zones and use Premium V2/V3 tiers for zone-redundant deployments.",
"guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-service",
"service": "App Services",
"severity": "High",
- "text": "Leverage Availability Zones where regionally applicable (requires Premium v2 or v3 tier)",
+ "text": "Leverage Availability Zones where regionally applicable (Premium V2/V3 tier required). Check region support for Availability Zones.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Enable health checks to detect unhealthy instances in real-time and automatically replace them to maintain high availability and application reliability.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.HealthCheckPath != '') | distinct id,compliant",
"guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "link": "https://learn.microsoft.com/azure/app-service/monitor-instances-health-check",
"service": "App Services",
"severity": "Medium",
- "text": "Implement health checks",
+ "text": "Implement health checks to monitor and detect issues with App Service instances. Health checks enable automatic instance replacement on failure.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Follow best practices for configuring backups and restores in Azure App Service and ASE to guarantee data availability and ensure recovery during disaster scenarios.",
"guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "link": "https://learn.microsoft.com/azure/app-service/manage-backup",
"service": "App Services",
"severity": "High",
- "text": "Refer to backup and restore best practices for Azure App Service",
+ "text": "Refer to backup and restore best practices for Azure App Service and App Service Environments (ASE) to ensure data availability and recovery.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Ensure high availability by incorporating scaling, fault tolerance, monitoring, and zone redundancy into your App Service architecture. Leverage health checks and availability zones to maintain uptime.",
"guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/compute/azure-app-service/reliability",
"service": "App Services",
"severity": "High",
- "text": "Implement Azure App Service reliability best practices",
+ "text": "Implement Azure App Service reliability best practices, including auto-scaling, fault tolerance, health checks, and zone redundancy.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Prepare for disaster recovery by implementing region failover strategies. Utilize active-active and active-passive configurations, automated failover, and Infrastructure as Code (IaC) for seamless failover during outages.",
"guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "link": "https://learn.microsoft.com/azure/app-service/manage-disaster-recovery#recover-app-content-only",
"service": "App Services",
"severity": "Low",
- "text": "Familiarize with how to move an App Service app to another region During a disaster",
+ "text": "Familiarize with App Service region failover, including active-active and active-passive configurations, automated failover, and IaC deployment.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Azure App Service offers built-in reliability features, including scaling, fault tolerance, and service-level agreements (SLAs). Leverage these features to maintain consistent performance during outages.",
"guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-app-service",
"service": "App Services",
"severity": "High",
- "text": "Familiarize with reliability support in Azure App Service",
+ "text": "Familiarize with reliability support in Azure App Service, including scaling options, SLAs, and automated recovery mechanisms.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Enabling 'Always On' for Function Apps ensures that the app does not go idle, maintaining its availability and responsiveness at all times.",
"guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "link": "https://learn.microsoft.com/azure/azure-functions/dedicated-plan#always-on",
"service": "App Services",
"severity": "Medium",
- "text": "Ensure \"Always On\" is enabled for Function Apps running on a app service plan",
+ "text": "Ensure 'Always On' is enabled for Function Apps running on App Service plans to prevent idling and ensure continuous availability.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
+ "description": "Health checks monitor the health of App Service instances, enabling automatic replacement of unhealthy instances to maintain high availability.",
"guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "link": "https://learn.microsoft.com/azure/app-service/monitor-instances-health-check",
"service": "App Services",
"severity": "Medium",
- "text": "Monitor App Service instances using Health checks",
+ "text": "Monitor App Service instances using Health checks to detect unhealthy instances and automatically replace them.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
"guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/availability-overview",
"service": "App Services",
"severity": "Medium",
- "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests",
+ "text": "Monitor availability and responsiveness of web app or website using Application Insights availability tests, ensuring proactive detection of performance issues and downtime.",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
"guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/availability-standard-tests",
"service": "App Services",
"severity": "Low",
"text": "Use Application Insights Standard test to monitor availability and responsiveness of web app or website",
"waf": "Reliability"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a safe and audited environment for storing secrets and is well-integrated with App Service through the Key Vault SDK or App Service Key Vault References.",
+ "description": "Azure Key Vault ensures secrets are encrypted, securely stored, and accessed only by authorized applications. It supports audit logging, and secret versioning, and reduces the risk of accidental exposure of sensitive information.",
"guid": "834ac932-223e-4ce8-8b12-3071a5416415",
"link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
"service": "App Services",
"severity": "High",
- "text": "Use Key Vault to store secrets",
+ "text": "Use Azure Key Vault to store any secrets the application needs. Key Vault provides a secure, managed, and audited environment for storing secrets, and integrates seamlessly with App Service via App Service Key Vault References for enhanced security.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Use a Managed Identity to connect to Key Vault either using the Key Vault SDK or through App Service Key Vault References.",
+ "description": "Managed Identity eliminates the need for hard-coded credentials by allowing App Service to authenticate to Azure Key Vault securely. This reduces the risk of credential exposure and simplifies secret management for enhanced security.",
"guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
"link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
"service": "App Services",
"severity": "High",
- "text": "Use Managed Identity to connect to Key Vault",
+ "text": "Use Managed Identity to securely connect to Azure Key Vault for accessing secrets, through App Service Key Vault References.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Store the App Service TLS certificate in Key Vault.",
+ "description": "Storing TLS certificates in Azure Key Vault enhances security by providing centralized, secure management and automated renewal of certificates. This reduces the risk of manual handling errors and certificate expiration.",
"guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
"link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
"service": "App Services",
"severity": "High",
- "text": "Use Key Vault to store TLS certificate.",
+ "text": "Use Azure Key Vault to securely store and manage TLS certificates for App Service.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Systems that process sensitive information should be isolated. To do so, use separate App Service Plans or App Service Environments and consider the use of different subscriptions or management groups.",
+ "description": "To minimize exposure and improve security, isolate systems processing sensitive data. Leverage separate App Service Plans or App Service Environments for isolation, and use different subscriptions or management groups to enforce stricter boundaries and governance.",
"guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
"link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
"service": "App Services",
"severity": "Medium",
- "text": "Isolate systems that process sensitive information",
+ "text": "Isolate systems that process sensitive information using separate App Service Plans, App Service Environments (ASE), and consider different subscriptions or management groups for enhanced security.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
"description": "Local disks on App Service are not encrypted and sensitive data should not be stored on those. (For example: D:\\\\Local and %TMP%).",
"guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
@@ -3786,73 +5206,73 @@
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "For authenticated web application, use a well established Identity Provider like Azure AD or Azure AD B2C. Leverage the application framework of your choice to integrate with this provider or use the App Service Authentication / Authorization feature.",
+ "description": "Use Microsoft Entra ID or B2C for secure user authentication and Single Sign-On (SSO) across applications. Integrate using the built-in App Service Authentication/Authorization feature for streamlined security and compliance with modern authentication protocols like OpenID Connect.",
"guid": "919ca0b2-c121-459e-814b-933df574eccc",
"link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
"service": "App Services",
"severity": "Medium",
- "text": "Use an established Identity Provider for authentication",
+ "text": "Use Microsoft Entra ID or B2C for secure authentication and Single Sign-On (SSO).",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Deploy code to App Service from a controlled and trusted environment, like a well-managed and secured DevOps deployment pipeline. This avoids code that was not version controlled and verified to be deployed from a malicious host.",
+ "description": "Ensure all code deployments to App Service originate from a controlled, secured environment, such as a well-managed DevOps pipeline. This practice mitigates the risk of deploying unauthorized or malicious code by enforcing version control, code verification, and secure hosting.",
"guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
"link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
"service": "App Services",
"severity": "High",
- "text": "Deploy from a trusted environment",
+ "text": "Deploy code to App Service from a trusted and secure environment.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Disable basic authentication for both FTP/FTPS and for WebDeploy/SCM. This disables access to these services and enforces the use of Azure AD secured endpoints for deployment. Note that the SCM site can also be opened using Azure AD credentials.",
+ "description": "Disable basic authentication for FTP/FTPS and WebDeploy/SCM to enhance security by enforcing Microsoft Entra ID secured endpoints for deployment. This ensures that only authenticated users using Microsoft Entra ID credentials can access deployment services, including the SCM site.",
"guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
"link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
"service": "App Services",
"severity": "High",
- "text": "Disable basic authentication",
+ "text": "Disable basic authentication for FTP/FTPS and WebDeploy/SCM.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Where possible use Managed Identity to connect to Azure AD secured resources. If this is not possible, store secrets in Key Vault and connect to Key Vault using a Managed Identity instead.",
+ "description": "Wherever possible, use Managed Identity to securely connect to Microsoft Entra ID-secured resources without storing credentials. If this is not feasible, store secrets in Azure Key Vault and access them using Managed Identity to maintain security and reduce the risk of credential exposure.",
"guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
"link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
"service": "App Services",
"severity": "High",
- "text": "Use Managed Identity to connect to resources",
+ "text": "Use Managed Identity to connect to Microsoft Entra ID secured resources.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Where using images stored in Azure Container Registry, pull these using a Managed Identity.",
+ "description": "When using images stored in Azure Container Registry, pull these images using a Managed Identity to avoid storing credentials. This ensures secure access to container images and reduces the risk of credential exposure.",
"guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
"link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
"service": "App Services",
"severity": "High",
- "text": "Pull containers using a Managed Identity",
+ "text": "Pull container images from Azure Container Registry using a Managed Identity.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "By configuring the diagnostic settings of App Service, you can send all telemetry to Log Analytics as the central destination for logging and monitoring. This allows you to monitor runtime activity of App Service such as HTTP logs, application logs, platform logs, ...",
+ "description": "Configure diagnostic settings to send telemetry and security logs (including HTTP, platform, and audit logs) to Log Analytics. Centralized logging enhances monitoring, threat detection, and compliance reporting.",
"guid": "47768314-c115-4775-a2ea-55b46ad48408",
"link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
"service": "App Services",
"severity": "Medium",
- "text": "Send App Service runtime logs to Log Analytics",
+ "text": "Send App Service runtime and security logs to Log Analytics for centralized monitoring and alerting.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
"description": "Set up a diagnostic setting to send the activity log to Log Analytics as the central destination for logging and monitoring. This allows you to monitor control plane activity on the App Service resource itself.",
"guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
@@ -3863,109 +5283,109 @@
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Control outbound network access using a combination of regional VNet integration, network security groups and UDR's. Traffic should be routed to an NVA such as Azure Firewall. Ensure to monitor the Firewall's logs.",
+ "description": "Use regional VNet integration, Network Security Groups (NSGs), and User-Defined Routes (UDRs) to control outbound network access. Route traffic through a Network Virtual Appliance (NVA), such as Azure Firewall, and monitor firewall logs to ensure traffic is properly controlled and secure.",
"guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
"link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
"service": "App Services",
"severity": "Medium",
- "text": "Outbound network access should be controlled",
+ "text": "Control outbound network access for App Service using VNet integration, NSGs, UDRs, and firewalls.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "You can provide a stable outbound IP by using VNet integration and using a VNet NAT Gateway or an NVA like Azure Firewall. This allows the receiving party to allow-list based on IP, should that be needed. Note that for communications towards Azure Services often there's no need to depend on the IP address and mechanics like Service Endpoints should be used instead. (Also the use of private endpoints on the receiving end avoids for SNAT to happen and provides a stable outbound IP range.)",
+ "description": "Provide a stable outbound IP by using VNet integration with a NAT Gateway or Network Virtual Appliance (NVA) like Azure Firewall. This enables the receiving party to allow-list based on IP, if necessary. For communications with Azure services, use mechanisms like Service Endpoints or private endpoints to avoid relying on static IPs, ensuring secure and efficient connectivity.",
"guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
"link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
"service": "App Services",
"severity": "Low",
- "text": "Ensure a stable IP for outbound communications towards internet addresses",
+ "text": "Ensure a stable IP for outbound communications by using VNet NAT Gateway or Azure Firewall.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Control inbound network access using a combination of App Service Access Restrictions, Service Endpoints or Private Endpoints. Different access restrictions can be required and configured for the web app itself and the SCM site.",
+ "description": "Control inbound network access by configuring App Service Access Restrictions, Service Endpoints, or Private Endpoints. Ensure appropriate restrictions are set for both the web app and the SCM (deployment) site to limit unauthorized access and enhance security.",
"guid": "0725769e-e669-41a4-a34a-c932223ece80",
"link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
"service": "App Services",
"severity": "High",
- "text": "Inbound network access should be controlled",
+ "text": "Control inbound network access using Access Restrictions, Service Endpoints, or Private Endpoints.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Protect against malicious inbound traffic using a Web Application Firewall like Application Gateway or Azure Front Door. Make sure to monitor the WAF's logs.",
+ "description": "Protect App Service from malicious inbound traffic by deploying a Web Application Firewall (WAF) using Azure Application Gateway or Azure Front Door. Ensure WAF logs are monitored regularly to detect and respond to security threats.",
"guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
"link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
"service": "App Services",
"severity": "High",
- "text": "Use a WAF in front of App Service",
+ "text": "Use a Web Application Firewall (WAF) in front of App Service.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Make sure the WAF cannot be bypassed by locking down access to only the WAF. Use a combination of Access Restrictions, Service Endpoints and Private Endpoints.",
+ "description": "To prevent the Web Application Firewall (WAF) from being bypassed, lock down access to App Service by using Access Restrictions, Service Endpoints, and Private Endpoints. This ensures that all traffic is routed through the WAF, providing a secure front layer of protection.",
"guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
"link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
"service": "App Services",
"severity": "High",
- "text": "Avoid for WAF to be bypassed",
+ "text": "Ensure the WAF cannot be bypassed by securing access to App Service.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Set minimum TLS policy to 1.2 in App Service configuration.",
+ "description": "Ensure that the minimum TLS policy is set to 1.2 or higher, with a preference for TLS 1.3, to enhance security through stronger encryption protocols. TLS 1.3 provides additional security improvements and faster handshake times, reducing vulnerabilities associated with older versions.",
"graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
"guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
"link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
"service": "App Services",
"severity": "Medium",
- "text": "Set minimum TLS policy to 1.2",
+ "text": "Set minimum TLS policy to 1.2 or higher, preferably 1.3, in App Service configuration.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Configure App Service to use HTTPS only. This causes App Service to redirect from HTTP to HTTPS. Strongly consider the use of HTTP Strict Transport Security (HSTS) in your code or from your WAF, which informs browsers that the site should only be accessed using HTTPS.",
+ "description": "Configure App Service to enforce HTTPS-only, automatically redirecting all HTTP traffic to HTTPS. Additionally, implement HTTP Strict Transport Security (HSTS) in your code or via a Web Application Firewall (WAF) to ensure browsers only access the site over HTTPS, enhancing security by preventing downgrade attacks.",
"graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
"guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
"link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
"service": "App Services",
"severity": "High",
- "text": "Use HTTPS only",
+ "text": "Use HTTPS only and consider enabling HTTP Strict Transport Security (HSTS).",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Do not use wildcards in your CORS configuration, as this allows all origins to access the service (thereby defeating the purpose of CORS). Specifically only allow the origins that you expect to be able to access the service.",
+ "description": "Do not use wildcards (*) in your CORS configuration, as this permits unrestricted access from any origin, compromising security. Instead, explicitly specify trusted origins that are allowed to access the service, ensuring controlled access.",
"guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
"link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
"service": "App Services",
"severity": "High",
- "text": "Wildcards must not be used for CORS",
+ "text": "Avoid using wildcards for CORS; specify allowed origins explicitly.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Remote debugging must not be turned on in production as this opens additional ports on the service which increases the attack surface. Note that the service does turn of remote debugging automatically after 48 hours.",
+ "description": "Remote debugging should not be enabled in production as it opens additional ports, increasing the attack surface. Although App Service automatically turns off remote debugging after 48 hours, it is recommended to disable it manually in production to maintain a secure environment.",
"graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
"guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
"link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
"service": "App Services",
"severity": "High",
- "text": "Turn off remote debugging",
+ "text": "Turn off remote debugging in production environments.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
"description": "Enable Defender for App Service. This (amongst other threats) detects communications to known malicious IP addresses. Review the recommendations from Defender for App Service as part of your operations.",
"guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
@@ -3976,7 +5396,7 @@
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
"description": "Azure provides DDoS Basic protection on its network, which can be improved with intelligent DDoS Standard capabilities which learns about normal traffic patterns and can detect unusual behavior. DDoS Standard applies to a Virtual Network so it must be configured for the network resource in front of the app, such as Application Gateway or an NVA.",
"guid": "223ece80-b123-4071-a541-6415833ea3ad",
@@ -3987,42 +5407,42 @@
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Where using images stored in Azure Container Registry, pull these over a virtual network from Azure Container Registry using its private endpoint and the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
+ "description": "When using images stored in Azure Container Registry, ensure they are pulled over a virtual network by using a private endpoint and configuring the app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'. This ensures secure communication between App Service and the registry, preventing exposure to the public internet.",
"guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
"link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
"service": "App Services",
"severity": "Medium",
- "text": "Pull containers over a Virtual Network",
+ "text": "Pull container images over a Virtual Network from Azure Container Registry.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Conduct a penetration test on the web application following the penetration testing rules of engagement.",
+ "description": "Perform a penetration test on the web application in accordance with Azure's penetration testing rules of engagement. This helps identify vulnerabilities and security weaknesses that can be addressed before they are exploited.",
"guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
"link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
"service": "App Services",
"severity": "Medium",
- "text": "Conduct a penetration test",
+ "text": "Conduct a penetration test on the web application.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Deploy trusted code that was validated and scanned for vulnerabilities according to DevSecOps practices.",
+ "description": "Ensure that only trusted code, which has been validated and scanned for vulnerabilities, is deployed to production following DevSecOps practices. This minimizes the risk of introducing security vulnerabilities into the application environment.",
"guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
"link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
"service": "App Services",
"severity": "Medium",
- "text": "Deploy validated code",
+ "text": "Deploy validated and vulnerability-scanned code.",
"waf": "Security"
},
{
- "arm-service": "Microsoft.Web/sites",
+ "arm-service": "microsoft.web/sites",
"checklist": "Azure App Service Review",
- "description": "Use the latest versions of supported platforms, programming languages, protocols, and frameworks.",
+ "description": "Ensure that the latest versions of supported platforms, programming languages, protocols, and frameworks are used. Regular updates mitigate the risk of security vulnerabilities and ensure compatibility with security patches.",
"guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
"link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
"service": "App Services",
@@ -4030,6 +5450,61 @@
"text": "Use up-to-date platforms, languages, protocols and frameworks",
"waf": "Security"
},
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Leverage Auto-Healing in Azure App Service to automatically restart instances or trigger custom actions based on pre-defined failure conditions like memory thresholds, HTTP errors, or specific event logs.",
+ "guid": "60b3a935-33e5-45c9-87c7-53882e395b46",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-diagnostics",
+ "service": "App Services",
+ "severity": "Medium",
+ "text": "Use Auto-Healing with custom rules to restart App Service instances automatically when failures occur.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Configure Azure Monitor alerts based on Application Insights metrics for response times, failure rates, and overall availability. Alerts help detect issues proactively and reduce mean-time-to-recovery (MTTR).",
+ "guid": "e52e4514-02a7-4e81-a98e-88ce1b18e557",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/app/alerts",
+ "service": "App Services",
+ "severity": "Medium",
+ "text": "Set up alerts for critical Application Insights metrics, such as response time and failure rates.",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Use Azure Policy to enforce security, compliance, and governance configurations for App Service. Policies can ensure that critical settings such as TLS versions, backup configurations, and network restrictions are enforced across all App Service instances.",
+ "guid": "361e886f-ca40-4ead-a8e9-1379c642ae9c",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "App Services",
+ "severity": "High",
+ "text": "Apply Azure Policy to enforce compliance across App Service configurations.",
+ "waf": "Governance"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Leverage Azure Cost Management to track and forecast App Service expenses. Set up alerts for budget thresholds to avoid overspending, and optimize costs based on resource utilization trends.",
+ "guid": "42eb48f0-28ff-497c-b2c0-a8fa1f989832",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/",
+ "service": "App Services",
+ "severity": "Low",
+ "text": "Monitor App Service costs using Azure Cost Management and create cost alerts.",
+ "waf": "Cost"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "If you have predictable and steady usage of App Service, purchasing Reserved Instances can significantly reduce long-term costs. Commit to one or three years for lower pricing compared to pay-as-you-go.",
+ "guid": "e489221b-487e-48a3-aaab-48e3d205ca12",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/reservations/",
+ "service": "App Services",
+ "severity": "Medium",
+ "text": "Purchase reserved instances for App Service plans to optimize long-term costs.",
+ "waf": "Cost"
+ },
{
"arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
@@ -4268,6 +5743,7 @@
{
"arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| where type =~ 'Microsoft.Network/virtualNetworkGateways'| mv-expand ipConfigurations=properties.ipConfigurations| project subnetId=tostring(ipConfigurations.properties.subnet.id)| where isnotempty(subnetId)| join (resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | project id, compliant = (enableDdosProtection == 'true')",
"guid": "334fdf91-c234-4182-a652-75269440b4be",
"service": "AVS",
"severity": "Medium",
@@ -4511,6 +5987,7 @@
{
"arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id",
"guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
"service": "AVS",
"severity": "High",
@@ -4520,6 +5997,7 @@
{
"arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| where type =~ 'Microsoft.AVS/privateClouds'| join kind=leftouter(resources| where type =~ 'Microsoft.Insights/metricalerts'| mv-expand scopes=properties.scopes| mv-expand criteria=properties.criteria.allOf| extend metricName=criteria.metricName| distinct tostring(scopes), tostring(metricName))on $left.id == $right.scopes| extend compliant=toint(metricName in ('UsageAverage', 'EffectiveCpuAverage', 'DiskUsedPercentage'))| summarize compliant=min(compliant) by id",
"guid": "9659e396-80e7-4828-ac93-5657d02bff45",
"service": "AVS",
"severity": "High",
@@ -4529,6 +6007,7 @@
{
"arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
+ "graph": "resources| distinct subscriptionId| join kind=leftouter( resources | where type =~ 'microsoft.insights/activitylogalerts' | mv-expand condition1 = properties.condition.allOf | mv-expand condition2 = condition1.anyOf | extend alertEnabled = tostring(properties.enabled) | summarize set_condition1=make_set(condition1.equals), set_condition2=make_set(condition2.equals) by id, name,type,tenantId,resourceGroup,subscriptionId, alertEnabled | where set_has_element(set_condition1, 'ServiceHealth') | extend category = 'ServiceHealth' | extend all = iff(set_has_element(set_condition1, 'ServiceHealth') and array_length(set_condition2) == 0, true, false) | extend incident = iff(all, true, iff(set_has_element(set_condition1, 'Incident'), true, set_has_element(set_condition2, 'Incident'))) | extend maintenance = iff(all, true, iff(set_has_element(set_condition1, 'Maintenance'), true, set_has_element(set_condition2, 'Maintenance'))) | extend informational = iff(all, true, iff(set_has_element(set_condition1, 'Informational') or set_has_element(set_condition1, 'ActionRequired'), true, set_has_element(set_condition2, 'Informational') or set_has_element(set_condition2, 'ActionRequired'))) | extend security = iff(all, true, iff(set_has_element(set_condition1, 'Security'), true, set_has_element(set_condition2, 'Security'))) | project id, name, subscriptionId, category, tostring(alertEnabled), tostring(incident), tostring(maintenance), tostring(informational), tostring(security) | summarize count_alertEnabled=countif(alertEnabled == 'true'), count_incident=countif(incident == 'True'), count_maintenance=countif(maintenance == 'True'), count_informational=countif(informational == 'True'), count_security=countif(security == 'True') by subscriptionId) on subscriptionId| project subscriptionId, alertEnabled=iff(isnotnull(count_alertEnabled), count_alertEnabled, 0), incident=iff(isnotnull(count_incident), count_incident, 0), security=iff(isnotnull(count_security), count_security, 0), maintenance=iff(isnotnull(count_maintenance), count_maintenance, 0), informational=iff(isnotnull(count_informational), count_informational, 0)| order by incident, maintenance, informational, security desc| project id=subscriptionId, compliant=(alertEnabled > 0 and incident > 0 and security > 0 and maintenance > 0 and informational > 0)",
"guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
"service": "AVS",
"severity": "High",
@@ -5003,6 +6482,7 @@
"checklist": "Azure Function Review",
"guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
"link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' and tolower(kind) !contains 'workflow' | extend aspResourceId = tostring(properties.serverFarmId), managedEnvId = tostring(properties.managedEnvironmentId), sku = tostring(properties.sku) | extend sku = iif(isnotempty(sku), sku, iif(isnotempty(managedEnvId), 'ContainerApps', '')) | where sku !in ('Dynamic', 'FlexConsumption', '') | extend aspName = tostring(split(aspResourceId, '/').[-1]), managedEnvName = tostring(split(managedEnvId, '/').[-1]) | extend HostingPlan = tostring(iif(isnotempty(aspName), aspName, managedEnvName)) | project functionAppName = name, functionAppId = id, HostingPlan, sku | join kind=inner ( resources | where type =~ 'Microsoft.Web/serverfarms' or type =~ 'Microsoft.App/managedEnvironments' | extend HostingPlan = tostring(name), zoneRedundant = tostring(properties.zoneRedundant), compliant = tobool(properties.zoneRedundant) | project HostingPlan, resourceId = id, zoneRedundant, compliant ) on HostingPlan | project functionAppName, functionAppId, sku, HostingPlan, resourceId, zoneRedundant, compliant",
"service": "Azure Functions",
"severity": "High",
"text": "Leverage Availability Zones where regionally applicable (not available for Consumption tier)",
@@ -5033,6 +6513,7 @@
"checklist": "Azure Function Review",
"guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
"link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "query": "resources | where type =~ 'Microsoft.Web/sites' and kind has 'functionapp' | where tolower(kind) !contains 'workflow' | where isnotempty(properties.serverFarmId) | extend sku = tostring(properties.sku) | where isnotempty(sku) | where sku !in ('Dynamic', 'FlexConsumption', 'ElasticPremium') | extend alwaysOn = properties.siteConfig.alwaysOn | project functionAppName = name, functionAppId = id, serverFarmId = tostring(properties.serverFarmId), sku, alwaysOn, compliant = tobool(alwaysOn)",
"service": "Azure Functions",
"severity": "High",
"text": "Ensure 'Always On' is enabled for all Function Apps running on App Service Plan",
@@ -5183,6 +6664,7 @@
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
"description": "Azure Storage by default has a public IP address and is Internet-reachable. Private endpoints allow to securely expose Azure Storage only to those Azure Compute resources that need access, thus eliminating exposure to the public Internet",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != ('Succeeded') or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled') | extend compliant = (isnotnull(properties.privateEndpointConnections) and properties.privateEndpointConnections[0].properties.provisioningState == 'Succeeded' and properties.publicNetworkAccess == 'Disabled') | distinct id, compliant",
"guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
"link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
"service": "Azure Storage",
@@ -5205,6 +6687,7 @@
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
"description": "Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | project storageAccountId = id | join kind=leftouter (resourceContainers | where type == 'microsoft.security/pricings' | where name == 'StorageAccounts' | project resourceId = id, pricingTier = properties.pricingTier) on $left.storageAccountId == $right.resourceId | where isnull(pricingTier) or pricingTier != 'Standard' | extend compliant = false | distinct storageAccountId, compliant",
"guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
"link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
"service": "Azure Storage",
@@ -5282,6 +6765,7 @@
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
"description": "Consider disabling unprotected HTTP/80 access to the storage account, so that all data transfers are encrypted, integrity protected, and the server is authenticated. ",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (properties.supportsHttpsTrafficOnly == false) | distinct id, compliant",
"guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
"link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
"service": "Azure Storage",
@@ -5314,12 +6798,24 @@
{
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
- "description": "AAD tokens should be favored over shared access signatures, wherever possible",
+ "description": ". Enforcing the latest TLS version will reject request from clients using the older version. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "High",
+ "text": "Enforce the latest TLS version for a storage account",
+ "waf": "Security"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Microsoft Entra ID tokens should be favored over shared access signatures, wherever possible",
"guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
"link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
"service": "Azure Storage",
"severity": "High",
- "text": "Use Azure Active Directory (Azure AD) tokens for blob access",
+ "text": "Use Microsoft Entra ID tokens for blob access",
"waf": "Security"
},
{
@@ -5346,12 +6842,13 @@
{
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
- "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on AAD authentication makes it easier to tie storage access to a user. ",
+ "description": "Storage account keys ('shared keys') have very little audit capabilities. While it can be monitored on who/when fetched a copy of the keys, once the keys are in the hands of multiple people, it is impossible to attribute usage to a specific user. Solely relying on Entra ID authentication makes it easier to tie storage access to a user. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
"guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
"link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
"service": "Azure Storage",
"severity": "High",
- "text": "Consider disabling storage account keys, so that only AAD access (and user delegation SAS) is supported.",
+ "text": "Consider disabling storage account keys, so that only Microsoft Entra ID access (and user delegation SAS) is supported.",
"waf": "Security"
},
{
@@ -5528,12 +7025,13 @@
{
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
- "description": "Leverage Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) to find storage accounts which allow anonymous blob access.",
+ "description": "Anonymous access may present a security risk. We recommend that you disable anonymous access for optimal security. Disallowing anonymous access helps to prevent data breaches caused by undesired anonymous access.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
"guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
"link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
"service": "Azure Storage",
"severity": "High",
- "text": "Consider whether public blob access is needed, or whether it can be disabled for certain storage accounts. ",
+ "text": "Consider whether public blob anonymous access is needed, or whether it can be disabled for certain storage accounts. ",
"waf": "Security"
},
{
@@ -5549,6 +7047,7 @@
{
"arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Storage Review Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Storage/StorageAccounts' | extend compliant = (sku.name != 'Standard_LRS' and sku.name != 'Premium_LRS') | distinct id, compliant",
"guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Azure Storage",
@@ -5721,6 +7220,7 @@
"checklist": "Container Apps Review",
"guid": "af416482-663c-4ed6-b195-b44c7068e09c",
"link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support",
+ "query": "resources | where type =~ 'Microsoft.App/managedEnvironments' | project name, resourceGroup, location, zoneRedundancy = tolower(tostring(properties.zoneRedundant)) | extend Compliance = iff(zoneRedundancy == 'true', true, false)",
"service": "Container Apps",
"severity": "High",
"text": "Leverage Availability Zones if regionally applicable",
@@ -5731,6 +7231,7 @@
"checklist": "Container Apps Review",
"guid": "95bc80ec-6499-4d14-a7d2-7d296b1d8abc",
"link": "https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment",
+ "query": "resources | where type =~ 'Microsoft.App/containerApps' | project name, resourceGroup, location, minReplicas = toint(properties.template.scale.minReplicas), maxReplicas = toint(properties.template.scale.maxReplicas) | extend Compliance = iff(minReplicas >= 1, true, false)",
"service": "Container Apps",
"severity": "High",
"text": "Use more than one replica and enable Zone Redundancy.",
@@ -6694,6 +8195,7 @@
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "IoT Hub Review",
"guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
"link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
@@ -6703,6 +8205,7 @@
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "IoT Hub Review",
"guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
"link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
@@ -6712,6 +8215,7 @@
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "IoT Hub Review",
"guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
"link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
@@ -6721,6 +8225,7 @@
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "IoT Hub Review",
"guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
"link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
@@ -6730,6 +8235,7 @@
"waf": "Reliability"
},
{
+ "arm-service": "Microsoft.Devices/IotHubs",
"checklist": "IoT Hub Review",
"guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
"link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
@@ -6746,560 +8252,336 @@
"service": "Key Vault",
"severity": "High",
"text": "Familiarize yourself with the Key Vault's best practices such as isolation recommendations, access control, data protection, backup, and logging.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "Key Vault is a managed service and Microsoft will handle the failover within and across region. Familiarize yourself with the Key Vault's availability and redundancy.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "The contents of your key vault are replicated within the region and to a secondary region at least 150 miles away, but within the same geography to maintain high durability of your keys and secrets. Familiarize yourself with the Key Vault's data replication.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "During failover, access policy or firewall configurations and settings can't be changed. The key vault will be in read-only mode during failover. Familiarize yourself with the Key Vault's failover guidance.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "When you back up a key vault object, such as a secret, key, or certificate, the backup operation will download the object as an encrypted blob. This blob can't be decrypted outside of Azure. To get usable data from this blob, you must restore the blob into a key vault within the same Azure subscription and Azure geography. Familiarize yourself with the Key Vault's backup and restore guidance.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "Key Vault",
- "severity": "High",
- "text": "If you want protection against accidental or malicious deletion of your secrets, configure soft-delete and purge protection features on your key vault.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "Key Vault",
- "severity": "Low",
- "text": "Key Vault's soft-deleted resources are retained for a set period of 90 calendar days. Familiarize yourself with the Key Vault's soft-delete guidance.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
- "service": "Key Vault",
- "severity": "Low",
- "text": "Understand Key Vault's backup limitations. Key Vault does not support the ability to backup more than 500 past versions of a key, secret, or certificate object. Attempting to backup a key, secret, or certificate object may result in an error. It is not possible to delete previous versions of a key, secret, or certificate.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
- "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
- "service": "Key Vault",
- "severity": "Low",
- "text": "Key Vault doesn't currently provide a way to back up an entire key vault in a single operation and keys, secrets and certitificates must be backup indvidually. Familiarize yourself with the Key Vault's backup and restore guidance.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.KeyVault/vaults",
- "checklist": "Azure Key Vault",
- "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
- "service": "Key Vault",
- "severity": "Medium",
- "text": "Purge protection is recommended when using keys for encryption to prevent data loss. Purge protection is an optional Key Vault behavior and is not enabled by default. Purge protection can only be enabled once soft-delete is enabled. It can be turned on via CLI, PowerShell or Portal.",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.Web/sites",
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
- "severity": "High",
- "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.Web/sites",
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
- "severity": "High",
- "text": "Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.Web/sites",
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
- "severity": "High",
- "text": "Consider a Cross-Region DR strategy for critical workloads",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.Web/sites",
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
- "severity": "High",
- "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.Web/sites",
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
- "severity": "Medium",
- "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
- "waf": "Operations"
- },
- {
- "arm-service": "Microsoft.DBforMySQL/servers",
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
- "severity": "Medium",
- "text": "Leverage Flexible Server",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.DBforMySQL/servers",
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
- "severity": "High",
- "text": "Leverage Availability Zones where regionally applicable",
- "waf": "Reliability"
- },
- {
- "arm-service": "Microsoft.DBforMySQL/servers",
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
- "severity": "Medium",
- "text": "Leverage Data-in replication for cross-region DR scenarios",
- "waf": "Reliability"
- },
- {
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "Medium",
- "text": "If you use customer-managed TLS certificates with Azure Front Door, use the 'Latest' certificate version. Reduce the risk of outages caused by manual certificate renewal",
- "waf": "Operations"
- },
- {
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
- "severity": "Medium",
- "text": "Ensure you are using Application Gateway v2 SKU",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
- },
- {
- "arm-service": "Microsoft.Network/loadBalancers",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
- "severity": "Medium",
- "text": "Ensure you are using the Standard SKU for your Azure Load Balancers",
- "waf": "Security"
- },
- {
- "arm-service": "Microsoft.Network/loadBalancers",
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
- "severity": "Medium",
- "text": "Ensure your Load Balancers frontend IP addresses are zone-redundant (unless you require zonal frontends).",
- "waf": "Security"
- },
- {
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
- "severity": "Medium",
- "text": "Your Application Gateways v2 should be deployed in subnets with IP prefixes equal or larger than /24",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
- },
- {
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Application Delivery Networking",
- "description": "Administration of reverse proxies in general and WAF in particular is closer to the application than to networking, so they belong in the same subscription as the app. Centralizing the Application Gateway and WAF in the connectivity subscription might be OK if it is managed by one single team.",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "severity": "Medium",
- "text": "Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound HTTP(S) connections within the landing-zone virtual network and with the apps that they're securing.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Security"
- },
- {
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "severity": "Medium",
- "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
- },
- {
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Configure autoscaling with a minimum amount of instances of two.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "Key Vault is a managed service and Microsoft will handle the failover within and across region. Familiarize yourself with the Key Vault's availability and redundancy.",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/applicationGateways",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Deploy Application Gateway across Availability Zones",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "The contents of your key vault are replicated within the region and to a secondary region at least 150 miles away, but within the same geography to maintain high durability of your keys and secrets. Familiarize yourself with the Key Vault's data replication.",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S apps that span multiple Azure regions.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "text": "During failover, access policy or firewall configurations and settings can't be changed. The key vault will be in read-only mode during failover. Familiarize yourself with the Key Vault's failover guidance.",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
"severity": "Medium",
- "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Security"
+ "text": "When you back up a key vault object, such as a secret, key, or certificate, the backup operation will download the object as an encrypted blob. This blob can't be decrypted outside of Azure. To get usable data from this blob, you must restore the blob into a key vault within the same Azure subscription and Azure geography. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
"severity": "High",
- "text": "Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "If you want protection against accidental or malicious deletion of your secrets, configure soft-delete and purge protection features on your key vault.",
"waf": "Reliability"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
"severity": "Low",
- "text": "If users only need access to internal applications, has Microsoft Entra ID Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Security"
+ "text": "Key Vault's soft-deleted resources are retained for a set period of 90 calendar days. Familiarize yourself with the Key Vault's soft-delete guidance.",
+ "waf": "Reliability"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "severity": "Medium",
- "text": "To reduce the number of firewall ports open for incoming connections in your network, consider using Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications.",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Security"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Low",
+ "text": "Understand Key Vault's backup limitations. Key Vault does not support the ability to backup more than 500 past versions of a key, secret, or certificate object. Attempting to backup a key, secret, or certificate object may result in an error. It is not possible to delete previous versions of a key, secret, or certificate.",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "High",
- "text": "Deploy your WAF policy for Front Door in 'Prevention' mode.",
- "waf": "Security"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Low",
+ "text": "Key Vault doesn't currently provide a way to back up an entire key vault in a single operation and keys, secrets and certitificates must be backup indvidually. Familiarize yourself with the Key Vault's backup and restore guidance.",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "High",
- "text": "Avoid combining Azure Traffic Manager and Azure Front Door.",
- "waf": "Security"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "Purge protection is recommended when using keys for encryption to prevent data loss. Purge protection is an optional Key Vault behavior and is not enabled by default. Purge protection can only be enabled once soft-delete is enabled. It can be turned on via CLI, PowerShell or Portal.",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "High",
- "text": "Use the same domain name on Azure Front Door and your origin. Mismatched host names can cause subtle bugs.",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "Medium",
+ "text": "RBAC is recommended to control access to your key vault. Familiarize yourself with the Key Vault's access control guidance.",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "Low",
- "text": "Disable health probes when there is only one origin in an Azure Front Door origin group.",
- "waf": "Performance"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
+ "severity": "High",
+ "text": "Select the right Logic App hosting plan based on your business & SLO requirements",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "Medium",
- "text": "Select good health probe endpoints for Azure Front Door. Consider building health endpoints that check all of your application's dependencies.",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
+ "severity": "High",
+ "text": "Protect logic apps from region failures with zone redundancy and availability zones",
"waf": "Reliability"
},
{
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "Low",
- "text": "Use HEAD health probes with Azure Front Door, to reduce the traffic that Front Door sends to your application.",
- "waf": "Performance"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
+ "severity": "High",
+ "text": "Consider a Cross-Region DR strategy for critical workloads",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "Microsoft.Network/loadBalancers",
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
"severity": "High",
- "text": "Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT scalability",
+ "text": "If deploying to an Isolated environment, use or migrate to App Service Environment (ASE) v3",
"waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "High",
- "text": "Use managed TLS certificates with Azure Front Door. Reduce operational cost and risk of outages due to certificate renewals.",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
+ "severity": "Medium",
+ "text": "Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic App code",
"waf": "Operations"
},
{
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"severity": "Medium",
- "text": "Define your Azure Front Door WAF configuration as code. By using code, you can more easily adopt new rule set version and gain additional protection.",
- "waf": "Operations"
+ "text": "Leverage Flexible Server",
+ "waf": "Reliability"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
"severity": "High",
- "text": "Use end-to-end TLS with Azure Front Door. Use TLS for connections from your clients to Front Door, and from Front Door to your origin.",
- "waf": "Security"
+ "text": "Leverage Availability Zones where regionally applicable",
+ "waf": "Reliability"
+ },
+ {
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
+ "severity": "Medium",
+ "text": "Leverage Data-in replication for cross-region DR scenarios",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
"severity": "Medium",
- "text": "Use HTTP to HTTPS redirection with Azure Front Door. Support older clients by redirecting them to an HTTPS request automatically.",
+ "text": "Ensure you are using Application Gateway v2 SKU",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "Microsoft.Network/loadBalancers",
"checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "High",
- "text": "Enable the Azure Front Door WAF. Protect your application from a range of attacks.",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
+ "severity": "Medium",
+ "text": "Ensure you are using the Standard SKU for your Azure Load Balancers",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "Microsoft.Network/loadBalancers",
"checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "High",
- "text": "Tune the Azure Front Door WAF for your workload. Reduce false positive detections.",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
+ "severity": "Medium",
+ "text": "Ensure your Load Balancers frontend IP addresses are zone-redundant (unless you require zonal frontends).",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "High",
- "text": "Enable request body inspection feature enabled in Azure Front Door WAF policy.",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
+ "severity": "Medium",
+ "text": "Your Application Gateways v2 should be deployed in subnets with IP prefixes equal or larger than /24",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "High",
- "text": "Enable the Azure Front Door WAF default rule sets. The default rule sets detect and block common attacks.",
+ "description": "Administration of reverse proxies in general and WAF in particular is closer to the application than to networking, so they belong in the same subscription as the app. Centralizing the Application Gateway and WAF in the connectivity subscription might be OK if it is managed by one single team.",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "Medium",
+ "text": "Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound HTTP(S) connections within the landing-zone virtual network and with the apps that they're securing.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Security"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "High",
- "text": "Enable the Azure Front Door WAF bot protection rule set. The bot rules detect good and bad bots.",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/application-gateway/tutorial-protect-application-gateway-ddos",
+ "service": "App Gateway",
+ "severity": "Medium",
+ "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
"severity": "Medium",
- "text": "Use the latest Azure Front Door WAF rule set version. Rule set updates are regularly updated to take account of the current threat landscape.",
- "waf": "Security"
+ "text": "Configure autoscaling with a minimum amount of instances of two.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Reliability"
},
{
- "arm-service": "microsoft.network/frontdoors",
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
"severity": "Medium",
- "text": "Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients accidentally or intentionally sending large amounts of traffic in a short period of time.",
- "waf": "Security"
+ "text": "Deploy Application Gateway across Availability Zones",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Reliability"
},
{
"arm-service": "microsoft.network/frontdoors",
"checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "Front Door",
"severity": "Medium",
- "text": "Use a high threshold for Azure Front Door WAF rate limits. High rate limit thresholds avoid blocking legitimate traffic, while still providing protection against extremely high numbers of requests that might overwhelm your infrastructure. ",
+ "text": "When using Front Door and Application Gateway to help protect HTTP/S apps, use WAF policies in Front Door. Lock down Application Gateway to receive traffic only from Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/frontdoors",
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
"checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "severity": "High",
+ "text": "Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"severity": "Low",
- "text": "If you are not expecting traffic from all geographical regions, use geo-filters to block traffic from non-expected countries.",
+ "text": "If users only need access to internal applications, has Microsoft Entra ID Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "Security"
},
{
- "arm-service": "microsoft.network/frontdoors",
"checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"severity": "Medium",
- "text": "Specify the unknown (ZZ) location when geo-filtering traffic with the Azure Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses can't be geo-matched.",
+ "text": "To reduce the number of firewall ports open for incoming connections in your network, consider using Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Security"
},
+ {
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
+ "severity": "High",
+ "text": "Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT scalability",
+ "waf": "Reliability"
+ },
{
"ammp": true,
"arm-service": "microsoft.network/applicationGateways",
@@ -7309,18 +8591,19 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
"service": "App Gateway",
"severity": "High",
- "text": "Enable the Azure Application Gateway WAF bot protection rule set The bot rules detect good and bad bots.",
+ "text": "Enable the Azure Application Gateway WAF bot protection rule set. The bot rules detect good and bad bots.",
"waf": "Security"
},
{
"ammp": true,
"arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | extend compliant = (properties['policySettings']['requestBodyCheck'] == 'true' and properties['policySettings']['state'] =~ 'Enabled') | distinct id, name, compliant",
"guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
"service": "App Gateway",
"severity": "High",
- "text": "Enable request body inspection feature enabled in Azure Application Gateway WAF policy.",
+ "text": "Ensure if request body inspection feature is enabled in Azure Application Gateway WAF policy.",
"waf": "Security"
},
{
@@ -7331,16 +8614,15 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
"service": "App Gateway",
"severity": "High",
- "text": "Tune the Azure Application Gateway WAF for your workload. Reduce false positive detections.",
+ "text": "Tune the Azure Application Gateway WAF in detection mode for your workload. Reduce false positive detections.",
"waf": "Security"
},
{
"ammp": true,
"arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
"guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
"service": "App Gateway",
"severity": "High",
"text": "Deploy your WAF policy for Application Gateway in 'Prevention' mode.",
@@ -7406,16 +8688,6 @@
"text": "Add diagnostic settings to save your Azure Application Gateway WAF logs.",
"waf": "Operations"
},
- {
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "Medium",
- "text": "Add diagnostic settings to save your Azure Front Door WAF logs.",
- "waf": "Operations"
- },
{
"arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
@@ -7426,16 +8698,6 @@
"text": "Send Azure Application Gateway WAF logs to Microsoft Sentinel.",
"waf": "Operations"
},
- {
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "Medium",
- "text": "Send Azure Front Door WAF logs to Microsoft Sentinel.",
- "waf": "Operations"
- },
{
"arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
@@ -7466,19 +8728,10 @@
"text": "Filter inbound traffic in the backends so that they only accept connections from the Application Gateway subnet, for example with NSGs.",
"waf": "Security"
},
- {
- "arm-service": "microsoft.network/frontdoors",
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "Medium",
- "text": "Make sure your origins only take traffic from your Azure Front Door instance.",
- "waf": "Security"
- },
{
"arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways'| extend compliant = (properties['backendHttpSettingsCollection'][0]['properties']['port'] =~ '443') |where properties['backendHttpSettingsCollection'][0]['properties']['port'] =~ '443'|distinct id,name,compliant",
"guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
"link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
"service": "App Gateway",
@@ -7523,7 +8776,7 @@
"link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
"service": "App Gateway",
"severity": "High",
- "text": "Enable connection draining during planned service updates to prevent connection loss to existing membrs of the backend pool",
+ "text": "Enable connection draining during planned service updates to prevent connection loss to existing members of the backend pool",
"waf": "Security"
},
{
@@ -8238,6 +9491,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
"guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "SAP",
@@ -8286,6 +9540,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
"guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
"link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
"service": "SAP",
@@ -8355,6 +9610,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
"guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
"service": "SAP",
@@ -8462,6 +9718,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
"guid": "f656e745-0cfb-453e-8008-0528fa21c933",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
@@ -8547,6 +9804,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
"guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
"link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
@@ -8686,6 +9944,8 @@
},
{
"checklist": "SAP Checklist",
+ "description": "Keep your management group hierarchy reasonably flat, no more than four.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
@@ -8696,6 +9956,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
@@ -8706,6 +9967,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
@@ -8716,6 +9978,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
@@ -8754,6 +10017,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
@@ -8919,6 +10183,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
@@ -9026,6 +10291,8 @@
},
{
"checklist": "SAP Checklist",
+ "description": "When configuring VNet peering, use the Allow traffic to remote virtual networks setting.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
@@ -9046,6 +10313,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
@@ -9076,6 +10344,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
@@ -9086,6 +10355,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
@@ -9116,6 +10386,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
@@ -9186,6 +10457,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
@@ -9206,6 +10478,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
@@ -9461,6 +10734,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
@@ -9541,6 +10815,7 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
@@ -9668,12 +10943,13 @@
{
"arm-service": "Microsoft.ServiceBus/namespaces",
"checklist": "Service Bus Review Checklist",
- "description": "A Service Bus client app running inside an Azure App Service application or in a virtual machine with enabled managed entities for Azure resources support does not need to handle SAS rules and keys, or any other access tokens. The client app only needs the endpoint address of the Service Bus Messaging namespace. ",
+ "description": "Microsoft Entra ID provides superior security and ease of use over shared access signatures (SAS). With Microsoft Entra ID, there’s no need to store the tokens in your code and risk potential security vulnerabilities. We recommend that you use Microsoft Entra ID with your Azure Service Bus applications when possible.",
+ "graph": "Resources | where type =~ 'microsoft.servicebus/namespaces' | extend compliant = iif(properties.disableLocalAuth == 'false', 'No', 'Yes') | project id, compliant",
"guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
- "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "link": "https://learn.microsoft.com/en-us/azure/service-bus-messaging/disable-local-authentication",
"service": "Service Bus",
"severity": "Medium",
- "text": "When possible, your application should be using a managed identity to authenticate to Azure Service Bus. If not, consider having the storage credential (SAS, service principal credential) in Azure Key Vault or an equivalent service",
+ "text": "When possible, disable SAS key authentication (or local authentication) and use only Microsoft Entra ID for authentication",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Security"
},
@@ -9724,11 +11000,158 @@
"text": "Consider only allowing access to Azure Service Bus namespace from specific IP addresses or ranges",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant = (sku=~'{\"name\":\"Standard\"}') | distinct id,compliant",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "link": "https://learn.microsoft.com/azure/service-fabric/overview-managed-cluster#service-fabric-managed-cluster-skus",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Use Standard SKU for production scenarios.",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/clusters' | extend nodeTypes= array_concat(properties.nodeTypes) | mv-expand nodeTypes | summarize BronzeDurabilityCount = countif(nodeTypes.durabilityLevel == 'Bronze') by id | extend compliant = (BronzeDurabilityCount == 0) | distinct id,compliant",
+ "guid": "182840d2-9ef8-4238-8fd6-0d76186830ac",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity#durability-characteristics-of-the-cluster",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Use durability level Silver (5 VMs) or greater for production scenarios",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.ServiceFabric/managedClusters' | extend compliant= ( properties.zonalResiliency =~ 'true') | distinct id,compliant",
+ "guid": "2363878d-55c4-4cbd-9bc2-94523c85f12e",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-availability-zones",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Consider using Availability Zones for your Service Fabric clusters. Service Fabric managed cluster supports deployments that span across multiple Availability Zones to provide zone resiliency. This configuration will ensure high-availability of the critical system services and your applications to protect from single-points-of-failure.",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "5ba74cc8-3ca2-44d5-9a67-bdc8e102e7b4",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-api-management-overview",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Consider using Azure API Management to expose and offload cross-cutting functionality for APIs hosted on the cluster. API Management can integrate with Service Fabric directly.",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "ef17bb8f-4e2c-488b-8ceb-a07c3d750dd3",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-reliable-services-introduction",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "For stateful workload scenarios, consider using Reliable Services. The Reliable Services model allows your services to stay up even in unreliable environments where your machines fail or hit network issues, or in cases where the services themselves encounter errors and crash or fail. For stateful services, your state is preserved even in the presence of network or other failures.",
+ "waf": "Reliability"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | summarize compliant = countif(sku.name matches regex '^Standard_[^d]*$' ) by id",
+ "guid": "4da21268-f775-4c89-a271-eb80543c8df7",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Avoid VM SKUs with temp disk offerings. Service Fabric uses managed disks by default, so avoiding temp disk offerings ensures you don't pay for unneeded resources.",
+ "waf": "Cost"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "1890b796-f300-41a3-a8d4-29738c1f4ad0",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-stateless-node-type#temporary-disk-support",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "If you need to select a certain VM SKU for capacity reasons and it happens to offer temp disk, consider using temporary disk support for your stateless workloads.",
+ "waf": "Cost"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "5247bb32-6778-49c7-8b40-e171c9a3ce1e",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Align SKU selection and managed disk size with workload requirements. Matching your selection to your workload demands ensures you don't pay for unneeded resources.",
+ "waf": "Cost"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "6028759b-446a-41bc-8b0e-7728e61ca704",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-cluster-networking#manage-nsg-rules",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Ensure Network Security Groups (NSG) are configured to restrict traffic flow between subnets and node types. For example, you may have an API Management instance (one subnet), a frontend subnet (exposing a website directly), and a backend subnet (accessible only to frontend).",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "graph": "resources | where type=~'Microsoft.Compute/virtualMachineScaleSets' | extend vmssExtension= array_concat(properties.virtualMachineProfile.extensionProfile.extensions) | mv-expand vmssExtension | where vmssExtension.properties.publisher matches regex '^Microsoft.Azure.ServiceFabric.*' | summarize arg_max(id, *) | extend compliant = (isnotnull(properties.virtualMachineProfile.osProfile.secrets))",
+ "guid": "4e98c903-14cf-4c72-9c45-b8b23bc4cbd8",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#deploy-key-vault-certificates-to-service-fabric-cluster-virtual-machine-scale-sets",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Deploy Key Vault certificates to Service Fabric cluster virtual machine scale sets. Centralizing storage of application secrets in Azure Key Vault allows you to control their distribution. Key Vault greatly reduces the chances that secrets may be accidentally leaked.",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "001cbb6f-d88d-4431-8434-d01333397776",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#apply-an-access-control-list-acl-to-your-certificate-for-your-service-fabric-cluster",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Apply an Access Control List (ACL) to your client certificate for your Service Fabric cluster. Using an ACL provides an additional level of authentication.",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "4b74b7a5-bb1e-4fca-948c-037ba95fb73b",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-resource-governance#resource-governance-mechanism",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Use resource requests and limits to govern resource usage across the nodes in your cluster. Enforcing resource limits helps ensure that one service doesn't consume too many resources and starve other services.",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "cd9233ba-f3aa-4353-8d2f-7ea4a64160e6",
+ "link": "",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Encrypt Service Fabric package secret values. Encryption on your secret values provides an additional level of security.",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "44b989d4-9f72-42b6-99da-ec2a79f83299",
+ "link": "",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Include client certificates in Service Fabric applications. Having your applications use client certificates for authentication provides opportunities for security at both the cluster and workload level.",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "28e66ff7-4a77-4b2c-910d-0335f141208a",
+ "link": "https://learn.microsoft.com/azure/service-fabric/how-to-managed-identity-managed-cluster-virtual-machine-scale-sets",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Authenticate Service Fabric applications to Azure Resources using Managed Identity. Using Managed Identity allow you to securely manage the credentials in your code for authenticating to various services without saving them locally on a developer workstation or in source control.",
+ "waf": "Security"
+ },
+ {
+ "checklist": "Azure Service Fabric Review Checklist",
+ "guid": "f16c413c-00a6-43aa-852c-b97292c33a56",
+ "link": "https://learn.microsoft.com/azure/service-fabric/service-fabric-best-practices-security#hosting-untrusted-applications-in-a-service-fabric-cluster",
+ "service": "Azure Service Fabric",
+ "severity": "Medium",
+ "text": "Follow Service Fabric best practices when hosting untrusted applications. Following the best practices provides a security standard to follow.",
+ "waf": "Security"
}
],
"metadata": {
"name": "WAF checklist",
- "timestamp": "July 01, 2024"
+ "timestamp": "October 08, 2024"
},
"severities": [
{
diff --git a/checklists/waf_checklist.es.json b/checklists/waf_checklist.es.json
index 748db30cd..8073a198a 100644
--- a/checklists/waf_checklist.es.json
+++ b/checklists/waf_checklist.es.json
@@ -1,6337 +1,8412 @@
{
"items": [
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
- "severity": "Alto",
- "text": "Habilitación de 2 réplicas para que tengan una disponibilidad del 99,9 % para las operaciones de lectura",
+ "checklist": "Identity Review Checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Use el token revocable de larga duración, almacene en caché el token y adquiera el token de forma silenciosa mediante la biblioteca de identidades de Microsoft",
"waf": "Fiabilidad"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
"severity": "Medio",
- "text": "Habilitación de 3 réplicas para que tengan una disponibilidad del 99,9 % para las operaciones de lectura y escritura",
+ "text": "Asegúrese de que los flujos de usuario de inicio de sesión estén respaldados y sean resistentes. Asegúrese de que se ha realizado una copia de seguridad del código que usa para iniciar sesión en los usuarios y se puede recuperar. Interfaces resilientes con procesos externos",
"waf": "Fiabilidad"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
- "severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad habilitando réplicas de lectura o escritura",
+ "checklist": "Identity Review Checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
+ "severity": "Medio",
+ "text": "Los activos de marca personalizados deben estar alojados en una CDN",
+ "waf": "Rendimiento"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
+ "severity": "Bajo",
+ "text": "Tener varios proveedores de identidad (es decir, iniciar sesión con sus cuentas de Microsoft, Google, Facebook)",
"waf": "Fiabilidad"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "Medio",
- "text": "En el caso de la reincidencia regional, cree manualmente servicios en 2 o más regiones para la búsqueda, ya que no proporciona un método automatizado para replicar índices de búsqueda en regiones geográficas",
+ "text": "Siga las reglas de la máquina virtual para la alta disponibilidad en el nivel de máquina virtual (discos premium, dos o más en una región, en diferentes zonas de disponibilidad)",
"waf": "Fiabilidad"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "Medio",
- "text": "Para sincronizar datos entre varios servicios, use indexadores para actualizar contenido en varios servicios o use las API de REST para insertar actualizaciones de contenido en varios servicios",
+ "text": "¡No repliques! La replicación puede crear problemas con la sincronización de directorios",
"waf": "Fiabilidad"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "Medio",
- "text": "Uso de Azure Traffic Manager para coordinar solicitudes",
+ "text": "Tener activo-activo para varias regiones",
"waf": "Fiabilidad"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
- "severity": "Alto",
- "text": "Realice una copia de seguridad y restaure un índice de Azure Cognitive Search. Use este código de ejemplo para realizar una copia de seguridad de la definición del índice y la instantánea en una serie de archivos JSON",
+ "checklist": "Identity Review Checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Adición de stamps de servicio de dominio de Azure AD a regiones y ubicaciones adicionales",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
+ "checklist": "Identity Review Checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
"severity": "Medio",
- "text": "Si usa certificados TLS administrados por el cliente con Azure Front Door, use la versión de certificado \"más reciente\". Reduzca el riesgo de interrupciones causadas por la renovación manual de certificados",
- "waf": "Operaciones"
+ "text": "Uso de conjuntos de réplicas para recuperación ante desastres",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Asegúrese de que usa la SKU de Application Gateway v2",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Aproveche las zonas de disponibilidad si corresponden regionalmente (esto se habilita automáticamente)",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"severity": "Medio",
- "text": "Asegúrese de que usa la SKU estándar para Azure Load Balancers",
- "waf": "Seguridad"
+ "text": "Tenga en cuenta las conmutaciones por error iniciadas por Microsoft. Microsoft los ejerce en situaciones excepcionales para conmutar por error todos los centros de IoT de una región afectada a la región emparejada geográficamente correspondiente.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
- "severity": "Medio",
- "text": "Asegúrese de que las direcciones IP de front-end de Load Balancers tengan redundancia de zona (a menos que necesite front-end zonal).",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Application Gateways v2 debe implementarse en subredes con prefijos IP iguales o mayores que /24",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Obtenga información sobre cómo desencadenar una conmutación por error manual.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "description": "La administración de proxies inversos en general y de WAF en particular está más cerca de la aplicación que de la red, por lo que pertenecen a la misma suscripción que la aplicación. La centralización de Application Gateway y WAF en la suscripción de conectividad puede ser correcta si la administra un solo equipo.",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Implemente Azure Application Gateway v2 o aplicaciones virtuales de red de asociados que se usan para proxy de conexiones HTTP(S) entrantes dentro de la red virtual de la zona de aterrizaje y con las aplicaciones que están protegiendo.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Obtenga información sobre cómo conmutar por recuperación después de una conmutación por error.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Use una red DDoS o planes de protección IP para todas las direcciones IP públicas en las zonas de aterrizaje de la aplicación.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
+ "severity": "Alto",
+ "text": "Seleccione el plan de hospedaje de aplicaciones lógicas adecuado en función de los requisitos empresariales y de SLO",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Configure el escalado automático con una cantidad mínima de instancias de dos.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
+ "severity": "Alto",
+ "text": "Proteja las aplicaciones lógicas de errores de región con redundancia de zona y zonas de disponibilidad",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Implementación de Application Gateway en zonas de disponibilidad",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
+ "severity": "Alto",
+ "text": "Si se implementa en un entorno aislado, use o migre a App Service Environment (ASE) v3",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
"severity": "Medio",
- "text": "Use Azure Front Door con directivas de WAF para entregar y ayudar a proteger aplicaciones HTTP/S globales que abarcan varias regiones de Azure.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Seguridad"
+ "text": "Aproveche Azure DevOps o GitHub para simplificar la CI/CD y proteger el código de la aplicación lógica",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"severity": "Medio",
- "text": "Al usar Front Door y Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Front Door. Bloquee Application Gateway para recibir tráfico solo de Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Seguridad"
+ "text": "Aproveche el servidor flexible",
+ "waf": "Fiabilidad"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
"severity": "Alto",
- "text": "Use el Administrador de tráfico para entregar aplicaciones globales que abarquen protocolos distintos de HTTP/S.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Aproveche las zonas de disponibilidad cuando corresponda regionalmente",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "severity": "Bajo",
- "text": "Si los usuarios solo necesitan acceso a aplicaciones internas, ¿se ha considerado Microsoft Entra ID Application Proxy como una alternativa a Azure Virtual Desktop (AVD)?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
+ "severity": "Medio",
+ "text": "Aproveche la replicación de entrada de datos para escenarios de recuperación ante desastres entre regiones",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Aplicación de las instrucciones del banco de pruebas de seguridad en la nube de Microsoft relacionadas con el almacenamiento",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Para reducir el número de puertos de firewall abiertos para las conexiones entrantes en la red, considere la posibilidad de usar Microsoft Entra ID Application Proxy para proporcionar a los usuarios remotos acceso seguro y autenticado a las aplicaciones internas.",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "text": "Tenga en cuenta la \"Línea base de seguridad de Azure para el almacenamiento\"",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "De forma predeterminada, Azure Storage tiene una dirección IP pública y es accesible desde Internet. Los puntos de conexión privados permiten exponer de forma segura Azure Storage solo a los recursos de Azure Compute que necesitan acceso, lo que elimina la exposición a la Internet pública",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Implemente la directiva de WAF para Front Door en modo de \"prevención\".",
+ "text": "Considere la posibilidad de usar puntos de conexión privados para Azure Storage",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "Alto",
- "text": "Evite combinar Azure Traffic Manager y Azure Front Door.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Las cuentas de almacenamiento recién creadas se crean mediante el modelo de implementación de ARM, de modo que RBAC, etcétera de auditoría, estén habilitados. Asegúrese de que no haya cuentas de almacenamiento antiguas con el modelo de implementación clásico en una suscripción",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Asegúrese de que las cuentas de almacenamiento más antiguas no usen el \"modelo de implementación clásica\"",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Aproveche Microsoft Defender para obtener información sobre actividades sospechosas y configuraciones incorrectas.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Use el mismo nombre de dominio en Azure Front Door y su origen. Los nombres de host no coincidentes pueden causar errores sutiles.",
+ "text": "Habilitación de Microsoft Defender para todas las cuentas de almacenamiento",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "Bajo",
- "text": "Deshabilite los sondeos de estado cuando solo haya un origen en un grupo de orígenes de Azure Front Door.",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "El mecanismo de eliminación temporal permite recuperar blobs eliminados accidentalmente.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Habilitación de la \"eliminación temporal\" para blobs",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere la posibilidad de deshabilitar selectivamente la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimine inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Seleccione puntos de conexión de sondeo de estado correctos para Azure Front Door. Considere la posibilidad de crear puntos de conexión de estado que comprueben todas las dependencias de la aplicación.",
- "waf": "Fiabilidad"
+ "text": "Deshabilitación de la \"eliminación temporal\" para blobs",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "Bajo",
- "text": "Use sondeos de estado de HEAD con Azure Front Door para reducir el tráfico que Front Door envía a la aplicación.",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "La eliminación temporal de contenedores permite recuperar un contenedor después de que se haya eliminado, por ejemplo, recuperarse de una operación de eliminación accidental.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitación de la \"eliminación temporal\" para contenedores",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere la posibilidad de deshabilitar selectivamente la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimine inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Deshabilitar la \"eliminación temporal\" para contenedores",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Evita la eliminación accidental de una cuenta de almacenamiento, obligando al usuario a quitar primero el bloqueo de eliminación, antes de la eliminación",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Use Azure NAT Gateway en lugar de reglas de salida de Load Balancer para mejorar la escalabilidad de SNAT",
- "waf": "Fiabilidad"
+ "text": "Habilitación de bloqueos de recursos en cuentas de almacenamiento",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere la posibilidad de aplicar directivas de \"retención legal\" o \"retención basada en tiempo\" para los blobs, de modo que sea imposible eliminar el blob, el contenedor o la cuenta de almacenamiento. Tenga en cuenta que 'imposible' en realidad significa 'imposible'; una vez que una cuenta de almacenamiento contiene un blob inmutable, la única manera de \"deshacerse\" de esa cuenta de almacenamiento es cancelando la suscripción de Azure.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Use certificados TLS administrados con Azure Front Door. Reduzca los costos operativos y el riesgo de interrupciones debido a las renovaciones de certificados.",
- "waf": "Operaciones"
+ "text": "Considere la posibilidad de blobs inmutables",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "Medio",
- "text": "Defina la configuración de WAF de Azure Front Door como código. Mediante el uso de código, puede adoptar más fácilmente una nueva versión del conjunto de reglas y obtener protección adicional.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere la posibilidad de deshabilitar el acceso HTTP/80 no protegido a la cuenta de almacenamiento, de modo que todas las transferencias de datos estén cifradas, protegidas contra la integridad y el servidor esté autenticado. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Requerir HTTPS, es decir, deshabilitar el puerto 80 en la cuenta de almacenamiento",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Al configurar un dominio personalizado (nombre de host) en una cuenta de almacenamiento, compruebe si necesita TLS/HTTPS; si es así, es posible que tenga que colocar Azure CDN delante de la cuenta de almacenamiento.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Use TLS de un extremo a otro con Azure Front Door. Use TLS para las conexiones de los clientes a Front Door y de Front Door al origen.",
+ "text": "Al aplicar HTTPS (deshabilitar HTTP), compruebe que no usa dominios personalizados (CNAME) para la cuenta de almacenamiento.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Requerir HTTPS cuando un cliente usa un token de SAS para acceder a los datos de blob ayuda a minimizar el riesgo de pérdida de credenciales.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Use el redireccionamiento de HTTP a HTTPS con Azure Front Door. Apoye a los clientes más antiguos redirigiéndolos automáticamente a una solicitud HTTPS.",
+ "text": "Limitar los tokens de firma de acceso compartido (SAS) solo a las conexiones HTTPS",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": ". Al aplicar la versión más reciente de TLS, se rechazarán las solicitudes de los clientes que utilicen la versión anterior. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Habilite el WAF de Azure Front Door. Proteja su aplicación de una variedad de ataques.",
+ "text": "Aplicación de la versión más reciente de TLS para una cuenta de almacenamiento",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Los tokens de identificador de Microsoft Entra deben favorecerse sobre las firmas de acceso compartido, siempre que sea posible",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Ajuste el WAF de Azure Front Door para su carga de trabajo. Reduzca las detecciones de falsos positivos.",
+ "text": "Uso de tokens de identificador de Microsoft Entra para el acceso a blobs",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "Alto",
- "text": "Habilite la característica de inspección del cuerpo de la solicitud habilitada en la directiva WAF de Azure Front Door.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Al asignar un rol a un usuario, grupo o aplicación, conceda a esa entidad de seguridad solo los permisos necesarios para que pueda realizar sus tareas. Limitar el acceso a los recursos ayuda a evitar el uso indebido no intencionado y malintencionado de los datos.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Privilegio mínimo en los permisos de IaM",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Una SAS de delegación de usuarios está protegida con credenciales de Azure Active Directory (Azure AD) y también con los permisos especificados para la SAS. Una SAS de delegación de usuarios es análoga a una SAS de servicio en cuanto a su ámbito y función, pero ofrece ventajas de seguridad con respecto a la SAS de servicio. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Habilite los conjuntos de reglas predeterminados de WAF de Azure Front Door. Los conjuntos de reglas predeterminados detectan y bloquean los ataques comunes.",
+ "text": "Al usar SAS, prefiera \"SAS de delegación de usuarios\" en lugar de SAS basada en clave de cuenta de almacenamiento.",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Las claves de la cuenta de almacenamiento ('claves compartidas') tienen muy pocas capacidades de auditoría. Si bien se puede monitorear quién o cuándo obtuvo una copia de las claves, una vez que las claves están en manos de varias personas, es imposible atribuir el uso a un usuario específico. Confiar únicamente en la autenticación de ID de Entra facilita la vinculación del acceso al almacenamiento de un usuario. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Habilite el conjunto de reglas de protección contra bots de Azure Front Door WAF. Las reglas de bots detectan bots buenos y malos.",
+ "text": "Considere la posibilidad de deshabilitar las claves de la cuenta de almacenamiento, de modo que solo se admita el acceso a Microsoft Entra ID (y SAS de delegación de usuarios).",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "Medio",
- "text": "Use la versión más reciente del conjunto de reglas de WAF de Azure Front Door. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Utilice los datos del registro de actividad para identificar \"cuándo\", \"quién\", \"qué\" y \"cómo\" se está viendo o cambiando la seguridad de la cuenta de almacenamiento (es decir, claves de cuenta de almacenamiento, directivas de acceso, etcétera).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de usar Azure Monitor para auditar las operaciones del plano de control en la cuenta de almacenamiento",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Una política de caducidad de claves le permite establecer un recordatorio para la rotación de las claves de acceso de la cuenta. El recordatorio se muestra si ha transcurrido el intervalo especificado y las teclas aún no se han girado.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Agregue limitación de velocidad al WAF de Azure Front Door. La limitación de velocidad bloquea a los clientes que envían accidental o intencionadamente grandes cantidades de tráfico en un corto período de tiempo.",
+ "text": "Al usar claves de cuenta de almacenamiento, considere la posibilidad de habilitar una \"directiva de expiración de claves\"",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Una directiva de expiración de SAS especifica un intervalo recomendado durante el cual la SAS es válida. Las directivas de caducidad de SAS se aplican a una SAS de servicio o a una SAS de cuenta. Cuando un usuario genera una SAS de servicio o una SAS de cuenta con un intervalo de validez mayor que el intervalo recomendado, verá una advertencia.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Use un umbral alto para los límites de frecuencia de WAF de Azure Front Door. Los umbrales de límite de velocidad altos evitan el bloqueo del tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura. ",
+ "text": "Considere la posibilidad de configurar una directiva de expiración de SAS",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "Bajo",
- "text": "Si no espera tráfico de todas las regiones geográficas, utilice filtros geográficos para bloquear el tráfico de países no esperados.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Las directivas de acceso almacenadas ofrecen la opción de revocar los permisos de una SAS de servicio sin tener que volver a generar las claves de la cuenta de almacenamiento. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de vincular SAS a una directiva de acceso almacenada",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Especifique la ubicación desconocida (ZZ) al filtrar geográficamente el tráfico con el WAF de Azure Front Door. Evite bloquear accidentalmente solicitudes legítimas cuando las direcciones IP no puedan coincidir geográficamente.",
+ "text": "Considere la posibilidad de configurar el repositorio de código fuente de la aplicación para detectar cadenas de conexión protegidas y claves de cuenta de almacenamiento.",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Lo ideal es que la aplicación use una identidad administrada para autenticarse en Azure Storage. Si eso no es posible, considere la posibilidad de tener la credencial de almacenamiento (cadena de conexión, clave de cuenta de almacenamiento, SAS, credencial de entidad de servicio) en Azure KeyVault o un servicio equivalente.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Habilitación del conjunto de reglas de protección contra bots de WAF de Azure Application Gateway Las reglas de bots detectan bots buenos y malos.",
+ "text": "Considere la posibilidad de almacenar cadenas de conexión en Azure KeyVault (en escenarios en los que las identidades administradas no son posibles)",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Utilice los tiempos de caducidad a corto plazo en una SAS de servicio SAS ad hoc o en una SAS de cuenta. De esta manera, incluso si una SAS se ve comprometida, solo es válida durante un corto período de tiempo. Esta práctica es especialmente importante si no puede hacer referencia a una política de acceso almacenada. Los tiempos de expiración a corto plazo también limitan la cantidad de datos que se pueden escribir en un blob al limitar el tiempo disponible para cargarlos en él.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Habilite la característica de inspección del cuerpo de la solicitud habilitada en la directiva WAF de Azure Application Gateway.",
+ "text": "Esfuércese por períodos de validez cortos para SAS ad-hoc",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
- "severity": "Alto",
- "text": "Ajuste el WAF de Azure Application Gateway para la carga de trabajo. Reduzca las detecciones de falsos positivos.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Al crear una SAS, sea lo más específico y restrictivo posible. Prefiera una SAS para un solo recurso y operación en lugar de una SAS que proporciona un acceso mucho más amplio.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Aplicación de un ámbito limitado a una SAS",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
- "severity": "Alto",
- "text": "Implemente la directiva de WAF para Application Gateway en modo de \"prevención\".",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Una SAS puede incluir parámetros sobre las direcciones IP de cliente o los intervalos de direcciones que están autorizados a solicitar un recurso mediante la SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de definir el ámbito de SAS a una dirección IP de cliente específica, siempre que sea posible",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Agregue limitación de velocidad al WAF de Azure Application Gateway. La limitación de velocidad bloquea a los clientes que envían accidental o intencionadamente grandes cantidades de tráfico en un corto período de tiempo.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Una SAS no puede restringir la cantidad de datos que carga un cliente; Dado el modelo de precios de la cantidad de almacenamiento a lo largo del tiempo, podría tener sentido validar si los clientes cargaron contenidos malintencionados de gran tamaño.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de comprobar los datos cargados, después de que los clientes hayan utilizado una SAS para cargar un archivo. ",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Al acceder al almacenamiento de blobs a través de SFTP mediante una \"cuenta de usuario local\", no se aplican los controles RBAC \"habituales\". El acceso a blobs a través de NFS o REST puede ser más restrictivo que el acceso SFTP. Desafortunadamente, a partir de principios de 2023, los usuarios locales son la única forma de administración de identidades que actualmente es compatible con el punto de conexión SFTP",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "SFTP: Limite la cantidad de \"usuarios locales\" para el acceso SFTP y audite si el acceso es necesario a lo largo del tiempo.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Use un umbral alto para los límites de frecuencia de WAF de Azure Application Gateway. Los umbrales de límite de velocidad altos evitan el bloqueo del tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura. ",
+ "text": "SFTP: El punto de conexión SFTP no admite ACL similares a POSIX.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
- "severity": "Bajo",
- "text": "Si no espera tráfico de todas las regiones geográficas, utilice filtros geográficos para bloquear el tráfico de países no esperados.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "El almacenamiento es compatible con CORS (Cross-Origin Resource Sharing), es decir, una función HTTP que permite a las aplicaciones web de un dominio diferente aflojar la política del mismo origen. Al habilitar CORS, mantenga CorsRules con el mínimo privilegio.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Evite las políticas de CORS demasiado amplias",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Especifique la ubicación desconocida (ZZ) al filtrar geográficamente el tráfico con el WAF de Azure Application Gateway. Evite bloquear accidentalmente solicitudes legítimas cuando las direcciones IP no puedan coincidir geográficamente.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Los datos en reposo siempre se cifran en el lado del servidor y, además, también pueden estar cifrados en el lado del cliente. El cifrado del lado del servidor puede producirse mediante una clave administrada por la plataforma (valor predeterminado) o una clave administrada por el cliente. El cifrado del lado cliente puede producirse haciendo que el cliente proporcione una clave de cifrado y descifrado por blob al almacenamiento de Azure o controlando completamente el cifrado en el lado cliente. por lo tanto, no depende en absoluto de Azure Storage para obtener garantías de confidencialidad.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Determine cómo se deben cifrar los datos en reposo. Comprender el modelo de subprocesos para los datos.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Use la versión más reciente del conjunto de reglas de WAF de Azure Application Gateway. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
+ "text": "Determine cuál o si se debe utilizar el cifrado de la plataforma.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Agregue la configuración de diagnóstico para guardar los registros de WAF de Azure Application Gateway.",
- "waf": "Operaciones"
+ "text": "Determine qué cifrado del lado del cliente se debe usar, si se debe usar.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "Medio",
- "text": "Agregue la configuración de diagnóstico para guardar los registros de WAF de Azure Front Door.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Aproveche el Explorador de Resource Graph (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para buscar cuentas de almacenamiento que permitan el acceso anónimo a blobs.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere si es necesario el acceso anónimo de blob público o si se puede deshabilitar para determinadas cuentas de almacenamiento. ",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Envíe registros de WAF de Azure Application Gateway a Microsoft Sentinel.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Aproveche un tipo de cuenta storagev2 para mejorar el rendimiento y la confiabilidad",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "Medio",
- "text": "Envíe registros de WAF de Azure Front Door a Microsoft Sentinel.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Aproveche el almacenamiento GRS, ZRS o GZRS para obtener la máxima disponibilidad",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Defina la configuración de WAF de Azure Application Gateway como código. Mediante el uso de código, puede adoptar más fácilmente una nueva versión del conjunto de reglas y obtener protección adicional.",
- "waf": "Operaciones"
+ "text": "Para la operación de escritura después de la conmutación por error, use la conmutación por error administrada por el cliente ",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Utilice directivas de WAF en lugar de la configuración de WAF heredada.",
- "waf": "Operaciones"
+ "text": "Descripción de los detalles de la conmutación por error administrada por Microsoft",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Filtre el tráfico entrante en los back-end para que solo acepten conexiones de la subred de Application Gateway, por ejemplo, con grupos de seguridad de red.",
- "waf": "Seguridad"
+ "text": "Habilitar eliminación temporal",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "Medio",
- "text": "Asegúrese de que los orígenes solo toman tráfico de la instancia de Azure Front Door.",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
+ "service": "IoT Hub DPS",
+ "severity": "Alto",
+ "text": "Seleccione el plan de hospedaje de aplicaciones lógicas adecuado en función de los requisitos empresariales y de SLO",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "IoT Hub DPS",
"severity": "Alto",
- "text": "Debe cifrar el tráfico a los servidores backend.",
- "waf": "Seguridad"
+ "text": "Proteja las aplicaciones lógicas de errores de región con redundancia de zona y zonas de disponibilidad",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "8aed4fbf-0830-4883-899d-222a154af478",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "IoT Hub DPS",
"severity": "Alto",
- "text": "Debe utilizar un firewall de aplicaciones web.",
- "waf": "Seguridad"
+ "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Redirigir HTTP a HTTPS",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "IoT Hub DPS",
+ "severity": "Alto",
+ "text": "Si se implementa en un entorno aislado, use o migre a App Service Environment (ASE) v3",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "IoT Hub DPS",
"severity": "Medio",
- "text": "Utilice cookies administradas por puerta de enlace para dirigir el tráfico de una sesión de usuario al mismo servidor para su procesamiento",
+ "text": "Aproveche Azure DevOps o GitHub para simplificar la CI/CD y proteger el código de la aplicación lógica",
"waf": "Operaciones"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
- "severity": "Alto",
- "text": "Habilite el drenaje de conexiones durante las actualizaciones de servicio planificadas para evitar la pérdida de conexión a los miembros existentes del grupo de back-end",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
"severity": "Bajo",
- "text": "Crear páginas de error personalizadas para mostrar una experiencia de usuario personalizada",
- "waf": "Operaciones"
+ "text": "Consulte la arquitectura de aplicación web de redundancia de zona de alta disponibilidad de línea de base para conocer los procedimientos recomendados",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "Medio",
- "text": "Edite las solicitudes HTTP y los encabezados de respuesta para facilitar el enrutamiento y el intercambio de información entre el cliente y el servidor",
- "waf": "Seguridad"
+ "text": "Utilice los niveles Premium y Estándar. Estos niveles admiten ranuras de ensayo y copias de seguridad automatizadas.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Configure Front Door para optimizar el enrutamiento del tráfico web global y el rendimiento del usuario final de primer nivel, así como la confiabilidad a través de una rápida conmutación por error global",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Aproveche las zonas de disponibilidad cuando corresponda regionalmente (requiere el nivel Premium v2 o v3)",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "Medio",
- "text": "Usar el equilibrio de carga de la capa de transporte",
- "waf": "Rendimiento"
+ "text": "Implementación de comprobaciones de estado",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Configure el enrutamiento basado en el host o el nombre de dominio para varias aplicaciones web en una sola puerta de enlace",
- "waf": "Seguridad"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Consulte los procedimientos recomendados de copia de seguridad y restauración para Azure App Service",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
- "severity": "Medio",
- "text": "Centralice la administración de certificados SSL para reducir la sobrecarga de cifrado y descifrado de una granja de servidores back-end",
- "waf": "Seguridad"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Implementación de los procedimientos recomendados de confiabilidad de Azure App Service",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
"severity": "Bajo",
- "text": "Uso de Application Gateway para obtener compatibilidad nativa con los protocolos WebSocket y HTTP/2",
- "waf": "Seguridad"
+ "text": "Familiarizarse con cómo mover una aplicación de App Service a otra región durante un desastre",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "service": "App Services",
"severity": "Alto",
- "text": "Asegúrese de que los controladores de dominio ADDS se implementan en la suscripción de identidad en Azure nativo",
- "waf": "Seguridad"
+ "text": "Familiarizarse con la compatibilidad con la confiabilidad en Azure App Service",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"severity": "Medio",
- "text": "Asegúrese de que los sitios y servicios de ADDS están configurados para mantener las solicitudes de autenticación de los recursos basados en Azure (incluida Azure VMware Solution) locales en Azure",
- "waf": "Seguridad"
+ "text": "Asegúrese de que \"Siempre activado\" está habilitado para las aplicaciones de funciones que se ejecutan en un plan de App Service",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
- "severity": "Alto",
- "text": "Asegúrese de que vCenter esté conectado a ADDS para habilitar la autenticación basada en \"cuentas de usuario designadas\"",
- "waf": "Seguridad"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
+ "severity": "Medio",
+ "text": "Supervisión de instancias de App Service mediante comprobaciones de estado",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
"severity": "Medio",
- "text": "Asegúrese de que la conexión de vCenter a ADDS utilice un protocolo seguro (LDAPS)",
+ "text": "Supervisión de la disponibilidad y la capacidad de respuesta de la aplicación web o el sitio web mediante pruebas de disponibilidad de Application Insights",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
+ "severity": "Bajo",
+ "text": "Uso de la prueba estándar de Application Insights para supervisar la disponibilidad y la capacidad de respuesta de la aplicación web o el sitio web",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Use Azure Key Vault para almacenar los secretos que necesita la aplicación. Key Vault proporciona un entorno seguro y auditado para almacenar secretos y está bien integrado con App Service a través del SDK de Key Vault o las referencias de Key Vault de App Service.",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Uso de Key Vault para almacenar secretos",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
- "severity": "Medio",
- "text": "La cuenta de CloudAdmin en vCenter IdP solo se utiliza como una cuenta de emergencia (break-glass)",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Use una identidad administrada para conectarse a Key Vault mediante el SDK de Key Vault o a través de las referencias de Key Vault de App Service.",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Uso de la identidad administrada para conectarse a Key Vault",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Almacene el certificado TLS de App Service en Key Vault.",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
"severity": "Alto",
- "text": "Asegúrese de que NSX-Manager esté integrado con un proveedor de identidades externo (LDAPS)",
+ "text": "Use Key Vault para almacenar el certificado TLS.",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Los sistemas que procesan información confidencial deben estar aislados. Para ello, use planes del Servicio de aplicaciones o entornos del Servicio de aplicaciones independientes y considere la posibilidad de usar suscripciones o grupos de administración diferentes.",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "Medio",
- "text": "¿Se ha creado un modelo RBAC para su uso en VMware vSphere?",
+ "text": "Aísle los sistemas que procesan información confidencial",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Los discos locales de App Service no están cifrados y los datos confidenciales no deben almacenarse en ellos. (Por ejemplo: D:\\\\Local y %TMP%).",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"severity": "Medio",
- "text": "Los permisos RBAC deben concederse a grupos ADDS y no a usuarios específicos",
+ "text": "No almacene datos confidenciales en el disco local",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
- "severity": "Alto",
- "text": "Los permisos de RBAC en el recurso de Azure VMware Solution en Azure están \"bloqueados\" solo para un conjunto limitado de propietarios",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "En el caso de la aplicación web autenticada, use un proveedor de identidades bien establecido, como Azure AD o Azure AD B2C. Aproveche el marco de aplicaciones de su elección para integrarse con este proveedor o use la característica de autenticación o autorización del Servicio de aplicaciones.",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
+ "severity": "Medio",
+ "text": "Usar un proveedor de identidades establecido para la autenticación",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Implemente código en App Service desde un entorno controlado y de confianza, como una canalización de implementación de DevOps bien administrada y segura. De este modo, se evita el código que no se ha controlado la versión y se ha comprobado que se implementará desde un host malintencionado.",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
"severity": "Alto",
- "text": "Asegúrese de que todos los roles personalizados tengan el ámbito de las autorizaciones permitidas de CloudAdmin",
+ "text": "Implementación desde un entorno de confianza",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Deshabilite la autenticación básica tanto para FTP/FTPS como para WebDeploy/SCM. Esto deshabilita el acceso a estos servicios y exige el uso de puntos de conexión protegidos de Azure AD para la implementación. Tenga en cuenta que el sitio de SCM también se puede abrir con credenciales de Azure AD.",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
"severity": "Alto",
- "text": "¿Se ha seleccionado el modelo de conectividad de Azure VMware Solution correcto para el caso de uso del cliente en cuestión?",
- "waf": "Rendimiento"
+ "text": "Deshabilitar la autenticación básica",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Siempre que sea posible, use Managed Identity para conectarse a los recursos protegidos de Azure AD. Si esto no es posible, almacene los secretos en Key Vault y conéctese a Key Vault mediante una identidad administrada en su lugar.",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
"severity": "Alto",
- "text": "Asegúrese de que las conexiones de ExpressRoute o VPN desde el entorno local a Azure se supervisan mediante el \"monitor de conexiones\"",
- "waf": "Operaciones"
+ "text": "Uso de la identidad administrada para conectarse a los recursos",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
- "severity": "Medio",
- "text": "Asegúrese de que se crea un monitor de conexión desde un recurso nativo de Azure a una máquina virtual de Azure VMware Solution para supervisar la conexión de ExpressRoute back-end de Azure VMware Solution",
- "waf": "Operaciones"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Cuando use imágenes almacenadas en Azure Container Registry, extráigalas mediante una identidad administrada.",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Extracción de contenedores mediante una identidad administrada",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Al configurar las opciones de diagnóstico de App Service, puede enviar todos los datos de telemetría a Log Analytics como destino central para el registro y la supervisión. Esto le permite supervisar la actividad en tiempo de ejecución de App Service, como los registros HTTP, los registros de aplicaciones, los registros de plataforma, ...",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"severity": "Medio",
- "text": "Asegúrese de que se crea un monitor de conexión desde un recurso local a una máquina virtual de Azure VMware Solution para supervisar la conectividad de extremo a extremo",
- "waf": "Operaciones"
+ "text": "Envío de registros en tiempo de ejecución de App Service a Log Analytics",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
- "severity": "Alto",
- "text": "Cuando se utiliza el servidor de rutas, asegúrese de que no se propaguen más de 1000 rutas desde el servidor de rutas a la puerta de enlace de ExR al entorno local (límite de ARS).",
- "waf": "Operaciones"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Configure una configuración de diagnóstico para enviar el registro de actividad a Log Analytics como destino central para el registro y la supervisión. Esto le permite supervisar la actividad del plano de control en el propio recurso de App Service.",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
+ "severity": "Medio",
+ "text": "Envío de registros de actividad de App Service a Log Analytics",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
- "severity": "Alto",
- "text": "¿Se ha implementado Privileged Identity Management para los roles que administran el recurso de Azure VMware Solution en Azure Portal (no se permiten permisos permanentes)?",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Controle el acceso saliente a la red mediante una combinación de integración de red virtual regional, grupos de seguridad de red y UDR. El tráfico debe enrutarse a una aplicación virtual de red, como Azure Firewall. Asegúrese de supervisar los registros del cortafuegos.",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
+ "severity": "Medio",
+ "text": "El acceso a la red saliente debe controlarse",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
- "severity": "Alto",
- "text": "Los informes de auditoría de Privileged Identity Management deben implementarse para los roles PIM de Azure VMware Solution",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Puede proporcionar una dirección IP de salida estable mediante la integración de red virtual y una puerta de enlace NAT de red virtual o una aplicación virtual de red como Azure Firewall. Esto permite a la parte receptora incluir en la lista de permitidos en función de la IP, en caso de que sea necesario. Tenga en cuenta que para las comunicaciones con los servicios de Azure, a menudo no es necesario depender de la dirección IP y, en su lugar, se deben usar mecanismos como los puntos de conexión de servicio. (Además, el uso de puntos de conexión privados en el extremo receptor evita que se produzca SNAT y proporciona un intervalo de IP de salida estable).",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
+ "severity": "Bajo",
+ "text": "Garantizar una IP estable para las comunicaciones salientes hacia las direcciones de Internet",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
- "severity": "Medio",
- "text": "Si se usa Privileged Identity Management, asegúrese de que se crea una cuenta válida habilitada para Entra ID con un registro SMTP válido para las notificaciones de reemplazo automático de host de Azure VMware Solution. (se requieren permisos permanentes)",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Controle el acceso entrante a la red mediante una combinación de restricciones de acceso al Servicio de aplicaciones, puntos de conexión de servicio o puntos de conexión privados. Se pueden requerir y configurar diferentes restricciones de acceso para la propia aplicación web y el sitio de SCM.",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "El acceso a la red entrante debe controlarse",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Protéjase contra el tráfico entrante malintencionado mediante un firewall de aplicaciones web como Application Gateway o Azure Front Door. Asegúrese de supervisar los registros del WAF.",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
"severity": "Alto",
- "text": "Limite el uso de la cuenta de CloudAdmin solo al acceso de emergencia",
+ "text": "Uso de un WAF delante de App Service",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
- "severity": "Medio",
- "text": "Cree funciones RBAC personalizadas en vCenter para implementar un modelo de privilegios mínimos dentro de vCenter",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Asegúrese de que no se pueda omitir el WAF bloqueando el acceso solo al WAF. Use una combinación de restricciones de acceso, puntos de conexión de servicio y puntos de conexión privados.",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Evite que se omita WAF",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Establezca la directiva TLS mínima en 1.2 en la configuración de App Service.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
"severity": "Medio",
- "text": "Es un proceso definido para rotar periódicamente las credenciales de administrador de la nube (vCenter) y administrador (NSX)",
+ "text": "Establezca la directiva TLS mínima en 1.2",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Configure App Service para que use solo HTTPS. Esto hace que App Service se redirija de HTTP a HTTPS. Considere seriamente el uso de HTTP Strict Transport Security (HSTS) en su código o desde su WAF, que informa a los navegadores que solo se debe acceder al sitio mediante HTTPS.",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
"severity": "Alto",
- "text": "Uso de un proveedor de identidades centralizado que se usará para las cargas de trabajo (VM) que se ejecutan en Azure VMware Solution",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
- "severity": "Medio",
- "text": "¿Se implementa el filtrado de tráfico este-oeste en NSX-T?",
+ "text": "Usar solo HTTPS",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "No utilice caracteres comodín en la configuración de CORS, ya que esto permite que todos los orígenes accedan al servicio (lo que anula el propósito de CORS). En concreto, solo permite los orígenes que esperas poder acceder al servicio.",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
"severity": "Alto",
- "text": "Las cargas de trabajo de Azure VMware Solution no se exponen directamente a Internet. El tráfico se filtra e inspecciona mediante Azure Application Gateway, Azure Firewall o soluciones de terceros",
+ "text": "Los comodines no deben usarse para CORS",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "La depuración remota no debe estar activada en producción, ya que esto abre puertos adicionales en el servicio, lo que aumenta la superficie expuesta a ataques. Tenga en cuenta que el servicio desactiva la depuración remota automáticamente después de 48 horas.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
"severity": "Alto",
- "text": "La auditoría y el registro se implementan para las solicitudes entrantes de Internet a Azure VMware Solution y a las cargas de trabajo basadas en Azure VMware Solution",
+ "text": "Desactivar la depuración remota",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Habilite Defender para App Service. Esto (entre otras amenazas) detecta comunicaciones a direcciones IP maliciosas conocidas. Revise las recomendaciones de Defender para App Service como parte de las operaciones.",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
"severity": "Medio",
- "text": "La supervisión de sesiones se implementa para las conexiones salientes a Internet desde Azure VMware Solution o cargas de trabajo basadas en Azure VMware Solution para identificar actividades sospechosas o malintencionadas",
+ "text": "Habilitación de Defender for Cloud: Defender for App Service",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure proporciona protección básica contra DDoS en su red, que se puede mejorar con funcionalidades inteligentes de DDoS Standard que aprenden sobre los patrones de tráfico normales y pueden detectar comportamientos inusuales. DDoS Standard se aplica a una red virtual, por lo que debe configurarse para el recurso de red delante de la aplicación, como Application Gateway o una aplicación virtual de red.",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
"severity": "Medio",
- "text": "¿Está habilitada la protección estándar de DDoS en la subred de puerta de enlace de ExR/VPN en Azure?",
+ "text": "Habilitación del estándar de protección DDoS en la red virtual de WAF",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Cuando use imágenes almacenadas en Azure Container Registry, extráigalas a través de una red virtual desde Azure Container Registry mediante su punto de conexión privado y la configuración de la aplicación \"WEBSITE_PULL_IMAGE_OVER_VNET\".",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
"severity": "Medio",
- "text": "Use una estación de trabajo de acceso con privilegios (PAW) dedicada para administrar Azure VMware Solution, vCenter, NSX Manager y HCX Manager",
+ "text": "Extracción de contenedores a través de una red virtual",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Realice una prueba de penetración en la aplicación web siguiendo las reglas de participación de las pruebas de penetración.",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
"severity": "Medio",
- "text": "Habilitación de la detección avanzada de amenazas (Microsoft Defender for Cloud, también conocida como ASC) para cargas de trabajo que se ejecutan en Azure VMware Solution",
+ "text": "Realizar una prueba de penetración",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Implemente código de confianza que se haya validado y analizado en busca de vulnerabilidades de acuerdo con las prácticas de DevSecOps.",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
"severity": "Medio",
- "text": "Use Azure ARC for Servers para controlar correctamente las cargas de trabajo que se ejecutan en Azure VMware Solution mediante tecnologías nativas de Azure (Azure ARC for Azure VMware Solution aún no está disponible)",
+ "text": "Implementación de código validado",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
- "severity": "Bajo",
- "text": "Asegúrese de que las cargas de trabajo de Azure VMware Solution usen suficiente cifrado de datos durante el tiempo de ejecución (como el cifrado de disco invitado y SQL TDE). (El cifrado de vSAN en reposo es el predeterminado)",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Utilice las versiones más recientes de plataformas, lenguajes de programación, protocolos y marcos compatibles.",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Utilizar plataformas, lenguajes, protocolos y marcos actualizados",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub proporciona cifrado de datos en reposo. Si usa su propia clave, los datos se siguen cifrando con la clave administrada por Microsoft, pero además la clave administrada por Microsoft se cifrará con la clave administrada por el cliente. ",
+ "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
+ "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
+ "service": "Event Hubs",
"severity": "Bajo",
- "text": "Cuando se usa el cifrado en invitado, almacene las claves de cifrado en Azure Key Vault siempre que sea posible",
+ "text": "Usar la opción de clave administrada por el cliente en el cifrado de datos en reposo cuando sea necesario",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Los espacios de nombres de Azure Event Hubs permiten a los clientes enviar y recibir datos con TLS 1.0 y versiones posteriores. Para aplicar medidas de seguridad más estrictas, puede configurar el espacio de nombres de Event Hubs para requerir que los clientes envíen y reciban datos con una versión más reciente de TLS. Si un espacio de nombres de Event Hubs requiere una versión mínima de TLS, se producirá un error en las solicitudes realizadas con una versión anterior. ",
+ "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Considere la posibilidad de usar la compatibilidad con actualizaciones de seguridad extendidas para las cargas de trabajo que se ejecutan en Azure VMware Solution (Azure VMware Solution es apta para ESU)",
+ "text": "Aplicar una versión mínima requerida de Seguridad de la capa de transporte (TLS) para las solicitudes ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
- "severity": "Alto",
- "text": "Asegúrese de que se utiliza el método de redundancia de datos de vSAN adecuado (especificación RAID)",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Al crear un espacio de nombres de Event Hubs, se crea automáticamente una regla de directiva denominada RootManageSharedAccessKey para el espacio de nombres. Esta directiva tiene permisos de administración para todo el espacio de nombres. Se recomienda tratar esta regla como una cuenta raíz administrativa y no usarla en la aplicación. Se recomienda usar AAD como proveedor de autenticación con RBAC. ",
+ "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
+ "service": "Event Hubs",
+ "severity": "Medio",
+ "text": "Evite usar la cuenta raíz cuando no sea necesario",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
- "severity": "Alto",
- "text": "Asegúrese de que la directiva de error de tolerancia esté implementada para satisfacer sus necesidades de almacenamiento de vSAN",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Las identidades administradas para los recursos de Azure pueden autorizar el acceso a los recursos de Event Hubs mediante credenciales de Azure AD desde aplicaciones que se ejecutan en Azure Virtual Machines (VM), aplicaciones de funciones, conjuntos de escalado de máquinas virtuales y otros servicios. Mediante el uso de identidades administradas para los recursos de Azure junto con la autenticación de Azure AD, puede evitar el almacenamiento de credenciales con las aplicaciones que se ejecutan en la nube. ",
+ "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
+ "service": "Event Hubs",
+ "severity": "Medio",
+ "text": "Siempre que sea posible, la aplicación debe usar una identidad administrada para autenticarse en Azure Event Hub. Si no es así, considere la posibilidad de tener la credencial de almacenamiento (SAS, credencial de entidad de servicio) en Azure Key Vault o en un servicio equivalente",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Al crear permisos, proporcione un control específico sobre el acceso de un cliente al Centro de eventos de Azure. Los permisos del Centro de eventos de Azure pueden y deben limitarse al nivel de recurso individual, por ejemplo, grupo de consumidores, entidad del centro de eventos, espacios de nombres del centro de eventos, etc.",
+ "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
+ "service": "Event Hubs",
"severity": "Alto",
- "text": "Asegúrese de que ha solicitado una cuota suficiente, asegurándose de que ha tenido en cuenta el crecimiento y el requisito de recuperación ante desastres",
- "waf": "Fiabilidad"
+ "text": "Uso de RBAC de plano de datos con privilegios mínimos",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Los registros de recursos del Centro de eventos de Azure incluyen registros operativos, registros de red virtual y registros de Kafka. Los registros de auditoría en tiempo de ejecución capturan información de diagnóstico agregada para todas las operaciones de acceso al plano de datos (como eventos de envío o recepción) en Event Hubs.",
+ "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
+ "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Asegúrese de que se comprenden las restricciones de acceso a ESXi, ya que existen límites de acceso que pueden afectar a las soluciones de terceros.",
- "waf": "Operaciones"
+ "text": "Habilite el registro para la investigación de seguridad. Use Azure Monitor para capturar métricas y registros, como registros de recursos, registros de auditoría en tiempo de ejecución y registros de Kafka",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "De forma predeterminada, Azure Event Hub tiene una dirección IP pública y es accesible a través de Internet. Los puntos de conexión privados permiten el tráfico entre la red virtual y Azure Event Hubs a través de la red troncal de Microsoft. Además de eso, debe deshabilitar los puntos de conexión públicos si no se usan. ",
+ "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
+ "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Asegúrese de tener una política en torno a la densidad y la eficiencia del host ESXi, teniendo en cuenta el tiempo de espera para solicitar nuevos nodos",
- "waf": "Operaciones"
+ "text": "Considere la posibilidad de usar puntos de conexión privados para acceder al Centro de eventos de Azure y deshabilitar el acceso a la red pública cuando corresponda.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Con el firewall IP, puede restringir aún más el punto de conexión público a solo un conjunto de direcciones IPv4 o rangos de direcciones IPv4 en notación CIDR (Classless Inter-Domain Routing). ",
+ "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Asegúrese de que existe un buen proceso de administración de costos para Azure VMware Solution: se puede usar Azure Cost Management",
- "waf": "Costar"
+ "text": "Considere la posibilidad de permitir solo el acceso al espacio de nombres del Centro de eventos de Azure desde direcciones IP o intervalos específicos",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
- "severity": "Bajo",
- "text": "¿Se usan instancias reservadas de Azure para optimizar el costo de uso de Azure VMware Solution?",
- "waf": "Costar"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
+ "service": "Event Hubs",
+ "severity": "Medio",
+ "text": "Aproveche el Manual de Resiliencia de los TLC",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": " Esto se activará automáticamente para un nuevo espacio de nombres EH creado desde el portal con SKU Premium, Dedicado o Estándar en una región habilitada para zonas. Tanto los metadatos de EH como los propios datos de eventos se replican en todas las zonas",
+ "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
+ "service": "Event Hubs",
+ "severity": "Alto",
+ "text": "Aproveche las zonas de disponibilidad si corresponde regionalmente",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
+ "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Tenga en cuenta el uso de Azure Private-Link cuando use otros servicios nativos de Azure",
- "waf": "Seguridad"
+ "text": "Usa las SKU Premium o Dedicadas para obtener un rendimiento predecible",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "La característica integrada de recuperación ante desastres geográfica, cuando está habilitada, garantiza que toda la configuración de un espacio de nombres (Event Hubs, grupos de consumidores y configuración) se replique continuamente desde un espacio de nombres principal a un espacio de nombres secundario, y permite un movimiento de conmutación por error de una sola vez del principal al secundario en cualquier momento. La característica Activo/Pasivo está diseñada para facilitar la recuperación y el abandono de una región de Azure con errores sin tener que cambiar las configuraciones de la aplicación",
+ "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
+ "service": "Event Hubs",
"severity": "Alto",
- "text": "Asegúrese de que todos los recursos necesarios residen en las mismas zonas de disponibilidad de Azure",
- "waf": "Rendimiento"
+ "text": "Planeación de la recuperación ante desastres geográfica mediante la configuración pasiva activa",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Debe utilizarse para configuraciones de recuperación ante desastres en las que no se puede tolerar una interrupción o pérdida de datos de eventos en la región inactiva. En estos casos, siga las instrucciones de replicación y no use la capacidad de recuperación ante desastres geográfica integrada (activa/pasiva). Con Activo/Activo, mantenga varios centros de eventos en diferentes regiones y espacios de nombres, y los eventos se replicarán entre los centros",
+ "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Habilitación de cargas de trabajo de máquina virtual invitada de Microsoft Defender for Cloud for Azure VMware Solution",
- "waf": "Seguridad"
+ "text": "En el caso de las aplicaciones críticas para la empresa, use la configuración Active Active",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
+ "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
+ "service": "Event Hubs",
"severity": "Medio",
- "text": "Uso de servidores habilitados para Azure Arc para administrar las cargas de trabajo de máquinas virtuales invitadas de Azure VMware Solution",
- "waf": "Seguridad"
+ "text": "Diseño de centros de eventos resilientes",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Habilitación del registro de diagnósticos y métricas en Azure VMware Solution",
- "waf": "Operaciones"
+ "text": "Siga las barreras de seguridad de Metaprompting para una IA responsable",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
- "service": "AVS",
- "severity": "Medio",
- "text": "Implementación de los agentes de Log Analytics en cargas de trabajo de máquinas virtuales invitadas de Azure VMware Solution",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de crear patrones de puerta de enlace con APIM o soluciones como AI Central para mejorar la limitación de velocidad, el equilibrio de carga, la autenticación y el registro",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
- "service": "AVS",
- "severity": "Medio",
- "text": "Asegúrese de que dispone de una directiva y una solución de copia de seguridad documentadas e implementadas para las cargas de trabajo de máquina virtual de Azure VMware Solution",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Habilitación de la supervisión para las instancias de AOAI",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
- "service": "AVS",
- "severity": "Medio",
- "text": "Uso de Microsoft Defender for Cloud para la supervisión del cumplimiento de las cargas de trabajo que se ejecutan en Azure VMware Solution",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Cree alertas para notificar a los equipos de eventos, como una entrada en el registro de actividad creada por una acción realizada en el recurso, como la regeneración de sus claves de suscripción, o un umbral de métrica, como el número de errores que superan los 10 en una hora",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Supervise el uso de tokens para evitar interrupciones del servicio debido a la capacidad",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "¿Se agregan las líneas base de cumplimiento aplicables a Microsoft Defender for Cloud?",
- "waf": "Seguridad"
+ "text": "Observe métricas como tokens de inferencia procesados, tokens de finalización generados, monitoree el límite de velocidad",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
- "service": "AVS",
- "severity": "Alto",
- "text": "¿Se evaluó la residencia de datos al seleccionar las regiones de Azure que se usarán para la implementación de Azure VMware Solution?",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "text": "Si los diagnósticos no son suficientes para usted, considere la posibilidad de usar una puerta de enlace como Azure API Managements frente a Azure OpenAI para registrar tanto los mensajes entrantes como las respuestas salientes, cuando esté permitido",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "¿Son claras y documentadas las implicaciones del procesamiento de datos (proveedor de servicios / modelo de consumidor de servicios)?",
- "waf": "Seguridad"
+ "text": "Use la infraestructura como código para implementar el servicio Azure OpenAI, las implementaciones de modelos y todos los recursos relacionados",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
- "service": "AVS",
- "severity": "Medio",
- "text": "Considere la posibilidad de usar CMK (clave administrada por el cliente) para vSAN solo si es necesario por motivos de cumplimiento.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Uso de la autenticación de Microsoft Entra con identidad administrada en lugar de clave de API",
"waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Creación de paneles para habilitar la información principal de supervisión de Azure VMware Solution",
- "waf": "Operaciones"
+ "text": "Evalúe el rendimiento/precisión del sistema con un conjunto de datos dorado conocido que tenga las entradas y las respuestas correctas. Aproveche las capacidades de PromptFlow para la evaluación.",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Creación de alertas de advertencia para umbrales críticos para alertas automáticas sobre el rendimiento de Azure VMware Solution (CPU >80 %, memoria media >80 %, vSAN >70 %)",
- "waf": "Operaciones"
+ "text": "Evaluación del uso del modelo de rendimiento aprovisionado ",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Asegúrese de que se crea una alerta crítica para supervisar si el consumo de vSAN es inferior al 75 %, ya que se trata de un umbral de soporte de VMware",
- "waf": "Operaciones"
+ "text": "Revisión e implementación de la seguridad del contenido de Azure AI",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Asegúrese de que las alertas están configuradas para las alertas y notificaciones de Azure Service Health",
- "waf": "Operaciones"
+ "text": "Defina y evalúe el rendimiento del sistema en función de los tokens y la respuesta por minuto y alinee con los requisitos",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Configure el registro de Azure VMware Solution para que se envíe a una cuenta de Azure Storage o Azure EventHub para su procesamiento",
- "waf": "Operaciones"
+ "text": "Mejore la latencia del sistema limitando el tamaño de los tokens, las opciones de transmisión",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
- "severity": "Bajo",
- "text": "Si se requiere una visión profunda de VMware vSphere: ¿Se utiliza vRealize Operations o vRealize Network Insights en la solución?",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Calcule las demandas de elasticidad para determinar la segregación de solicitudes sincrónicas y por lotes en función de la prioridad. Para la prioridad alta, utilice el enfoque sincrónico y para la prioridad baja, se prefiere el procesamiento por lotes asincrónico con cola",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Asegúrese de que la directiva de almacenamiento de vSAN para las máquinas virtuales NO sea la directiva de almacenamiento predeterminada, ya que esta directiva aplica el aprovisionamiento grueso",
- "waf": "Operaciones"
+ "text": "Compare los requisitos de consumo de tokens en función de las demandas estimadas de los consumidores. Considere la posibilidad de usar la herramienta de pruebas comparativas de Azure OpenAI para ayudarle a validar el rendimiento si usa implementaciones de unidades de rendimiento aprovisionadas",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que las bibliotecas de contenido de vSphere no se coloquen en vSAN, ya que vSAN es un recurso finito",
- "waf": "Operaciones"
+ "text": "Si usa unidades de rendimiento aprovisionadas (PTU), considere la posibilidad de implementar una implementación de token por minuto (TPM) para las solicitudes de desbordamiento. Use una puerta de enlace para enrutar las solicitudes a la implementación de TPM cuando se alcancen los límites de PTU.",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
- "severity": "Medio",
- "text": "Asegúrese de que los repositorios de datos de la solución de copia de seguridad se almacenen fuera del almacenamiento de vSAN. Ya sea en Azure nativo o en un almacén de datos respaldado por un grupo de discos",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Elija el modelo adecuado para la tarea correcta. Elija modelos con el equilibrio adecuado entre velocidad, calidad de respuesta y complejidad de salida",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que las cargas de trabajo que se ejecutan en Azure VMware Solution se administran de forma híbrida mediante Azure Arc para servidores (Arc para Azure VMware Solution está en versión preliminar)",
- "waf": "Operaciones"
+ "text": "Tener una línea de base para el rendimiento sin ajuste fino para saber si el ajuste fino ha mejorado o no el rendimiento del modelo",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
- "service": "AVS",
- "severity": "Medio",
- "text": "Asegúrese de que las cargas de trabajo que se ejecutan en Azure VMware Solution se supervisan mediante Azure Log Analytics y Azure Monitor",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "text": "Implementación de varias instancias de OAI en todas las regiones",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
- "service": "AVS",
- "severity": "Medio",
- "text": "Inclusión de cargas de trabajo que se ejecutan en Azure VMware Solution en las herramientas de administración de actualizaciones existentes o en Azure Update Management",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Implemente reintentos y comprobaciones de estado con el patrón de puerta de enlace como APIM",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Uso de Azure Policy para incorporar cargas de trabajo de Azure VMware Solution en las soluciones de administración, supervisión y seguridad de Azure",
- "waf": "Operaciones"
+ "text": "Asegúrese de tener cuotas adecuadas de TPM y RPM para la carga de trabajo",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que las cargas de trabajo que se ejecutan en Azure VMware Solution se incorporan a Microsoft Defender for Cloud",
- "waf": "Seguridad"
+ "text": "Revise las consideraciones de la guía del kit de herramientas de HAI y aplique esas prácticas de interacción para el slution",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que las copias de seguridad no se almacenen en vSAN, ya que vSAN es un recurso finito",
+ "text": "Implemente modelos de ajuste de precisión independientes en todas las regiones si se emplea el ajuste de precisión",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "¿Se han considerado todas las soluciones de recuperación ante desastres y se ha decidido por la mejor solución para su negocio? [SRM/JetStream/Zerto/Veeam/...]",
+ "text": "Realice copias de seguridad y replique regularmente los datos críticos para garantizar la disponibilidad y la capacidad de recuperación de los datos en caso de pérdida de datos o fallos del sistema. Aproveche los servicios de copia de seguridad y recuperación ante desastres de Azure para proteger sus datos.",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
- "severity": "Medio",
- "text": "Uso de Azure Site Recovery cuando la tecnología de recuperación ante desastres sea IaaS nativa de Azure",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Los niveles de servicio de búsqueda de Azure AI deben elegirse para tener un Acuerdo de Nivel de Servicio ",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "Bajo",
+ "text": "Clasifique los datos y la confidencialidad, etiquetando con Microsoft Purview antes de generar las incrustaciones y asegúrese de tratar las incrustaciones generadas con la misma confidencialidad y clasificación",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Utilice planes de recuperación automatizados con cualquiera de las soluciones ante desastres, evite las tareas manuales tanto como sea posible",
- "waf": "Fiabilidad"
+ "text": "Cifre los datos utilizados para RAG con cifrado SSE/Disk con BYOK opcional",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
- "service": "AVS",
- "severity": "Medio",
- "text": "Usar el par de regiones geopolíticas como entorno secundario de recuperación ante desastres",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Asegúrese de que TLS se aplica a los datos en tránsito a través de fuentes de datos, la búsqueda de IA utilizada para la generación aumentada de recuperación (RAG) y la comunicación de LLM",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Utilice 2 espacios de direcciones diferentes entre las regiones, por ejemplo: 10.0.0.0/16 y 192.168.0.0/16 para las diferentes regiones",
- "waf": "Fiabilidad"
+ "text": "Use RBAC para administrar el acceso a los servicios de Azure OpenAI. Asigne los permisos adecuados a los usuarios y restrinja el acceso en función de sus funciones y responsabilidades",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "¿Se usará Global Reach de ExpressRoute para la conectividad entre las nubes privadas de Azure VMware Solution principal y secundaria, o el enrutamiento se realiza a través de aplicaciones virtuales de red?",
- "waf": "Fiabilidad"
+ "text": "Implemente técnicas de cifrado, enmascaramiento o redacción de datos para ocultar datos confidenciales o reemplazarlos con valores ofuscados en entornos que no sean de producción o al compartir datos con fines de prueba o solución de problemas",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Use Azure Defender para detectar y responder a las amenazas de seguridad y configurar mecanismos de supervisión y alerta para identificar actividades sospechosas o infracciones. Aproveche Azure Sentinel para la detección y respuesta a amenazas avanzadas",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "¿Se han considerado todas las soluciones de copia de seguridad y se ha decidido por la mejor solución para su negocio? [ MABS/CommVault/Metallic.io/Veeam/ . ]",
- "waf": "Fiabilidad"
+ "text": "Establezca políticas de retención y eliminación de datos para cumplir con las regulaciones de cumplimiento. Implemente métodos de eliminación seguros para los datos que ya no son necesarios y mantenga un registro de auditoría de las actividades de retención y eliminación de datos",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Implemente los escudos de aviso y la detección de conexión a tierra mediante Content Safety ",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Garantice el cumplimiento de las normativas de protección de datos pertinentes, como el RGPD o la HIPAA, mediante la implementación de controles de privacidad y la obtención de los consentimientos o permisos necesarios para las actividades de tratamiento de datos.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Implemente la solución de copia de seguridad en la misma región que la nube privada de Azure VMware Solution",
- "waf": "Fiabilidad"
+ "text": "Eduque a sus empleados sobre las mejores prácticas de seguridad de datos, la importancia de manejar los datos de forma segura y los riesgos potenciales asociados con las violaciones de datos. Anímelos a seguir diligentemente los protocolos de seguridad de datos.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Mantenga los datos de producción separados de los datos de desarrollo y pruebas. Utilice únicamente datos confidenciales reales en producción y utilice datos anónimos o sintéticos en entornos de desarrollo y prueba.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Implementación de la solución de copia de seguridad fuera de vSan, en componentes nativos de Azure",
- "waf": "Fiabilidad"
+ "text": "Si tiene distintos niveles de confidencialidad de datos, considere la posibilidad de crear índices independientes para cada nivel. Por ejemplo, podría tener un índice para los datos generales y otro para los datos confidenciales, cada uno gobernado por diferentes protocolos de acceso",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
- "severity": "Bajo",
- "text": "¿Existe un proceso para solicitar una restauración de los componentes de VMware administrados por la plataforma Azure?",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Lleve la segregación un paso más allá colocando conjuntos de datos confidenciales en diferentes instancias del servicio. Cada instancia se puede controlar con su propio conjunto específico de políticas RBAC",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
- "severity": "Bajo",
- "text": "En el caso de las implementaciones manuales, se deben documentar todas las configuraciones e implementaciones",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Reconozca que las incrustaciones y los vectores generados a partir de información confidencial son en sí mismos confidenciales. Estos datos deben recibir las mismas medidas de protección que el material de origen",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
- "severity": "Bajo",
- "text": "En el caso de las implementaciones manuales, considere la posibilidad de implementar bloqueos de recursos para evitar acciones accidentales en la nube privada de Azure VMware Solution",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Aplique RBAC a los almacenes de datos que tienen incrustaciones y vectores y alcance el acceso en función de los requisitos de acceso del rol",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
- "severity": "Bajo",
- "text": "Para implementaciones automatizadas, implemente una nube privada mínima y escale según sea necesario",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Configure un punto de conexión privado para que los servicios de IA restrinjan el acceso al servicio dentro de su red",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
- "severity": "Bajo",
- "text": "En el caso de las implementaciones automatizadas, solicite o reserve una cuota antes de iniciar la implementación",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Aplique un estricto control del tráfico entrante y saliente con Azure Firewall y UDR, y limite los puntos de integración externos",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
- "service": "AVS",
- "severity": "Bajo",
- "text": "En el caso de la implementación automatizada, asegúrese de que se crean bloqueos de recursos relevantes a través de la automatización o a través de Azure Policy para una gobernanza adecuada",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Implemente la segmentación de la red y los controles de acceso para restringir el acceso a la aplicación LLM solo a los usuarios y sistemas autorizados y evitar el movimiento lateral",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
- "service": "AVS",
- "severity": "Bajo",
- "text": "Implemente nombres comprensibles para las claves de autorización ExR para permitir una fácil identificación del propósito y uso de las claves.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Utilice herramientas de compresión rápida como LLMLingua o gprtrim",
+ "waf": "Optimización de costes"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
- "service": "AVS",
- "severity": "Bajo",
- "text": "Uso de Key Vault para almacenar secretos y claves de autorización cuando se usan principios de servicio independientes para implementar Azure VMware Solution y ExpressRoute",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Asegúrese de que las API y los puntos finales utilizados por la aplicación LLM estén correctamente protegidos con mecanismos de autenticación y autorización, como identidades administradas, claves de API u OAuth, para evitar el acceso no autorizado.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Aplique mecanismos sólidos de autenticación de usuario final, como la autenticación multifactor, para evitar el acceso no autorizado a la aplicación LLM y a los recursos de red asociados",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Implemente herramientas de monitoreo de red para detectar y analizar el tráfico de red en busca de actividades sospechosas o maliciosas. Habilite el registro para capturar eventos de red y facilitar el análisis forense en caso de incidentes de seguridad",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Realizar auditorías de seguridad y pruebas de penetración para identificar y abordar cualquier debilidad o vulnerabilidad de seguridad de red en la infraestructura de red de la aplicación LLM",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
"severity": "Bajo",
- "text": "Defina dependencias de recursos para serializar acciones en IaC cuando sea necesario implementar muchos recursos en Azure VMware Solution, ya que Azure VMware Solution solo admite un número limitado de operaciones paralelas.",
- "waf": "Operaciones"
+ "text": "Los servicios de Azure AI están etiquetados correctamente para una mejor administración",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
"severity": "Bajo",
- "text": "Al realizar la configuración automatizada de segmentos de NSX-T con una única puerta de enlace de nivel 1, use las API de Azure Portal en lugar de las API de NSX-Manager",
- "waf": "Operaciones"
+ "text": "Las cuentas de Azure AI Service siguen las convenciones de nomenclatura de la organización",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Los registros de diagnóstico en los recursos de servicios de Azure AI deben estar habilitados",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Se recomienda deshabilitar el acceso a claves (autenticación local) por seguridad. Después de deshabilitar el acceso basado en claves, el identificador de Microsoft Entra se convierte en el único método de acceso, lo que permite mantener el principio de privilegio mínimo y el control granular. ",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Almacene y administre claves de forma segura con Azure Key Vault. Evite codificar de forma rígida o incrustar claves confidenciales en el código de la aplicación de LLM y recupérelas de forma segura de Azure Key Vault mediante identidades administradas",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Rotar y expirar periódicamente las claves almacenadas en Azure Key Vault para minimizar el riesgo de acceso no autorizado.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Use tiktoken para comprender los tamaños de los tokens para las optimizaciones de tokens en el modo conversacional",
+ "waf": "Optimización de costes"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Siga prácticas de codificación seguras para evitar vulnerabilidades comunes, como ataques de inyección, secuencias de comandos entre sitios (XSS) o errores de configuración de seguridad.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Configurar un proceso para actualizar y parchear regularmente las bibliotecas de LLM y otros componentes del sistema",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Cumplir con los términos de uso, las directivas y las directrices de Azure OpenAI u otros LLM, así como con los casos de uso permitidos.",
+ "waf": "Excelencia Operacional"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Si tiene la intención de usar el escalado horizontal automatizado, asegúrese de solicitar una cuota suficiente de Azure VMware Solution para las suscripciones que ejecutan Azure VMware Solution",
- "waf": "Rendimiento"
+ "text": "Comprenda la diferencia en el costo de los modelos base y los modelos ajustados y los tamaños de paso de token",
+ "waf": "Optimización de costes"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Solicitudes por lotes, siempre que sea posible, para minimizar la sobrecarga por llamada, lo que puede reducir los costos generales. Asegúrese de optimizar el tamaño del lote",
+ "waf": "Optimización de costes"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Cuando tenga la intención de usar la reducción horizontal automatizada, asegúrese de tener en cuenta los requisitos de la directiva de almacenamiento antes de realizar dicha acción",
- "waf": "Rendimiento"
+ "text": "Configure un sistema de seguimiento de costos que supervise el uso del modelo y use esa información para ayudar a informar las opciones de modelos y los tamaños indicados",
+ "waf": "Optimización de costes"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Las operaciones de escalado siempre deben serializarse dentro de un único SDDC, ya que solo se puede realizar una operación de escalado a la vez (incluso cuando se utilizan varios clústeres)",
- "waf": "Rendimiento"
+ "text": "Establezca un límite máximo en el número de tokens por respuesta de modelo. Optimice el tamaño para asegurarse de que sea lo suficientemente grande para una respuesta válida",
+ "waf": "Optimización de costes"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Considerar y validar las operaciones de escalado en soluciones de terceros utilizadas en la arquitectura (compatibles o no)",
- "waf": "Rendimiento"
+ "text": "Revise las instrucciones proporcionadas sobre la configuración de la búsqueda de IA para la confiabilidad",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Defina y aplique límites máximos de escalado vertical y horizontal para su entorno en las automatizaciones",
- "waf": "Rendimiento"
+ "text": "Planifique y administre el almacenamiento de vectores de búsqueda de IA",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Implemente reglas de supervisión para supervisar las operaciones de escalado automatizadas y supervisar el éxito y el fracaso para permitir respuestas adecuadas (automatizadas)",
- "waf": "Operaciones"
+ "text": "Aplique prácticas de LLMOps para automatizar la gestión del ciclo de vida de sus aplicaciones GenAI",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Al usar MON, tenga en cuenta los límites de las máquinas virtuales configuradas simultáneamente (límite de MON para HCX [400 - estándar, 1000 - dispositivo más grande])",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Fiabilidad"
+ "text": "Evalúe el uso de los modelos de facturación: PAYG frente a PTU",
+ "waf": "Optimización de costes"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
- "severity": "Alto",
- "text": "Al usar MON, no puede habilitar MON en más de 100 extensiones de red",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Evalúe la calidad de los mensajes y las aplicaciones al cambiar entre versiones de modelo",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Si utiliza una conexión VPN para migraciones, ajuste el tamaño de su MTU en consecuencia.",
- "waf": "Rendimiento"
+ "text": "Evalúe, supervise y perfeccione sus aplicaciones GenAI para características como la fundamentación, la relevancia, la precisión, la coherencia, la fluidez,",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "En el caso de las regiones de baja conectividad que se conectan a Azure (500 Mbps o menos), considere la posibilidad de implementar el dispositivo de optimización de WAN de HCX",
- "waf": "Rendimiento"
+ "text": "Evalúe los resultados de búsqueda de Azure AI en función de diferentes parámetros de búsqueda",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que las migraciones se inicien desde el dispositivo local y NO desde el dispositivo en la nube (NO realice una migración inversa)",
- "waf": "Fiabilidad"
+ "text": "Considere los modelos de ajuste fino como una forma de aumentar la precisión solo cuando haya probado otros enfoques básicos como la ingeniería de avisos y RAG con sus datos",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Cuando se usa Azure NetApp Files para ampliar el almacenamiento de Azure VMware Solution, considere la posibilidad de usarlo como almacén de datos de VMware en lugar de adjuntarlo directamente a una máquina virtual.",
- "waf": "Fiabilidad"
+ "text": "Utilice técnicas de ingeniería rápida para mejorar la precisión de las respuestas de LLM",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que se usa una puerta de enlace de ExpressRoute dedicada para soluciones de almacenamiento de datos externos",
- "waf": "Fiabilidad"
+ "text": "Equipo rojo con sus aplicaciones GenAI",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
"severity": "Medio",
- "text": "Asegúrese de que FastPath está habilitado en la puerta de enlace de ExpressRoute que se usa para las soluciones de almacenamiento de datos externos",
- "waf": "Fiabilidad"
+ "text": "Proporcione a los usuarios finales opciones de puntuación para las respuestas de LLM y realice un seguimiento de estas puntuaciones. ",
+ "waf": "Excelencia Operacional"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "AVS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Si utiliza un clúster ampliado, asegúrese de que la solución de recuperación ante desastres seleccionada sea compatible con el proveedor",
- "waf": "Fiabilidad"
+ "text": "Considere las prácticas de administración de cuotas",
+ "waf": "Optimización de costes"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "Medio",
+ "text": "Utilice soluciones de equilibrador de carga, como la puerta de enlace basada en APIM, para equilibrar la carga y la capacidad entre servicios y regiones",
+ "waf": "Excelencia Operacional"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
"service": "AVS",
"severity": "Alto",
- "text": "Si utiliza un clúster ampliado, asegúrese de que el Acuerdo de Nivel de Servicio proporcionado cumpla sus requisitos",
- "waf": "Fiabilidad"
+ "text": "Asegúrese de que los controladores de dominio ADDS se implementan en la suscripción de identidad en Azure nativo",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
"service": "AVS",
- "severity": "Alto",
- "text": "Si usa un clúster extendido, asegúrese de que ambos circuitos ExpressRoute están conectados al centro de conectividad.",
- "waf": "Fiabilidad"
+ "severity": "Medio",
+ "text": "Asegúrese de que los sitios y servicios de ADDS están configurados para mantener las solicitudes de autenticación de los recursos basados en Azure (incluida Azure VMware Solution) locales en Azure",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
"service": "AVS",
"severity": "Alto",
- "text": "Si usa un clúster extendido, asegúrese de que ambos circuitos ExpressRoute tengan habilitado GlobalReach.",
- "waf": "Fiabilidad"
+ "text": "Asegúrese de que vCenter esté conectado a ADDS para habilitar la autenticación basada en \"cuentas de usuario designadas\"",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
"service": "AVS",
- "severity": "Alto",
- "text": "Haga que la configuración de tolerancia ante desastres del sitio se considere y cambie correctamente para su negocio si es necesario.",
- "waf": "Fiabilidad"
+ "severity": "Medio",
+ "text": "Asegúrese de que la conexión de vCenter a ADDS utilice un protocolo seguro (LDAPS)",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
+ "service": "AVS",
"severity": "Medio",
- "text": "Azure Spring Apps permite dos implementaciones para cada aplicación, de las cuales solo una recibe tráfico de producción. Puede lograr cero tiempo de inactividad con estrategias de implementación azul verde. La implementación azul verde solo está disponible en los niveles Estándar y Enterprise. Puede automatizar la implementación mediante CI/CD con acciones de ADO/GitHub",
- "waf": "Fiabilidad"
+ "text": "La cuenta de CloudAdmin en vCenter IdP solo se utiliza como una cuenta de emergencia (break-glass)",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
- "severity": "Medio",
- "text": "Las instancias de Azure Spring Apps se pueden crear en varias regiones para las aplicaciones y el tráfico se puede enrutar mediante Traffic Manager o Front Door.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Asegúrese de que NSX-Manager esté integrado con un proveedor de identidades externo (LDAPS)",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
+ "service": "AVS",
"severity": "Medio",
- "text": "En la región admitida, Azure Spring Apps se puede implementar como zona redundante, lo que significa que las instancias se distribuyen automáticamente entre las zonas de disponibilidad. Esta función solo está disponible en los niveles Standard y Enterprise.",
- "waf": "Fiabilidad"
+ "text": "¿Se ha creado un modelo RBAC para su uso en VMware vSphere?",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
+ "service": "AVS",
"severity": "Medio",
- "text": "Usar más de 1 instancia de aplicación para las aplicaciones",
- "waf": "Fiabilidad"
+ "text": "Los permisos RBAC deben concederse a grupos ADDS y no a usuarios específicos",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
- "severity": "Medio",
- "text": "Supervise Azure Spring Apps con registros, métricas y seguimiento. Integre ASA con la información de las aplicaciones, realice un seguimiento de los errores y cree libros de trabajo.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Los permisos de RBAC en el recurso de Azure VMware Solution en Azure están \"bloqueados\" solo para un conjunto limitado de propietarios",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
- "severity": "Medio",
- "text": "Configuración del escalado automático en Spring Cloud Gateway",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Asegúrese de que todos los roles personalizados tengan el ámbito de las autorizaciones permitidas de CloudAdmin",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
- "severity": "Bajo",
- "text": "Habilite el escalado automático para las aplicaciones con el consumo estándar y el plan dedicado.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "¿Se ha seleccionado el modelo de conectividad de Azure VMware Solution correcto para el caso de uso del cliente en cuestión?",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
- "severity": "Medio",
- "text": "Use el plan Enterprise para obtener soporte comercial de Spring Boot para aplicaciones de misión crítica. Con otros niveles, obtienes soporte OSS.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Asegúrese de que las conexiones de ExpressRoute o VPN desde el entorno local a Azure se supervisan mediante el \"monitor de conexiones\"",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
+ "service": "AVS",
"severity": "Medio",
- "text": "Azure Center for SAP Solutions (ACSS) es una oferta de Azure que convierte a SAP en una carga de trabajo de nivel superior en Azure. ACSS es una solución integral que permite crear y ejecutar sistemas SAP como una carga de trabajo unificada en Azure y proporciona una base más fluida para la innovación. Puede aprovechar las funcionalidades de administración de los sistemas SAP nuevos y existentes basados en Azure.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "text": "Asegúrese de que se crea un monitor de conexión desde un recurso nativo de Azure a una máquina virtual de Azure VMware Solution para supervisar la conexión de ExpressRoute back-end de Azure VMware Solution",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
+ "service": "AVS",
"severity": "Medio",
- "text": "Azure admite la automatización de implementaciones de SAP en Linux y Windows. SAP Deployment Automation Framework es una herramienta de orquestación de código abierto que puede implementar, instalar y mantener entornos SAP.",
- "training": "https://github.com/Azure/sap-automation",
+ "text": "Asegúrese de que se crea un monitor de conexión desde un recurso local a una máquina virtual de Azure VMware Solution para supervisar la conectividad de extremo a extremo",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
- "service": "SAP",
- "severity": "Medio",
- "text": "Realice una recuperación a un momento dado de sus bases de datos de producción en cualquier momento y en un período de tiempo que cumpla con su RTO; La recuperación a un momento dado suele incluir errores del operador al eliminar datos en la capa DBMS o a través de SAP, por cierto",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Cuando se utiliza el servidor de rutas, asegúrese de que no se propaguen más de 1000 rutas desde el servidor de rutas a la puerta de enlace de ExR al entorno local (límite de ARS).",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
- "service": "SAP",
- "severity": "Medio",
- "text": "Pruebe los tiempos de copia de seguridad y recuperación para verificar que cumplen con los requisitos de RTO para restaurar todos los sistemas simultáneamente después de un desastre.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "¿Se ha implementado Privileged Identity Management para los roles que administran el recurso de Azure VMware Solution en Azure Portal (no se permiten permisos permanentes)?",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
+ "service": "AVS",
"severity": "Alto",
- "text": "Puede replicar el almacenamiento estándar entre regiones emparejadas, pero no puede usar el almacenamiento estándar para almacenar las bases de datos o los discos duros virtuales. Las copias de seguridad solo se pueden replicar entre las regiones emparejadas que utilice. Para todos los demás datos, ejecute la replicación mediante características nativas de DBMS, como SQL Server Always On o SAP HANA System Replication. Use una combinación de Site Recovery, rsync o robocopy y otro software de terceros para la capa de aplicación de SAP.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "Fiabilidad"
+ "text": "Los informes de auditoría de Privileged Identity Management deben implementarse para los roles PIM de Azure VMware Solution",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
+ "service": "AVS",
"severity": "Medio",
- "text": "Al usar Azure Availability Zones para lograr una alta disponibilidad, debe tener en cuenta la latencia entre los servidores de aplicaciones SAP y los servidores de bases de datos. En el caso de las zonas con latencias altas, es necesario implementar procedimientos operativos para garantizar que los servidores de aplicaciones SAP y los servidores de bases de datos se ejecuten en la misma zona en todo momento.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Fiabilidad"
+ "text": "Si se usa Privileged Identity Management, asegúrese de que se crea una cuenta válida habilitada para Entra ID con un registro SMTP válido para las notificaciones de reemplazo automático de host de Azure VMware Solution. (se requieren permisos permanentes)",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
+ "service": "AVS",
"severity": "Alto",
- "text": "Configure conexiones de ExpressRoute desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria. Además, como alternativa al uso de ExpressRoute, considere la posibilidad de configurar conexiones VPN desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria.",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "waf": "Fiabilidad"
+ "text": "Limite el uso de la cuenta de CloudAdmin solo al acceso de emergencia",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Replique el contenido del almacén de claves, como certificados, secretos o claves, en todas las regiones para poder descifrar los datos de la región de recuperación ante desastres.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Cree funciones RBAC personalizadas en vCenter para implementar un modelo de privilegios mínimos dentro de vCenter",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
+ "service": "AVS",
"severity": "Medio",
- "text": "Empareje las redes virtuales principal y de recuperación ante desastres. Por ejemplo, para la replicación del sistema HANA, una red virtual de base de datos de SAP HANA debe estar emparejada con la red virtual de base de datos de SAP HANA del sitio de recuperación ante desastres.",
- "waf": "Fiabilidad"
+ "text": "Es un proceso definido para rotar periódicamente las credenciales de administrador de la nube (vCenter) y administrador (NSX)",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Si usa el almacenamiento de Azure NetApp Files para las implementaciones de SAP, como mínimo, cree dos cuentas de Azure NetApp Files en el nivel Premium, en dos regiones.",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Uso de un proveedor de identidades centralizado que se usará para las cargas de trabajo (VM) que se ejecutan en Azure VMware Solution",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "¿Se implementa el filtrado de tráfico este-oeste en NSX-T?",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
+ "service": "AVS",
"severity": "Alto",
- "text": "Se debe usar la tecnología de replicación de bases de datos nativas para sincronizar la base de datos en un par de alta disponibilidad.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
- "waf": "Fiabilidad"
+ "text": "Las cargas de trabajo de Azure VMware Solution no se exponen directamente a Internet. El tráfico se filtra e inspecciona mediante Azure Application Gateway, Azure Firewall o soluciones de terceros",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
+ "service": "AVS",
"severity": "Alto",
- "text": "El CIDR de la red virtual (VNet) principal no debe entrar en conflicto ni superponerse con el CIDR de la red virtual del sitio de recuperación ante desastres",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "Fiabilidad"
+ "text": "La auditoría y el registro se implementan para las solicitudes entrantes de Internet a Azure VMware Solution y a las cargas de trabajo basadas en Azure VMware Solution",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use Site Recovery para replicar un servidor de aplicaciones en un sitio de recuperación ante desastres. Site Recovery también puede ayudar a replicar máquinas virtuales de clúster de servicios centrales en el sitio de recuperación ante desastres. Al invocar la recuperación ante desastres, deberá volver a configurar el clúster de Linux Pacemaker en el sitio de recuperación ante desastres (por ejemplo, reemplazar el VIP o SBD, ejecutar corosync.conf, etc.).",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "La supervisión de sesiones se implementa para las conexiones salientes a Internet desde Azure VMware Solution o cargas de trabajo basadas en Azure VMware Solution para identificar actividades sospechosas o malintencionadas",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "Alto",
- "text": "Considere la disponibilidad del software de SAP frente a puntos únicos de fallo. Esto incluye puntos únicos de falla dentro de aplicaciones como DBMS utilizados en las arquitecturas SAP NetWeaver y SAP S/4HANA, SAP ABAP y ASCS + SCS. También, otras herramientas como SAP Web Dispatcher.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "¿Está habilitada la protección estándar de DDoS en la subred de puerta de enlace de ExR/VPN en Azure?",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
- "service": "SAP",
- "severity": "Alto",
- "text": "En el caso de SAP y bases de datos de SAP, considere la posibilidad de implementar clústeres de conmutación por error automática. En Windows, los clústeres de conmutación por error de Windows Server admiten la conmutación por error. En Linux, Linux Pacemaker o herramientas de terceros como SIOS Protection Suite y Veritas InfoScale admiten la conmutación por error.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Use una estación de trabajo de acceso con privilegios (PAW) dedicada para administrar Azure VMware Solution, vCenter, NSX Manager y HCX Manager",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
- "severity": "Alto",
- "text": "Azure no admite arquitecturas en las que las máquinas virtuales principal y secundaria compartan el almacenamiento de los datos de DBMS. Para la capa DBMS, el patrón de arquitectura común es replicar bases de datos al mismo tiempo y con pilas de almacenamiento diferentes a las que usan las máquinas virtuales principal y secundaria.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Habilitación de la detección avanzada de amenazas (Microsoft Defender for Cloud, también conocida como ASC) para cargas de trabajo que se ejecutan en Azure VMware Solution",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
- "service": "SAP",
- "severity": "Alto",
- "text": "Los datos de DBMS y los archivos de registro de transacciones y puesta al día se almacenan en el almacenamiento en bloque compatible con Azure o en Azure NetApp Files. Azure Files o Azure Premium Files no se admiten como almacenamiento para datos de DBMS o archivos de registro de puesta al día con la carga de trabajo de SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Use Azure ARC for Servers para controlar correctamente las cargas de trabajo que se ejecutan en Azure VMware Solution mediante tecnologías nativas de Azure (Azure ARC for Azure VMware Solution aún no está disponible)",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
- "service": "SAP",
- "severity": "Alto",
- "text": "Puede usar discos compartidos de Azure en Windows para componentes ASCS + SCS y escenarios específicos de alta disponibilidad. Configure los clústeres de conmutación por error por separado para los componentes de la capa de aplicación de SAP y la capa de DBMS. Actualmente, Azure no admite arquitecturas de alta disponibilidad que combinen componentes de la capa de aplicación de SAP y la capa de DBMS en un clúster de conmutación por error.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Asegúrese de que las cargas de trabajo de Azure VMware Solution usen suficiente cifrado de datos durante el tiempo de ejecución (como el cifrado de disco invitado y SQL TDE). (El cifrado de vSAN en reposo es el predeterminado)",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
- "service": "SAP",
- "severity": "Alto",
- "text": "La mayoría de los clústeres de conmutación por error para los componentes de la capa de aplicación (ASCS) de SAP y la capa de DBMS requieren una dirección IP virtual para un clúster de conmutación por error. Azure Load Balancer debe controlar la dirección IP virtual para todos los demás casos. Un principio de diseño es usar un equilibrador de carga por configuración de clúster. Te recomendamos que utilices la versión estándar del equilibrador de carga (SKU de equilibrador de carga estándar).",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Cuando se usa el cifrado en invitado, almacene las claves de cifrado en Azure Key Vault siempre que sea posible",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
- "service": "SAP",
- "severity": "Alto",
- "text": "Asegúrese de que la IP flotante esté habilitada en el equilibrador de carga",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de usar la compatibilidad con actualizaciones de seguridad extendidas para las cargas de trabajo que se ejecutan en Azure VMware Solution (Azure VMware Solution es apta para ESU)",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
+ "service": "AVS",
"severity": "Alto",
- "text": "Antes de implementar la infraestructura de alta disponibilidad, y en función de la región que elija, determine si desea realizar la implementación con un conjunto de disponibilidad de Azure o una zona de disponibilidad.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "text": "Asegúrese de que se utiliza el método de redundancia de datos de vSAN adecuado (especificación RAID)",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
+ "service": "AVS",
"severity": "Alto",
- "text": "Si desea cumplir los acuerdos de nivel de servicio de infraestructura para las aplicaciones de los componentes de SAP (servicios centrales, servidores de aplicaciones y bases de datos), debe elegir las mismas opciones de alta disponibilidad (máquinas virtuales, conjuntos de disponibilidad, zonas de disponibilidad) para todos los componentes.",
+ "text": "Asegúrese de que la directiva de error de tolerancia esté implementada para satisfacer sus necesidades de almacenamiento de vSAN",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
+ "service": "AVS",
"severity": "Alto",
- "text": "No mezcle servidores de diferentes roles en el mismo conjunto de disponibilidad. Mantenga las máquinas virtuales de servicios centrales, las máquinas virtuales de base de datos y las máquinas virtuales de aplicaciones en sus propios conjuntos de disponibilidad",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "text": "Asegúrese de que ha solicitado una cuota suficiente, asegurándose de que ha tenido en cuenta el crecimiento y el requisito de recuperación ante desastres",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
+ "service": "AVS",
"severity": "Medio",
- "text": "No se pueden implementar conjuntos de disponibilidad de Azure dentro de una zona de disponibilidad de Azure a menos que se usen grupos de selección de ubicación de proximidad.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "Fiabilidad"
+ "text": "Asegúrese de que se comprenden las restricciones de acceso a ESXi, ya que existen límites de acceso que pueden afectar a las soluciones de terceros.",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
- "severity": "Alto",
- "text": "Al crear conjuntos de disponibilidad, use el número máximo de dominios de error y dominios de actualización disponibles. Por ejemplo, si implementa más de dos máquinas virtuales en un conjunto de disponibilidad, use el número máximo de dominios de error (tres) y suficientes dominios de actualización para limitar el efecto de posibles errores de hardware físico, interrupciones de red o interrupciones de energía, además del mantenimiento planeado de Azure. El número predeterminado de dominios de error es dos y no puede cambiarlo en línea más adelante.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Asegúrese de tener una política en torno a la densidad y la eficiencia del host ESXi, teniendo en cuenta el tiempo de espera para solicitar nuevos nodos",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "Alto",
- "text": "Cuando se usan grupos de selección con selección de ubicación de proximidad de Azure en una implementación de conjunto de disponibilidad, los tres componentes de SAP (servicios centrales, servidor de aplicaciones y base de datos) deben estar en el mismo grupo con selección de ubicación de proximidad.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Asegúrese de que existe un buen proceso de administración de costos para Azure VMware Solution: se puede usar Azure Cost Management",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use un grupo de selección de ubicación de proximidad por SID de SAP. Los grupos no abarcan zonas de disponibilidad ni regiones de Azure",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "¿Se usan instancias reservadas de Azure para optimizar el costo de uso de Azure VMware Solution?",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "Alto",
- "text": "Utilice uno de los siguientes servicios para ejecutar clústeres de servicios centrales de SAP, en función del sistema operativo.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Tenga en cuenta el uso de Azure Private-Link cuando use otros servicios nativos de Azure",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
- "service": "SAP",
- "severity": "Medio",
- "text": "Actualmente, Azure no admite la combinación de ASCS y alta disponibilidad de base de datos en el mismo clúster de Linux Pacemaker; sepáralos en grupos individuales. Sin embargo, puede combinar hasta cinco clústeres de servicios centrales en un par de máquinas virtuales.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Asegúrese de que todos los recursos necesarios residen en las mismas zonas de disponibilidad de Azure",
+ "waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
+ "service": "AVS",
"severity": "Medio",
- "text": "Implemente ambas máquinas virtuales en el par de alta disponibilidad en un conjunto de disponibilidad o en zonas de disponibilidad. Estas máquinas virtuales deben tener el mismo tamaño y la misma configuración de almacenamiento.",
- "waf": "Fiabilidad"
+ "text": "Habilitación de cargas de trabajo de máquina virtual invitada de Microsoft Defender for Cloud for Azure VMware Solution",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
+ "service": "AVS",
"severity": "Medio",
- "text": "Azure admite la instalación y configuración de SAP HANA y las instancias de ASCS/SCS y ERS en el mismo clúster de alta disponibilidad que se ejecuta en Red Hat Enterprise Linux (RHEL).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidad"
+ "text": "Uso de servidores habilitados para Azure Arc para administrar las cargas de trabajo de máquinas virtuales invitadas de Azure VMware Solution",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "service": "AVS",
"severity": "Alto",
- "text": "Ejecute todos los sistemas de producción en SSD administradas Premium y use Azure NetApp Files o Ultra Disk Storage. Al menos el disco del sistema operativo debe estar en el nivel Premium para que pueda lograr un mejor rendimiento y el mejor Acuerdo de Nivel de Servicio.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "Fiabilidad"
+ "text": "Habilitación del registro de diagnósticos y métricas en Azure VMware Solution",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
- "service": "SAP",
- "severity": "Alto",
- "text": "Debe ejecutar SAP HANA en Azure solo en los tipos de almacenamiento certificados por SAP. Tenga en cuenta que ciertos volúmenes deben ejecutarse en determinadas configuraciones de disco, cuando corresponda. Estas configuraciones incluyen la habilitación del acelerador de escritura y el uso del almacenamiento premium. También debe asegurarse de que el sistema de archivos que se ejecuta en el almacenamiento es compatible con el DBMS que se ejecuta en la máquina.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Implementación de los agentes de Log Analytics en cargas de trabajo de máquinas virtuales invitadas de Azure VMware Solution",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Asegúrese de que dispone de una directiva y una solución de copia de seguridad documentadas e implementadas para las cargas de trabajo de máquina virtual de Azure VMware Solution",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Uso de Microsoft Defender for Cloud para la supervisión del cumplimiento de las cargas de trabajo que se ejecutan en Azure VMware Solution",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "¿Se agregan las líneas base de cumplimiento aplicables a Microsoft Defender for Cloud?",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
"severity": "Alto",
- "text": "Considere la posibilidad de configurar la alta disponibilidad en función del tipo de almacenamiento que utilice para las cargas de trabajo de SAP. Algunos servicios de almacenamiento disponibles en Azure no son compatibles con Azure Site Recovery, por lo que la configuración de alta disponibilidad puede diferir.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
- "waf": "Fiabilidad"
+ "text": "¿Se evaluó la residencia de datos al seleccionar las regiones de Azure que se usarán para la implementación de Azure VMware Solution?",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
"severity": "Alto",
- "text": "Es posible que los diferentes servicios de almacenamiento nativos de Azure (como Azure Files, Azure NetApp Files, Azure Shared Disk) no estén disponibles en todas las regiones. Por lo tanto, para tener una configuración de SAP similar en la región de recuperación ante desastres después de la conmutación por error, asegúrese de que el servicio de almacenamiento correspondiente se ofrece en el sitio de recuperación ante desastres.",
- "waf": "Fiabilidad"
+ "text": "¿Son claras y documentadas las implicaciones del procesamiento de datos (proveedor de servicios / modelo de consumidor de servicios)?",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"severity": "Medio",
- "text": "Automatice SAP System Start-Stop para gestionar los costes.",
- "waf": "Costar"
+ "text": "Considere la posibilidad de usar CMK (clave administrada por el cliente) para vSAN solo si es necesario por motivos de cumplimiento.",
+ "waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "Bajo",
- "text": "En el caso de usar Azure Premium Storage con SAP HANA, se puede usar el almacenamiento SSD estándar de Azure para seleccionar una solución de almacenamiento rentable. Sin embargo, tenga en cuenta que la elección de SSD estándar o almacenamiento de Azure HDD estándar afectará al Acuerdo de Nivel de Servicio de las máquinas virtuales individuales. Además, para sistemas con menor rendimiento de E/S y baja latencia, como entornos que no son de producción, se pueden usar máquinas virtuales de series inferiores.",
- "waf": "Costar"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Creación de paneles para habilitar la información principal de supervisión de Azure VMware Solution",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Como configuración alternativa de menor costo (multipropósito), puede elegir una SKU de bajo rendimiento para las máquinas virtuales del servidor de base de datos de HANA que no son de producción. Sin embargo, es importante tener en cuenta que algunos tipos de máquinas virtuales, como la serie E, no están certificadas para HANA (directorio de hardware de SAP HANA) o no pueden alcanzar una latencia de almacenamiento inferior a 1 ms.",
- "waf": "Costar"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Creación de alertas de advertencia para umbrales críticos para alertas automáticas sobre el rendimiento de Azure VMware Solution (CPU >80 %, memoria media >80 %, vSAN >70 %)",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
"severity": "Alto",
- "text": "Aplicación de un modelo RBAC para grupos de administración, suscripciones, grupos de recursos y recursos",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Seguridad"
+ "text": "Asegúrese de que se crea una alerta crítica para supervisar si el consumo de vSAN es inferior al 75 %, ya que se trata de un umbral de soporte de VMware",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "Medio",
- "text": "Aplicación de la propagación de la entidad de seguridad para reenviar la identidad de la aplicación en la nube de SAP a SAP local (incluida IaaS) a través del conector en la nube",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Asegúrese de que las alertas están configuradas para las alertas y notificaciones de Azure Service Health",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
"severity": "Medio",
- "text": "Implemente SSO en aplicaciones SAP SaaS como SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics y SAP C4C con Azure AD mediante SAML.",
- "waf": "Seguridad"
+ "text": "Configure el registro de Azure VMware Solution para que se envíe a una cuenta de Azure Storage o Azure EventHub para su procesamiento",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
- "severity": "Medio",
- "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI mediante SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Si se requiere una visión profunda de VMware vSphere: ¿Se utiliza vRealize Operations o vRealize Network Insights en la solución?",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
- "service": "SAP",
- "severity": "Medio",
- "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI mediante SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Asegúrese de que la directiva de almacenamiento de vSAN para las máquinas virtuales NO sea la directiva de almacenamiento predeterminada, ya que esta directiva aplica el aprovisionamiento grueso",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
"severity": "Medio",
- "text": "Puede implementar SSO en la GUI de SAP mediante SAP NetWeaver SSO o una solución de partner.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "Seguridad"
+ "text": "Asegúrese de que las bibliotecas de contenido de vSphere no se coloquen en vSAN, ya que vSAN es un recurso finito",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
"severity": "Medio",
- "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere el servidor de inicio de sesión seguro de SAP, que es un componente de la solución SSO de SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
- "waf": "Seguridad"
+ "text": "Asegúrese de que los repositorios de datos de la solución de copia de seguridad se almacenen fuera del almacenamiento de vSAN. Ya sea en Azure nativo o en un almacén de datos respaldado por un grupo de discos",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
"severity": "Medio",
- "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere el servidor de inicio de sesión seguro de SAP, que es un componente de la solución SSO de SAP.",
- "waf": "Seguridad"
+ "text": "Asegúrese de que las cargas de trabajo que se ejecutan en Azure VMware Solution se administran de forma híbrida mediante Azure Arc para servidores (Arc para Azure VMware Solution está en versión preliminar)",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"severity": "Medio",
- "text": "Implemente el inicio de sesión único mediante OAuth para SAP NetWeaver a fin de permitir que aplicaciones personalizadas o de terceros accedan a los servicios OData de SAP NetWeaver.",
- "waf": "Seguridad"
+ "text": "Asegúrese de que las cargas de trabajo que se ejecutan en Azure VMware Solution se supervisan mediante Azure Log Analytics y Azure Monitor",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
"severity": "Medio",
- "text": "Implementación de SSO en SAP HANA",
- "waf": "Seguridad"
+ "text": "Inclusión de cargas de trabajo que se ejecutan en Azure VMware Solution en las herramientas de administración de actualizaciones existentes o en Azure Update Management",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
"severity": "Medio",
- "text": "Considere Azure AD como un proveedor de identidades para sistemas SAP hospedados en RISE. Para obtener más información, consulte Integración del servicio con Azure AD.",
- "waf": "Seguridad"
+ "text": "Uso de Azure Policy para incorporar cargas de trabajo de Azure VMware Solution en las soluciones de administración, supervisión y seguridad de Azure",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
- "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
"severity": "Medio",
- "text": "En el caso de las aplicaciones que acceden a SAP, es posible que desee utilizar la propagación de entidades de seguridad para establecer el inicio de sesión único.",
+ "text": "Asegúrese de que las cargas de trabajo que se ejecutan en Azure VMware Solution se incorporan a Microsoft Defender for Cloud",
"waf": "Seguridad"
},
{
- "checklist": "SAP Checklist",
- "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
"severity": "Medio",
- "text": "Si usa servicios BTP de SAP o soluciones SaaS que requieren SAP Identity Authentication Service (IAS), considere la posibilidad de implementar SSO entre SAP Cloud Identity Authentication Services y Azure AD para acceder a esos servicios de SAP. Esta integración permite a SAP IAS actuar como proveedor de identidades de proxy y reenvía las solicitudes de autenticación a Azure AD como almacén de usuarios central y proveedor de identidades.",
- "waf": "Seguridad"
+ "text": "Asegúrese de que las copias de seguridad no se almacenen en vSAN, ya que vSAN es un recurso finito",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
"severity": "Medio",
- "text": "Implementación de SSO en SAP BTP",
- "waf": "Seguridad"
+ "text": "¿Se han considerado todas las soluciones de recuperación ante desastres y se ha decidido por la mejor solución para su negocio? [SRM/JetStream/Zerto/Veeam/...]",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
"severity": "Medio",
- "text": "Si usa SAP SuccessFactors, considere la posibilidad de usar el aprovisionamiento automatizado de usuarios de Azure AD. Con esta integración, a medida que agrega nuevos empleados a SAP SuccessFactors, puede crear automáticamente sus cuentas de usuario en Azure AD. Opcionalmente, puede crear cuentas de usuario en Microsoft 365 u otras aplicaciones SaaS compatibles con Azure AD. Utilice la escritura diferida de la dirección de correo electrónico en SAP SuccessFactors.",
- "waf": "Seguridad"
+ "text": "Uso de Azure Site Recovery cuando la tecnología de recuperación ante desastres sea IaaS nativa de Azure",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
- "service": "SAP",
- "severity": "Medio",
- "text": "aplicar las directivas de grupo de administración existentes a las suscripciones de SAP",
- "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "waf": "Operaciones"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
- "severity": "Alto",
- "text": "Integre aplicaciones estrechamente acopladas en la misma suscripción de SAP para evitar una complejidad adicional de enrutamiento y administración",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "waf": "Operaciones"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
- "severity": "Alto",
- "text": "Aprovechar la suscripción como unidad de escalado y escalar nuestros recursos, considere implementar la suscripción por entorno, por ejemplo. Sandbox, no-prod, prod ",
- "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "waf": "Operaciones"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
"severity": "Alto",
- "text": "Garantizar el aumento de la cuota como parte del aprovisionamiento de suscripciones (por ejemplo, el total de núcleos de máquina virtual disponibles dentro de una suscripción)",
- "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "waf": "Operaciones"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
- "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
- "service": "SAP",
- "severity": "Bajo",
- "text": "La API de cuota es una API de REST que se puede usar para ver y administrar las cuotas de los servicios de Azure. Considere usarlo si es necesario.",
- "waf": "Operaciones"
+ "text": "Utilice planes de recuperación automatizados con cualquiera de las soluciones ante desastres, evite las tareas manuales tanto como sea posible",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
- "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
- "service": "SAP",
- "severity": "Alto",
- "text": "Si realiza la implementación en una zona de disponibilidad, asegúrese de que la implementación de la zona de la máquina virtual esté disponible una vez que se haya aprobado la cuota. Envíe una solicitud de soporte técnico con la suscripción, la serie de máquinas virtuales, el número de CPU y la zona de disponibilidad necesarias.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Usar el par de regiones geopolíticas como entorno secundario de recuperación ante desastres",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
"severity": "Alto",
- "text": "Asegúrese de que los servicios y funciones requeridos estén disponibles dentro de las regiones de implementación elegidas, por ejemplo. ANF, Zona, etc.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
- "waf": "Operaciones"
+ "text": "Utilice 2 espacios de direcciones diferentes entre las regiones, por ejemplo: 10.0.0.0/16 y 192.168.0.0/16 para las diferentes regiones",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"severity": "Medio",
- "text": "Aproveche la etiqueta de recurso de Azure para la categorización de costos y la agrupación de recursos (facturación, departamento (o unidad de negocio), entorno (producción, fase, desarrollo), nivel (nivel web, nivel de aplicación), propietario de la aplicación, ProjectName)",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Operaciones"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
- "severity": "Alto",
- "text": "Ayude a proteger la base de datos de HANA mediante el servicio Azure Backup.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "text": "¿Se usará Global Reach de ExpressRoute para la conectividad entre las nubes privadas de Azure VMware Solution principal y secundaria, o el enrutamiento se realiza a través de aplicaciones virtuales de red?",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"severity": "Medio",
- "text": "Si implementa Azure NetApp Files para la base de datos HANA, Oracle o DB2, use la herramienta Azure Application Consistent Snapshot (AzAcSnap) para tomar instantáneas coherentes con la aplicación. AzAcSnap también es compatible con las bases de datos de Oracle. Considere la posibilidad de usar AzAcSnap en una máquina virtual central en lugar de en máquinas virtuales individuales.",
+ "text": "¿Se han considerado todas las soluciones de copia de seguridad y se ha decidido por la mejor solución para su negocio? [ MABS/CommVault/Metallic.io/Veeam/ . ]",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
- "severity": "Alto",
- "text": "Asegúrese de que la zona horaria coincida entre el sistema operativo y el sistema SAP.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
+ "severity": "Medio",
+ "text": "Implemente la solución de copia de seguridad en la misma región que la nube privada de Azure VMware Solution",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
"severity": "Medio",
- "text": "No agrupe diferentes servicios de aplicaciones en el mismo clúster. Por ejemplo, no combine DRBD y clústeres de servicios centrales en el mismo clúster. Sin embargo, puede usar el mismo clúster de Pacemaker para administrar aproximadamente cinco servicios centrales diferentes (clúster de varios SID).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "text": "Implementación de la solución de copia de seguridad fuera de vSan, en componentes nativos de Azure",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
- "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
"severity": "Bajo",
- "text": "Considere la posibilidad de ejecutar sistemas de desarrollo y pruebas en un modelo de repetición para ahorrar y optimizar los costos de ejecución de Azure.",
- "waf": "Costar"
+ "text": "¿Existe un proceso para solicitar una restauración de los componentes de VMware administrados por la plataforma Azure?",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
- "link": "https://learn.microsoft.com/azure/lighthouse/overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Si se asocia con los clientes mediante la administración de sus propiedades de SAP, considere la posibilidad de usar Azure Lighthouse. Azure Lighthouse permite a los proveedores de servicios administrados usar los servicios de identidad nativos de Azure para autenticarse en el entorno de los clientes. Pone el control en manos de los clientes, ya que pueden revocar el acceso en cualquier momento y auditar las acciones de los proveedores de servicios.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "En el caso de las implementaciones manuales, se deben documentar todas las configuraciones e implementaciones",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
- "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use Azure Update Manager para comprobar el estado de las actualizaciones disponibles para una sola máquina virtual o varias máquinas virtuales y considere la posibilidad de programar revisiones periódicas.",
- "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "En el caso de las implementaciones manuales, considere la posibilidad de implementar bloqueos de recursos para evitar acciones accidentales en la nube privada de Azure VMware Solution",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
"severity": "Bajo",
- "text": "Optimice y gestione las operaciones de SAP Basis mediante SAP Landscape Management (LaMa). Use el conector de SAP LaMa para Azure para reubicar, copiar, clonar y actualizar sistemas SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
+ "text": "Para implementaciones automatizadas, implemente una nube privada mínima y escale según sea necesario",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
- "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use Azure Monitor para soluciones SAP para supervisar las cargas de trabajo de SAP (SAP HANA, clústeres de SUSE de alta disponibilidad y sistemas SQL) en Azure. Considere la posibilidad de complementar las soluciones de Azure Monitor para SAP con SAP Solution Manager.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "En el caso de las implementaciones automatizadas, solicite o reserve una cuota antes de iniciar la implementación",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
- "service": "SAP",
- "severity": "Alto",
- "text": "Ejecute una comprobación de extensión de máquina virtual para SAP. VM Extension for SAP usa la identidad administrada asignada de una máquina virtual (VM) para acceder a los datos de configuración y supervisión de VM. La comprobación garantiza que todas las métricas de rendimiento de la aplicación SAP proceden de la extensión de Azure para SAP subyacente.",
- "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "En el caso de la implementación automatizada, asegúrese de que se crean bloqueos de recursos relevantes a través de la automatización o a través de Azure Policy para una gobernanza adecuada",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use Azure Policy para el control de acceso y los informes de cumplimiento. Azure Policy proporciona la capacidad de aplicar la configuración de toda la organización para garantizar el cumplimiento coherente de las directivas y la detección rápida de infracciones. ",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Implemente nombres comprensibles para las claves de autorización ExR para permitir una fácil identificación del propósito y uso de las claves.",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use el Monitor de conexión en Azure Network Watcher para supervisar las métricas de latencia de las bases de datos y los servidores de aplicaciones de SAP. O bien, recopile y muestre medidas de latencia de red mediante Azure Monitor.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Uso de Key Vault para almacenar secretos y claves de autorización cuando se usan principios de servicio independientes para implementar Azure VMware Solution y ExpressRoute",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "73686af4-6791-4f89-95ad-a43324e13811",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
- "service": "SAP",
- "severity": "Medio",
- "text": "Realice una comprobación de calidad de SAP HANA en la infraestructura de Azure aprovisionada para comprobar que las máquinas virtuales aprovisionadas cumplen con los procedimientos recomendados de SAP HANA en Azure.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Defina dependencias de recursos para serializar acciones en IaC cuando sea necesario implementar muchos recursos en Azure VMware Solution, ya que Azure VMware Solution solo admite un número limitado de operaciones paralelas.",
"waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
- "severity": "Alto",
- "text": "Para cada suscripción de Azure, ejecute una prueba de latencia en las zonas de disponibilidad de Azure antes de la implementación zonal para elegir zonas de baja latencia para la implementación de SAP en Azure.",
- "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
+ "severity": "Bajo",
+ "text": "Al realizar la configuración automatizada de segmentos de NSX-T con una única puerta de enlace de nivel 1, use las API de Azure Portal en lugar de las API de NSX-Manager",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
"severity": "Medio",
- "text": "Ejecute el informe de resistencia para asegurarse de que la configuración de toda la infraestructura de Azure aprovisionada (proceso, base de datos, redes, almacenamiento, Site Recovery) cumple con la configuración definida por Cloud Adaption Framework para Azure.",
- "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
- "waf": "Fiabilidad"
+ "text": "Si tiene la intención de usar el escalado horizontal automatizado, asegúrese de solicitar una cuota suficiente de Azure VMware Solution para las suscripciones que ejecutan Azure VMware Solution",
+ "waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
- "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
"severity": "Medio",
- "text": "Implemente la protección contra amenazas mediante la solución Microsoft Sentinel para SAP. Utilice esta solución para supervisar sus sistemas SAP y detectar amenazas sofisticadas en toda la lógica empresarial y las capas de aplicación.",
- "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
- "waf": "Seguridad"
+ "text": "Cuando tenga la intención de usar la reducción horizontal automatizada, asegúrese de tener en cuenta los requisitos de la directiva de almacenamiento antes de realizar dicha acción",
+ "waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
"severity": "Medio",
- "text": "El etiquetado de Azure se puede aprovechar para agrupar y realizar un seguimiento lógico de los recursos, automatizar sus implementaciones y, lo que es más importante, proporcionar visibilidad de los costos incurridos.",
- "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "waf": "Operaciones"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Use la supervisión de latencia entre máquinas virtuales para aplicaciones sensibles a la latencia.",
+ "text": "Las operaciones de escalado siempre deben serializarse dentro de un único SDDC, ya que solo se puede realizar una operación de escalado a la vez (incluso cuando se utilizan varios clústeres)",
"waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "Fiabilidad"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
"severity": "Medio",
- "text": "Excluya todos los sistemas de archivos de bases de datos y programas ejecutables de los análisis antivirus. Incluirlos podría dar lugar a problemas de rendimiento. Consulte con los proveedores de bases de datos para obtener detalles prescriptivos sobre la lista de exclusión. Por ejemplo, Oracle recomienda excluir /oracle//sapdata de los análisis antivirus.",
- "waf": "Rendimiento"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "c027f893-f404-41a9-b33d-39d625a14964",
- "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Considere la posibilidad de recopilar estadísticas de base de datos completas para bases de datos que no son de HANA después de la migración. Por ejemplo, implemente la nota de SAP 1020260 - Entrega de estadísticas de Oracle.",
+ "text": "Considerar y validar las operaciones de escalado en soluciones de terceros utilizadas en la arquitectura (compatibles o no)",
"waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
"severity": "Medio",
- "text": "Considere la posibilidad de usar Oracle Automatic Storage Management (ASM) para todas las implementaciones de Oracle que usan SAP en Azure.",
- "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "text": "Defina y aplique límites máximos de escalado vertical y horizontal para su entorno en las automatizaciones",
"waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
"severity": "Medio",
- "text": "En el caso de SAP en Azure que ejecuta Oracle, una colección de scripts SQL puede ayudarle a diagnosticar problemas de rendimiento. Los informes de repositorio automático de cargas de trabajo (AWR) contienen información valiosa para diagnosticar problemas en el sistema Oracle. Le recomendamos que ejecute un informe de AWR durante varias sesiones y elija las horas punta para él, a fin de garantizar una amplia cobertura del análisis.",
- "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
- "waf": "Rendimiento"
+ "text": "Implemente reglas de supervisión para supervisar las operaciones de escalado automatizadas y supervisar el éxito y el fracaso para permitir respuestas adecuadas (automatizadas)",
+ "waf": "Operaciones"
},
{
- "checklist": "SAP Checklist",
- "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "Alto",
- "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones SAP.",
- "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "waf": "Operaciones"
+ "text": "Al usar MON, tenga en cuenta los límites de las máquinas virtuales configuradas simultáneamente (límite de MON para HCX [400 - estándar, 1000 - dispositivo más grande])",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Para la entrega segura de aplicaciones HTTP/S, use Application Gateway v2 y asegúrese de que la protección y las directivas de WAF están habilitadas.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Al usar MON, no puede habilitar MON en más de 100 extensiones de red",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
"severity": "Medio",
- "text": "Si el DNS o el nombre virtual de la máquina virtual no se cambia durante la migración a Azure, el DNS en segundo plano y los nombres virtuales conectan muchas interfaces del sistema en el entorno de SAP, y los clientes solo conocen a veces las interfaces que los desarrolladores definen a lo largo del tiempo. Los desafíos de conexión surgen entre varios sistemas cuando los nombres virtuales o DNS cambian después de las migraciones, y se recomienda conservar los alias DNS para evitar este tipo de dificultades.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operaciones"
+ "text": "Si utiliza una conexión VPN para migraciones, ajuste el tamaño de su MTU en consecuencia.",
+ "waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
"severity": "Medio",
- "text": "Utilice diferentes zonas DNS para distinguir cada entorno (espacio aislado, desarrollo, preproducción y producción) entre sí. La excepción es para las implementaciones de SAP con su propia red virtual; en este caso, es posible que las zonas DNS privadas no sean necesarias.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operaciones"
+ "text": "En el caso de las regiones de baja conectividad que se conectan a Azure (500 Mbps o menos), considere la posibilidad de implementar el dispositivo de optimización de WAN de HCX",
+ "waf": "Rendimiento"
},
{
- "checklist": "SAP Checklist",
- "guid": "a3592829-e6e2-4061-9368-6af46791f893",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
"severity": "Medio",
- "text": "El emparejamiento de red virtual local y global proporciona conectividad y son los enfoques preferidos para garantizar la conectividad entre las zonas de aterrizaje para las implementaciones de SAP en varias regiones de Azure",
- "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
+ "text": "Asegúrese de que las migraciones se inicien desde el dispositivo local y NO desde el dispositivo en la nube (NO realice una migración inversa)",
"waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
- "service": "SAP",
- "severity": "Alto",
- "text": "No se admite la implementación de ninguna aplicación virtual de red entre la aplicación SAP y el servidor de base de datos SAP",
- "training": "https://me.sap.com/notes/2731110",
- "waf": "Rendimiento"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
"severity": "Medio",
- "text": "Use Virtual WAN para implementaciones de Azure en redes nuevas, grandes o globales en las que necesite conectividad de tránsito global entre regiones de Azure y ubicaciones locales. Con este enfoque, no tendrá que configurar manualmente el enrutamiento transitivo para las redes de Azure y puede seguir un estándar para las implementaciones de SAP en Azure.",
- "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "waf": "Operaciones"
+ "text": "Cuando se usa Azure NetApp Files para ampliar el almacenamiento de Azure VMware Solution, considere la posibilidad de usarlo como almacén de datos de VMware en lugar de adjuntarlo directamente a una máquina virtual.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"severity": "Medio",
- "text": "Considere la posibilidad de implementar aplicaciones virtuales de red (NVA) entre regiones solo si se usan aplicaciones virtuales de red de asociados. Las aplicaciones virtuales de red entre regiones o redes virtuales no son necesarias si hay aplicaciones virtuales de red nativas. Al implementar tecnologías de redes de asociados y aplicaciones virtuales de red, siga las instrucciones del proveedor para comprobar las configuraciones conflictivas con las redes de Azure.",
- "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
- "waf": "Operaciones"
+ "text": "Asegúrese de que se usa una puerta de enlace de ExpressRoute dedicada para soluciones de almacenamiento de datos externos",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
"severity": "Medio",
- "text": "Virtual WAN administra la conectividad entre redes virtuales de radio para topologías basadas en WAN virtuales (sin necesidad de configurar el enrutamiento definido por el usuario [UDR] o NVA), y el rendimiento máximo de red para el tráfico de red virtual a red virtual en el mismo centro virtual es de 50 gigabits por segundo. Si es necesario, las zonas de aterrizaje de SAP pueden usar el emparejamiento de red virtual para conectarse a otras zonas de aterrizaje y superar esta limitación de ancho de banda.",
- "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
- "waf": "Operaciones"
+ "text": "Asegúrese de que FastPath está habilitado en la puerta de enlace de ExpressRoute que se usa para las soluciones de almacenamiento de datos externos",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "82734c88-6ba2-4802-8459-11475e39e530",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
"severity": "Alto",
- "text": "No se recomienda la asignación de direcciones IP públicas a la máquina virtual que ejecuta SAP Workload.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "Seguridad"
+ "text": "Si utiliza un clúster ampliado, asegúrese de que la solución de recuperación ante desastres seleccionada sea compatible con el proveedor",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
"severity": "Alto",
- "text": "Considere la posibilidad de reservar la dirección IP en el lado de la recuperación ante desastres al configurar ASR",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Operaciones"
+ "text": "Si utiliza un clúster ampliado, asegúrese de que el Acuerdo de Nivel de Servicio proporcionado cumpla sus requisitos",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
"severity": "Alto",
- "text": "Evite el uso de intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "Operaciones"
+ "text": "Si usa un clúster extendido, asegúrese de que ambos circuitos ExpressRoute están conectados al centro de conectividad.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
- "service": "SAP",
- "severity": "Medio",
- "text": "Aunque Azure le ayuda a crear varias subredes delegadas en una red virtual, solo puede existir una subred delegada en una red virtual para Azure NetApp Files. Se producirá un error al intentar crear un nuevo volumen si se utiliza más de una subred delegada para Azure NetApp Files.",
- "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Si usa un clúster extendido, asegúrese de que ambos circuitos ExpressRoute tengan habilitado GlobalReach.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use Azure Firewall para controlar el tráfico saliente de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado del tráfico Este/Oeste (si la organización lo requiere)",
- "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Haga que la configuración de tolerancia ante desastres del sitio se considere y cambie correctamente para su negocio si es necesario.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "SAP Checklist",
- "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
- "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
- "service": "SAP",
- "severity": "Medio",
- "text": "Application Gateway y Web Application Firewall tienen limitaciones cuando Application Gateway actúa como proxy inverso para aplicaciones web de SAP, como se muestra en la comparación entre Application Gateway, SAP Web Dispatcher y otros servicios de terceros.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
+ "text": "Reglas de recopilación de datos en Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
- "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
- "waf": "Seguridad"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Aproveche las directivas de Web Application Firewall en Azure Front Door cuando use Azure Front Door y Application Gateway para proteger las aplicaciones HTTP/S. Bloquee Application Gateway para recibir tráfico solo de Azure Front Door.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
+ "text": "Comprobar las instancias de copia de seguridad con la fuente de datos subyacente no encontrada",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ada4332-4e13-4811-9231-81aa41742694",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Utilice un firewall de aplicaciones web para analizar su tráfico cuando esté expuesto a Internet. Otra opción es usarlo con el equilibrador de carga o con recursos que tengan funcionalidades de firewall integradas, como Application Gateway o soluciones de terceros.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
+ "text": "Eliminar o archivar servicios no asociados (discos, NIC, direcciones IP, etc.)",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Use Virtual WAN para implementaciones de Azure en redes nuevas, grandes o globales en las que necesite conectividad de tránsito global entre regiones de Azure y ubicaciones locales. Con este enfoque, no tendrá que configurar manualmente el enrutamiento transitivo para las redes de Azure y puede seguir un estándar para las implementaciones de SAP en Azure.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
+ "text": "Considere un buen equilibrio entre el almacenamiento de recuperación del sitio y la copia de seguridad para aplicaciones que no son críticas",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "SAP",
- "severity": "Medio",
- "text": "Para evitar la pérdida de datos, use Azure Private Link para acceder de forma segura a los recursos de plataforma como servicio, como Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, etc. El punto de conexión privado de Azure también puede ayudar a proteger el tráfico entre redes virtuales y servicios como Azure Storage, Azure Backup, etc. El tráfico entre la red virtual y el servicio habilitado para punto de conexión privado viaja a través de la red global de Microsoft, lo que impide su exposición a la red pública de Internet.",
- "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
+ "text": "Compruebe las oportunidades de gasto y ahorro entre las 40 áreas de trabajo de Log Analytics diferentes: use diferentes retenciones y recopilación de datos para áreas de trabajo que no sean de producción: cree un límite diario para el reconocimiento y el tamaño de los niveles: si establece un límite diario, además de crear una alerta cuando se alcance el límite, asegúrese de crear también una regla de alerta para que se le notifique cuando se alcance algún porcentaje (90 %, por ejemplo). - Considere la posibilidad de transformar el espacio de trabajo si es posible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
- "service": "SAP",
- "severity": "Alto",
- "text": "Asegúrese de que las redes aceleradas de Azure están habilitadas en las máquinas virtuales que se usan en las capas de aplicación SAP y DBMS.",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
+ "text": "Aplique una política de purga de registros y automatización (si es necesario, los registros se pueden mover al almacenamiento en frío)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Asegúrese de que las implementaciones internas de Azure Load Balancer están configuradas para usar Direct Server Return (DSR). Esta configuración (Habilitación de IP flotante) reducirá la latencia cuando se utilicen configuraciones internas del equilibrador de carga para configuraciones de alta disponibilidad en la capa DBMS.",
- "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
+ "text": "Compruebe que los discos son realmente necesarios, si no: eliminar. Si son necesarios, busque niveles de almacenamiento más bajos o use una copia de seguridad:",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "6791f893-5ada-4433-84e1-3811523181aa",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "SAP",
- "severity": "Medio",
- "text": "Puede usar reglas de grupo de seguridad de aplicaciones (ASG) y NSG para definir listas de control de acceso de seguridad de red entre la aplicación SAP y las capas DBMS. Los ASG agrupan las máquinas virtuales para ayudar a administrar su seguridad.",
- "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
+ "text": "Considere la posibilidad de mover el almacenamiento no utilizado al nivel inferior, con reglas personalizadas: https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "Alto",
- "text": "No se admite la colocación de la capa de aplicación de SAP y DBMS de SAP en diferentes redes virtuales de Azure que no están emparejadas.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
+ "text": "Asegúrese de que el asesor está configurado para el tamaño correcto de la máquina virtual ",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "Medio",
- "text": "Para obtener una latencia de red óptima con aplicaciones SAP, considere la posibilidad de usar grupos de selección de ubicación por proximidad de Azure.",
- "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "description": "comprobando la búsqueda de las licencias de categoría de contador en el análisis de costes",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
+ "text": "ejecutar el script en todas las máquinas virtuales de Windows https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server: considere la posibilidad de implementar una directiva si las máquinas virtuales de Windows se crean con frecuencia",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "Alto",
- "text": "NO se admite en absoluto la ejecución de una capa de servidor de aplicaciones de SAP y una capa de DBMS divididas entre el entorno local y Azure. Ambas capas deben residir completamente en el entorno local o en Azure.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
+ "text": " esto también se puede poner bajo AHUB si ya tiene licencias https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "Alto",
- "text": "No se recomienda hospedar el sistema de administración de bases de datos (DBMS) y las capas de aplicación de los sistemas SAP en diferentes redes virtuales y conectarlas con el emparejamiento de redes virtuales debido a los costos sustanciales que puede producir un tráfico de red excesivo entre las capas. Se recomienda el uso de subredes dentro de la red virtual de Azure para separar la capa de aplicación de SAP y la capa de DBMS.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
+ "text": "Consolide familias de máquinas virtuales reservadas con la opción de flexibilidad (no más de 4-5 familias)",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
"waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "402a9846-d515-4061-aff8-cd30088693fa",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
- "service": "SAP",
- "severity": "Alto",
- "text": "Si utiliza Load Balancer con sistemas operativos invitados Linux, compruebe que el parámetro de red de Linux net.ipv4.tcp_timestamps esté establecido en 0.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
+ "text": "Uso de Azure Reserved Instances: esta característica le permite reservar máquinas virtuales durante un período de 1 o 3 años, lo que proporciona un importante ahorro de costos en comparación con los precios de pago por uso.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
- "service": "SAP",
- "severity": "Medio",
- "text": "En el caso de las implementaciones de SAP RISE/ECS, el emparejamiento virtual es la forma preferida de establecer la conectividad con el entorno de Azure existente del cliente. Tanto la red virtual de SAP como las redes virtuales del cliente están protegidas con grupos de seguridad de red (NSG), lo que permite la comunicación en los puertos de SAP y de base de datos a través del emparejamiento de redes virtuales",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
+ "text": "Solo se pueden reservar discos más grandes => 1 TiB -",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
- "severity": "Alto",
- "text": "Revise las copias de seguridad de bases de datos de SAP HANA para máquinas virtuales de Azure.",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
+ "text": "Después de la optimización del tamaño correcto",
"waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise la supervisión integrada de Site Recovery, si se usa para SAP.",
+ "arm-service": "Microsoft.Sql/servers",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
+ "text": "Compruebe si corresponde y aplique la política/cambio https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
"waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
- "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
- "service": "SAP",
- "severity": "Alto",
- "text": "Revise la guía Supervisión del entorno del sistema SAP HANA.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
+ "text": "El descuento de la parte de la licencia VM + (ahub + 3YRI) es de alrededor del 70% de descuento",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise las estrategias de copia de seguridad de Oracle Database en máquinas virtuales Linux de Azure.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
+ "text": "Considere la posibilidad de utilizar un VMSS para satisfacer la demanda en lugar de un tamaño fijo",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
- "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise el uso de Azure Blob Storage con SQL Server 2016.",
- "waf": "Operaciones"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "AKS",
+ "text": "Use el escalador automático de AKS para que coincida con el uso de los clústeres (asegúrese de que los requisitos de los pods coincidan con el escalador)",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise el uso de Copia de seguridad automatizada v2 para máquinas virtuales de Azure.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
+ "text": "Mover los puntos de recuperación al archivo de almacén cuando corresponda (Validar)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
- "service": "SAP",
- "severity": "Alto",
- "text": "Habilitación del acelerador de escritura para la serie M cuando se utilizan discos premium (V1)",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Databricks/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
+ "text": "Considere la posibilidad de usar máquinas virtuales de acceso puntual con reserva siempre que sea posible. Considere la posibilidad de la terminación automática de clústeres.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "service": "SAP",
- "severity": "Medio",
- "text": "Pruebe la latencia de la zona de disponibilidad.",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
+ "text": "Funciones - Reutilizar conexiones",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
- "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
- "service": "SAP",
- "severity": "Medio",
- "text": "Active SAP EarlyWatch Alert para todos los componentes de SAP.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
+ "text": "Funciones: almacenar datos en caché localmente",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise la latencia del servidor de aplicaciones SAP al servidor de bases de datos mediante el informe ABAPMeter de SAP /SSA/CAT.",
- "training": "https://me.sap.com/notes/0002879613",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
+ "text": "Funciones - Arranques en frío: utilice la funcionalidad 'Ejecutar desde el paquete'. De esta manera, el código se descarga como un único archivo zip. Esto puede, por ejemplo, resultar en mejoras significativas con las funciones de Javascript, que tienen muchos módulos de nodos. Utilice herramientas específicas del lenguaje para reducir el tamaño del paquete, por ejemplo, aplicaciones Javascript que sacuden el árbol.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise la supervisión del rendimiento de SQL Server mediante CCMS.",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
+ "text": "Funciones - Mantén tus funciones calientes",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
- "link": "https://me.sap.com/notes/500235",
- "service": "SAP",
- "severity": "Medio",
- "text": "Pruebe la latencia de red entre las máquinas virtuales de la capa de aplicación de SAP y las máquinas virtuales de DBMS (NIPING).",
- "training": "https://me.sap.com/notes/1100926/E",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
+ "text": "Al usar el escalado automático con diferentes funciones, es posible que haya uno que controle todo el escalado automático para todos los recursos: considere la posibilidad de moverlo a un plan de consumo independiente (y considere un plan superior para la CPU)",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
- "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise las alertas de SAP HANA Studio.",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
+ "text": "Las aplicaciones de funciones de un plan determinado se escalan juntas, por lo que cualquier problema con el escalado puede afectar a todas las aplicaciones del plan.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
- "link": "https://me.sap.com/notes/1969700",
- "service": "SAP",
- "severity": "Medio",
- "text": "Realice comprobaciones de estado de SAP HANA mediante HANA_Configuration_Minichecks.",
- "waf": "Rendimiento"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
+ "text": "¿Se me factura por el \"tiempo de espera\"? Esta pregunta se suele formular en el contexto de una función de C# que realiza una operación asincrónica y espera el resultado, por ejemplo, await Task.Delay(1000) o await client. GetAsync('http://google.com'). La respuesta es sí: el segundo cálculo de GB se basa en la hora de inicio y finalización de la función y el uso de memoria durante ese período. Lo que realmente sucede durante ese tiempo en términos de actividad de la CPU no se tiene en cuenta en el cálculo. Una excepción a esta regla es si está utilizando funciones duraderas. No se le facturará por el tiempo empleado en las esperas en las funciones de orquestador.aplique técnicas de modelado de la demanda siempre que sea posible (¿entornos de desarrollo?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
- "severity": "Medio",
- "text": "Si ejecuta máquinas virtuales Windows y Linux en Azure, en el entorno local o en otros entornos en la nube, puede usar el Centro de administración de actualizaciones de Automatización de Azure para administrar las actualizaciones del sistema operativo, incluidas las revisiones de seguridad.",
- "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "waf": "Seguridad"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
+ "text": "Frontdoor: desactivar la página principal predeterminadaEn la configuración de la aplicación de la aplicación, establezca AzureWebJobsDisableHomepage en true. Esto devolverá un 204 (sin contenido) al PoP para que solo se devuelvan los datos del encabezado.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "08951710-79a2-492a-adbc-06d7a401545b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
- "severity": "Medio",
- "text": "Revise de forma rutinaria las notas de seguridad de SAP OSS, ya que SAP publica parches de seguridad muy críticos, o revisiones, que requieren una acción inmediata para proteger sus sistemas SAP.",
- "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
- "waf": "Seguridad"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
+ "text": "Frontdoor: ruta a algo que no devuelve nada. Configure una función, un proxy de función o agregue una ruta en la aplicación web que devuelva 200 (correctamente) y envíe contenido mínimo o nulo. La ventaja de esto es que podrá cerrar la sesión cuando se llame.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "Bajo",
- "text": "En el caso de SAP en SQL Server, puede deshabilitar la cuenta de administrador del sistema de SQL Server porque los sistemas SAP en SQL Server no usan la cuenta. Asegúrese de que otro usuario con derechos de administrador del sistema pueda acceder al servidor antes de deshabilitar la cuenta de administrador del sistema original.",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
+ "text": "Considere la posibilidad de archivar niveles para los datos menos utilizados",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "Alto",
- "text": "Deshabilite xp_cmdshell. La característica de SQL Server xp_cmdshell habilita un shell de comandos del sistema operativo interno de SQL Server. Es un riesgo potencial en las auditorías de seguridad.",
- "training": "https://me.sap.com/notes/3019299/E",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
+ "text": "Compruebe los tamaños de disco en los que el tamaño no coincida con el nivel (es decir, un disco de 513 GiB pagará un P30 (1 TiB) y considere la posibilidad de cambiar el tamaño",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "Alto",
- "text": "El cifrado de servidores de bases de datos de SAP HANA en Azure usa la tecnología de cifrado nativa de SAP HANA. Además, si usa SQL Server en Azure, use el cifrado de datos transparente (TDE) para proteger los datos y los archivos de registro y asegurarse de que las copias de seguridad también están cifradas.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
+ "text": "Considere la posibilidad de utilizar un SSD estándar en lugar de Premium o Ultra siempre que sea posible",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "SAP",
- "severity": "Medio",
- "text": "El cifrado de Azure Storage está habilitado para todas las cuentas de Azure Resource Manager y de almacenamiento clásico, y no se puede deshabilitar. Dado que los datos están cifrados de forma predeterminada, no es necesario modificar el código o las aplicaciones para usar el cifrado de Azure Storage.",
- "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
+ "text": "En el caso de las cuentas de almacenamiento, asegúrese de que el nivel elegido no suma cargos por transacción (puede ser más barato pasar al siguiente nivel)",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "SAP",
- "severity": "Alto",
- "text": "Uso de Azure Key Vault para almacenar los secretos y las credenciales",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
+ "text": "Para ASR, considere la posibilidad de usar discos SSD estándar si el RPO/RTO y el rendimiento de replicación lo permiten",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "SAP",
- "severity": "Medio",
- "text": "Se recomienda bloquear los recursos de Azure después de la implementación correcta para protegerse contra cambios no autorizados. También puede aplicar restricciones y reglas de LOCK por suscripción mediante directivas de Azure personalizadas (rol personalizado).",
- "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
+ "text": "Cuentas de almacenamiento: compruebe el nivel de acceso frecuente o GRS necesario",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "SAP",
- "severity": "Medio",
- "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención de los objetos eliminados.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
+ "text": "Discos: valide el uso de discos SSD Premium en todas partes: por ejemplo, los que no son de producción podrían cambiar a SSD estándar o SSD Premium bajo demanda ",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
- "service": "SAP",
- "severity": "Alto",
- "text": "En función de los requisitos existentes, controles normativos y de cumplimiento (internos y externos): determine qué directivas de Azure y el rol de RBAC de Azure son necesarios",
- "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
+ "text": "Cree presupuestos para administrar los costos y cree alertas que notifiquen automáticamente a las partes interesadas sobre anomalías en el gasto y riesgos de gasto excesivo.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "Alto",
- "text": "Al habilitar Microsoft Defender para punto de conexión en el entorno de SAP, se recomienda excluir los archivos de datos y registro en los servidores DBMS en lugar de dirigirse a todos los servidores. Siga las recomendaciones de su proveedor de DBMS al excluir archivos de destino.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
+ "text": "Exporte los datos de costos a una cuenta de almacenamiento para realizar análisis de datos adicionales.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
- "service": "SAP",
- "severity": "Alto",
- "text": "Delegue un rol personalizado de administrador de SAP con acceso Just-In-Time de Microsoft Defender for Cloud.",
- "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "waf": "Seguridad"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "Bajo",
- "text": "cifre los datos en tránsito integrando el producto de seguridad de terceros con comunicaciones de red seguras (SNC) para DIAG (SAP GUI), RFC y SPNEGO para HTTPS",
- "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
- "waf": "Seguridad"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
- "service": "SAP",
- "severity": "Medio",
- "text": "De forma predeterminada, utilice claves administradas por Microsoft para la funcionalidad de cifrado de entidad de seguridad y use claves administradas por el cliente cuando sea necesario.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
+ "text": "Controle los costos de un grupo de SQL dedicado pausando el recurso cuando no esté en uso.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use una instancia de Azure Key Vault por aplicación, por entorno, por región.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
+ "text": "Habilite la función de pausa automática de Apache Spark sin servidor y establezca el valor de tiempo de espera en consecuencia.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
- "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
- "service": "SAP",
- "severity": "Alto",
- "text": "Para controlar y administrar claves y secretos de cifrado de disco para sistemas operativos Windows y Windows que no son de HANA, use Azure Key Vault. SAP HANA no es compatible con Azure Key Vault, por lo que debe usar métodos alternativos como SAP ABAP o claves SSH.",
- "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
+ "text": "Cree varias definiciones de grupo de Apache Spark de varios tamaños.",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
- "service": "SAP",
- "severity": "Alto",
- "text": "Personalización de los roles de control de acceso basado en rol (RBAC) para SAP en suscripciones de Azure spoke para evitar cambios accidentales relacionados con la red",
- "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
+ "text": "Compre unidades de confirmación (SCU) de Azure Synapse durante un año con un plan de compra anticipada para ahorrar en los costos de Azure Synapse Analytics.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
- "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
- "service": "SAP",
- "severity": "Alto",
- "text": "Aísle las redes perimetrales y las aplicaciones virtuales de red del resto del patrimonio de SAP, configure Azure Private Link y administre y controle de forma segura los recursos de SAP en Azure",
- "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
+ "text": "Uso de máquinas virtuales de acceso puntual para trabajos interrumpibles: se trata de máquinas virtuales por las que se puede pujar y comprar a un precio reducido, lo que proporciona una solución rentable para cargas de trabajo no críticas.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
- "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Considere la posibilidad de usar el software antimalware de Microsoft en Azure para proteger las máquinas virtuales de archivos malintencionados, adware y otras amenazas.",
- "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
+ "text": "Ajustar el tamaño de todas las máquinas virtuales",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
- "service": "SAP",
- "severity": "Bajo",
- "text": "Para una protección aún más eficaz, considere la posibilidad de usar Microsoft Defender para punto de conexión.",
- "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
+ "text": "Intercambiar el tamaño de la máquina virtual con los tamaños normalizados y más recientes",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
- "severity": "Alto",
- "text": "Aísle los servidores de aplicaciones y bases de datos de SAP de Internet o de la red local pasando todo el tráfico a través de la red virtual del centro de conectividad, que está conectada a la red radial mediante el emparejamiento de red virtual. Las redes virtuales emparejadas garantizan que la solución de SAP en Azure esté aislada de la red pública de Internet.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "Ajustar el tamaño de las máquinas virtuales: comience con la supervisión del uso por debajo del 5 % y, a continuación, trabaje hasta el 40 %",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "Bajo",
- "text": "En el caso de las aplicaciones orientadas a Internet, como SAP Fiori, asegúrese de distribuir la carga según los requisitos de la aplicación mientras se mantienen los niveles de seguridad. Para la seguridad de nivel 7, puede usar un firewall de aplicaciones web (WAF) de terceros disponible en Azure Marketplace.",
- "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "La inclusión de una aplicación en contenedores puede mejorar la densidad de la máquina virtual y ahorrar dinero en su escalado",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Costar"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
- "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
- "service": "SAP",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
"severity": "Medio",
- "text": "Para habilitar la comunicación segura en las soluciones de Azure Monitor para SAP, puede optar por usar un certificado raíz o un certificado de servidor. Le recomendamos encarecidamente que utilice certificados raíz.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Seguridad"
- },
- {
- "checklist": "Device Provisioning Service Review",
- "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
- "service": "IoT Hub DPS",
- "severity": "Alto",
- "text": "Seleccione el plan de hospedaje de aplicaciones lógicas adecuado en función de los requisitos empresariales y de SLO",
+ "text": "Azure Spring Apps permite dos implementaciones para cada aplicación, de las cuales solo una recibe tráfico de producción. Puede lograr cero tiempo de inactividad con estrategias de implementación azul verde. La implementación azul verde solo está disponible en los niveles Estándar y Enterprise. Puede automatizar la implementación mediante CI/CD con acciones de ADO/GitHub",
"waf": "Fiabilidad"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "IoT Hub DPS",
- "severity": "Alto",
- "text": "Proteja las aplicaciones lógicas de errores de región con redundancia de zona y zonas de disponibilidad",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
+ "severity": "Medio",
+ "text": "Las instancias de Azure Spring Apps se pueden crear en varias regiones para las aplicaciones y el tráfico se puede enrutar mediante Traffic Manager o Front Door.",
"waf": "Fiabilidad"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "8aed4fbf-0830-4883-899d-222a154af478",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "IoT Hub DPS",
- "severity": "Alto",
- "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
+ "severity": "Medio",
+ "text": "En la región admitida, Azure Spring Apps se puede implementar como zona redundante, lo que significa que las instancias se distribuyen automáticamente entre las zonas de disponibilidad. Esta función solo está disponible en los niveles Standard y Enterprise.",
"waf": "Fiabilidad"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "IoT Hub DPS",
- "severity": "Alto",
- "text": "Si se implementa en un entorno aislado, use o migre a App Service Environment (ASE) v3",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
+ "severity": "Medio",
+ "text": "Usar más de 1 instancia de aplicación para las aplicaciones",
"waf": "Fiabilidad"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "IoT Hub DPS",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
"severity": "Medio",
- "text": "Aproveche Azure DevOps o GitHub para simplificar la CI/CD y proteger el código de la aplicación lógica",
- "waf": "Operaciones"
+ "text": "Supervise Azure Spring Apps con registros, métricas y seguimiento. Integre ASA con la información de las aplicaciones, realice un seguimiento de los errores y cree libros de trabajo.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
- "severity": "Alto",
- "text": "Seleccione el plan de hospedaje de aplicaciones lógicas adecuado en función de los requisitos empresariales y de SLO",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
+ "severity": "Medio",
+ "text": "Configuración del escalado automático en Spring Cloud Gateway",
"waf": "Fiabilidad"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
- "severity": "Alto",
- "text": "Proteja las aplicaciones lógicas de errores de región con redundancia de zona y zonas de disponibilidad",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
+ "severity": "Bajo",
+ "text": "Habilite el escalado automático para las aplicaciones con el consumo estándar y el plan dedicado.",
"waf": "Fiabilidad"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
- "severity": "Alto",
- "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
+ "severity": "Medio",
+ "text": "Use el plan Enterprise para obtener soporte comercial de Spring Boot para aplicaciones de misión crítica. Con otros niveles, obtienes soporte OSS.",
"waf": "Fiabilidad"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
- "severity": "Alto",
- "text": "Si se implementa en un entorno aislado, use o migre a App Service Environment (ASE) v3",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "Medio",
+ "text": "Implemente los recursos de conectividad de la zona de aterrizaje de Azure en varias regiones, de modo que pueda admitir rápidamente zonas de aterrizaje de aplicaciones de varias regiones y escenarios de recuperación ante desastres.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Fiabilidad"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "service": "Entra",
"severity": "Medio",
- "text": "Aproveche Azure DevOps o GitHub para simplificar la CI/CD y proteger el código de la aplicación lógica",
+ "text": "Use un inquilino de Entra para administrar los recursos de Azure, a menos que tenga un requisito normativo o empresarial claro para varios inquilinos.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "Operaciones"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
- "severity": "Medio",
- "text": "Aproveche el servidor flexible",
- "waf": "Fiabilidad"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Entra",
+ "severity": "Bajo",
+ "text": "Use el enfoque de automatización multiinquilino para administrar los inquilinos de identificador de Microsoft Entra.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
+ "waf": "Operaciones"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "Entra",
"severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad cuando corresponda regionalmente",
- "waf": "Fiabilidad"
+ "text": "Use Azure Lighthouse para la administración de varios inquilinos con los mismos identificadores.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
+ "waf": "Operaciones"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
- "severity": "Medio",
- "text": "Aproveche la replicación de entrada de datos para escenarios de recuperación ante desastres entre regiones",
- "waf": "Fiabilidad"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Si concede a un asociado acceso para administrar el inquilino, use Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
+ "waf": "Costar"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Aplicación de las instrucciones de la prueba comparativa de seguridad en la nube de Microsoft relacionadas con el almacenamiento",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
- "severity": "Medio",
- "text": "Tenga en cuenta la \"línea base de seguridad de Azure para el almacenamiento\"",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Aplique un modelo RBAC que se alinee con su modelo operativo en la nube. Ámbito y asignación entre grupos de administración y suscripciones.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "De forma predeterminada, Azure Storage tiene una dirección IP pública y es accesible desde Internet. Los puntos de conexión privados permiten exponer de forma segura Azure Storage solo a los recursos de proceso de Azure que necesitan acceso, lo que elimina la exposición a la Internet pública",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere la posibilidad de usar puntos de conexión privados para Azure Storage",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Utilice solo el tipo de autenticación Cuenta profesional o educativa para todos los tipos de cuenta. Evite usar la cuenta de Microsoft",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Las cuentas de almacenamiento recién creadas se crean mediante el modelo de implementación de ARM, de modo que RBAC, auditoría, etc. están habilitados. Asegúrese de que no hay cuentas de almacenamiento antiguas con el modelo de implementación clásica en una suscripción",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "Entra",
"severity": "Medio",
- "text": "Asegúrese de que las cuentas de almacenamiento más antiguas no usan el \"modelo de implementación clásica\"",
+ "text": "Utilice solo grupos para asignar permisos. Agregue grupos locales al grupo Solo ID de Entra si ya hay un sistema de administración de grupos en su lugar.",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Aproveche Microsoft Defender para obtener información sobre la actividad sospechosa y los errores de configuración.",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "service": "Entra",
"severity": "Alto",
- "text": "Habilitación de Microsoft Defender para todas las cuentas de almacenamiento",
+ "text": "Aplique directivas de acceso condicional de identificador de Microsoft Entra para cualquier usuario con derechos en entornos de Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "El mecanismo de eliminación temporal permite recuperar blobs eliminados accidentalmente.",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
- "severity": "Medio",
- "text": "Habilitación de la \"eliminación temporal\" para blobs",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Aplique la autenticación multifactor para cualquier usuario con derechos sobre los entornos de Azure.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere la posibilidad de deshabilitar de forma selectiva la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimina inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "Entra",
"severity": "Medio",
- "text": "Deshabilitación de la \"eliminación temporal\" de blobs",
+ "text": "Aplique la administración de identidades privilegiadas (PIM) de Microsoft Entra ID para establecer un acceso permanente cero y privilegios mínimos.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "La eliminación temporal de contenedores permite recuperar un contenedor después de que se haya eliminado, por ejemplo, recuperarse de una operación de eliminación accidental.",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Habilitación de la \"eliminación temporal\" para los contenedores",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Si planea cambiar de Servicios de dominio de Active Directory a Servicios de dominio Entra, evalúe la compatibilidad de todas las cargas de trabajo.",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere la posibilidad de deshabilitar de forma selectiva la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimina inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"severity": "Medio",
- "text": "Deshabilitación de la \"eliminación temporal\" para contenedores",
- "waf": "Seguridad"
+ "text": "Al usar Microsoft Entra Domain Services, use conjuntos de réplicas. Los conjuntos de réplicas mejorarán la resistencia del dominio administrado y le permitirán implementarlo en regiones adicionales. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Evita la eliminación accidental de una cuenta de almacenamiento, obligando al usuario a quitar primero el bloqueo de eliminación, antes de la eliminación",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Habilitación de bloqueos de recursos en cuentas de almacenamiento",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Integre los registros de identificador de Microsoft Entra con Azure Monitor central de la plataforma. Azure Monitor permite una única fuente de información sobre los datos de registro y supervisión en Azure, lo que proporciona a las organizaciones opciones nativas en la nube para cumplir los requisitos relacionados con la recopilación y retención de registros.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere la posibilidad de aplicar directivas de \"retención legal\" o \"retención basada en el tiempo\" para los blobs, de modo que sea imposible eliminar el blob, el contenedor o la cuenta de almacenamiento. Tenga en cuenta que 'imposible' en realidad significa 'imposible'; una vez que una cuenta de almacenamiento contiene un blob inmutable, la única manera de \"deshacerse\" de esa cuenta de almacenamiento es cancelando la suscripción de Azure.",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
+ "ammp": true,
+ "checklist": "Azure Landing Zone Review",
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "service": "Entra",
"severity": "Alto",
- "text": "Considere la posibilidad de blobs inmutables",
+ "text": "Implemente un acceso de emergencia o cuentas de emergencia para evitar el bloqueo de cuentas en todo el inquilino. MFA se activará de forma predeterminada para todos los usuarios en octubre de 2024. Recomendamos actualizar estas cuentas para usar la clave de paso (FIDO2) o configurar la autenticación basada en certificados para MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere la posibilidad de deshabilitar el acceso HTTP/80 sin protección a la cuenta de almacenamiento, de modo que todas las transferencias de datos estén cifradas, protegidas por integridad y el servidor esté autenticado. ",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Requerir HTTPS, es decir, deshabilitar el puerto 80 en la cuenta de almacenamiento",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "No use cuentas sincronizadas locales para las asignaciones de roles de identificador de Microsoft Entra, a menos que tenga un escenario que lo requiera específicamente.",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Al configurar un dominio personalizado (nombre de host) en una cuenta de almacenamiento, compruebe si necesita TLS/HTTPS; si es así, es posible que tenga que colocar Azure CDN delante de la cuenta de almacenamiento.",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Al aplicar HTTPS (deshabilitar HTTP), compruebe que no usa dominios personalizados (CNAME) para la cuenta de almacenamiento.",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Al usar el proxy de aplicación de Microsoft Entra ID para proporcionar a los usuarios remotos acceso a las aplicaciones, adminístrelo como un recurso de plataforma, ya que solo puede tener una instancia por inquilino.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Requerir HTTPS cuando un cliente usa un token de SAS para acceder a los datos de blobs ayuda a minimizar el riesgo de pérdida de credenciales.",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "service": "VNet",
"severity": "Medio",
- "text": "Limitar los tokens de firma de acceso compartido (SAS) solo a las conexiones HTTPS",
+ "text": "Utilice una topología de red radial para escenarios de red que requieran la máxima flexibilidad.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Los tokens de AAD deben favorecerse sobre las firmas de acceso compartido, siempre que sea posible",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "service": "VNet",
"severity": "Alto",
- "text": "Uso de tokens de Azure Active Directory (Azure AD) para el acceso a blobs",
+ "text": "Implemente servicios de redes compartidas, incluidas puertas de enlace de ExpressRoute, puertas de enlace de VPN y Azure Firewall o aplicaciones virtuales de red de asociados en la red virtual del centro central. Si es necesario, implemente también servicios DNS.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Costar"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Utilice una red DDoS o un plan de protección de IP para todas las direcciones IP públicas en las zonas de aterrizaje de aplicaciones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Al asignar un rol a un usuario, grupo o aplicación, conceda a esa entidad de seguridad solo los permisos necesarios para que pueda realizar sus tareas. Limitar el acceso a los recursos ayuda a evitar el uso indebido no intencionado y malintencionado de los datos.",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
"severity": "Medio",
- "text": "Privilegios mínimos en los permisos de IaM",
- "waf": "Seguridad"
+ "text": "Al implementar tecnologías de redes de asociados o NVA, siga las instrucciones del proveedor del asociado.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Una SAS de delegación de usuarios está protegida con credenciales de Azure Active Directory (Azure AD) y también con los permisos especificados para la SAS. Una SAS de delegación de usuarios es análoga a una SAS de servicio en cuanto a su ámbito y función, pero ofrece ventajas de seguridad sobre la SAS de servicio. ",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Al usar SAS, prefiera \"SAS de delegación de usuarios\" en lugar de SAS basada en claves de cuenta de almacenamiento.",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "service": "ExpressRoute",
+ "severity": "Bajo",
+ "text": "Si necesita el tránsito entre ExpressRoute y puertas de enlace de VPN en escenarios tipo hub-and-spoke, use Azure Route Server.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Las claves de la cuenta de almacenamiento (\"claves compartidas\") tienen muy pocas funcionalidades de auditoría. Si bien se puede monitorear quién o cuándo obtuvo una copia de las claves, una vez que las claves están en manos de varias personas, es imposible atribuir el uso a un usuario específico. Confiar únicamente en la autenticación de AAD facilita la vinculación del acceso al almacenamiento a un usuario. ",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere la posibilidad de deshabilitar las claves de la cuenta de almacenamiento, de modo que solo se admita el acceso a AAD (y la SAS de delegación de usuarios).",
+ "arm-service": "Microsoft.Network/virtualHubs",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "service": "ARS",
+ "severity": "Bajo",
+ "text": "Si utiliza el servidor de rutas, utilice un prefijo /27 para la subred del servidor de rutas.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Use los datos del registro de actividad para identificar \"cuándo\", \"quién\", \"qué\" y \"cómo\" se está viendo o cambiando la seguridad de la cuenta de almacenamiento (es decir, claves de cuenta de almacenamiento, directivas de acceso, etc.).",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere la posibilidad de usar Azure Monitor para auditar las operaciones del plano de control en la cuenta de almacenamiento",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "Una directiva de expiración de claves le permite establecer un recordatorio para la rotación de las claves de acceso a la cuenta. El recordatorio se muestra si ha transcurrido el intervalo especificado y las teclas aún no se han girado.",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
+ "service": "VNet",
"severity": "Medio",
- "text": "Al usar claves de cuenta de almacenamiento, considere la posibilidad de habilitar una \"directiva de expiración de claves\"",
- "waf": "Seguridad"
+ "text": "En el caso de las arquitecturas de red con varias topologías radiales en las regiones de Azure, use emparejamientos de redes virtuales globales entre las redes virtuales del centro para conectar las regiones entre sí.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Una directiva de expiración de SAS especifica un intervalo recomendado durante el cual la SAS es válida. Las directivas de expiración de SAS se aplican a una SAS de servicio o a una SAS de cuenta. Cuando un usuario genera una SAS de servicio o una SAS de cuenta con un intervalo de validez mayor que el intervalo recomendado, verá una advertencia.",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
+ "service": "VNet",
"severity": "Medio",
- "text": "Considere la posibilidad de configurar una directiva de expiración de SAS",
- "waf": "Seguridad"
+ "text": "Use Azure Monitor para redes para supervisar el estado de un extremo a otro de las redes de Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Las directivas de acceso almacenadas ofrecen la opción de revocar los permisos de una SAS de servicio sin tener que volver a generar las claves de la cuenta de almacenamiento. ",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"severity": "Medio",
- "text": "Considere la posibilidad de vincular SAS a una directiva de acceso almacenada",
- "waf": "Seguridad"
+ "text": "Si tiene más de 400 redes radiales en una región, implemente un centro adicional para omitir los límites de emparejamiento de red virtual (500) y el número máximo de prefijos que se pueden anunciar a través de ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"severity": "Medio",
- "text": "Considere la posibilidad de configurar el repositorio de código fuente de la aplicación para detectar cadenas de conexión protegidas y claves de cuenta de almacenamiento.",
- "waf": "Seguridad"
+ "text": "Limite el número de rutas por tabla de rutas a 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Lo ideal es que la aplicación use una identidad administrada para autenticarse en Azure Storage. Si esto no es posible, considere la posibilidad de tener la credencial de almacenamiento (cadena de conexión, clave de cuenta de almacenamiento, SAS, credencial de entidad de servicio) en Azure KeyVault o un servicio equivalente.",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "service": "VNet",
"severity": "Alto",
- "text": "Considere la posibilidad de almacenar cadenas de conexión en Azure KeyVault (en escenarios en los que las identidades administradas no son posibles)",
- "waf": "Seguridad"
+ "text": "Use la opción \"Permitir tráfico a la red virtual remota\" al configurar emparejamientos de red virtual.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Use los tiempos de expiración a corto plazo en una SAS de servicio SAS ad hoc o en una SAS de cuenta. De esta manera, incluso si una SAS se ve comprometida, es válida solo por un corto tiempo. Esta práctica es especialmente importante si no puede hacer referencia a una directiva de acceso almacenada. Los tiempos de expiración a corto plazo también limitan la cantidad de datos que se pueden escribir en un blob al limitar el tiempo disponible para cargarlo.",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"severity": "Alto",
- "text": "Esfuércese por obtener períodos de validez cortos para SAS ad-hoc",
- "waf": "Seguridad"
+ "text": "Uso de SKU de Standard Load Balancer con una implementación con redundancia de zona, la selección de Standard SKU Load Balancer mejora la confiabilidad a través de zonas de disponibilidad y resistencia de zona, lo que garantiza que las implementaciones resistan errores de zona y región. A diferencia de Basic, admite el equilibrio de carga global y ofrece un SLA.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Al crear una SAS, sea lo más específico y restrictivo posible. Prefiera una SAS para un solo recurso y operación en lugar de una SAS que proporciona un acceso mucho más amplio.",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
- "severity": "Medio",
- "text": "Aplicación de un ámbito limitado a una SAS",
- "waf": "Seguridad"
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "Alto",
+ "text": "Asegúrese de que los grupos de back-end del equilibrador de carga contengan al menos dos instancias, La implementación de Azure Load Balancers con al menos dos instancias en el back-end evita un único punto de error y admite la escalabilidad.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Una SAS puede incluir parámetros en los que las direcciones IP de cliente o los intervalos de direcciones están autorizados a solicitar un recurso mediante la SAS. ",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "service": "ExpressRoute",
"severity": "Medio",
- "text": "Considere la posibilidad de definir el ámbito de SAS en una dirección IP de cliente específica, siempre que sea posible",
+ "text": "Cuando use ExpressRoute Direct, configure MACsec para cifrar el tráfico en el nivel de capa dos entre los enrutadores de la organización y MSEE. El diagrama muestra este cifrado en el flujo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Una SAS no puede restringir la cantidad de datos que carga un cliente; Dado el modelo de precios de la cantidad de almacenamiento a lo largo del tiempo, podría tener sentido validar si los clientes cargaron contenido de gran tamaño malintencionado.",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
- "severity": "Bajo",
- "text": "Considere la posibilidad de comprobar los datos cargados, después de que los clientes hayan usado una SAS para cargar un archivo. ",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "En escenarios en los que MACsec no es una opción (por ejemplo, no usar ExpressRoute Direct), use una puerta de enlace de VPN para establecer túneles IPsec a través del emparejamiento privado de ExpressRoute.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Al acceder a Blob Storage a través de SFTP mediante una \"cuenta de usuario local\", no se aplican los controles RBAC \"habituales\". El acceso a blobs a través de NFS o REST puede ser más restrictivo que el acceso SFTP. Desafortunadamente, a partir de principios de 2023, los usuarios locales son la única forma de administración de identidades que actualmente se admite para el punto de conexión SFTP",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "SFTP: Limite la cantidad de \"usuarios locales\" para el acceso SFTP y audite si el acceso es necesario a lo largo del tiempo.",
+ "text": "Asegúrese de que no se usen espacios de direcciones IP superpuestos entre regiones de Azure y ubicaciones locales.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"severity": "Medio",
- "text": "SFTP: El punto de conexión SFTP no admite ACL similares a POSIX.",
+ "text": "Utilice las direcciones IP de los rangos de asignación de direcciones para Internets privadas (RFC 1918).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Seguridad"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "El almacenamiento es compatible con CORS (Cross-Origin Resource Sharing), es decir, una función HTTP que permite a las aplicaciones web de un dominio diferente relajar la política del mismo origen. Al habilitar CORS, mantenga CorsRules con el mínimo privilegio.",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"severity": "Alto",
- "text": "Evite las políticas de CORS demasiado amplias",
- "waf": "Seguridad"
+ "text": "Asegúrese de que no se desperdicie el espacio de direcciones IP, no cree redes virtuales innecesariamente grandes (por ejemplo, /16).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Los datos en reposo siempre están cifrados en el lado del servidor y, además, también pueden estar cifrados en el lado del cliente. El cifrado del lado del servidor puede realizarse mediante una clave administrada por la plataforma (predeterminada) o una clave administrada por el cliente. El cifrado del lado cliente puede producirse haciendo que el cliente proporcione una clave de cifrado y descifrado por blob a Azure Storage o controlando completamente el cifrado en el lado cliente. por lo tanto, no depende en absoluto de Azure Storage para obtener garantías de confidencialidad.",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
+ "service": "VNet",
"severity": "Alto",
- "text": "Determine cómo se deben cifrar los datos en reposo. Comprender el modelo de subprocesos para los datos.",
- "waf": "Seguridad"
+ "text": "No utilice intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
- "severity": "Medio",
- "text": "Determine qué cifrado de plataforma se debe usar o si se debe usar.",
- "waf": "Seguridad"
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "Alto",
+ "text": "Use SKU estándar e IP con redundancia de zona cuando corresponda, las direcciones IP públicas de Azure pueden ser de SKU estándar, disponibles como no zonales, zonales o con redundancia de zona. Las direcciones IP con redundancia de zona son accesibles en todas las zonas, resistiendo cualquier error de una sola zona, lo que proporciona una mayor resistencia. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
+ "service": "DNS",
"severity": "Medio",
- "text": "Determine qué cifrado del lado del cliente se debe usar o si.",
- "waf": "Seguridad"
+ "text": "En entornos en los que la resolución de nombres en Azure es todo lo necesario, use Azure Private DNS para la resolución con una zona delegada para la resolución de nombres (como 'azure.contoso.com').",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Aproveche el Explorador de Resource Graph (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para buscar cuentas de almacenamiento que permitan el acceso anónimo a blobs.",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere si se necesita acceso público a blobs o si se puede deshabilitar para determinadas cuentas de almacenamiento. ",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
+ "service": "DNS",
+ "severity": "Medio",
+ "text": "En el caso de los entornos en los que se requiere la resolución de nombres en Azure y en el entorno local y no existe ningún servicio DNS empresarial como Active Directory, use Azure DNS Private Resolver para enrutar las solicitudes DNS a Azure o a servidores DNS locales.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
- "text": "Reglas de recopilación de datos en Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "service": "DNS",
+ "severity": "Bajo",
+ "text": "Las cargas de trabajo especiales que requieren e implementan su propio DNS (como Red Hat OpenShift) deben utilizar su solución de DNS preferida.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
+ "waf": "Operaciones"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
- "text": "Comprobar las instancias de copia de seguridad con la fuente de datos subyacente no encontrada",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
+ "service": "DNS",
+ "severity": "Alto",
+ "text": "Habilite el registro automático de Azure DNS para administrar automáticamente el ciclo de vida de los registros DNS de las máquinas virtuales implementadas en una red virtual.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operaciones"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
- "text": "Eliminar o archivar servicios no asociados (discos, NIC, direcciones IP, etc.)",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "Medio",
+ "text": "Implementación de un plan para administrar la resolución de DNS entre varias regiones de Azure y cuando los servicios conmutan por error a otra región",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
- "text": "Considere un buen equilibrio entre el almacenamiento de recuperación del sitio y la copia de seguridad para aplicaciones que no son críticas",
- "waf": "Costar"
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "service": "Bastion",
+ "severity": "Medio",
+ "text": "Use Azure Bastion para conectarse de forma segura a la red.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
- "text": "Compruebe las oportunidades de gasto y ahorro entre las 40 áreas de trabajo de Log Analytics diferentes: use diferentes retenciones y recopilación de datos para áreas de trabajo que no sean de producción: cree un límite diario para el reconocimiento y el tamaño de los niveles: si establece un límite diario, además de crear una alerta cuando se alcance el límite, asegúrese de crear también una regla de alerta para que se le notifique cuando se alcance algún porcentaje (90 %, por ejemplo). - Considere la posibilidad de transformar el espacio de trabajo si es posible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
- "waf": "Costar"
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "service": "Bastion",
+ "severity": "Medio",
+ "text": "Use Azure Bastion en una subred /26 o superior.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
- "text": "Aplique una política de purga de registros y automatización (si es necesario, los registros se pueden mover al almacenamiento en frío)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
- "waf": "Costar"
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "WAF",
+ "severity": "Medio",
+ "text": "Use las directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
- "text": "Compruebe que los discos son realmente necesarios, si no: eliminar. Si son necesarios, busque niveles de almacenamiento más bajos o use una copia de seguridad:",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
- "waf": "Costar"
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
+ "severity": "Bajo",
+ "text": "Al usar Azure Front Door y Azure Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Azure Front Door. Bloquee Azure Application Gateway para recibir tráfico solo de Azure Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
- "text": "Considere la posibilidad de mover el almacenamiento no utilizado al nivel inferior, con reglas personalizadas: https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "waf": "Costar"
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
+ "severity": "Alto",
+ "text": "Cuando se requieran WAF y otros servidores proxy inversos para las conexiones HTTP/S entrantes, impleméntelos dentro de una red virtual de zona de aterrizaje y junto con las aplicaciones que protegen y exponen a Internet.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
- "text": "Asegúrese de que el asesor está configurado para el tamaño correcto de la máquina virtual ",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Use los planes de protección IP o de red DDoS de Azure para ayudar a proteger los puntos de conexión de direcciones IP públicas dentro de las redes virtuales.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "description": "comprobando la búsqueda de las licencias de categoría de contador en el análisis de costes",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
- "text": "ejecutar el script en todas las máquinas virtuales de Windows https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server: considere la posibilidad de implementar una directiva si las máquinas virtuales de Windows se crean con frecuencia",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Planifique cómo administrar la configuración y la estrategia del tráfico saliente de la red antes del próximo cambio importante. El 30 de septiembre de 2025, se retirará el acceso saliente predeterminado para las nuevas implementaciones y solo se permitirán configuraciones de acceso explícitas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
- "text": " esto también se puede poner bajo AHUB si ya tiene licencias https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Agregue configuraciones de diagnóstico para guardar los registros relacionados con DDoS para todas las direcciones IP públicas protegidas (DDoS IP o Protección de red).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "text": "Consolide familias de máquinas virtuales reservadas con la opción de flexibilidad (no más de 4-5 familias)",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "Costar"
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Asegúrese de que haya una asignación de directiva para denegar las direcciones IP públicas vinculadas directamente a las máquinas virtuales. Use exclusiones si se necesitan direcciones IP públicas en máquinas virtuales específicas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "text": "Uso de Azure Reserved Instances: esta característica le permite reservar máquinas virtuales durante un período de 1 o 3 años, lo que proporciona un importante ahorro de costos en comparación con los precios de pago por uso.",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Use ExpressRoute como conexión principal a Azure. Utilice las VPN como fuente de conectividad de respaldo.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "text": "Solo se pueden reservar discos más grandes => 1 TiB -",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Puede usar la anteposición de AS Path y los pesos de conexión para influir en el tráfico de Azure al entorno local, y la gama completa de atributos BGP en sus propios enrutadores para influir en el tráfico del entorno local a Azure.",
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Cuando use varios circuitos ExpressRoute o varias ubicaciones locales, use atributos BGP para optimizar el enrutamiento.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
- "text": "Después de la optimización del tamaño correcto",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Seleccione la SKU correcta para las puertas de enlace de ExpressRoute/VPN en función de los requisitos de ancho de banda y rendimiento.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
- "text": "Compruebe si corresponde y aplique la política/cambio https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Asegúrese de que usa circuitos ExpressRoute de datos ilimitados solo si alcanza el ancho de banda que justifica su costo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Costar"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
- "text": "El descuento de la parte de la licencia VM + (ahub + 3YRI) es de alrededor del 70% de descuento",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Aproveche la SKU local de ExpressRoute para reducir el costo de los circuitos, si la ubicación de emparejamiento de circuitos admite las regiones de Azure para la SKU local.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Costar"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "text": "Considere la posibilidad de utilizar un VMSS para satisfacer la demanda en lugar de un tamaño fijo",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Implemente una puerta de enlace de ExpressRoute con redundancia de zona en las regiones de Azure admitidas.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Cost Optimization Checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
- "text": "Use el escalador automático de AKS para que coincida con el uso de los clústeres (asegúrese de que los requisitos de los pods coincidan con el escalador)",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "En escenarios que requieren un ancho de banda superior a 10 Gbps o puertos dedicados de 10/100 Gbps, use ExpressRoute Direct.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
- "text": "Mover los puntos de recuperación al archivo de almacén cuando corresponda (Validar)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Cuando se requiera una latencia baja o el rendimiento del entorno local a Azure debe ser superior a 10 Gbps, habilite FastPath para omitir la puerta de enlace de ExpressRoute de la ruta de acceso de datos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
- "text": "Considere la posibilidad de usar máquinas virtuales de acceso puntual con reserva siempre que sea posible. Considere la posibilidad de la terminación automática de clústeres.",
- "waf": "Costar"
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
+ "service": "VPN",
+ "severity": "Medio",
+ "text": "Use puertas de enlace de VPN con redundancia de zona para conectar sucursales o ubicaciones remotas a Azure (donde estén disponibles).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
- "text": "Funciones - Reutilizar conexiones",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "Costar"
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "service": "VPN",
+ "severity": "Medio",
+ "text": "Utilice dispositivos VPN redundantes en las instalaciones (activo/activo o activo/pasivo).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
- "text": "Funciones: almacenar datos en caché localmente",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Si usa ExpressRoute Direct, considere la posibilidad de usar circuitos locales de ExpressRoute a las regiones locales de Azure para ahorrar costos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Costar"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
- "text": "Funciones - Arranques en frío: utilice la funcionalidad 'Ejecutar desde el paquete'. De esta manera, el código se descarga como un único archivo zip. Esto puede, por ejemplo, resultar en mejoras significativas con las funciones de Javascript, que tienen muchos módulos de nodos. Utilice herramientas específicas del lenguaje para reducir el tamaño del paquete, por ejemplo, aplicaciones Javascript que sacuden el árbol.",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Cuando se requiera aislamiento de tráfico o ancho de banda dedicado, por ejemplo, para separar entornos de producción y no de producción, use diferentes circuitos ExpressRoute. Le ayudará a garantizar dominios de enrutamiento aislados y a aliviar los riesgos de vecinos ruidosos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
- "text": "Funciones - Mantén tus funciones calientes",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Supervise la disponibilidad y el uso de ExpressRoute mediante Express Route Insights integrado.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operaciones"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
- "text": "Al usar el escalado automático con diferentes funciones, es posible que haya uno que controle todo el escalado automático para todos los recursos: considere la posibilidad de moverlo a un plan de consumo independiente (y considere un plan superior para la CPU)",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Use el Monitor de conexión para la supervisión de la conectividad en toda la red, especialmente entre el entorno local y Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operaciones"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
- "text": "Las aplicaciones de funciones de un plan determinado se escalan juntas, por lo que cualquier problema con el escalado puede afectar a todas las aplicaciones del plan.",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Use circuitos ExpressRoute de diferentes ubicaciones de emparejamiento para obtener redundancia.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
- "text": "¿Se me factura por el \"tiempo de espera\"? Esta pregunta se suele formular en el contexto de una función de C# que realiza una operación asincrónica y espera el resultado, por ejemplo, await Task.Delay(1000) o await client. GetAsync('http://google.com'). La respuesta es sí: el segundo cálculo de GB se basa en la hora de inicio y finalización de la función y el uso de memoria durante ese período. Lo que realmente sucede durante ese tiempo en términos de actividad de la CPU no se tiene en cuenta en el cálculo. Una excepción a esta regla es si está utilizando funciones duraderas. No se le facturará por el tiempo empleado en las esperas en las funciones de orquestador.aplique técnicas de modelado de la demanda siempre que sea posible (¿entornos de desarrollo?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Use VPN de sitio a sitio como conmutación por error de ExpressRoute, si solo usa un único circuito ExpressRoute.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
- "text": "Frontdoor: desactivar la página principal predeterminadaEn la configuración de la aplicación de la aplicación, establezca AzureWebJobsDisableHomepage en true. Esto devolverá un 204 (sin contenido) al PoP para que solo se devuelvan los datos del encabezado.",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Si utiliza una tabla de rutas en GatewaySubnet, asegúrese de que las rutas de puerta de enlace se propagan.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
- "text": "Frontdoor: ruta a algo que no devuelve nada. Configure una función, un proxy de función o agregue una ruta en la aplicación web que devuelva 200 (correctamente) y envíe contenido mínimo o nulo. La ventaja de esto es que podrá cerrar la sesión cuando se llame.",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Si usa ExpressRoute, el enrutamiento local debe ser dinámico: en caso de que se produzca un error de conexión, debe converger a la conexión restante del circuito. La carga debe compartirse entre ambas conexiones, idealmente como activa/activa, aunque también se admite activa/pasiva.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
- "text": "Considere la posibilidad de archivar niveles para los datos menos utilizados",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Asegúrese de que los dos vínculos físicos del circuito ExpressRoute están conectados a dos dispositivos perimetrales distintos de la red.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
- "text": "Compruebe los tamaños de disco en los que el tamaño no coincida con el nivel (es decir, un disco de 513 GiB pagará un P30 (1 TiB) y considere la posibilidad de cambiar el tamaño",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Asegúrese de que la detección de reenvío bidireccional (BFD) esté habilitada y configurada en los dispositivos de enrutamiento perimetral del cliente o proveedor.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
- "text": "Considere la posibilidad de utilizar un SSD estándar en lugar de Premium o Ultra siempre que sea posible",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Conecte la puerta de enlace de ExpressRoute a dos o más circuitos de diferentes ubicaciones de emparejamiento para una mayor resistencia.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
- "text": "En el caso de las cuentas de almacenamiento, asegúrese de que el nivel elegido no suma cargos por transacción (puede ser más barato pasar al siguiente nivel)",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Configure registros de diagnóstico y alertas para la puerta de enlace de red virtual de ExpressRoute.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operaciones"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
- "text": "Para ASR, considere la posibilidad de usar discos SSD estándar si el RPO/RTO y el rendimiento de replicación lo permiten",
- "waf": "Costar"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "No use circuitos ExpressRoute para la comunicación de red virtual a red virtual.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
- "text": "Cuentas de almacenamiento: compruebe el nivel de acceso frecuente o GRS necesario",
- "waf": "Costar"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "Bajo",
+ "text": "No envíe el tráfico de Azure a ubicaciones híbridas para su inspección. En su lugar, siga el principio \"el tráfico de Azure se queda en Azure\" para que la comunicación entre los recursos de Azure se produzca a través de la red troncal de Microsoft.",
+ "waf": "Rendimiento"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
- "text": "Discos: valide el uso de discos SSD Premium en todas partes: por ejemplo, los que no son de producción podrían cambiar a SSD estándar o SSD Premium bajo demanda ",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Use Azure Firewall para controlar el tráfico de salida de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado del tráfico este/oeste (si la organización lo requiere).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
- "text": "Cree presupuestos para administrar los costos y cree alertas que notifiquen automáticamente a las partes interesadas sobre anomalías en el gasto y riesgos de gasto excesivo.",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Cree una directiva global de Azure Firewall para controlar la posición de seguridad en todo el entorno de red global y asígnela a todas las instancias de Azure Firewall. Permita que las directivas granulares cumplan los requisitos de regiones específicas delegando directivas de firewall incrementales a los equipos de seguridad locales a través del control de acceso basado en roles de Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
- "text": "Exporte los datos de costos a una cuenta de almacenamiento para realizar análisis de datos adicionales.",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
+ "service": "Firewall",
+ "severity": "Bajo",
+ "text": "Configure los proveedores de seguridad SaaS de socios compatibles dentro de Firewall Manager si la organización desea utilizar dichas soluciones para ayudar a proteger las conexiones salientes.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
- "text": "Controle los costos de un grupo de SQL dedicado pausando el recurso cuando no esté en uso.",
- "waf": "Costar"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Utilice las reglas de la aplicación para filtrar el tráfico saliente en el nombre de host de destino para los protocolos compatibles. Use reglas de red basadas en FQDN y Azure Firewall con proxy DNS para filtrar el tráfico de salida a Internet a través de otros protocolos.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Use Azure Firewall Premium para habilitar características de seguridad adicionales.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Configure el modo de Inteligencia sobre amenazas de Azure Firewall en Alerta y Denegar para obtener protección adicional.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Configure el modo IDPS de Azure Firewall en Denegar para obtener protección adicional.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "En el caso de las subredes de redes virtuales que no están conectadas a Virtual WAN, adjunte una tabla de rutas para que el tráfico de Internet se redirija a Azure Firewall o a una aplicación virtual de red.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Agregue la configuración de diagnóstico para guardar registros, mediante la tabla de destino Recurso específico, para todas las implementaciones de Azure Firewall.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
+ "service": "Firewall",
+ "severity": "Importante",
+ "text": "Migre de las reglas de Azure Firewall clásico (si existen) a la directiva de firewall.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Use un prefijo /26 para las subredes de Azure Firewall.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Organice las reglas dentro de la política de firewall en grupos de recopilación de reglas y colecciones de reglas, en función de su frecuencia de uso.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Utilice grupos de direcciones IP o prefijos de direcciones IP para reducir el número de reglas de tabla de direcciones IP.",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "No utilice caracteres comodín como IP de origen para los DNAT, como * o cualquiera, debe especificar las direcciones IP de origen para los DNAT entrantes.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Evite el agotamiento del puerto SNAT supervisando el uso del puerto SNAT, evaluando la configuración de la puerta de enlace NAT y garantizando una conmutación por error sin problemas. Si el número de puertos se acerca al límite, es una señal de que el agotamiento de SNAT podría ser inminente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Si usa Azure Firewall Premium, habilite la inspección de TLS.",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
+ "service": "Firewall",
+ "severity": "Bajo",
+ "text": "Utilice categorías web para permitir o denegar el acceso saliente a temas específicos.",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Como parte de la inspección de TLS, planee la recepción de tráfico de Azure App Gateways para su inspección.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Habilite la configuración de proxy DNS de Azure Firewall.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Integre Azure Firewall con Azure Monitor y habilite el registro de diagnóstico para almacenar y analizar los registros y las métricas del firewall.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "service": "Firewall",
+ "severity": "Bajo",
+ "text": "Implementación de copias de seguridad para las reglas de firewall",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Implemente Azure Firewall en varias zonas de disponibilidad. Azure Firewall ofrece diferentes acuerdos de nivel de servicio en función de su implementación; en una sola zona de disponibilidad o en varias, lo que podría mejorar la fiabilidad y el rendimiento.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Configure la protección contra DDoS en la red virtual de Azure Firewall y asocie un plan de protección contra DDoS con la red virtual que hospeda Azure Firewall para proporcionar una mitigación mejorada contra ataques DDoS. Azure Firewall Manager integra la creación de infraestructura de firewall y planes de protección contra DDoS. ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "No interrumpa la comunicación del plano de control para los servicios PaaS de Azure insertados en una red virtual, como con una ruta 0.0.0.0/0 o una regla de grupo de seguridad de red que bloquee el tráfico del plano de control.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
+ "service": "ExpressRoute",
+ "severity": "Medio",
+ "text": "Acceda a los servicios PaaS de Azure desde el entorno local a través de puntos de conexión privados y el emparejamiento privado de ExpressRoute. Este método evita el tránsito por la Internet pública.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "No habilite los puntos de conexión de servicio de red virtual de forma predeterminada en todas las subredes.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
+ "service": "Firewall",
+ "severity": "Medio",
+ "text": "Filtre el tráfico de salida a los servicios PaaS de Azure mediante FQDN en lugar de direcciones IP en Azure Firewall o una NVA para evitar la filtración de datos. Si usa Private Link, puede bloquear todos los FQDN, de lo contrario, permitir solo los servicios PaaS necesarios.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Utilice al menos un prefijo /27 para las subredes de puerta de enlace.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
+ "service": "NSG",
+ "severity": "Alto",
+ "text": "No confíe en las reglas predeterminadas de entrada del grupo de seguridad de red que usan la etiqueta de servicio VirtualNetwork para limitar la conectividad.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "service": "NSG",
+ "severity": "Medio",
+ "text": "Use los grupos de seguridad de red para ayudar a proteger el tráfico a través de las subredes, así como el tráfico este/oeste a través de la plataforma (tráfico entre zonas de aterrizaje).",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "NSG",
+ "severity": "Medio",
+ "text": "Use grupos de seguridad de red y grupos de seguridad de aplicaciones para microsegmentar el tráfico dentro de la zona de aterrizaje y evite usar una NVA central para filtrar los flujos de tráfico.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
+ "service": "NSG",
+ "severity": "Medio",
+ "text": "Habilite los registros de flujo de red virtual e introdúzcalos en Traffic Analytics para obtener información sobre los flujos de tráfico internos y externos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "NSG",
+ "severity": "Medio",
+ "text": "No implemente más de 900 reglas de grupo de seguridad de red por grupo de seguridad de red, debido al límite de 1000 reglas.",
+ "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Use Virtual WAN si el escenario se describe explícitamente en la lista de diseños de enrutamiento de Virtual WAN.",
+ "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Use un centro de conectividad de Virtual WAN por región de Azure para conectar varias zonas de aterrizaje entre sí en regiones de Azure a través de una Azure Virtual WAN global común.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Para la protección y el filtrado del tráfico de Internet saliente, implemente Azure Firewall en centros seguros.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Asegúrese de que la arquitectura de red WAN virtual se alinee con un escenario de arquitectura identificado.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Use Azure Monitor Insights para Virtual WAN para supervisar la topología de un extremo a otro de Virtual WAN, el estado y las métricas clave.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "No deshabilite el tráfico de rama a rama en Virtual WAN, a menos que estos flujos se deban bloquear explícitamente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Use AS-Path como preferencia de enrutamiento del concentrador, ya que es más flexible que ExpressRoute o VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "service": "VWAN",
+ "severity": "Medio",
+ "text": "Configure la propagación basada en etiquetas en Virtual WAN, de lo contrario, la conectividad entre los centros virtuales se verá afectada.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "service": "VWAN",
+ "severity": "Alto",
+ "text": "Asigne al menos un prefijo /23 a los centros virtuales para asegurarse de que haya suficiente espacio IP disponible.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Aproveche Azure Policy de forma estratégica, defina controles para su entorno mediante iniciativas de directivas para agrupar directivas relacionadas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "Asigne los requisitos normativos y de cumplimiento a las definiciones de Azure Policy y las asignaciones de roles de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "Establezca definiciones de Azure Policy en el grupo de administración raíz intermedio para que se puedan asignar en ámbitos heredados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Administre las asignaciones de políticas en el nivel más alto apropiado con exclusiones en los niveles inferiores, si es necesario.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "service": "Policy",
+ "severity": "Bajo",
+ "text": "Use Azure Policy para controlar los servicios que los usuarios pueden aprovisionar en el nivel de suscripción o grupo de administración.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Utilice políticas integradas siempre que sea posible para minimizar la sobrecarga operativa.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "description": "La asignación del rol Colaborador de políticas de recursos a ámbitos específicos le permite delegar la administración de directivas a los equipos pertinentes. Por ejemplo, un equipo de TI central puede supervisar las políticas a nivel de grupo de administración, mientras que los equipos de aplicaciones se encargan de las políticas de sus suscripciones, lo que permite la gobernanza distribuida con el cumplimiento de los estándares de la organización.",
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "Asigne el rol integrado Colaborador de directiva de recursos en un ámbito determinado para habilitar la gobernanza de nivel de aplicación.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "Limite el número de asignaciones de Azure Policy realizadas en el ámbito del grupo de administración raíz para evitar la administración a través de exclusiones en ámbitos heredados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "Si existen requisitos de soberanía de datos, se deben implementar Azure Policies para aplicarlos.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "Para la zona de aterrizaje soberana, implemente la línea base de la política de soberanía y asígnela en el nivel de grupo de gestión correcto.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "En el caso de la Zona de Aterrizaje Soberano, documente los objetivos del Control Soberano para el mapeo de políticas.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
+ "service": "Policy",
+ "severity": "Medio",
+ "text": "En el caso de la Zona de Aterrizaje Soberana, garantizar que exista un proceso para la gestión de los \"objetivos de control soberano para el mapeo de políticas\".",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
+ "service": "Monitor",
+ "severity": "Medio",
+ "text": "Use un único área de trabajo de registros de monitor para administrar las plataformas de forma centralizada, excepto cuando el control de acceso basado en rol de Azure (Azure RBAC), los requisitos de soberanía de datos o las directivas de retención de datos exijan áreas de trabajo independientes.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "Medio",
+ "text": "Decida si desea usar una única área de trabajo de Azure Monitor Logs para todas las regiones o crear varias áreas de trabajo para cubrir varias regiones geográficas. Cada enfoque tiene ventajas y desventajas, incluidos los posibles cargos de red entre regiones",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Monitor",
+ "severity": "Alto",
+ "text": "Exporte los registros a Azure Storage si los requisitos de retención de registros superan los doce años. Use el almacenamiento inmutable con una política de escritura única y lectura múltiple para que los datos no se puedan borrar ni modificar durante un intervalo especificado por el usuario.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Supervise el desfase de configuración de la máquina virtual (VM) a nivel de sistema operativo mediante Azure Policy. La habilitación de las funcionalidades de auditoría de Azure Automanage Machine Configuration a través de directivas ayuda a las cargas de trabajo del equipo de aplicaciones a consumir inmediatamente las funcionalidades de características con poco esfuerzo.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Use Azure Update Manager como mecanismo de aplicación de revisiones para máquinas virtuales Windows y Linux en Azure.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Use Azure Update Manager como mecanismo de aplicación de revisiones para máquinas virtuales Windows y Linux fuera de Azure mediante Azure Arc.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/networkWatchers",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Network Watcher",
+ "severity": "Medio",
+ "text": "Utilice Network Watcher para supervisar de forma proactiva los flujos de tráfico.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Monitor",
+ "severity": "Medio",
+ "text": "Use los registros de Azure Monitor para obtener información e informes.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "service": "Monitor",
+ "severity": "Medio",
+ "text": "Use las alertas de Azure Monitor para la generación de alertas operativas.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "Monitor",
+ "severity": "Medio",
+ "text": "Al usar el seguimiento de cambios e inventario a través de cuentas de Azure Automation, asegúrese de que ha seleccionado regiones compatibles para vincular el área de trabajo de Log Analytics y las cuentas de automatización.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Backup",
+ "severity": "Bajo",
+ "text": "Al usar Azure Backup, use los tipos de copia de seguridad correctos (GRS, ZRS Y LRS) para la copia de seguridad, ya que la configuración predeterminada es GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Use directivas de invitado de Azure para implementar automáticamente configuraciones de software a través de extensiones de máquina virtual y aplicar una configuración de máquina virtual de línea base compatible.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Use las características de configuración de invitado de Azure Policy para auditar y corregir la configuración de la máquina (por ejemplo, el sistema operativo, la aplicación, el entorno) para asegurarse de que los recursos se alinean con las configuraciones esperadas, y Update Management puede aplicar la administración de revisiones para las máquinas virtuales.",
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Supervise el desfase de la configuración de seguridad de la máquina virtual a través de Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Use Azure Site Recovery para escenarios de recuperación ante desastres de Azure a Azure Virtual Machines. Esto le permite replicar cargas de trabajo en todas las regiones.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "Backup",
+ "severity": "Medio",
+ "text": "Use funcionalidades de copia de seguridad nativas de Azure o una solución de copia de seguridad de terceros compatible con Azure.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "WAF",
+ "severity": "Alto",
+ "text": "Agregue configuración de diagnóstico para guardar los registros de WAF de los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway. Revise periódicamente los registros para comprobar si hay ataques y detecciones de falsos positivos.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "WAF",
+ "severity": "Medio",
+ "text": "Envíe registros de WAF desde los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway, a Microsoft Sentinel. Detecte ataques e integre la telemetría de WAF en su entorno general de Azure.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "text": "Use Azure Key Vault para almacenar sus secretos y credenciales.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Use diferentes instancias de Azure Key Vaults para diferentes aplicaciones y regiones para evitar límites de escala de transacciones y restringir el acceso a los secretos.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención para los objetos eliminados.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Siga un modelo de privilegios mínimos limitando la autorización para eliminar claves, secretos y certificados de forma permanente a roles de identificador personalizados especializados de Microsoft Entra.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Automatice el proceso de gestión y renovación de certificados con autoridades de certificación públicas para facilitar la administración.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Establezca un proceso automatizado para la rotación de claves y certificados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Habilite el firewall y el punto de conexión de servicio de red virtual o el punto de conexión privado en el almacén para controlar el acceso al almacén de claves.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Use el área de trabajo de Log Analytics de Azure Monitor central de la plataforma para auditar el uso de claves, certificados y secretos en cada instancia de Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Delegue la creación de instancias de Key Vault y el acceso con privilegios, y use Azure Policy para aplicar una configuración coherente y conforme.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Use una instancia de Azure Key Vault por aplicación, por entorno, por región.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "Si desea traer sus propias claves, es posible que esto no sea compatible con todos los servicios considerados. Implemente la mitigación pertinente para que las inconsistencias no obstaculicen los resultados deseados. Elija los pares de regiones y las regiones de recuperación ante desastres adecuados que minimicen la latencia.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "service": "Key Vault",
+ "severity": "Medio",
+ "text": "En el caso de la zona de aterrizaje soberana, use el HSM administrado de Azure Key Vault para almacenar los secretos y las credenciales.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Use las capacidades de generación de informes de Microsoft Entra ID para generar informes de auditoría de control de acceso.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "service": "Defender",
+ "severity": "Alto",
+ "text": "Habilite la administración de la posición de seguridad en la nube de Defender para todas las suscripciones.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "service": "Defender",
+ "severity": "Alto",
+ "text": "Habilite un plan de protección de carga de trabajo en la nube de Defender para servidores en todas las suscripciones.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "service": "Defender",
+ "severity": "Alto",
+ "text": "Habilite los planes de protección de cargas de trabajo en la nube de Defender para recursos de Azure en todas las suscripciones.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "service": "VM",
+ "severity": "Alto",
+ "text": "Habilite la protección de puntos de conexión en servidores IaaS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "service": "VM",
+ "severity": "Medio",
+ "text": "Supervise el desfase de revisiones del sistema operativo base a través de los registros de Azure Monitor y Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "Medio",
+ "text": "Conecte las configuraciones de recursos predeterminadas a un área de trabajo centralizada de Azure Monitor Log Analytics.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Detección centralizada de amenazas con registros correlacionados: consolide los datos de seguridad en una ubicación central donde se puedan correlacionar entre varios servicios a través de SIEM (información de seguridad y gestión de eventos)",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Para Sovereign Landing Zone, habilite los registros de transparencia en el inquilino de Entra ID.",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "service": "Entra",
+ "severity": "Medio",
+ "text": "Para Sovereign Landing Zone, habilite la caja de seguridad del cliente en el inquilino de Entra ID.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Storage",
+ "severity": "Alto",
+ "text": "Habilite la transferencia segura a las cuentas de almacenamiento.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
+ "service": "Storage",
+ "severity": "Alto",
+ "text": "Habilite la eliminación temporal de contenedor para que la cuenta de almacenamiento recupere un contenedor eliminado y su contenido.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "text": "Use los secretos de Key Vault para evitar codificar de forma rígida información confidencial, como credenciales (máquinas virtuales, contraseñas de usuario), certificados o claves.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
+ "severity": "Alto",
+ "text": "Habilitación de 2 réplicas para que tengan una disponibilidad del 99,9 % para las operaciones de lectura",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
+ "severity": "Medio",
+ "text": "Habilitación de 3 réplicas para que tengan una disponibilidad del 99,9 % para las operaciones de lectura y escritura",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
+ "severity": "Alto",
+ "text": "Aproveche las zonas de disponibilidad habilitando réplicas de lectura o escritura",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
+ "severity": "Medio",
+ "text": "En el caso de la reincidencia regional, cree manualmente servicios en 2 o más regiones para la búsqueda, ya que no proporciona un método automatizado para replicar índices de búsqueda en regiones geográficas",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
+ "severity": "Medio",
+ "text": "Para sincronizar datos entre varios servicios, use indexadores para actualizar contenido en varios servicios o use las API de REST para insertar actualizaciones de contenido en varios servicios",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
+ "severity": "Medio",
+ "text": "Uso de Azure Traffic Manager para coordinar solicitudes",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
+ "severity": "Alto",
+ "text": "Realice una copia de seguridad y restaure un índice de Azure Cognitive Search. Use este código de ejemplo para realizar una copia de seguridad de la definición del índice y la instantánea en una serie de archivos JSON",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
+ "severity": "Alto",
+ "text": "Habilite la redundancia de zona para Azure Cache for Redis. Azure Cache for Redis admite configuraciones con redundancia de zona en los niveles Premium y Enterprise. Una caché con redundancia de zona puede colocar sus nodos en diferentes zonas de disponibilidad de Azure en la misma región. Elimina la interrupción del centro de datos o de la zona de disponibilidad como único punto de error y aumenta la disponibilidad general de la memoria caché.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
+ "severity": "Medio",
+ "text": "Configure la persistencia de datos para una instancia de Azure Cache for Redis. Dado que los datos de caché se almacenan en la memoria, un error poco frecuente y no planeado de varios nodos puede hacer que se eliminen todos los datos. Para evitar la pérdida completa de datos, la persistencia de Redis permite tomar instantáneas periódicas de los datos en memoria y almacenarlas en la cuenta de almacenamiento.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
+ "severity": "Medio",
+ "text": "Use una cuenta de almacenamiento con redundancia geográfica para conservar los datos de Azure Cache for Redis o con redundancia zonal donde la redundancia geográfica no esté disponible",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
+ "severity": "Medio",
+ "text": "Configure la replicación geográfica pasiva para instancias de Azure Cache for Redis Premium. La replicación geográfica es un mecanismo para vincular dos o más instancias de Azure Cache for Redis, que normalmente abarcan dos regiones de Azure. La replicación geográfica está diseñada principalmente para la recuperación ante desastres entre regiones. Dos instancias de caché de nivel Premium se conectan a través de la replicación geográfica de una manera que proporciona lecturas y escrituras en la caché principal, y esos datos se replican en la caché secundaria.",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Aplicación de las instrucciones de la prueba comparativa de seguridad en la nube de Microsoft relacionadas con el almacenamiento",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Tenga en cuenta la \"línea base de seguridad de Azure para el almacenamiento\"",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "De forma predeterminada, Azure Storage tiene una dirección IP pública y es accesible desde Internet. Los puntos de conexión privados permiten exponer de forma segura Azure Storage solo a los recursos de proceso de Azure que necesitan acceso, lo que elimina la exposición a la Internet pública",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de usar puntos de conexión privados para Azure Storage",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Las cuentas de almacenamiento recién creadas se crean mediante el modelo de implementación de ARM, de modo que RBAC, auditoría, etc. están habilitados. Asegúrese de que no hay cuentas de almacenamiento antiguas con el modelo de implementación clásica en una suscripción",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Asegúrese de que las cuentas de almacenamiento más antiguas no usan el \"modelo de implementación clásica\"",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Aproveche Microsoft Defender para obtener información sobre la actividad sospechosa y los errores de configuración.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitación de Microsoft Defender para todas las cuentas de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "El mecanismo de eliminación temporal permite recuperar blobs eliminados accidentalmente.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Habilitación de la \"eliminación temporal\" para blobs",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere la posibilidad de deshabilitar de forma selectiva la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimina inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Deshabilitación de la \"eliminación temporal\" de blobs",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "La eliminación temporal de contenedores permite recuperar un contenedor después de que se haya eliminado, por ejemplo, recuperarse de una operación de eliminación accidental.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitación de la \"eliminación temporal\" para los contenedores",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere la posibilidad de deshabilitar de forma selectiva la \"eliminación temporal\" para determinados contenedores de blobs, por ejemplo, si la aplicación debe asegurarse de que la información eliminada se elimina inmediatamente, por ejemplo, por motivos de confidencialidad, privacidad o cumplimiento. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Deshabilitación de la \"eliminación temporal\" para contenedores",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Evita la eliminación accidental de una cuenta de almacenamiento, obligando al usuario a quitar primero el bloqueo de eliminación, antes de la eliminación",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitación de bloqueos de recursos en cuentas de almacenamiento",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere la posibilidad de aplicar directivas de \"retención legal\" o \"retención basada en el tiempo\" para los blobs, de modo que sea imposible eliminar el blob, el contenedor o la cuenta de almacenamiento. Tenga en cuenta que 'imposible' en realidad significa 'imposible'; una vez que una cuenta de almacenamiento contiene un blob inmutable, la única manera de \"deshacerse\" de esa cuenta de almacenamiento es cancelando la suscripción de Azure.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de blobs inmutables",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
- "text": "Habilite la función de pausa automática de Apache Spark sin servidor y establezca el valor de tiempo de espera en consecuencia.",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere la posibilidad de deshabilitar el acceso HTTP/80 sin protección a la cuenta de almacenamiento, de modo que todas las transferencias de datos estén cifradas, protegidas por integridad y el servidor esté autenticado. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Requerir HTTPS, es decir, deshabilitar el puerto 80 en la cuenta de almacenamiento",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
- "text": "Cree varias definiciones de grupo de Apache Spark de varios tamaños.",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Al configurar un dominio personalizado (nombre de host) en una cuenta de almacenamiento, compruebe si necesita TLS/HTTPS; si es así, es posible que tenga que colocar Azure CDN delante de la cuenta de almacenamiento.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Al aplicar HTTPS (deshabilitar HTTP), compruebe que no usa dominios personalizados (CNAME) para la cuenta de almacenamiento.",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
- "text": "Compre unidades de confirmación (SCU) de Azure Synapse durante un año con un plan de compra anticipada para ahorrar en los costos de Azure Synapse Analytics.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Requerir HTTPS cuando un cliente usa un token de SAS para acceder a los datos de blobs ayuda a minimizar el riesgo de pérdida de credenciales.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Limitar los tokens de firma de acceso compartido (SAS) solo a las conexiones HTTPS",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
- "text": "Uso de máquinas virtuales de acceso puntual para trabajos interrumpibles: se trata de máquinas virtuales por las que se puede pujar y comprar a un precio reducido, lo que proporciona una solución rentable para cargas de trabajo no críticas.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Los tokens de AAD deben favorecerse sobre las firmas de acceso compartido, siempre que sea posible",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Uso de tokens de Azure Active Directory (Azure AD) para el acceso a blobs",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "text": "Ajustar el tamaño de todas las máquinas virtuales",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Al asignar un rol a un usuario, grupo o aplicación, conceda a esa entidad de seguridad solo los permisos necesarios para que pueda realizar sus tareas. Limitar el acceso a los recursos ayuda a evitar el uso indebido no intencionado y malintencionado de los datos.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Privilegios mínimos en los permisos de IaM",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
- "text": "Intercambiar el tamaño de la máquina virtual con los tamaños normalizados y más recientes",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Una SAS de delegación de usuarios está protegida con credenciales de Azure Active Directory (Azure AD) y también con los permisos especificados para la SAS. Una SAS de delegación de usuarios es análoga a una SAS de servicio en cuanto a su ámbito y función, pero ofrece ventajas de seguridad sobre la SAS de servicio. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Al usar SAS, prefiera \"SAS de delegación de usuarios\" en lugar de SAS basada en claves de cuenta de almacenamiento.",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "Ajustar el tamaño de las máquinas virtuales: comience con la supervisión del uso por debajo del 5 % y, a continuación, trabaje hasta el 40 %",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Las claves de la cuenta de almacenamiento (\"claves compartidas\") tienen muy pocas funcionalidades de auditoría. Si bien se puede monitorear quién o cuándo obtuvo una copia de las claves, una vez que las claves están en manos de varias personas, es imposible atribuir el uso a un usuario específico. Confiar únicamente en la autenticación de AAD facilita la vinculación del acceso al almacenamiento a un usuario. ",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de deshabilitar las claves de la cuenta de almacenamiento, de modo que solo se admita el acceso a AAD (y la SAS de delegación de usuarios).",
+ "waf": "Seguridad"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "La inclusión de una aplicación en contenedores puede mejorar la densidad de la máquina virtual y ahorrar dinero en su escalado",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Costar"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Use los datos del registro de actividad para identificar \"cuándo\", \"quién\", \"qué\" y \"cómo\" se está viendo o cambiando la seguridad de la cuenta de almacenamiento (es decir, claves de cuenta de almacenamiento, directivas de acceso, etc.).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de usar Azure Monitor para auditar las operaciones del plano de control en la cuenta de almacenamiento",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Una directiva de expiración de claves le permite establecer un recordatorio para la rotación de las claves de acceso a la cuenta. El recordatorio se muestra si ha transcurrido el intervalo especificado y las teclas aún no se han girado.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Use un inquilino de Entra para administrar los recursos de Azure, a menos que tenga un requisito normativo o empresarial claro para varios inquilinos.",
- "waf": "Operaciones"
+ "text": "Al usar claves de cuenta de almacenamiento, considere la posibilidad de habilitar una \"directiva de expiración de claves\"",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Entra",
- "severity": "Bajo",
- "text": "Asegúrese de que tiene un enfoque de automatización multiinquilino para administrar los inquilinos de Microsoft Entra ID",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Una directiva de expiración de SAS especifica un intervalo recomendado durante el cual la SAS es válida. Las directivas de expiración de SAS se aplican a una SAS de servicio o a una SAS de cuenta. Cuando un usuario genera una SAS de servicio o una SAS de cuenta con un intervalo de validez mayor que el intervalo recomendado, verá una advertencia.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de configurar una directiva de expiración de SAS",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "Entra",
- "severity": "Bajo",
- "text": "Aprovechamiento de Azure Lighthouse para la administración multiinquilino",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Las directivas de acceso almacenadas ofrecen la opción de revocar los permisos de una SAS de servicio sin tener que volver a generar las claves de la cuenta de almacenamiento. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de vincular SAS a una directiva de acceso almacenada",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Asegúrese de que el asociado usa Azure Lighthouse para administrar el inquilino",
- "waf": "Costar"
+ "text": "Considere la posibilidad de configurar el repositorio de código fuente de la aplicación para detectar cadenas de conexión protegidas y claves de cuenta de almacenamiento.",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "348ef254-c27d-442e-abba-c7571559ab91",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Lo ideal es que la aplicación use una identidad administrada para autenticarse en Azure Storage. Si esto no es posible, considere la posibilidad de tener la credencial de almacenamiento (cadena de conexión, clave de cuenta de almacenamiento, SAS, credencial de entidad de servicio) en Azure KeyVault o un servicio equivalente.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Aplique un modelo RBAC que se alinee con su modelo operativo en la nube. Ámbito y asignación entre grupos de administración y suscripciones.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "text": "Considere la posibilidad de almacenar cadenas de conexión en Azure KeyVault (en escenarios en los que las identidades administradas no son posibles)",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Use los tiempos de expiración a corto plazo en una SAS de servicio SAS ad hoc o en una SAS de cuenta. De esta manera, incluso si una SAS se ve comprometida, es válida solo por un corto tiempo. Esta práctica es especialmente importante si no puede hacer referencia a una directiva de acceso almacenada. Los tiempos de expiración a corto plazo también limitan la cantidad de datos que se pueden escribir en un blob al limitar el tiempo disponible para cargarlo.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Utilice solo el tipo de autenticación Cuenta profesional o educativa para todos los tipos de cuenta. Evite usar la cuenta de Microsoft",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "text": "Esfuércese por obtener períodos de validez cortos para SAS ad-hoc",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Al crear una SAS, sea lo más específico y restrictivo posible. Prefiera una SAS para un solo recurso y operación en lugar de una SAS que proporciona un acceso mucho más amplio.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Utilice solo grupos para asignar permisos. Agregue grupos locales al grupo solo de ID de Entra si ya existe un sistema de administración de grupos.",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
- "service": "Entra",
- "severity": "Bajo",
- "text": "Aplicación de directivas de acceso condicional de Microsoft Entra ID para cualquier usuario con derechos en entornos de Azure",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "text": "Aplicación de un ámbito limitado a una SAS",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
- "service": "Entra",
- "severity": "Alto",
- "text": "Aplicación de la autenticación multifactor para cualquier usuario con derechos en los entornos de Azure",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Una SAS puede incluir parámetros en los que las direcciones IP de cliente o los intervalos de direcciones están autorizados a solicitar un recurso mediante la SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de definir el ámbito de SAS en una dirección IP de cliente específica, siempre que sea posible",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "Entra",
- "severity": "Medio",
- "text": "Aplique la administración de identidades privilegiadas (PIM) de Microsoft Entra ID para establecer el acceso permanente cero y los privilegios mínimos",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Una SAS no puede restringir la cantidad de datos que carga un cliente; Dado el modelo de precios de la cantidad de almacenamiento a lo largo del tiempo, podría tener sentido validar si los clientes cargaron contenido de gran tamaño malintencionado.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de comprobar los datos cargados, después de que los clientes hayan usado una SAS para cargar un archivo. ",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "Entra",
- "severity": "Medio",
- "text": "Si planea cambiar de servicios de dominio de Active Directory a servicios de dominio de Entra, evalúe la compatibilidad de todas las cargas de trabajo",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Al acceder a Blob Storage a través de SFTP mediante una \"cuenta de usuario local\", no se aplican los controles RBAC \"habituales\". El acceso a blobs a través de NFS o REST puede ser más restrictivo que el acceso SFTP. Desafortunadamente, a partir de principios de 2023, los usuarios locales son la única forma de administración de identidades que actualmente se admite para el punto de conexión SFTP",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "SFTP: Limite la cantidad de \"usuarios locales\" para el acceso SFTP y audite si el acceso es necesario a lo largo del tiempo.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Integre los registros de identificador de Microsoft Entra con Azure Monitor central de la plataforma. Azure Monitor permite una única fuente de información en torno a los datos de registro y supervisión en Azure, lo que ofrece a las organizaciones opciones nativas en la nube para cumplir los requisitos relacionados con la recopilación y retención de registros.",
+ "text": "SFTP: El punto de conexión SFTP no admite ACL similares a POSIX.",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "El almacenamiento es compatible con CORS (Cross-Origin Resource Sharing), es decir, una función HTTP que permite a las aplicaciones web de un dominio diferente relajar la política del mismo origen. Al habilitar CORS, mantenga CorsRules con el mínimo privilegio.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Implemente un acceso de emergencia o cuentas de emergencia para evitar el bloqueo de cuentas en todo el inquilino",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "Evite las políticas de CORS demasiado amplias",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "Entra",
- "severity": "Medio",
- "text": "Evite el uso de cuentas sincronizadas locales para las asignaciones de roles de identificador de Microsoft Entra.",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Los datos en reposo siempre están cifrados en el lado del servidor y, además, también pueden estar cifrados en el lado del cliente. El cifrado del lado del servidor puede realizarse mediante una clave administrada por la plataforma (predeterminada) o una clave administrada por el cliente. El cifrado del lado cliente puede producirse haciendo que el cliente proporcione una clave de cifrado y descifrado por blob a Azure Storage o controlando completamente el cifrado en el lado cliente. por lo tanto, no depende en absoluto de Azure Storage para obtener garantías de confidencialidad.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Determine cómo se deben cifrar los datos en reposo. Comprender el modelo de subprocesos para los datos.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Cuando sea necesario, use Microsoft Entra ID Application Proxy para proporcionar a los usuarios remotos acceso seguro y autenticado a las aplicaciones internas (hospedadas en la nube o en el entorno local).",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "text": "Determine qué cifrado de plataforma se debe usar o si se debe usar.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
"severity": "Medio",
- "text": "Aproveche un diseño de red basado en la topología de red radial tradicional para escenarios de red que requieren la máxima flexibilidad.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "Determine qué cifrado del lado del cliente se debe usar o si.",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Aproveche el Explorador de Resource Graph (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para buscar cuentas de almacenamiento que permitan el acceso anónimo a blobs.",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Asegúrese de que los servicios de redes compartidas, incluidas las puertas de enlace de ExpressRoute, las puertas de enlace de VPN y Azure Firewall o las aplicaciones virtuales de red de asociados en la red virtual del centro central. Si es necesario, implemente también servidores DNS.",
- "waf": "Costar"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "VNet",
- "severity": "Medio",
- "text": "Use una red DDoS o planes de protección IP para todas las direcciones IP públicas en las zonas de aterrizaje de la aplicación.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Considere si se necesita acceso público a blobs o si se puede deshabilitar para determinadas cuentas de almacenamiento. ",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
- "severity": "Medio",
- "text": "Al implementar tecnologías de redes de asociados o aplicaciones virtuales de red, siga las instrucciones del proveedor de asociados",
- "waf": "Fiabilidad"
- },
- {
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Si necesita el tránsito entre ExpressRoute y las puertas de enlace de VPN en escenarios radiales, use Azure Route Server.",
- "waf": "Seguridad"
+ "text": "Si es necesario para las cargas de trabajo de Windows de AKS, se pueden usar contenedores HostProcess",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
- "service": "ARS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Si utiliza el servidor de rutas, utilice un prefijo /27 para la subred del servidor de rutas.",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
- "service": "VNet",
- "severity": "Medio",
- "text": "En el caso de las arquitecturas de red con varias topologías en estrella tipo hub-and-spoke en las regiones de Azure, use emparejamientos de red virtual global entre las redes virtuales del centro para conectar las regiones entre sí.",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
+ "text": "Utilice KEDA si ejecuta cargas de trabajo controladas por eventos",
"waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
- "service": "VNet",
- "severity": "Medio",
- "text": "Use Azure Monitor para redes para supervisar el estado de un extremo a otro de las redes en Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Uso de Dapr para facilitar el desarrollo de microservicios",
"waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
- "severity": "Medio",
- "text": "Al conectar redes virtuales de radio a la red virtual del centro central, tenga en cuenta los límites de emparejamiento de red virtual (500), el número máximo de prefijos que se pueden anunciar a través de ExpressRoute (1000)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Uso de la oferta de AKS respaldada por SLA",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
- "severity": "Medio",
- "text": "Tenga en cuenta el límite de rutas por tabla de rutas (400).",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Uso de presupuestos de interrupción en el pod y las definiciones de implementación",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
- "service": "VNet",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
"severity": "Alto",
- "text": "Use la opción \"Permitir tráfico a la red virtual remota\" al configurar emparejamientos de red virtual",
+ "text": "Si usa un registro privado, configure la replicación de regiones para almacenar imágenes en varias regiones",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Cuando use ExpressRoute Direct, configure MACsec para cifrar el tráfico en el nivel de capa dos entre los enrutadores de la organización y MSEE. El diagrama muestra este cifrado en el flujo.",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Usar una aplicación externa como kubecost para asignar costos a diferentes usuarios",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
"severity": "Bajo",
- "text": "En escenarios en los que MACsec no es una opción (por ejemplo, no usar ExpressRoute Direct), use una puerta de enlace de VPN para establecer túneles IPsec a través del emparejamiento privado de ExpressRoute.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Seguridad"
+ "text": "Usar el modo de reducción vertical para eliminar/desasignar nodos",
+ "waf": "Costar"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Asegúrese de que no se usan espacios de direcciones IP superpuestos en las regiones de Azure y las ubicaciones locales",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Cuando sea necesario, use la GPU de partición de varias instancias en clústeres de AKS",
+ "waf": "Costar"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
- "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Utilice direcciones IP de los rangos de asignación de direcciones para Internet privadas (RFC 1918).",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Seguridad"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
- "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
- "severity": "Alto",
- "text": "Asegúrese de que no se desperdicie espacio de direcciones IP, no cree redes virtuales innecesariamente grandes (por ejemplo, /16)",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Rendimiento"
+ "text": "Si se ejecuta un clúster de desarrollo y pruebas, use NodePool Start/Stop",
+ "waf": "Costar"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
- "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
- "service": "VNet",
- "severity": "Alto",
- "text": "Evite el uso de intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Uso de Azure Policy para Kubernetes para garantizar el cumplimiento de clústeres",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
"severity": "Medio",
- "text": "En entornos en los que la resolución de nombres en Azure es todo lo que se requiere, use Azure Private DNS para la resolución con una zona delegada para la resolución de nombres (como \"azure.contoso.com\").",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operaciones"
+ "text": "Separe las aplicaciones del plano de control con grupos de nodos de usuario/sistema",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
- "service": "DNS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Agregue taint a su grupo de nodos del sistema para que sea dedicado",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
"severity": "Medio",
- "text": "En el caso de los entornos en los que se requiere la resolución de nombres en Azure y en el entorno local, considere la posibilidad de usar Azure DNS Private Resolver.",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "text": "Utilice un registro privado para sus imágenes, como ACR",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
- "severity": "Bajo",
- "text": "Las cargas de trabajo especiales que requieren e implementan su propio DNS (como Red Hat OpenShift) deben utilizar su solución DNS preferida.",
- "waf": "Operaciones"
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
+ "severity": "Medio",
+ "text": "Escanea tus imágenes en busca de vulnerabilidades",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "614658d3-558f-4d77-849b-821112df27ee",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
- "service": "DNS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
"severity": "Alto",
- "text": "Habilite el registro automático de Azure DNS para administrar automáticamente el ciclo de vida de los registros DNS de las máquinas virtuales implementadas en una red virtual.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operaciones"
+ "text": "Definición de los requisitos de separación de aplicaciones (espacio de nombres/grupo de nodos/clúster)",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
- "service": "Bastion",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
"severity": "Medio",
- "text": "Considere la posibilidad de usar Azure Bastion para conectarse de forma segura a la red.",
+ "text": "Almacenamiento de los secretos en Azure Key Vault con el controlador del almacén de secretos de CSI",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
- "service": "Bastion",
- "severity": "Medio",
- "text": "Use Azure Bastion en una subred /26 o superior.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Si usa entidades de servicio para el clúster, actualice las credenciales periódicamente (por ejemplo, trimestralmente)",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "WAF",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
"severity": "Medio",
- "text": "Use directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "Si es necesario, agregue el servicio de administración de claves, etcd, cifrado",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Al usar Azure Front Door y Azure Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Azure Front Door. Bloquee Azure Application Gateway para recibir tráfico solo de Azure Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "Si es necesario, considere la posibilidad de usar Proceso confidencial para AKS",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
- "severity": "Alto",
- "text": "La implementación de WAF y otros servidores proxy inversos son necesarios para las conexiones HTTP/S entrantes, impleméntelos dentro de una red virtual de zona de aterrizaje y junto con las aplicaciones que protegen y exponen a Internet.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de usar Defender para contenedores",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
"severity": "Alto",
- "text": "Use planes de protección IP o de red DDoS de Azure para ayudar a proteger los puntos de conexión de direcciones IP públicas dentro de las redes virtuales.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Uso de identidades administradas en lugar de entidades de servicio",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
- "service": "VNet",
- "severity": "Alto",
- "text": "Evalúe y revise la configuración y la estrategia del tráfico saliente de la red antes del próximo cambio importante. El 30 de septiembre de 2025, se retirará el acceso saliente predeterminado para las nuevas implementaciones y solo se permitirán las configuraciones de acceso explícitas",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Integración de la autenticación con AAD (mediante la integración administrada)",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
- "severity": "Alto",
- "text": "Agregue configuraciones de diagnóstico para guardar registros relacionados con DDoS para todas las direcciones IP públicas protegidas (DDoS IP o Protección de red).",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Limitar el acceso a admin kubeconfig (get-credentials --admin)",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
"severity": "Medio",
- "text": "Asegúrese de que ha investigado la posibilidad de usar ExpressRoute como conexión principal a Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Rendimiento"
+ "text": "Integración de la autorización con RBAC de AAD",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "description": "Puede usar la anteposición de AS y los pesos de conexión para influir en el tráfico de Azure al entorno local, y la gama completa de atributos de BGP en sus propios enrutadores para influir en el tráfico del entorno local a Azure.",
- "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Uso de espacios de nombres para restringir el privilegio RBAC en Kubernetes",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
+ "service": "AKS",
"severity": "Medio",
- "text": "Cuando use varios circuitos ExpressRoute o varias ubicaciones locales, asegúrese de optimizar el enrutamiento con atributos BGP, si se prefieren determinadas rutas de acceso.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidad"
+ "text": "Para la administración de acceso a identidades de pods, use Azure AD Workload Identity (versión preliminar)",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
- "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
+ "service": "AKS",
"severity": "Medio",
- "text": "Asegúrese de que usa la SKU correcta para las puertas de enlace de ExpressRoute/VPN en función de los requisitos de ancho de banda y rendimiento.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Rendimiento"
+ "text": "En el caso de los inicios de sesión no interactivos de AKS, use kubelogin (versión preliminar)",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Asegúrese de que usa circuitos ExpressRoute de datos ilimitados solo si alcanza el ancho de banda que justifica su costo.",
- "waf": "Costar"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Deshabilitación de cuentas locales de AKS",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Aproveche la SKU local de ExpressRoute para reducir el costo de los circuitos, si la ubicación de emparejamiento de los circuitos admite las regiones de Azure para la SKU local.",
- "waf": "Costar"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Configure, si es necesario, el acceso al clúster Just-In-Time",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
- "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Implemente una puerta de enlace de ExpressRoute con redundancia de zona en las regiones de Azure admitidas.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Configure si es necesario el acceso condicional de AAD para AKS",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "En escenarios que requieren un ancho de banda superior a 10 Gbps o puertos dedicados de 10/100 Gbps, use ExpressRoute Direct.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si es necesario para las cargas de trabajo de Windows AKS, configure gMSA ",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "service": "AKS",
"severity": "Medio",
- "text": "Cuando se requiera una latencia baja o el rendimiento del entorno local a Azure sea superior a 10 Gbps, habilite FastPath para omitir la puerta de enlace de ExpressRoute de la ruta de acceso de datos.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Rendimiento"
+ "text": "Para un control más preciso, considere la posibilidad de utilizar una identidad de Kubelet administrada",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/vpnGateways",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
- "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
- "service": "VPN",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "service": "AKS",
"severity": "Medio",
- "text": "Use puertas de enlace de VPN con redundancia de zona para conectar sucursales o ubicaciones remotas a Azure (donde estén disponibles).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "text": "Si utiliza AGIC, no comparta un AppGW entre clústeres",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/vpnGateways",
- "checklist": "Azure Landing Zone Review",
- "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
- "service": "VPN",
- "severity": "Medio",
- "text": "Use dispositivos VPN redundantes en las instalaciones (activo/activo o activo/pasivo).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "No use el complemento de enrutamiento HTTP de AKS, use en su lugar la entrada NGINX administrada con el complemento de enrutamiento de aplicaciones.",
"waf": "Fiabilidad"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Si usa ExpressRoute Direct, considere la posibilidad de usar circuitos locales de ExpressRoute a las regiones locales de Azure para ahorrar costos",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Costar"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "En el caso de las cargas de trabajo de Windows, use las redes aceleradas",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Cuando se requiere aislamiento de tráfico o ancho de banda dedicado, por ejemplo, para separar entornos de producción y no de producción, use circuitos ExpressRoute diferentes. Le ayudará a garantizar dominios de enrutamiento aislados y a aliviar los riesgos de vecinos ruidosos.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Utilice el ALB estándar (en lugar del básico)",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "service": "AKS",
"severity": "Medio",
- "text": "Supervise la disponibilidad y el uso de ExpressRoute mediante Express Route Insights integrado.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operaciones"
+ "text": "Si usa Azure CNI, considere la posibilidad de usar diferentes subredes para NodePools",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
- "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
"severity": "Medio",
- "text": "Use el Monitor de conexión para la supervisión de la conectividad en toda la red, especialmente entre el entorno local y Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operaciones"
+ "text": "Use puntos de conexión privados (preferidos) o puntos de conexión de servicio de red virtual para acceder a los servicios PaaS desde el clúster",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
- "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Use circuitos ExpressRoute de diferentes ubicaciones de emparejamiento para obtener redundancia.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Elija el mejor complemento de red de CNI para sus necesidades (se recomienda Azure CNI)",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Use VPN de sitio a sitio como conmutación por error de ExpressRoute, especialmente si solo usa un único circuito ExpressRoute.",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Si usa CNI de Azure, ajuste el tamaño de la subred en consecuencia teniendo en cuenta el número máximo de pods por nodo",
+ "waf": "Rendimiento"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
- "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "Alto",
- "text": "Si utiliza una tabla de rutas en GatewaySubnet, asegúrese de que las rutas de puerta de enlace se propagan.",
- "waf": "Fiabilidad"
+ "text": "Si usa Azure CNI, compruebe el número máximo de pods o nodo (valor predeterminado 30)",
+ "waf": "Rendimiento"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "d581a947-69a2-4783-942e-9df3664324c8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "En el caso de las aplicaciones internas, las organizaciones suelen abrir toda la subred de AKS en sus firewalls. Esto también abre el acceso de red a los nodos y, potencialmente, también a los pods (si se usa Azure CNI). Si las direcciones IP de LoadBalancer están en una subred diferente, solo esta debe estar disponible para los clientes de la aplicación. Otra razón es que si las direcciones IP de la subred de AKS son un recurso escaso, el consumo de sus direcciones IP para los servicios reducirá la escalabilidad máxima del clúster.",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si usa servicios de LoadBalancer de dirección IP privada, use una subred dedicada (no la subred de AKS)",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "Alto",
- "text": "Si usa ExpressRoute, el enrutamiento local debe ser dinámico: en caso de que se produzca un error de conexión, debe converger a la conexión restante del circuito. La carga debe compartirse entre ambas conexiones, idealmente como activa/activa, aunque también se admite activa/pasiva.",
+ "text": "Dimensione el rango de direcciones IP del servicio en consecuencia (limitará la escalabilidad del clúster)",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si es necesario, agregue su propio complemento CNI",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si es necesario, configure la dirección IP pública por nodo en AKS",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "service": "AKS",
"severity": "Medio",
- "text": "Asegúrese de que los dos vínculos físicos del circuito ExpressRoute están conectados a dos dispositivos perimetrales distintos de la red.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Use un controlador de entrada para exponer aplicaciones basadas en web en lugar de exponerlas con servicios de tipo LoadBalancer",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Asegúrese de que la detección de reenvío bidireccional (BFD) esté habilitada y configurada en los dispositivos de enrutamiento perimetral del cliente o proveedor.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Uso de Azure NAT Gateway como outboundType para escalar el tráfico de salida",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Conecte la puerta de enlace de ExpressRoute a dos o más circuitos de diferentes ubicaciones de emparejamiento para una mayor resistencia.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Uso de asignaciones dinámicas de direcciones IP para evitar el agotamiento de direcciones IP de Azure CNI",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Configure registros de diagnóstico y alertas para la puerta de enlace de red virtual de ExpressRoute.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operaciones"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Filtre el tráfico de salida con AzFW/NVA si sus requisitos de seguridad lo exigen",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
- "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "service": "AKS",
"severity": "Medio",
- "text": "Evite el uso de circuitos ExpressRoute para la comunicación de red virtual a red virtual.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Rendimiento"
+ "text": "Si utiliza un punto de conexión de API público, restrinja las direcciones IP que pueden acceder a él",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "service": "AKS",
"severity": "Alto",
- "text": "Use Azure Firewall para controlar el tráfico saliente de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado del tráfico Este/Oeste (si la organización lo requiere)",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Utilice clústeres privados si sus requisitos lo exigen",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"severity": "Medio",
- "text": "Cree una directiva global de Azure Firewall para controlar la posición de seguridad en todo el entorno de red global y asígnela a todas las instancias de Azure Firewall. Permita que las directivas granulares satisfagan los requisitos de regiones específicas delegando directivas de firewall incrementales a los equipos de seguridad locales a través del control de acceso basado en roles de Azure.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Para los nodos de AKS de Windows 2019 y 2022, se pueden usar directivas de red de Calico ",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
- "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
- "service": "Firewall",
- "severity": "Bajo",
- "text": "Configure los proveedores de seguridad SaaS de socios compatibles dentro de Firewall Manager si la organización desea utilizar dichas soluciones para ayudar a proteger las conexiones salientes.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Habilitación de una opción de directiva de red de Kubernetes (Calico/Azure)",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"severity": "Alto",
- "text": "Use reglas de red basadas en FQDN y Azure Firewall con proxy DNS para filtrar el tráfico de salida a Internet a través de protocolos no admitidos por las reglas de aplicación.",
+ "text": "Uso de directivas de red de Kubernetes para aumentar la seguridad dentro del clúster",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"severity": "Alto",
- "text": "Use Azure Firewall Premium para obtener seguridad y protección adicionales.",
+ "text": "Uso de un WAF para cargas de trabajo web (interfaces de usuario o API)",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
- "severity": "Alto",
- "text": "Configure el modo de inteligencia sobre amenazas de Azure Firewall en Alerta y denegación para obtener protección adicional.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Uso de DDoS Standard en la red virtual de AKS",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
- "service": "Firewall",
- "severity": "Alto",
- "text": "Configure el modo IDPS de Azure Firewall en Denegar para obtener protección adicional.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si es necesario, agregue el proxy HTTP de la empresa",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
- "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
- "service": "Firewall",
- "severity": "Alto",
- "text": "En el caso de las subredes de las redes virtuales que no están conectadas a Virtual WAN, adjunte una tabla de rutas para que el tráfico de Internet se redirija a Azure Firewall o a una aplicación virtual de red",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de usar una malla de servicios para la administración avanzada de comunicaciones de microservicios",
"waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Agregue la configuración de diagnóstico para guardar registros, mediante la tabla de destino Recurso específico, para todas las implementaciones de Azure Firewall.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Configurar alertas sobre las métricas más críticas (consulte Container Insights para obtener recomendaciones)",
"waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
- "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
- "service": "Firewall",
- "severity": "Importante",
- "text": "Migre de las reglas de Azure Firewall clásico (si existen) a la directiva de firewall.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Consulte periódicamente Azure Advisor para obtener recomendaciones sobre el clúster",
"waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
- "service": "Firewall",
- "severity": "Alto",
- "text": "Use un prefijo /26 para las subredes de Azure Firewall.",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Habilitación de la rotación automática de certificados de AKS",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Organice las reglas dentro de la directiva de firewall en grupos de recopilación de reglas y colecciones de reglas en función de su frecuencia de uso",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Tenga un proceso regular para actualizar la versión de Kubernetes periódicamente (trimestralmente, por ejemplo) o use la característica de actualización automática de AKS",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
- "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Utilice grupos de IP o prefijos de IP para reducir el número de reglas de tabla de IP",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Utilice kured para las actualizaciones de nodos de Linux en caso de que no esté utilizando la actualización de imagen de nodo",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Evite los comodines como IP de origen para los DNAT, como * o cualquiera, debe especificar las direcciones IP de origen para los DNAT entrantes",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Disponer de un proceso regular para actualizar las imágenes de los nodos del clúster periódicamente (semanalmente, por ejemplo)",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Evite el agotamiento del puerto SNAT mediante la supervisión del uso del puerto SNAT, la evaluación de la configuración de la puerta de enlace NAT y la garantía de una conmutación por error sin problemas. Si el número de puertos se acerca al límite, es una señal de que el agotamiento de SNAT podría ser inminente.",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de implementar aplicaciones o configuraciones de clústeres en varios clústeres",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "346840b8-1064-496e-8396-4b1340172d52",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
- "service": "Firewall",
- "severity": "Alto",
- "text": "Habilitar la inspección TLS",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de usar la invocación de comandos de AKS en clústeres privados",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Utilice categorías web para permitir o denegar el acceso saliente a temas específicos.",
- "waf": "Rendimiento"
+ "text": "En el caso de los eventos planeados, considere la posibilidad de utilizar el drenaje automático de nodos",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Como parte de la inspección de TLS, planee la recepción de tráfico de Azure App Gateways para su inspección.",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Desarrollar sus propias prácticas de gobernanza para asegurarse de que los operadores no realicen cambios en el nodo RG (también conocido como 'infra RG')",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Habilitación de la configuración del proxy DNS de Azure Firewall ",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Usar el nombre personalizado de Node RG (también conocido como 'Infra RG')",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "service": "AKS",
"severity": "Medio",
- "text": "Asegúrese de que haya una asignación de directiva para denegar direcciones IP públicas vinculadas directamente a máquinas virtuales",
- "waf": "Seguridad"
+ "text": "No use API de Kubernetes obsoletas en los manifiestos de YAML",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Integre Azure Firewall con Azure Monitor y habilite el registro de diagnóstico para almacenar y analizar los registros del firewall.",
+ "text": "Nodos de Windows de Taint",
"waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Implemente copias de seguridad para las reglas de firewall",
+ "text": "Mantener el nivel de revisión de los contenedores de Windows sincronizado con el nivel de revisión del host",
"waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "App Gateway",
- "severity": "Alto",
- "text": "Asegúrese de que la comunicación del plano de control para los servicios PaaS de Azure insertados en una red virtual no se interrumpa, por ejemplo, con una ruta 0.0.0.0/0 o una regla de grupo de seguridad de red que bloquee el tráfico del plano de control.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "A través de la configuración de diagnóstico en el nivel de clúster",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Envío de registros maestros (también conocidos como registros de API) a Azure Monitor o a la solución de administración de registros que prefiera",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "ExpressRoute",
- "severity": "Medio",
- "text": "Acceda a los servicios PaaS de Azure desde el entorno local a través de puntos de conexión privados y emparejamiento privado de ExpressRoute. Este método evita el tránsito a través de la Internet pública.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si es necesario, utilice instantáneas de nodePool",
+ "waf": "Costar"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
- "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "VNet",
- "severity": "Medio",
- "text": "No habilite los puntos de conexión de servicio de red virtual de forma predeterminada en todas las subredes.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de crear grupos de nodos de acceso puntual para cargas de trabajo no urgentes",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
- "severity": "Medio",
- "text": "Filtre el tráfico de salida a los servicios PaaS de Azure mediante FQDN en lugar de direcciones IP en Azure Firewall o una aplicación virtual de red para evitar la filtración de datos. Si usa Private Link, puede bloquear todos los FQDN, de lo contrario, permita solo los servicios PaaS necesarios.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de utilizar el nodo virtual de AKS para una ráfaga rápida",
+ "waf": "Operaciones"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "Alto",
- "text": "Use al menos un prefijo /27 para las subredes de puerta de enlace",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
- "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
- "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
- "service": "NSG",
- "severity": "Medio",
- "text": "No confíe en las reglas predeterminadas de entrada del grupo de seguridad de red que usan la etiqueta de servicio VirtualNetwork para limitar la conectividad.",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
- "service": "NSG",
- "severity": "Medio",
- "text": "Use grupos de seguridad de red para ayudar a proteger el tráfico entre subredes, así como el tráfico este/oeste a través de la plataforma (tráfico entre zonas de aterrizaje).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Seguridad"
+ "text": "Supervise las métricas de clúster con Container Insights (u otras herramientas como Prometheus)",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
- "severity": "Medio",
- "text": "El equipo de aplicaciones debe usar grupos de seguridad de aplicaciones en los grupos de seguridad de red de nivel de subred para ayudar a proteger las máquinas virtuales de varios niveles dentro de la zona de aterrizaje.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Almacene y analice los registros del clúster con Container Insights (u otras herramientas como Telegraf/ElasticSearch)",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
"severity": "Medio",
- "text": "Use grupos de seguridad de red y grupos de seguridad de aplicaciones para microsegmentar el tráfico dentro de la zona de aterrizaje y evitar el uso de una aplicación virtual de red central para filtrar los flujos de tráfico.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Seguridad"
+ "text": "Supervisar el uso de la CPU y la memoria de los nodos",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "Medio",
- "text": "Habilite los registros de flujo de red virtual e introdúzcalos en Análisis de tráfico para obtener información sobre los flujos de tráfico internos y externos.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Seguridad"
+ "text": "Si usa Azure CNI, supervise el porcentaje de direcciones IP de pod consumidas por nodo",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
- "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "NSG",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "La E/S en el disco del sistema operativo es un recurso crítico. Si el sistema operativo de los nodos se limita en la E/S, esto podría dar lugar a un comportamiento impredecible, que normalmente terminaría en que el nodo se declarara NotReady",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
"severity": "Medio",
- "text": "Tenga en cuenta el límite de reglas de grupo de seguridad de red por grupo de seguridad de red (1000).",
- "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "waf": "Fiabilidad"
+ "text": "Supervisión de la profundidad de la cola de disco del sistema operativo en los nodos",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
- "service": "VWAN",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"severity": "Medio",
- "text": "Considere la posibilidad de utilizar Virtual WAN para simplificar la administración de redes de Azure y asegúrese de que el escenario se describe explícitamente en la lista de diseños de enrutamiento de Virtual WAN",
- "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "text": "Si no usa el filtrado de salida con AzFW/NVA, supervise los puertos SNAT asignados por ALB estándar",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
"severity": "Medio",
- "text": "Use un centro de conectividad de Virtual WAN por región de Azure para conectar varias zonas de aterrizaje entre sí en las regiones de Azure a través de una instancia global común de Azure Virtual WAN.",
- "waf": "Rendimiento"
+ "text": "Suscríbase a las notificaciones de estado de los recursos para el clúster de AKS",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "Bajo",
- "text": "Siga el principio \"el tráfico de Azure permanece en Azure\" para que la comunicación entre los recursos de Azure se produzca a través de la red troncal de Microsoft",
- "waf": "Rendimiento"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Configurar solicitudes y límites en las especificaciones del pod",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
- "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"severity": "Medio",
- "text": "Para la protección y el filtrado del tráfico de Internet saliente, implemente Azure Firewall en centros seguros",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Seguridad"
+ "text": "Aplicación de cuotas de recursos para espacios de nombres",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "VWAN",
- "severity": "Medio",
- "text": "Asegúrese de que la arquitectura de red está dentro de los límites de Azure Virtual WAN.",
- "waf": "Fiabilidad"
- },
- {
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
- "service": "VWAN",
- "severity": "Medio",
- "text": "Use Azure Monitor Insights para Virtual WAN para supervisar la topología de un extremo a otro de Virtual WAN, el estado y las métricas clave.",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Asegúrese de que la suscripción tiene suficiente cuota para escalar horizontalmente los grupos de nodos",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
- "service": "VWAN",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"severity": "Medio",
- "text": "Asegúrese de que las implementaciones de IaC no deshabiliten el tráfico de sucursal a sucursal en Virtual WAN, a menos que estos flujos se bloqueen explícitamente.",
- "waf": "Fiabilidad"
+ "text": "Uso del escalador automático de clústeres",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
- "service": "VWAN",
- "severity": "Medio",
- "text": "Use AS-Path como preferencia de enrutamiento del centro, ya que es más flexible que ExpressRoute o VPN.",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Personalización de la configuración de nodos para grupos de nodos de AKS",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
- "service": "VWAN",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"severity": "Medio",
- "text": "Asegúrese de que las implementaciones de IaC configuran la propagación basada en etiquetas en Virtual WAN, de lo contrario, la conectividad entre los centros virtuales se verá afectada.",
- "waf": "Fiabilidad"
- },
- {
- "ammp": true,
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "9c75dfef-573c-461c-a698-68598595581a",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
- "service": "VWAN",
- "severity": "Alto",
- "text": "Asigne suficiente espacio IP a los centros virtuales, idealmente un prefijo /23.",
- "waf": "Fiabilidad"
+ "text": "Usar el escalador automático horizontal de pods cuando sea necesario",
+ "waf": "Rendimiento"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "Los nodos más grandes aportarán un mayor rendimiento y características como discos efímeros y redes aceleradas, pero aumentarán el radio de explosión y disminuirán la granularidad de escalado",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
"severity": "Alto",
- "text": "Aproveche Azure Policy estratégicamente, defina controles para su entorno y use iniciativas de directivas para agrupar directivas relacionadas.",
- "waf": "Seguridad"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Medio",
- "text": "Asigne los requisitos normativos y de cumplimiento normativo a las definiciones de Azure Policy y a las asignaciones de roles de Azure.",
- "waf": "Seguridad"
+ "text": "Considere un tamaño de nodo adecuado, ni demasiado grande ni demasiado pequeño",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Medio",
- "text": null,
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si se requieren más de 5000 nodos para la escalabilidad, considere la posibilidad de usar un clúster de AKS adicional",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Medio",
- "text": "Administre las asignaciones de directivas en el nivel más alto adecuado con exclusiones en los niveles inferiores, si es necesario.",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de suscribirse a eventos de EventGrid para la automatización de AKS",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "43334f24-9116-4341-a2ba-527526944008",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
- "service": "Policy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
"severity": "Bajo",
- "text": "Use Azure Policy para controlar qué servicios pueden aprovisionar los usuarios en el nivel de suscripción o grupo de administración",
- "waf": "Seguridad"
+ "text": "Para una operación de ejecución prolongada en un clúster de AKS, considere la finalización de eventos",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Medio",
- "text": null,
- "waf": null
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Si es necesario, considere la posibilidad de usar Azure Dedicated Hosts para nodos de AKS",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "description": "La asignación del rol Colaborador de directivas de recursos a ámbitos específicos le permite delegar la administración de directivas a los equipos pertinentes. Por ejemplo, un equipo de TI central puede supervisar las directivas a nivel de grupo de administración, mientras que los equipos de aplicaciones se encargan de las directivas de sus suscripciones, lo que permite la gobernanza distribuida con el cumplimiento de los estándares de la organización.",
- "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
- "service": "Policy",
- "severity": "Medio",
- "text": "Asigne el rol integrado Colaborador de directivas de recursos en un ámbito determinado para habilitar la gobernanza de nivel de aplicación.",
- "waf": null
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Usar discos de sistema operativo efímeros",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "19048384-5c98-46cb-8913-156a12476e49",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Medio",
- "text": "Limite el número de asignaciones de Azure Policy realizadas en el ámbito del grupo de administración raíz para evitar la administración a través de exclusiones en ámbitos heredados.",
- "waf": null
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "En el caso de los discos no efímeros, use IOPS altas y discos de sistema operativo más grandes para los nodos cuando ejecute muchos pods o nodos, ya que requiere un alto rendimiento para ejecutar varios pods y generará registros enormes con umbrales de rotación de registros de AKS predeterminados",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
- "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
- "service": "Policy",
- "severity": "Medio",
- "text": "Si existen requisitos de soberanía de datos, se pueden implementar directivas de Azure para aplicarlos",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
+ "severity": "Bajo",
+ "text": "Para la opción de almacenamiento de hiperrendimiento, use discos Ultra en AKS",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
- "service": "Policy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
"severity": "Medio",
- "text": "En el caso de la Zona de Aterrizaje Soberana, la iniciativa política de referencia de la política de soberanía se despliega y asigna al nivel correcto de MG.",
- "waf": null
+ "text": "Evite mantener el estado en el clúster y almacene los datos fuera (AzStorage, AzSQL, Cosmos, etc.)",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
- "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
- "service": "Policy",
- "severity": null,
- "text": "En el caso de la Zona de Aterrizaje Soberana, se documentan los objetivos de control soberano para el mapeo de políticas.",
- "waf": "Seguridad"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
+ "severity": "Medio",
+ "text": "Si usa AzFiles Standard, considere AzFiles Premium o ANF por motivos de rendimiento",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
- "service": "Policy",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
"severity": "Medio",
- "text": "En el caso de la Zona de Aterrizaje Soberana, existe un proceso para el CRUD de \"Objetivos de Control Soberano para el mapeo de políticas\".",
- "waf": "Seguridad"
+ "text": "Si usa Azure Disks y AZ, considere la posibilidad de tener grupos de nodos dentro de una zona para el disco LRS con VolumeBindingMode:WaitForFirstConsumer para aprovisionar el almacenamiento en la zona correcta o use el disco ZRS para los grupos de nodos que abarquen varias zonas",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
- "severity": "Medio",
- "text": null,
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "text": "Familiarícese con los procedimientos recomendados de Key Vault, como las recomendaciones de aislamiento, el control de acceso, la protección de datos, la copia de seguridad y el registro.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Monitor",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
"severity": "Medio",
- "text": "Exporte los registros a Azure Storage si los requisitos de retención de registros superan los doce años. Use el almacenamiento inmutable con una directiva de escritura única y lectura múltiple para que los datos no se puedan borrar ni modificar durante un intervalo especificado por el usuario.",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": null
+ "text": "Key Vault es un servicio administrado y Microsoft se encargará de la conmutación por error dentro de la región y entre ellas. Familiarícese con la disponibilidad y la redundancia de Key Vault.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "service": "VM",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
"severity": "Medio",
- "text": "Supervise el desfase de configuración de la máquina virtual (VM) a nivel de sistema operativo mediante Azure Policy. La habilitación de las funcionalidades de auditoría de Azure Automanage Machine Configuration a través de la directiva ayuda a las cargas de trabajo del equipo de aplicaciones a consumir inmediatamente las funcionalidades de características con poco esfuerzo.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Operaciones"
+ "text": "El contenido del almacén de claves se replica dentro de la región y en una región secundaria a una distancia mínima de 150 millas, pero dentro de la misma geografía para mantener una alta durabilidad de las claves y los secretos. Familiarícese con la replicación de datos de Key Vault.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
"severity": "Medio",
- "text": "Use Azure Update Manager como mecanismo de aplicación de revisiones para máquinas virtuales Windows y Linux en Azure.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operaciones"
+ "text": "Durante la conmutación por error, no se pueden cambiar las configuraciones y valores de la directiva de acceso o del firewall. El almacén de claves estará en modo de solo lectura durante la conmutación por error. Familiarícese con las instrucciones de conmutación por error de Key Vault.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
"severity": "Medio",
- "text": null,
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operaciones"
+ "text": "Al realizar una copia de seguridad de un objeto de almacén de claves, como un secreto, una clave o un certificado, la operación de copia de seguridad descargará el objeto como un blob cifrado. Este blob no se puede descifrar fuera de Azure. Para obtener datos utilizables de este blob, debe restaurar el blob en un almacén de claves dentro de la misma suscripción de Azure y la misma geografía de Azure. Familiarícese con las instrucciones de copia de seguridad y restauración de Key Vault.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Network Watcher",
- "severity": "Medio",
- "text": "Utilice Network Watcher para supervisar de forma proactiva los flujos de tráfico",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "text": "Si desea protegerse contra la eliminación accidental o malintencionada de los secretos, configure las características de protección contra eliminación temporal y purga en el almacén de claves.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Monitor",
- "severity": "Medio",
- "text": "Use los registros de Azure Monitor para obtener información e informes.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Bajo",
+ "text": "Los recursos eliminados temporalmente de Key Vault se conservan durante un período establecido de 90 días naturales. Familiarícese con las instrucciones de eliminación temporal de Key Vault.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
- "service": "Monitor",
- "severity": null,
- "text": null,
- "waf": "Operaciones"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Bajo",
+ "text": "Descripción de las limitaciones de la copia de seguridad de Key Vault. Key Vault no admite la capacidad de realizar copias de seguridad de más de 500 versiones anteriores de un objeto de clave, secreto o certificado. Al intentar hacer una copia de seguridad de una clave, un secreto o un objeto de certificado, es posible que se produzca un error. No es posible eliminar versiones anteriores de una clave, un secreto o un certificado.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "Monitor",
- "severity": "Medio",
- "text": "Al usar el seguimiento de cambios e inventario a través de cuentas de Azure Automation, asegúrese de que ha seleccionado las regiones admitidas para vincular el área de trabajo de Log Analytics y las cuentas de automatización.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Bajo",
+ "text": "Actualmente, Key Vault no proporciona una manera de realizar una copia de seguridad de un almacén de claves completo en una sola operación y las claves, los secretos y los certificados deben respaldarse de forma individual. Familiarícese con las instrucciones de copia de seguridad y restauración de Key Vault.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Backup",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
"severity": "Medio",
- "text": "Al usar Azure Backup, tenga en cuenta los diferentes tipos de copia de seguridad (GRS, ZRS Y LRS), ya que la configuración predeterminada es GRS",
+ "text": "Se recomienda la protección de purga cuando se utilizan claves para el cifrado para evitar la pérdida de datos. La protección de purga es un comportamiento opcional de Key Vault y no está habilitada de forma predeterminada. La protección de purga solo se puede habilitar una vez que se habilita la eliminación temporal. Se puede activar a través de CLI, PowerShell o Portal.",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "VM",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
"severity": "Medio",
- "text": "Use directivas de Azure para implementar automáticamente configuraciones de software a través de extensiones de máquina virtual y aplicar una configuración de máquina virtual de línea base compatible.",
+ "text": "Se recomienda RBAC para controlar el acceso al almacén de claves. Familiarícese con las instrucciones de control de acceso de Key Vault.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "description": "Las características de configuración de invitado de Azure Policy pueden auditar y corregir la configuración de la máquina (por ejemplo, el sistema operativo, la aplicación, el entorno) para asegurarse de que los recursos se alinean con las configuraciones esperadas, y Update Management puede aplicar la administración de revisiones para las máquinas virtuales.",
- "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "VM",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
"severity": "Medio",
- "text": "Supervise el desfase de la configuración de seguridad de la máquina virtual a través de Azure Policy.",
- "waf": "Seguridad"
+ "text": "Implementar una política de control de errores a nivel global",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
"severity": "Medio",
- "text": "Use Azure Site Recovery para escenarios de recuperación ante desastres de Azure a Azure Virtual Machines. Esto le permite replicar cargas de trabajo en todas las regiones.",
+ "text": "Asegúrese de que todas las políticas de API incluyan un elemento.",
"waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "Backup",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
"severity": "Medio",
- "text": "Use funcionalidades de copia de seguridad nativas de Azure o una solución de copia de seguridad de terceros compatible con Azure.",
+ "text": "Uso de fragmentos de políticas para evitar repetir las mismas definiciones de políticas en varias API",
"waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad para las máquinas virtuales en las regiones en las que se admiten.",
- "waf": "Fiabilidad"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Si planeas monetizar tus API, revisa el artículo \"Soporte de monetización\" para conocer las prácticas recomendadas",
+ "waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
"severity": "Alto",
- "text": "Evite ejecutar una carga de trabajo de producción en una sola máquina virtual.",
- "waf": "Fiabilidad"
+ "text": "Habilitación de la configuración de diagnóstico para exportar registros a Azure Monitor",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
"severity": "Medio",
- "text": "Azure Load Balancer y Application Gateway distribuyen el tráfico de red entrante entre varios recursos.",
- "waf": "Fiabilidad"
+ "text": "Habilitación de Application Insights para obtener telemetría más detallada",
+ "waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "WAF",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
"severity": "Alto",
- "text": "Agregue la configuración de diagnóstico para guardar los registros de WAF de los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway. Revise periódicamente los registros para comprobar si hay ataques y detecciones de falsos positivos.",
+ "text": "Configurar alertas sobre las métricas más críticas",
"waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "WAF",
- "severity": "Medio",
- "text": "Envíe registros de WAF desde los servicios de entrega de aplicaciones, como Azure Front Door y Azure Application Gateway, a Microsoft Sentinel. Detecte ataques e integre la telemetría de WAF en su entorno general de Azure.",
- "waf": "Operaciones"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
+ "severity": "Alto",
+ "text": "Asegúrese de que los certificados SSL personalizados se almacenan en Azure Key Vault para que se pueda acceder a ellos y actualizarlos de forma segura",
+ "waf": "Seguridad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "5017f154-e3ab-4369-9829-e7e316183687",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
"severity": "Alto",
- "text": "Uso de Azure Key Vault para almacenar los secretos y las credenciales",
+ "text": "Protección de las solicitudes entrantes a las API (plano de datos) con Azure AD",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "guid": "a0477a20-9945-4bda-9333-4f2491163418",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
"severity": "Medio",
- "text": "Use diferentes instancias de Azure Key Vaults para diferentes aplicaciones y regiones para evitar límites de escala de transacciones y restringir el acceso a los secretos.",
+ "text": "Usar el identificador de Microsoft Entra para autenticar a los usuarios en el Portal para desarrolladores",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
"severity": "Medio",
- "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención de los objetos eliminados.",
+ "text": "Crear grupos adecuados para controlar la visibilidad de los productos",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Utilice la función Backends para eliminar las configuraciones redundantes de back-end de la API",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Usar valores con nombre para almacenar valores comunes que se pueden usar en directivas",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
"severity": "Medio",
- "text": "Siga un modelo de privilegios mínimos limitando la autorización para eliminar claves, secretos y certificados de forma permanente a roles de identificador personalizados especializados de Microsoft Entra.",
- "waf": "Seguridad"
+ "text": "En el caso de la recuperación ante desastres, aproveche el nivel premium con implementaciones escaladas en dos o más regiones para un acuerdo de nivel de servicio del 99,99 %",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
"severity": "Medio",
- "text": "Automatice el proceso de gestión y renovación de certificados con autoridades de certificación públicas para facilitar la administración.",
- "waf": "Seguridad"
+ "text": "Implemente al menos una unidad en dos o más zonas de disponibilidad para obtener un SLA aumentado del 99,99 %",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "913156a1-2476-4e49-b541-acdce979377b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Medio",
- "text": "Establezca un proceso automatizado para la rotación de claves y certificados.",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
+ "severity": "Alto",
+ "text": "Asegúrese de que haya una rutina de copia de seguridad automatizada",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
"severity": "Medio",
- "text": "Habilite el firewall y el punto de conexión de servicio de red virtual o el punto de conexión privado en el almacén para controlar el acceso al almacén de claves.",
- "waf": "Seguridad"
+ "text": "Use directivas para agregar una dirección URL de back-end de conmutación por error y el almacenamiento en caché para reducir las llamadas con errores.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
- "service": "Key Vault",
- "severity": "Medio",
- "text": "Use el área de trabajo de Log Analytics de Azure Monitor central de la plataforma para auditar el uso de claves, certificados y secretos en cada instancia de Key Vault.",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
+ "severity": "Bajo",
+ "text": "Si necesita iniciar sesión en niveles de alto rendimiento, tenga en cuenta la directiva de Event Hubs",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
"severity": "Medio",
- "text": "Delegue la creación de instancias de Key Vault y el acceso con privilegios, y use Azure Policy para aplicar una configuración coherente y compatible.",
- "waf": "Seguridad"
+ "text": "Aplicación de directivas de limitación para controlar el número de solicitudes por segundo",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
"severity": "Medio",
- "text": "Use una instancia de Azure Key Vault por aplicación, por entorno, por región.",
- "waf": "Seguridad"
+ "text": "Configurar el escalado automático para escalar horizontalmente el número de instancias cuando aumenta la carga",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
"severity": "Medio",
- "text": "Si desea traer sus propias claves, es posible que esto no sea compatible con todos los servicios considerados. Implemente la mitigación pertinente para que las inconsistencias no obstaculicen los resultados deseados. Elija los pares de regiones y las regiones de recuperación ante desastres adecuados que minimicen la latencia.",
- "waf": "Seguridad"
+ "text": "Implemente puertas de enlace autohospedadas en las que Azure no tenga una región cercana a las API de back-end.",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
- "service": "Key Vault",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
"severity": "Medio",
- "text": "En el caso de la zona de aterrizaje soberana, use el HSM administrado de Azure Key Vault para almacenar los secretos y las credenciales.",
- "waf": "Seguridad"
+ "text": "Use el nivel premium para las cargas de trabajo de producción.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
- "service": "Entra",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
"severity": "Medio",
- "text": "Use las funcionalidades de informes de Microsoft Entra ID para generar informes de auditoría de control de acceso.",
- "waf": "Seguridad"
+ "text": "En el modelo de varias regiones, use directivas para enrutar las solicitudes a los back-ends regionales en función de la disponibilidad o la latencia.",
+ "waf": "Fiabilidad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "09945bda-4333-44f2-9911-634182ba5275",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
- "service": "Defender",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
"severity": "Alto",
- "text": "Habilite la administración de la posición de seguridad en la nube de Defender para todas las suscripciones.",
- "waf": "Seguridad"
+ "text": "Tenga en cuenta los límites de APIM",
+ "waf": "Fiabilidad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
- "service": "Defender",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
"severity": "Alto",
- "text": "Habilite un plan de protección de cargas de trabajo en la nube de Defender para servidores en todas las suscripciones.",
- "waf": "Seguridad"
+ "text": "Asegúrese de que las implementaciones de puerta de enlace autohospedadas sean resistentes.",
+ "waf": "Fiabilidad"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
- "service": "Defender",
- "severity": "Alto",
- "text": "Habilite los planes de protección de cargas de trabajo en la nube de Defender para recursos de Azure en todas las suscripciones.",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Uso de Azure Front Door delante de APIM para la implementación en varias regiones",
+ "waf": "Rendimiento"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
- "service": "VM",
- "severity": "Alto",
- "text": "Habilite Endpoint Protection en servidores IaaS.",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Implementación del servicio dentro de una red virtual (VNet)",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
- "link": "https://learn.microsoft.com/azure/security-center/",
- "service": "VM",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
"severity": "Medio",
- "text": "Supervise el desfase de revisiones del sistema operativo base a través de los registros de Azure Monitor y Defender for Cloud.",
+ "text": "Implemente grupos de seguridad de red (NSG) en las subredes para restringir o supervisar el tráfico hacia/desde APIM.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
"severity": "Medio",
- "text": "Conecte las configuraciones de recursos predeterminadas a un área de trabajo centralizada de Log Analytics de Azure Monitor.",
+ "text": "Implemente puntos de conexión privados para filtrar el tráfico entrante cuando APIM no se implemente en una red virtual.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
- "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
- "service": "Entra",
- "severity": "Medio",
- "text": "En el caso de la zona de aterrizaje soberana, los registros de transparencia están habilitados en el inquilino de Entra ID.",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
+ "severity": "Alto",
+ "text": "Deshabilitar el acceso a la red pública",
"waf": "Seguridad"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
- "service": "Entra",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
"severity": "Medio",
- "text": "En el caso de la zona de aterrizaje soberana, la caja de seguridad del cliente está habilitada en el inquilino de Entra ID.",
- "waf": "Seguridad"
+ "text": "Simplifique la administración con scripts de automatización de PowerShell",
+ "waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Storage",
- "severity": "Alto",
- "text": "La transferencia segura a cuentas de almacenamiento debe estar habilitada",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Configure APIM a través de la infraestructura como código. Revise las prácticas recomendadas de DevOps desde el acelerador de zonas de aterrizaje de API de Cloud Adaption Framework",
+ "waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
- "service": "Storage",
- "severity": "Alto",
- "text": "Habilite la eliminación temporal del contenedor para que la cuenta de almacenamiento recupere un contenedor eliminado y su contenido.",
- "waf": "Seguridad"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Promover el uso de la extensión APIM de Visual Studio Code para un desarrollo de API más rápido",
+ "waf": "Operaciones"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "service": "Key Vault",
- "severity": "Alto",
- "text": "Use secretos de Key Vault para evitar codificar de forma rígida información confidencial, como credenciales (máquinas virtuales, contraseñas de usuario), certificados o claves.",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "Implemente DevOps y CI/CD en su flujo de trabajo",
"waf": "Operaciones"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
+ "severity": "Medio",
+ "text": "API seguras mediante la autenticación de certificados de cliente",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
"service": "APIM",
"severity": "Medio",
- "text": "Implementar una política de control de errores a nivel global",
- "waf": "Operaciones"
+ "text": "Servicios de back-end seguros mediante la autenticación de certificados de cliente",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
"service": "APIM",
"severity": "Medio",
- "text": "Asegúrese de que todas las políticas de API incluyan un elemento.",
- "waf": "Operaciones"
+ "text": "Revise el artículo \"Recomendaciones para mitigar las 10 principales amenazas de seguridad de la API de OWASP\" y compruebe qué se aplica a sus API",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
"service": "APIM",
"severity": "Medio",
- "text": "Uso de fragmentos de políticas para evitar repetir las mismas definiciones de políticas en varias API",
- "waf": "Operaciones"
+ "text": "Utilice la función Autorizaciones para simplificar la administración del token de OAuth 2.0 para las API de back-end",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
"service": "APIM",
- "severity": "Medio",
- "text": "Si planeas monetizar tus API, revisa el artículo \"Soporte de monetización\" para conocer las prácticas recomendadas",
- "waf": "Operaciones"
+ "severity": "Alto",
+ "text": "Utilice la versión más reciente de TLS al cifrar la información en tránsito. Deshabilite los protocolos y cifrados obsoletos e innecesarios cuando sea posible.",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
"service": "APIM",
"severity": "Alto",
- "text": "Habilitación de la configuración de diagnóstico para exportar registros a Azure Monitor",
- "waf": "Operaciones"
+ "text": "Asegúrese de que los secretos (valores con nombre) se almacenan en Azure Key Vault para que se pueda acceder a ellos y actualizarlos de forma segura",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
"service": "APIM",
"severity": "Medio",
- "text": "Habilitación de Application Insights para obtener telemetría más detallada",
- "waf": "Operaciones"
+ "text": "Uso de identidades administradas para autenticarse en otros recursos de Azure siempre que sea posible",
+ "waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.ApiManagement/service",
"checklist": "Azure API Management Review",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
"service": "APIM",
"severity": "Alto",
- "text": "Configurar alertas sobre las métricas más críticas",
- "waf": "Operaciones"
+ "text": "Uso del firewall de aplicaciones web (WAF) mediante la implementación de Application Gateway delante de APIM",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
- "severity": "Alto",
- "text": "Asegúrese de que los certificados SSL personalizados se almacenan en Azure Key Vault para que se pueda acceder a ellos y actualizarlos de forma segura",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus Premium proporciona cifrado de datos en reposo. Si usa su propia clave, los datos se siguen cifrando con la clave administrada por Microsoft, pero además la clave administrada por Microsoft se cifrará con la clave administrada por el cliente. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "Bajo",
+ "text": "Usar la opción de clave administrada por el cliente en el cifrado de datos en reposo cuando sea necesario",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "La comunicación entre una aplicación cliente y un espacio de nombres de Azure Service Bus se cifra mediante la seguridad de la capa de transporte (TLS). Los espacios de nombres de Azure Service Bus permiten a los clientes enviar y recibir datos con TLS 1.0 y versiones posteriores. Para aplicar medidas de seguridad más estrictas, puede configurar el espacio de nombres de Service Bus para que requiera que los clientes envíen y reciban datos con una versión más reciente de TLS.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "text": "Aplicar una versión mínima requerida de la seguridad de la capa de transporte (TLS) para las solicitudes ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Al crear un espacio de nombres de Service Bus, se crea automáticamente una regla de SAS denominada RootManageSharedAccessKey para el espacio de nombres. Esta política tiene permisos de administración para todo el espacio de nombres. Se recomienda tratar esta regla como una cuenta raíz administrativa y no usarla en la aplicación. Se recomienda usar AAD como proveedor de autenticación con RBAC. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "text": "Evite usar la cuenta root cuando no sea necesario",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Una aplicación cliente de Service Bus que se ejecuta dentro de una aplicación de Azure App Service o en una máquina virtual con entidades administradas habilitadas para la compatibilidad con recursos de Azure no necesita controlar reglas y claves de SAS, ni ningún otro token de acceso. La aplicación cliente solo necesita la dirección del punto de conexión del espacio de nombres de mensajería de Service Bus. ",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "Medio",
+ "text": "Cuando sea posible, la aplicación debe usar una identidad administrada para autenticarse en Azure Service Bus. Si no es así, considere la posibilidad de tener la credencial de almacenamiento (SAS, credencial de entidad de servicio) en Azure Key Vault o en un servicio equivalente",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Al crear permisos, proporcione un control detallado sobre el acceso de un cliente a Azure Service Bus. Los permisos de Azure Service Bus pueden y deben limitarse al nivel de recurso individual, por ejemplo, cola, tema o suscripción. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
"severity": "Alto",
- "text": "Protección de las solicitudes entrantes a las API (plano de datos) con Azure AD",
+ "text": "Usar RBAC del plano de datos con privilegios mínimos",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Los registros de recursos de Azure Service Bus incluyen registros operativos, redes virtuales y registros de filtrado de IP. Los registros de auditoría en tiempo de ejecución capturan información de diagnóstico agregada para varias operaciones de acceso al plano de datos (como enviar o recibir mensajes) en Service Bus.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
"severity": "Medio",
- "text": "Usar el identificador de Microsoft Entra para autenticar a los usuarios en el Portal para desarrolladores",
+ "text": "Habilite el registro para la investigación de seguridad. Use Azure Monitor para realizar un seguimiento de los registros de recursos y los registros de auditoría en tiempo de ejecución (actualmente solo disponible en el nivel Premium)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "De forma predeterminada, Azure Service Bus tiene una dirección IP pública y es accesible desde Internet. Los puntos de conexión privados permiten el tráfico entre la red virtual y los recorridos de Azure Service Bus a través de la red troncal de Microsoft. Además de eso, debe deshabilitar los puntos de conexión públicos si no se utilizan. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
"severity": "Medio",
- "text": "Crear grupos adecuados para controlar la visibilidad de los productos",
+ "text": "Considere la posibilidad de usar puntos de conexión privados para acceder a Azure Service Bus y deshabilitar el acceso a la red pública cuando corresponda.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Con el firewall de IP, puede restringir aún más el punto de conexión público a solo un conjunto de direcciones IPv4 o rangos de direcciones IPv4 en notación CIDR (Classless Inter-Domain Routing). ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
"severity": "Medio",
- "text": "Utilice la función Backends para eliminar las configuraciones redundantes de back-end de la API",
- "waf": "Operaciones"
+ "text": "Considere la posibilidad de permitir solo el acceso al espacio de nombres de Azure Service Bus desde direcciones IP o intervalos específicos",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Usar valores con nombre para almacenar valores comunes que se pueden usar en directivas",
- "waf": "Operaciones"
+ "text": "Asegúrese de que usa la SKU de Application Gateway v2",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
"severity": "Medio",
- "text": "En el caso de la recuperación ante desastres, aproveche el nivel premium con implementaciones escaladas en dos o más regiones para un acuerdo de nivel de servicio del 99,99 %",
- "waf": "Fiabilidad"
+ "text": "Asegúrese de que usa la SKU estándar para los equilibradores de carga de Azure.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
"severity": "Medio",
- "text": "Implemente al menos una unidad en dos o más zonas de disponibilidad para obtener un SLA aumentado del 99,99 %",
- "waf": "Fiabilidad"
+ "text": "Asegúrese de que las direcciones IP de front-end de Load Balancers sean redundantes de zona (a menos que necesite front-end zonales).",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
- "severity": "Alto",
- "text": "Asegúrese de que haya una rutina de copia de seguridad automatizada",
- "waf": "Fiabilidad"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Application Gateways v2 debe implementarse en subredes con prefijos IP iguales o mayores que /24",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "description": "La administración de proxies inversos en general y WAF en particular está más cerca de la aplicación que de las redes, por lo que pertenecen a la misma suscripción que la aplicación. La centralización de Application Gateway y WAF en la suscripción de conectividad puede ser correcta si la administra un solo equipo.",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Use directivas para agregar una dirección URL de back-end de conmutación por error y el almacenamiento en caché para reducir las llamadas con errores.",
- "waf": "Fiabilidad"
+ "text": "Implemente Azure Application Gateway v2 o NVA de asociados que se usan para proxy de conexiones HTTP(S) entrantes dentro de la red virtual de la zona de aterrizaje y con las aplicaciones que protegen.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
- "severity": "Bajo",
- "text": "Si necesita iniciar sesión en niveles de alto rendimiento, tenga en cuenta la directiva de Event Hubs",
- "waf": "Operaciones"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Utilice una red DDoS o planes de protección IP para todas las direcciones IP públicas en las zonas de aterrizaje de aplicaciones.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Aplicación de directivas de limitación para controlar el número de solicitudes por segundo",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
- "waf": "Rendimiento"
+ "text": "Configure el escalado automático con una cantidad mínima de instancias de dos.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Configurar el escalado automático para escalar horizontalmente el número de instancias cuando aumenta la carga",
- "waf": "Rendimiento"
+ "text": "Implementación de Application Gateway en zonas de disponibilidad",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Al usar Front Door y Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Front Door. Bloquee Application Gateway para recibir tráfico solo desde Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "severity": "Alto",
+ "text": "Use el Administrador de tráfico para entregar aplicaciones globales que abarquen protocolos distintos de HTTP/S.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Fiabilidad"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "Bajo",
+ "text": "Si los usuarios solo necesitan acceso a aplicaciones internas, ¿se ha considerado Microsoft Entra ID Application Proxy como una alternativa a Azure Virtual Desktop (AVD)?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"severity": "Medio",
- "text": "Implemente puertas de enlace autohospedadas en las que Azure no tenga una región cercana a las API de back-end.",
- "waf": "Rendimiento"
+ "text": "Para reducir el número de puertos de firewall abiertos para las conexiones entrantes en la red, considere la posibilidad de usar el proxy de aplicación de Microsoft Entra ID para proporcionar a los usuarios remotos acceso seguro y autenticado a las aplicaciones internas.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
- "severity": "Medio",
- "text": "Use el nivel premium para las cargas de trabajo de producción.",
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
+ "severity": "Alto",
+ "text": "Use Azure NAT Gateway en lugar de las reglas de salida de Load Balancer para mejorar la escalabilidad de SNAT",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
- "severity": "Medio",
- "text": "En el modelo de varias regiones, use directivas para enrutar las solicitudes a los back-ends regionales en función de la disponibilidad o la latencia.",
- "waf": "Fiabilidad"
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Habilite el conjunto de reglas de protección contra bots de WAF de Azure Application Gateway. Las reglas de bots detectan bots buenos y malos.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
"severity": "Alto",
- "text": "Tenga en cuenta los límites de APIM",
- "waf": "Fiabilidad"
+ "text": "Asegúrese de que la característica de inspección del cuerpo de la solicitud esté habilitada en la directiva WAF de Azure Application Gateway.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
+ "service": "App Gateway",
"severity": "Alto",
- "text": "Asegúrese de que las implementaciones de puerta de enlace autohospedadas sean resistentes.",
- "waf": "Fiabilidad"
+ "text": "Ajuste el WAF de Azure Application Gateway en modo de detección para la carga de trabajo. Reduzca las detecciones de falsos positivos.",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
- "severity": "Medio",
- "text": "Uso de Azure Front Door delante de APIM para la implementación en varias regiones",
- "waf": "Rendimiento"
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Implemente la directiva de WAF para Application Gateway en modo \"Prevención\".",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Implementación del servicio dentro de una red virtual (VNet)",
+ "text": "Agregue limitación de velocidad al WAF de Azure Application Gateway. La limitación de velocidad bloquea a los clientes que envían accidental o intencionalmente grandes cantidades de tráfico en un corto período de tiempo.",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Implemente grupos de seguridad de red (NSG) en las subredes para restringir o supervisar el tráfico hacia/desde APIM.",
+ "text": "Use un umbral alto para los límites de velocidad de WAF de Azure Application Gateway. Los umbrales de límite de velocidad altos evitan bloquear el tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura. ",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
+ "severity": "Bajo",
+ "text": "Si no espera tráfico de todas las regiones geográficas, utilice filtros geográficos para bloquear el tráfico de países no esperados.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Implemente puntos de conexión privados para filtrar el tráfico entrante cuando APIM no se implemente en una red virtual.",
+ "text": "Especifique la ubicación desconocida (ZZ) al filtrar geográficamente el tráfico con el WAF de Azure Application Gateway. Evite bloquear accidentalmente solicitudes legítimas cuando las direcciones IP no puedan coincidir geográficamente.",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
- "severity": "Alto",
- "text": "Deshabilitar el acceso a la red pública",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Use la versión más reciente del conjunto de reglas WAF de Azure Application Gateway. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Simplifique la administración con scripts de automatización de PowerShell",
+ "text": "Agregue la configuración de diagnóstico para guardar los registros de WAF de Azure Application Gateway.",
"waf": "Operaciones"
},
{
- "checklist": "Azure API Management Review",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Configure APIM a través de la infraestructura como código. Revise las prácticas recomendadas de DevOps desde el acelerador de zonas de aterrizaje de API de Cloud Adaption Framework",
+ "text": "Envíe registros de WAF de Azure Application Gateway a Microsoft Sentinel.",
"waf": "Operaciones"
},
{
- "checklist": "Azure API Management Review",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Promover el uso de la extensión APIM de Visual Studio Code para un desarrollo de API más rápido",
+ "text": "Defina la configuración de WAF de Azure Application Gateway como código. Mediante el uso de código, puede adoptar más fácilmente una nueva versión del conjunto de reglas y obtener protección adicional.",
"waf": "Operaciones"
},
{
- "checklist": "Azure API Management Review",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Implemente DevOps y CI/CD en su flujo de trabajo",
+ "text": "Utilice directivas de WAF en lugar de la configuración de WAF heredada.",
"waf": "Operaciones"
},
{
- "checklist": "Azure API Management Review",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "API seguras mediante la autenticación de certificados de cliente",
+ "text": "Filtre el tráfico entrante en los back-end para que solo acepten conexiones de la subred de Application Gateway, por ejemplo, con grupos de seguridad de red.",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
- "severity": "Medio",
- "text": "Servicios de back-end seguros mediante la autenticación de certificados de cliente",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Debe cifrar el tráfico a los servidores backend.",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
- "severity": "Medio",
- "text": "Revise el artículo \"Recomendaciones para mitigar las 10 principales amenazas de seguridad de la API de OWASP\" y compruebe qué se aplica a sus API",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Debe utilizar un firewall de aplicaciones web.",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Utilice la función Autorizaciones para simplificar la administración del token de OAuth 2.0 para las API de back-end",
+ "text": "Redirigir HTTP a HTTPS",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Utilice cookies administradas por puerta de enlace para dirigir el tráfico de una sesión de usuario al mismo servidor para su procesamiento",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
"severity": "Alto",
- "text": "Utilice la versión más reciente de TLS al cifrar la información en tránsito. Deshabilite los protocolos y cifrados obsoletos e innecesarios cuando sea posible.",
+ "text": "Habilite el drenaje de conexiones durante las actualizaciones de servicio planeadas para evitar la pérdida de conexión con los miembros existentes del grupo de back-end",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
- "severity": "Alto",
- "text": "Asegúrese de que los secretos (valores con nombre) se almacenan en Azure Key Vault para que se pueda acceder a ellos y actualizarlos de forma segura",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
+ "severity": "Bajo",
+ "text": "Cree páginas de error personalizadas para mostrar una experiencia de usuario personalizada",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Edite las solicitudes HTTP y los encabezados de respuesta para facilitar el enrutamiento y el intercambio de información entre el cliente y el servidor",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Configure Front Door para optimizar el enrutamiento del tráfico web global y el rendimiento del usuario final de primer nivel, así como la confiabilidad a través de una rápida conmutación por error global",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Usar el equilibrio de carga de la capa de transporte",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
"severity": "Medio",
- "text": "Uso de identidades administradas para autenticarse en otros recursos de Azure siempre que sea posible",
+ "text": "Configure el enrutamiento basado en el host o el nombre de dominio para varias aplicaciones web en una sola puerta de enlace",
"waf": "Seguridad"
},
{
- "checklist": "Azure API Management Review",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
- "severity": "Alto",
- "text": "Uso del firewall de aplicaciones web (WAF) mediante la implementación de Application Gateway delante de APIM",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
+ "severity": "Medio",
+ "text": "Centralice la administración de certificados SSL para reducir la sobrecarga de cifrado y descifrado de una granja de servidores back-end",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
"severity": "Bajo",
- "text": "Consulte la arquitectura de aplicación web de redundancia de zona de alta disponibilidad de línea de base para conocer los procedimientos recomendados",
- "waf": "Fiabilidad"
+ "text": "Use Application Gateway para obtener compatibilidad nativa con los protocolos WebSocket y HTTP/2",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
"severity": "Medio",
- "text": "Utilice los niveles Premium y Estándar. Estos niveles admiten ranuras de ensayo y copias de seguridad automatizadas.",
+ "text": "Aproveche el cuaderno de estrategias de resistencia de FTA para Azure Data Factory",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad cuando corresponda regionalmente (requiere el nivel Premium v2 o v3)",
+ "text": "Uso de canalizaciones con redundancia de zona en regiones que admiten zonas de disponibilidad",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
"severity": "Medio",
- "text": "Implementación de comprobaciones de estado",
+ "text": "Uso de DevOps para realizar copias de seguridad de las plantillas de ARM con la integración de Github/Azure DevOps ",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
- "severity": "Alto",
- "text": "Consulte los procedimientos recomendados de copia de seguridad y restauración para Azure App Service",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "Medio",
+ "text": "Asegúrese de replicar las máquinas virtuales de Integration Runtime autohospedadas en otra región ",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
- "severity": "Alto",
- "text": "Implementación de los procedimientos recomendados de confiabilidad de Azure App Service",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "Medio",
+ "text": "Asegúrese de replicar o duplicar la red en la región hermana. Tiene que hacer una copia de la red virtual en otra región",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "description": "Si las canalizaciones de ADF usan Key Vault, no tiene que hacer nada para replicar Key Vault. Key Vault es un servicio administrado y Microsoft se encarga de ello por ti",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
"severity": "Bajo",
- "text": "Familiarizarse con cómo mover una aplicación de App Service a otra región durante un desastre",
- "waf": "Fiabilidad"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
- "severity": "Alto",
- "text": "Familiarizarse con la compatibilidad con la confiabilidad en Azure App Service",
+ "text": "Si utiliza la integración de Keyvault, utilice el Acuerdo de Nivel de Servicio de Keyvault para comprender su disponibilidad",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Asegúrese de que \"Siempre activado\" está habilitado para las aplicaciones de funciones que se ejecutan en un plan de App Service",
- "waf": "Fiabilidad"
+ "text": "Si usa certificados TLS administrados por el cliente con Azure Front Door, use la versión de certificado \"más reciente\". Reduzca el riesgo de interrupciones causadas por la renovación manual de certificados.",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Supervisión de instancias de App Service mediante comprobaciones de estado",
- "waf": "Fiabilidad"
+ "text": "Use Azure Front Door con directivas de WAF para entregar y ayudar a proteger aplicaciones HTTP/S globales que abarcan varias regiones de Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Supervisión de la disponibilidad y la capacidad de respuesta de la aplicación web o el sitio web mediante pruebas de disponibilidad de Application Insights",
- "waf": "Fiabilidad"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
- "severity": "Bajo",
- "text": "Uso de la prueba estándar de Application Insights para supervisar la disponibilidad y la capacidad de respuesta de la aplicación web o el sitio web",
- "waf": "Fiabilidad"
+ "text": "Al usar Front Door y Application Gateway para ayudar a proteger las aplicaciones HTTP/S, use directivas de WAF en Front Door. Bloquee Application Gateway para recibir tráfico solo desde Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Use Azure Key Vault para almacenar los secretos que necesita la aplicación. Key Vault proporciona un entorno seguro y auditado para almacenar secretos y está bien integrado con App Service a través del SDK de Key Vault o las referencias de Key Vault de App Service.",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Uso de Key Vault para almacenar secretos",
+ "text": "Implemente la directiva de WAF para Front Door en modo \"Prevención\" para que el firewall de aplicaciones web tome las medidas adecuadas para permitir o denegar el tráfico.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Use una identidad administrada para conectarse a Key Vault mediante el SDK de Key Vault o a través de las referencias de Key Vault de App Service.",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Uso de la identidad administrada para conectarse a Key Vault",
+ "text": "Evite colocar el Administrador de tráfico detrás de la puerta principal.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Almacene el certificado TLS de App Service en Key Vault.",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Use Key Vault para almacenar el certificado TLS.",
+ "text": "Use el mismo nombre de dominio en Azure Front Door y en su origen. Los nombres de host no coincidentes pueden causar errores sutiles.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Los sistemas que procesan información confidencial deben estar aislados. Para ello, use planes del Servicio de aplicaciones o entornos del Servicio de aplicaciones independientes y considere la posibilidad de usar suscripciones o grupos de administración diferentes.",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "text": "Deshabilite los sondeos de estado cuando solo haya un origen en un grupo de origen de Azure Front Door.",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Aísle los sistemas que procesan información confidencial",
- "waf": "Seguridad"
+ "text": "Seleccione puntos de conexión de sondeo de estado correctos para Azure Front Door. Considere la posibilidad de crear puntos de conexión de estado que comprueben todas las dependencias de la aplicación.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Los discos locales de App Service no están cifrados y los datos confidenciales no deben almacenarse en ellos. (Por ejemplo: D:\\\\Local y %TMP%).",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "text": "Use sondeos de estado de HEAD con Azure Front Door para reducir el tráfico que Front Door envía a la aplicación.",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Use certificados TLS administrados con Azure Front Door. Reduzca los costos operativos y el riesgo de interrupciones debido a las renovaciones de certificados.",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
"severity": "Medio",
- "text": "No almacene datos confidenciales en el disco local",
+ "text": "Defina la configuración de WAF de Azure Front Door como código. Mediante el uso de código, puede adoptar más fácilmente una nueva versión del conjunto de reglas y obtener protección adicional.",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Use TLS de un extremo a otro con Azure Front Door. Use TLS para las conexiones de los clientes a Front Door y de Front Door al origen.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "En el caso de la aplicación web autenticada, use un proveedor de identidades bien establecido, como Azure AD o Azure AD B2C. Aproveche el marco de aplicaciones de su elección para integrarse con este proveedor o use la característica de autenticación o autorización del Servicio de aplicaciones.",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Usar un proveedor de identidades establecido para la autenticación",
+ "text": "Use el redireccionamiento de HTTP a HTTPS con Azure Front Door. Apoye a los clientes más antiguos redirigiéndolos automáticamente a una solicitud HTTPS.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Implemente código en App Service desde un entorno controlado y de confianza, como una canalización de implementación de DevOps bien administrada y segura. De este modo, se evita el código que no se ha controlado la versión y se ha comprobado que se implementará desde un host malintencionado.",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Implementación desde un entorno de confianza",
+ "text": "Habilite el WAF de Azure Front Door. Proteja su aplicación de una variedad de ataques.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Deshabilite la autenticación básica tanto para FTP/FTPS como para WebDeploy/SCM. Esto deshabilita el acceso a estos servicios y exige el uso de puntos de conexión protegidos de Azure AD para la implementación. Tenga en cuenta que el sitio de SCM también se puede abrir con credenciales de Azure AD.",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Deshabilitar la autenticación básica",
+ "text": "Ajuste el WAF de Azure Front Door para su carga de trabajo configurando el WAF en modo de detección para reducir y corregir las detecciones de falsos positivos.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Siempre que sea posible, use Managed Identity para conectarse a los recursos protegidos de Azure AD. Si esto no es posible, almacene los secretos en Key Vault y conéctese a Key Vault mediante una identidad administrada en su lugar.",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Uso de la identidad administrada para conectarse a los recursos",
+ "text": "Habilite la característica de inspección del cuerpo de la solicitud habilitada en la directiva WAF de Azure Front Door.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Cuando use imágenes almacenadas en Azure Container Registry, extráigalas mediante una identidad administrada.",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Extracción de contenedores mediante una identidad administrada",
+ "text": "Habilite los conjuntos de reglas predeterminados de WAF de Azure Front Door. Los conjuntos de reglas predeterminados detectan y bloquean ataques comunes.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Al configurar las opciones de diagnóstico de App Service, puede enviar todos los datos de telemetría a Log Analytics como destino central para el registro y la supervisión. Esto le permite supervisar la actividad en tiempo de ejecución de App Service, como los registros HTTP, los registros de aplicaciones, los registros de plataforma, ...",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Habilite el conjunto de reglas de protección contra bots de WAF de Azure Front Door. Las reglas de bots detectan bots buenos y malos.",
+ "waf": "Seguridad"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Envío de registros en tiempo de ejecución de App Service a Log Analytics",
+ "text": "Use la versión más reciente del conjunto de reglas de WAF de Azure Front Door. Las actualizaciones del conjunto de reglas se actualizan periódicamente para tener en cuenta el panorama actual de amenazas.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Configure una configuración de diagnóstico para enviar el registro de actividad a Log Analytics como destino central para el registro y la supervisión. Esto le permite supervisar la actividad del plano de control en el propio recurso de App Service.",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Envío de registros de actividad de App Service a Log Analytics",
+ "text": "Agregue la limitación de velocidad al WAF de Azure Front Door. La limitación de velocidad bloquea a los clientes que envían accidental o intencionalmente grandes cantidades de tráfico en un corto período de tiempo.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Controle el acceso saliente a la red mediante una combinación de integración de red virtual regional, grupos de seguridad de red y UDR. El tráfico debe enrutarse a una aplicación virtual de red, como Azure Firewall. Asegúrese de supervisar los registros del cortafuegos.",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
"severity": "Medio",
- "text": "El acceso a la red saliente debe controlarse",
+ "text": "Use un umbral alto para los límites de frecuencia de WAF de Azure Front Door. Los umbrales de límite de velocidad altos evitan bloquear el tráfico legítimo, a la vez que proporcionan protección contra un número extremadamente alto de solicitudes que podrían sobrecargar su infraestructura.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Puede proporcionar una dirección IP de salida estable mediante la integración de red virtual y una puerta de enlace NAT de red virtual o una aplicación virtual de red como Azure Firewall. Esto permite a la parte receptora incluir en la lista de permitidos en función de la IP, en caso de que sea necesario. Tenga en cuenta que para las comunicaciones con los servicios de Azure, a menudo no es necesario depender de la dirección IP y, en su lugar, se deben usar mecanismos como los puntos de conexión de servicio. (Además, el uso de puntos de conexión privados en el extremo receptor evita que se produzca SNAT y proporciona un intervalo de IP de salida estable).",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
"severity": "Bajo",
- "text": "Garantizar una IP estable para las comunicaciones salientes hacia las direcciones de Internet",
+ "text": "Si no espera tráfico de todas las regiones geográficas, utilice filtros geográficos para bloquear el tráfico de países no esperados.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Controle el acceso entrante a la red mediante una combinación de restricciones de acceso al Servicio de aplicaciones, puntos de conexión de servicio o puntos de conexión privados. Se pueden requerir y configurar diferentes restricciones de acceso para la propia aplicación web y el sitio de SCM.",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "Alto",
- "text": "El acceso a la red entrante debe controlarse",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Especifique la ubicación desconocida (ZZ) al filtrar geográficamente el tráfico con el WAF de Azure Front Door. Evite bloquear accidentalmente solicitudes legítimas cuando las direcciones IP no puedan coincidir geográficamente.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Protéjase contra el tráfico entrante malintencionado mediante un firewall de aplicaciones web como Application Gateway o Azure Front Door. Asegúrese de supervisar los registros del WAF.",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
- "severity": "Alto",
- "text": "Uso de un WAF delante de App Service",
- "waf": "Seguridad"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Capture registros y métricas activando la configuración de diagnóstico. Incluya registros de actividad de recursos, registros de acceso, registros de sondeo de estado y registros de WAF. Configura alertas.",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure App Service Review",
- "description": "Asegúrese de que no se pueda omitir el WAF bloqueando el acceso solo al WAF. Use una combinación de restricciones de acceso, puntos de conexión de servicio y puntos de conexión privados.",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "Alto",
- "text": "Evite que se omita WAF",
- "waf": "Seguridad"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Envíe registros de WAF de Azure Front Door a Microsoft Sentinel.",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure App Service Review",
- "description": "Establezca la directiva TLS mínima en 1.2 en la configuración de App Service.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Establezca la directiva TLS mínima en 1.2",
- "waf": "Seguridad"
+ "text": "Elija un método de enrutamiento que admita su estrategia de implementación. El método ponderado, que distribuye el tráfico en función del coeficiente de ponderación configurado, admite modelos activo-activo. Un valor basado en prioridades que configura la región primaria para recibir todo el tráfico y enviar tráfico a la región secundaria como copia de seguridad admite modelos activo-pasivo. Combine los métodos anteriores con la latencia para que el origen con la latencia más baja reciba tráfico.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Configure App Service para que use solo HTTPS. Esto hace que App Service se redirija de HTTP a HTTPS. Considere seriamente el uso de HTTP Strict Transport Security (HSTS) en su código o desde su WAF, que informa a los navegadores que solo se debe acceder al sitio mediante HTTPS.",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Usar solo HTTPS",
- "waf": "Seguridad"
+ "text": "Compatibilidad con la redundancia al tener varios orígenes en uno o varios grupos de back-end. Tenga siempre instancias redundantes de su aplicación y asegúrese de que cada instancia exponga un punto de conexión u origen. Puede colocar esos orígenes en uno o varios grupos de back-end.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "description": "No utilice caracteres comodín en la configuración de CORS, ya que esto permite que todos los orígenes accedan al servicio (lo que anula el propósito de CORS). En concreto, solo permite los orígenes que esperas poder acceder al servicio.",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
- "severity": "Alto",
- "text": "Los comodines no deben usarse para CORS",
- "waf": "Seguridad"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Establezca un tiempo de espera para reenviar solicitudes al back-end. Ajuste la configuración de tiempo de espera según las necesidades de sus terminales. Si no lo hace, Azure Front Door podría cerrar la conexión antes de que el origen envíe la respuesta. También puede reducir el tiempo de espera predeterminado para Azure Front Door si todos los orígenes tienen un tiempo de espera más corto.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "description": "La depuración remota no debe estar activada en producción, ya que esto abre puertos adicionales en el servicio, lo que aumenta la superficie expuesta a ataques. Tenga en cuenta que el servicio desactiva la depuración remota automáticamente después de 48 horas.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
- "severity": "Alto",
- "text": "Desactivar la depuración remota",
- "waf": "Seguridad"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Decida si la aplicación requiere afinidad de sesión. Si tiene requisitos de alta confiabilidad, le recomendamos que deshabilite la afinidad de sesión.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Habilite Defender para App Service. Esto (entre otras amenazas) detecta comunicaciones a direcciones IP maliciosas conocidas. Revise las recomendaciones de Defender para App Service como parte de las operaciones.",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Habilitación de Defender for Cloud: Defender for App Service",
+ "text": "Envíe el encabezado del host al back-end. Los servicios back-end deben tener en cuenta el nombre de host para que puedan crear reglas para aceptar el tráfico solo de ese host.",
"waf": "Seguridad"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure proporciona protección básica contra DDoS en su red, que se puede mejorar con funcionalidades inteligentes de DDoS Standard que aprenden sobre los patrones de tráfico normales y pueden detectar comportamientos inusuales. DDoS Standard se aplica a una red virtual, por lo que debe configurarse para el recurso de red delante de la aplicación, como Application Gateway o una aplicación virtual de red.",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Habilitación del estándar de protección DDoS en la red virtual de WAF",
- "waf": "Seguridad"
+ "text": "Use el almacenamiento en caché para los puntos de conexión que lo admitan.",
+ "waf": "Costar"
},
{
- "checklist": "Azure App Service Review",
- "description": "Cuando use imágenes almacenadas en Azure Container Registry, extráigalas a través de una red virtual desde Azure Container Registry mediante su punto de conexión privado y la configuración de la aplicación \"WEBSITE_PULL_IMAGE_OVER_VNET\".",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Bajo",
+ "text": "Deshabilite las comprobaciones de estado en grupos de back-end únicos. Si solo tiene un origen configurado en el grupo de origen de Azure Front Door, estas llamadas son innecesarias. Esto solo se recomienda si no puede tener varios orígenes en el punto de conexión.",
+ "waf": "Costar"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Extracción de contenedores a través de una red virtual",
- "waf": "Seguridad"
+ "text": "Se recomienda usar el nivel Premium para aprovechar los informes de seguridad, mientras que el perfil estándar de Azure Front Door solo proporciona informes de tráfico en análisis o informes integrados.",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure App Service Review",
- "description": "Realice una prueba de penetración en la aplicación web siguiendo las reglas de participación de las pruebas de penetración.",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Realizar una prueba de penetración",
- "waf": "Seguridad"
+ "text": "Utilice certificados TLS comodín cuando sea posible.",
+ "waf": "Operaciones"
},
{
- "checklist": "Azure App Service Review",
- "description": "Implemente código de confianza que se haya validado y analizado en busca de vulnerabilidades de acuerdo con las prácticas de DevSecOps.",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"severity": "Medio",
- "text": "Implementación de código validado",
- "waf": "Seguridad"
+ "text": "Optimice la cadena de consulta de la aplicación para el almacenamiento en caché. En el caso de contenido puramente estático, omita las cadenas de consulta para maximizar el uso de la memoria caché. Si la aplicación usa cadenas de consulta, considere la posibilidad de incluirlas en la clave de caché. La inclusión de las cadenas de consulta en la clave de caché permite a Azure Front Door servir respuestas almacenadas en caché u otras respuestas, en función de la configuración.",
+ "waf": "Rendimiento"
},
{
- "checklist": "Azure App Service Review",
- "description": "Utilice las versiones más recientes de plataformas, lenguajes de programación, protocolos y marcos compatibles.",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Usa la compresión de archivos cuando accedas a contenido descargable.",
+ "waf": "Rendimiento"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de migrar a la SKU Estándar o Premium si usa Azure Front Door clásico actualmente, ya que Azure Front Door clásico quedará en desuso en marzo de 2027.",
+ "waf": "Operaciones"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de usar el equilibrio de carga del Administrador de tráfico, Azure Front Door y un perfil de CDN de proveedor de CDN de terceros para el escenario crítico de alta disponibilidad. ",
+ "waf": "Fiabilidad"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Utilizar plataformas, lenguajes, protocolos y marcos actualizados",
+ "text": "Al usar Front Door con origen como servicios de aplicación, considere la posibilidad de bloquear el tráfico a los servicios de aplicaciones solo a través de Azure Front Door mediante restricciones de acceso. ",
"waf": "Seguridad"
},
{
+ "arm-service": "Microsoft.BotService/botServices",
"checklist": "Azure Bot Service",
"guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
"link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
@@ -6341,6 +8416,7 @@
"waf": "Fiabilidad"
},
{
+ "arm-service": "Microsoft.BotService/botServices",
"checklist": "Azure Bot Service",
"guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
"link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
@@ -6350,6 +8426,7 @@
"waf": "Fiabilidad"
},
{
+ "arm-service": "Microsoft.BotService/botServices",
"checklist": "Azure Bot Service",
"guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
"link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
@@ -6359,1468 +8436,1551 @@
"waf": "Fiabilidad"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
"severity": "Alto",
- "text": "Habilite la redundancia de zona para Azure Cache for Redis. Azure Cache for Redis admite configuraciones con redundancia de zona en los niveles Premium y Enterprise. Una caché con redundancia de zona puede colocar sus nodos en diferentes zonas de disponibilidad de Azure en la misma región. Elimina la interrupción del centro de datos o de la zona de disponibilidad como único punto de error y aumenta la disponibilidad general de la memoria caché.",
+ "text": "Seleccione el plan de hospedaje de funciones adecuado en función de los requisitos de su empresa y SLO",
"waf": "Fiabilidad"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
- "severity": "Medio",
- "text": "Configure la persistencia de datos para una instancia de Azure Cache for Redis. Dado que los datos de caché se almacenan en la memoria, un error poco frecuente y no planeado de varios nodos puede hacer que se eliminen todos los datos. Para evitar la pérdida completa de datos, la persistencia de Redis permite tomar instantáneas periódicas de los datos en memoria y almacenarlas en la cuenta de almacenamiento.",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "severity": "Alto",
+ "text": "Aproveche las zonas de disponibilidad cuando corresponda regionalmente (no disponible para el nivel de consumo)",
"waf": "Fiabilidad"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
"severity": "Medio",
- "text": "Use una cuenta de almacenamiento con redundancia geográfica para conservar los datos de Azure Cache for Redis o con redundancia zonal donde la redundancia geográfica no esté disponible",
+ "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
"waf": "Fiabilidad"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
- "severity": "Medio",
- "text": "Configure la replicación geográfica pasiva para instancias de Azure Cache for Redis Premium. La replicación geográfica es un mecanismo para vincular dos o más instancias de Azure Cache for Redis, que normalmente abarcan dos regiones de Azure. La replicación geográfica está diseñada principalmente para la recuperación ante desastres entre regiones. Dos instancias de caché de nivel Premium se conectan a través de la replicación geográfica de una manera que proporciona lecturas y escrituras en la caché principal, y esos datos se replican en la caché secundaria.",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
+ "severity": "Alto",
+ "text": "Si se implementa en un entorno aislado, use o migre a App Service Environment (ASE) v3",
"waf": "Fiabilidad"
},
{
- "checklist": "IoT Hub Review",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "Azure Functions",
"severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad si corresponden regionalmente (esto se habilita automáticamente)",
+ "text": "Asegúrese de que \"Siempre activado\" esté habilitado para todas las aplicaciones de funciones que se ejecutan en el plan de App Service",
"waf": "Fiabilidad"
},
{
- "checklist": "IoT Hub Review",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
"severity": "Medio",
- "text": "Tenga en cuenta las conmutaciones por error iniciadas por Microsoft. Microsoft los ejerce en situaciones excepcionales para conmutar por error todos los centros de IoT de una región afectada a la región emparejada geográficamente correspondiente.",
+ "text": "Empareje una aplicación de funciones con su propia cuenta de almacenamiento. Intente no volver a usar las cuentas de almacenamiento para las aplicaciones de funciones a menos que estén estrechamente acopladas",
"waf": "Fiabilidad"
},
{
- "checklist": "IoT Hub Review",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
- "severity": "Alto",
- "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
+ "severity": "Medio",
+ "text": "Aproveche Azure DevOps o GitHub para optimizar la CI/CD y proteger el código de la aplicación de funciones",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Azure Center for SAP solutions (ACSS) es una oferta de Azure que convierte a SAP en una carga de trabajo de nivel superior en Azure. ACSS es una solución integral que permite crear y ejecutar sistemas SAP como una carga de trabajo unificada en Azure y proporciona una base más fluida para la innovación. Puede aprovechar las capacidades de administración de los sistemas SAP basados en Azure nuevos y existentes.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Azure admite la automatización de implementaciones de SAP en Linux y Windows. SAP Deployment Automation Framework es una herramienta de orquestación de código abierto que puede implementar, instalar y mantener entornos SAP.",
+ "training": "https://github.com/Azure/sap-automation",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Realice una recuperación a un momento dado para sus bases de datos de producción en cualquier momento y en un período de tiempo que cumpla con su RTO; La recuperación a un momento dado suele incluir errores del operador que eliminan datos en la capa DBMS o a través de SAP, por cierto",
"waf": "Fiabilidad"
},
{
- "checklist": "IoT Hub Review",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "severity": "Alto",
- "text": "Obtenga información sobre cómo desencadenar una conmutación por error manual.",
+ "checklist": "SAP Checklist",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Pruebe los tiempos de copia de seguridad y recuperación para verificar que cumplan con los requisitos de RTO para restaurar todos los sistemas simultáneamente después de un desastre.",
"waf": "Fiabilidad"
},
{
- "checklist": "IoT Hub Review",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
+ "checklist": "SAP Checklist",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
"severity": "Alto",
- "text": "Obtenga información sobre cómo conmutar por recuperación después de una conmutación por error.",
+ "text": "Puede replicar el almacenamiento estándar entre regiones emparejadas, pero no puede usar el almacenamiento estándar para almacenar sus bases de datos o discos duros virtuales. Solo puede replicar copias de seguridad entre las regiones emparejadas que utilice. Para todos los demás datos, ejecute la replicación mediante características nativas de DBMS, como SQL Server Always On o SAP HANA System Replication. Utilice una combinación de Site Recovery, rsync o robocopy y otro software de terceros para la capa de aplicación de SAP.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
+ "checklist": "SAP Checklist",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"severity": "Medio",
- "text": "Aproveche el cuaderno de estrategias de resistencia de FTA para Azure Data Factory",
+ "text": "Al usar Azure Availability Zones para lograr una alta disponibilidad, debe tener en cuenta la latencia entre los servidores de aplicaciones SAP y los servidores de bases de datos. En el caso de las zonas con latencias altas, es necesario implementar procedimientos operativos para garantizar que los servidores de aplicaciones SAP y los servidores de bases de datos se ejecuten en la misma zona en todo momento.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
"severity": "Alto",
- "text": "Uso de canalizaciones con redundancia de zona en regiones que admiten zonas de disponibilidad",
+ "text": "Configure las conexiones de ExpressRoute desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria. Además, como alternativa al uso de ExpressRoute, considere la posibilidad de configurar conexiones VPN desde el entorno local a las regiones de recuperación ante desastres de Azure principal y secundaria.",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
- "severity": "Medio",
- "text": "Uso de DevOps para realizar copias de seguridad de las plantillas de ARM con la integración de Github/Azure DevOps ",
+ "checklist": "SAP Checklist",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "Replique el contenido del almacén de claves, como certificados, secretos o claves, en todas las regiones para poder descifrar los datos de la región de recuperación ante desastres.",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "checklist": "SAP Checklist",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
"severity": "Medio",
- "text": "Asegúrese de replicar las máquinas virtuales de Integration Runtime autohospedadas en otra región ",
+ "text": "Empareje las redes virtuales principal y de recuperación ante desastres. Por ejemplo, para la replicación del sistema HANA, una red virtual de base de datos de SAP HANA debe estar emparejada con la red virtual de base de datos de SAP HANA del sitio de recuperación ante desastres.",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
- "severity": "Medio",
- "text": "Asegúrese de replicar o duplicar la red en la región hermana. Tiene que hacer una copia de la red virtual en otra región",
+ "checklist": "SAP Checklist",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "Si usa el almacenamiento de Azure NetApp Files para las implementaciones de SAP, como mínimo, cree dos cuentas de Azure NetApp Files en el nivel Premium, en dos regiones.",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "description": "Si las canalizaciones de ADF usan Key Vault, no tiene que hacer nada para replicar Key Vault. Key Vault es un servicio administrado y Microsoft se encarga de ello por ti",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
- "severity": "Bajo",
- "text": "Si utiliza la integración de Keyvault, utilice el Acuerdo de Nivel de Servicio de Keyvault para comprender su disponibilidad",
+ "checklist": "SAP Checklist",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Se debe usar la tecnología de replicación de base de datos nativa para sincronizar la base de datos en un par de alta disponibilidad.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
- "severity": "Medio",
- "text": "Use el token revocable de larga duración, almacene en caché el token y adquiera el token de forma silenciosa mediante la biblioteca de identidades de Microsoft",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "El CIDR de la red virtual (VNet) principal no debe entrar en conflicto ni superponerse con el CIDR de la red virtual del sitio de recuperación ante desastres",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
- "severity": "Medio",
- "text": "Asegúrese de que los flujos de usuario de inicio de sesión estén respaldados y sean resistentes. Asegúrese de que se ha realizado una copia de seguridad del código que usa para iniciar sesión en los usuarios y se puede recuperar. Interfaces resilientes con procesos externos",
+ "checklist": "SAP Checklist",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Use Site Recovery para replicar un servidor de aplicaciones en un sitio de recuperación ante desastres. Site Recovery también puede ayudar a replicar máquinas virtuales de clúster de servicios centrales en el sitio de recuperación ante desastres. Al invocar la recuperación ante desastres, deberá volver a configurar el clúster de Linux Pacemaker en el sitio de recuperación ante desastres (por ejemplo, reemplazar el VIP o el SBD, ejecutar corosync.conf, etc.).",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
- "severity": "Medio",
- "text": "Los activos de marca personalizados deben estar alojados en una CDN",
- "waf": "Rendimiento"
+ "checklist": "SAP Checklist",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Considere la disponibilidad del software de SAP frente a puntos únicos de fallo. Esto incluye puntos únicos de falla dentro de aplicaciones como DBMS utilizados en las arquitecturas SAP NetWeaver y SAP S/4HANA, SAP ABAP y ASCS + SCS. También, otras herramientas como SAP Web Dispatcher.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
- "severity": "Bajo",
- "text": "Tener varios proveedores de identidad (es decir, iniciar sesión con sus cuentas de Microsoft, Google, Facebook)",
+ "checklist": "SAP Checklist",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "En el caso de SAP y bases de datos de SAP, considere la posibilidad de implementar clústeres de conmutación por error automática. En Windows, los clústeres de conmutación por error de Windows Server admiten la conmutación por error. En Linux, Linux Pacemaker o herramientas de terceros, como SIOS Protection Suite y Veritas InfoScale, admiten la conmutación por error.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidad"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Azure no admite arquitecturas en las que las máquinas virtuales principal y secundaria compartan almacenamiento para los datos de DBMS. Para la capa DBMS, el patrón de arquitectura común es replicar bases de datos al mismo tiempo y con pilas de almacenamiento diferentes a las que usan las máquinas virtuales principales y secundarias.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "Medio",
- "text": "Siga las reglas de la máquina virtual para la alta disponibilidad en el nivel de máquina virtual (discos premium, dos o más en una región, en diferentes zonas de disponibilidad)",
+ "checklist": "SAP Checklist",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Los datos de DBMS y los archivos de registro de transacciones/puesta al día se almacenan en el almacenamiento en bloque compatible con Azure o en Azure NetApp Files. Azure Files o Azure Premium Files no se admiten como almacenamiento para datos de DBMS ni archivos de registro de puesta al día con la carga de trabajo de SAP.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "Medio",
- "text": "¡No repliques! La replicación puede crear problemas con la sincronización de directorios",
+ "checklist": "SAP Checklist",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Puede usar discos compartidos de Azure en Windows para componentes ASCS + SCS y escenarios específicos de alta disponibilidad. Configure los clústeres de conmutación por error por separado para los componentes de la capa de aplicación de SAP y la capa de DBMS. Actualmente, Azure no admite arquitecturas de alta disponibilidad que combinen los componentes de la capa de aplicación de SAP y la capa de DBMS en un clúster de conmutación por error.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "Medio",
- "text": "Tener activo-activo para varias regiones",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "La mayoría de los clústeres de conmutación por error para los componentes de la capa de aplicación (ASCS) de SAP y la capa de DBMS requieren una dirección IP virtual para un clúster de conmutación por error. Azure Load Balancer debe controlar la dirección IP virtual para todos los demás casos. Un principio de diseño es usar un equilibrador de carga por configuración de clúster. Te recomendamos que utilices la versión estándar del equilibrador de carga (SKU de Standard Load Balancer).",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "severity": "Medio",
- "text": "Adición de stamps de servicio de dominio de Azure AD a regiones y ubicaciones adicionales",
+ "checklist": "SAP Checklist",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Asegúrese de que la IP flotante esté habilitada en el equilibrador de carga",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "severity": "Medio",
- "text": "Uso de conjuntos de réplicas para recuperación ante desastres",
+ "checklist": "SAP Checklist",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Antes de implementar la infraestructura de alta disponibilidad, y en función de la región que elija, determine si desea implementar con un conjunto de disponibilidad de Azure o con una zona de disponibilidad.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si es necesario para las cargas de trabajo de Windows de AKS, se pueden usar contenedores HostProcess",
+ "checklist": "SAP Checklist",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Si desea cumplir los acuerdos de nivel de servicio de infraestructura para sus aplicaciones para componentes de SAP (servicios centrales, servidores de aplicaciones y bases de datos), debe elegir las mismas opciones de alta disponibilidad (máquinas virtuales, conjuntos de disponibilidad, zonas de disponibilidad) para todos los componentes.",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Utilice KEDA si ejecuta cargas de trabajo controladas por eventos",
- "waf": "Rendimiento"
+ "checklist": "SAP Checklist",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "No mezcle servidores de diferentes roles en el mismo conjunto de disponibilidad. Mantenga las máquinas virtuales de servicios centrales, las máquinas virtuales de bases de datos y las máquinas virtuales de aplicaciones en sus propios conjuntos de disponibilidad",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Uso de Dapr para facilitar el desarrollo de microservicios",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "No se pueden implementar conjuntos de disponibilidad de Azure en una zona de disponibilidad de Azure a menos que se usen grupos de selección de ubicación por proximidad.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"severity": "Alto",
- "text": "Uso de la oferta de AKS respaldada por SLA",
+ "text": "Al crear conjuntos de disponibilidad, use el número máximo de dominios de error y dominios de actualización disponibles. Por ejemplo, si implementa más de dos máquinas virtuales en un conjunto de disponibilidad, use el número máximo de dominios de error (tres) y suficientes dominios de actualización para limitar el efecto de posibles errores de hardware físico, interrupciones de red o interrupciones de energía, además del mantenimiento planeado de Azure. El número predeterminado de dominios de error es dos y no se puede cambiar en línea más adelante.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Uso de presupuestos de interrupción en el pod y las definiciones de implementación",
+ "checklist": "SAP Checklist",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Cuando se usan grupos de selección de ubicación de proximidad de Azure en una implementación de conjunto de disponibilidad, los tres componentes de SAP (servicios centrales, servidor de aplicaciones y base de datos) deben estar en el mismo grupo de selección de ubicación por proximidad.",
"waf": "Fiabilidad"
},
{
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "checklist": "SAP Checklist",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"severity": "Alto",
- "text": "Si usa un registro privado, configure la replicación de regiones para almacenar imágenes en varias regiones",
+ "text": "Utilice un grupo de ubicación de proximidad por SID de SAP. Los grupos no se extienden entre zonas de disponibilidad ni regiones de Azure",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Usar una aplicación externa como kubecost para asignar costos a diferentes usuarios",
- "waf": "Costar"
+ "checklist": "SAP Checklist",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Utilice uno de los siguientes servicios para ejecutar clústeres de servicios centrales de SAP, en función del sistema operativo.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Usar el modo de reducción vertical para eliminar/desasignar nodos",
- "waf": "Costar"
+ "checklist": "SAP Checklist",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Actualmente, Azure no admite la combinación de ASCS y DB HA en el mismo clúster de Linux Pacemaker; sepárelos en grupos individuales. Sin embargo, puede combinar hasta cinco clústeres de servicios centrales en un par de máquinas virtuales.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"severity": "Medio",
- "text": "Cuando sea necesario, use la GPU de partición de varias instancias en clústeres de AKS",
- "waf": "Costar"
+ "text": "Implemente ambas máquinas virtuales en el par de alta disponibilidad en un conjunto de disponibilidad o en zonas de disponibilidad. Estas máquinas virtuales deben tener el mismo tamaño y la misma configuración de almacenamiento.",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si se ejecuta un clúster de desarrollo y pruebas, use NodePool Start/Stop",
- "waf": "Costar"
+ "checklist": "SAP Checklist",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Azure admite la instalación y configuración de SAP HANA, ASCS/SCS e instancias de ERS en el mismo clúster de alta disponibilidad que se ejecuta en Red Hat Enterprise Linux (RHEL).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
- "severity": "Medio",
- "text": "Uso de Azure Policy para Kubernetes para garantizar el cumplimiento de clústeres",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Ejecute todos los sistemas de producción en SSD administradas Premium y use Azure NetApp Files o Ultra Disk Storage. Al menos el disco del sistema operativo debe estar en el nivel Premium para que pueda lograr un mejor rendimiento y el mejor Acuerdo de Nivel de Servicio.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "Medio",
- "text": "Separe las aplicaciones del plano de control con grupos de nodos de usuario/sistema",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Debe ejecutar SAP HANA en Azure solo en los tipos de almacenamiento certificados por SAP. Tenga en cuenta que ciertos volúmenes deben ejecutarse en ciertas configuraciones de disco, cuando corresponda. Estas configuraciones incluyen la habilitación del Acelerador de escritura y el uso del almacenamiento Premium. También debe asegurarse de que el sistema de archivos que se ejecuta en el almacenamiento sea compatible con el DBMS que se ejecuta en la máquina.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Agregue taint a su grupo de nodos del sistema para que sea dedicado",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Considere la posibilidad de configurar la alta disponibilidad en función del tipo de almacenamiento que utilice para las cargas de trabajo de SAP. Algunos servicios de almacenamiento disponibles en Azure no son compatibles con Azure Site Recovery, por lo que la configuración de alta disponibilidad puede diferir.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
- "severity": "Medio",
- "text": "Utilice un registro privado para sus imágenes, como ACR",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Es posible que los diferentes servicios de almacenamiento nativo de Azure (como Azure Files, Azure NetApp Files, Azure Shared Disk) no estén disponibles en todas las regiones. Por lo tanto, para tener una configuración de SAP similar en la región de recuperación ante desastres después de la conmutación por error, asegúrese de que el servicio de almacenamiento correspondiente se ofrezca en el sitio de recuperación ante desastres.",
+ "waf": "Fiabilidad"
},
{
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
+ "checklist": "SAP Checklist",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "service": "SAP",
"severity": "Medio",
- "text": "Escanea tus imágenes en busca de vulnerabilidades",
- "waf": "Seguridad"
+ "text": "Automatice SAP System Start-Stop para gestionar los costes.",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
- "severity": "Alto",
- "text": "Definición de los requisitos de separación de aplicaciones (espacio de nombres/grupo de nodos/clúster)",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "En el caso de usar Azure Premium Storage con SAP HANA, el almacenamiento SSD estándar de Azure se puede usar para seleccionar una solución de almacenamiento económica en cuanto a costos. Sin embargo, tenga en cuenta que la elección del almacenamiento SSD estándar o HDD estándar de Azure afectará al Acuerdo de Nivel de Servicio de las máquinas virtuales individuales. Además, para sistemas con menor rendimiento de E/S y baja latencia, como entornos que no son de producción, se pueden usar máquinas virtuales de series inferiores.",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
- "severity": "Medio",
- "text": "Almacenamiento de los secretos en Azure Key Vault con el controlador del almacén de secretos de CSI",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "Como configuración alternativa de menor costo (multipropósito), puede elegir una SKU de bajo rendimiento para las máquinas virtuales de servidor de base de datos HANA que no son de producción. Sin embargo, es importante tener en cuenta que algunos tipos de máquinas virtuales, como la serie E, no están certificadas por HANA (directorio de hardware de SAP HANA) o no pueden alcanzar una latencia de almacenamiento inferior a 1 ms.",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "service": "SAP",
"severity": "Alto",
- "text": "Si usa entidades de servicio para el clúster, actualice las credenciales periódicamente (por ejemplo, trimestralmente)",
+ "text": "Aplicación de un modelo RBAC para grupos de administración, suscripciones, grupos de recursos y recursos",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
"severity": "Medio",
- "text": "Si es necesario, agregue el servicio de administración de claves, etcd, cifrado",
+ "text": "Aplicación de la propagación de la entidad de seguridad para reenviar la identidad de la aplicación en la nube de SAP a SAP local (incluida la IaaS) a través del conector en la nube",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si es necesario, considere la posibilidad de usar Proceso confidencial para AKS",
+ "checklist": "SAP Checklist",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Implemente SSO en aplicaciones SAP SaaS como SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics y SAP C4C con Azure AD mediante SAML.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
"severity": "Medio",
- "text": "Considere la posibilidad de usar Defender para contenedores",
+ "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI, mediante SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
- "severity": "Alto",
- "text": "Uso de identidades administradas en lugar de entidades de servicio",
+ "checklist": "SAP Checklist",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Implemente SSO en aplicaciones web basadas en SAP NetWeaver, como SAP Fiori y SAP Web GUI, mediante SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
"severity": "Medio",
- "text": "Integración de la autenticación con AAD (mediante la integración administrada)",
+ "text": "Puede implementar el inicio de sesión único en la interfaz gráfica de usuario de SAP mediante el inicio de sesión único de SAP NetWeaver o una solución de socio.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "service": "SAP",
"severity": "Medio",
- "text": "Limitar el acceso a admin kubeconfig (get-credentials --admin)",
+ "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere la posibilidad de utilizar SAP Secure Login Server, que es un componente de la solución SAP SSO.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "service": "SAP",
"severity": "Medio",
- "text": "Integración de la autorización con RBAC de AAD",
+ "text": "Para SSO para SAP GUI y acceso al navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociación GSSAPI simple y protegido) debido a su facilidad de configuración y mantenimiento. Para SSO con certificados de cliente X.509, considere la posibilidad de utilizar SAP Secure Login Server, que es un componente de la solución SAP SSO.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
- "severity": "Alto",
- "text": "Uso de espacios de nombres para restringir el privilegio RBAC en Kubernetes",
+ "checklist": "SAP Checklist",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Implemente el inicio de sesión único mediante OAuth para SAP NetWeaver a fin de permitir que aplicaciones personalizadas o de terceros accedan a los servicios OData de SAP NetWeaver.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "service": "SAP",
"severity": "Medio",
- "text": "Para la administración de acceso a identidades de pods, use Azure AD Workload Identity (versión preliminar)",
+ "text": "Implementación de SSO en SAP HANA",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "service": "SAP",
"severity": "Medio",
- "text": "En el caso de los inicios de sesión no interactivos de AKS, use kubelogin (versión preliminar)",
+ "text": "Considere Azure AD como un proveedor de identidades para sistemas SAP hospedados en RISE. Para obtener más información, consulte Integración del servicio con Azure AD.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
+ "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "service": "SAP",
"severity": "Medio",
- "text": "Deshabilitación de cuentas locales de AKS",
+ "text": "En el caso de las aplicaciones que acceden a SAP, es posible que desee utilizar la propagación de entidades de seguridad para establecer el inicio de sesión único.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Configure, si es necesario, el acceso al clúster Just-In-Time",
+ "checklist": "SAP Checklist",
+ "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Si usa servicios BTP de SAP o soluciones SaaS que requieren SAP Identity Authentication Service (IAS), considere la posibilidad de implementar SSO entre SAP Cloud Identity Authentication Services y Azure AD para acceder a esos servicios de SAP. Esta integración permite a SAP IAS actuar como proveedor de identidades de proxy y reenvía las solicitudes de autenticación a Azure AD como almacén de usuarios central y proveedor de identidades.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Configure si es necesario el acceso condicional de AAD para AKS",
+ "checklist": "SAP Checklist",
+ "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Implementación de SSO en SAP BTP",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si es necesario para las cargas de trabajo de Windows AKS, configure gMSA ",
+ "checklist": "SAP Checklist",
+ "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Si usa SAP SuccessFactors, considere la posibilidad de usar el aprovisionamiento automatizado de usuarios de Azure AD. Con esta integración, a medida que agregue nuevos empleados a SAP SuccessFactors, puede crear automáticamente sus cuentas de usuario en Azure AD. Opcionalmente, puede crear cuentas de usuario en Microsoft 365 u otras aplicaciones SaaS compatibles con Azure AD. Utilice la reescritura de la dirección de correo electrónico en SAP SuccessFactors.",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "description": "Mantenga la jerarquía del grupo de administración razonablemente plana, no más de cuatro.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
+ "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "service": "SAP",
"severity": "Medio",
- "text": "Para un control más preciso, considere la posibilidad de utilizar una identidad de Kubelet administrada",
- "waf": "Seguridad"
+ "text": "aplicar las directivas de grupo de administración existentes a las suscripciones de SAP",
+ "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
- "severity": "Medio",
- "text": "Si utiliza AGIC, no comparta un AppGW entre clústeres",
- "waf": "Fiabilidad"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
+ "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Integre aplicaciones estrechamente acopladas en la misma suscripción de SAP para evitar la complejidad adicional del enrutamiento y la administración",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Aprovechar la suscripción como unidad de escala y escalar nuestros recursos, considere implementar la suscripción por entorno, por ejemplo. Sandbox, no prod, prod ",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
+ "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "service": "SAP",
"severity": "Alto",
- "text": "No use el complemento de enrutamiento HTTP de AKS, use en su lugar la entrada NGINX administrada con el complemento de enrutamiento de aplicaciones.",
- "waf": "Fiabilidad"
+ "text": "Garantizar el aumento de la cuota como parte del aprovisionamiento de suscripciones (por ejemplo, el total de núcleos de máquina virtual disponibles dentro de una suscripción)",
+ "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
- "severity": "Medio",
- "text": "En el caso de las cargas de trabajo de Windows, use las redes aceleradas",
- "waf": "Rendimiento"
+ "checklist": "SAP Checklist",
+ "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
+ "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "La API de cuota es una API de REST que puede usar para ver y administrar las cuotas de los servicios de Azure. Considere usarlo si es necesario.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
+ "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "service": "SAP",
"severity": "Alto",
- "text": "Utilice el ALB estándar (en lugar del básico)",
- "waf": "Fiabilidad"
+ "text": "Si se implementa en una zona de disponibilidad, asegúrese de que la implementación de zona de la máquina virtual esté disponible una vez que se haya aprobado la cuota. Envíe una solicitud de soporte técnico con la suscripción, la serie de máquinas virtuales, el número de CPU y la zona de disponibilidad necesarias.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
- "severity": "Medio",
- "text": "Si usa Azure CNI, considere la posibilidad de usar diferentes subredes para NodePools",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Asegúrese de que los servicios y funciones necesarios estén disponibles dentro de las regiones de implementación elegidas, por ejemplo. ANF, Zona, etc.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "service": "SAP",
"severity": "Medio",
- "text": "Use puntos de conexión privados (preferidos) o puntos de conexión de servicio de red virtual para acceder a los servicios PaaS desde el clúster",
- "waf": "Seguridad"
+ "text": "Aproveche la etiqueta de recurso de Azure para la categorización de costos y la agrupación de recursos (: BillTo, Departamento (o unidad de negocio), Medio ambiente (producción, Fase, Desarrollo), Nivel (nivel web, nivel de aplicación), Propietario de la aplicación, Nombre del proyecto)",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
"severity": "Alto",
- "text": "Elija el mejor complemento de red de CNI para sus necesidades (se recomienda Azure CNI)",
+ "text": "Ayude a proteger la base de datos de HANA mediante el servicio Azure Backup.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "Alto",
- "text": "Si usa CNI de Azure, ajuste el tamaño de la subred en consecuencia teniendo en cuenta el número máximo de pods por nodo",
- "waf": "Rendimiento"
+ "checklist": "SAP Checklist",
+ "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Si implementa Azure NetApp Files para la base de datos HANA, Oracle o DB2, use la herramienta Azure Application Consistent Snapshot (AzAcSnap) para tomar instantáneas coherentes con la aplicación. AzAcSnap también es compatible con bases de datos de Oracle. Considere la posibilidad de usar AzAcSnap en una máquina virtual central en lugar de en máquinas virtuales individuales.",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
"severity": "Alto",
- "text": "Si usa Azure CNI, compruebe el número máximo de pods o nodo (valor predeterminado 30)",
- "waf": "Rendimiento"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "En el caso de las aplicaciones internas, las organizaciones suelen abrir toda la subred de AKS en sus firewalls. Esto también abre el acceso de red a los nodos y, potencialmente, también a los pods (si se usa Azure CNI). Si las direcciones IP de LoadBalancer están en una subred diferente, solo esta debe estar disponible para los clientes de la aplicación. Otra razón es que si las direcciones IP de la subred de AKS son un recurso escaso, el consumo de sus direcciones IP para los servicios reducirá la escalabilidad máxima del clúster.",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si usa servicios de LoadBalancer de dirección IP privada, use una subred dedicada (no la subred de AKS)",
- "waf": "Seguridad"
+ "text": "Asegúrese de que las zonas horarias coincidan entre el sistema operativo y el sistema SAP.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "Alto",
- "text": "Dimensione el rango de direcciones IP del servicio en consecuencia (limitará la escalabilidad del clúster)",
+ "checklist": "SAP Checklist",
+ "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "No agrupe diferentes servicios de aplicaciones en el mismo clúster. Por ejemplo, no combine DRBD y clústeres de servicios centrales en el mismo clúster. Sin embargo, puede usar el mismo clúster de Pacemaker para administrar aproximadamente cinco servicios centrales diferentes (clúster de varios SID).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
+ "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "service": "SAP",
"severity": "Bajo",
- "text": "Si es necesario, agregue su propio complemento CNI",
- "waf": "Seguridad"
+ "text": "Considere la posibilidad de ejecutar sistemas de desarrollo y pruebas en un modelo de repetición para ahorrar y optimizar los costos de ejecución de Azure.",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si es necesario, configure la dirección IP pública por nodo en AKS",
- "waf": "Rendimiento"
+ "checklist": "SAP Checklist",
+ "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
+ "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Si se asocia con los clientes mediante la administración de sus propiedades de SAP, considere la posibilidad de Azure Lighthouse. Azure Lighthouse permite a los proveedores de servicios administrados usar los servicios de identidad nativos de Azure para autenticarse en el entorno de los clientes. Pone el control en manos de los clientes, ya que pueden revocar el acceso en cualquier momento y auditar las acciones de los proveedores de servicios.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
+ "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "service": "SAP",
"severity": "Medio",
- "text": "Use un controlador de entrada para exponer aplicaciones basadas en web en lugar de exponerlas con servicios de tipo LoadBalancer",
- "waf": "Fiabilidad"
+ "text": "Use Azure Update Manager para comprobar el estado de las actualizaciones disponibles para una sola máquina virtual o varias máquinas virtuales y considere la posibilidad de programar la aplicación periódica de revisiones.",
+ "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "service": "SAP",
"severity": "Bajo",
- "text": "Uso de Azure NAT Gateway como outboundType para escalar el tráfico de salida",
- "waf": "Fiabilidad"
+ "text": "Optimice y gestione las operaciones de SAP Basis mediante SAP Landscape Management (LaMa). Use el conector de SAP LaMa para Azure para reubicar, copiar, clonar y actualizar sistemas SAP.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "service": "SAP",
"severity": "Medio",
- "text": "Uso de asignaciones dinámicas de direcciones IP para evitar el agotamiento de direcciones IP de Azure CNI",
- "waf": "Fiabilidad"
+ "text": "Use las soluciones de Azure Monitor para SAP para supervisar las cargas de trabajo de SAP (SAP HANA, clústeres de SUSE de alta disponibilidad y sistemas SQL) en Azure. Considere la posibilidad de complementar las soluciones de Azure Monitor para SAP con SAP Solution Manager.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
+ "service": "SAP",
"severity": "Alto",
- "text": "Filtre el tráfico de salida con AzFW/NVA si sus requisitos de seguridad lo exigen",
- "waf": "Seguridad"
+ "text": "Ejecute una extensión de máquina virtual para la comprobación de SAP. VM Extension for SAP usa la identidad administrada asignada de una máquina virtual (VM) para acceder a los datos de configuración y supervisión de VM. La comprobación garantiza que todas las métricas de rendimiento de la aplicación SAP procedan de la extensión de Azure para SAP subyacente.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "SAP",
"severity": "Medio",
- "text": "Si utiliza un punto de conexión de API público, restrinja las direcciones IP que pueden acceder a él",
- "waf": "Seguridad"
+ "text": "Use Azure Policy para el control de acceso y los informes de cumplimiento. Azure Policy proporciona la capacidad de aplicar la configuración de toda la organización para garantizar el cumplimiento coherente de las directivas y la detección rápida de infracciones. ",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Use el Monitor de conexión en Azure Network Watcher para supervisar las métricas de latencia de las bases de datos y los servidores de aplicaciones de SAP. O bien, recopile y muestre medidas de latencia de red mediante Azure Monitor.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "73686af4-6791-4f89-95ad-a43324e13811",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Realice una comprobación de calidad de SAP HANA en la infraestructura de Azure aprovisionada para comprobar que las máquinas virtuales aprovisionadas cumplen con los procedimientos recomendados de SAP HANA en Azure.",
+ "waf": "Operaciones"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Para cada suscripción de Azure, ejecute una prueba de latencia en las zonas de disponibilidad de Azure antes de la implementación zonal para elegir zonas de baja latencia para la implementación de SAP en Azure.",
+ "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
- "severity": "Alto",
- "text": "Utilice clústeres privados si sus requisitos lo exigen",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Ejecute el informe de resistencia para asegurarse de que la configuración de toda la infraestructura de Azure aprovisionada (proceso, base de datos, redes, almacenamiento, Site Recovery) cumpla con la configuración definida por Cloud Adaption Framework para Azure.",
+ "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
+ "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
+ "service": "SAP",
"severity": "Medio",
- "text": "Para los nodos de AKS de Windows 2019 y 2022, se pueden usar directivas de red de Calico ",
+ "text": "Implemente la protección contra amenazas mediante la solución Microsoft Sentinel para SAP. Utilice esta solución para supervisar sus sistemas SAP y detectar amenazas sofisticadas en toda la lógica empresarial y las capas de aplicación.",
+ "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
- "severity": "Alto",
- "text": "Habilitación de una opción de directiva de red de Kubernetes (Calico/Azure)",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "El etiquetado de Azure se puede aprovechar para agrupar y realizar un seguimiento lógicos de los recursos, automatizar sus implementaciones y, lo que es más importante, proporcionar visibilidad de los costos incurridos.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "severity": "Alto",
- "text": "Uso de directivas de red de Kubernetes para aumentar la seguridad dentro del clúster",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "Utilice la supervisión de latencia entre máquinas virtuales para aplicaciones sensibles a la latencia.",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "severity": "Alto",
- "text": "Uso de un WAF para cargas de trabajo web (interfaces de usuario o API)",
- "waf": "Seguridad"
+ "checklist": "SAP Checklist",
+ "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones de SAP.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
"severity": "Medio",
- "text": "Uso de DDoS Standard en la red virtual de AKS",
- "waf": "Seguridad"
+ "text": "Excluya todos los sistemas de archivos de bases de datos y programas ejecutables de los análisis antivirus. Incluirlos podría provocar problemas de rendimiento. Consulte con los proveedores de bases de datos para obtener detalles prescriptivos sobre la lista de exclusión. Por ejemplo, Oracle recomienda excluir /oracle//sapdata de los análisis antivirus.",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "c027f893-f404-41a9-b33d-39d625a14964",
+ "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
+ "service": "SAP",
"severity": "Bajo",
- "text": "Si es necesario, agregue el proxy HTTP de la empresa",
- "waf": "Seguridad"
+ "text": "Considere la posibilidad de recopilar estadísticas completas de bases de datos que no sean de HANA después de la migración. Por ejemplo, implemente la nota de SAP 1020260 - Entrega de estadísticas de Oracle.",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
+ "service": "SAP",
"severity": "Medio",
- "text": "Considere la posibilidad de usar una malla de servicios para la administración avanzada de comunicaciones de microservicios",
- "waf": "Seguridad"
+ "text": "Considere la posibilidad de usar Oracle Automatic Storage Management (ASM) para todas las implementaciones de Oracle que utilicen SAP en Azure.",
+ "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "En el caso de SAP en Azure que ejecuta Oracle, una colección de scripts SQL puede ayudarle a diagnosticar problemas de rendimiento. Los informes de Automatic Workload Repository (AWR) contienen información valiosa para diagnosticar problemas en el sistema Oracle. Le recomendamos que ejecute un informe de AWR durante varias sesiones y elija las horas punta para él, a fin de garantizar una amplia cobertura del análisis.",
+ "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
+ "waf": "Rendimiento"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
"severity": "Alto",
- "text": "Configurar alertas sobre las métricas más críticas (consulte Container Insights para obtener recomendaciones)",
+ "text": "Use la supervisión de Azure Site Recovery para mantener el estado del servicio de recuperación ante desastres para los servidores de aplicaciones de SAP.",
+ "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Consulte periódicamente Azure Advisor para obtener recomendaciones sobre el clúster",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Para la entrega segura de aplicaciones HTTP/S, use Application Gateway v2 y asegúrese de que la protección y las directivas de WAF estén habilitadas.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Habilitación de la rotación automática de certificados de AKS",
+ "checklist": "SAP Checklist",
+ "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Si el DNS o el nombre virtual de la máquina virtual no se cambia durante la migración a Azure, el DNS en segundo plano y los nombres virtuales conectan muchas interfaces del sistema en el entorno de SAP, y los clientes solo a veces son conscientes de las interfaces que los desarrolladores definen a lo largo del tiempo. Surgen desafíos de conexión entre varios sistemas cuando los nombres virtuales o de DNS cambian después de las migraciones, y se recomienda conservar los alias de DNS para evitar este tipo de dificultades.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
- "severity": "Alto",
- "text": "Tenga un proceso regular para actualizar la versión de Kubernetes periódicamente (trimestralmente, por ejemplo) o use la característica de actualización automática de AKS",
+ "checklist": "SAP Checklist",
+ "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Utilice diferentes zonas DNS para distinguir cada entorno (espacio aislado, desarrollo, preproducción y producción) entre sí. La excepción es para las implementaciones de SAP con su propia red virtual; aquí, es posible que las zonas DNS privadas no sean necesarias.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
- "severity": "Alto",
- "text": "Utilice kured para las actualizaciones de nodos de Linux en caso de que no esté utilizando la actualización de imagen de nodo",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "description": "Al configurar el emparejamiento de red virtual, use la opción Permitir tráfico a redes virtuales remotas.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
+ "guid": "a3592829-e6e2-4061-9368-6af46791f893",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "El emparejamiento de red virtual local y global proporciona conectividad y son los enfoques preferidos para garantizar la conectividad entre las zonas de aterrizaje para las implementaciones de SAP en varias regiones de Azure",
+ "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
+ "waf": "Fiabilidad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
+ "service": "SAP",
"severity": "Alto",
- "text": "Disponer de un proceso regular para actualizar las imágenes de los nodos del clúster periódicamente (semanalmente, por ejemplo)",
- "waf": "Operaciones"
+ "text": "No se admite la implementación de ninguna NVA entre la aplicación SAP y el servidor de base de datos SAP",
+ "training": "https://me.sap.com/notes/2731110",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Considere la posibilidad de implementar aplicaciones o configuraciones de clústeres en varios clústeres",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
+ "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Use Virtual WAN para implementaciones de Azure en redes nuevas, grandes o globales en las que necesite conectividad de tránsito global entre regiones de Azure y ubicaciones locales. Con este enfoque, no tendrá que configurar manualmente el enrutamiento transitivo para las redes de Azure y puede seguir un estándar para las implementaciones de SAP en Azure.",
+ "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Considere la posibilidad de usar la invocación de comandos de AKS en clústeres privados",
+ "checklist": "SAP Checklist",
+ "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Considere la posibilidad de implementar aplicaciones virtuales de red (NVA) entre regiones solo si se usan NVA de asociados. Las aplicaciones virtuales de red entre regiones o redes virtuales no son necesarias si hay aplicaciones virtuales de red nativas. Al implementar tecnologías de redes de asociados y NVA, siga las instrucciones del proveedor para comprobar las configuraciones conflictivas con las redes de Azure.",
+ "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
- "severity": "Bajo",
- "text": "En el caso de los eventos planeados, considere la posibilidad de utilizar el drenaje automático de nodos",
+ "checklist": "SAP Checklist",
+ "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Virtual WAN administra la conectividad entre redes virtuales de radio para topologías basadas en WAN virtuales (sin necesidad de configurar el enrutamiento definido por el usuario [UDR] o NVA) y el rendimiento máximo de red para el tráfico de red virtual a red virtual en el mismo centro virtual es de 50 gigabits por segundo. Si es necesario, las zonas de aterrizaje de SAP pueden usar el emparejamiento de red virtual para conectarse a otras zonas de aterrizaje y superar esta limitación de ancho de banda.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "82734c88-6ba2-4802-8459-11475e39e530",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "No se recomienda la asignación de direcciones IP públicas a la máquina virtual que ejecuta SAP Workload.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "service": "SAP",
"severity": "Alto",
- "text": "Desarrollar sus propias prácticas de gobernanza para asegurarse de que los operadores no realicen cambios en el nodo RG (también conocido como 'infra RG')",
+ "text": "Considere la posibilidad de reservar la dirección IP en el lado de la recuperación ante desastres al configurar ASR",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Usar el nombre personalizado de Node RG (también conocido como 'Infra RG')",
+ "checklist": "SAP Checklist",
+ "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Evite el uso de intervalos de direcciones IP superpuestos para los sitios de producción y recuperación ante desastres.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
+ "service": "SAP",
"severity": "Medio",
- "text": "No use API de Kubernetes obsoletas en los manifiestos de YAML",
+ "text": "Aunque Azure le ayuda a crear varias subredes delegadas en una red virtual, solo puede existir una subred delegada en una red virtual para Azure NetApp Files. Se producirá un error al intentar crear un nuevo volumen si se utiliza más de una subred delegada para Azure NetApp Files.",
+ "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Nodos de Windows de Taint",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Use Azure Firewall para controlar el tráfico de salida de Azure a Internet, las conexiones entrantes que no son HTTP/S y el filtrado de tráfico este/oeste (si la organización lo requiere)",
+ "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Mantener el nivel de revisión de los contenedores de Windows sincronizado con el nivel de revisión del host",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Application Gateway y Web Application Firewall tienen limitaciones cuando Application Gateway actúa como proxy inverso para aplicaciones web de SAP, como se muestra en la comparación entre Application Gateway, SAP Web Dispatcher y otros servicios de terceros.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "A través de la configuración de diagnóstico en el nivel de clúster",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Envío de registros maestros (también conocidos como registros de API) a Azure Monitor o a la solución de administración de registros que prefiera",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Use las directivas de Azure Front Door y WAF para proporcionar protección global en todas las regiones de Azure para las conexiones HTTP/S entrantes a una zona de aterrizaje.",
+ "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si es necesario, utilice instantáneas de nodePool",
- "waf": "Costar"
+ "checklist": "SAP Checklist",
+ "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Aproveche las directivas de firewall de aplicaciones web de Azure Front Door cuando use Azure Front Door y Application Gateway para proteger las aplicaciones HTTP/S. Bloquee Application Gateway para recibir tráfico solo desde Azure Front Door.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Considere la posibilidad de crear grupos de nodos de acceso puntual para cargas de trabajo no urgentes",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Utilice un firewall de aplicaciones web para analizar su tráfico cuando esté expuesto a Internet. Otra opción es usarlo con el equilibrador de carga o con recursos que tengan funcionalidades de firewall integradas, como Application Gateway o soluciones de terceros.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Considere la posibilidad de utilizar el nodo virtual de AKS para una ráfaga rápida",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Use Virtual WAN para implementaciones de Azure en redes nuevas, grandes o globales en las que necesite conectividad de tránsito global entre regiones de Azure y ubicaciones locales. Con este enfoque, no tendrá que configurar manualmente el enrutamiento transitivo para las redes de Azure y puede seguir un estándar para las implementaciones de SAP en Azure.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
- "severity": "Alto",
- "text": "Supervise las métricas de clúster con Container Insights (u otras herramientas como Prometheus)",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Para evitar la pérdida de datos, use Azure Private Link para acceder de forma segura a los recursos de la plataforma como servicio, como Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory, etc. Azure Private Endpoint también puede ayudar a proteger el tráfico entre redes virtuales y servicios como Azure Storage, Azure Backup, etc. El tráfico entre la red virtual y el servicio habilitado para el punto de conexión privado viaja a través de la red global de Microsoft, lo que impide su exposición a la red pública de Internet.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
+ "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "service": "SAP",
"severity": "Alto",
- "text": "Almacene y analice los registros del clúster con Container Insights (u otras herramientas como Telegraf/ElasticSearch)",
- "waf": "Operaciones"
+ "text": "Asegúrese de que las redes aceleradas de Azure estén habilitadas en las máquinas virtuales usadas en las capas de aplicación SAP y DBMS.",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
+ "service": "SAP",
"severity": "Medio",
- "text": "Supervisar el uso de la CPU y la memoria de los nodos",
- "waf": "Operaciones"
+ "text": "Asegúrese de que las implementaciones internas de Azure Load Balancer están configuradas para usar Direct Server Return (DSR). Esta configuración (Habilitación de IP flotante) reducirá la latencia cuando se utilicen configuraciones de equilibrador de carga internas para configuraciones de alta disponibilidad en la capa DBMS.",
+ "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
+ "guid": "6791f893-5ada-4433-84e1-3811523181aa",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "SAP",
"severity": "Medio",
- "text": "Si usa Azure CNI, supervise el porcentaje de direcciones IP de pod consumidas por nodo",
- "waf": "Operaciones"
+ "text": "Puede usar el grupo de seguridad de aplicaciones (ASG) y las reglas de NSG para definir listas de control de acceso de seguridad de red entre la aplicación SAP y las capas de DBMS. Los ASG agrupan las máquinas virtuales para ayudar a administrar su seguridad.",
+ "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "La E/S en el disco del sistema operativo es un recurso crítico. Si el sistema operativo de los nodos se limita en la E/S, esto podría dar lugar a un comportamiento impredecible, que normalmente terminaría en que el nodo se declarara NotReady",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
- "severity": "Medio",
- "text": "Supervisión de la profundidad de la cola de disco del sistema operativo en los nodos",
- "waf": "Operaciones"
+ "checklist": "SAP Checklist",
+ "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "No se admite la colocación de la capa de aplicación de SAP y DBMS de SAP en diferentes redes virtuales de Azure que no están emparejadas.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"severity": "Medio",
- "text": "Si no usa el filtrado de salida con AzFW/NVA, supervise los puertos SNAT asignados por ALB estándar",
- "waf": "Operaciones"
+ "text": "Para obtener una latencia de red óptima con aplicaciones SAP, considere la posibilidad de usar grupos de selección de ubicación por proximidad de Azure.",
+ "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "NO se admite en absoluto la ejecución de una capa de servidor de aplicaciones SAP y una capa de DBMS dividida entre local y Azure. Ambas capas deben residir completamente en el entorno local o en Azure.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Rendimiento"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "No se recomienda hospedar el sistema de administración de bases de datos (DBMS) y las capas de aplicación de los sistemas SAP en diferentes redes virtuales y conectarlas con el emparejamiento de redes virtuales debido a los costos sustanciales que puede producir un tráfico de red excesivo entre las capas. Se recomienda usar subredes dentro de la red virtual de Azure para separar la capa de aplicación de SAP y la capa de DBMS.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Costar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "402a9846-d515-4061-aff8-cd30088693fa",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Si utiliza Load Balancer con sistemas operativos invitados Linux, compruebe que el parámetro de red de Linux net.ipv4.tcp_timestamps esté establecido en 0.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Rendimiento"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
+ "service": "SAP",
"severity": "Medio",
- "text": "Suscríbase a las notificaciones de estado de los recursos para el clúster de AKS",
- "waf": "Operaciones"
+ "text": "En el caso de las implementaciones de SAP RISE/ECS, el emparejamiento virtual es la forma preferida de establecer la conectividad con el entorno de Azure existente del cliente. Tanto la red virtual de SAP como las redes virtuales del cliente están protegidas con grupos de seguridad de red (NSG), lo que permite la comunicación en SAP y los puertos de base de datos a través del emparejamiento de redes virtuales",
+ "waf": "Seguridad"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
"severity": "Alto",
- "text": "Configurar solicitudes y límites en las especificaciones del pod",
- "waf": "Operaciones"
+ "text": "Revise las copias de seguridad de bases de datos de SAP HANA para máquinas virtuales de Azure.",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
"severity": "Medio",
- "text": "Aplicación de cuotas de recursos para espacios de nombres",
- "waf": "Operaciones"
+ "text": "Revise la supervisión integrada de Site Recovery, donde se use para SAP.",
+ "waf": "Costar"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
+ "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
+ "service": "SAP",
"severity": "Alto",
- "text": "Asegúrese de que la suscripción tiene suficiente cuota para escalar horizontalmente los grupos de nodos",
+ "text": "Revise la guía Supervisión del panorama del sistema SAP HANA.",
"waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
+ "service": "SAP",
"severity": "Medio",
- "text": "Uso del escalador automático de clústeres",
- "waf": "Rendimiento"
+ "text": "Revise las estrategias de copia de seguridad de Oracle Database en máquinas virtuales Linux de Azure.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Personalización de la configuración de nodos para grupos de nodos de AKS",
- "waf": "Rendimiento"
+ "checklist": "SAP Checklist",
+ "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
+ "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Revise el uso de Azure Blob Storage con SQL Server 2016.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
+ "service": "SAP",
"severity": "Medio",
- "text": "Usar el escalador automático horizontal de pods cuando sea necesario",
- "waf": "Rendimiento"
+ "text": "Revise el uso de Copia de seguridad automatizada v2 para máquinas virtuales de Azure.",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "Los nodos más grandes aportarán un mayor rendimiento y características como discos efímeros y redes aceleradas, pero aumentarán el radio de explosión y disminuirán la granularidad de escalado",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
+ "service": "SAP",
"severity": "Alto",
- "text": "Considere un tamaño de nodo adecuado, ni demasiado grande ni demasiado pequeño",
- "waf": "Rendimiento"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si se requieren más de 5000 nodos para la escalabilidad, considere la posibilidad de usar un clúster de AKS adicional",
- "waf": "Rendimiento"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Considere la posibilidad de suscribirse a eventos de EventGrid para la automatización de AKS",
- "waf": "Rendimiento"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Para una operación de ejecución prolongada en un clúster de AKS, considere la finalización de eventos",
- "waf": "Rendimiento"
+ "text": "Habilitación del acelerador de escritura para la serie M cuando se utilizan discos premium (V1)",
+ "waf": "Operaciones"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Si es necesario, considere la posibilidad de usar Azure Dedicated Hosts para nodos de AKS",
+ "checklist": "SAP Checklist",
+ "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Pruebe la latencia de la zona de disponibilidad.",
"waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
- "severity": "Alto",
- "text": "Usar discos de sistema operativo efímeros",
+ "checklist": "SAP Checklist",
+ "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
+ "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Active SAP EarlyWatch Alert para todos los componentes de SAP.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
"waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
- "severity": "Alto",
- "text": "En el caso de los discos no efímeros, use IOPS altas y discos de sistema operativo más grandes para los nodos cuando ejecute muchos pods o nodos, ya que requiere un alto rendimiento para ejecutar varios pods y generará registros enormes con umbrales de rotación de registros de AKS predeterminados",
+ "checklist": "SAP Checklist",
+ "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Revise la latencia del servidor de aplicaciones SAP al servidor de bases de datos mediante el informe ABAPMeter de SAP /SSA/CAT.",
+ "training": "https://me.sap.com/notes/0002879613",
"waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
- "severity": "Bajo",
- "text": "Para la opción de almacenamiento de hiperrendimiento, use discos Ultra en AKS",
+ "checklist": "SAP Checklist",
+ "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Revise la supervisión del rendimiento de SQL Server mediante CCMS.",
"waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
+ "link": "https://me.sap.com/notes/500235",
+ "service": "SAP",
"severity": "Medio",
- "text": "Evite mantener el estado en el clúster y almacene los datos fuera (AzStorage, AzSQL, Cosmos, etc.)",
+ "text": "Pruebe la latencia de red entre las máquinas virtuales de la capa de aplicación de SAP y las máquinas virtuales de DBMS (NIPING).",
+ "training": "https://me.sap.com/notes/1100926/E",
"waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
+ "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
+ "service": "SAP",
"severity": "Medio",
- "text": "Si usa AzFiles Standard, considere AzFiles Premium o ANF por motivos de rendimiento",
+ "text": "Revise las alertas de SAP HANA Studio.",
"waf": "Rendimiento"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
+ "link": "https://me.sap.com/notes/1969700",
+ "service": "SAP",
"severity": "Medio",
- "text": "Si usa Azure Disks y AZ, considere la posibilidad de tener grupos de nodos dentro de una zona para el disco LRS con VolumeBindingMode:WaitForFirstConsumer para aprovisionar el almacenamiento en la zona correcta o use el disco ZRS para los grupos de nodos que abarquen varias zonas",
+ "text": "Realice comprobaciones de estado de SAP HANA mediante HANA_Configuration_Minichecks.",
"waf": "Rendimiento"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub proporciona cifrado de datos en reposo. Si usa su propia clave, los datos se siguen cifrando con la clave administrada por Microsoft, pero además la clave administrada por Microsoft se cifrará con la clave administrada por el cliente. ",
- "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
- "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
- "service": "Event Hubs",
- "severity": "Bajo",
- "text": "Usar la opción de clave administrada por el cliente en el cifrado de datos en reposo cuando sea necesario",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "checklist": "SAP Checklist",
+ "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
+ "severity": "Medio",
+ "text": "Si ejecuta máquinas virtuales Windows y Linux en Azure, en el entorno local o en otros entornos en la nube, puede usar el Centro de administración de actualizaciones de Azure Automation para administrar las actualizaciones del sistema operativo, incluidas las revisiones de seguridad.",
+ "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Los espacios de nombres de Azure Event Hubs permiten a los clientes enviar y recibir datos con TLS 1.0 y versiones posteriores. Para aplicar medidas de seguridad más estrictas, puede configurar el espacio de nombres de Event Hubs para requerir que los clientes envíen y reciban datos con una versión más reciente de TLS. Si un espacio de nombres de Event Hubs requiere una versión mínima de TLS, se producirá un error en las solicitudes realizadas con una versión anterior. ",
- "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
- "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "08951710-79a2-492a-adbc-06d7a401545b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
"severity": "Medio",
- "text": "Aplicar una versión mínima requerida de Seguridad de la capa de transporte (TLS) para las solicitudes ",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Revise de forma rutinaria las notas del OSS de seguridad de SAP, ya que SAP publica parches de seguridad muy críticos, o correcciones en caliente, que requieren una acción inmediata para proteger sus sistemas SAP.",
+ "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Al crear un espacio de nombres de Event Hubs, se crea automáticamente una regla de directiva denominada RootManageSharedAccessKey para el espacio de nombres. Esta directiva tiene permisos de administración para todo el espacio de nombres. Se recomienda tratar esta regla como una cuenta raíz administrativa y no usarla en la aplicación. Se recomienda usar AAD como proveedor de autenticación con RBAC. ",
- "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
- "service": "Event Hubs",
- "severity": "Medio",
- "text": "Evite usar la cuenta raíz cuando no sea necesario",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "checklist": "SAP Checklist",
+ "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "En el caso de SAP en SQL Server, puede deshabilitar la cuenta de administrador del sistema de SQL Server porque los sistemas SAP en SQL Server no usan la cuenta. Asegúrese de que otro usuario con derechos de administrador del sistema pueda acceder al servidor antes de deshabilitar la cuenta de administrador del sistema original.",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Las identidades administradas para los recursos de Azure pueden autorizar el acceso a los recursos de Event Hubs mediante credenciales de Azure AD desde aplicaciones que se ejecutan en Azure Virtual Machines (VM), aplicaciones de funciones, conjuntos de escalado de máquinas virtuales y otros servicios. Mediante el uso de identidades administradas para los recursos de Azure junto con la autenticación de Azure AD, puede evitar el almacenamiento de credenciales con las aplicaciones que se ejecutan en la nube. ",
- "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
- "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
- "service": "Event Hubs",
- "severity": "Medio",
- "text": "Siempre que sea posible, la aplicación debe usar una identidad administrada para autenticarse en Azure Event Hub. Si no es así, considere la posibilidad de tener la credencial de almacenamiento (SAS, credencial de entidad de servicio) en Azure Key Vault o en un servicio equivalente",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "checklist": "SAP Checklist",
+ "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Deshabilite xp_cmdshell. La característica SQL Server xp_cmdshell habilita un shell de comandos del sistema operativo interno de SQL Server. Es un riesgo potencial en las auditorías de seguridad.",
+ "training": "https://me.sap.com/notes/3019299/E",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Al crear permisos, proporcione un control específico sobre el acceso de un cliente al Centro de eventos de Azure. Los permisos del Centro de eventos de Azure pueden y deben limitarse al nivel de recurso individual, por ejemplo, grupo de consumidores, entidad del centro de eventos, espacios de nombres del centro de eventos, etc.",
- "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"severity": "Alto",
- "text": "Uso de RBAC de plano de datos con privilegios mínimos",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "text": "El cifrado de servidores de base de datos de SAP HANA en Azure usa la tecnología de cifrado nativa de SAP HANA. Además, si usa SQL Server en Azure, use el cifrado de datos transparente (TDE) para proteger los datos y los archivos de registro y asegurarse de que las copias de seguridad también estén cifradas.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Los registros de recursos del Centro de eventos de Azure incluyen registros operativos, registros de red virtual y registros de Kafka. Los registros de auditoría en tiempo de ejecución capturan información de diagnóstico agregada para todas las operaciones de acceso al plano de datos (como eventos de envío o recepción) en Event Hubs.",
- "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
- "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "SAP",
"severity": "Medio",
- "text": "Habilite el registro para la investigación de seguridad. Use Azure Monitor para capturar métricas y registros, como registros de recursos, registros de auditoría en tiempo de ejecución y registros de Kafka",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "text": "El cifrado de Azure Storage está habilitado para todas las cuentas de Azure Resource Manager y de almacenamiento clásico, y no se puede deshabilitar. Dado que los datos están cifrados de forma predeterminada, no es necesario modificar el código ni las aplicaciones para usar el cifrado de Azure Storage.",
+ "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "De forma predeterminada, Azure Event Hub tiene una dirección IP pública y es accesible a través de Internet. Los puntos de conexión privados permiten el tráfico entre la red virtual y Azure Event Hubs a través de la red troncal de Microsoft. Además de eso, debe deshabilitar los puntos de conexión públicos si no se usan. ",
- "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
- "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
- "service": "Event Hubs",
- "severity": "Medio",
- "text": "Considere la posibilidad de usar puntos de conexión privados para acceder al Centro de eventos de Azure y deshabilitar el acceso a la red pública cuando corresponda.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Uso de Azure Key Vault para almacenar los secretos y las credenciales",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Con el firewall IP, puede restringir aún más el punto de conexión público a solo un conjunto de direcciones IPv4 o rangos de direcciones IPv4 en notación CIDR (Classless Inter-Domain Routing). ",
- "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "SAP",
"severity": "Medio",
- "text": "Considere la posibilidad de permitir solo el acceso al espacio de nombres del Centro de eventos de Azure desde direcciones IP o intervalos específicos",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "text": "Se recomienda bloquear los recursos de Azure después de la implementación correcta para protegerse contra cambios no autorizados. También puede aplicar restricciones y reglas de LOCK por suscripción mediante directivas de Azure personalizadas (rol Custome).",
+ "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "SAP",
"severity": "Medio",
- "text": "Aproveche el Manual de Resiliencia de los TLC",
- "waf": "Fiabilidad"
+ "text": "Aprovisione Azure Key Vault con las directivas de eliminación temporal y purga habilitadas para permitir la protección de retención para los objetos eliminados.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": " Esto se activará automáticamente para un nuevo espacio de nombres EH creado desde el portal con SKU Premium, Dedicado o Estándar en una región habilitada para zonas. Tanto los metadatos de EH como los propios datos de eventos se replican en todas las zonas",
- "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
+ "service": "SAP",
"severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad si corresponde regionalmente",
- "waf": "Fiabilidad"
+ "text": "En función de los requisitos existentes, controles normativos y de cumplimiento (internos y externos): determine qué rol de Azure Policies y Azure RBAC son necesarios",
+ "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
- "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
- "service": "Event Hubs",
- "severity": "Medio",
- "text": "Usa las SKU Premium o Dedicadas para obtener un rendimiento predecible",
- "waf": "Fiabilidad"
+ "checklist": "SAP Checklist",
+ "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Al habilitar Microsoft Defender para punto de conexión en el entorno de SAP, se recomienda excluir los archivos de datos y registros en servidores DBMS en lugar de dirigirse a todos los servidores. Siga las recomendaciones de su proveedor de DBMS al excluir archivos de destino.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "La característica integrada de recuperación ante desastres geográfica, cuando está habilitada, garantiza que toda la configuración de un espacio de nombres (Event Hubs, grupos de consumidores y configuración) se replique continuamente desde un espacio de nombres principal a un espacio de nombres secundario, y permite un movimiento de conmutación por error de una sola vez del principal al secundario en cualquier momento. La característica Activo/Pasivo está diseñada para facilitar la recuperación y el abandono de una región de Azure con errores sin tener que cambiar las configuraciones de la aplicación",
- "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
+ "service": "SAP",
"severity": "Alto",
- "text": "Planeación de la recuperación ante desastres geográfica mediante la configuración pasiva activa",
- "waf": "Fiabilidad"
+ "text": "Delegue un rol personalizado de administrador de SAP con acceso Just-In-Time de Microsoft Defender for Cloud.",
+ "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Debe utilizarse para configuraciones de recuperación ante desastres en las que no se puede tolerar una interrupción o pérdida de datos de eventos en la región inactiva. En estos casos, siga las instrucciones de replicación y no use la capacidad de recuperación ante desastres geográfica integrada (activa/pasiva). Con Activo/Activo, mantenga varios centros de eventos en diferentes regiones y espacios de nombres, y los eventos se replicarán entre los centros",
- "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
- "service": "Event Hubs",
- "severity": "Medio",
- "text": "En el caso de las aplicaciones críticas para la empresa, use la configuración Active Active",
- "waf": "Fiabilidad"
+ "checklist": "SAP Checklist",
+ "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "cifre los datos en tránsito integrando el producto de seguridad de terceros con comunicaciones de red seguras (SNC) para DIAG (SAP GUI), RFC y SPNEGO para HTTPS",
+ "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
- "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
- "service": "Event Hubs",
+ "checklist": "SAP Checklist",
+ "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
+ "service": "SAP",
"severity": "Medio",
- "text": "Diseño de centros de eventos resilientes",
- "waf": "Fiabilidad"
+ "text": "De forma predeterminada, use claves administradas por Microsoft para la funcionalidad de cifrado principal y use claves administradas por el cliente cuando sea necesario.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
+ "service": "SAP",
"severity": "Alto",
- "text": "Seleccione el plan de hospedaje de funciones adecuado en función de los requisitos de su empresa y SLO",
- "waf": "Fiabilidad"
+ "text": "Use una instancia de Azure Key Vault por aplicación, por entorno, por región.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
+ "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
+ "service": "SAP",
"severity": "Alto",
- "text": "Aproveche las zonas de disponibilidad cuando corresponda regionalmente (no disponible para el nivel de consumo)",
- "waf": "Fiabilidad"
+ "text": "Para controlar y administrar las claves y los secretos de cifrado de disco para sistemas operativos Windows y Windows que no son de HANA, use Azure Key Vault. SAP HANA no es compatible con Azure Key Vault, por lo que debe usar métodos alternativos como SAP ABAP o claves SSH.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
- "severity": "Medio",
- "text": "Considere la posibilidad de una estrategia de recuperación ante desastres entre regiones para cargas de trabajo críticas",
- "waf": "Fiabilidad"
+ "checklist": "SAP Checklist",
+ "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Personalice los roles de control de acceso basado en roles (RBAC) para las suscripciones de SAP en Azure spoke para evitar cambios accidentales relacionados con la red",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
+ "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
+ "service": "SAP",
"severity": "Alto",
- "text": "Si se implementa en un entorno aislado, use o migre a App Service Environment (ASE) v3",
- "waf": "Fiabilidad"
+ "text": "Aísle las DMZ y las NVA del resto del patrimonio de SAP, configure Azure Private Link y administre y controle de forma segura los recursos de SAP en Azure",
+ "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
+ "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "Considere la posibilidad de usar el software antimalware de Microsoft en Azure para proteger sus máquinas virtuales de archivos malintencionados, adware y otras amenazas.",
+ "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "Para una protección aún más eficaz, considere la posibilidad de usar Microsoft Defender para punto de conexión.",
+ "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
+ "waf": "Seguridad"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"severity": "Alto",
- "text": "Asegúrese de que \"Siempre activado\" esté habilitado para todas las aplicaciones de funciones que se ejecutan en el plan de App Service",
- "waf": "Fiabilidad"
+ "text": "Aísle los servidores de bases de datos y aplicaciones de SAP de Internet o de la red local pasando todo el tráfico a través de la red virtual del concentrador, que está conectada a la red radial mediante el emparejamiento de red virtual. Las redes virtuales emparejadas garantizan que la solución de SAP en Azure esté aislada de la red pública de Internet.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
- "severity": "Medio",
- "text": "Empareje una aplicación de funciones con su propia cuenta de almacenamiento. Intente no volver a usar las cuentas de almacenamiento para las aplicaciones de funciones a menos que estén estrechamente acopladas",
- "waf": "Fiabilidad"
+ "checklist": "SAP Checklist",
+ "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "Bajo",
+ "text": "En el caso de las aplicaciones orientadas a Internet, como SAP Fiori, asegúrese de distribuir la carga según los requisitos de la aplicación mientras se mantienen los niveles de seguridad. Para la seguridad de nivel 7, puede usar un firewall de aplicaciones web (WAF) de terceros disponible en Azure Marketplace.",
+ "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "waf": "Seguridad"
},
{
- "checklist": "Azure Function Review",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
+ "service": "SAP",
"severity": "Medio",
- "text": "Aproveche Azure DevOps o GitHub para optimizar la CI/CD y proteger el código de la aplicación de funciones",
- "waf": "Operaciones"
+ "text": "Para habilitar la comunicación segura en las soluciones de Azure Monitor para SAP, puede optar por usar un certificado raíz o un certificado de servidor. Le recomendamos encarecidamente que utilice certificados raíz.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Seguridad"
}
],
"metadata": {
"name": "WAF checklist",
- "timestamp": "June 24, 2024"
+ "timestamp": "October 02, 2024"
},
"severities": [
{
@@ -7847,7 +10007,7 @@
"name": "Cumplido"
},
{
- "description": "Recomendación entendida, pero no necesaria por los requisitos actuales",
+ "description": "Recomendación comprendida, pero no necesaria por los requisitos actuales",
"name": "No es necesario"
},
{
diff --git a/checklists/waf_checklist.ja.json b/checklists/waf_checklist.ja.json
index 63c89fe2f..feba01088 100644
--- a/checklists/waf_checklist.ja.json
+++ b/checklists/waf_checklist.ja.json
@@ -1,896 +1,618 @@
{
"items": [
{
- "checklist": "Azure Bot Service",
- "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
- "service": "Bot service",
- "severity": "中程度",
- "text": "Azure Bot Service の信頼性サポートの推奨事項に従う",
- "waf": "確実"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub は、保存データの暗号化を提供します。独自のキーを使用する場合、データは引き続き Microsoft マネージド キーを使用して暗号化されますが、さらに Microsoft マネージド キーはカスタマー マネージド キーを使用して暗号化されます。",
+ "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
+ "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
+ "service": "Event Hubs",
+ "severity": "低い",
+ "text": "必要に応じて、保存データの暗号化でカスタマー マネージド キー オプションを使用する",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "安全"
},
{
- "checklist": "Azure Bot Service",
- "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
- "service": "Bot service",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hubs 名前空間を使用すると、クライアントは TLS 1.0 以降でデータを送受信できます。より厳格なセキュリティ対策を適用するには、クライアントが新しいバージョンの TLS を使用してデータを送受信するように Event Hubs 名前空間を構成できます。Event Hubs 名前空間で TLS の最小バージョンが必要な場合、古いバージョンで行われた要求はすべて失敗します。",
+ "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "ローカル データ所在地とリージョン コンプライアンスを備えたボットのデプロイ",
- "waf": "確実"
+ "text": "要求に最低限必要なバージョンのトランスポート層セキュリティ (TLS) を適用する",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "安全"
},
{
- "checklist": "Azure Bot Service",
- "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
- "service": "Bot service",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Event Hubs 名前空間を作成すると、名前空間に対して RootManageSharedAccessKey という名前のポリシー規則が自動的に作成されます。このポリシーには、名前空間全体に対する管理アクセス許可があります。このルールは、管理ルートアカウントのように扱い、アプリケーションでは使用しないことをお勧めします。RBAC で認証プロバイダーとして AAD を使用することをお勧めします。",
+ "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "Azure Bot Service は、グローバル サービスとリージョン サービスの両方に対してアクティブ/アクティブ モードで実行されます。停止が発生した場合、エラーを検出したり、サービスを管理したりする必要はありません。Azure Bot Service は、複数リージョンの地理的アーキテクチャで自動フェールオーバーと自動復旧を自動的に実行します。EU ボット リージョン サービスの場合、Azure Bot Service は、冗長性を確保するために、アクティブ/アクティブ レプリケーションを備えたヨーロッパ内の 2 つの完全なリージョンを提供します。グローバル ボット サービスの場合、使用可能なすべてのリージョン/地域をグローバル フットプリントとして提供できます。",
- "waf": "確実"
+ "text": "必要のない場合はrootアカウントの使用を避けてください",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "安全"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
- "severity": "高い",
- "text": "ビジネスと SLO の要件に基づいて適切なロジック アプリのホスティング プランを選択する",
- "waf": "確実"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure リソースのマネージド ID は、Azure Virtual Machines (VM)、関数アプリ、Virtual Machine Scale Sets、その他のサービスで実行されているアプリケーションから Azure AD 資格情報を使用して、Event Hubs リソースへのアクセスを承認できます。Azure リソースのマネージド ID を Azure AD 認証と共に使用することで、クラウドで実行されるアプリケーションに資格情報を格納することを回避できます。",
+ "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
+ "service": "Event Hubs",
+ "severity": "中程度",
+ "text": "可能な場合は、アプリケーションでマネージド ID を使用して Azure Event Hub に対する認証を行う必要があります。そうでない場合は、ストレージ資格情報 (SAS、サービス プリンシパル資格情報) を Azure Key Vault または同等のサービスに用意することを検討してください",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "アクセス許可を作成するときは、Azure Event Hub へのクライアントのアクセスをきめ細かく制御します。Azure Event Hub のアクセス許可は、個々のリソース レベル (コンシューマー グループ、イベント ハブ エンティティ、イベント ハブ名前空間など) にスコープを設定する必要があり、またそうする必要があります。",
+ "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
+ "service": "Event Hubs",
"severity": "高い",
- "text": "ゾーンの冗長性と可用性ゾーンを使用してリージョンの障害からロジック アプリを保護する",
- "waf": "確実"
+ "text": "最小特権データ プレーン RBAC を使用する",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "安全"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
- "severity": "高い",
- "text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
- "waf": "確実"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub リソース ログには、操作ログ、仮想ネットワーク、Kafka ログが含まれます。ランタイム監査ログは、Event Hubs のすべてのデータ プレーン アクセス操作 (イベントの送受信など) に関する集計された診断情報をキャプチャします。",
+ "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
+ "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
+ "service": "Event Hubs",
+ "severity": "中程度",
+ "text": "セキュリティ調査のログ記録を有効にします。Azure Monitor を使用して、リソース ログ、ランタイム監査ログ、Kafka ログなどのメトリックとログをキャプチャします",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "安全"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
- "severity": "高い",
- "text": "分離環境にデプロイする場合は、App Service Environment (ASE) v3 を使用するか、それらに移行します",
- "waf": "確実"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "既定では、Azure Event Hub にはパブリック IP アドレスがあり、インターネットに到達できます。プライベート エンドポイントを使用すると、仮想ネットワークと Azure Event Hub の間のトラフィックが Microsoft のバックボーン ネットワークを経由するようになります。それに加えて、パブリックエンドポイントを使用しない場合は無効にする必要があります。",
+ "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
+ "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
+ "service": "Event Hubs",
+ "severity": "中程度",
+ "text": "プライベート エンドポイントを使用して Azure Event Hub にアクセスし、該当する場合はパブリック ネットワーク アクセスを無効にすることを検討してください。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "IP ファイアウォールを使用すると、パブリック エンドポイントを、CIDR (Classless Inter-Domain Routing) 表記の一連の IPv4 アドレスまたは IPv4 アドレス範囲のみに制限できます。",
+ "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "Azure DevOps または GitHub を活用して CI/CD を合理化し、ロジック アプリ コードを保護",
- "waf": "オペレーションズ"
+ "text": "特定の IP アドレスまたは範囲からの Azure Event Hub 名前空間へのアクセスのみを許可することを検討してください",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "ストレージに関連する Microsoft クラウド セキュリティ ベンチマークのガイダンスを適用する",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "\"ストレージの Azure セキュリティ ベースライン\" を検討する",
- "waf": "安全"
+ "text": "FTAレジリエンシーハンドブックの活用",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "既定では、Azure Storage にはパブリック IP アドレスがあり、インターネットにアクセス可能です。プライベート エンドポイントを使用すると、アクセスが必要な Azure コンピューティング リソースにのみ Azure Storage を安全に公開できるため、パブリック インターネットへの露出を排除できます",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "これは、ゾーン対応リージョンの Premium、Dedicated、または Standard SKU を使用してポータルから作成された新しい EH 名前空間に対して自動的にオンになります。EH メタデータとイベント データ自体の両方がゾーン間でレプリケートされます",
+ "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
+ "service": "Event Hubs",
"severity": "高い",
- "text": "Azure Storage にプライベート エンドポイントを使用することを検討する",
- "waf": "安全"
+ "text": "Availability Zones の活用 (地域的に適用可能な場合)",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "新しく作成されたストレージ アカウントは、RBAC や監査などがすべて有効になるように、ARM デプロイ モデルを使用して作成されます。サブスクリプションにクラシック デプロイ モデルの古いストレージ アカウントがないことを確認する",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
+ "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "古いストレージ アカウントで \"クラシック デプロイ モデル\" が使用されていないことを確認する",
- "waf": "安全"
+ "text": "予測可能なパフォーマンスのために Premium または Dedicated SKU を使用する",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Microsoft Defender を活用して、不審なアクティビティや構成ミスについて学習します。",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "組み込みの geo ディザスター リカバリー機能を有効にすると、名前空間の構成全体 (Event Hubs、コンシューマー グループ、設定) がプライマリ名前空間からセカンダリ名前空間に継続的にレプリケートされ、プライマリからセカンダリへのフェールオーバーをいつでも 1 回だけ行うことができます。アクティブ/パッシブ機能は、アプリケーション構成を変更することなく、障害が発生した Azure リージョンからの復旧と破棄を容易にするように設計されています",
+ "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
+ "service": "Event Hubs",
"severity": "高い",
- "text": "すべてのストレージ アカウントに対して Microsoft Defender を有効にする",
- "waf": "安全"
+ "text": "アクティブ パッシブ構成を使用した Geo ディザスター リカバリーの計画",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "論理的な削除メカニズムを使用すると、誤って削除された BLOB を回復できます。",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "ダウンしたリージョンでのイベントデータの停止または損失を許容できない DR 構成に使用する必要があります。このような場合は、レプリケーションのガイダンスに従い、組み込みの geo ディザスター リカバリー機能 (アクティブ/パッシブ) を使用しないでください。アクティブ/アクティブでは、異なるリージョンと名前空間で複数の Event Hubs を保持し、イベントはハブ間でレプリケートされます",
+ "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "BLOB の \"論理的な削除\" を有効にする",
- "waf": "安全"
+ "text": "ビジネス クリティカルなアプリケーションの場合は、アクティブ アクティブ構成を使用します",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由などから、削除された情報がすぐに削除されるようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナーに対して \"論理的な削除\" を選択的に無効にすることを検討してください。",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
+ "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
+ "service": "Event Hubs",
"severity": "中程度",
- "text": "BLOB の '論理的な削除' を無効にする",
- "waf": "安全"
+ "text": "回復力のある Event Hubs の設計",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "コンテナーの論理的な削除を使用すると、コンテナーが削除された後に回復できます (たとえば、偶発的な削除操作から回復します)。",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "コンテナーの \"論理的な削除\" を有効にする",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "severity": "中程度",
+ "text": "Azure Center for SAP solutions (ACSS) は、SAP を Azure 上の最上位のワークロードにする Azure オファリングです。ACSS は、Azure 上の統合ワークロードとして SAP システムを作成および実行し、イノベーションのためのよりシームレスな基盤を提供するエンドツーエンドのソリューションです。新しい Azure ベースの SAP システムと既存の SAP システムの両方の管理機能を利用できます。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由などから、削除された情報がすぐに削除されるようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナーに対して \"論理的な削除\" を選択的に無効にすることを検討してください。",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
"severity": "中程度",
- "text": "コンテナーの \"論理的な削除\" を無効にする",
- "waf": "安全"
+ "text": "Azure では、Linux と Windows での SAP デプロイの自動化がサポートされています。SAP Deployment Automation Framework は、SAP 環境をデプロイ、インストール、保守できるオープンソースのオーケストレーションツールです。",
+ "training": "https://github.com/Azure/sap-automation",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "削除前に削除ロックを最初に解除するようにユーザーに強制することで、ストレージ アカウントが誤って削除されないようにします",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "ストレージ アカウントでのリソース ロックの有効化",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
+ "severity": "中程度",
+ "text": "運用データベースのポイントインタイムリカバリを、RTOを満たす任意の時点と時間枠で実行します。ポイントインタイムリカバリには、通常、DBMSレイヤーまたはSAPを介してデータを削除するオペレーターのエラーが含まれます",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "BLOB の \"訴訟ホールド\" または \"時間ベースの保持\" ポリシーを検討して、BLOB、コンテナー、またはストレージ アカウントを削除できないようにします。「不可能」は実際には「不可能」を意味することに注意してください。ストレージ アカウントに不変の BLOB が含まれる場合、そのストレージ アカウントを \"取り除く\" 唯一の方法は、Azure サブスクリプションを取り消すことです。",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "不変の BLOB を検討する",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
+ "severity": "中程度",
+ "text": "バックアップ時間とリカバリ時間をテストして、災害後にすべてのシステムを同時にリストアするための RTO 要件を満たしていることを確認します。",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "ストレージ アカウントへの保護されていない HTTP/80 アクセスを無効にして、すべてのデータ転送が暗号化され、整合性が保護され、サーバーが認証されるようにすることを検討してください。",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "HTTPS を要求する (つまり、ストレージ アカウントのポート 80 を無効にする)",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "ストレージ アカウントでカスタム ドメイン (ホスト名) を構成する場合は、TLS/HTTPS が必要かどうかを確認します。その場合は、ストレージ アカウントの前に Azure CDN を配置する必要があります。",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
"severity": "高い",
- "text": "HTTPS を適用する (HTTP を無効にする) 場合は、ストレージ アカウントにカスタム ドメイン (CNAME) を使用していないことを確認します。",
- "waf": "安全"
+ "text": "ペアになっているリージョン間で標準ストレージをレプリケートすることはできますが、データベースや仮想ハード ディスクの保存に標準ストレージを使用することはできません。バックアップをレプリケートできるのは、使用するペアのリージョン間でのみです。他のすべてのデータについては、SQL Server Always On や SAP HANA システム レプリケーションなどのネイティブ DBMS 機能を使用してレプリケーションを実行します。SAP アプリケーション層には、Site Recovery、rsync または robocopy、およびその他のサードパーティ ソフトウェアを組み合わせて使用します。",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "クライアントが SAS トークンを使用して BLOB データにアクセスするときに HTTPS を要求すると、資格情報が失われるリスクを最小限に抑えることができます。",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"severity": "中程度",
- "text": "Shared Access Signature (SAS) トークンを HTTPS 接続のみに制限する",
- "waf": "安全"
+ "text": "Azure Availability Zones を使用して高可用性を実現する場合は、SAP アプリケーション サーバーとデータベース サーバー間の待機時間を考慮する必要があります。レイテンシーの高いゾーンでは、SAP アプリケーション・サーバーとデータベース・サーバーが常に同じゾーンで実行されていることを確認するための運用手順を整備する必要があります。",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "AAD トークンは、可能な限り、共有アクセス署名よりも優先する必要があります",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
"severity": "高い",
- "text": "BLOB アクセスに Azure Active Directory (Azure AD) トークンを使用する",
- "waf": "安全"
+ "text": "オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの ExpressRoute 接続を設定します。また、ExpressRoute を使用する代わりに、オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの VPN 接続を設定することを検討してください。",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "ユーザー、グループ、またはアプリケーションにロールを割り当てる場合は、タスクの実行に必要なアクセス許可のみをセキュリティ プリンシパルに付与します。リソースへのアクセスを制限することで、意図しないデータの誤用と悪意のあるデータの誤用の両方を防ぐことができます。",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
+ "severity": "低い",
+ "text": "証明書、シークレット、キーなどのキー コンテナーの内容をリージョン間でレプリケートして、DR リージョンのデータを復号化できるようにします。",
+ "waf": "確実"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
"severity": "中程度",
- "text": "IaM アクセス許可の最小特権",
- "waf": "安全"
+ "text": "プライマリ仮想ネットワークとディザスター リカバリー仮想ネットワークをピアリングします。たとえば、HANA システム レプリケーションの場合、SAP HANA DB 仮想ネットワークをディザスター リカバリー サイトの SAP HANA DB 仮想ネットワークにピアリングする必要があります。",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "ユーザー委任 SAS は、Azure Active Directory (Azure AD) 資格情報と、SAS に指定されたアクセス許可によってセキュリティで保護されます。ユーザー委任 SAS は、そのスコープと機能の点でサービス SAS に似ていますが、サービス SAS よりもセキュリティ上の利点があります。",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "SAS を使用する場合は、ストレージ アカウント キー ベースの SAS よりも \"ユーザー委任 SAS\" を優先します。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
+ "severity": "低い",
+ "text": "SAP デプロイに Azure NetApp Files ストレージを使用する場合は、少なくとも Premium レベルの 2 つのリージョンに 2 つの Azure NetApp Files アカウントを作成します。",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "ストレージ アカウント キー (\"共有キー\") には、監査機能がほとんどありません。誰がいつキーのコピーを取得したかを監視できますが、キーが複数の人の手に渡ると、使用状況を特定のユーザーに帰属させることは不可能です。AAD 認証のみに依存することで、ストレージへのアクセスをユーザーに結び付けやすくなります。",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
"severity": "高い",
- "text": "ストレージ アカウント キーを無効にして、AAD アクセス (およびユーザー委任 SAS) のみがサポートされるようにすることを検討してください。",
- "waf": "安全"
+ "text": "ネイティブ・データベース・レプリケーション・テクノロジーを使用して、HAペアのデータベースを同期する必要があります。",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "アクティビティ ログ データを使用して、ストレージ アカウントのセキュリティ (ストレージ アカウント キー、アクセス ポリシーなど) が \"いつ、誰が、何を、\"どのように\" 表示または変更されているかを特定します。",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
"severity": "高い",
- "text": "Azure Monitor を使用して、ストレージ アカウントに対するコントロール プレーン操作を監査することを検討してください",
- "waf": "安全"
+ "text": "プライマリ仮想ネットワーク (VNet) の CIDR は、DR サイトの VNet の CIDR と競合したり、重複したりしないようにする必要があります",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "キーの有効期限ポリシーを使用すると、アカウントアクセスキーのローテーションのリマインダーを設定できます。リマインダーは、指定した間隔が経過し、キーがまだローテーションされていない場合に表示されます。",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "ストレージ アカウント キーを使用する場合は、\"キーの有効期限ポリシー\" を有効にすることを検討してください",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "Site Recovery を使用して、アプリケーション サーバーを DR サイトにレプリケートします。Site Recovery は、セントラル サービス クラスター VM を DR サイトにレプリケートするのにも役立ちます。DR を呼び出すときは、DR サイトで Linux Pacemaker クラスターを再構成する必要があります (たとえば、VIP または SBD の置き換え、corosync.conf の実行など)。",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS 有効期限ポリシーでは、SAS が有効である推奨間隔を指定します。SAS 有効期限ポリシーは、サービス SAS またはアカウント SAS に適用されます。ユーザーがサービス SAS またはアカウント SAS を、推奨間隔よりも長い有効期間で生成すると、警告が表示されます。",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "SAS 有効期限ポリシーの構成を検討する",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "単一障害点に対する SAP ソフトウェアの可用性を検討します。これには、SAP NetWeaver や SAP S/4HANA アーキテクチャ、SAP ABAP や ASCS + SCS で使用される DBMS などのアプリケーション内の単一障害点が含まれます。また、SAP Web Dispatcher などの他のツールも含みます。",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "保存されているアクセス ポリシーを使用すると、ストレージ アカウント キーを再生成することなく、サービス SAS のアクセス許可を取り消すことができます。",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "保存されているアクセス ポリシーに SAS をリンクすることを検討する",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "SAP および SAP データベースの場合は、自動フェールオーバー クラスターの実装を検討してください。Windows では、Windows Server フェールオーバー クラスタリングはフェールオーバーをサポートします。Linux では、Linux Pacemaker や SIOS Protection Suite や Veritas InfoScale などのサードパーティツールがフェイルオーバーをサポートしています。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "チェックインされた接続文字列とストレージ アカウント キーを検出するようにアプリケーションのソース コード リポジトリを構成することを検討してください。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "Azure では、プライマリ VM とセカンダリ VM が DBMS データのストレージを共有するアーキテクチャはサポートされていません。DBMS レイヤーの一般的なアーキテクチャ パターンは、プライマリ VM とセカンダリ VM が使用するものとは異なるストレージ スタックを使用して、データベースを同時にレプリケートすることです。",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "理想的には、アプリケーションでマネージド ID を使用して Azure Storage に対する認証を行う必要があります。それが不可能な場合は、ストレージ資格情報 (接続文字列、ストレージ アカウント キー、SAS、サービス プリンシパル資格情報) を Azure KeyVault または同等のサービスに用意することを検討してください。",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
"severity": "高い",
- "text": "接続文字列を Azure KeyVault に格納することを検討する (マネージド ID が不可能なシナリオの場合)",
- "waf": "安全"
+ "text": "DBMS データとトランザクション/再実行ログ ファイルは、Azure でサポートされているブロック ストレージまたは Azure NetApp Files に格納されます。Azure Files または Azure Premium Files は、SAP ワークロードでの DBMS データや再実行ログ ファイルのストレージとしてサポートされていません。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "アドホック SAS サービス SAS またはアカウント SAS で、有効期限が近づいています。このように、SAS が侵害された場合でも、有効期間は短時間です。この方法は、保存されているアクセス ポリシーを参照できない場合に特に重要です。また、有効期限が近いと、BLOB にアップロードできる時間が制限されるため、BLOB に書き込めるデータの量も制限されます。",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
"severity": "高い",
- "text": "アドホックSASの有効期間を短くする",
- "waf": "安全"
+ "text": "Windows の Azure 共有ディスクは、ASCS + SCS コンポーネントと特定の高可用性シナリオに使用できます。フェールオーバー クラスターは、SAP アプリケーション レイヤー コンポーネントと DBMS レイヤー用に別々に設定します。Azure では現在、SAP アプリケーション レイヤー コンポーネントと DBMS レイヤーを 1 つのフェールオーバー クラスターに結合する高可用性アーキテクチャはサポートされていません。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS を作成するときは、できるだけ具体的かつ制限的にしてください。1 つのリソースと操作には、より広範なアクセスを提供する SAS よりも SAS を優先します。",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "SAS に狭いスコープを適用する",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "SAP アプリケーション レイヤー コンポーネント (ASCS) と DBMS レイヤーのほとんどのフェールオーバー クラスターには、フェールオーバー クラスターの仮想 IP アドレスが必要です。 Azure Load Balancer は、他のすべてのケースで仮想 IP アドレスを処理する必要があります。設計原則の 1 つは、クラスター構成ごとに 1 つのロード バランサーを使用することです。ロード バランサーの Standard バージョン (Standard Load Balancer SKU) を使用することをお勧めします。",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS には、SAS を使用してリソースを要求する権限をクライアント IP アドレスまたはアドレス範囲に与えるパラメーターを含めることができます。",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "可能な限り、SAS のスコープを特定のクライアント IP アドレスに設定することを検討してください",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "フローティング IP がロードバランサーで有効になっていることを確認します",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS は、クライアントがアップロードするデータの量を制限できません。時間の経過に伴うストレージ容量の価格モデルを考えると、クライアントが悪意を持って大きなコンテンツをアップロードしたかどうかを検証することは理にかなっているかもしれません。",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
- "severity": "低い",
- "text": "クライアントが SAS を使用してファイルをアップロードした後、アップロードされたデータを確認することを検討してください。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "高可用性インフラストラクチャをデプロイする前に、選択したリージョンに応じて、Azure 可用性セットと可用性ゾーンのどちらを使用してデプロイするかを決定します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "\"ローカル ユーザー アカウント\" を使用して SFTP 経由で BLOB ストレージにアクセスする場合、\"通常の\" RBAC 制御は適用されません。NFS または REST 経由の BLOB アクセスは、SFTP アクセスよりも制限が厳しい場合があります。残念ながら、2023 年初頭の時点で、SFTP エンドポイントで現在サポートされている ID 管理の形式はローカル ユーザーだけです",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
"severity": "高い",
- "text": "SFTP: SFTPアクセスの「ローカルユーザー」の数を制限し、時間の経過とともにアクセスが必要かどうかを監査します。",
- "waf": "安全"
+ "text": "SAP コンポーネント (セントラル サービス、アプリケーション サーバー、データベース) のアプリケーションのインフラストラクチャ SLA を満たす場合は、すべてのコンポーネントに対して同じ高可用性オプション (VM、可用性セット、可用性ゾーン) を選択する必要があります。",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "SFTP: SFTP エンドポイントは、POSIX ライクな ACL をサポートしていません。",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "ストレージは、CORS (Cross-Origin Resource Sharing)、つまり、異なるドメインの Web アプリが同一生成元ポリシーを緩めることを可能にする HTTP 機能をサポートしています。CORS を有効にする場合は、CorsRules を最小の特権に保ちます。",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "過度に広範な CORS ポリシーを避ける",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "保存データは常にサーバー側で暗号化され、さらにクライアント側でも暗号化される場合があります。サーバー側の暗号化は、プラットフォーム マネージド キー (既定) またはカスタマー マネージド キーを使用して行われる場合があります。クライアント側の暗号化は、クライアントが BLOB ごとに暗号化/暗号化解除キーを Azure Storage に提供するか、クライアント側で暗号化を完全に処理することによって行われます。そのため、機密性の保証を Azure Storage にまったく依存しません。",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"severity": "高い",
- "text": "保存データの暗号化方法を決定します。データのスレッド モデルを理解します。",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
- "severity": "中程度",
- "text": "どのプラットフォーム暗号化を使用するか、または使用するかを決定します。",
- "waf": "安全"
+ "text": "同じ可用性セットに異なる役割のサーバーを混在させないでください。中央サービス VM、データベース VM、アプリケーション VM を独自の可用性セットに保持します",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "確実"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
"severity": "中程度",
- "text": "クライアント側の暗号化を使用するかどうかを決定します。",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "Resource Graph エクスプローラー (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) を利用して、匿名 BLOB アクセスを許可するストレージ アカウントを検索します。",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
- "severity": "高い",
- "text": "パブリック BLOB アクセスが必要かどうか、または特定のストレージ アカウントに対して無効にできるかどうかを検討します。",
- "waf": "安全"
- },
- {
- "checklist": "Redis Resiliency checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
- "severity": "高い",
- "text": "Azure Cache for Redis のゾーン冗長を有効にします。Azure Cache for Redis では、Premium レベルと Enterprise レベルでゾーン冗長構成がサポートされています。ゾーン冗長キャッシュでは、同じリージョン内の異なる Azure Availability Zones にノードを配置できます。これにより、データセンターや AZ の停止が単一障害点として排除され、キャッシュの全体的な可用性が向上します。",
+ "text": "近接配置グループを使用しない限り、Azure 可用性ゾーン内に Azure 可用性セットをデプロイすることはできません。",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"waf": "確実"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
- "severity": "中程度",
- "text": "Azure Cache for Redis インスタンスのデータ永続化を構成します。キャッシュ データはメモリに格納されるため、まれに複数のノードで計画外の障害が発生すると、すべてのデータがドロップされる可能性があります。データの完全な損失を回避するために、Redis 永続化では、メモリ内データのスナップショットを定期的に取得し、ストレージ アカウントに格納できます。",
+ "checklist": "SAP Checklist",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "可用性セットを作成するときは、使用可能な障害ドメインと更新ドメインの最大数を使用します。たとえば、1 つの可用性セットに 2 つ以上の VM をデプロイする場合は、Azure の計画メンテナンスに加えて、潜在的な物理ハードウェア障害、ネットワーク停止、または電源中断の影響を制限するために、最大数の障害ドメイン (3) と十分な更新ドメインを使用します。障害ドメインのデフォルトの数は 2 で、後でオンラインで変更することはできません。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
"waf": "確実"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
- "severity": "中程度",
- "text": "geo 冗長ストレージ アカウントを使用して Azure Cache for Redis データを保持するか、geo 冗長性を使用できない場合はゾーン冗長を使用します",
+ "checklist": "SAP Checklist",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "可用性セットのデプロイで Azure 近接配置グループを使用する場合、3 つの SAP コンポーネント (中央サービス、アプリケーション サーバー、データベース) すべてが同じ近接配置グループに存在する必要があります。",
"waf": "確実"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
- "severity": "中程度",
- "text": "Premium Azure Cache for Redis インスタンスのパッシブ geo レプリケーションを構成します。geo レプリケーションは、2 つ以上の Azure Cache for Redis インスタンス (通常は 2 つの Azure リージョンにまたがる) をリンクするためのメカニズムです。geo レプリケーションは、主にリージョン間のディザスター リカバリー用に設計されています。2 つの Premium レベルのキャッシュ インスタンスは、プライマリ キャッシュへの読み取りと書き込みを提供する方法で geo レプリケーションを介して接続され、そのデータはセカンダリ キャッシュにレプリケートされます。",
+ "checklist": "SAP Checklist",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "高い",
+ "text": "SAP SID ごとに 1 つの近接配置グループを使用します。グループは Availability Zones または Azure リージョンにまたがっていません",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
- "severity": "中程度",
- "text": "Azure Center for SAP solutions (ACSS) は、SAP を Azure 上のトップレベルのワークロードにする Azure オファリングです。ACSS は、SAP システムを Azure 上の統合ワークロードとして作成および実行し、イノベーションのためのよりシームレスな基盤を提供するエンドツーエンドのソリューションです。新規と既存の Azure ベースの SAP システムの両方の管理機能を利用できます。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
- "waf": "オペレーションズ"
+ "severity": "高い",
+ "text": "次のいずれかのサービスを使用して、オペレーティング システムに応じて SAP セントラル サービス クラスターを実行します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
"service": "SAP",
"severity": "中程度",
- "text": "Azure では、Linux と Windows での SAP デプロイの自動化がサポートされています。SAP Deployment Automation Framework は、SAP 環境をデプロイ、インストール、および保守できるオープンソースのオーケストレーション ツールです。",
- "training": "https://github.com/Azure/sap-automation",
- "waf": "オペレーションズ"
+ "text": "現在、Azure では、同じ Linux Pacemaker クラスターでの ASCS と DB HA の組み合わせはサポートされていません。それらを個々のクラスターに分割します。ただし、最大 5 つの複数の中央サービス クラスターを 1 つの VM のペアに結合できます。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
"service": "SAP",
"severity": "中程度",
- "text": "運用データベースのポイントインタイム リカバリを、RTOを満たす任意の時点および時間枠で実行します。ポイント・イン・タイム・リカバリには、通常、DBMSレイヤー上またはSAPを介してデータを削除するオペレーター・エラーが含まれます",
+ "text": "両方の VM を高可用性ペア、可用性セット、または可用性ゾーンにデプロイします。これらの VM は、同じサイズで、同じストレージ構成である必要があります。",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
"service": "SAP",
"severity": "中程度",
- "text": "バックアップと復旧の時間をテストして、災害発生後にすべてのシステムを同時に復元するための RTO 要件を満たしていることを確認します。",
+ "text": "Azure では、Red Hat Enterprise Linux (RHEL) で実行されている同じ高可用性クラスター上での SAP HANA インスタンスと ASCS/SCS インスタンスと ERS インスタンスのインストールと構成がサポートされています。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
"service": "SAP",
"severity": "高い",
- "text": "ペアのリージョン間で Standard Storage をレプリケートすることはできますが、Standard Storage を使用してデータベースや仮想ハード ディスクを格納することはできません。バックアップは、使用するペアのリージョン間でのみレプリケートできます。その他のすべてのデータについては、SQL Server Always On や SAP HANA システム レプリケーションなどのネイティブ DBMS 機能を使用してレプリケーションを実行します。SAP アプリケーション層には、Site Recovery、rsync または robocopy、およびその他のサードパーティ ソフトウェアを組み合わせて使用します。",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "text": "すべての運用システムを Premium マネージド SSD で実行し、Azure NetApp Files または Ultra Disk Storage を使用します。少なくとも、OS ディスクは Premium レベルにある必要があるため、パフォーマンスの向上と最高の SLA を実現できます。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
"service": "SAP",
- "severity": "中程度",
- "text": "Azure Availability Zones を使用して高可用性を実現する場合は、SAP アプリケーション サーバーとデータベース サーバー間の待機時間を考慮する必要があります。待機時間が長いゾーンでは、SAP アプリケーション サーバーとデータベース サーバーが常に同じゾーンで実行されていることを確認するための運用手順を実施する必要があります。",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "severity": "高い",
+ "text": "Azure で SAP HANA を実行するのは、SAP によって認定されたストレージの種類のみにしてください。特定のボリュームは、該当する場合、特定のディスク構成で実行する必要があることに注意してください。これらの構成には、書き込みアクセラレータの有効化と Premium ストレージの使用が含まれます。また、ストレージ上で実行されるファイルシステムが、マシン上で実行される DBMS と互換性があることを確認する必要があります。",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
"service": "SAP",
"severity": "高い",
- "text": "オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの ExpressRoute 接続を設定します。また、ExpressRoute を使用する代わりに、オンプレミスからプライマリおよびセカンダリの Azure ディザスター リカバリー リージョンへの VPN 接続を設定することも検討してください。",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "text": "SAP ワークロードに使用するストレージのタイプに応じて、高可用性を構成することを検討してください。Azure で使用できる一部のストレージ サービスは Azure Site Recovery でサポートされていないため、高可用性の構成が異なる場合があります。",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
"service": "SAP",
- "severity": "低い",
- "text": "証明書、シークレット、キーなどのキー コンテナーの内容をリージョン間でレプリケートして、DR リージョン内のデータの暗号化を解除できるようにします。",
+ "severity": "高い",
+ "text": "さまざまなネイティブ Azure ストレージ サービス (Azure Files、Azure NetApp Files、Azure Shared Disk など) は、すべてのリージョンで使用できるとは限りません。そのため、フェールオーバー後に DR リージョンで同様の SAP を設定するには、それぞれのストレージ サービスが DR サイトで提供されていることを確認します。",
"waf": "確実"
},
{
"checklist": "SAP Checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
"service": "SAP",
"severity": "中程度",
- "text": "プライマリ仮想ネットワークとディザスター リカバリー仮想ネットワークをピアリングします。たとえば、HANA システム レプリケーションの場合、SAP HANA DB 仮想ネットワークは、ディザスター リカバリー サイトの SAP HANA DB 仮想ネットワークにピアリングする必要があります。",
- "waf": "確実"
+ "text": "SAPシステムのStart-Stopを自動化してコストを管理します。",
+ "waf": "費用"
},
{
"checklist": "SAP Checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
"service": "SAP",
"severity": "低い",
- "text": "SAP デプロイに Azure NetApp Files ストレージを使用する場合は、少なくとも、Premium レベルの 2 つのリージョンに 2 つの Azure NetApp Files アカウントを作成します。",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
- "waf": "確実"
+ "text": "Azure Premium Storage を SAP HANA と共に使用する場合、Azure Standard SSD ストレージを使用して、コストを意識したストレージ ソリューションを選択できます。ただし、Standard SSD または Standard HDD Azure ストレージを選択すると、個々の VM の SLA に影響することに注意してください。また、非本番環境など、I/O スループットが低く、レイテンシが低いシステムでは、下位シリーズの VM を使用できます。",
+ "waf": "費用"
},
{
"checklist": "SAP Checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
"service": "SAP",
- "severity": "高い",
- "text": "ネイティブのデータベースレプリケーションテクノロジーを使用して、HAペアでデータベースを同期する必要があります。",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
- "waf": "確実"
+ "severity": "低い",
+ "text": "低コストの代替構成 (多目的) として、非運用 HANA データベース サーバー VM に低パフォーマンスの SKU を選択できます。ただし、E シリーズなどの一部の VM タイプは、HANA 認定 (SAP HANA ハードウェア ディレクトリ) されていないか、1 ミリ秒未満のストレージ待機時間を実現できないことに注意してください。",
+ "waf": "費用"
},
{
"checklist": "SAP Checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
"service": "SAP",
"severity": "高い",
- "text": "プライマリ仮想ネットワーク (VNet) の CIDR は、DR サイトの VNet の CIDR と競合したり重複したりしないようにする必要があります",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "確実"
+ "text": "管理グループ、サブスクリプション、リソース グループ、リソースに RBAC モデルを適用する",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
"service": "SAP",
- "severity": "高い",
- "text": "Site Recovery を使用して、アプリケーション サーバーを DR サイトにレプリケートします。Site Recovery は、セントラル サービス クラスター VM を DR サイトにレプリケートする場合にも役立ちます。DR を呼び出すときは、DR サイトで Linux Pacemaker クラスターを再構成する必要があります (たとえば、VIP または SBD の置き換え、corosync.conf の実行など)。",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "クラウド コネクタを介して SAP クラウド アプリケーションから SAP オンプレミス (IaaS を含む) に ID を転送するためのプリンシパル伝達の強制",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
"service": "SAP",
- "severity": "高い",
- "text": "単一障害点に対する SAP ソフトウェアの可用性を検討します。これには、SAP NetWeaver や SAP S/4HANA アーキテクチャ、SAP ABAP、ASCS + SCS で使用される DBMS などのアプリケーション内の単一障害点が含まれます。また、SAP Web ディスパッチャなどの他のツールも必要です。",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "SAML を使用して、SAP Analytics Cloud、SAP Cloud Platform、Business by Design、SAP Qualtrics、SAP C4C with Azure AD などの SAP SaaS アプリケーションに SSO を実装します。",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
- "severity": "高い",
- "text": "SAP および SAP データベースの場合は、自動フェールオーバー クラスターの実装を検討してください。Windows では、Windows Server フェールオーバー クラスタリングがフェールオーバーをサポートします。Linux では、Linux Pacemaker や、SIOS Protection Suite や Veritas InfoScale などのサードパーティツールがフェイルオーバーをサポートしています。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "SAML を使用して、SAP Fiori や SAP Web GUI などの SAP NetWeaver ベースの Web アプリケーションに SSO を実装します。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
"service": "SAP",
- "severity": "高い",
- "text": "Azure では、プライマリ VM とセカンダリ VM が DBMS データのストレージを共有するアーキテクチャはサポートされていません。DBMSレイヤーの場合、一般的なアーキテクチャパターンは、プライマリおよびセカンダリVMが使用するストレージスタックとは異なるストレージスタックを使用して、データベースを同時にレプリケートすることです。",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "SAML を使用して、SAP Fiori や SAP Web GUI などの SAP NetWeaver ベースの Web アプリケーションに SSO を実装します。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
"service": "SAP",
- "severity": "高い",
- "text": "DBMS データとトランザクション/REDO ログ ファイルは、Azure でサポートされているブロック ストレージまたは Azure NetApp Files に格納されます。Azure Files または Azure Premium Files は、SAP ワークロードでの DBMS データや再実行ログ ファイルのストレージとしてはサポートされていません。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "SAP NetWeaver SSO またはパートナソリューションを使用して、SAP GUI への SSO を実装することができます。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
"service": "SAP",
- "severity": "高い",
- "text": "Windows の Azure 共有ディスクは、ASCS + SCS コンポーネントと特定の高可用性シナリオに使用できます。フェールオーバー クラスターは、SAP アプリケーション層コンポーネントと DBMS 層に対して個別に設定します。現在、Azure では、SAP アプリケーション レイヤー コンポーネントと DBMS レイヤーを 1 つのフェールオーバー クラスターに結合する高可用性アーキテクチャはサポートされていません。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "SAP GUIおよびWebブラウザアクセスのSSOには、構成と保守が容易なSNC / Kerberos / SPNEGO(シンプルで保護されたGSSAPIネゴシエーションメカニズム)を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP Secure Login Server を検討してください。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
"service": "SAP",
- "severity": "高い",
- "text": "SAP アプリケーション レイヤー コンポーネント (ASCS) と DBMS レイヤーのほとんどのフェールオーバー クラスターでは、フェールオーバー クラスターの仮想 IP アドレスが必要です。 Azure Load Balancer は、他のすべてのケースで仮想 IP アドレスを処理する必要があります。設計原則の 1 つは、クラスター構成ごとに 1 つのロード バランサーを使用することです。ロード バランサーの Standard バージョン (Standard Load Balancer SKU) を使用することをお勧めします。",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "SAP GUIおよびWebブラウザアクセスのSSOには、構成と保守が容易なSNC / Kerberos / SPNEGO(シンプルで保護されたGSSAPIネゴシエーションメカニズム)を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP Secure Login Server を検討してください。",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
- "service": "SAP",
- "severity": "高い",
- "text": "ロードバランサーでフローティング IP が有効になっていることを確認します",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "SAP",
- "severity": "高い",
- "text": "高可用性インフラストラクチャをデプロイする前に、選択したリージョンに応じて、Azure 可用性セットと可用性ゾーンのどちらを使用してデプロイするかを決定します。",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
- "service": "SAP",
- "severity": "高い",
- "text": "SAP コンポーネント (セントラル サービス、アプリケーション サーバー、データベース) のアプリケーションのインフラストラクチャ SLA を満たす場合は、すべてのコンポーネントに対して同じ高可用性オプション (VM、可用性セット、可用性ゾーン) を選択する必要があります。",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
- "severity": "高い",
- "text": "同じ可用性セット内に異なるロールのサーバーを混在させないでください。セントラル サービス VM、データベース VM、アプリケーション VM を独自の可用性セットに保持する",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
- "service": "SAP",
- "severity": "中程度",
- "text": "近接通信配置グループを使用しない限り、Azure 可用性ゾーン内に Azure 可用性セットをデプロイすることはできません。",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
- "severity": "高い",
- "text": "可用性セットを作成するときは、使用可能な障害ドメインと更新ドメインの最大数を使用します。たとえば、1 つの可用性セットに 2 つ以上の VM をデプロイする場合は、Azure の計画メンテナンスに加えて、潜在的な物理ハードウェア障害、ネットワークの停止、または停電の影響を制限するために、最大数の障害ドメイン (3 つ) と十分な更新ドメインを使用します。障害ドメインの既定の数は 2 であり、後でオンラインで変更することはできません。",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "高い",
- "text": "可用性セットのデプロイで Azure 近接通信配置グループを使用する場合は、3 つの SAP コンポーネント (セントラル サービス、アプリケーション サーバー、データベース) をすべて同じ近接通信配置グループに含める必要があります。",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "高い",
- "text": "SAP SID ごとに 1 つの近接配置グループを使用します。グループは、Availability Zones や Azure リージョンにまたがっていません",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "高い",
- "text": "オペレーティング システムに応じて、次のいずれかのサービスを使用して SAP セントラル サービス クラスターを実行します。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
- "service": "SAP",
- "severity": "中程度",
- "text": "現在、Azure では、同じ Linux Pacemaker クラスターでの ASCS と DB HA の組み合わせはサポートされていません。それらを個々のクラスターに分離します。ただし、最大 5 つの複数のセントラル サービス クラスターを 1 つの VM のペアに結合できます。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "中程度",
- "text": "両方の VM を高可用性ペアの可用性セットまたは可用性ゾーンにデプロイします。これらの VM は、同じサイズで、同じストレージ構成を持つ必要があります。",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
- "service": "SAP",
- "severity": "中程度",
- "text": "Azure では、Red Hat Enterprise Linux (RHEL) で実行されている同じ高可用性クラスターへの SAP HANA インスタンスと ASCS/SCS インスタンスと ERS インスタンスのインストールと構成がサポートされています。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
- "severity": "高い",
- "text": "Premium マネージド SSD ですべての運用システムを実行し、Azure NetApp Files または Ultra Disk Storage を使用します。少なくとも、OS ディスクは Premium レベルにすることで、パフォーマンスの向上と最高の SLA を実現できます。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
- "service": "SAP",
- "severity": "高い",
- "text": "SAP HANA on Azure は、SAP によって認定された種類のストレージでのみ実行する必要があります。該当する場合は、特定のボリュームを特定のディスク構成で実行する必要があることに注意してください。これらの構成には、書き込みアクセラレータの有効化と Premium Storage の使用が含まれます。また、ストレージ上で稼働するファイル システムが、マシン上で稼働する DBMS と互換性があることを確認する必要もあります。",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
- "service": "SAP",
- "severity": "高い",
- "text": "SAP ワークロードに使用するストレージの種類に応じて、高可用性を構成することを検討してください。Azure で使用できる一部のストレージ サービスは Azure Site Recovery でサポートされていないため、高可用性の構成が異なる場合があります。",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
- "severity": "高い",
- "text": "さまざまなネイティブ Azure ストレージ サービス (Azure Files、Azure NetApp Files、Azure Shared Disk など) は、リージョンによっては利用できない場合があります。そのため、フェールオーバー後に DR リージョンで同様の SAP 設定を行うには、それぞれのストレージ サービスが DR サイトで提供されていることを確認します。",
- "waf": "確実"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAP システムのスタート/ストップを自動化してコストを管理します。",
- "waf": "費用"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "低い",
- "text": "SAP HANA で Azure Premium Storage を使用する場合は、Azure Standard SSD ストレージを使用して、コスト意識の高いストレージ ソリューションを選択できます。ただし、Standard SSD または Standard HDD Azure Storage を選択すると、個々の VM の SLA に影響することに注意してください。また、非運用環境など、I/O スループットが低く待機時間が短いシステムでは、下位のシリーズ VM を使用できます。",
- "waf": "費用"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "低い",
- "text": "低コストの代替構成 (多目的) として、非運用環境の HANA データベース サーバー VM に低パフォーマンスの SKU を選択できます。ただし、E シリーズなどの一部の VM の種類は、HANA 認定 (SAP HANA Hardware Directory) されていないか、ストレージ待機時間を 1 ミリ秒未満にできないことに注意することが重要です。",
- "waf": "費用"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
- "service": "SAP",
- "severity": "高い",
- "text": "管理グループ、サブスクリプション、リソース グループ、およびリソースに RBAC モデルを適用する",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "中程度",
- "text": "Cloud Connector を介して SAP クラウド アプリケーションからオンプレミス (IaaS を含む) に ID を転送するためのプリンシパル伝達を適用する",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAML を使用して Azure AD で SAP Analytics Cloud、SAP Cloud Platform、Business by Design、SAP Qualtrics、SAP C4C などの SAP SaaS アプリケーションに SSO を実装します。",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAML を使用して、SAP Fiori や SAP Web GUI などの SAP NetWeaver ベースの Web アプリケーションに SSO を実装します。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAML を使用して、SAP Fiori や SAP Web GUI などの SAP NetWeaver ベースの Web アプリケーションに SSO を実装します。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAP NetWeaver SSO またはパートナーソリューションを使用して、SAP GUI への SSO を実装できます。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAP GUI および Web ブラウザアクセスの SSO には、設定とメンテナンスが容易なため、SNC/Kerberos/SPNEGO (シンプルで保護された GSSAPI ネゴシエーションメカニズム) を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP セキュアログインサーバーを検討してください。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
- "service": "SAP",
- "severity": "中程度",
- "text": "SAP GUI および Web ブラウザアクセスの SSO には、設定とメンテナンスが容易なため、SNC/Kerberos/SPNEGO (シンプルで保護された GSSAPI ネゴシエーションメカニズム) を実装します。X.509 クライアント証明書を使用した SSO の場合は、SAP SSO ソリューションのコンポーネントである SAP セキュアログインサーバーを検討してください。",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
"service": "SAP",
"severity": "中程度",
- "text": "OAuth for SAP NetWeaver を使用して SSO を実装し、サードパーティまたはカスタムアプリケーションが SAP NetWeaver OData サービスにアクセスできるようにします。",
+ "text": "SAP NetWeaver の OAuth を使用して SSO を実装し、サードパーティまたはカスタムアプリケーションが SAP NetWeaver OData サービスにアクセスできるようにします。",
"waf": "安全"
},
{
@@ -899,7 +621,7 @@
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
"service": "SAP",
"severity": "中程度",
- "text": "SAP HANAへのSSOの実装",
+ "text": "SAP HANA への SSO の実装",
"waf": "安全"
},
{
@@ -908,7 +630,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
"service": "SAP",
"severity": "中程度",
- "text": "Azure AD は、RISE でホストされている SAP システムの ID プロバイダーであると考えてください。詳細については、「サービスと Azure AD の統合」を参照してください。",
+ "text": "Azure AD は、RISE でホストされている SAP システムの ID プロバイダーと考えてください。詳細については、「サービスと Azure AD の統合」を参照してください。",
"waf": "安全"
},
{
@@ -917,7 +639,7 @@
"link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
"service": "SAP",
"severity": "中程度",
- "text": "SAP にアクセスするアプリケーションでは、プリンシパル伝搬を使用して SSO を確立することができます。",
+ "text": "SAP にアクセスするアプリケーションの場合は、プリンシパル伝搬を使用して SSO を確立することができます。",
"waf": "安全"
},
{
@@ -926,7 +648,7 @@
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
"service": "SAP",
"severity": "中程度",
- "text": "SAP Identity Authentication Service (IAS) を必要とする SAP BTP サービスまたは SaaS ソリューションを使用している場合は、SAP Cloud Identity Authentication Services と Azure AD の間に SSO を実装して、それらの SAP サービスにアクセスすることを検討してください。この統合により、SAP IAS はプロキシ ID プロバイダーとして機能し、認証要求を中央ユーザー ストアおよび ID プロバイダーとして Azure AD に転送できます。",
+ "text": "SAP Identity Authentication Service (IAS) を必要とする SAP BTP サービスまたは SaaS ソリューションを使用している場合は、SAP Cloud Identity Authentication サービスと Azure AD の間に SSO を実装して、それらの SAP サービスにアクセスすることを検討してください。この統合により、SAP IAS はプロキシ ID プロバイダーとして機能し、認証要求を中央ユーザー ストアおよび ID プロバイダーとして Azure AD に転送できます。",
"waf": "安全"
},
{
@@ -944,46 +666,51 @@
"link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
"service": "SAP",
"severity": "中程度",
- "text": "SAP SuccessFactors を使用している場合は、Azure AD の自動ユーザー プロビジョニングの使用を検討してください。この統合により、SAP SuccessFactors に新しい従業員を追加するときに、Azure AD でユーザー アカウントを自動的に作成できます。 必要に応じて、Microsoft 365 または Azure AD でサポートされているその他の SaaS アプリケーションでユーザー アカウントを作成できます。 SAP SuccessFactors へのメール アドレスの書き戻しを使用します。",
+ "text": "SAP SuccessFactors を使用している場合は、Azure AD 自動ユーザー プロビジョニングの使用を検討してください。この統合により、新しい従業員を SAP SuccessFactors に追加すると、Azure AD でそのユーザー アカウントを自動的に作成できます。必要に応じて、Microsoft 365 または Azure AD でサポートされている他の SaaS アプリケーションでユーザー アカウントを作成できます。メール アドレスを SAP SuccessFactors に書き戻します。",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
+ "description": "管理グループの階層を適度にフラットに保ちます (4 つ以下)。",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
"guid": "6ba28021-4591-4147-9e39-e5309cccd979",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
"service": "SAP",
"severity": "中程度",
- "text": "既存の管理グループ ポリシーを SAP サブスクリプションに適用する",
+ "text": "既存の管理グループポリシーをSAPサブスクリプションに適用",
"training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
"guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高い",
- "text": "緊密に結合されたアプリケーションを同じSAPサブスクリプションに統合し、ルーティングと管理の複雑さを回避",
+ "text": "緊密に結合されたアプリケーションを同じSAPサブスクリプションに統合して、ルーティングと管理の複雑さを回避",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高い",
- "text": "サブスクリプションをスケール ユニットとして活用し、リソースをスケーリングし、環境ごとにサブスクリプションをデプロイすることを検討してください。サンドボックス、非製品、製品",
+ "text": "サブスクリプションをスケールユニットとして活用し、リソースをスケーリングし、環境ごとにサブスクリプションをデプロイすることを検討してください。サンドボックス、非製品、製品",
"training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
"guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
"link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
"service": "SAP",
"severity": "高い",
- "text": "サブスクリプションのプロビジョニングの一環としてクォータを確実に増やす (例: サブスクリプション内で使用可能な VM コアの合計数)",
+ "text": "サブスクリプションのプロビジョニングの一部としてクォータの増加を確認する (例: サブスクリプション内の使用可能な VM コアの合計)",
"training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"waf": "オペレーションズ"
},
@@ -993,7 +720,7 @@
"link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
"service": "SAP",
"severity": "低い",
- "text": "クォータ API は、Azure サービスのクォータを表示および管理するために使用できる REST API です。必要に応じて使用を検討してください。",
+ "text": "Quota API は、Azure サービスのクォータを表示および管理するために使用できる REST API です。必要に応じて使用を検討してください。",
"waf": "オペレーションズ"
},
{
@@ -1002,7 +729,7 @@
"link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
"service": "SAP",
"severity": "高い",
- "text": "可用性ゾーンにデプロイする場合は、クォータが承認されたら、VM のゾーン デプロイが使用可能であることを確認します。必要なサブスクリプション、VM シリーズ、CPU の数、可用性ゾーンを含むサポート リクエストを送信します。",
+ "text": "可用性ゾーンにデプロイする場合は、クォータが承認されたら、VM のゾーン デプロイが使用可能であることを確認してください。サブスクリプション、VM シリーズ、CPU の数、必要な可用性ゾーンを含むサポート リクエストを送信します。",
"waf": "オペレーションズ"
},
{
@@ -1011,17 +738,18 @@
"link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
"service": "SAP",
"severity": "高い",
- "text": "必要なサービスと機能が、選択した展開リージョン内で利用可能であることを確認します。ANF、ゾーンなど",
+ "text": "必要なサービスと機能が、選択したデプロイ リージョン内で使用できることを確認します。ANF、ゾーンなど",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
"service": "SAP",
"severity": "中程度",
- "text": "コストの分類とリソースのグループ化 (BillTo、部門 (または部署)、環境 (運用、ステージ、開発)、層 (Web 層、アプリケーション層)、アプリケーション所有者、プロジェクト名) に Azure リソース タグを活用します",
+ "text": "コストの分類とリソースのグループ化に Azure リソース タグを活用します (: BillTo、部門 (または部署)、環境 (運用、ステージ、開発)、階層 (Web 層、アプリケーション層)、アプリケーション所有者、ProjectName)",
"training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "オペレーションズ"
},
@@ -1031,7 +759,7 @@
"link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
"severity": "高い",
- "text": "Azure Backup サービスを使用して HANA データベースを保護するのに役立ちます。",
+ "text": "Azure Backup サービスを使用して HANA データベースを保護します。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "確実"
},
@@ -1041,7 +769,7 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
"service": "SAP",
"severity": "中程度",
- "text": "HANA、Oracle、または DB2 データベースに Azure NetApp Files をデプロイする場合は、Azure アプリケーション整合性スナップショット ツール (AzAcSnap) を使用して、アプリケーション整合性スナップショットを作成します。AzAcSnap は Oracle データベースもサポートしています。個々の VM ではなく、中央の VM で AzAcSnap を使用することを検討してください。",
+ "text": "HANA 、 Oracle 、または DB2 データベースに Azure NetApp Files をデプロイする場合は、 Azure アプリケーション整合性スナップショット ツール (AzAcSnap) を使用して、アプリケーション整合性スナップショットを作成します。AzAcSnap は Oracle データベースもサポートしています。AzAcSnap は、個々の VM ではなく、中央の VM で使用することを検討してください。",
"waf": "確実"
},
{
@@ -1059,7 +787,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
"service": "SAP",
"severity": "中程度",
- "text": "異なるアプリケーション サービスを同じクラスターにグループ化しないでください。たとえば、DRBDとセントラルサービスクラスタを同じクラスタに組み合わせないでください。ただし、同じ Pacemaker クラスターを使用して、約 5 つの異なるセントラル サービス (マルチ SID クラスター) を管理できます。",
+ "text": "同じクラスター内で異なるアプリケーション サービスをグループ化しないでください。たとえば、DRBDと中央サービスクラスタを同じクラスタに組み合わせないでください。ただし、同じ Pacemaker クラスターを使用して、約 5 つの異なる中央サービス (マルチ SID クラスター) を管理できます。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "確実"
},
@@ -1069,7 +797,7 @@
"link": "https://azure.microsoft.com/pricing/offers/dev-test/",
"service": "SAP",
"severity": "低い",
- "text": "スヌーズ モデルで開発/テスト システムを実行して、Azure の実行コストを節約および最適化することを検討してください。",
+ "text": "Azure の実行コストを節約して最適化するために、スヌーズ モデルで開発/テスト システムを実行することを検討してください。",
"waf": "費用"
},
{
@@ -1078,7 +806,7 @@
"link": "https://learn.microsoft.com/azure/lighthouse/overview",
"service": "SAP",
"severity": "中程度",
- "text": "お客様の SAP 資産を管理することでお客様と提携する場合は、Azure Lighthouse をご検討ください。Azure Lighthouse を使用すると、マネージド サービス プロバイダーは Azure ネイティブ ID サービスを使用して、顧客の環境に対する認証を行うことができます。顧客はいつでもアクセスを取り消し、サービスプロバイダーの行動を監査できるため、制御を顧客の手に委ねることができます。",
+ "text": "お客様の SAP 資産を管理することでお客様と提携する場合は、Azure Lighthouse をご検討ください。Azure Lighthouse を使用すると、マネージド サービス プロバイダーは Azure ネイティブ ID サービスを使用して、顧客の環境に対して認証を行うことができます。これにより、顧客はいつでもアクセスを取り消し、サービスプロバイダーの行動を監査できるため、制御が顧客の手に委ねられます。",
"waf": "オペレーションズ"
},
{
@@ -1087,7 +815,7 @@
"link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Update Manager を使用して、1 つまたは複数の VM で利用可能な更新プログラムの状態を確認し、定期的な修正プログラムの適用をスケジュールすることを検討します。",
+ "text": "Azure Update Manager を使用して、1 つまたは複数の VM で利用可能な更新プログラムの状態を確認し、定期的な修正プログラムの適用をスケジュールすることを検討してください。",
"training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -1097,7 +825,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
"service": "SAP",
"severity": "低い",
- "text": "SAP Landscape Management (LaMa) を使用して SAP Basis の運用を最適化および管理します。Azure 用の SAP LaMa コネクタを使用して、SAP システムの再配置、コピー、複製、更新を行います。",
+ "text": "SAP Landscape Management (LaMa) を使用して、SAP Basis の運用を最適化および管理します。Azure 用の SAP LaMa コネクタを使用して、SAP システムの再配置、コピー、複製、更新を行います。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -1107,7 +835,7 @@
"link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Monitor for SAP solutions を使用して、Azure 上の SAP ワークロード (SAP HANA、高可用性 SUSE クラスター、SQL システム) を監視します。Azure Monitor for SAP solutions を SAP Solution Manager で補完することを検討してください。",
+ "text": "Azure Monitor for SAP solutions を使用して、Azure 上の SAP ワークロード (SAP HANA、高可用性 SUSE クラスター、SQL システム) を監視します。SAP Solution Manager を使用して Azure Monitor for SAP solutions を補完することを検討してください。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -1117,7 +845,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
"service": "SAP",
"severity": "高い",
- "text": "SAP の VM 拡張機能チェックを実行します。VM Extension for SAP では、仮想マシン (VM) の割り当てられたマネージド ID を使用して、VM の監視および構成データにアクセスします。このチェックにより、SAP アプリケーションのすべてのパフォーマンス メトリックが、基になる Azure Extension for SAP からのものであることが確認されます。",
+ "text": "SAP の VM 拡張機能チェックを実行します。VM Extension for SAP は、仮想マシン (VM) の割り当てられたマネージド ID を使用して、VM の監視データと構成データにアクセスします。このチェックにより、SAP アプリケーションのすべてのパフォーマンス メトリックが、基になる Azure Extension for SAP からのものであることが保証されます。",
"training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -1127,7 +855,7 @@
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"service": "SAP",
"severity": "中程度",
- "text": "アクセス制御とコンプライアンス レポートに Azure Policy を使用します。Azure Policy には、一貫したポリシーの遵守と迅速な違反検出を保証するために、組織全体の設定を適用する機能が用意されています。",
+ "text": "Azure Policy を使用して、アクセス制御とコンプライアンス レポートを作成します。Azure Policy には、組織全体の設定を適用して、一貫したポリシーの遵守と迅速な違反検出を確保する機能があります。",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "オペレーションズ"
},
@@ -1147,7 +875,7 @@
"link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
"service": "SAP",
"severity": "中程度",
- "text": "プロビジョニングされた Azure インフラストラクチャで SAP HANA の品質チェックを実行して、プロビジョニングされた VM が SAP HANA on Azure のベスト プラクティスに準拠していることを確認します。",
+ "text": "プロビジョニングされた Azure インフラストラクチャで SAP HANA の品質チェックを実行し、プロビジョニングされた VM が SAP HANA on Azure のベスト プラクティスに準拠していることを確認します。",
"waf": "オペレーションズ"
},
{
@@ -1156,7 +884,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
"service": "SAP",
"severity": "高い",
- "text": "Azure サブスクリプションごとに、ゾーン デプロイの前に Azure 可用性ゾーンで待機時間テストを実行して、SAP on Azure のデプロイ用に待機時間の短いゾーンを選択します。",
+ "text": "Azure サブスクリプションごとに、ゾーン デプロイの前に Azure 可用性ゾーンで待機時間テストを実行して、Azure 上の SAP のデプロイに待機時間の短いゾーンを選択します。",
"training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
"waf": "パフォーマンス"
},
@@ -1166,7 +894,7 @@
"link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
"service": "SAP",
"severity": "中程度",
- "text": "回復性レポートを実行して、プロビジョニングされた Azure インフラストラクチャ (コンピューティング、データベース、ネットワーク、ストレージ、Site Recovery) 全体の構成が、Cloud Adaption Framework for Azure によって定義された構成に準拠していることを確認します。",
+ "text": "回復性レポートを実行して、プロビジョニングされた Azure インフラストラクチャ全体 (コンピューティング、データベース、ネットワーク、ストレージ、Site Recovery) の構成が、Cloud Adaption Framework for Azure で定義された構成に準拠していることを確認します。",
"training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
"waf": "確実"
},
@@ -1176,17 +904,18 @@
"link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
"service": "SAP",
"severity": "中程度",
- "text": "SAP 用 Microsoft Sentinel ソリューションを使用して脅威保護を実装します。このソリューションを使用して、SAPシステムを監視し、ビジネスロジック層とアプリケーション層全体で高度な脅威を検出します。",
+ "text": "SAP 用の Microsoft Sentinel ソリューションを使用して脅威保護を実装します。このソリューションを使用して、SAPシステムを監視し、ビジネスロジックとアプリケーションレイヤー全体で高度な脅威を検出します。",
"training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
"guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
"link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
"service": "SAP",
"severity": "中程度",
- "text": "Azure のタグ付けを利用して、リソースを論理的にグループ化して追跡し、デプロイを自動化し、最も重要なこととして、発生したコストを可視化できます。",
+ "text": "Azure のタグ付けを活用すると、リソースを論理的にグループ化して追跡し、デプロイを自動化し、最も重要なこととして、発生したコストを可視化できます。",
"training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -1196,7 +925,7 @@
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
"service": "SAP",
"severity": "低い",
- "text": "待機時間の影響を受けやすいアプリケーションには、VM 間の待機時間の監視を使用します。",
+ "text": "レイテンシの影響を受けやすいアプリケーションには、VM 間のレイテンシ監視を使用します。",
"waf": "パフォーマンス"
},
{
@@ -1215,7 +944,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
"service": "SAP",
"severity": "中程度",
- "text": "すべてのデータベース・ファイル・システムおよび実行可能プログラムをウイルス対策スキャンから除外します。これらを含めると、パフォーマンスの問題が発生する可能性があります。除外リストの規範的な詳細については、データベースベンダーに確認してください。たとえば、ウイルス対策スキャンから/oracle//sapdataを除外することをお薦めします。",
+ "text": "すべてのデータベース・ファイル・システムと実行可能プログラムをアンチウィルス・スキャンから除外します。それらを含めると、パフォーマンスの問題が発生する可能性があります。除外リストに関する規定の詳細については、データベースベンダーに確認してください。たとえば、Oracle では、ウイルス対策スキャンから /oracle//sapdata を除外することをお薦めします。",
"waf": "パフォーマンス"
},
{
@@ -1224,7 +953,7 @@
"link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
"service": "SAP",
"severity": "低い",
- "text": "移行後に、HANA以外のデータベースの完全なデータベース統計を収集することを検討してください。たとえば、SAP ノート 1020260 - Oracle 統計の配信を実装します。",
+ "text": "移行後に、HANA 以外のデータベースの完全なデータベース統計を収集することを検討してください。たとえば、SAP ノート 1020260 - Oracle 統計の配信を実装します。",
"waf": "パフォーマンス"
},
{
@@ -1233,7 +962,7 @@
"link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
"service": "SAP",
"severity": "中程度",
- "text": "SAP on Azure を使用するすべての Oracle デプロイには、Oracle Automatic Storage Management (ASM) の使用を検討してください。",
+ "text": "SAP on Azure を使用するすべての Oracle デプロイに Oracle Automatic Storage Management (ASM) を使用することを検討してください。",
"training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
"waf": "パフォーマンス"
},
@@ -1243,7 +972,7 @@
"link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
"service": "SAP",
"severity": "中程度",
- "text": "Oracle を実行している SAP on Azure の場合、SQL スクリプトのコレクションは、パフォーマンスの問題の診断に役立ちます。 自動ワークロード・リポジトリ(AWR)レポートには、Oracleシステムの問題を診断するための貴重な情報が含まれています。AWRレポートは、複数のセッションで実行し、ピーク時間を選択して、分析を広範囲にカバーすることをお薦めします。",
+ "text": "Oracle を実行している SAP on Azure の場合、SQL スクリプトのコレクションはパフォーマンスの問題の診断に役立ちます。 自動ワークロード・リポジトリ(AWR)レポートには、Oracleシステムの問題を診断するための貴重な情報が含まれています。AWR レポートは、複数のセッションで実行し、ピーク時間を選択して、分析の範囲を広く設定することをお勧めします。",
"training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
"waf": "パフォーマンス"
},
@@ -1273,7 +1002,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "中程度",
- "text": "Azure への移行中に仮想マシンの DNS または仮想名が変更されない場合、バックグラウンド DNS と仮想名によって SAP ランドスケープ内の多くのシステム インターフェイスが接続され、お客様は、開発者が時間の経過と共に定義するインターフェイスに気付くことがあります。移行後に仮想名または DNS 名が変更されると、さまざまなシステム間で接続の問題が発生するため、このような問題を防ぐために DNS エイリアスを保持することをお勧めします。",
+ "text": "Azure への移行中に仮想マシンの DNS または仮想名が変更されない場合、バックグラウンド DNS と仮想名は SAP ランドスケープ内の多くのシステム インターフェイスに接続され、開発者は時間の経過と共に定義するインターフェイスをお客様が認識することがよくあります。移行後に仮想名やDNS名が変更されると、さまざまなシステム間で接続の問題が発生するため、この種の問題を防ぐためにDNSエイリアスを保持することをお勧めします。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "オペレーションズ"
},
@@ -1283,17 +1012,19 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
"severity": "中程度",
- "text": "異なる DNS ゾーンを使用して、各環境 (サンドボックス、開発、運用前、運用) を互いに区別します。例外は、独自の VNet を使用する SAP デプロイの場合です。ここでは、プライベート DNS ゾーンは必要ない場合があります。",
+ "text": "異なるDNSゾーンを使用して、各環境(サンドボックス、開発、プリプロダクション、およびプロダクション)を相互に区別します。例外は、独自の VNet を持つ SAP デプロイです。ここでは、プライベート DNS ゾーンは必要ないかもしれません。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "description": "VNet ピアリングを構成する場合は、 [リモート仮想ネットワークへのトラフィックを許可する] 設定を使用します。",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
"guid": "a3592829-e6e2-4061-9368-6af46791f893",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
"severity": "中程度",
- "text": "ローカルとグローバルの VNet ピアリングは接続を提供し、複数の Azure リージョンにまたがる SAP デプロイのランディング ゾーン間の接続を確保するための推奨されるアプローチです",
+ "text": "ローカルおよびグローバル VNet ピアリングは接続を提供し、複数の Azure リージョンにまたがる SAP デプロイのランディング ゾーン間の接続を確保するための推奨されるアプローチです",
"training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
"waf": "確実"
},
@@ -1309,11 +1040,12 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
"guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
"link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
"severity": "中程度",
- "text": "Azure リージョンとオンプレミスの場所をまたいだグローバルなトランジット接続が必要な新規ネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに Virtual WAN を使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要はなく、SAP on Azure デプロイの標準に従うことができます。",
+ "text": "Virtual WAN は、Azure リージョンとオンプレミスの場所間でグローバルなトランジット接続が必要な新しいネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要がなく、SAP on Azure デプロイの標準に従うことができます。",
"training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
"waf": "オペレーションズ"
},
@@ -1323,7 +1055,7 @@
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
"service": "SAP",
"severity": "中程度",
- "text": "パートナーの NVA が使用されている場合にのみ、リージョン間でネットワーク仮想アプライアンス (NVA) をデプロイすることを検討してください。ネイティブ NVA が存在する場合、リージョン間または VNet 間の NVA は必要ありません。パートナーのネットワーク テクノロジと NVA をデプロイする場合は、ベンダーのガイダンスに従って、Azure ネットワークと競合する構成を確認します。",
+ "text": "リージョン間でネットワーク仮想アプライアンス (NVA) をデプロイするのは、パートナーの NVA が使用されている場合にのみ検討してください。ネイティブ NVA が存在する場合、リージョン間または VNet 間の NVA は必要ありません。パートナー ネットワーク テクノロジと NVA をデプロイする場合は、ベンダーのガイダンスに従って、Azure ネットワークと競合する構成を確認します。",
"training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
"waf": "オペレーションズ"
},
@@ -1333,12 +1065,13 @@
"link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"service": "SAP",
"severity": "中程度",
- "text": "Virtual WAN は、仮想 WAN ベースのトポロジのスポーク VNet 間の接続を管理し (ユーザー定義ルーティング (UDR) または NVA を設定する必要はありません)、同じ仮想ハブ内の VNet 間トラフィックの最大ネットワーク スループットは 50 ギガビット/秒です。必要に応じて、SAP ランディング ゾーンは VNet ピアリングを使用して他のランディング ゾーンに接続し、この帯域幅の制限を克服できます。",
+ "text": "Virtual WAN は、Virtual WAN ベースのトポロジのスポーク VNet 間の接続を管理し (ユーザー定義ルーティング (UDR) や NVA を設定する必要はありません)、同じ仮想ハブ内の VNet 間トラフィックの最大ネットワーク スループットは 50 ギガビット/秒です。必要に応じて、SAP ランディング ゾーンでは VNet ピアリングを使用して他のランディング ゾーンに接続し、この帯域幅の制限を克服できます。",
"training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
"guid": "82734c88-6ba2-4802-8459-11475e39e530",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
@@ -1349,11 +1082,12 @@
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
"guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
"link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
"severity": "高い",
- "text": "ASRの設定時にDR側でIPアドレスを予約することを検討してください",
+ "text": "ASR を設定するときは、DR 側で IP アドレスを予約することを検討してください",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "オペレーションズ"
},
@@ -1373,17 +1107,18 @@
"link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
"severity": "中程度",
- "text": "Azure では 1 つの VNet に複数の委任されたサブネットを作成できますが、Azure NetApp Files の VNet に存在できる委任されたサブネットは 1 つだけです。Azure NetApp Files に複数の委任されたサブネットを使用すると、新しいボリュームを作成しようとしても失敗します。",
+ "text": "Azure では VNet に複数の委任サブネットを作成するのに役立ちますが、Azure NetApp Files の VNet に存在できる委任サブネットは 1 つだけです。Azure NetApp Files に複数の委任されたサブネットを使用すると、新しいボリュームを作成しようとすると失敗します。",
"training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "オペレーションズ"
},
{
"checklist": "SAP Checklist",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
"link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルター処理 (組織で必要な場合) を管理します",
+ "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルタリング (組織で必要な場合) を管理します",
"training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
"waf": "安全"
},
@@ -1393,7 +1128,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
"service": "SAP",
"severity": "中程度",
- "text": "Application Gateway、SAP Web Dispatcher、およびその他のサードパーティ サービスの比較に示すように、Application Gateway が SAP Web アプリのリバース プロキシとして機能する場合、Application Gateway と Web Application Firewall には制限があります。",
+ "text": "Application Gateway、SAP Web Dispatcher、およびその他のサードパーティサービスの比較に示すように、Application Gateway が SAP Web アプリのリバースプロキシとして機能する場合、Application Gateway と Web Application Firewall には制限があります。",
"training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
"waf": "安全"
},
@@ -1403,7 +1138,7 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン全体でグローバル保護を提供します。",
+ "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン間でグローバルな保護を提供します。",
"training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
"waf": "安全"
},
@@ -1413,7 +1148,7 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Front Door と Application Gateway を使用して HTTP/S アプリケーションを保護する場合は、Azure Front Door の Web アプリケーション ファイアウォール ポリシーを利用します。Application Gateway をロックダウンして、Azure Front Door からのトラフィックのみを受信します。",
+ "text": "Azure Front Door と Application Gateway を使用して HTTP/S アプリケーションを保護している場合は、Azure Front Door の Web アプリケーション ファイアウォール ポリシーを利用します。Azure Front Door からのトラフィックのみを受信するように Application Gateway をロックダウンします。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "安全"
},
@@ -1423,7 +1158,7 @@
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
"severity": "中程度",
- "text": "Web アプリケーション ファイアウォールを使用して、インターネットに公開されているトラフィックをスキャンします。別のオプションとして、ロード バランサーや、Application Gateway やサードパーティ ソリューションなどのファイアウォール機能が組み込まれているリソースと共に使用することもできます。",
+ "text": "Web アプリケーション ファイアウォールを使用して、インターネットに公開されているトラフィックをスキャンします。別のオプションは、ロード バランサーで使用するか、Application Gateway やサードパーティ ソリューションなどのファイアウォール機能が組み込まれているリソースで使用することです。",
"training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "安全"
},
@@ -1433,7 +1168,7 @@
"link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "SAP",
"severity": "中程度",
- "text": "Azure リージョンとオンプレミスの場所をまたいだグローバルなトランジット接続が必要な新規ネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに Virtual WAN を使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要はなく、SAP on Azure デプロイの標準に従うことができます。",
+ "text": "Virtual WAN は、Azure リージョンとオンプレミスの場所間でグローバルなトランジット接続が必要な新しいネットワーク、大規模ネットワーク、またはグローバル ネットワークでの Azure デプロイに使用します。このアプローチでは、Azure ネットワークの推移的なルーティングを手動で設定する必要がなく、SAP on Azure デプロイの標準に従うことができます。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
"waf": "パフォーマンス"
},
@@ -1443,12 +1178,13 @@
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "SAP",
"severity": "中程度",
- "text": "データ漏えいを防ぐには、Azure Private Link を使用して、Azure Blob Storage、Azure Files、Azure Data Lake Storage Gen2、Azure Data Factory などのサービスとしてのプラットフォーム リソースに安全にアクセスします。Azure プライベート エンドポイントは、VNet と Azure Storage、Azure Backup などのサービス間のトラフィックをセキュリティで保護するのにも役立ちます。VNet とプライベート エンドポイント対応サービス間のトラフィックは、Microsoft グローバル ネットワークを経由するため、パブリック インターネットへの公開は防止されます。",
+ "text": "データ漏えいを防ぐには、Azure Private Link を使用して、Azure Blob Storage、Azure Files、Azure Data Lake Storage Gen2、Azure Data Factory などのサービスとしてのプラットフォーム リソースに安全にアクセスします。Azure プライベート エンドポイントは、VNet と Azure Storage、Azure Backup などのサービス間のトラフィックをセキュリティで保護するのにも役立ちます。VNet とプライベート エンドポイント対応サービス間のトラフィックは、Microsoft グローバル ネットワークを経由するため、パブリック インターネットに公開されるのを防ぎます。",
"training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
"guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
"link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
@@ -1463,17 +1199,18 @@
"link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Load Balancer の内部デプロイが Direct Server Return (DSR) を使用するように設定されていることを確認します。この設定 (フローティング IP の有効化) により、DBMS レイヤーの高可用性構成に内部ロード バランサー構成が使用されている場合の待機時間が短縮されます。",
+ "text": "Azure Load Balancer の内部デプロイが Direct Server Return (DSR) を使用するように設定されていることを確認します。この設定 (フローティング IP の有効化) は、DBMS レイヤーの高可用性構成に内部ロード バランサー構成を使用する場合のレイテンシを短縮します。",
"training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
"guid": "6791f893-5ada-4433-84e1-3811523181aa",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "SAP",
"severity": "中程度",
- "text": "アプリケーション セキュリティ グループ (ASG) と NSG 規則を使用して、SAP アプリケーション層と DBMS 層の間にネットワーク セキュリティのアクセス制御リストを定義できます。ASG は、仮想マシンをグループ化してセキュリティの管理に役立てます。",
+ "text": "アプリケーション セキュリティ グループ (ASG) ルールと NSG ルールを使用して、SAP アプリケーションと DBMS レイヤー間のネットワーク セキュリティ アクセス制御リストを定義できます。ASG は、セキュリティの管理に役立つ仮想マシンをグループ化します。",
"training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
"waf": "安全"
},
@@ -1483,7 +1220,7 @@
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高い",
- "text": "ピアリングされていない異なる Azure VNet への SAP アプリケーション レイヤーと SAP DBMS の配置はサポートされていません。",
+ "text": "ピアリングされていない異なる Azure VNet に SAP アプリケーション レイヤーと SAP DBMS を配置することはサポートされていません。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "パフォーマンス"
},
@@ -1493,7 +1230,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
"severity": "中程度",
- "text": "SAP アプリケーションで最適なネットワーク待機時間を実現するには、Azure 近接通信配置グループの使用を検討してください。",
+ "text": "SAP アプリケーションでのネットワーク待機時間を最適化するには、Azure 近接通信配置グループの使用を検討してください。",
"training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
"waf": "パフォーマンス"
},
@@ -1503,7 +1240,7 @@
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高い",
- "text": "オンプレミスと Azure の間で分割された SAP アプリケーション サーバー レイヤーと DBMS レイヤーを実行することは、まったくサポートされていません。どちらのレイヤーも、オンプレミスまたは Azure に完全に存在する必要があります。",
+ "text": "オンプレミスと Azure の間で分割された SAP アプリケーション サーバー レイヤーと DBMS レイヤーの実行はまったくサポートされていません。どちらのレイヤーも、オンプレミスまたは Azure に完全に存在する必要があります。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "パフォーマンス"
},
@@ -1513,7 +1250,7 @@
"link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高い",
- "text": "SAP システムのデータベース管理システム (DBMS) レイヤーとアプリケーション レイヤーを異なる VNet でホストし、それらを VNet ピアリングに接続することは、レイヤー間の過剰なネットワーク トラフィックによって生成される可能性があるため、お勧めしません。Azure 仮想ネットワーク内のサブネットを使用して、SAP アプリケーション レイヤーと DBMS レイヤーを分離することをお勧めします。",
+ "text": "データベース管理システム (DBMS) と SAP システムのアプリケーション層を異なる VNet でホストし、それらを VNet ピアリングで接続することは、層間の過剰なネットワーク トラフィックによって大きなコストが発生する可能性があるため、お勧めしません。Azure 仮想ネットワーク内のサブネットを使用して、SAP アプリケーション レイヤーと DBMS レイヤーを分離することをお勧めします。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "費用"
},
@@ -1533,7 +1270,7 @@
"link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
"service": "SAP",
"severity": "中程度",
- "text": "SAP RISE/ECS デプロイの場合、仮想ピアリングは、お客様の既存の Azure 環境との接続を確立するための推奨される方法です。SAP vnet と顧客 VNet の両方がネットワーク セキュリティ グループ (NSG) で保護され、vnet ピアリングを介した SAP ポートとデータベース ポートでの通信が可能になります",
+ "text": "SAP RISE/ECS デプロイの場合、仮想ピアリングは、お客様の既存の Azure 環境との接続を確立するための推奨される方法です。SAP vnet と顧客 vnet はどちらもネットワーク セキュリティ グループ (NSG) で保護されているため、vnet ピアリングを介して SAP ポートとデータベース ポートで通信できます",
"waf": "安全"
},
{
@@ -1551,7 +1288,7 @@
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
"service": "SAP",
"severity": "中程度",
- "text": "Site Recovery の組み込み監視 (SAP で使用されている場合) を確認します。",
+ "text": "Site Recovery の組み込み監視 (SAP に使用されている場所) を確認します。",
"waf": "費用"
},
{
@@ -1560,7 +1297,7 @@
"link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
"service": "SAP",
"severity": "高い",
- "text": "SAP HANA システム ランドスケープの監視に関するガイダンスを確認します。",
+ "text": "SAP HANA システムランドスケープの監視のガイダンスを確認します。",
"waf": "オペレーションズ"
},
{
@@ -1623,7 +1360,7 @@
"link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
"service": "SAP",
"severity": "中程度",
- "text": "SAP ABAPMeter report /SSA/CAT を使用して、SAP アプリケーション サーバーからデータベース サーバー間の待機時間を確認します。",
+ "text": "SAP ABAPMeter レポート /SSA/CAT を使用して、SAP アプリケーション サーバーとデータベース サーバー間の待機時間を確認します。",
"training": "https://me.sap.com/notes/0002879613",
"waf": "パフォーマンス"
},
@@ -1632,7 +1369,7 @@
"guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
"service": "SAP",
"severity": "中程度",
- "text": "CCMS を使用した SQL Server のパフォーマンス監視を確認します。",
+ "text": "CCMS を使用した SQL Server パフォーマンス監視を確認します。",
"waf": "パフォーマンス"
},
{
@@ -1641,7 +1378,7 @@
"link": "https://me.sap.com/notes/500235",
"service": "SAP",
"severity": "中程度",
- "text": "SAP アプリケーション レイヤー VM と DBMS VM 間のネットワーク待機時間をテストします (NIPING)。",
+ "text": "SAP アプリケーション レイヤー VM と DBMS VM 間のネットワーク遅延をテストします (NIPING)。",
"training": "https://me.sap.com/notes/1100926/E",
"waf": "パフォーマンス"
},
@@ -1651,7 +1388,7 @@
"link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
"service": "SAP",
"severity": "中程度",
- "text": "SAP HANA Studio アラートを確認します。",
+ "text": "SAP HANA Studio のアラートを確認します。",
"waf": "パフォーマンス"
},
{
@@ -1660,7 +1397,7 @@
"link": "https://me.sap.com/notes/1969700",
"service": "SAP",
"severity": "中程度",
- "text": "HANA_Configuration_Minichecks を使用して SAP HANA ヘルスチェックを実行します。",
+ "text": "HANA_Configuration_Minichecksを使用して SAP HANA ヘルスチェックを実行します。",
"waf": "パフォーマンス"
},
{
@@ -1679,7 +1416,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "中程度",
- "text": "SAP は、SAP システムを保護するために即時のアクションを必要とする非常に重要なセキュリティ パッチまたはホット フィックスをリリースしているため、SAP セキュリティ OSS ノートを定期的に確認してください。",
+ "text": "SAP は、SAP システムを保護するために即時のアクションが必要な非常に重要なセキュリティパッチ (ホットフィックス) をリリースするため、SAP セキュリティ OSS ノートを定期的に確認してください。",
"training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "安全"
},
@@ -1689,7 +1426,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
"severity": "低い",
- "text": "SQL Server 上の SAP システムではアカウントを使用しないため、SQL Server 上の SAP システム管理者アカウントを無効にすることができます。元のシステム管理者アカウントを無効にする前に、システム管理者権限を持つ別のユーザーがサーバーにアクセスできることを確認してください。",
+ "text": "SQL Server 上の SAP システムではアカウントが使用されないため、SQL Server on SQL Server システム管理者アカウントを無効にすることができます。元のシステム管理者アカウントを無効にする前に、システム管理者権限を持つ別のユーザーがサーバーにアクセスできることを確認してください。",
"waf": "安全"
},
{
@@ -1698,7 +1435,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
"severity": "高い",
- "text": "xp_cmdshellを無効にします。SQL Server 機能xp_cmdshell、SQL Server 内部オペレーティング システムのコマンド シェルを有効にします。これは、セキュリティ監査における潜在的なリスクです。",
+ "text": "xp_cmdshellを無効にします。SQL Server 機能xp_cmdshellは、SQL Server 内部オペレーティング システム コマンド シェルを有効にします。これは、セキュリティ監査における潜在的なリスクです。",
"training": "https://me.sap.com/notes/3019299/E",
"waf": "安全"
},
@@ -1708,7 +1445,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "高い",
- "text": "Azure 上の SAP HANA データベース サーバーの暗号化では、SAP HANA ネイティブ暗号化テクノロジが使用されます。さらに、Azure で SQL Server を使用している場合は、Transparent Data Encryption (TDE) を使用してデータとログ ファイルを保護し、バックアップも暗号化されるようにします。",
+ "text": "Azure 上の SAP HANA データベース サーバーの暗号化には、SAP HANA ネイティブの暗号化テクノロジが使用されます。さらに、Azure で SQL Server を使用している場合は、Transparent Data Encryption (TDE) を使用してデータとログ ファイルを保護し、バックアップも暗号化されるようにします。",
"training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "安全"
},
@@ -1718,12 +1455,13 @@
"link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Storage の暗号化は、すべての Azure Resource Manager とクラシック ストレージ アカウントに対して有効になっており、無効にすることはできません。データは既定で暗号化されるため、Azure Storage 暗号化を使用するためにコードやアプリケーションを変更する必要はありません。",
+ "text": "Azure Storage の暗号化は、すべての Azure Resource Manager アカウントとクラシック ストレージ アカウントに対して有効になっており、無効にすることはできません。データは既定で暗号化されるため、Azure Storage の暗号化を使用するためにコードやアプリケーションを変更する必要はありません。",
"training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
@@ -1738,7 +1476,7 @@
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"service": "SAP",
"severity": "中程度",
- "text": "デプロイが成功したら、Azure リソースを LOCK して、承認されていない変更から保護することをお勧めします。また、カスタマイズされた Azure ポリシー (Custome ロール) を使用して、サブスクリプションごとに LOCK の制約とルールを適用することもできます。",
+ "text": "デプロイが成功したら、承認されていない変更から保護するために、Azure リソースをロックすることをお勧めします。また、カスタマイズされた Azure ポリシー (カスタム ロール) を使用して、サブスクリプションごとに LOCK 制約とルールを適用することもできます。",
"training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
"waf": "安全"
},
@@ -1758,7 +1496,7 @@
"link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
"service": "SAP",
"severity": "高い",
- "text": "既存の要件、規制、コンプライアンス制御 (内部/外部) に基づいて、必要な Azure ポリシーと Azure RBAC ロールを決定します",
+ "text": "既存の要件、規制、コンプライアンス制御 (内部/外部) に基づいて - 必要な Azure ポリシーと Azure RBAC ロールを決定します",
"training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
"waf": "安全"
},
@@ -1768,7 +1506,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "高い",
- "text": "SAP 環境でMicrosoft Defender for Endpointを有効にする場合は、すべてのサーバーを対象とするのではなく、DBMS サーバー上のデータとログ ファイルを除外することをお勧めします。ターゲット ファイルを除外する場合は、DBMS ベンダーの推奨事項に従ってください。",
+ "text": "SAP 環境でMicrosoft Defender for Endpointを有効にする場合は、すべてのサーバーをターゲットにするのではなく、DBMS サーバー上のデータ ファイルとログ ファイルを除外することをお勧めします。ターゲット ファイルを除外する場合は、DBMS ベンダーの推奨事項に従ってください。",
"training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
"waf": "安全"
},
@@ -1788,7 +1526,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "低い",
- "text": "サードパーティのセキュリティ製品を DIAG (SAP GUI)、RFC、および SPNEGO for HTTPS のセキュアネットワーク通信 (SNC) と統合することにより、転送中のデータを暗号化します。",
+ "text": "サードパーティのセキュリティ製品を DIAG (SAP GUI)、RFC、HTTPS の SPNEGO の Secure Network Communications (SNC) と統合することで、転送中のデータを暗号化します。",
"training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
"waf": "安全"
},
@@ -1798,12 +1536,13 @@
"link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
"service": "SAP",
"severity": "中程度",
- "text": "プリンシパル暗号化機能には既定で Microsoft マネージド キーを使用し、必要に応じてカスタマー マネージド キーを使用します。",
+ "text": "プリンシパル暗号化機能には Microsoft マネージド キーが既定で設定され、必要に応じてカスタマー マネージド キーが使用されます。",
"training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
"guid": "4935ada4-2223-4ece-a1b1-23181a541741",
"link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
@@ -1818,7 +1557,7 @@
"link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
"service": "SAP",
"severity": "高い",
- "text": "HANA 以外の Windows オペレーティング システムと Windows 以外のオペレーティング システムのディスク暗号化キーとシークレットを制御および管理するには、Azure Key Vault を使用します。SAP HANA は Azure Key Vault ではサポートされていないため、SAP ABAP キーや SSH キーなどの代替方法を使用する必要があります。",
+ "text": "HANA 以外の Windows および Windows 以外のオペレーティング システムのディスク暗号化キーとシークレットを制御および管理するには、Azure Key Vault を使用します。SAP HANA は Azure Key Vault ではサポートされていないため、SAP ABAP キーや SSH キーなどの別の方法を使用する必要があります。",
"training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
"waf": "安全"
},
@@ -1828,7 +1567,7 @@
"link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
"service": "SAP",
"severity": "高い",
- "text": "SAP on Azure スポーク サブスクリプションのロールベースのアクセス制御 (RBAC) ロールをカスタマイズして、偶発的なネットワーク関連の変更を回避します",
+ "text": "SAP on Azure スポーク サブスクリプションのロールベースのアクセス制御 (RBAC) ロールをカスタマイズして、ネットワーク関連の偶発的な変更を回避する",
"training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
"waf": "安全"
},
@@ -1838,7 +1577,7 @@
"link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
"service": "SAP",
"severity": "高い",
- "text": "DMZ と NVA を SAP 資産の残りの部分から分離し、Azure Private Link を構成し、SAP on Azure リソースを安全に管理および制御します",
+ "text": "DMZ と NVA を他の SAP 資産から分離し、Azure Private Link を構成し、SAP on Azure リソースを安全に管理および制御します",
"training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
"waf": "安全"
},
@@ -1858,7 +1597,7 @@
"link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
"service": "SAP",
"severity": "低い",
- "text": "さらに強力な保護を行うには、Microsoft Defender for Endpointの使用を検討してください。",
+ "text": "さらに強力な保護を行うには、Microsoft Defender for Endpoint の使用を検討してください。",
"training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
"waf": "安全"
},
@@ -1868,7 +1607,7 @@
"link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
"severity": "高い",
- "text": "仮想ネットワーク ピアリングによってスポーク ネットワークに接続されているハブ仮想ネットワークを介してすべてのトラフィックを渡すことで、SAP アプリケーションとデータベース サーバーをインターネットまたはオンプレミス ネットワークから分離します。ピアリングされた仮想ネットワークにより、SAP on Azure ソリューションがパブリック インターネットから分離されることが保証されます。",
+ "text": "仮想ネットワーク ピアリングによってスポーク ネットワークに接続されているハブ仮想ネットワークを介してすべてのトラフィックを通過させることにより、SAP アプリケーション サーバーとデータベース サーバーをインターネットまたはオンプレミス ネットワークから分離します。ピアリングされた仮想ネットワークにより、SAP on Azure ソリューションがパブリック インターネットから分離されることが保証されます。",
"training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
"waf": "安全"
},
@@ -1878,7 +1617,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "低い",
- "text": "SAP Fiori などのインターネットに接続するアプリケーションの場合は、セキュリティレベルを維持しながら、アプリケーション要件ごとに負荷を分散してください。レイヤー 7 セキュリティについては、Azure Marketplace で入手できるサードパーティの Web アプリケーション ファイアウォール (WAF) を使用できます。",
+ "text": "SAP Fiori のようなインターネットに接続するアプリケーションの場合は、セキュリティレベルを維持しながら、アプリケーション要件ごとに負荷を分散してください。レイヤー 7 セキュリティのために、Azure Marketplace で入手できるサードパーティの Web アプリケーション ファイアウォール (WAF) を使用できます。",
"training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
"waf": "安全"
},
@@ -1888,455 +1627,702 @@
"link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
"service": "SAP",
"severity": "中程度",
- "text": "Azure Monitor for SAP solutions でセキュリティで保護された通信を有効にするには、ルート証明書またはサーバー証明書のいずれかを使用することを選択できます。ルート証明書を使用することを強くお勧めします。",
+ "text": "Azure Monitor for SAP solutions でセキュリティで保護された通信を有効にするには、ルート証明書またはサーバー証明書のどちらを使用するかを選択できます。ルート証明書を使用することを強くお勧めします。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
"waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
- "text": "Azure Monitor のデータ収集ルール - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "費用"
- },
- {
- "checklist": "Cost Optimization Checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
- "text": "基になるデータソースが見つからないバックアップインスタンスを確認する",
- "waf": "費用"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
+ "severity": "高い",
+ "text": "ビジネスと SLO の要件に基づいて適切なロジック アプリのホスティング プランを選択する",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
- "text": "関連づけられていないサービス(ディスク、NIC、IPアドレスなど)を削除またはアーカイブする",
- "waf": "費用"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
+ "severity": "高い",
+ "text": "ゾーンの冗長性と可用性ゾーンを使用してリージョンの障害からロジック アプリを保護する",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
- "text": "ミッション クリティカルでないアプリケーションの Site Recovery ストレージとバックアップのバランスを考慮する",
- "waf": "費用"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
+ "severity": "高い",
+ "text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
- "text": "40 の異なるログ分析ワークスペース間で支出と節約の機会を確認する - 非運用ワークスペースに異なる保持とデータ収集を使用する - 認識と階層サイズ設定のための日次上限を作成する - 日次上限を設定する場合は、上限に達したときにアラートを作成するだけでなく、ある割合 (90% など) に達したときに通知されるアラート ルールも作成してください。- 可能であればワークスペースの変革を検討する - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
- "waf": "費用"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
+ "severity": "高い",
+ "text": "分離環境にデプロイする場合は、App Service Environment (ASE) v3 を使用するか、それらに移行します",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
- "text": "ログのパージポリシーと自動化を適用する(必要に応じて、ログをコールドストレージに移動できます)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
- "waf": "費用"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
+ "severity": "中程度",
+ "text": "Azure DevOps または GitHub を活用して CI/CD を合理化し、ロジック アプリ コードを保護",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
- "text": "ディスクが本当に必要かどうかを確認し、必要でない場合は削除します。必要な場合は、下位のストレージ階層を見つけるか、バックアップを使用します。",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ストレージに関連する Microsoft クラウド セキュリティ ベンチマークのガイダンスを適用する",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "「ストレージの Azure セキュリティ ベースライン」を検討する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
- "text": "未使用のストレージを下位階層に移動し、カスタマイズされたルールを使用することを検討する - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Azure Storage は、既定ではパブリック IP アドレスを持ち、インターネットからアクセスできます。プライベート エンドポイントを使用すると、アクセスが必要な Azure コンピューティング リソースのみに Azure Storage を安全に公開できるため、パブリック インターネットへの露出がなくなります",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "Azure Storage のプライベート エンドポイントの使用を検討する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
- "text": "advisor が VM の適切なサイズ設定用に構成されていることを確認する",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "新しく作成されたストレージ アカウントは ARM デプロイ モデルを使用して作成されるため、RBAC、監査などがすべて有効になります。サブスクリプションにクラシック デプロイ モデルの古いストレージ アカウントがないことを確認します",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "古いストレージ アカウントが \"クラシック デプロイ モデル\" を使用していないことを確認する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "description": "コスト分析でメーターカテゴリライセンスを検索して確認してください",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
- "text": "すべての Windows VM でスクリプトを実行する https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- Windows VM が頻繁に作成される場合は、ポリシーの実装を検討してください",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Microsoft Defender を活用して、不審なアクティビティや構成ミスについて学習します。",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "すべてのストレージ アカウントで Microsoft Defender を有効にする",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
- "text": "これは、すでにライセンスを持っている場合は、AHUBの下に置くこともできます https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "論理的な削除メカニズムにより、誤って削除されたブロブを回復できます。",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "BLOB の '論理的な削除' を有効にする",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "text": "予約済み VM ファミリを柔軟性オプションで統合する (4 から 5 ファミリ以下)",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由など、削除された情報をすぐに削除するようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナに対して「論理的な削除」を選択的に無効にすることを検討してください。",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "BLOB の '論理的な削除' を無効にする",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "text": "Azure 予約インスタンスを利用する: この機能を使用すると、VM を 1 年または 3 年間予約できるため、PAYG 価格と比較して大幅なコスト削減が実現します。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "コンテナの論理的な削除を使用すると、コンテナが削除された後に、たとえば、誤って削除した操作から回復するなどして、コンテナを回復できます。",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "コンテナの「論理的な削除」を有効にする",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "text": "より大きなディスクのみ予約できます => 1 TiB -",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由など、削除された情報をすぐに削除するようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナに対して「論理的な削除」を選択的に無効にすることを検討してください。",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "コンテナの「論理的な削除」を無効にする",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
- "text": "適切なサイズ最適化の後",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "削除する前に、ユーザーに削除ロックを最初に解除するように強制することで、ストレージ アカウントが誤って削除されるのを防ぎます",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "ストレージ アカウントでのリソース ロックの有効化",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
- "text": "該当するかどうかを確認し、ポリシー/変更 https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations を適用します",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "BLOB の \"訴訟ホールド\" または \"時間ベースの保持\" ポリシーを検討して、BLOB、コンテナー、またはストレージ アカウントを削除できないようにします。「不可能」は実際には「不可能」を意味することに注意してください。ストレージ アカウントに不変 BLOB が含まれている場合、そのストレージ アカウントを \"削除\" する唯一の方法は、Azure サブスクリプションをキャンセルすることです。",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "不変ブロブについて考える",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
- "text": "VM +ライセンス部分の割引(ahub + 3YRI)は約70%の割引です",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ストレージ アカウントへの保護されていない HTTP/80 アクセスを無効にして、すべてのデータ転送が暗号化され、整合性が保護され、サーバーが認証されるようにすることを検討してください。",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "HTTPS を要求する (つまり、ストレージ アカウントのポート 80 を無効にする)",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "text": "需要に合わせて、フラットなサイジングではなく、VMSS の使用を検討してください",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ストレージ アカウントでカスタム ドメイン (ホスト名) を構成する場合は、TLS/HTTPS が必要かどうかを確認します。その場合は、ストレージ アカウントの前に Azure CDN を配置する必要がある場合があります。",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "HTTPS を適用する (HTTP を無効にする) 場合は、ストレージ アカウントにカスタム ドメイン (CNAME) を使用していないことを確認します。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Cost Optimization Checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
- "text": "AKS オートスケーラーを使用してクラスターの使用量に一致させる (ポッドの要件がスケーラーと一致していることを確認する)",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "クライアントが SAS トークンを使用して BLOB データにアクセスするときに HTTPS を要求すると、資格情報の損失リスクを最小限に抑えるのに役立ちます。",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "Shared Access Signature (SAS) トークンを HTTPS 接続のみに制限する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
- "text": "該当する場合は、復旧ポイントを vault-archive に移動します (検証)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": ".最新の TLS バージョンを適用すると、古いバージョンを使用しているクライアントからの要求が拒否されます。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "ストレージ アカウントに最新の TLS バージョンを適用する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
- "text": "可能な場合は、フォールバックでスポット VM を使用することを検討してください。クラスターの自動終了を検討してください。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Microsoft Entra ID トークンは、可能な限り、共有アクセス署名よりも優先する必要があります",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "BLOB アクセスに Microsoft Entra ID トークンを使用する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
- "text": "関数 - 接続の再利用",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ユーザー、グループ、またはアプリケーションにロールを割り当てる場合は、タスクの実行に必要なアクセス許可のみをそのセキュリティ プリンシパルに付与します。リソースへのアクセスを制限することで、意図しないデータの誤用と悪意のある誤用の両方を防ぐことができます。",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "IaM アクセス許可の最小特権",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
- "text": "関数 - データをローカルにキャッシュする",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ユーザー委任 SAS は、Azure Active Directory (Azure AD) 資格情報と、SAS に指定されたアクセス許可によって保護されます。ユーザー委任 SAS は、そのスコープと機能の点でサービス SAS に似ていますが、サービス SAS よりもセキュリティ上の利点があります。",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "SAS を使用する場合は、ストレージ アカウント キー ベースの SAS よりも \"ユーザー委任 SAS\" を優先します。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
- "text": "関数 - コールド スタート - 「パッケージから実行」機能を使用します。このようにして、コードは単一のzipファイルとしてダウンロードされます。これにより、たとえば、多くのノードモジュールを持つJavascript関数が大幅に改善される可能性があります。言語固有のツールを使用してパッケージサイズを縮小します (ツリーを揺るがす Javascript アプリケーションなど)。",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ストレージ アカウント キー (\"共有キー\") には、監査機能がほとんどありません。誰が/いつキーのコピーをフェッチしたかを監視することはできますが、キーが複数の人の手に渡ると、特定のユーザーに使用状況を帰属させることはできなくなります。Entra ID認証のみに依存すると、ストレージアクセスをユーザーに結び付けることが容易になります。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "Microsoft Entra ID アクセス (およびユーザー委任 SAS) のみがサポートされるように、ストレージ アカウント キーを無効にすることを検討してください。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
- "text": "関数 - 関数を暖かく保つ",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "アクティビティ ログ データを使用して、ストレージ アカウントのセキュリティが (ストレージ アカウント キー、アクセス ポリシーなど) 表示または変更されているのは「いつ」、「誰が」、「何を」、「どのように」特定します。",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "Azure Monitor を使用して、ストレージ アカウントでのコントロール プレーン操作を監査することを検討してください",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
- "text": "さまざまな関数で自動スケーリングを使用する場合、すべてのリソースのすべての自動スケーリングを駆動する 1 つが存在する可能性があるため、別の従量課金プランに移行することを検討してください (また、CPU のより高いプランを検討してください)",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "キーの有効期限ポリシーを使用すると、アカウント アクセス キーのローテーションのリマインダーを設定できます。リマインダーは、指定した間隔が経過し、キーがまだローテーションされていない場合に表示されます。",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "ストレージ アカウント キーを使用する場合は、\"キーの有効期限ポリシー\" を有効にすることを検討してください",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
- "text": "特定のプランの関数アプリはすべて一緒にスケーリングされるため、スケーリングに関する問題はプラン内のすべてのアプリに影響を与える可能性があります。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS 有効期限ポリシーは、SAS が有効である推奨間隔を指定します。SAS 有効期限ポリシーは、サービス SAS またはアカウント SAS に適用されます。ユーザーが、推奨間隔よりも長い有効期間でサービス SAS またはアカウント SAS を生成すると、警告が表示されます。",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SAS 有効期限ポリシーの構成を検討する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
- "text": "「待機時間」に対して請求されますか?この質問は、通常、非同期操作を実行して結果を待機する C# 関数のコンテキストで尋ねられます (例: await Task.Delay(1000) や await client)。GetAsync('http://google.com') です。答えはイエスです-GB秒の計算は、関数の開始時刻と終了時刻、およびその期間のメモリ使用量に基づいています。その間に CPU アクティビティに関して実際に何が起こるかは、計算には考慮されません。この規則の 1 つの例外は、永続関数を使用している場合です。オーケストレーター関数で待機に費やされた時間に対しては課金されません。可能な場合は、デマンド シェーピング技術を適用します (開発環境?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "保存されているアクセス ポリシーでは、ストレージ アカウント キーを再生成しなくても、サービス SAS のアクセス許可を取り消すことができます。",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SASを保存されたアクセスポリシーにリンクすることを検討する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
- "text": "Frontdoor - 既定のホームページをオフにするアプリのアプリケーション設定で、AzureWebJobsDisableHomepage を true に設定します。これにより、PoPに204(No Content)が返されるため、ヘッダーデータのみが返されます。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "チェックインされた接続文字列とストレージ アカウント キーを検出するように、アプリケーションのソース コード リポジトリを構成することを検討してください。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
- "text": "Frontdoor - 何も返さないものへのルーティング。関数、関数プロキシを設定するか、200 (OK) を返し、コンテンツを送信しない、または最小限のコンテンツを送信 するルートを Web アプリに追加します。これの利点は、呼び出されたときにログアウトできることです。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "理想的には、アプリケーションでマネージド ID を使用して Azure Storage に対する認証を行う必要があります。それが不可能な場合は、ストレージ資格情報 (接続文字列、ストレージ アカウント キー、SAS、サービス プリンシパル資格情報) を Azure KeyVault または同等のサービスに持つことを検討してください。",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "Azure KeyVault に接続文字列を格納することを検討してください (マネージド ID が不可能なシナリオの場合)",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
- "text": "使用頻度の低いデータの階層のアーカイブを検討する",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "アドホック SAS サービス SAS またはアカウント SAS で短期的な有効期限を使用します。このように、SASが侵害された場合でも、SASは短時間しか有効ではありません。この方法は、保存されたアクセス ポリシーを参照できない場合に特に重要です。有効期限が近いと、BLOB にアップロードできる時間を制限することで、BLOB に書き込むことができるデータの量も制限されます。",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "アドホックSASの有効期間を短くするよう努める",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
- "text": "サイズが階層と一致しない場合は、ディスク サイズを確認します (つまり、513 GiB のディスクは P30 (1TiB) を支払います) と、サイズ変更を検討してください",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SASを作成するときは、できるだけ具体的で制限的にしてください。1 つのリソースと操作には、より広範なアクセスを提供する SAS よりも SAS を優先します。",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SAS に狭いスコープを適用する",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
- "text": "可能な場合は、Premium や Ultra ではなく Standard SSD の使用を検討してください",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS には、SAS を使用してリソースを要求する権限を与えられたクライアントの IP アドレスまたはアドレス範囲のパラメーターを含めることができます。",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "可能な限り、SAS のスコープを特定のクライアント IP アドレスに設定することを検討してください",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
- "text": "ストレージ アカウントの場合は、選択したレベルによってトランザクション料金が加算されていないことを確認します (次のレベルに移動する方が安くなる可能性があります)",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS は、クライアントがアップロードするデータの量を制限することはできません。時間の経過に伴うストレージ量の価格設定モデルを考えると、クライアントが悪意を持って大きなコンテンツをアップロードしたかどうかを検証することは理にかなっているかもしれません。",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "低い",
+ "text": "クライアントが SAS を使用してファイルをアップロードした後、アップロードされたデータを確認することを検討してください。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
- "text": "ASR の場合、RPO/RTO とレプリケーション スループットで許可されている場合は、Standard SSD ディスクの使用を検討してください",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "「ローカル ユーザー アカウント」を使用して SFTP 経由で BLOB ストレージにアクセスする場合、「通常の」RBAC コントロールは適用されません。NFS または REST 経由の BLOB アクセスは、SFTP アクセスよりも制限が厳しい場合があります。残念ながら、2023 年初頭の時点で、SFTP エンドポイントで現在サポートされている ID 管理の形式は、ローカル ユーザーのみです",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "SFTP: SFTP アクセスの「ローカル ユーザー」の数を制限し、アクセスが必要かどうかを経時的に監査します。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
- "text": "ストレージ アカウント: 必要なホット層や GRS を確認する",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SFTP: SFTP エンドポイントは POSIX のような ACL をサポートしていません。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
- "text": "ディスク - あらゆる場所で Premium SSD ディスクの使用を検証: たとえば、非運用環境を Standard SSD またはオンデマンド Premium SSD にスワップできます",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "ストレージは、CORS(Cross-Origin Resource Sharing)、つまり、異なるドメインのWebアプリが同一生成元ポリシーを緩和できるようにするHTTP機能をサポートしています。CORS を有効にするときは、CorsRules を最小限の特権に保ちます。",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "過度に広範なCORSポリシーを避ける",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
- "text": "予算を作成してコストを管理し、支出の異常や過剰支出のリスクを関係者に自動的に通知するアラートを作成します。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "保存データは常にサーバー側で暗号化され、さらにクライアント側でも暗号化される場合があります。サーバー側の暗号化は、プラットフォーム管理キー (デフォルト) またはカスタマー管理キーを使用して行われる場合があります。クライアント側の暗号化は、クライアントが BLOB ごとに暗号化/暗号化解除キーを Azure ストレージに提供するか、クライアント側で暗号化を完全に処理することによって行われます。したがって、機密性の保証については Azure Storage にまったく依存しません。",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "保存データの暗号化方法を決定します。データのスレッドモデルを理解する。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
- "text": "追加のデータ分析のために、コスト データをストレージ アカウントにエクスポートします。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "プラットフォームの暗号化を使用するかどうかを決定します。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
- "text": "専用 SQL プールのコストを制御するには、リソースが使用されていないときに一時停止します。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "クライアント側の暗号化を使用するかどうかを決定します。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
- "text": "サーバーレス Apache Spark の自動一時停止機能を有効にし、それに応じてタイムアウト値を設定します。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Resource Graph エクスプローラー (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) を利用して、匿名 BLOB アクセスを許可するストレージ アカウントを見つけます。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "パブリック BLOB の匿名アクセスが必要かどうか、または特定のストレージ アカウントに対して無効にできるかどうかを検討します。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
- "text": "さまざまなサイズの複数の Apache Spark プール定義を作成します。",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "storagev2 アカウントタイプを活用して、パフォーマンスと信頼性を向上させます",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
- "text": "Azure Synapse Analytics のコストを節約するために、事前購入プランで Azure Synapse コミット ユニット (SCU) を 1 年間購入します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "GRS、ZRS、またはGZRSストレージを活用して、最高の可用性を実現",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
- "text": "中断可能なジョブにスポット VM を使用する: これらは、割引価格で入札および購入できる VM であり、重要でないワークロードにコスト効率の高いソリューションを提供します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "フェールオーバー後の書き込み操作には、顧客管理のフェールオーバーを使用します",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "text": "すべての VM の適切なサイズ設定",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "Microsoft マネージド フェールオーバーの詳細を理解する",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
- "text": "正規化されたサイズと最新のサイズでサイズをスワップする VM",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "費用"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "ソフト削除を有効にする",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "VM の適切なサイズ設定 - 使用率を 5% 未満で監視することから始めて、その後 40% まで作業します",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "費用"
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
+ "severity": "中程度",
+ "text": "Azure Data Factory の FTA 回復性プレイブックの活用",
+ "waf": "確実"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "アプリケーションをコンテナー化すると、VM の密度が向上し、スケーリングにかかるコストを節約できます",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "費用"
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "高い",
+ "text": "Availability Zones をサポートするリージョンでゾーン冗長パイプラインを使用するUse zone redundant pipelines in regions that support Availability Zones",
+ "waf": "確実"
},
{
- "checklist": "IoT Hub Review",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
+ "severity": "中程度",
+ "text": "DevOps を使用して Github と Azure DevOps の統合で ARM テンプレートをバックアップする",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "中程度",
+ "text": "セルフホステッド統合ランタイム VM を別のリージョンにレプリケートしてください",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "中程度",
+ "text": "必ず、姉妹リージョンでネットワークをレプリケートまたは複製してください。別のリージョンに VNet のコピーを作成する必要があります",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "description": "ADF パイプラインで Key Vault が使用されている場合は、Key Vault をレプリケートするために何もする必要はありません。Key Vault はマネージド サービスであり、Microsoft が処理します",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
+ "severity": "低い",
+ "text": "Keyvault 統合を使用している場合は、Keyvault の SLA を使用して可用性を把握します",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"severity": "高い",
- "text": "Availability Zones (リージョンで適用可能な場合) を活用する (これは自動的に有効になります)",
+ "text": "2 つのレプリカで読み取り操作の可用性を 99.9% にする",
"waf": "確実"
},
{
- "checklist": "IoT Hub Review",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"severity": "中程度",
- "text": "Microsoft が開始するフェールオーバーに注意してください。これらは、まれに、影響を受けるリージョンから対応する geo ペア リージョンにすべての IoT ハブをフェールオーバーするために Microsoft によって実行されます。",
+ "text": "3 つのレプリカで読み取り/書き込み操作の可用性を 99.9% に向上させる",
"waf": "確実"
},
{
- "checklist": "IoT Hub Review",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
+ "severity": "高い",
+ "text": "読み取りレプリカや書き込みレプリカを有効にすることでアベイラビリティーゾーンを活用する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
+ "severity": "中程度",
+ "text": "リージョンの冗長性については、地理的リージョン間で検索インデックスをレプリケートする自動化された方法が提供されないため、検索用に 2 つ以上のリージョンにサービスを手動で作成します",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
+ "severity": "中程度",
+ "text": "複数のサービス間でデータを同期するには、複数のサービスでコンテンツを更新するためにインデクサーを使用するか、複数のサービスでコンテンツの更新をプッシュするために REST API を使用する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
+ "severity": "中程度",
+ "text": "Azure Traffic Manager を使用して要求を調整する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
+ "severity": "高い",
+ "text": "Azure Cognitive Search インデックスをバックアップおよび復元します。このサンプル コードを使用して、インデックス定義とスナップショットを一連の Json ファイルにバックアップします",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "severity": "高い",
+ "text": "ビジネスとSLOの要件に基づいて適切な関数ホスティングプランを選択します",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
"severity": "高い",
+ "text": "リージョンで適用可能な場合は Availability Zones を活用します (従量課金レベルでは使用できません)",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
+ "severity": "中程度",
"text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
"waf": "確実"
},
{
- "checklist": "IoT Hub Review",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
"severity": "高い",
- "text": "手動フェールオーバーをトリガーする方法を学習します。",
+ "text": "分離環境にデプロイする場合は、App Service Environment (ASE) v3 を使用するか、それらに移行します",
"waf": "確実"
},
{
- "checklist": "IoT Hub Review",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "Azure Functions",
"severity": "高い",
- "text": "フェールオーバー後にフェールバックする方法を学習します。",
+ "text": "App Service プランで実行されているすべての関数アプリで \"Always On\" が有効になっていることを確認する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
+ "severity": "中程度",
+ "text": "関数アプリを独自のストレージ アカウントにペアリングします。Function Apps のストレージ アカウントは、緊密に結合されていない限り、再利用しないようにしてください",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
+ "severity": "中程度",
+ "text": "Azure DevOps または GitHub を活用して CI/CD を合理化し、関数アプリのコードを保護します",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
+ "severity": "中程度",
+ "text": "Azure ランディング ゾーン接続リソースを複数のリージョンにデプロイして、複数リージョンのアプリケーション ランディング ゾーンとディザスター リカバリー シナリオを迅速にサポートできるようにします。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "確実"
},
{
@@ -2345,7 +2331,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
"service": "Entra",
"severity": "中程度",
- "text": "マルチテナントに関する明確な規制要件またはビジネス要件がない限り、Azure リソースの管理には 1 つの Entra テナントを使用します。",
+ "text": "Azure リソースの管理には 1 つの Entra テナントを使用します (マルチテナントに対する明確な規制要件やビジネス要件がない限り)。",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "オペレーションズ"
},
{
@@ -2354,7 +2341,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
"service": "Entra",
"severity": "低い",
- "text": "Microsoft Entra ID テナントを管理するためのマルチテナント自動化アプローチがあることを確認する",
+ "text": "マルチテナント自動化アプローチを使用して、Microsoft Entra ID テナントを管理します。",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "オペレーションズ"
},
{
@@ -2362,8 +2350,9 @@
"guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "低い",
- "text": "マルチテナント管理に Azure Lighthouse を活用する",
+ "severity": "高い",
+ "text": "同じ ID でマルチテナント管理に Azure Lighthouse を使用します。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "オペレーションズ"
},
{
@@ -2371,29 +2360,28 @@
"guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "中程度",
- "text": "パートナーによるテナントの管理に Azure Lighthouse が使用されていることを確認する",
+ "severity": "高い",
+ "text": "テナントを管理するためのアクセス権をパートナーに付与する場合は、Azure Lighthouse を使用します。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "費用"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"service": "Entra",
"severity": "高い",
- "text": "クラウド運用モデルに合わせた RBAC モデルを適用します。管理グループとサブスクリプション全体のスコープと割り当てを行います。",
+ "text": "クラウド運用モデルに合わせた RBAC モデルを適用します。管理グループとサブスクリプション全体のスコープと割り当て。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "高い",
- "text": "すべてのアカウントの種類で、認証の種類である職場または学校アカウントのみを使用します。Microsoft アカウントの使用は避けてください",
+ "severity": "中程度",
+ "text": "すべてのアカウントの種類に対して、認証の種類である [職場または学校アカウント] のみを使用します。Microsoftアカウントの使用は避けてください",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "安全"
},
@@ -2403,7 +2391,7 @@
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
"service": "Entra",
"severity": "中程度",
- "text": "アクセス許可の割り当てには、グループのみを使用します。グループ管理システムが既に導入されている場合は、オンプレミス グループを Entra ID のみのグループに追加します。",
+ "text": "権限の割り当てには、グループのみを使用してください。グループ管理システムがすでに導入されている場合は、オンプレミス グループを Entra ID のみのグループに追加します。",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "安全"
},
@@ -2412,20 +2400,19 @@
"guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "低い",
- "text": "Azure 環境に対する権限を持つすべてのユーザーに Microsoft Entra ID 条件付きアクセス ポリシーを適用する",
+ "severity": "高い",
+ "text": "Azure 環境に対する権限を持つすべてのユーザーに対して、Microsoft Entra ID 条件付きアクセス ポリシーを適用します。",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "安全"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
"service": "Entra",
"severity": "高い",
- "text": "Azure 環境に対する権限を持つすべてのユーザーに多要素認証を適用する",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Azure 環境に対する権限を持つすべてのユーザーに多要素認証を適用します。",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "安全"
},
{
@@ -2434,27 +2421,39 @@
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"service": "Entra",
"severity": "中程度",
- "text": "Microsoft Entra ID Privileged Identity Management (PIM) を適用して、ゼロの永続的なアクセスと最小限の特権を確立します",
+ "text": "Microsoft Entra ID Privileged Identity Management (PIM) を適用して、ゼロスタンディング アクセスと最小特権を確立します。",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "中程度",
- "text": "Active Directory ドメイン サービスから Entra ドメイン サービスへの切り替えを計画している場合は、すべてのワークロードの互換性を評価します",
+ "text": "Active Directory Domain Services から Entra ドメイン サービスへの切り替えを計画している場合は、すべてのワークロードの互換性を評価します。",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "安全"
},
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "中程度",
+ "text": "Microsoft Entra Domain Services を使用する場合は、レプリカ セットを使用します。レプリカ セットを使用すると、マネージド ドメインの回復性が向上し、追加のリージョンにデプロイできるようになります。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "確実"
+ },
{
"checklist": "Azure Landing Zone Review",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "中程度",
- "text": "Microsoft Entra ID ログをプラットフォーム中心の Azure Monitor と統合します。Azure Monitor を使用すると、Azure のログと監視データに関する信頼できる唯一の情報源が得られ、ログの収集と保持に関する要件を満たすクラウド ネイティブ オプションが組織に提供されます。",
+ "text": "Microsoft Entra ID ログをプラットフォーム中央の Azure Monitor と統合します。Azure Monitor を使用すると、Azure のログと監視データに関する信頼できる唯一の情報源を使用できるため、ログの収集と保持に関する要件を満たすためのクラウド ネイティブ オプションを組織に提供できます。",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "安全"
},
{
@@ -2464,8 +2463,8 @@
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "高い",
- "text": "テナント全体のアカウント ロックアウトを防ぐために、緊急アクセスまたは非常用アカウントを実装する",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "テナント全体のアカウント ロックアウトを防ぐために、緊急アクセスまたは非常用アカウントを実装します。MFA は、2024 年 10 月にすべてのユーザーに対してデフォルトで有効になります。これらのアカウントを更新して、パスキー (FIDO2) を使用するか、MFA の証明書ベースの認証を構成することをお勧めします。",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "安全"
},
{
@@ -2474,7 +2473,7 @@
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "中程度",
- "text": "Microsoft Entra ID ロールの割り当てにオンプレミスの同期アカウントを使用しないでください。",
+ "text": "特に必要なシナリオがない限り、Microsoft Entra ID ロールの割り当てにオンプレミスの同期アカウントを使用しないでください。",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "安全"
},
@@ -2484,47 +2483,51 @@
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "中程度",
- "text": "必要に応じて、Microsoft Entra ID アプリケーション プロキシを使用して、内部アプリケーション (クラウドまたはオンプレミスでホストされている) への安全で認証されたアクセスをリモート ユーザーに付与します。",
+ "text": "Microsoft Entra ID アプリケーション プロキシを使用してリモート ユーザーにアプリケーションへのアクセス権を付与する場合は、テナントごとに 1 つのインスタンスしか持つことができないため、プラットフォーム リソースとして管理します。",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "中程度",
- "text": "従来のハブアンドスポーク ネットワーク トポロジに基づくネットワーク設計を、最大限の柔軟性を必要とするネットワーク シナリオに活用します。",
+ "text": "ハブアンドスポークネットワークトポロジは、最大限の柔軟性を必要とするネットワークシナリオに使用します。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "高い",
- "text": "ExpressRoute ゲートウェイ、VPN ゲートウェイ、Azure Firewall などの共有ネットワーク サービス、または中央ハブ仮想ネットワーク内のパートナーの NVA を確認します。必要に応じて、DNS サーバーも展開します。",
+ "text": "ExpressRoute ゲートウェイ、VPN ゲートウェイ、Azure Firewall またはパートナー NVA などの共有ネットワーク サービスを中央ハブ仮想ネットワークにデプロイします。必要に応じて、DNS サービスもデプロイします。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "費用"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "中程度",
- "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して DDoS ネットワークまたは IP 保護プランを使用します。",
+ "severity": "高い",
+ "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して、DDoS ネットワークまたは IP 保護プランを使用します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "中程度",
- "text": "パートナー ネットワーク テクノロジまたは NVA をデプロイする場合は、パートナー ベンダーのガイダンスに従ってください",
+ "text": "パートナー ネットワーク テクノロジまたは NVA をデプロイする場合は、パートナー ベンダーのガイダンスに従ってください。",
"waf": "確実"
},
{
@@ -2534,10 +2537,12 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
"service": "ExpressRoute",
"severity": "低い",
- "text": "ハブ アンド スポーク シナリオで ExpressRoute と VPN ゲートウェイ間の転送が必要な場合は、Azure Route Server を使用します。",
+ "text": "ハブ アンド スポークのシナリオで ExpressRoute ゲートウェイと VPN ゲートウェイ間のトランジットが必要な場合は、Azure Route Server を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualHubs",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
@@ -2545,57 +2550,85 @@
"service": "ARS",
"severity": "低い",
"text": "Route Server を使用する場合は、Route Server サブネットに /27 プレフィックスを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "中程度",
- "text": "複数のハブ アンド スポーク トポロジを持つネットワーク アーキテクチャでは、ハブ VNet 間のグローバル仮想ネットワーク ピアリングを使用して、リージョンを相互に接続します。",
+ "text": "Azure リージョン間で複数のハブ アンド スポーク トポロジを持つネットワーク アーキテクチャの場合は、ハブ VNet 間でグローバル仮想ネットワーク ピアリングを使用して、リージョンを相互に接続します。",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
"service": "VNet",
"severity": "中程度",
- "text": "Azure Monitor for Networks を使用して、Azure 上のネットワークのエンド ツー エンドの状態を監視します。",
+ "text": "Azure Monitor for Networks を使用して、Azure 上のネットワークのエンドツーエンドの状態を監視します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "中程度",
- "text": "スポーク仮想ネットワークを中央ハブ仮想ネットワークに接続する場合は、ExpressRoute 経由でアドバタイズできるプレフィックスの最大数である VNet ピアリングの制限 (500) (1000) を考慮してください",
+ "text": "リージョンに 400 を超えるスポーク ネットワークがある場合は、VNet ピアリングの制限 (500) と ExpressRoute 経由でアドバタイズできるプレフィックスの最大数 (1000) をバイパスするために、追加のハブをデプロイします。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "確実"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "中程度",
- "text": "ルート テーブルあたりのルート数の制限 (400) を考慮します。",
+ "text": "ルート テーブルあたりのルート数を 400 に制限します。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "確実"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
"service": "VNet",
"severity": "高い",
- "text": "VNet ピアリングを構成するときに [リモート仮想ネットワークへのトラフィックを許可する] 設定を使用します",
+ "text": "VNet ピアリングを構成するときは、\"リモート仮想ネットワークへのトラフィックを許可する\" 設定を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高い",
+ "text": "Standard Load Balancer SKU をゾーン冗長デプロイで使用すると、Standard SKU Load Balancer を選択すると、可用性ゾーンとゾーンの回復性によって信頼性が向上し、デプロイがゾーンとリージョンの障害に耐えられるようになります。Basic とは異なり、グローバル負荷分散をサポートし、SLA を提供します。",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高い",
+ "text": "Load Balancer バックエンド プールに少なくとも 2 つのインスタンスが含まれていることを確認し、バックエンドに少なくとも 2 つのインスタンスがある Azure Load Balancers をデプロイすると、単一障害点が防止され、スケーラビリティがサポートされます。",
"waf": "確実"
},
{
@@ -2605,97 +2638,113 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "ExpressRoute Direct を使用している場合は、組織のルーターと MSEE 間のレイヤー 2 レベルでトラフィックを暗号化するために MACsec を構成します。この図は、この暗号化をフローで示しています。",
+ "text": "ExpressRoute Direct を使用している場合は、組織のルーターと MSEE の間のレイヤー 2 レベルでトラフィックを暗号化するために MACsec を構成します。この図は、フロー内のこの暗号化を示しています。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "低い",
- "text": "MACsec がオプションではないシナリオ (ExpressRoute Direct を使用しない場合など) では、VPN ゲートウェイを使用して、ExpressRoute プライベート ピアリング経由で IPsec トンネルを確立します。",
+ "severity": "中程度",
+ "text": "MACsec がオプションではないシナリオ (ExpressRoute Direct を使用しない場合など) は、VPN ゲートウェイを使用して、ExpressRoute プライベート ピアリング経由で IPsec トンネルを確立します。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "ExpressRoute",
"severity": "高い",
- "text": "Azure リージョンとオンプレミスの場所間で重複する IP アドレス空間が使用されていないことを確認します",
+ "text": "Azure リージョンとオンプレミスの場所間で重複する IP アドレス空間が使用されていないことを確認します。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "低い",
- "text": "プライベート インターネットのアドレス割り当て範囲 (RFC 1918) の IP アドレスを使用します。",
+ "severity": "中程度",
+ "text": "プライベートインターネットのアドレス割り当て範囲(RFC 1918)のIPアドレスを使用します。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
"severity": "高い",
- "text": "IP アドレス空間が無駄にならないようにし、不必要に大きな仮想ネットワーク (/16 など) を作成しないようにします",
+ "text": "IP アドレス空間が無駄にならないようにし、不必要に大規模な仮想ネットワーク (/16 など) を作成しないでください。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "パフォーマンス"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "高い",
- "text": "運用サイトと DR サイトで重複する IP アドレス範囲を使用しないでください。",
+ "text": "運用サイトとディザスター リカバリー サイトで重複する IP アドレス範囲を使用しないでください。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "確実"
},
{
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "高い",
+ "text": "Standard SKU とゾーン冗長 IP を使用する (該当する場合)、Azure のパブリック IP アドレスは Standard SKU であり、非ゾーン、ゾーン、またはゾーン冗長として使用できます。ゾーン冗長 IP は、すべてのゾーンでアクセス可能であり、1 つのゾーンの障害に耐えるため、回復性が向上します。",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "中程度",
- "text": "Azure での名前解決のみが必要な環境では、名前解決用の委任されたゾーン ('azure.contoso.com' など) を使用して解決に Azure プライベート DNS を使用します。",
+ "text": "Azure での名前解決が必要な環境では、Azure プライベート DNS を使用して解決し、名前解決に委任されたゾーン ('azure.contoso.com' など) を使用します。",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "中程度",
- "text": "Azure とオンプレミスでの名前解決が必要な環境では、Azure DNS Private Resolver の使用を検討してください。",
+ "text": "Azure とオンプレミス間での名前解決が必要で、Active Directory のような既存のエンタープライズ DNS サービスがない環境の場合は、Azure DNS Private Resolver を使用して DNS 要求を Azure またはオンプレミスの DNS サーバーにルーティングします。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "低い",
- "text": "独自の DNS (Red Hat OpenShift など) を必要としてデプロイする特別なワークロードでは、優先 DNS ソリューションを使用する必要があります。",
+ "text": "独自の DNS が必要でデプロイする特別なワークロード (Red Hat OpenShift など) は、優先する DNS ソリューションを使用する必要があります。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "オペレーションズ"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
@@ -2706,57 +2755,74 @@
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "中程度",
+ "text": "複数の Azure リージョン間の DNS 解決を管理し、サービスが別のリージョンにフェールオーバーするときの計画を実装します",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/bastionHosts",
"checklist": "Azure Landing Zone Review",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
"service": "Bastion",
"severity": "中程度",
- "text": "Azure Bastion を使用してネットワークに安全に接続することを検討してください。",
+ "text": "Azure Bastion を使用して、ネットワークに安全に接続します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/bastionHosts",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
"guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
"link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
"service": "Bastion",
"severity": "中程度",
- "text": "Azure Bastion は、サブネット /26 以上で使用します。",
+ "text": "Azure Bastion は、/26 以上のサブネットで使用します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "WAF",
"severity": "中程度",
- "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン全体でグローバル保護を提供します。",
+ "text": "Azure Front Door と WAF ポリシーを使用して、ランディング ゾーンへの受信 HTTP/S 接続に対して Azure リージョン間でグローバルな保護を提供します。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "低い",
- "text": "Azure Front Door と Azure Application Gateway を使用して HTTP/S アプリを保護する場合は、Azure Front Door で WAF ポリシーを使用します。Azure Application Gateway をロックダウンして、Azure Front Door からのトラフィックのみを受信するようにします。",
+ "text": "Azure Front Door と Azure Application Gateway を使用して HTTP/S アプリを保護する場合は、Azure Front Door の WAF ポリシーを使用します。Azure Application Gateway をロックダウンして、Azure Front Door からのトラフィックのみを受信するようにします。",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "高い",
- "text": "WAF とその他のリバース プロキシは、受信 HTTP/S 接続に必要であり、ランディング ゾーン仮想ネットワーク内にデプロイし、保護してインターネットに公開しているアプリと共にデプロイします。",
+ "text": "受信 HTTP/S 接続に WAF やその他のリバース プロキシが必要な場合は、ランディング ゾーン仮想ネットワーク内にデプロイし、保護してインターネットに公開するアプリと共にデプロイします。",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
@@ -2767,46 +2833,58 @@
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
"service": "VNet",
"severity": "高い",
- "text": "今後の破壊的変更の前に、ネットワーク送信トラフィックの構成と戦略を評価および確認します。2025 年 9 月 30 日に、新しいデプロイの既定の送信アクセスは廃止され、明示的なアクセス構成のみが許可されます",
+ "text": "ネットワークの送信トラフィックの構成と戦略を管理する方法を、今後の破壊的変更の前に計画します。2025 年 9 月 30 日に、新しいデプロイの既定の送信アクセスは廃止され、明示的なアクセス構成のみが許可されます。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "確実"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "高い",
- "text": "診断設定を追加して、保護されているすべてのパブリック IP アドレス (DDoS IP またはネットワーク保護) の DDoS 関連ログを保存します。",
+ "text": "診断設定を追加して、保護されたすべてのパブリック IP アドレス (DDoS IP またはネットワーク保護) の DDoS 関連のログを保存します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "高い",
+ "text": "Virtual Machines に直接関連付けられているパブリック IP アドレスを拒否するポリシーの割り当てがあることを確認します。 特定の VM でパブリック IP が必要な場合は、除外を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
+ },
{
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "ExpressRoute を Azure へのプライマリ接続として使用する可能性を調査したことを確認します。",
+ "text": "ExpressRoute を Azure へのプライマリ接続として使用します。 バックアップ接続のソースとして VPN を使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "description": "AS パスのプリペンドと接続の重みを使用して、Azure からオンプレミスへのトラフィックに影響を与え、独自のルーターの全範囲の BGP 属性を使用して、オンプレミスから Azure へのトラフィックに影響を与えることができます。",
+ "description": "AS パスの先頭と接続の重みを使用して Azure からオンプレミスへのトラフィックに影響を与えたり、独自のルーターの BGP 属性の全範囲を使用してオンプレミスから Azure へのトラフィックに影響を与えたりできます。",
"guid": "f29812b2-363c-4efe-879b-599de0d5973c",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "複数の ExpressRoute 回線、または複数のオンプレミスの場所を使用する場合、特定のパスが優先される場合は、BGP 属性を使用してルーティングを最適化してください。",
+ "text": "複数の ExpressRoute 回線または複数のオンプレミスの場所を使用する場合は、BGP 属性を使用してルーティングを最適化します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
@@ -2815,15 +2893,14 @@
"checklist": "Azure Landing Zone Review",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "帯域幅とパフォーマンスの要件に基づいて、ExpressRoute/VPN ゲートウェイに適切な SKU を使用していることを確認します。",
+ "text": "ExpressRoute/VPN ゲートウェイの適切な SKU は、帯域幅とパフォーマンスの要件に基づいて選択してください。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
@@ -2831,11 +2908,11 @@
"link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
"service": "ExpressRoute",
"severity": "高い",
- "text": "無制限のデータ ExpressRoute 回線は、コストに見合った帯域幅に達した場合にのみ使用してください。",
+ "text": "無制限のデータ ExpressRoute 回線を使用しているのは、そのコストを正当化する帯域幅に達した場合にのみしてください。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "費用"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
@@ -2843,7 +2920,8 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
"service": "ExpressRoute",
"severity": "高い",
- "text": "回線のピアリングの場所がローカル SKU の Azure リージョンをサポートしている場合は、ExpressRoute のローカル SKU を利用して回線のコストを削減します。",
+ "text": "ExpressRoute のローカル SKU を活用して、回線のコストを削減します (回線ピアリングの場所がローカル SKU の Azure リージョンをサポートしている場合)。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "費用"
},
{
@@ -2854,7 +2932,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "サポートされている Azure リージョンにゾーン冗長 ExpressRoute ゲートウェイをデプロイします。",
+ "text": "ゾーン冗長 ExpressRoute ゲートウェイをサポートされている Azure リージョンにデプロイします。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
@@ -2865,7 +2943,7 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "10 Gbps を超える帯域幅または専用の 10/100 Gbps ポートを必要とするシナリオでは、ExpressRoute Direct を使用します。",
+ "text": "10 Gbps を超える帯域幅または専用の 10/100 Gbps ポートが必要なシナリオでは、ExpressRoute Direct を使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
@@ -2876,42 +2954,41 @@
"link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "待機時間を短くする必要がある場合、またはオンプレミスから Azure へのスループットを 10 Gbps を超える必要がある場合は、FastPath を有効にして、データ パスから ExpressRoute ゲートウェイをバイパスします。",
+ "text": "待機時間を短くする必要がある場合、またはオンプレミスから Azure へのスループットを 10 Gbps より大きくする必要がある場合は、FastPath を有効にして、データ パスから ExpressRoute ゲートウェイをバイパスします。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "パフォーマンス"
},
{
- "arm-service": "microsoft.network/vpnGateways",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
"guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
"link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
"service": "VPN",
"severity": "中程度",
- "text": "ゾーン冗長 VPN ゲートウェイを使用して、ブランチまたはリモートの場所を Azure に接続します (使用可能な場合)。",
+ "text": "ゾーン冗長 VPN ゲートウェイを使用して、ブランチまたはリモートの場所を Azure (使用可能な場合) に接続します。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "確実"
},
{
- "arm-service": "microsoft.network/vpnGateways",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
"checklist": "Azure Landing Zone Review",
"guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
"service": "VPN",
"severity": "中程度",
- "text": "冗長 VPN アプライアンスをオンプレミス (アクティブ/アクティブまたはアクティブ/パッシブ) で使用します。",
+ "text": "オンプレミスで冗長な VPN アプライアンス (アクティブ/アクティブまたはアクティブ/パッシブ) を使用します。",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "確実"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
"service": "ExpressRoute",
"severity": "高い",
- "text": "ExpressRoute Direct を使用する場合は、コストを節約するために、ローカルの Azure リージョンへの ExpressRoute Local 回線の使用を検討してください",
+ "text": "ExpressRoute Direct を使用する場合は、コストを節約するために、ローカル Azure リージョンへの ExpressRoute ローカル回線を使用することを検討してください。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "費用"
},
@@ -2922,7 +2999,7 @@
"link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "運用環境と非運用環境を分離する場合など、トラフィックの分離または専用の帯域幅が必要な場合は、異なる ExpressRoute 回線を使用します。これにより、ルーティング ドメインが分離され、ノイジー ネイバーのリスクが軽減されます。",
+ "text": "運用環境と非運用環境を分離する場合など、トラフィックの分離または専用の帯域幅が必要な場合は、異なる ExpressRoute 回線を使用します。これにより、ルーティングドメインを分離し、ノイズの多い隣人のリスクを軽減できます。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
@@ -2933,7 +3010,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "組み込みの Express Route Insights を使用して、ExpressRoute の可用性と使用率を監視します。",
+ "text": "ExpressRoute の可用性と使用率は、組み込みの Express Route Insights を使用して監視します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "オペレーションズ"
},
@@ -2944,7 +3021,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "接続モニターは、ネットワーク全体 (特にオンプレミスと Azure 間) の接続を監視するために使用します。",
+ "text": "接続モニターは、ネットワーク全体 (特にオンプレミスと Azure の間) の接続監視に使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "オペレーションズ"
},
@@ -2953,10 +3030,10 @@
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "冗長性のために、異なるピアリングの場所からの ExpressRoute 回線を使用します。",
+ "text": "冗長性を確保するために、さまざまなピアリングの場所から ExpressRoute 回線を使用します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
@@ -2967,11 +3044,11 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "ExpressRoute のフェールオーバーとしてサイト間 VPN を使用します (特に、1 つの ExpressRoute 回線のみを使用する場合)。",
+ "text": "ExpressRoute 回線を 1 つだけ使用する場合は、ExpressRoute のフェールオーバーとしてサイト間 VPN を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
@@ -2979,18 +3056,18 @@
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
"service": "ExpressRoute",
"severity": "高い",
- "text": "GatewaySubnet でルート テーブルを使用している場合は、ゲートウェイ ルートが伝達されていることを確認します。",
+ "text": "GatewaySubnet でルート テーブルを使用している場合は、ゲートウェイ ルートが伝達されていることを確認してください。",
"waf": "確実"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
"service": "ExpressRoute",
"severity": "高い",
- "text": "ExpressRoute を使用する場合、オンプレミスのルーティングは動的である必要があり、接続障害が発生した場合は、回線の残りの接続に収束する必要があります。負荷は、アクティブ/パッシブもサポートされていますが、理想的にはアクティブ/アクティブとして両方の接続で共有する必要があります。",
+ "text": "ExpressRoute を使用する場合、オンプレミスのルーティングは動的である必要があり、接続エラーが発生した場合は、回線の残りの接続に収束する必要があります。負荷は、アクティブ/アクティブとして両方の接続で共有するのが理想的ですが、アクティブ/パッシブもサポートされています。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
{
@@ -3011,7 +3088,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "Bidirectional Forwarding Detection(BFD)が有効で、顧客またはプロバイダーのエッジ ルーティング デバイスで設定されていることを確認します。",
+ "text": "BFD(Bidirectional Forwarding Detection)が顧客またはプロバイダのエッジルーティングデバイスで有効で設定されていることを確認します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
@@ -3022,7 +3099,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "ExpressRoute",
"severity": "高い",
- "text": "回復性を高めるために、ExpressRoute ゲートウェイを異なるピアリングの場所から 2 つ以上の回線に接続します。",
+ "text": "ExpressRoute ゲートウェイを異なるピアリングの場所から 2 つ以上の回線に接続すると、回復性が向上します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "確実"
},
@@ -3049,115 +3126,129 @@
"waf": "パフォーマンス"
},
{
- "ammp": true,
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "低い",
+ "text": "検査のために Azure トラフィックをハイブリッドの場所に送信しないでください。 代わりに、Azure のリソース間の通信が Microsoft バックボーン ネットワーク経由で行われるように、\"Azure のトラフィックは Azure にとどまる\" という原則に従います。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "高い",
- "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルター処理 (組織で必要な場合) を管理します",
+ "text": "Azure Firewall を使用して、インターネットへの Azure 送信トラフィック、HTTP/S 以外の受信接続、East/West トラフィック フィルタリング (組織で必要な場合) を管理します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "中程度",
- "text": "グローバル ネットワーク環境全体のセキュリティ体制を管理するグローバル Azure Firewall ポリシーを作成し、それをすべての Azure Firewall インスタンスに割り当てます。Azure のロールベースのアクセス制御を介して増分ファイアウォール ポリシーをローカルのセキュリティ チームに委任することで、特定のリージョンの要件を満たすきめ細かなポリシーが可能になります。",
+ "text": "グローバル ネットワーク環境全体のセキュリティ体制を管理するためのグローバル Azure Firewall ポリシーを作成し、それをすべての Azure Firewall インスタンスに割り当てます。Azure のロールベースのアクセス制御を介して、増分ファイアウォール ポリシーをローカル セキュリティ チームに委任することで、特定のリージョンの要件を満たすためのきめ細かなポリシーを可能にします。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
"link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
"service": "Firewall",
"severity": "低い",
- "text": "組織がそのようなソリューションを使用してアウトバウンド接続を保護する場合は、Firewall Manager 内でサポートされているパートナーの SaaS セキュリティ プロバイダーを構成します。",
+ "text": "サポートされているパートナー SaaS セキュリティプロバイダーを Firewall Manager 内で構成します。これは、組織がアウトバウンド接続を保護するためにそのようなソリューションを使用する場合です。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
"service": "Firewall",
"severity": "高い",
- "text": "FQDN ベースのネットワーク ルールと DNS プロキシを備えた Azure Firewall を使用して、アプリケーション ルールでサポートされていないプロトコルを介してインターネットへのエグレス トラフィックをフィルター処理します。",
+ "text": "アプリケーション・ルールを使用して、サポートされているプロトコルの宛先ホスト名でアウトバウンド・トラフィックをフィルタリングします。 FQDN ベースのネットワーク規則と Azure Firewall と DNS プロキシを使用して、他のプロトコル経由でインターネットへのエグレス トラフィックをフィルター処理します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"link": "https://learn.microsoft.com/azure/firewall/premium-features",
"service": "Firewall",
"severity": "高い",
- "text": "Azure Firewall Premium を使用して、セキュリティと保護を強化します。",
+ "text": "Azure Firewall Premium を使用して、追加のセキュリティ機能を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "高い",
- "text": "保護を強化するために、Azure Firewall 脅威インテリジェンス モードを [アラート] と [拒否] に構成します。",
+ "text": "Azure Firewall の脅威インテリジェンス モードを [アラート] と [拒否] に構成して、保護を強化します。",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
"service": "Firewall",
"severity": "高い",
- "text": "保護を強化するために、Azure Firewall IDPS モードを [拒否] に構成します。",
+ "text": "Azure Firewall の IDPS モードを [拒否] に構成して、保護を強化します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
"service": "Firewall",
"severity": "高い",
- "text": "Virtual WAN に接続されていない VNet 内のサブネットの場合は、インターネット トラフィックが Azure Firewall またはネットワーク仮想アプライアンスにリダイレクトされるようにルート テーブルをアタッチします",
+ "text": "Virtual WAN に接続されていない VNet 内のサブネットの場合は、インターネット トラフィックが Azure Firewall またはネットワーク仮想アプライアンスにリダイレクトされるようにルート テーブルをアタッチします。",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
"service": "Firewall",
"severity": "中程度",
- "text": "すべての Azure Firewall デプロイのログを保存するための診断設定を、リソース固有の宛先テーブルに追加します。",
+ "text": "診断設定を追加して、リソース固有の宛先テーブルを使用して、すべての Azure Firewall デプロイのログを保存します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
"service": "Firewall",
"severity": "大事な",
- "text": "Azure Firewall クラシック規則 (存在する場合) からファイアウォール ポリシーに移行します。",
+ "text": "Azure Firewall クラシック ルール (存在する場合) からファイアウォール ポリシーに移行します。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
@@ -3165,54 +3256,64 @@
"service": "Firewall",
"severity": "高い",
"text": "Azure Firewall サブネットに /26 プレフィックスを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
"service": "Firewall",
"severity": "中程度",
- "text": "ファイアウォール ポリシー内のルールをルール コレクション グループとルール コレクションに分類し、使用頻度に基づいて配置します",
+ "text": "ファイアウォールポリシー内のルールを、使用頻度に基づいて「ルールコレクショングループ」と「ルールコレクション」に整理します。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
"link": "https://learn.microsoft.com/azure/firewall/ip-groups",
"service": "Firewall",
"severity": "中程度",
- "text": "IP グループまたは IP プレフィックスを使用して、IP テーブル ルールの数を減らす",
+ "text": "IP グループまたは IP プレフィックスを使用して、IP テーブル・ルールの数を減らします。",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
"service": "Firewall",
"severity": "中程度",
- "text": "DNATS の送信元 IP としてワイルドカード (* や any など) は使用せず、受信 DNAT の送信元 IP を指定する必要があります",
+ "text": "DNATSのソースIPとしてワイルドカード(*やanyなど)を使用せず、受信DNATのソースIPを指定する必要があります。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "中程度",
"text": "SNAT ポートの使用状況を監視し、NAT ゲートウェイの設定を評価し、シームレスなフェールオーバーを確保することで、SNAT ポートの枯渇を防ぎます。ポート数が制限に近づく場合は、SNAT の枯渇が差し迫っている可能性があります。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
"service": "Firewall",
"severity": "高い",
- "text": "TLSインスペクションの有効化",
+ "text": "Azure Firewall Premium を使用している場合は、TLS 検査を有効にします。",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
@@ -3222,58 +3323,81 @@
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
"service": "Firewall",
"severity": "中程度",
- "text": "TLS 検査の一環として、検査のために Azure App Gateway からトラフィックを受信することを計画します。",
+ "text": "TLS 検査の一環として、Azure App Gateway からのトラフィックの受信を検査用に計画します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "中程度",
- "text": "Azure Firewall DNS プロキシ構成を有効にする",
- "waf": "安全"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
- "severity": "中程度",
- "text": "仮想マシンに直接関連付けられているパブリック IP アドレスを拒否するポリシーの割り当てがあることを確認します",
+ "text": "Azure Firewall DNS プロキシ構成を有効にします。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "低い",
- "text": "Azure Firewall を Azure Monitor と統合し、診断ログを有効にして、ファイアウォール ログを格納および分析します。",
+ "severity": "高い",
+ "text": "Azure Firewall を Azure Monitor と統合し、診断ログを有効にして、ファイアウォールのログとメトリックを格納および分析します。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "低い",
"text": "ファイアウォールルールのバックアップを実装する",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
+ "severity": "高い",
+ "text": "Azure Firewall を複数の可用性ゾーンにデプロイします。Azure Firewall は、そのデプロイに応じて異なる SLA を提供します。1 つの可用性ゾーンまたは複数の可用性ゾーンで、信頼性とパフォーマンスが向上する可能性があります。",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "高い",
+ "text": "Azure Firewall VNet で DDoS Protection を構成し、DDoS Protection プランを Azure Firewall をホストしている仮想ネットワークに関連付けて、DDoS 攻撃に対する軽減を強化します。Azure Firewall Manager は、ファイアウォール インフラストラクチャと DDoS 保護プランの作成を統合します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Landing Zone Review",
"guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "高い",
- "text": "仮想ネットワークに挿入された Azure PaaS サービスのコントロール プレーン通信が、たとえば、コントロール プレーンのトラフィックをブロックする 0.0.0.0/0 ルートや NSG ルールによって切断されていないことを確認します。",
+ "text": "0.0.0.0/0 ルートやコントロール プレーン トラフィックをブロックする NSG ルールなど、仮想ネットワークに挿入された Azure PaaS サービスのコントロール プレーン通信を中断しないでください。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
@@ -3281,36 +3405,37 @@
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "中程度",
- "text": "オンプレミスからプライベート エンドポイントと ExpressRoute プライベート ピアリングを介して Azure PaaS サービスにアクセスします。この方法では、パブリック インターネット経由のトランジットが回避されます。",
+ "text": "オンプレミスからプライベート エンドポイントと ExpressRoute プライベート ピアリングを介して Azure PaaS サービスにアクセスします。この方法では、公共のインターネット経由のトランジットを回避できます。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "中程度",
- "text": "すべてのサブネットで仮想ネットワーク サービス エンドポイントを既定で有効にしないでください。",
+ "severity": "高い",
+ "text": "既定では、すべてのサブネットで仮想ネットワーク サービス エンドポイントを有効にしないでください。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "中程度",
- "text": "Azure Firewall または NVA の IP アドレスの代わりに FQDN を使用して Azure PaaS サービスへのエグレス トラフィックをフィルター処理し、データ流出を防ぎます。Private Link を使用している場合は、すべての FQDN をブロックし、それ以外の場合は必要な PaaS サービスのみを許可できます。",
+ "text": "Azure Firewall または NVA の IP アドレスではなく FQDN を使用して Azure PaaS サービスへのエグレス トラフィックをフィルター処理し、データの流出を防ぎます。Private Link を使用している場合は、すべての FQDN をブロックでき、それ以外の場合は必要な PaaS サービスのみを許可できます。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
@@ -3318,21 +3443,24 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
"service": "ExpressRoute",
"severity": "高い",
- "text": "Gateway サブネットに少なくとも /27 プレフィックスを使用する",
+ "text": "Gateway サブネットには、少なくとも /27 プレフィックスを使用します。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "中程度",
- "text": "接続を制限するために、VirtualNetwork サービス タグを使用する NSG 受信の既定の規則に依存しないでください。",
+ "severity": "高い",
+ "text": "VirtualNetwork サービス タグを使用して接続を制限する NSG 受信既定の規則に依存しないでください。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"service": "NSG",
@@ -3342,43 +3470,37 @@
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
- "severity": "中程度",
- "text": "アプリケーション チームは、サブネット レベルの NSG でアプリケーション セキュリティ グループを使用して、ランディング ゾーン内の多層 VM を保護する必要があります。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "安全"
- },
- {
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "中程度",
- "text": "NSG とアプリケーション セキュリティ グループを使用して、ランディング ゾーン内のトラフィックを細かくセグメント化し、中央の NVA を使用してトラフィック フローをフィルター処理しないようにします。",
+ "text": "NSG とアプリケーション セキュリティ グループを使用して、ランディング ゾーン内のトラフィックをマイクロセグメント化し、中央の NVA を使用してトラフィック フローをフィルター処理しないようにします。",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "中程度",
- "text": "VNet フロー ログを有効にして Traffic Analytics にフィードし、内部および外部のトラフィック フローに関する分析情報を取得します。",
+ "text": "VNet フロー ログを有効にし、Traffic Analytics にフィードして、内部および外部のトラフィック フローに関する分析情報を取得します。",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "中程度",
- "text": "NSG あたりの NSG ルールの制限 (1000) を検討します。",
+ "text": "1000 ルールの制限があるため、NSG ごとに 900 を超える NSG ルールを実装しないでください。",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "確実"
},
@@ -3389,7 +3511,7 @@
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "中程度",
- "text": "Azure ネットワーク管理を簡素化するために Virtual WAN を検討し、Virtual WAN ルーティング設計の一覧にシナリオが明示的に記述されていることを確認します",
+ "text": "Virtual WAN ルーティング設計の一覧にシナリオが明示的に説明されている場合は、Virtual WAN を使用します。",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "オペレーションズ"
},
@@ -3397,20 +3519,11 @@
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "中程度",
"text": "Azure リージョンごとに Virtual WAN ハブを使用して、共通のグローバル Azure Virtual WAN を介して Azure リージョン間で複数のランディング ゾーンを接続します。",
- "waf": "パフォーマンス"
- },
- {
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "低い",
- "text": "\"Azure のトラフィックは Azure にとどまる\" という原則に従って、Azure のリソース間の通信が Microsoft バックボーン ネットワーク経由で行われるようにします",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "パフォーマンス"
},
{
@@ -3418,10 +3531,10 @@
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "中程度",
- "text": "送信インターネット トラフィックの保護とフィルター処理を行うには、セキュリティで保護されたハブに Azure Firewall をデプロイします",
+ "text": "送信インターネット トラフィックの保護とフィルタリングを行うには、セキュリティで保護されたハブに Azure Firewall をデプロイします。",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
@@ -3429,10 +3542,11 @@
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "中程度",
- "text": "ネットワーク アーキテクチャが Azure Virtual WAN の制限内にあることを確認します。",
+ "text": "Virtual WAN ネットワーク アーキテクチャが、特定されたアーキテクチャ シナリオと一致していることを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
@@ -3442,27 +3556,32 @@
"link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
"service": "VWAN",
"severity": "中程度",
- "text": "Azure Monitor Insights for Virtual WAN を使用して、Virtual WAN のエンドツーエンドのトポロジ、状態、主要なメトリックを監視します。",
+ "text": "Azure Monitor Insights for Virtual WAN を使用して、Virtual WAN のエンドツーエンド トポロジ、状態、および主要なメトリックを監視します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "オペレーションズ"
},
{
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "中程度",
- "text": "IaC デプロイで、これらのフローを明示的にブロックする必要がない限り、Virtual WAN のブランチ間トラフィックが無効にならないようにしてください。",
+ "text": "Virtual WAN のブランチ間トラフィックは、これらのフローを明示的にブロックする必要がない限り、無効にしないでください。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "中程度",
- "text": "AS-Path は ExpressRoute や VPN よりも柔軟性が高いため、ハブ ルーティングの基本設定として使用します。",
+ "text": "AS-Path は ExpressRoute や VPN よりも柔軟性が高いため、ハブ ルーティング設定として使用します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
@@ -3472,134 +3591,157 @@
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "中程度",
- "text": "IaC デプロイで Virtual WAN でラベルベースの伝達が構成されていることを確認すると、仮想ハブ間の接続が損なわれます。",
+ "text": "Virtual WAN でラベルベースの伝達を構成すると、仮想ハブ間の接続が損なわれます。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "ammp": true,
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "高い",
- "text": "仮想ハブに十分な IP 空間 (理想的には /23 プレフィックス) を割り当てます。",
+ "text": "仮想ハブに少なくとも /23 プレフィックスを割り当てて、十分な IP スペースが使用可能であることを確認します。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "確実"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "高い",
- "text": "Azure Policy を戦略的に活用し、環境の制御を定義し、ポリシー イニシアチブを使用して関連するポリシーをグループ化します。",
+ "text": "Azure Policy を戦略的に活用し、環境のコントロールを定義し、ポリシー イニシアチブを使用して関連するポリシーをグループ化します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "中程度",
- "text": "規制とコンプライアンスの要件を Azure Policy の定義と Azure ロールの割り当てにマップします。",
+ "text": "規制とコンプライアンスの要件を Azure Policy 定義と Azure ロールの割り当てにマップします。",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "223ace8c-b123-408c-a501-7f154e3ab369",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "中程度",
- "text": "中間ルート管理グループで Azure Policy 定義を確立し、継承されたスコープで割り当てられるようにする",
+ "text": "中間ルート管理グループで Azure Policy 定義を確立して、継承されたスコープで割り当てられるようにします。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "3829e7e3-1618-4368-9a04-77a209945bda",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "中程度",
- "text": "必要に応じて、ポリシーの割り当てを最下位レベルで管理し、最下位レベルで除外します。",
+ "severity": "高い",
+ "text": "ポリシーの割り当てを適切な最上位レベルで管理し、必要に応じて下位レベルで除外します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "43334f24-9116-4341-a2ba-527526944008",
"link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
"service": "Policy",
"severity": "低い",
- "text": "Azure Policy を使用して、ユーザーがサブスクリプション/管理グループ レベルでプロビジョニングできるサービスを制御する",
+ "text": "Azure Policy を使用して、ユーザーがサブスクリプション/管理グループ レベルでプロビジョニングできるサービスを制御します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "中程度",
- "text": "可能な場合は組み込みのポリシーを使用して、運用上のオーバーヘッドを最小限に抑えます。",
+ "severity": "高い",
+ "text": "可能な場合は組み込みポリシーを使用して、運用オーバーヘッドを最小限に抑えます。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "description": "リソース ポリシー共同作成者ロールを特定のスコープに割り当てると、ポリシー管理を関連するチームに委任できます。たとえば、中央の IT チームが管理グループ レベルのポリシーを監督し、アプリケーション チームがサブスクリプションのポリシーを処理することで、組織の標準に準拠した分散ガバナンスが可能になります。",
+ "description": "Resource Policy Contributor ロールを特定のスコープに割り当てると、ポリシー管理を関連するチームに委任できます。たとえば、中央のITチームが管理グループレベルのポリシーを監督し、アプリケーションチームがサブスクリプションのポリシーを処理することで、組織の標準に準拠した分散型ガバナンスが可能になります。",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "中程度",
- "text": "組み込みのリソース ポリシー共同作成者ロールを特定のスコープで割り当てて、アプリケーション レベルのガバナンスを有効にします。",
+ "text": "特定のスコープで組み込みのリソース ポリシー共同作成者ロールを割り当てて、アプリケーション レベルのガバナンスを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "19048384-5c98-46cb-8913-156a12476e49",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "中程度",
- "text": "ルート管理グループのスコープで行われる Azure Policy 割り当ての数を制限して、継承されたスコープでの除外による管理を回避します。",
+ "text": "ルート管理グループのスコープで行われる Azure Policy の割り当ての数を制限して、継承されたスコープでの除外による管理を回避します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
"link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
"service": "Policy",
"severity": "中程度",
- "text": "データ主権の要件が存在する場合は、Azure ポリシーをデプロイして適用できます",
+ "text": "データ主権の要件が存在する場合は、それらを適用するために Azure ポリシーをデプロイする必要があります。",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
"service": "Policy",
"severity": "中程度",
- "text": "ソブリン・ランディング・ゾーンの場合、主権ポリシー・ベースラインのポリシー・イニシアチブがデプロイされ、正しいMGレベルで割り当てられます。",
+ "text": "ソブリン ランディング ゾーンの場合は、ソブリン ポリシー ベースラインをデプロイし、正しい管理グループ レベルで割り当てます。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
"link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
"service": "Policy",
"severity": "中程度",
- "text": "ソブリン・ランディング・ゾーンについては、ソブリン制御の目標とポリシー・マッピングが文書化されています。",
+ "text": "ソブリン ランディング ゾーンの場合は、ソブリン制御の目標をポリシー マッピングに文書化します。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "中程度",
- "text": "ソブリン ランディング ゾーンでは、\"ソブリン制御の目標からポリシー マッピング\" の CRUD のプロセスが導入されています。",
+ "text": "ソブリン・ランディング・ゾーンについては、「ソブリン・コントロールの目標からポリシー・マッピングまで」の管理プロセスが実施されていることを確認してください。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "中程度",
"text": "Azure ロールベースのアクセス制御 (Azure RBAC)、データ主権要件、またはデータ保持ポリシーで個別のワークスペースが義務付けられている場合を除き、1 つのモニター ログ ワークスペースを使用してプラットフォームを一元的に管理します。",
@@ -3607,187 +3749,194 @@
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "中程度",
+ "text": "すべてのリージョンで 1 つの Azure Monitor ログ ワークスペースを使用するか、さまざまな地理的リージョンをカバーする複数のワークスペースを作成するかを決定します。各アプローチには、リージョン間のネットワーク料金の可能性など、長所と短所があります",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "中程度",
- "text": "ログの保持要件が 12 年を超える場合は、ログを Azure Storage にエクスポートします。不変ストレージと write-once、read-many ポリシーを使用して、ユーザーが指定した間隔でデータを消去および変更できないようにします。",
+ "severity": "高い",
+ "text": "ログの保持要件が 12 年を超える場合は、ログを Azure Storage にエクスポートします。write-once、read-many ポリシーで不変ストレージを使用して、ユーザーが指定した間隔でデータを消去および変更できないようにします。",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
"service": "VM",
"severity": "中程度",
- "text": "Azure Policy を使用して OS レベルの仮想マシン (VM) 構成のずれを監視します。ポリシーを使用して Azure Automanage Machine Configuration 監査機能を有効にすると、アプリケーション チームのワークロードは、わずかな労力で機能をすぐに使用できます。",
+ "text": "Azure Policy を使用して、OS レベルの仮想マシン (VM) 構成のずれを監視します。ポリシーを使用して Azure Automanage マシン構成の監査機能を有効にすると、アプリケーション チームのワークロードは、わずかな労力で機能機能をすぐに使用できます。",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "中程度",
- "text": "Azure Update Manager を、Azure の Windows および Linux VM の修正プログラムの適用メカニズムとして使用します。",
+ "text": "Azure Update Manager は、Azure の Windows VM と Linux VM の修正プログラム適用メカニズムとして使用します。",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "中程度",
- "text": "Azure Arc を使用して、Azure の外部にある Windows および Linux VM の修正プログラムの適用メカニズムとして Azure Update Manager を使用します。",
+ "text": "Azure Arc を使用して、Azure の外部にある Windows および Linux VM の修正プログラム適用メカニズムとして Azure Update Manager を使用します。",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "オペレーションズ"
},
{
+ "arm-service": "microsoft.network/networkWatchers",
"checklist": "Azure Landing Zone Review",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "中程度",
- "text": "Network Watcher を使用してトラフィック フローをプロアクティブに監視する",
+ "text": "Network Watcher を使用して、トラフィック フローを事前に監視します。",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "中程度",
- "text": "分析情報とレポートには Azure Monitor ログを使用します。",
+ "text": "Azure Monitor ログを使用して、分析情報とレポートを作成します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
"severity": "中程度",
- "text": "運用アラートの生成には、Azure Monitor アラートを使用します。",
+ "text": "Azure Monitor アラートを使用して、運用アラートを生成します。",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "中程度",
- "text": "Azure Automation アカウントを介して変更とインベントリの追跡を使用する場合は、Log Analytics ワークスペースと Automation アカウントをリンクするためにサポートされているリージョンを選択していることを確認してください。",
+ "text": "Azure Automation アカウントを使用して変更とインベントリの追跡を使用する場合は、Log Analytics ワークスペースと Automation アカウントをリンクするためにサポートされているリージョンが選択されていることを確認してください。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "中程度",
- "text": "Azure Backup を使用する場合は、既定の設定が GRS であるため、さまざまなバックアップの種類 (GRS、ZRS、LRS) を考慮してください",
+ "severity": "低い",
+ "text": "Azure Backup を使用する場合は、既定の設定が GRS であるため、バックアップに正しいバックアップの種類 (GRS、ZRS、LRS) を使用します。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "確実"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
"link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
"service": "VM",
"severity": "中程度",
- "text": "Azure ポリシーを使用して、VM 拡張機能を通じてソフトウェア構成を自動的にデプロイし、準拠したベースライン VM 構成を適用します。",
+ "text": "Azure ゲスト ポリシーを使用して、VM 拡張機能を通じてソフトウェア構成を自動的にデプロイし、準拠したベースライン VM 構成を適用します。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "description": "Azure Policy のゲスト構成機能では、マシンの設定 (OS、アプリケーション、環境など) を監査して修復し、リソースが想定される構成と一致していることを確認できます。",
+ "description": "Azure Policy のゲスト構成機能を使用して、マシンの設定 (OS、アプリケーション、環境など) を監査および修復し、リソースが予想される構成と一致していることを確認し、Update Management では VM のパッチ管理を適用できます。",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
"service": "VM",
"severity": "中程度",
- "text": "VM のセキュリティ構成のドリフトを Azure Policy で監視します。",
+ "text": "Azure Policy を使用して VM セキュリティ構成のドリフトを監視します。",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
"service": "VM",
"severity": "中程度",
- "text": "Azure から Azure Virtual Machines へのディザスター リカバリー シナリオには、Azure Site Recovery を使用します。これにより、リージョン間でワークロードをレプリケートできます。",
+ "text": "Azure Site Recovery は、Azure から Azure Virtual Machines へのディザスター リカバリー シナリオに使用します。これにより、リージョン間でワークロードをレプリケートできます。",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
"link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
"service": "Backup",
"severity": "中程度",
- "text": "Azure ネイティブのバックアップ機能、または Azure 互換のサード パーティのバックアップ ソリューションを使用します。",
+ "text": "Azure ネイティブのバックアップ機能、または Azure と互換性のあるサード パーティのバックアップ ソリューションを使用します。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "高い",
- "text": "Availability Zones は、サポートされているリージョンの VM に活用します。",
- "waf": "確実"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "高い",
- "text": "運用ワークロードを 1 つの VM で実行することは避けてください。",
- "waf": "確実"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "中程度",
- "text": "Azure Load Balancer と Application Gateway は、受信ネットワーク トラフィックを複数のリソースに分散します。",
- "waf": "確実"
- },
- {
- "ammp": true,
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"service": "WAF",
"severity": "高い",
- "text": "診断設定を追加して、Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから WAF ログを保存します。ログを定期的に確認して、攻撃や誤検知がないか確認します。",
+ "text": "診断設定を追加して、Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから WAF ログを保存します。ログを定期的に確認して、攻撃や誤検知の検出がないか確認します。",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "オペレーションズ"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "7f408960-c626-44cb-a018-347c8d790cdf",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
"service": "WAF",
"severity": "中程度",
- "text": "Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから Microsoft Sentinel に WAF ログを送信します。攻撃を検出し、WAF テレメトリを Azure 環境全体に統合します。",
+ "text": "Azure Front Door や Azure Application Gateway などのアプリケーション配信サービスから WAF ログを Microsoft Sentinel に送信します。攻撃を検出し、WAF テレメトリを Azure 環境全体に統合します。",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "オペレーションズ"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "Key Vault",
"severity": "高い",
- "text": "Azure Key Vault を使用してシークレットと資格情報を格納する",
+ "text": "Azure Key Vault を使用して、シークレットと資格情報を格納します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
"guid": "a0477a20-9945-4bda-9333-4f2491163418",
@@ -3795,96 +3944,117 @@
"service": "Key Vault",
"severity": "中程度",
"text": "アプリケーションやリージョンごとに異なる Azure Key Vault を使用して、トランザクションのスケール制限を回避し、シークレットへのアクセスを制限します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
"text": "論理的な削除ポリシーと消去ポリシーを有効にして Azure Key Vault をプロビジョニングし、削除されたオブジェクトの保持保護を許可します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "dc055bcf-619e-48a1-9f98-879525d62688",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
- "text": "最小特権モデルに従って、キー、シークレット、証明書を完全に削除する承認を特殊なカスタム Microsoft Entra ID ロールに制限します。",
+ "text": "最小特権モデルに従って、キー、シークレット、証明書を完全に削除する承認を、特殊なカスタム Microsoft Entra ID ロールに制限します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
- "text": "公的認証局による証明書の管理と更新プロセスを自動化し、管理を容易にします。",
+ "text": "公開認証局を使用して証明書の管理と更新プロセスを自動化し、管理を容易にします。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "913156a1-2476-4e49-b541-acdce979377b",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
- "text": "キーと証明書のローテーションの自動化されたプロセスを確立します。",
+ "text": "キーと証明書のローテーションのための自動化されたプロセスを確立します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
"text": "コンテナーでファイアウォールと仮想ネットワーク サービス エンドポイントまたはプライベート エンドポイントを有効にして、キー コンテナーへのアクセスを制御します。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
"link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
"service": "Key Vault",
"severity": "中程度",
"text": "プラットフォーム中央の Azure Monitor Log Analytics ワークスペースを使用して、Key Vault の各インスタンス内のキー、証明書、シークレットの使用状況を監査します。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
- "text": "Key Vault のインスタンス化と特権アクセスを委任し、Azure Policy を使用して一貫性のある準拠構成を適用します。",
+ "text": "Key Vault のインスタンス化と特権アクセスを委任し、Azure Policy を使用して一貫した準拠構成を適用します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "91163418-2ba5-4275-8694-4008be7d7e48",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
"text": "Azure Key Vault は、アプリケーションごと、環境ごと、リージョンごとに使用します。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "25d62688-6d70-4ba6-a97b-e99519048384",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "中程度",
- "text": "独自のキーを持ち込む場合、これは考慮されているすべてのサービスでサポートされていない可能性があります。不整合が望ましい結果を妨げないように、関連する軽減策を実装します。待機時間を最小限に抑える適切なリージョン ペアとディザスター リカバリー リージョンを選択します。",
+ "text": "独自のキーを持ち込む場合、これは考慮されるすべてのサービスでサポートされているとは限りません。不整合が望ましい結果を妨げないように、適切な軽減策を実装します。レイテンシを最小限に抑える適切なリージョンペアとディザスタリカバリリージョンを選択します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
"link": "https://learn.microsoft.com/industry/sovereignty/key-management",
"service": "Key Vault",
"severity": "中程度",
"text": "ソブリン ランディング ゾーンの場合は、Azure Key Vault マネージド HSM を使用してシークレットと資格情報を格納します。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "安全"
},
{
@@ -3894,64 +4064,80 @@
"service": "Entra",
"severity": "中程度",
"text": "Microsoft Entra ID レポート機能を使用して、アクセス制御監査レポートを生成します。",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "安全"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
"service": "Defender",
"severity": "高い",
- "text": "すべてのサブスクリプションに対して Defender Cloud Security Posture Management を有効にします。",
+ "text": "すべてのサブスクリプションで Defender Cloud セキュリティ態勢管理を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "安全"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
"service": "Defender",
"severity": "高い",
- "text": "すべてのサブスクリプションでサーバーに対して Defender Cloud ワークロード保護プランを有効にします。",
+ "text": "すべてのサブスクリプションで、サーバーの Defender Cloud ワークロード保護プランを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "安全"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
"service": "Defender",
"severity": "高い",
- "text": "すべてのサブスクリプションで Azure リソースの Defender Cloud Workload Protection プランを有効にします。",
+ "text": "すべてのサブスクリプションで Azure リソースの Defender Cloud ワークロード保護プランを有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
"service": "VM",
"severity": "高い",
- "text": "IaaS サーバーで Endpoint Protection を有効にします。",
+ "text": "IaaS サーバーでエンドポイント保護を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
"link": "https://learn.microsoft.com/azure/security-center/",
"service": "VM",
"severity": "中程度",
- "text": "Azure Monitor ログと Defender for Cloud を使用して、基本オペレーティング システムの修正プログラムの適用誤差を監視します。",
+ "text": "Azure Monitor ログと Defender for Cloud を使用して、基本オペレーティング システムの修正プログラムのずれを監視します。",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"service": "Monitor",
"severity": "中程度",
"text": "既定のリソース構成を一元化された Azure Monitor Log Analytics ワークスペースに接続します。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "安全"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "高い",
+ "text": "相関ログによる一元的な脅威検出 - セキュリティデータを中央の場所に統合して、SIEM(セキュリティ情報およびイベント管理)を介してさまざまなサービス間で関連付けることができます",
"waf": "安全"
},
{
@@ -3960,7 +4146,7 @@
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "中程度",
- "text": "ソブリン ランディング ゾーンの場合、透過性ログは Entra ID テナントで有効になっています。",
+ "text": "ソブリン ランディング ゾーンの場合は、Entra ID テナントで透明度ログを有効にします。",
"waf": "安全"
},
{
@@ -3969,21 +4155,22 @@
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "中程度",
- "text": "ソブリン ランディング ゾーンの場合、Entra ID テナントでカスタマー ロックボックスが有効になっています。",
+ "text": "Sovereign Landing Zone の場合は、Entra ID テナントでカスタマー ロックボックスを有効にします。",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Landing Zone Review",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
"service": "Storage",
"severity": "高い",
- "text": "ストレージ アカウントへの安全な転送を有効にする必要がある",
+ "text": "ストレージ アカウントへの安全な転送を有効にします。",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Landing Zone Review",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
@@ -3993,3834 +4180,5807 @@
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"service": "Key Vault",
"severity": "高い",
- "text": "Key Vault シークレットを使用して、資格情報 (仮想マシン、ユーザー パスワード)、証明書、キーなどの機密情報をハードコーディングしないようにします。",
+ "text": "Key Vault シークレットを使用して、資格情報 (仮想マシン、ユーザー パスワード)、証明書、キーなどの機密情報のハードコーディングを回避します。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "オペレーションズ"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
- "severity": "中程度",
- "text": "有効期間の長い取り消し可能なトークンを使用し、トークンをキャッシュし、Microsoft ID ライブラリを使用してサイレントに取得します",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
+ "severity": "低い",
+ "text": "ベスト プラクティスについては、「ベースラインの高可用性ゾーン冗長 Web アプリケーション アーキテクチャ」を参照してください",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "中程度",
- "text": "サインイン ユーザー フローがバックアップされ、回復性があることを確認します。ユーザーのサインインに使用するコードがバックアップされ、回復可能であることを確認します。外部プロセスとの回復力のあるインターフェース",
+ "text": "Premium レベルと Standard レベルを使用します。これらの層では、ステージング スロットと自動バックアップがサポートされています。",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "リージョンで適用可能な場合は Availability Zones を活用します (Premium v2 または v3 レベルが必要)",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "中程度",
- "text": "カスタムブランドアセットはCDNでホストする必要がある",
- "waf": "パフォーマンス"
+ "text": "ヘルスチェックの実装",
+ "waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
- "severity": "低い",
- "text": "複数のIDプロバイダーを持っている(つまり、Microsoft、Google、Facebookアカウントでログインする)",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "「Azure App Service のバックアップと復元のベスト プラクティス」を参照してください",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "中程度",
- "text": "VM レベルでの高可用性に関する VM ルールに従う (Premium ディスク、リージョン内の 2 つ以上、異なる可用性ゾーン内)",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "Azure App Service の信頼性に関するベスト プラクティスを実装する",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "中程度",
- "text": "複製しないでください!レプリケーションにより、ディレクトリ同期に関する問題が発生する可能性があります",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
+ "severity": "低い",
+ "text": "災害時に App Service アプリを別のリージョンに移動する方法を理解する",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "中程度",
- "text": "マルチリージョンのアクティブ/アクティブを持つ",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "Azure App Service の信頼性サポートについて理解する",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"severity": "中程度",
- "text": "Azure AD Domain Service スタンプを追加のリージョンと場所に追加する",
+ "text": "App Service プランで実行されている Function Apps に対して \"Always On\" が有効になっていることを確認する",
"waf": "確実"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "中程度",
- "text": "DR にレプリカ セットを使用する",
+ "text": "正常性チェックを使用した App Service インスタンスの監視",
"waf": "確実"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
- "severity": "低い",
- "text": "AKS Windows ワークロードで必要な場合は、HostProcess コンテナーを使用できます",
- "waf": "確実"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "severity": "低い",
- "text": "イベント ドリブン ワークロードを実行する場合は KEDA を使用します",
- "waf": "パフォーマンス"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
- "severity": "低い",
- "text": "Dapr を使用してマイクロサービス開発を容易にする",
- "waf": "オペレーションズ"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
- "severity": "高い",
- "text": "SLA でサポートされる AKS オファリングを使用する",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
+ "severity": "中程度",
+ "text": "Application Insights の可用性テストを使用して Web アプリまたは Web サイトの可用性と応答性を監視する",
"waf": "確実"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
"severity": "低い",
- "text": "ポッドとデプロイ定義でのディスラプション バジェットの使用",
+ "text": "Application Insights Standard テストを使用して、Web アプリまたは Web サイトの可用性と応答性を監視する",
"waf": "確実"
},
{
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Key Vault を使用して、アプリケーションに必要なシークレットを格納します。 Key Vault は、シークレットを格納するための安全で監査された環境を提供し、Key Vault SDK または App Service Key Vault リファレンスを通じて App Service と適切に統合されています。",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"severity": "高い",
- "text": "プライベート レジストリを使用する場合は、複数のリージョンにイメージを格納するようにリージョン レプリケーションを構成します",
- "waf": "確実"
+ "text": "Key Vault を使用してシークレットを格納する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
- "severity": "低い",
- "text": "kubecost などの外部アプリケーションを使用して、さまざまなユーザーにコストを割り当てます",
- "waf": "費用"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "マネージド ID を使用して、Key Vault SDK または App Service Key Vault 参照を使用して Key Vault に接続します。",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "マネージド ID を使用して Key Vault に接続する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
- "severity": "低い",
- "text": "スケールダウンモードを使用してノードを削除/割り当て解除する",
- "waf": "費用"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service TLS 証明書を Key Vault に格納します。",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "Key Vault を使用して TLS 証明書を格納します。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "機密情報を処理するシステムは分離する必要があります。 そのためには、個別の App Service プランまたは App Service Environment を使用し、異なるサブスクリプションまたは管理グループの使用を検討してください。",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "中程度",
- "text": "必要に応じて、AKS クラスターで複数インスタンスの分割 GPU を使用する",
- "waf": "費用"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
- "severity": "低い",
- "text": "Dev/Test クラスターを実行している場合は、NodePool Start/Stop を使用します。",
- "waf": "費用"
+ "text": "機密情報を処理するシステムを分離する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service のローカル ディスクは暗号化されていないため、機密データを格納しないでください。 (例: D:\\\\Local and %TMP%)。",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"severity": "中程度",
- "text": "Azure Policy for Kubernetes を使用してクラスターのコンプライアンスを確保する",
+ "text": "機密データをローカルディスクに保存しない",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "認証された Web アプリケーションの場合は、Azure AD や Azure AD B2C などの確立された ID プロバイダーを使用します。 選択したアプリケーション フレームワークを利用して、このプロバイダーと統合するか、App Service の認証/承認機能を使用します。",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
"severity": "中程度",
- "text": "ユーザー/システムノードプールを使用してコントロールプレーンからアプリケーションを分離する",
+ "text": "認証に確立された ID プロバイダーを使用する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "低い",
- "text": "システム ノードプールにテイントを追加して専用にする",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "適切に管理され、セキュリティで保護された DevOps デプロイ パイプラインなど、制御された信頼できる環境から App Service にコードをデプロイします。これにより、バージョン管理されておらず、悪意のあるホストからデプロイされることが確認されていないコードが回避されます。",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "信頼できる環境からのデプロイ",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
- "severity": "中程度",
- "text": "イメージにはプライベート レジストリ (ACR など) を使用する",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "FTP/FTPS と WebDeploy/SCM の両方の基本認証を無効にします。 これにより、これらのサービスへのアクセスが無効になり、デプロイに Azure AD で保護されたエンドポイントの使用が強制されます。 SCM サイトは、Azure AD 資格情報を使用して開くこともできます。",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "基本認証の無効化",
"waf": "安全"
},
{
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
- "severity": "中程度",
- "text": "イメージをスキャンして脆弱性を検出する",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "可能な場合は、マネージド ID を使用して Azure AD のセキュリティで保護されたリソースに接続します。 これが不可能な場合は、Key Vault にシークレットを格納し、代わりにマネージド ID を使用して Key Vault に接続します。",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "マネージド ID を使用してリソースに接続する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Container Registry に格納されているイメージを使用する場合は、マネージド ID を使用してこれらをプルします。",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
"severity": "高い",
- "text": "アプリの分離要件を定義する (名前空間/ノードプール/クラスター)",
+ "text": "マネージド ID を使用してコンテナーをプルするPull containers using a Managed Identity",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service の診断設定を構成することで、ログ記録と監視の中央の宛先として、すべてのテレメトリを Log Analytics に送信できます。これにより、HTTP ログ、アプリケーション ログ、プラットフォーム ログなどの App Service のランタイム アクティビティを監視できます。",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"severity": "中程度",
- "text": "CSI シークレット ストア ドライバーを使用して Azure Key Vault にシークレットを格納する",
+ "text": "App Service ランタイム ログを Log Analytics に送信する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
- "severity": "高い",
- "text": "クラスターにサービス プリンシパルを使用する場合は、資格情報を定期的に (四半期ごとなど) 更新します",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "ログ記録と監視の中央の宛先としてアクティビティ ログを Log Analytics に送信するための診断設定を設定します。これにより、App Service リソース自体のコントロール プレーンのアクティビティを監視できます。",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
+ "severity": "中程度",
+ "text": "App Service アクティビティ ログを Log Analytics に送信する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "リージョンの VNet 統合、ネットワーク セキュリティ グループ、および UDR の組み合わせを使用して、送信ネットワーク アクセスを制御します。 トラフィックは、Azure Firewall などの NVA にルーティングする必要があります。 ファイアウォールのログを必ず監視してください。",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
"severity": "中程度",
- "text": "必要に応じて、キー管理サービスの etcd 暗号化を追加します",
+ "text": "送信ネットワーク アクセスを制御する必要がある",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "VNet 統合を使用し、VNet NAT ゲートウェイまたは Azure Firewall などの NVA を使用することで、安定した送信 IP を提供できます。 これにより、受信側は必要に応じて IP に基づいて許可リストに登録できます。 多くの場合、Azure サービスへの通信では、IP アドレスに依存する必要はなく、代わりにサービス エンドポイントなどのメカニズムを使用する必要があります。 (また、受信側でプライベート エンドポイントを使用すると、SNAT の発生が回避され、安定した送信 IP 範囲が提供されます)。",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
"severity": "低い",
- "text": "必要に応じて、Confidential Compute for AKS の使用を検討してください",
+ "text": "インターネットアドレスへの送信通信のIPを安定させる",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
- "severity": "中程度",
- "text": "Defender for Containers の使用を検討する",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service のアクセス制限、サービス エンドポイント、またはプライベート エンドポイントの組み合わせを使用して、受信ネットワーク アクセスを制御します。Web アプリ自体と SCM サイトに対して異なるアクセス制限を要求し、構成できます。",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "受信ネットワーク アクセスを制御する必要がある",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Application Gateway や Azure Front Door などの Web アプリケーション ファイアウォールを使用して、悪意のある受信トラフィックから保護します。 WAFのログを必ず監視してください。",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
"severity": "高い",
- "text": "サービス プリンシパルの代わりにマネージド ID を使用するUse managed identities instead of Service Principals",
+ "text": "App Service の前で WAF を使用するUse a WAF in Front of App Service",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
- "severity": "中程度",
- "text": "認証と AAD の統合 (マネージド統合を使用)",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "WAFのみへのアクセスをロックダウンすることで、WAFをバイパスできないようにします。 アクセス制限、サービス・エンドポイントおよびプライベート・エンドポイントを組み合わせて使用します。",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "WAFをバイパスすることは避けてください",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service の構成で最小 TLS ポリシーを 1.2 に設定します。",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
"severity": "中程度",
- "text": "管理者 kubeconfig へのアクセスを制限する (get-credentials --admin)",
+ "text": "最小 TLS ポリシーを 1.2 に設定します。",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
- "severity": "中程度",
- "text": "承認と AAD RBAC の統合",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "HTTPS のみを使用するように App Service を構成します。 これにより、App Service は HTTP から HTTPS にリダイレクトされます。 HTTP Strict Transport Security (HSTS) をコード内または WAF から使用して、サイトに HTTPS を使用してのみアクセスする必要があることをブラウザーに通知することを強く検討してください。",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "HTTPS のみを使用",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "CORS 構成では、すべての配信元がサービスにアクセスできるため、ワイルドカードを使用しないでください (これにより、CORS の目的が損なわれます)。具体的には、サービスにアクセスできると予想される配信元のみを許可します。",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
"severity": "高い",
- "text": "Kubernetes で RBAC 特権を制限するために名前空間を使用する",
+ "text": "ワイルドカードは CORS に使用しないでください",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
- "severity": "中程度",
- "text": "ポッド ID アクセス管理の場合は、Azure AD ワークロード ID (プレビュー) を使用します",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "リモート デバッグは、サービスに追加のポートが開き、攻撃対象領域が増加するため、運用環境でオンにしないでください。このサービスは、48 時間後に自動的にリモート デバッグをオフにすることに注意してください。",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "リモートデバッグをオフにする",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Defender for App Service を有効にします。 これは(他の脅威の中でも)既知の悪意のあるIPアドレスへの通信を検出します。 操作の一環として、Defender for App Service からの推奨事項を確認します。",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
"severity": "中程度",
- "text": "AKS 非対話型ログインの場合は、kubelogin (プレビュー) を使用します",
+ "text": "Defender for Cloud を有効にする - Defender for App Service",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure は、ネットワーク上で DDoS Basic 保護を提供しており、通常のトラフィック パターンを学習し、異常な動作を検出できるインテリジェントな DDoS Standard 機能によって改善できます。DDoS Standard は仮想ネットワークに適用されるため、Application Gateway や NVA など、アプリの前にあるネットワーク リソース用に構成する必要があります。",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
"severity": "中程度",
- "text": "AKS ローカル アカウントを無効にする",
+ "text": "WAF VNet で DDoS Protection Standard を有効にするEnable DDOS Protection Standard on the WAF VNet",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "低い",
- "text": "必要に応じて Just-In-Time クラスター アクセスを構成する",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Container Registry に格納されているイメージを使用する場合は、プライベート エンドポイントとアプリ設定 \"WEBSITE_PULL_IMAGE_OVER_VNET\" を使用して、Azure Container Registry から仮想ネットワーク経由でイメージをプルします。",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
+ "severity": "中程度",
+ "text": "Virtual Network 経由でコンテナーをプルする",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "低い",
- "text": "必要に応じて AKS の AAD 条件付きアクセスを構成する",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "ペネトレーションテストのルールに従って、Webアプリケーションでペネトレーションテストを実施します。",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
+ "severity": "中程度",
+ "text": "ペネトレーションテストの実施",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
- "severity": "低い",
- "text": "Windows AKS ワークロードで必要な場合は、gMSA を構成します",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "DevSecOps プラクティスに従って脆弱性が検証およびスキャンされた信頼できるコードをデプロイします。",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
+ "severity": "中程度",
+ "text": "検証済みコードのデプロイ",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
- "severity": "中程度",
- "text": "より細かく制御するには、マネージドKubelet Identityの使用を検討してください",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "サポートされているプラットフォーム、プログラミング言語、プロトコル、およびフレームワークの最新バージョンを使用します。",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
+ "severity": "高い",
+ "text": "最新のプラットフォーム、言語、プロトコル、フレームワークを使用",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ストレージに関連する Microsoft クラウド セキュリティ ベンチマークのガイダンスを適用する",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "AGIC を使用している場合は、クラスター間で AppGW を共有しないでください",
- "waf": "確実"
+ "text": "\"ストレージの Azure セキュリティ ベースライン\" を検討する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "既定では、Azure Storage にはパブリック IP アドレスがあり、インターネットにアクセス可能です。プライベート エンドポイントを使用すると、アクセスが必要な Azure コンピューティング リソースにのみ Azure Storage を安全に公開できるため、パブリック インターネットへの露出を排除できます",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "AKS HTTP ルーティング アドオンを使用せず、代わりにアプリケーション ルーティング アドオンでマネージド NGINX イングレスを使用します。",
- "waf": "確実"
+ "text": "Azure Storage にプライベート エンドポイントを使用することを検討する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "新しく作成されたストレージ アカウントは、RBAC や監査などがすべて有効になるように、ARM デプロイ モデルを使用して作成されます。サブスクリプションにクラシック デプロイ モデルの古いストレージ アカウントがないことを確認する",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "Windows ワークロードの場合は、高速ネットワークを使用します",
- "waf": "パフォーマンス"
+ "text": "古いストレージ アカウントで \"クラシック デプロイ モデル\" が使用されていないことを確認する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Microsoft Defender を活用して、不審なアクティビティや構成ミスについて学習します。",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "標準のALBを使用する(基本的なALBとは対照的)",
- "waf": "確実"
+ "text": "すべてのストレージ アカウントに対して Microsoft Defender を有効にする",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "論理的な削除メカニズムを使用すると、誤って削除された BLOB を回復できます。",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "Azure CNI を使用する場合は、NodePool に異なるサブネットを使用することを検討してください",
+ "text": "BLOB の \"論理的な削除\" を有効にする",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由などから、削除された情報がすぐに削除されるようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナーに対して \"論理的な削除\" を選択的に無効にすることを検討してください。",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "プライベート エンドポイント (推奨) または Virtual Network サービス エンドポイントを使用して、クラスターから PaaS サービスにアクセスする",
+ "text": "BLOB の '論理的な削除' を無効にする",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "コンテナーの論理的な削除を使用すると、コンテナーが削除された後に回復できます (たとえば、偶発的な削除操作から回復します)。",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "要件に最適な CNI ネットワーク プラグインを選択する (Azure CNI を推奨)",
- "waf": "確実"
+ "text": "コンテナーの \"論理的な削除\" を有効にする",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "高い",
- "text": "Azure CNI を使用する場合は、ノードあたりのポッドの最大数を考慮して、サブネットのサイズを適切に設定します",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "たとえば、機密性、プライバシー、コンプライアンス上の理由などから、削除された情報がすぐに削除されるようにアプリケーションで確認する必要がある場合など、特定の BLOB コンテナーに対して \"論理的な削除\" を選択的に無効にすることを検討してください。",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "コンテナーの \"論理的な削除\" を無効にする",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "削除前に削除ロックを最初に解除するようにユーザーに強制することで、ストレージ アカウントが誤って削除されないようにします",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "Azure CNI を使用している場合は、最大ポッド数/ノード (既定値は 30) を確認します",
- "waf": "パフォーマンス"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "内部アプリの場合、組織は多くの場合、ファイアウォールで AKS サブネット全体を開きます。これにより、ノードへのネットワーク アクセスも開かれ、場合によってはポッドへのネットワーク アクセスも開かれます (Azure CNI を使用している場合)。LoadBalancer の IP が別のサブネットにある場合は、この IP のみをアプリ クライアントで使用できる必要があります。もう 1 つの理由は、AKS サブネット内の IP アドレスが希少なリソースである場合、その IP アドレスをサービスに使用すると、クラスターの最大スケーラビリティが低下することです。",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
- "severity": "低い",
- "text": "プライベート IP LoadBalancer サービスを使用する場合は、(AKS サブネットではなく) 専用サブネットを使用します",
+ "text": "ストレージ アカウントでのリソース ロックの有効化",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "BLOB の \"訴訟ホールド\" または \"時間ベースの保持\" ポリシーを検討して、BLOB、コンテナー、またはストレージ アカウントを削除できないようにします。「不可能」は実際には「不可能」を意味することに注意してください。ストレージ アカウントに不変の BLOB が含まれる場合、そのストレージ アカウントを \"取り除く\" 唯一の方法は、Azure サブスクリプションを取り消すことです。",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "それに応じて、サービスの IP アドレス範囲のサイズを設定します (クラスターのスケーラビリティが制限されます)。",
- "waf": "確実"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
- "severity": "低い",
- "text": "必要に応じて、独自のCNIプラグインを追加します",
+ "text": "不変の BLOB を検討する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
- "severity": "低い",
- "text": "必要に応じて、AKS でノードごとにパブリック IP を構成する",
- "waf": "パフォーマンス"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
- "severity": "中程度",
- "text": "イングレス コントローラーを使用して、LoadBalancer タイプのサービスで公開する代わりに、Web ベースのアプリを公開します",
- "waf": "確実"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
- "severity": "低い",
- "text": "エグレス トラフィックをスケーリングするために Azure NAT Gateway を outboundType として使用する",
- "waf": "確実"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
- "severity": "中程度",
- "text": "Azure CNI IP の枯渇を回避するために IP の動的割り当てを使用する",
- "waf": "確実"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ストレージ アカウントへの保護されていない HTTP/80 アクセスを無効にして、すべてのデータ転送が暗号化され、整合性が保護され、サーバーが認証されるようにすることを検討してください。",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "HTTPS を要求する (つまり、ストレージ アカウントのポート 80 を無効にする)",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ストレージ アカウントでカスタム ドメイン (ホスト名) を構成する場合は、TLS/HTTPS が必要かどうかを確認します。その場合は、ストレージ アカウントの前に Azure CDN を配置する必要があります。",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "セキュリティ要件で義務付けられている場合は、AzFW/NVA を使用してエグレス トラフィックをフィルター処理します",
+ "text": "HTTPS を適用する (HTTP を無効にする) 場合は、ストレージ アカウントにカスタム ドメイン (CNAME) を使用していないことを確認します。",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "クライアントが SAS トークンを使用して BLOB データにアクセスするときに HTTPS を要求すると、資格情報が失われるリスクを最小限に抑えることができます。",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "パブリック API エンドポイントを使用している場合は、アクセスできる IP アドレスを制限します",
+ "text": "Shared Access Signature (SAS) トークンを HTTPS 接続のみに制限する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "AAD トークンは、可能な限り、共有アクセス署名よりも優先する必要があります",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "要件で必要な場合は、プライベート クラスターを使用します",
+ "text": "BLOB アクセスに Azure Active Directory (Azure AD) トークンを使用する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ユーザー、グループ、またはアプリケーションにロールを割り当てる場合は、タスクの実行に必要なアクセス許可のみをセキュリティ プリンシパルに付与します。リソースへのアクセスを制限することで、意図しないデータの誤用と悪意のあるデータの誤用の両方を防ぐことができます。",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "Windows 2019 および 2022 AKS ノードでは、Calico ネットワーク ポリシーを使用できます",
+ "text": "IaM アクセス許可の最小特権",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ユーザー委任 SAS は、Azure Active Directory (Azure AD) 資格情報と、SAS に指定されたアクセス許可によってセキュリティで保護されます。ユーザー委任 SAS は、そのスコープと機能の点でサービス SAS に似ていますが、サービス SAS よりもセキュリティ上の利点があります。",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "Kubernetes ネットワーク ポリシー オプションを有効にする (Calico/Azure)",
+ "text": "SAS を使用する場合は、ストレージ アカウント キー ベースの SAS よりも \"ユーザー委任 SAS\" を優先します。",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ストレージ アカウント キー (\"共有キー\") には、監査機能がほとんどありません。誰がいつキーのコピーを取得したかを監視できますが、キーが複数の人の手に渡ると、使用状況を特定のユーザーに帰属させることは不可能です。AAD 認証のみに依存することで、ストレージへのアクセスをユーザーに結び付けやすくなります。",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "Kubernetesネットワークポリシーを使用してクラスタ内のセキュリティを強化",
+ "text": "ストレージ アカウント キーを無効にして、AAD アクセス (およびユーザー委任 SAS) のみがサポートされるようにすることを検討してください。",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "アクティビティ ログ データを使用して、ストレージ アカウントのセキュリティ (ストレージ アカウント キー、アクセス ポリシーなど) が \"いつ、誰が、何を、\"どのように\" 表示または変更されているかを特定します。",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
"severity": "高い",
- "text": "Web ワークロード (UI または API) に WAF を使用するUse a WAF for a web workloads (UI or API)",
+ "text": "Azure Monitor を使用して、ストレージ アカウントに対するコントロール プレーン操作を監査することを検討してください",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "キーの有効期限ポリシーを使用すると、アカウントアクセスキーのローテーションのリマインダーを設定できます。リマインダーは、指定した間隔が経過し、キーがまだローテーションされていない場合に表示されます。",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "AKS Virtual Network で DDoS Standard を使用するUse DDoS Standard in the AKS Virtual Network",
+ "text": "ストレージ アカウント キーを使用する場合は、\"キーの有効期限ポリシー\" を有効にすることを検討してください",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
- "severity": "低い",
- "text": "必要に応じて、会社の HTTP プロキシを追加します",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS 有効期限ポリシーでは、SAS が有効である推奨間隔を指定します。SAS 有効期限ポリシーは、サービス SAS またはアカウント SAS に適用されます。ユーザーがサービス SAS またはアカウント SAS を、推奨間隔よりも長い有効期間で生成すると、警告が表示されます。",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SAS 有効期限ポリシーの構成を検討する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "保存されているアクセス ポリシーを使用すると、ストレージ アカウント キーを再生成することなく、サービス SAS のアクセス許可を取り消すことができます。",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
"severity": "中程度",
- "text": "高度なマイクロサービス通信管理にサービスメッシュの使用を検討する",
+ "text": "保存されているアクセス ポリシーに SAS をリンクすることを検討する",
"waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
- "severity": "高い",
- "text": "最も重要なメトリックに関するアラートを構成します (推奨事項については、「Container Insights」を参照してください)",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "チェックインされた接続文字列とストレージ アカウント キーを検出するようにアプリケーションのソース コード リポジトリを構成することを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "理想的には、アプリケーションでマネージド ID を使用して Azure Storage に対する認証を行う必要があります。それが不可能な場合は、ストレージ資格情報 (接続文字列、ストレージ アカウント キー、SAS、サービス プリンシパル資格情報) を Azure KeyVault または同等のサービスに用意することを検討してください。",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "接続文字列を Azure KeyVault に格納することを検討する (マネージド ID が不可能なシナリオの場合)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "アドホック SAS サービス SAS またはアカウント SAS で、有効期限が近づいています。このように、SAS が侵害された場合でも、有効期間は短時間です。この方法は、保存されているアクセス ポリシーを参照できない場合に特に重要です。また、有効期限が近いと、BLOB にアップロードできる時間が制限されるため、BLOB に書き込めるデータの量も制限されます。",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "アドホックSASの有効期間を短くする",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS を作成するときは、できるだけ具体的かつ制限的にしてください。1 つのリソースと操作には、より広範なアクセスを提供する SAS よりも SAS を優先します。",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SAS に狭いスコープを適用する",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS には、SAS を使用してリソースを要求する権限をクライアント IP アドレスまたはアドレス範囲に与えるパラメーターを含めることができます。",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "可能な限り、SAS のスコープを特定のクライアント IP アドレスに設定することを検討してください",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS は、クライアントがアップロードするデータの量を制限できません。時間の経過に伴うストレージ容量の価格モデルを考えると、クライアントが悪意を持って大きなコンテンツをアップロードしたかどうかを検証することは理にかなっているかもしれません。",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "低い",
+ "text": "クライアントが SAS を使用してファイルをアップロードした後、アップロードされたデータを確認することを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "\"ローカル ユーザー アカウント\" を使用して SFTP 経由で BLOB ストレージにアクセスする場合、\"通常の\" RBAC 制御は適用されません。NFS または REST 経由の BLOB アクセスは、SFTP アクセスよりも制限が厳しい場合があります。残念ながら、2023 年初頭の時点で、SFTP エンドポイントで現在サポートされている ID 管理の形式はローカル ユーザーだけです",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "SFTP: SFTPアクセスの「ローカルユーザー」の数を制限し、時間の経過とともにアクセスが必要かどうかを監査します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "SFTP: SFTP エンドポイントは、POSIX ライクな ACL をサポートしていません。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "ストレージは、CORS (Cross-Origin Resource Sharing)、つまり、異なるドメインの Web アプリが同一生成元ポリシーを緩めることを可能にする HTTP 機能をサポートしています。CORS を有効にする場合は、CorsRules を最小の特権に保ちます。",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "過度に広範な CORS ポリシーを避ける",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "保存データは常にサーバー側で暗号化され、さらにクライアント側でも暗号化される場合があります。サーバー側の暗号化は、プラットフォーム マネージド キー (既定) またはカスタマー マネージド キーを使用して行われる場合があります。クライアント側の暗号化は、クライアントが BLOB ごとに暗号化/暗号化解除キーを Azure Storage に提供するか、クライアント側で暗号化を完全に処理することによって行われます。そのため、機密性の保証を Azure Storage にまったく依存しません。",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "保存データの暗号化方法を決定します。データのスレッド モデルを理解します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "どのプラットフォーム暗号化を使用するか、または使用するかを決定します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "中程度",
+ "text": "クライアント側の暗号化を使用するかどうかを決定します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Resource Graph エクスプローラー (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) を利用して、匿名 BLOB アクセスを許可するストレージ アカウントを検索します。",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "高い",
+ "text": "パブリック BLOB アクセスが必要かどうか、または特定のストレージ アカウントに対して無効にできるかどうかを検討します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "Azure Spring Apps では、アプリごとに 2 つのデプロイが許可され、そのうちの 1 つだけが運用トラフィックを受信します。ブルーグリーンデプロイ戦略により、ダウンタイムをゼロにすることができます。ブルー グリーン デプロイは、Standard レベルと Enterprise レベルでのみ使用できます。CI/CD と ADO/GitHub Actions を使用してデプロイを自動化できます",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "Azure Spring Apps インスタンスは、アプリケーション用に複数のリージョンに作成でき、トラフィックは Traffic Manager/Front Door によってルーティングできます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "サポートされているリージョンでは、Azure Spring Apps をゾーン冗長としてデプロイできるため、インスタンスは可用性ゾーン間で自動的に分散されます。この機能は、Standard レベルと Enterprise レベルでのみ使用できます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "アプリに複数のアプリ インスタンスを使用する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "Azure Spring Apps をログ、メトリック、トレースで監視します。ASA を Application Insights と統合し、障害を追跡し、ブックを作成します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "Spring Cloud Gateway で自動スケーリングを設定する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
+ "severity": "低い",
+ "text": "Standard 従量課金プランと専用プランのアプリの自動スケーリングを有効にします。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
+ "severity": "中程度",
+ "text": "ミッション クリティカルなアプリの Spring Boot の商用サポートには、Enterprise プランを使用します。他のレベルでは、OSS のサポートを受けることができます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "高い",
+ "text": "Key Vault のベスト プラクティス (分離の推奨事項、アクセス制御、データ保護、バックアップ、ログ記録など) について理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "text": "Key Vault はマネージド サービスであり、Microsoft はリージョン内およびリージョン間のフェールオーバーを処理します。Key Vault の可用性と冗長性について理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "text": "キー コンテナーの内容は、リージョン内と少なくとも 150 マイル離れたセカンダリ リージョンにレプリケートされますが、キーとシークレットの高い持続性を維持するために、同じ地域内でレプリケートされます。Key Vault のデータ レプリケーションについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "text": "フェールオーバー中は、アクセス ポリシーまたはファイアウォールの構成と設定を変更することはできません。キー コンテナーは、フェールオーバー中は読み取り専用モードになります。Key Vault のフェールオーバー ガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "text": "シークレット、キー、証明書などのキー コンテナー オブジェクトをバックアップすると、バックアップ操作によってオブジェクトが暗号化された BLOB としてダウンロードされます。この BLOB は、Azure の外部で暗号化を解除できません。この BLOB から使用可能なデータを取得するには、BLOB を同じ Azure サブスクリプションと Azure 地域内のキー コンテナーに復元する必要があります。Key Vault のバックアップと復元のガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "高い",
+ "text": "シークレットの偶発的または悪意のある削除に対する保護が必要な場合は、キー コンテナーで論理的な削除と消去保護機能を構成します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "低い",
+ "text": "Key Vault の論理的に削除されたリソースは、90 暦日の一定期間保持されます。Key Vault の論理的な削除のガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低い",
+ "text": "Key Vault のバックアップの制限事項を理解します。Key Vault では、キー、シークレット、または証明書オブジェクトの過去のバージョンを 500 個以上バックアップする機能はサポートされていません。キー、シークレット、または証明書オブジェクトをバックアップしようとすると、エラーが発生する可能性があります。以前のバージョンのキー、シークレット、または証明書を削除することはできません。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低い",
+ "text": "現在、Key Vault では 1 回の操作でキー コンテナー全体をバックアップする方法は提供されておらず、キー、シークレット、証明書を個別にバックアップする必要があります。Key Vault のバックアップと復元のガイダンスについて理解しておいてください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "text": "データの損失を防ぐために、暗号化にキーを使用する場合は、パージ保護をお勧めします。消去保護はオプションの Key Vault の動作であり、既定では有効になっていません。消去保護は、論理的な削除が有効になった場合にのみ有効にできます。CLI、PowerShell、またはポータルを使用してオンにすることができます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "中程度",
+ "text": "RBAC は、キー コンテナーへのアクセスを制御するために推奨されます。Key Vault のアクセス制御ガイダンスについて理解しておいてください。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus Premium は、保存データの暗号化を提供します。独自のキーを使用する場合、データは引き続き Microsoft マネージド キーを使用して暗号化されますが、さらに Microsoft マネージド キーはカスタマー マネージド キーを使用して暗号化されます。",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "低い",
+ "text": "必要に応じて、保存データの暗号化でカスタマー マネージド キー オプションを使用する",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "クライアント アプリケーションと Azure Service Bus 名前空間間の通信は、トランスポート層セキュリティ (TLS) を使用して暗号化されます。Azure Service Bus 名前空間を使用すると、クライアントは TLS 1.0 以上でデータを送受信できます。より厳格なセキュリティ対策を適用するために、クライアントが新しいバージョンの TLS を使用してデータを送受信することを要求するように Service Bus 名前空間を構成できます。",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "text": "要求に対して最低限必要なバージョンの Transport Layer Security (TLS) を適用する",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Service Bus 名前空間を作成すると、名前空間に対して RootManageSharedAccessKey という名前の SAS ルールが自動的に作成されます。このポリシーには、名前空間全体に対する Manage アクセス許可があります。このルールは管理ルート アカウントのように扱い、アプリケーションで使用しないことをお勧めします。 RBAC を使用した認証プロバイダーとして AAD を使用することをお勧めします。",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "text": "必要のないときに root アカウントを使用することは避けてください",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure App Service アプリケーション内、または Azure リソースのサポートに対して有効なマネージド エンティティを持つ仮想マシンで実行されている Service Bus クライアント アプリは、SAS のルールとキー、またはその他のアクセス トークンを処理する必要はありません。クライアント アプリに必要なのは、Service Bus メッセージング名前空間のエンドポイント アドレスのみです。",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "text": "可能な場合は、アプリケーションでマネージド ID を使用して Azure Service Bus に対する認証を行う必要があります。そうでない場合は、ストレージ資格情報 (SAS、サービス プリンシパル資格情報) を Azure Key Vault または同等のサービスに持つことを検討してください",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus のアクセス許可は、キュー、トピック、サブスクリプションなどの個々のリソース レベルにスコープを設定でき、またそうする必要があります。",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "高い",
+ "text": "最小特権データ プレーン RBAC を使用する",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus リソース ログには、操作ログ、仮想ネットワーク、IP フィルタリング ログが含まれます。ランタイム監査ログは、Service Bus でのさまざまなデータ プレーン アクセス操作 (メッセージの送受信など) の集計された診断情報をキャプチャします。",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "text": "セキュリティ調査のログ記録を有効にします。Azure Monitor を使用してリソース ログとランタイム監査ログをトレースする (現在は Premium レベルでのみ使用できます)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus は、既定ではパブリック IP アドレスを持ち、インターネットからアクセスできます。プライベート エンドポイントを使用すると、仮想ネットワークと Azure Service Bus の間のトラフィックは、Microsoft のバックボーン ネットワークを経由します。それに加えて、パブリックエンドポイントが使用されていない場合は無効にする必要があります。",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "text": "プライベート エンドポイントを使用して Azure Service Bus にアクセスし、該当する場合はパブリック ネットワーク アクセスを無効にすることを検討してください。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "IP ファイアウォールを使用すると、パブリック エンドポイントを IPv4 アドレスのセットのみ、または CIDR (Classless Inter-Domain Routing) 表記の IPv4 アドレス範囲のみにさらに制限できます。",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "中程度",
+ "text": "特定の IP アドレスまたは範囲からのみ Azure Service Bus 名前空間へのアクセスを許可することを検討してください",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
+ "severity": "高い",
+ "text": "Availability Zones (リージョンで適用可能な場合) を活用する (これは自動的に有効になります)",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
+ "severity": "中程度",
+ "text": "Microsoft が開始するフェールオーバーに注意してください。これらは、まれに、影響を受けるリージョンから対応する geo ペア リージョンにすべての IoT ハブをフェールオーバーするために Microsoft によって実行されます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
+ "severity": "高い",
+ "text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
+ "severity": "高い",
+ "text": "手動フェールオーバーをトリガーする方法を学習します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
+ "severity": "高い",
+ "text": "フェールオーバー後にフェールバックする方法を学習します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door でカスタマー マネージド TLS 証明書を使用する場合は、\"最新\" の証明書バージョンを使用します。証明書の手動更新による停止のリスクを軽減します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door と WAF ポリシーを使用して、複数の Azure リージョンにまたがるグローバル HTTP/S アプリを提供し、保護します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Front Door と Application Gateway を使用して HTTP/S アプリを保護する場合は、Front Door で WAF ポリシーを使用します。Application Gateway をロックダウンして、Front Door からのトラフィックのみを受信します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Front Door の WAF ポリシーを \"防止\" モードでデプロイし、Web アプリケーション ファイアウォールがトラフィックを許可または拒否するための適切なアクションを実行するようにします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Traffic Manager を Front Door の後ろに配置しないでください。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door と配信元で同じドメイン名を使用します。ホスト名が一致しないと、微妙なバグが発生する可能性があります。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低い",
+ "text": "Azure Front Door の配信元グループに配信元が 1 つしかない場合は、正常性プローブを無効にします。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door の適切な正常性プローブ エンドポイントを選択します。アプリケーションのすべての依存関係をチェックする正常性エンドポイントの構築を検討してください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "低い",
+ "text": "Azure Front Door で HEAD 正常性プローブを使用して、Front Door がアプリケーションに送信するトラフィックを減らします。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door でマネージド TLS 証明書を使用します。運用コストと、証明書の更新による停止のリスクを軽減します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door WAF 構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door でエンド ツー エンド TLS を使用します。クライアントから Front Door への接続、および Front Door から配信元への接続には TLS を使用します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door で HTTP から HTTPS へのリダイレクトを使用します。古いクライアントを自動的に HTTPS リクエストにリダイレクトすることで、クライアントをサポートします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door WAF を有効にします。さまざまな攻撃からアプリケーションを保護します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "ワークロードに合わせて Azure Front Door WAF を調整するには、検出モードで WAF を構成して誤検知の検出を減らして修正します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door WAF ポリシーで有効になっている要求本文の検査機能を有効にします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door WAF の既定のルール セットを有効にします。デフォルトのルールセットは、一般的な攻撃を検出してブロックします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "Azure Front Door WAF ボット保護ルール セットを有効にします。ボット ルールは、良いボットと悪いボットを検出します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "最新の Azure Front Door WAF ルール セット バージョンを使用します。ルールセットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door WAF にレート制限を追加します。レート制限は、クライアントが誤ってまたは意図的に短時間に大量のトラフィックを送信するのをブロックします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door WAF のレート制限には高いしきい値を使用します。レート制限のしきい値を高くすると、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多くのリクエストに対する保護を提供します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "低い",
+ "text": "すべての地理的地域からのトラフィックを想定していない場合は、geo フィルタを使用して、想定外の国からのトラフィックをブロックします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door WAF を使用してトラフィックを geo フィルタリングする場合は、不明な (ZZ) 場所を指定します。IP アドレスを地理的に一致できない場合に、正当な要求を誤ってブロックしないようにします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "ログとメトリックをキャプチャするには、診断設定をオンにします。リソース アクティビティ ログ、アクセス ログ、正常性プローブ ログ、WAF ログを含めます。アラートを設定します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Azure Front Door WAF ログを Microsoft Sentinel に送信します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "デプロイ戦略をサポートするルーティング方法を選択します。設定された重み係数に基づいてトラフィックを分散する加重方式は、アクティブ/アクティブモデルをサポートします。プライマリ リージョンがすべてのトラフィックを受信し、バックアップとしてセカンダリ リージョンにトラフィックを送信するように設定する優先度ベースの値は、アクティブ/パッシブ モデルをサポートします。上記の方法とレイテンシを組み合わせて、レイテンシが最も低いオリジンがトラフィックを受信するようにします。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "1 つ以上のバックエンド プールに複数の配信元を持つことで冗長性をサポートします。アプリケーションの冗長インスタンスを常に用意し、各インスタンスがエンドポイントまたはオリジンを公開していることを確認します。これらの配信元は、1 つ以上のバックエンド プールに配置できます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "バックエンドへの要求の転送にタイムアウトを設定します。エンドポイントのニーズに応じてタイムアウト設定を調整します。そうしないと、配信元が応答を送信する前に Azure Front Door が接続を閉じる可能性があります。また、すべての配信元のタイムアウトが短い場合は、Azure Front Door の既定のタイムアウトを下げることもできます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "アプリケーションにセッション アフィニティが必要かどうかを判断します。高い信頼性要件がある場合は、セッション アフィニティを無効にすることをお勧めします。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "ホストヘッダーをバックエンドに送信します。バックエンド サービスは、そのホストからのトラフィックのみを受け入れるルールを作成できるように、ホスト名を認識する必要があります。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "キャッシュをサポートするエンドポイントにはキャッシュを使用します。",
+ "waf": "費用"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低い",
+ "text": "単一のバックエンド・プールのヘルス・チェックを無効にします。Azure Front Door の配信元グループに配信元が 1 つしか構成されていない場合、これらの呼び出しは不要です。これは、エンドポイントに複数のオリジンを持てない場合にのみ推奨されます。",
+ "waf": "費用"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "セキュリティ レポートを活用するには Premium レベルを使用することをお勧めしますが、Standard Azure Front Door プロファイルでは、組み込みの分析/レポートでトラフィック レポートのみが提供されます。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "可能な場合は、ワイルドカード TLS 証明書を使用します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "キャッシュ用にアプリケーションのクエリ文字列を最適化します。純粋に静的なコンテンツの場合は、クエリ文字列を無視して、キャッシュを最大限に活用します。アプリケーションでクエリ文字列を使用する場合は、それらをキャッシュキーに含めることを検討してください。キャッシュ キーにクエリ文字列を含めると、Azure Front Door は、構成に基づいてキャッシュされた応答またはその他の応答を提供できます。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "ダウンロード可能なコンテンツにアクセスするときは、ファイル圧縮を使用します。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "現在クラシック Azure Front Door を使用している場合は、クラシック Azure Front Door は 2027 年 3 月までに非推奨になるため、Standard SKU または Premium SKU への移行を検討してください。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "ミッション クリティカルな高可用性シナリオには、Traffic Manager の負荷分散 Azure Front Door とサード パーティの CDN プロバイダー CDN プロファイルの使用を検討してください。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "高い",
+ "text": "配信元を App Services として Front Door を使用する場合は、アクセス制限を使用して Azure Front Door 経由でのみアプリ サービスへのトラフィックをロックダウンすることを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "グローバルレベルでのエラー処理ポリシーの実装",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "すべての API ポリシーに要素が含まれていることを確認します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "ポリシーフラグメントを使用して、複数の API で同じポリシー定義を繰り返さないようにする",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "API の収益化を計画している場合は、「収益化のサポート」の記事でおすすめの方法をご確認ください",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "診断設定を有効にしてログを Azure Monitor にエクスポートする",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "Application Insights を有効にして、より詳細なテレメトリを実現する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "最も重要なメトリックに関するアラートを構成する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "カスタム SSL 証明書が Azure Key Vault に格納され、安全にアクセスして更新できるようにする",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "Azure AD を使用して API (データ プレーン) への受信要求を保護する",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "Microsoft Entra ID を使用して開発者ポータルでユーザーを認証する",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "適切なグループを作成して、製品の可視性を制御します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "バックエンド機能を使用して、冗長な API バックエンド構成を排除します",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "名前付き値を使用して、ポリシーで使用できる共通の値を格納します",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "DR の場合は、99.99% の SLA で 2 つ以上のリージョンにスケーリングされたデプロイで Premium レベルを活用します",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "少なくとも 1 つのユニットを 2 つ以上の可用性ゾーンにデプロイして、SLA を 99.99% に向上させる",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "自動バックアップ・ルーチンがあることを確認する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "ポリシーを使用して、フェイルオーバー・バックエンドURLとキャッシュを追加し、コールの失敗を減らします。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
+ "severity": "低い",
+ "text": "高パフォーマンス レベルでログを記録する必要がある場合は、Event Hubs ポリシーを検討してください",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "調整ポリシーを適用して、毎秒の要求数を制御する",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "負荷が増加したときにインスタンスの数をスケールアウトするように自動スケーリングを構成する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "セルフホステッド ゲートウェイをデプロイする場所は、バックエンド API に近いリージョンが Azure にありません。",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "運用環境のワークロードには Premium レベルを使用します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "複数リージョン モデルでは、ポリシーを使用して、可用性または待機時間に基づいてリージョン バックエンドに要求をルーティングします。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "APIM の制限に注意する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "セルフホステッド ゲートウェイのデプロイに回復性があることを確認します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "複数リージョンのデプロイに APIM の前で Azure Front Door を使用するUse Azure Front Door in front of APIM for multi-region deployment",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "仮想ネットワーク (VNet) 内にサービスをデプロイするDeploy the service within a Virtual Network (VNet)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "ネットワーク セキュリティ グループ (NSG) をサブネットにデプロイして、APIM との間のトラフィックを制限または監視します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "プライベート エンドポイントをデプロイして、APIM が VNet にデプロイされていない場合に受信トラフィックをフィルター処理します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "パブリックネットワークアクセスの無効化",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "PowerShell 自動化スクリプトで管理を簡素化",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "Infrastructure-as-code を使用して APIM を構成します。Cloud Adaption Framework APIM Landing Zone Accelerator から DevOps のベスト プラクティスを確認する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "Visual Studio Code APIM 拡張機能の使用を促進して API 開発を迅速化する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "DevOpsとCI/CDをワークフローに実装する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "クライアント証明書認証を使用した API の保護",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "クライアント証明書認証を使用したバックエンド サービスのセキュリティ保護",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "「OWASP API Security Top 10 の脅威を軽減するための推奨事項」の記事を確認し、API に適用できるものを確認します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "承認機能を使用して、バックエンド API の OAuth 2.0 トークンの管理を簡素化します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "転送中の情報を暗号化する場合は、最新のTLSバージョンを使用します。可能であれば、古くて不要なプロトコルと暗号を無効にします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "シークレット (名前付き値) が Azure Key Vault に格納され、安全にアクセスして更新できるようにする",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
+ "service": "APIM",
+ "severity": "中程度",
+ "text": "可能な限りマネージド ID を使用して、他の Azure リソースに対する認証を行う",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
+ "service": "APIM",
+ "severity": "高い",
+ "text": "Web アプリケーション ファイアウォール (WAF) を使用するには、APIM の前に Application Gateway をデプロイします",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
+ "service": "Bot service",
+ "severity": "中程度",
+ "text": "Azure Bot Service の信頼性サポートの推奨事項に従う",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
+ "service": "Bot service",
+ "severity": "中程度",
+ "text": "ローカル データ所在地とリージョン コンプライアンスを備えたボットのデプロイ",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
+ "service": "Bot service",
+ "severity": "中程度",
+ "text": "Azure Bot Service は、グローバル サービスとリージョン サービスの両方に対してアクティブ/アクティブ モードで実行されます。停止が発生した場合、エラーを検出したり、サービスを管理したりする必要はありません。Azure Bot Service は、複数リージョンの地理的アーキテクチャで自動フェールオーバーと自動復旧を自動的に実行します。EU ボット リージョン サービスの場合、Azure Bot Service は、冗長性を確保するために、アクティブ/アクティブ レプリケーションを備えたヨーロッパ内の 2 つの完全なリージョンを提供します。グローバル ボット サービスの場合、使用可能なすべてのリージョン/地域をグローバル フットプリントとして提供できます。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
+ "severity": "中程度",
+ "text": "フレキシブル サーバーの活用",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
+ "severity": "高い",
+ "text": "Availability Zones (地域的に適用可能な場合) を活用する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
+ "severity": "中程度",
+ "text": "リージョン間の DR シナリオでのデータイン レプリケーションの活用",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
+ "severity": "中程度",
+ "text": "有効期間の長い取り消し可能なトークンを使用し、トークンをキャッシュし、Microsoft ID ライブラリを使用してサイレントに取得します",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
+ "severity": "中程度",
+ "text": "サインイン ユーザー フローがバックアップされ、回復性があることを確認します。ユーザーのサインインに使用するコードがバックアップされ、回復可能であることを確認します。外部プロセスとの回復力のあるインターフェース",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
+ "severity": "中程度",
+ "text": "カスタムブランドアセットはCDNでホストする必要がある",
+ "waf": "パフォーマンス"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
+ "severity": "低い",
+ "text": "複数のIDプロバイダーを持っている(つまり、Microsoft、Google、Facebookアカウントでログインする)",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "中程度",
+ "text": "VM レベルでの高可用性に関する VM ルールに従う (Premium ディスク、リージョン内の 2 つ以上、異なる可用性ゾーン内)",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "中程度",
+ "text": "複製しないでください!レプリケーションにより、ディレクトリ同期に関する問題が発生する可能性があります",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "中程度",
+ "text": "マルチリージョンのアクティブ/アクティブを持つ",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "中程度",
+ "text": "Azure AD Domain Service スタンプを追加のリージョンと場所に追加する",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "中程度",
+ "text": "DR にレプリカ セットを使用する",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Application Gateway v2 SKU を使用していることを確認する",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
+ "severity": "中程度",
+ "text": "Azure Load Balancers に Standard SKU を使用していることを確認します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
+ "severity": "中程度",
+ "text": "Load Balancer フロントエンドの IP アドレスがゾーン冗長であることを確認します (ゾーン フロントエンドが必要な場合を除く)。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Application Gateways v2 は、IP プレフィックスが /24 以上のサブネットにデプロイする必要があります",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "description": "リバースプロキシの管理全般、特にWAFの管理は、ネットワーキングよりもアプリケーションに近いため、アプリと同じサブスクリプションに属します。Application Gateway と WAF を接続サブスクリプションに一元化することは、1 つのチームによって管理されている場合は問題ない可能性があります。",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "ランディング ゾーン仮想ネットワーク内の受信 HTTP(S) 接続のプロキシに使用される Azure Application Gateway v2 またはパートナー NVA と、それらがセキュリティ保護しているアプリをデプロイします。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して、DDoS ネットワークまたは IP 保護プランを使用します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "自動スケールは、最小インスタンス数が 2 になるように構成します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Application Gateway を複数の可用性ゾーンにデプロイする",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
+ "severity": "中程度",
+ "text": "Front Door と Application Gateway を使用して HTTP/S アプリを保護する場合は、Front Door で WAF ポリシーを使用します。Application Gateway をロックダウンして、Front Door からのトラフィックのみを受信します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "severity": "高い",
+ "text": "Traffic Manager を使用して、HTTP/S 以外のプロトコルにまたがるグローバル アプリを配信します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "確実"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "低い",
+ "text": "ユーザーが内部アプリケーションへのアクセスのみを必要とする場合、Microsoft Entra ID アプリケーション プロキシは Azure Virtual Desktop (AVD) の代替手段として検討されていますか?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "安全"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "中程度",
+ "text": "ネットワーク内の着信接続用に開かれるファイアウォール ポートの数を減らすには、Microsoft Entra ID アプリケーション プロキシを使用して、リモート ユーザーに内部アプリケーションへの安全で認証されたアクセスを提供することを検討してください。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
+ "severity": "高い",
+ "text": "Load Balancer のアウトバウンド規則の代わりに Azure NAT Gateway を使用して SNAT のスケーラビリティを向上させる",
+ "waf": "確実"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "Azure Application Gateway WAF ボット保護ルール セットを有効にします。ボット ルールは、良いボットと悪いボットを検出します。",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "Azure Application Gateway WAF ポリシーで要求本文の検査機能が有効になっているかどうかを確認します。",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "ワークロードの検出モードで Azure Application Gateway WAF を調整します。誤検出を減らします。",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "Application Gateway の WAF ポリシーを \"防止\" モードでデプロイします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Azure Application Gateway WAF にレート制限を追加します。レート制限は、クライアントが誤ってまたは意図的に短時間に大量のトラフィックを送信するのをブロックします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Azure Application Gateway WAF のレート制限には高いしきい値を使用します。レート制限のしきい値を高くすると、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多くのリクエストに対する保護を提供します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
+ "severity": "低い",
+ "text": "すべての地理的地域からのトラフィックを想定していない場合は、geo フィルタを使用して、想定外の国からのトラフィックをブロックします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Azure Application Gateway WAF を使用してトラフィックを geo フィルタリングする場合は、不明な (ZZ) 場所を指定します。IP アドレスを地理的に一致できない場合に、正当な要求を誤ってブロックしないようにします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "最新の Azure Application Gateway WAF ルール セット バージョンを使用します。ルールセットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "診断設定を追加して、Azure Application Gateway WAF ログを保存します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Azure Application Gateway WAF ログを Microsoft Sentinel に送信します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Azure Application Gateway WAF 構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "従来のWAF構成のかわりにWAFポリシーを使用します。",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "バックエンドの受信トラフィックをフィルター処理して、Application Gateway サブネット (NSG など) からの接続のみを受け入れるようにします。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "バックエンド サーバーへのトラフィックを暗号化する必要があります。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "Web アプリケーション ファイアウォールを使用する必要があります。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "HTTP を HTTPS にリダイレクトする",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "ゲートウェイで管理される Cookie を使用して、ユーザーセッションからのトラフィックを同じサーバーに転送して処理する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
+ "severity": "高い",
+ "text": "計画されたサービス更新中に接続ドレインを有効にして、バックエンド プールの既存のメンバーへの接続が失われないようにします",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
+ "severity": "低い",
+ "text": "カスタムエラーページを作成して、パーソナライズされたユーザーエクスペリエンスを表示する",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "HTTP 要求と応答ヘッダーを編集して、クライアントとサーバー間のルーティングと情報交換を容易にします",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "Front Door を構成して、グローバル Web トラフィックのルーティングと最上位のエンドユーザーのパフォーマンス、および迅速なグローバル フェイルオーバーによる信頼性を最適化する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "トランスポート層の負荷分散を使用する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "1 つのゲートウェイ上の複数の Web アプリケーションのホスト名またはドメイン名に基づいてルーティングを構成する",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
+ "severity": "中程度",
+ "text": "SSL証明書管理を一元化して、バックエンドサーバーファームからの暗号化と復号化のオーバーヘッドを削減します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
+ "severity": "低い",
+ "text": "Application Gateway を使用して WebSocket プロトコルと HTTP/2 プロトコルをネイティブにサポートする",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
- "severity": "低い",
- "text": "Azure Advisor でクラスターの推奨事項を定期的に確認する",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "共鳴可能なAIのためのメタプロンプトガードレールに従う",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
- "severity": "低い",
- "text": "AKS 自動証明書のローテーションを有効にする",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "APIM や AI Central などのソリューションを使用したゲートウェイ パターンを検討して、レート制限、負荷分散、認証、ログ記録を改善します",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "kubernetes のバージョンを定期的に (四半期ごとなど) アップグレードする定期的なプロセスを行うか、AKS 自動アップグレード機能を使用します",
- "waf": "オペレーションズ"
+ "text": "AOAI インスタンスの監視を有効にする",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "ノードイメージのアップグレードを使用していない場合は、Linuxノードのアップグレードにkuredを使用します",
- "waf": "オペレーションズ"
+ "text": "リソースに対して実行されたアクション (サブスクリプション キーの再生成など) によって作成されたアクティビティ ログのエントリや、1 時間に 10 を超えるエラー数などのメトリックしきい値によって作成されたアクティビティ ログのエントリなど、イベントを通知するアラートを作成します",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "クラスタノードイメージを定期的に(毎週など)アップグレードする定期的なプロセスを用意します",
- "waf": "オペレーションズ"
+ "text": "トークンの使用状況を監視して、容量によるサービスの中断を防ぎます",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
- "severity": "低い",
- "text": "アプリケーションまたはクラスター構成を複数のクラスターにデプロイするために gitop を検討してください",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "処理された推論トークン、生成された完了トークンなどのメトリックを観察し、レート制限を監視します",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
"severity": "低い",
- "text": "プライベート クラスターで AKS コマンド呼び出しを使用することを検討する",
- "waf": "オペレーションズ"
+ "text": "診断が十分でない場合は、Azure OpenAI の前で Azure API Management などのゲートウェイを使用して、受信プロンプトと送信応答の両方をログに記録することを検討してください (許可されている場合)",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
- "severity": "低い",
- "text": "計画されたイベントの場合は、ノードの自動ドレインの使用を検討してください",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "コードとしてのインフラストラクチャを使用して、Azure OpenAI Service、モデル デプロイ、およびすべての関連リソースをデプロイします",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "独自のガバナンスプラクティスを開発して、ノードRG(別名「インフラRG」)のオペレーターによって変更が実行されないようにします",
- "waf": "オペレーションズ"
+ "text": "API キーの代わりにマネージド ID で Microsoft Entra 認証を使用する",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
- "severity": "低い",
- "text": "カスタムノードRG(別名「インフラRG」)名を使用",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "入力と正しい答えを持つ既知のゴールデンデータセットを使用して、システムのパフォーマンス/精度を評価します。PromptFlowの機能を評価に活用します。",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "プロビジョニング済みスループットモデルの使用状況の評価",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure AI コンテンツの安全性を確認して実装する",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "トークンと1分あたりのレスポンスに基づいてシステムのスループットを定義および評価し、要件に合わせます",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "非推奨の Kubernetes API を YAML マニフェストで使用しないでください",
- "waf": "オペレーションズ"
+ "text": "トークンサイズ、ストリーミングオプションを制限することにより、システムのレイテンシーを改善します",
+ "waf": "パフォーマンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
- "severity": "低い",
- "text": "Windows ノードのテイント",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "弾力性の要求を見積もり、優先順位に基づいて同期要求とバッチ要求の分離を決定します。優先度が高い場合は同期アプローチを使用し、優先度が低い場合はキューを使用した非同期バッチ処理が推奨されます",
+ "waf": "パフォーマンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
- "severity": "低い",
- "text": "Windows コンテナーのパッチ レベルをホストのパッチ レベルと同期させる",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "消費者からの推定需要に基づくトークン消費要件のベンチマーク。プロビジョニングされたスループット ユニットのデプロイを使用している場合は、Azure OpenAI ベンチマーク ツールを使用してスループットを検証することを検討してください",
+ "waf": "パフォーマンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "クラスタレベルでの診断設定経由",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
- "severity": "低い",
- "text": "マスター ログ (API ログ) を Azure Monitor または任意のログ管理ソリューションに送信する",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "プロビジョニングされたスループットユニット (PTU) を使用している場合は、オーバーフローリクエストに対して Token-Per Minute (TPM) デプロイメントをデプロイすることを検討してください。ゲートウェイを使用して、PTU の制限に達したときに要求を TPM デプロイにルーティングします。",
+ "waf": "パフォーマンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
- "severity": "低い",
- "text": "必要に応じて、nodePool スナップショットを使用します",
- "waf": "費用"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "適切なタスクに適したモデルを選択してください。速度、応答の品質、出力の複雑さの間で適切なトレードオフを持つモデルを選択する",
+ "waf": "パフォーマンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "微調整によってモデルのパフォーマンスが向上したかどうかを知るための微調整を行わずに、パフォーマンスのベースラインを設定する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"severity": "低い",
- "text": "時間的制約のないワークロードのスポット ノード プールを検討する",
- "waf": "オペレーションズ"
+ "text": "複数のOAIインスタンスを複数のリージョンにデプロイする",
+ "waf": "確実"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "APIM のようなゲートウェイ パターンを使用した再試行とヘルスチェックの実装",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "ワークロードに対してTPMとRPMの適切なクォータがあることを確認します",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "HAIツールキットガイダンスの考慮事項を確認し、それらの相互作用の実践をslutionに適用します",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "ファインチューニングが採用されている場合は、リージョン間で個別の微調整モデルをデプロイします",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "重要なデータを定期的にバックアップおよびレプリケートして、データの損失やシステム障害が発生した場合のデータの可用性と回復性を確保します。Azure のバックアップおよびディザスター リカバリー サービスを活用して、データを保護します。",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure AI Search サービス レベルは、SLA を持つために選択する必要があります",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
"severity": "低い",
- "text": "クイック バーストのために AKS 仮想ノードを検討する",
- "waf": "オペレーションズ"
+ "text": "データと機密性を分類し、埋め込みを生成する前に Microsoft Purview でラベル付けし、生成された埋め込みを同じ感度と分類で処理するようにしてください",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "Container Insights (または Prometheus などの他のツール) を使用してクラスター メトリックを監視する",
- "waf": "オペレーションズ"
+ "text": "SSE/ディスク暗号化(オプションのBYOKを使用)を使用してRAGに使用されるデータを暗号化",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "Container Insights(またはTelegraf/ElasticSearchなどの他のツール)を使用してクラスターログを保存および分析します",
- "waf": "オペレーションズ"
+ "text": "データソース間で転送されるデータ、Retrieval-Augmented Generation(RAG)およびLLM通信に使用されるAI検索にTLSが適用されていることを確認します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "RBAC を使用して、Azure OpenAI サービスへのアクセスを管理します。ユーザーに適切な権限を割り当て、ユーザーの役割と責任に基づいてアクセスを制限します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "ノードの CPU とメモリの使用率を監視する",
- "waf": "オペレーションズ"
+ "text": "データの暗号化、マスキング、または編集技術を実装して、機密データを非表示にしたり、非本番環境で難読化された値に置き換えたり、テストやトラブルシューティングの目的でデータを共有する場合",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure Defender を利用して、セキュリティの脅威を検出して対応し、監視とアラートのメカニズムを設定して、疑わしいアクティビティや侵害を特定します。Azure Sentinel を活用して高度な脅威の検出と対応を実現",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "Azure CNI を使用している場合は、ノードごとに消費されるポッド IP の割合を監視します",
- "waf": "オペレーションズ"
+ "text": "コンプライアンス規制を遵守するためのデータ保持および廃棄ポリシーを確立します。不要になったデータに対して安全な削除方法を実装し、データの保持と廃棄活動の監査証跡を維持します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "OS ディスクの I/O は重要なリソースです。ノード内の OS が I/O で調整されると、予期しない動作が発生し、通常はノードが NotReady と宣言される可能性があります",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Content Safety を使用した Prompt シールドと接地検出の実装",
+ "waf": "オペレーショナルエクセレンス"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "GDPRやHIPAAなどの関連するデータ保護規制への準拠を確保するには、プライバシー制御を実装し、データ処理活動に必要な同意または許可を取得します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "ノード内の OS ディスク キューの深さを監視する",
- "waf": "オペレーションズ"
+ "text": "データセキュリティのベストプラクティス、データの安全な取り扱いの重要性、データ侵害に関連する潜在的なリスクについて、従業員を教育します。データセキュリティプロトコルに熱心に従うように促します。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "運用データを開発データやテストデータから分離します。本番環境では実際の機密データのみを使用し、開発環境やテスト環境では匿名化されたデータや合成データを利用します。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "AzFW/NVA でエグレス フィルター処理を使用しない場合は、標準の ALB によって割り当てられた SNAT ポートを監視します",
- "waf": "オペレーションズ"
+ "text": "データの機密性のレベルが異なる場合は、レベルごとに個別のインデックスを作成することを検討してください。たとえば、一般的なデータ用に 1 つのインデックスを作成し、機密データ用に別のインデックスを作成し、それぞれ異なるアクセス プロトコルで管理することができます",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "AKS クラスターのリソース正常性通知をサブスクライブするSubscribe to resource health notifications for your AKS cluster",
- "waf": "オペレーションズ"
+ "text": "分離をさらに一歩進めて、機密性の高いデータセットをサービスの異なるインスタンスに配置します。各インスタンスは、独自のRBACポリシーのセットで制御できます",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "ポッド仕様で要求と制限を構成する",
- "waf": "オペレーションズ"
+ "text": "機密情報から生成された埋め込みとベクトルは、それ自体が機密性が高いことを認識します。このデータには、ソースマテリアルと同じ保護対策を提供する必要があります",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "中程度",
- "text": "名前空間のリソースクォータを適用する",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "埋め込みとベクトルを持つデータストアに RBAC を適用し、ロールのアクセス要件に基づいてアクセスのスコープを設定します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "サブスクリプションにノードプールをスケールアウトするのに十分なクォータがあることを確認する",
- "waf": "オペレーションズ"
+ "text": "AI サービスのプライベート エンドポイントを構成して、ネットワーク内のサービス アクセスを制限します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
- "severity": "中程度",
- "text": "Cluster Autoscaler を使用する",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure Firewall と UDR を使用して受信と送信のトラフィック制御を厳密に適用し、外部統合ポイントを制限します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
- "severity": "低い",
- "text": "AKS ノード プールのノード構成をカスタマイズする",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "ネットワークのセグメンテーションとアクセス制御を実装して、LLMアプリケーションへのアクセスを許可されたユーザーとシステムのみに制限し、横方向の移動を防ぎます",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "必要に応じてHorizontal Pod Autoscalerを使用します",
- "waf": "パフォーマンス"
+ "text": "LLMLingua や gprtrim などのプロンプト圧縮ツールを使用します",
+ "waf": "コストの最適化"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "ノードが大きくなると、パフォーマンスが向上し、エフェメラル ディスクや高速ネットワークなどの機能が提供されますが、爆発半径が大きくなり、スケーリングの粒度が低下します",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "大きすぎず小さすぎない適切なノードサイズを検討してください",
- "waf": "パフォーマンス"
+ "text": "LLM アプリケーションで使用される API とエンドポイントが、マネージド ID、API キー、OAuth などの認証および承認メカニズムで適切に保護され、不正アクセスを防止します。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
- "severity": "低い",
- "text": "スケーラビリティのために 5,000 を超えるノードが必要な場合は、追加の AKS クラスターの使用を検討してください",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "多要素認証などの強力なエンドユーザー認証メカニズムを適用して、LLMアプリケーションおよび関連するネットワークリソースへの不正アクセスを防止します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
- "severity": "低い",
- "text": "AKS 自動化のために EventGrid イベントをサブスクライブすることを検討する",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "ネットワーク監視ツールを実装して、疑わしいアクティビティや悪意のあるアクティビティのネットワークトラフィックを検出および分析します。ロギングを有効にしてネットワークイベントをキャプチャし、セキュリティインシデントが発生した場合のフォレンジック分析を容易にします",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "セキュリティ監査と侵入テストを実施して、LLMアプリケーションのネットワークインフラストラクチャのネットワークセキュリティの弱点または脆弱性を特定して対処します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
"severity": "低い",
- "text": "AKS クラスターで実行時間の長い操作を行う場合は、イベントの終了を検討してください",
- "waf": "パフォーマンス"
+ "text": "Azure AI Services は、管理を改善するために適切にタグ付けされています",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
"severity": "低い",
- "text": "必要に応じて、AKS ノードに Azure Dedicated Hosts を使用することを検討してください",
- "waf": "パフォーマンス"
+ "text": "Azure AI Service アカウントは、組織の名前付け規則に従います",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "エフェメラル OS ディスクを使用する",
- "waf": "パフォーマンス"
+ "text": "Azure AI サービス リソースの診断ログを有効にする必要がある",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "非エフェメラル ディスクの場合、複数のポッドを実行するには高いパフォーマンスが必要であり、既定の AKS ログ ローテーションしきい値で巨大なログが生成されるため、多くのポッド/ノードを実行する場合は、ノードに高い IOPS とより大きな OS ディスクを使用します",
- "waf": "パフォーマンス"
+ "text": "セキュリティのため、キーアクセス(ローカル認証)を無効にすることをお勧めします。 キーベースのアクセスを無効にすると、Microsoft Entra IDが唯一のアクセス方法になり、最小限の特権原則ときめ細かな制御を維持できます。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
- "severity": "低い",
- "text": "ハイパー パフォーマンス ストレージ オプションの場合は、AKS 上の Ultra Disks を使用します",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure Key Vault を使用して、キーを安全に保存および管理します。LLM アプリケーションのコード内で機密性の高いキーをハードコーディングしたり埋め込んだりすることを避け、マネージド ID を使用して Azure Key Vault から安全に取得します",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
- "severity": "中程度",
- "text": "クラスター内に状態を保持することは避け、外部 (AzStorage、AzSQL、Cosmos など) にデータを格納します",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure Key Vault に格納されているキーを定期的にローテーションして期限切れにすることで、不正アクセスのリスクを最小限に抑えます。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
- "severity": "中程度",
- "text": "AzFiles Standard を使用する場合は、パフォーマンス上の理由から AzFiles Premium や ANF を検討してください",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "tiktokenを使用して、会話モードでのトークン最適化のためのトークンサイズを理解します",
+ "waf": "コストの最適化"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
- "severity": "中程度",
- "text": "Azure ディスクと AZ を使用する場合は、適切なゾーンにストレージをプロビジョニングするために VolumeBindingMode:WaitForFirstConsumer を使用して LRS ディスクのゾーン内にノードプールを配置するか、複数のゾーンにまたがるノードプールに ZRS ディスクを使用することを検討してください",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "安全なコーディング手法に従って、インジェクション攻撃、クロスサイトスクリプティング(XSS)、セキュリティ設定の誤りなどの一般的な脆弱性を防止します",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "中程度",
- "text": "Azure Front Door でカスタマー マネージド TLS 証明書を使用する場合は、\"最新\" の証明書バージョンを使用します。証明書の手動更新によって引き起こされる停止のリスクを軽減",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "LLM ライブラリとその他のシステム コンポーネントを定期的に更新し、パッチを適用するプロセスを設定します",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "Application Gateway v2 SKU を使用していることを確認する",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "Azure OpenAI またはその他の LLM の利用規約、ポリシー、ガイダンス、および許可されたユース ケースを順守する",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "Azure Load Balancer に Standard SKU を使用していることを確認する",
- "waf": "安全"
+ "text": "基本モデルと微調整されたモデルおよびトークンのステップサイズのコストの違いを理解する",
+ "waf": "コストの最適化"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
- "severity": "中程度",
- "text": "Load Balancer フロントエンドの IP アドレスがゾーン冗長であることを確認します (ゾーン フロントエンドが必要な場合を除く)。",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "可能であれば、呼び出しごとのオーバーヘッドを最小限に抑え、全体的なコストを削減できるバッチ要求。バッチサイズを確実に最適化する",
+ "waf": "コストの最適化"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "Application Gateway v2 は、IP プレフィックスが /24 以上のサブネットにデプロイする必要があります",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
+ "text": "モデルの使用状況を監視するコスト追跡システムを設定し、その情報を使用してモデルの選択とプロンプトのサイズを通知します",
+ "waf": "コストの最適化"
},
{
- "checklist": "Azure Application Delivery Networking",
- "description": "リバースプロキシ全般、特にWAFの管理は、ネットワークよりもアプリケーションに近いため、アプリと同じサブスクリプションに属します。Application Gateway と WAF を接続サブスクリプションに一元化することは、1 つのチームによって管理されている場合は問題ない場合があります。",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "ランディング ゾーン仮想ネットワーク内およびそれらがセキュリティで保護しているアプリと共に、受信 HTTP(S) 接続のプロキシに使用される Azure Application Gateway v2 またはパートナーの NVA をデプロイします。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
+ "text": "モデル応答あたりのトークン数に上限を設定します。サイズを最適化して、有効な応答に十分な大きさになるようにします",
+ "waf": "コストの最適化"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "アプリケーション ランディング ゾーン内のすべてのパブリック IP アドレスに対して DDoS ネットワークまたは IP 保護プランを使用します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "信頼性のための AI 検索の設定に関するガイダンスを確認します",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "最小数のインスタンスが 2 つになる自動スケーリングを構成します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "確実"
+ "text": "AI Search Vector ストレージの計画と管理",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "Application Gateway を複数の可用性ゾーンにデプロイする",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "確実"
+ "text": "LLMOpsプラクティスを適用して、GenAIアプリケーションのライフサイクル管理を自動化します",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "高い",
+ "text": "請求モデルの使用状況の評価 - PAYG と PTU の比較",
+ "waf": "コストの最適化"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "Azure Front Door と WAF ポリシーを使用して、複数の Azure リージョンにまたがるグローバル HTTP/S アプリを配信し、保護します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "モデルバージョンを切り替える際のプロンプトとアプリケーションの品質を評価する",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "Front Door と Application Gateway を使用して HTTP/S アプリを保護する場合は、Front Door で WAF ポリシーを使用します。Application Gateway をロックダウンして、Front Door からのトラフィックのみを受信します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "GenAIアプリを評価、監視、改良して、接地性、関連性、精度、一貫性、流暢さなどの機能を確認します。",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
- "severity": "高い",
- "text": "Traffic Manager を使用して、HTTP/S 以外のプロトコルにまたがるグローバル アプリを配信します。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "確実"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "さまざまな検索パラメーターに基づいて Azure AI Search の結果を評価する",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "severity": "低い",
- "text": "ユーザーが内部アプリケーションへのアクセスのみを必要とする場合、Microsoft Entra ID アプリケーション プロキシは Azure Virtual Desktop (AVD) の代替として検討されていますか?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "精度を向上させる方法としてモデルの微調整を検討するのは、データを使用してプロンプトエンジニアリングやRAGなどの他の基本的なアプローチを試した場合のみです",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
"severity": "中程度",
- "text": "ネットワーク内の着信接続用に開かれているファイアウォール ポートの数を減らすには、Microsoft Entra ID アプリケーション プロキシを使用して、リモート ユーザーに内部アプリケーションへの安全で認証されたアクセスを提供することを検討してください。",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "安全"
+ "text": "プロンプトエンジニアリング手法を使用して、LLM応答の精度を向上させる",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "高い",
- "text": "Front Door の WAF ポリシーを \"防止\" モードでデプロイします。",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "GenAIアプリケーションをレッドチーム化",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "高い",
- "text": "Azure Traffic Manager と Azure Front Door の組み合わせは避けてください。",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "エンドユーザーにLLM応答のスコアリングオプションを提供し、これらのスコアを追跡します。",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "高い",
- "text": "Azure Front Door と配信元で同じドメイン名を使用します。ホスト名が一致しないと、微妙なバグが発生する可能性があります。",
- "waf": "安全"
+ "text": "クォータ管理の実践を検討する",
+ "waf": "コストの最適化"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "低い",
- "text": "Azure Front Door 配信元グループに配信元が 1 つしかない場合は、正常性プローブを無効にします。",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "中程度",
+ "text": "APIM ベースのゲートウェイなどのロード バランサー ソリューションを使用して、サービスやリージョン間で負荷と容量を分散します",
+ "waf": "オペレーショナルエクセレンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "中程度",
- "text": "Azure Front Door に適した正常性プローブ エンドポイントを選択します。アプリケーションのすべての依存関係をチェックする正常性エンドポイントを構築することを検討してください。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "AKS Windows ワークロードで必要な場合は、HostProcess コンテナーを使用できます",
"waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
"severity": "低い",
- "text": "Azure Front Door で HEAD 正常性プローブを使用して、Front Door がアプリケーションに送信するトラフィックを減らします。",
+ "text": "イベント ドリブン ワークロードを実行する場合は KEDA を使用します",
"waf": "パフォーマンス"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "Dapr を使用してマイクロサービス開発を容易にする",
+ "waf": "オペレーションズ"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
"severity": "高い",
- "text": "Load Balancer の送信規則の代わりに Azure NAT Gateway を使用して、SNAT のスケーラビリティを向上させる",
+ "text": "SLA でサポートされる AKS オファリングを使用する",
"waf": "確実"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "ポッドとデプロイ定義でのディスラプション バジェットの使用",
+ "waf": "確実"
+ },
+ {
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
"severity": "高い",
- "text": "Azure Front Door でマネージド TLS 証明書を使用します。運用コストと、証明書の更新による停止のリスクを軽減します。",
- "waf": "オペレーションズ"
+ "text": "プライベート レジストリを使用する場合は、複数のリージョンにイメージを格納するようにリージョン レプリケーションを構成します",
+ "waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
- "severity": "中程度",
- "text": "Azure Front Door WAF の構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
- "waf": "オペレーションズ"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "kubecost などの外部アプリケーションを使用して、さまざまなユーザーにコストを割り当てます",
+ "waf": "費用"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "高い",
- "text": "Azure Front Door でエンド ツー エンドの TLS を使用します。クライアントから Front Door への接続、および Front Door から配信元への接続には TLS を使用します。",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "スケールダウンモードを使用してノードを削除/割り当て解除する",
+ "waf": "費用"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Front Door で HTTP から HTTPS へのリダイレクトを使用します。古いクライアントをHTTPSリクエストに自動的にリダイレクトすることでサポートします。",
- "waf": "安全"
+ "text": "必要に応じて、AKS クラスターで複数インスタンスの分割 GPU を使用する",
+ "waf": "費用"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "高い",
- "text": "Azure Front Door WAF を有効にします。さまざまな攻撃からアプリケーションを保護します。",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "Dev/Test クラスターを実行している場合は、NodePool Start/Stop を使用します。",
+ "waf": "費用"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "高い",
- "text": "ワークロードに合わせて Azure Front Door WAF を調整します。誤検知を減らします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "Azure Policy for Kubernetes を使用してクラスターのコンプライアンスを確保する",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "高い",
- "text": "Azure Front Door WAF ポリシーで要求本文検査機能を有効にします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "ユーザー/システムノードプールを使用してコントロールプレーンからアプリケーションを分離する",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "高い",
- "text": "Azure Front Door WAF の既定の規則セットを有効にします。既定のルール セットは、一般的な攻撃を検出してブロックします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "システム ノードプールにテイントを追加して専用にする",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "高い",
- "text": "Azure Front Door WAF ボット保護ルール セットを有効にします。ボットルールは、良いボットと悪いボットを検出します。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "イメージにはプライベート レジストリ (ACR など) を使用する",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
"severity": "中程度",
- "text": "最新の Azure Front Door WAF ルール セット バージョンを使用します。ルール セットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
+ "text": "イメージをスキャンして脆弱性を検出する",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
- "severity": "中程度",
- "text": "Azure Front Door WAF にレート制限を追加します。レート制限は、クライアントが短期間に大量のトラフィックを誤ってまたは意図的に送信することをブロックします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "アプリの分離要件を定義する (名前空間/ノードプール/クラスター)",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Front Door WAF のレート制限には、高いしきい値を使用します。高いレート制限しきい値は、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多数の要求に対する保護を提供します。",
+ "text": "CSI シークレット ストア ドライバーを使用して Azure Key Vault にシークレットを格納する",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "低い",
- "text": "すべての地域からのトラフィックが想定されていない場合は、地域フィルタを使用して、想定外の国からのトラフィックをブロックします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "クラスターにサービス プリンシパルを使用する場合は、資格情報を定期的に (四半期ごとなど) 更新します",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Front Door WAF を使用してトラフィックをジオフィルター処理するときに、不明な (ZZ) 場所を指定します。IP アドレスを地理的に一致させることができない場合に、正当な要求を誤ってブロックしないようにします。",
+ "text": "必要に応じて、キー管理サービスの etcd 暗号化を追加します",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
- "severity": "高い",
- "text": "Azure Application Gateway WAF ボット保護ルール セットを有効にする ボット ルールは、良いボットと悪いボットを検出します。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて、Confidential Compute for AKS の使用を検討してください",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
- "severity": "高い",
- "text": "Azure Application Gateway WAF ポリシーで有効になっている要求本文検査機能を有効にします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "Defender for Containers の使用を検討する",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
"severity": "高い",
- "text": "ワークロードに合わせて Azure Application Gateway WAF を調整します。誤検知を減らします。",
+ "text": "サービス プリンシパルの代わりにマネージド ID を使用するUse managed identities instead of Service Principals",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
- "severity": "高い",
- "text": "Application Gateway の WAF ポリシーを \"防止\" モードでデプロイします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "認証と AAD の統合 (マネージド統合を使用)",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Application Gateway WAF にレート制限を追加します。レート制限は、クライアントが短期間に大量のトラフィックを誤ってまたは意図的に送信することをブロックします。",
+ "text": "管理者 kubeconfig へのアクセスを制限する (get-credentials --admin)",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Application Gateway の WAF レート制限には高いしきい値を使用します。高いレート制限しきい値は、正当なトラフィックのブロックを回避しながら、インフラストラクチャを圧倒する可能性のある非常に多数の要求に対する保護を提供します。",
+ "text": "承認と AAD RBAC の統合",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
- "severity": "低い",
- "text": "すべての地域からのトラフィックが想定されていない場合は、地域フィルタを使用して、想定外の国からのトラフィックをブロックします。",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "Kubernetes で RBAC 特権を制限するために名前空間を使用する",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Application Gateway WAF でトラフィックを geo フィルタリングするときに、不明 (ZZ) の場所を指定します。IP アドレスを地理的に一致させることができない場合に、正当な要求を誤ってブロックしないようにします。",
+ "text": "ポッド ID アクセス管理の場合は、Azure AD ワークロード ID (プレビュー) を使用します",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
+ "service": "AKS",
"severity": "中程度",
- "text": "最新バージョンの Azure Application Gateway WAF ルール セットを使用します。ルール セットの更新は、現在の脅威の状況を考慮して定期的に更新されます。",
+ "text": "AKS 非対話型ログインの場合は、kubelogin (プレビュー) を使用します",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
+ "service": "AKS",
"severity": "中程度",
- "text": "診断設定を追加して、Azure Application Gateway の WAF ログを保存します。",
- "waf": "オペレーションズ"
+ "text": "AKS ローカル アカウントを無効にする",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "中程度",
- "text": "診断設定を追加して、Azure Front Door WAF ログを保存します。",
- "waf": "オペレーションズ"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて Just-In-Time クラスター アクセスを構成する",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "Azure Application Gateway WAF ログを Microsoft Sentinel に送信します。",
- "waf": "オペレーションズ"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて AKS の AAD 条件付きアクセスを構成する",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "中程度",
- "text": "Azure Front Door WAF ログを Microsoft Sentinel に送信します。",
- "waf": "オペレーションズ"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "Windows AKS ワークロードで必要な場合は、gMSA を構成します",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Application Gateway の WAF 構成をコードとして定義します。コードを使用すると、新しいルール セット バージョンをより簡単に採用し、追加の保護を得ることができます。",
- "waf": "オペレーションズ"
+ "text": "より細かく制御するには、マネージドKubelet Identityの使用を検討してください",
+ "waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "service": "AKS",
"severity": "中程度",
- "text": "従来のWAF構成のかわりにWAFポリシーを使用します。",
- "waf": "オペレーションズ"
+ "text": "AGIC を使用している場合は、クラスター間で AppGW を共有しないでください",
+ "waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "バックエンドの受信トラフィックをフィルター処理して、Application Gateway サブネットからの接続 (NSG など) のみを受け入れるようにします。",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "AKS HTTP ルーティング アドオンを使用せず、代わりにアプリケーション ルーティング アドオンでマネージド NGINX イングレスを使用します。",
+ "waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "service": "AKS",
"severity": "中程度",
- "text": "配信元が Azure Front Door インスタンスからのトラフィックのみを受け取るようにします。",
- "waf": "安全"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
- "severity": "高い",
- "text": "バックエンド・サーバーへのトラフィックを暗号化する必要があります。",
- "waf": "安全"
+ "text": "Windows ワークロードの場合は、高速ネットワークを使用します",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"severity": "高い",
- "text": "Web アプリケーション ファイアウォールを使用する必要があります。",
- "waf": "安全"
+ "text": "標準のALBを使用する(基本的なALBとは対照的)",
+ "waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "service": "AKS",
"severity": "中程度",
- "text": "HTTPをHTTPSにリダイレクトする",
+ "text": "Azure CNI を使用する場合は、NodePool に異なるサブネットを使用することを検討してください",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
"severity": "中程度",
- "text": "ゲートウェイ管理の Cookie を使用して、ユーザー セッションから同じサーバーにトラフィックを送信して処理する",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
- "severity": "高い",
- "text": "計画されたサービス更新中に接続ドレインを有効にして、バックエンド プールの既存のメンバーへの接続が失われないようにします",
+ "text": "プライベート エンドポイント (推奨) または Virtual Network サービス エンドポイントを使用して、クラスターから PaaS サービスにアクセスする",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
- "severity": "低い",
- "text": "カスタムエラーページを作成して、パーソナライズされたユーザーエクスペリエンスを表示する",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "HTTPリクエストとレスポンスヘッダーを編集して、クライアントとサーバー間のルーティングと情報交換を容易にします",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "要件に最適な CNI ネットワーク プラグインを選択する (Azure CNI を推奨)",
+ "waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "Front Door を構成して、グローバルな Web トラフィック ルーティングとトップレベルのエンド ユーザーのパフォーマンスを最適化し、迅速なグローバル フェールオーバーを通じて信頼性を確保します",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "Azure CNI を使用する場合は、ノードあたりのポッドの最大数を考慮して、サブネットのサイズを適切に設定します",
"waf": "パフォーマンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "トランスポート層の負荷分散を使用する",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "Azure CNI を使用している場合は、最大ポッド数/ノード (既定値は 30) を確認します",
"waf": "パフォーマンス"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "1 つのゲートウェイ上の複数の Web アプリケーションのホスト名またはドメイン名に基づいてルーティングを構成する",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "内部アプリの場合、組織は多くの場合、ファイアウォールで AKS サブネット全体を開きます。これにより、ノードへのネットワーク アクセスも開かれ、場合によってはポッドへのネットワーク アクセスも開かれます (Azure CNI を使用している場合)。LoadBalancer の IP が別のサブネットにある場合は、この IP のみをアプリ クライアントで使用できる必要があります。もう 1 つの理由は、AKS サブネット内の IP アドレスが希少なリソースである場合、その IP アドレスをサービスに使用すると、クラスターの最大スケーラビリティが低下することです。",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "プライベート IP LoadBalancer サービスを使用する場合は、(AKS サブネットではなく) 専用サブネットを使用します",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
- "severity": "中程度",
- "text": "SSL証明書管理を一元化して、バックエンドサーバーファームからの暗号化と復号化のオーバーヘッドを削減",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "それに応じて、サービスの IP アドレス範囲のサイズを設定します (クラスターのスケーラビリティが制限されます)。",
+ "waf": "確実"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
+ "service": "AKS",
"severity": "低い",
- "text": "Application Gateway を使用して WebSocket と HTTP/2 プロトコルをネイティブにサポートする",
+ "text": "必要に応じて、独自のCNIプラグインを追加します",
"waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "severity": "高い",
- "text": "ビジネスとSLOの要件に基づいて適切な関数ホスティングプランを選択します",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて、AKS でノードごとにパブリック IP を構成する",
+ "waf": "パフォーマンス"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "イングレス コントローラーを使用して、LoadBalancer タイプのサービスで公開する代わりに、Web ベースのアプリを公開します",
"waf": "確実"
},
{
- "checklist": "Azure Function Review",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "severity": "高い",
- "text": "リージョンで適用可能な場合は Availability Zones を活用します (従量課金レベルでは使用できません)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "エグレス トラフィックをスケーリングするために Azure NAT Gateway を outboundType として使用する",
"waf": "確実"
},
{
- "checklist": "Azure Function Review",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "service": "AKS",
"severity": "中程度",
- "text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
+ "text": "Azure CNI IP の枯渇を回避するために IP の動的割り当てを使用する",
"waf": "確実"
},
{
- "checklist": "Azure Function Review",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "service": "AKS",
"severity": "高い",
- "text": "分離環境にデプロイする場合は、App Service Environment (ASE) v3 を使用するか、それらに移行します",
- "waf": "確実"
+ "text": "セキュリティ要件で義務付けられている場合は、AzFW/NVA を使用してエグレス トラフィックをフィルター処理します",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "パブリック API エンドポイントを使用している場合は、アクセスできる IP アドレスを制限します",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "service": "AKS",
"severity": "高い",
- "text": "App Service プランで実行されているすべての関数アプリで \"Always On\" が有効になっていることを確認する",
- "waf": "確実"
+ "text": "要件で必要な場合は、プライベート クラスターを使用します",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"severity": "中程度",
- "text": "関数アプリを独自のストレージ アカウントにペアリングします。Function Apps のストレージ アカウントは、緊密に結合されていない限り、再利用しないようにしてください",
- "waf": "確実"
+ "text": "Windows 2019 および 2022 AKS ノードでは、Calico ネットワーク ポリシーを使用できます",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
- "severity": "中程度",
- "text": "Azure DevOps または GitHub を活用して CI/CD を合理化し、関数アプリのコードを保護します",
- "waf": "オペレーションズ"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "Kubernetes ネットワーク ポリシー オプションを有効にする (Calico/Azure)",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
- "severity": "中程度",
- "text": "Azure Spring Apps では、アプリごとに 2 つのデプロイが許可され、そのうちの 1 つだけが運用トラフィックを受信します。ブルーグリーンデプロイ戦略により、ダウンタイムをゼロにすることができます。ブルー グリーン デプロイは、Standard レベルと Enterprise レベルでのみ使用できます。CI/CD と ADO/GitHub Actions を使用してデプロイを自動化できます",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "Kubernetesネットワークポリシーを使用してクラスタ内のセキュリティを強化",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
- "severity": "中程度",
- "text": "Azure Spring Apps インスタンスは、アプリケーション用に複数のリージョンに作成でき、トラフィックは Traffic Manager/Front Door によってルーティングできます。",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "Web ワークロード (UI または API) に WAF を使用するUse a WAF for a web workloads (UI or API)",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "service": "AKS",
"severity": "中程度",
- "text": "サポートされているリージョンでは、Azure Spring Apps をゾーン冗長としてデプロイできるため、インスタンスは可用性ゾーン間で自動的に分散されます。この機能は、Standard レベルと Enterprise レベルでのみ使用できます。",
- "waf": "確実"
+ "text": "AKS Virtual Network で DDoS Standard を使用するUse DDoS Standard in the AKS Virtual Network",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
- "severity": "中程度",
- "text": "アプリに複数のアプリ インスタンスを使用する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて、会社の HTTP プロキシを追加します",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "service": "AKS",
"severity": "中程度",
- "text": "Azure Spring Apps をログ、メトリック、トレースで監視します。ASA を Application Insights と統合し、障害を追跡し、ブックを作成します。",
- "waf": "確実"
+ "text": "高度なマイクロサービス通信管理にサービスメッシュの使用を検討する",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
- "severity": "中程度",
- "text": "Spring Cloud Gateway で自動スケーリングを設定する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "最も重要なメトリックに関するアラートを構成します (推奨事項については、「Container Insights」を参照してください)",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "service": "AKS",
"severity": "低い",
- "text": "Standard 従量課金プランと専用プランのアプリの自動スケーリングを有効にします。",
- "waf": "確実"
- },
- {
- "checklist": "Azure Spring Apps Review",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
- "severity": "中程度",
- "text": "ミッション クリティカルなアプリの Spring Boot の商用サポートには、Enterprise プランを使用します。他のレベルでは、OSS のサポートを受けることができます。",
- "waf": "確実"
+ "text": "Azure Advisor でクラスターの推奨事項を定期的に確認する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
- "service": "IoT Hub DPS",
- "severity": "高い",
- "text": "ビジネスと SLO の要件に基づいて適切なロジック アプリのホスティング プランを選択する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "AKS 自動証明書のローテーションを有効にする",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "IoT Hub DPS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "service": "AKS",
"severity": "高い",
- "text": "ゾーンの冗長性と可用性ゾーンを使用してリージョンの障害からロジック アプリを保護する",
- "waf": "確実"
+ "text": "kubernetes のバージョンを定期的に (四半期ごとなど) アップグレードする定期的なプロセスを行うか、AKS 自動アップグレード機能を使用します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "8aed4fbf-0830-4883-899d-222a154af478",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "IoT Hub DPS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "service": "AKS",
"severity": "高い",
- "text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
- "waf": "確実"
+ "text": "ノードイメージのアップグレードを使用していない場合は、Linuxノードのアップグレードにkuredを使用します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "IoT Hub DPS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "service": "AKS",
"severity": "高い",
- "text": "分離環境にデプロイする場合は、App Service Environment (ASE) v3 を使用するか、それらに移行します",
- "waf": "確実"
+ "text": "クラスタノードイメージを定期的に(毎週など)アップグレードする定期的なプロセスを用意します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "IoT Hub DPS",
- "severity": "中程度",
- "text": "Azure DevOps または GitHub を活用して CI/CD を合理化し、ロジック アプリ コードを保護",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "アプリケーションまたはクラスター構成を複数のクラスターにデプロイするために gitop を検討してください",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "service": "AKS",
"severity": "低い",
- "text": "ベスト プラクティスについては、「ベースラインの高可用性ゾーン冗長 Web アプリケーション アーキテクチャ」を参照してください",
- "waf": "確実"
+ "text": "プライベート クラスターで AKS コマンド呼び出しを使用することを検討する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
- "severity": "中程度",
- "text": "Premium レベルと Standard レベルを使用します。これらの層では、ステージング スロットと自動バックアップがサポートされています。",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "計画されたイベントの場合は、ノードの自動ドレインの使用を検討してください",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
+ "service": "AKS",
"severity": "高い",
- "text": "リージョンで適用可能な場合は Availability Zones を活用します (Premium v2 または v3 レベルが必要)",
- "waf": "確実"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
- "severity": "中程度",
- "text": "ヘルスチェックの実装",
- "waf": "確実"
+ "text": "独自のガバナンスプラクティスを開発して、ノードRG(別名「インフラRG」)のオペレーターによって変更が実行されないようにします",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
- "severity": "高い",
- "text": "「Azure App Service のバックアップと復元のベスト プラクティス」を参照してください",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "カスタムノードRG(別名「インフラRG」)名を使用",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
- "severity": "高い",
- "text": "Azure App Service の信頼性に関するベスト プラクティスを実装する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "非推奨の Kubernetes API を YAML マニフェストで使用しないでください",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "service": "AKS",
"severity": "低い",
- "text": "災害時に App Service アプリを別のリージョンに移動する方法を理解する",
- "waf": "確実"
+ "text": "Windows ノードのテイント",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
- "severity": "高い",
- "text": "Azure App Service の信頼性サポートについて理解する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "Windows コンテナーのパッチ レベルをホストのパッチ レベルと同期させる",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
- "severity": "中程度",
- "text": "App Service プランで実行されている Function Apps に対して \"Always On\" が有効になっていることを確認する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "クラスタレベルでの診断設定経由",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "マスター ログ (API ログ) を Azure Monitor または任意のログ管理ソリューションに送信する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
- "severity": "中程度",
- "text": "正常性チェックを使用した App Service インスタンスの監視",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて、nodePool スナップショットを使用します",
+ "waf": "費用"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
- "severity": "中程度",
- "text": "Application Insights の可用性テストを使用して Web アプリまたは Web サイトの可用性と応答性を監視する",
- "waf": "確実"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "時間的制約のないワークロードのスポット ノード プールを検討する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"severity": "低い",
- "text": "Application Insights Standard テストを使用して、Web アプリまたは Web サイトの可用性と応答性を監視する",
- "waf": "確実"
+ "text": "クイック バーストのために AKS 仮想ノードを検討する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure Key Vault を使用して、アプリケーションに必要なシークレットを格納します。 Key Vault は、シークレットを格納するための安全で監査された環境を提供し、Key Vault SDK または App Service Key Vault リファレンスを通じて App Service と適切に統合されています。",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "高い",
- "text": "Key Vault を使用してシークレットを格納する",
- "waf": "安全"
+ "text": "Container Insights (または Prometheus などの他のツール) を使用してクラスター メトリックを監視する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "マネージド ID を使用して、Key Vault SDK または App Service Key Vault 参照を使用して Key Vault に接続します。",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "高い",
- "text": "マネージド ID を使用して Key Vault に接続する",
- "waf": "安全"
+ "text": "Container Insights(またはTelegraf/ElasticSearchなどの他のツール)を使用してクラスターログを保存および分析します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service TLS 証明書を Key Vault に格納します。",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
- "severity": "高い",
- "text": "Key Vault を使用して TLS 証明書を格納します。",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "ノードの CPU とメモリの使用率を監視する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "機密情報を処理するシステムは分離する必要があります。 そのためには、個別の App Service プランまたは App Service Environment を使用し、異なるサブスクリプションまたは管理グループの使用を検討してください。",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "中程度",
- "text": "機密情報を処理するシステムを分離する",
- "waf": "安全"
+ "text": "Azure CNI を使用している場合は、ノードごとに消費されるポッド IP の割合を監視します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service のローカル ディスクは暗号化されていないため、機密データを格納しないでください。 (例: D:\\\\Local and %TMP%)。",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "OS ディスクの I/O は重要なリソースです。ノード内の OS が I/O で調整されると、予期しない動作が発生し、通常はノードが NotReady と宣言される可能性があります",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
"severity": "中程度",
- "text": "機密データをローカルディスクに保存しない",
- "waf": "安全"
+ "text": "ノード内の OS ディスク キューの深さを監視する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "認証された Web アプリケーションの場合は、Azure AD や Azure AD B2C などの確立された ID プロバイダーを使用します。 選択したアプリケーション フレームワークを利用して、このプロバイダーと統合するか、App Service の認証/承認機能を使用します。",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"severity": "中程度",
- "text": "認証に確立された ID プロバイダーを使用する",
- "waf": "安全"
+ "text": "AzFW/NVA でエグレス フィルター処理を使用しない場合は、標準の ALB によって割り当てられた SNAT ポートを監視します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "適切に管理され、セキュリティで保護された DevOps デプロイ パイプラインなど、制御された信頼できる環境から App Service にコードをデプロイします。これにより、バージョン管理されておらず、悪意のあるホストからデプロイされることが確認されていないコードが回避されます。",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
- "severity": "高い",
- "text": "信頼できる環境からのデプロイ",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "AKS クラスターのリソース正常性通知をサブスクライブするSubscribe to resource health notifications for your AKS cluster",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "FTP/FTPS と WebDeploy/SCM の両方の基本認証を無効にします。 これにより、これらのサービスへのアクセスが無効になり、デプロイに Azure AD で保護されたエンドポイントの使用が強制されます。 SCM サイトは、Azure AD 資格情報を使用して開くこともできます。",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"severity": "高い",
- "text": "基本認証の無効化",
- "waf": "安全"
+ "text": "ポッド仕様で要求と制限を構成する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "可能な場合は、マネージド ID を使用して Azure AD のセキュリティで保護されたリソースに接続します。 これが不可能な場合は、Key Vault にシークレットを格納し、代わりにマネージド ID を使用して Key Vault に接続します。",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
- "severity": "高い",
- "text": "マネージド ID を使用してリソースに接続する",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "中程度",
+ "text": "名前空間のリソースクォータを適用する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure Container Registry に格納されているイメージを使用する場合は、マネージド ID を使用してこれらをプルします。",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "AKS",
"severity": "高い",
- "text": "マネージド ID を使用してコンテナーをプルするPull containers using a Managed Identity",
- "waf": "安全"
+ "text": "サブスクリプションにノードプールをスケールアウトするのに十分なクォータがあることを確認する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service の診断設定を構成することで、ログ記録と監視の中央の宛先として、すべてのテレメトリを Log Analytics に送信できます。これにより、HTTP ログ、アプリケーション ログ、プラットフォーム ログなどの App Service のランタイム アクティビティを監視できます。",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"severity": "中程度",
- "text": "App Service ランタイム ログを Log Analytics に送信する",
- "waf": "安全"
+ "text": "Cluster Autoscaler を使用する",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "ログ記録と監視の中央の宛先としてアクティビティ ログを Log Analytics に送信するための診断設定を設定します。これにより、App Service リソース自体のコントロール プレーンのアクティビティを監視できます。",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
- "severity": "中程度",
- "text": "App Service アクティビティ ログを Log Analytics に送信する",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "AKS ノード プールのノード構成をカスタマイズする",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "リージョンの VNet 統合、ネットワーク セキュリティ グループ、および UDR の組み合わせを使用して、送信ネットワーク アクセスを制御します。 トラフィックは、Azure Firewall などの NVA にルーティングする必要があります。 ファイアウォールのログを必ず監視してください。",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
"severity": "中程度",
- "text": "送信ネットワーク アクセスを制御する必要がある",
- "waf": "安全"
+ "text": "必要に応じてHorizontal Pod Autoscalerを使用します",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "VNet 統合を使用し、VNet NAT ゲートウェイまたは Azure Firewall などの NVA を使用することで、安定した送信 IP を提供できます。 これにより、受信側は必要に応じて IP に基づいて許可リストに登録できます。 多くの場合、Azure サービスへの通信では、IP アドレスに依存する必要はなく、代わりにサービス エンドポイントなどのメカニズムを使用する必要があります。 (また、受信側でプライベート エンドポイントを使用すると、SNAT の発生が回避され、安定した送信 IP 範囲が提供されます)。",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
- "severity": "低い",
- "text": "インターネットアドレスへの送信通信のIPを安定させる",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "ノードが大きくなると、パフォーマンスが向上し、エフェメラル ディスクや高速ネットワークなどの機能が提供されますが、爆発半径が大きくなり、スケーリングの粒度が低下します",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
+ "severity": "高い",
+ "text": "大きすぎず小さすぎない適切なノードサイズを検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service のアクセス制限、サービス エンドポイント、またはプライベート エンドポイントの組み合わせを使用して、受信ネットワーク アクセスを制御します。Web アプリ自体と SCM サイトに対して異なるアクセス制限を要求し、構成できます。",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "高い",
- "text": "受信ネットワーク アクセスを制御する必要がある",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "スケーラビリティのために 5,000 を超えるノードが必要な場合は、追加の AKS クラスターの使用を検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "Application Gateway や Azure Front Door などの Web アプリケーション ファイアウォールを使用して、悪意のある受信トラフィックから保護します。 WAFのログを必ず監視してください。",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
- "severity": "高い",
- "text": "App Service の前で WAF を使用するUse a WAF in Front of App Service",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "AKS 自動化のために EventGrid イベントをサブスクライブすることを検討する",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "WAFのみへのアクセスをロックダウンすることで、WAFをバイパスできないようにします。 アクセス制限、サービス・エンドポイントおよびプライベート・エンドポイントを組み合わせて使用します。",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "高い",
- "text": "WAFをバイパスすることは避けてください",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "AKS クラスターで実行時間の長い操作を行う場合は、イベントの終了を検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service の構成で最小 TLS ポリシーを 1.2 に設定します。",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
- "severity": "中程度",
- "text": "最小 TLS ポリシーを 1.2 に設定します。",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "必要に応じて、AKS ノードに Azure Dedicated Hosts を使用することを検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "HTTPS のみを使用するように App Service を構成します。 これにより、App Service は HTTP から HTTPS にリダイレクトされます。 HTTP Strict Transport Security (HSTS) をコード内または WAF から使用して、サイトに HTTPS を使用してのみアクセスする必要があることをブラウザーに通知することを強く検討してください。",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
"severity": "高い",
- "text": "HTTPS のみを使用",
- "waf": "安全"
+ "text": "エフェメラル OS ディスクを使用する",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "CORS 構成では、すべての配信元がサービスにアクセスできるため、ワイルドカードを使用しないでください (これにより、CORS の目的が損なわれます)。具体的には、サービスにアクセスできると予想される配信元のみを許可します。",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
"severity": "高い",
- "text": "ワイルドカードは CORS に使用しないでください",
- "waf": "安全"
+ "text": "非エフェメラル ディスクの場合、複数のポッドを実行するには高いパフォーマンスが必要であり、既定の AKS ログ ローテーションしきい値で巨大なログが生成されるため、多くのポッド/ノードを実行する場合は、ノードに高い IOPS とより大きな OS ディスクを使用します",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "リモート デバッグは、サービスに追加のポートが開き、攻撃対象領域が増加するため、運用環境でオンにしないでください。このサービスは、48 時間後に自動的にリモート デバッグをオフにすることに注意してください。",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
- "severity": "高い",
- "text": "リモートデバッグをオフにする",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
+ "severity": "低い",
+ "text": "ハイパー パフォーマンス ストレージ オプションの場合は、AKS 上の Ultra Disks を使用します",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "Defender for App Service を有効にします。 これは(他の脅威の中でも)既知の悪意のあるIPアドレスへの通信を検出します。 操作の一環として、Defender for App Service からの推奨事項を確認します。",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
"severity": "中程度",
- "text": "Defender for Cloud を有効にする - Defender for App Service",
- "waf": "安全"
+ "text": "クラスター内に状態を保持することは避け、外部 (AzStorage、AzSQL、Cosmos など) にデータを格納します",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure は、ネットワーク上で DDoS Basic 保護を提供しており、通常のトラフィック パターンを学習し、異常な動作を検出できるインテリジェントな DDoS Standard 機能によって改善できます。DDoS Standard は仮想ネットワークに適用されるため、Application Gateway や NVA など、アプリの前にあるネットワーク リソース用に構成する必要があります。",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
"severity": "中程度",
- "text": "WAF VNet で DDoS Protection Standard を有効にするEnable DDOS Protection Standard on the WAF VNet",
- "waf": "安全"
+ "text": "AzFiles Standard を使用する場合は、パフォーマンス上の理由から AzFiles Premium や ANF を検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure Container Registry に格納されているイメージを使用する場合は、プライベート エンドポイントとアプリ設定 \"WEBSITE_PULL_IMAGE_OVER_VNET\" を使用して、Azure Container Registry から仮想ネットワーク経由でイメージをプルします。",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
"severity": "中程度",
- "text": "Virtual Network 経由でコンテナーをプルする",
- "waf": "安全"
+ "text": "Azure ディスクと AZ を使用する場合は、適切なゾーンにストレージをプロビジョニングするために VolumeBindingMode:WaitForFirstConsumer を使用して LRS ディスクのゾーン内にノードプールを配置するか、複数のゾーンにまたがるノードプールに ZRS ディスクを使用することを検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure App Service Review",
- "description": "ペネトレーションテストのルールに従って、Webアプリケーションでペネトレーションテストを実施します。",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
- "severity": "中程度",
- "text": "ペネトレーションテストの実施",
- "waf": "安全"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
+ "text": "Azure Monitor のデータ収集ルール - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "費用"
},
{
- "checklist": "Azure App Service Review",
- "description": "DevSecOps プラクティスに従って脆弱性が検証およびスキャンされた信頼できるコードをデプロイします。",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
- "severity": "中程度",
- "text": "検証済みコードのデプロイ",
- "waf": "安全"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
+ "text": "基になるデータソースが見つからないバックアップインスタンスを確認する",
+ "waf": "費用"
},
{
- "checklist": "Azure App Service Review",
- "description": "サポートされているプラットフォーム、プログラミング言語、プロトコル、およびフレームワークの最新バージョンを使用します。",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
- "severity": "高い",
- "text": "最新のプラットフォーム、言語、プロトコル、フレームワークを使用",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
+ "text": "関連づけられていないサービス(ディスク、NIC、IPアドレスなど)を削除またはアーカイブする",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
- "severity": "高い",
- "text": "ADDS ドメイン コントローラーがネイティブ Azure の ID サブスクリプションにデプロイされていることを確認する",
- "waf": "安全"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
+ "text": "ミッション クリティカルでないアプリケーションの Site Recovery ストレージとバックアップのバランスを考慮する",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure ベースのリソース (Azure VMware Solution を含む) からの認証要求を Azure にローカルに保持するように ADDS サイトとサービスが構成されていることを確認します",
- "waf": "安全"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
+ "text": "40 の異なるログ分析ワークスペース間で支出と節約の機会を確認する - 非運用ワークスペースに異なる保持とデータ収集を使用する - 認識と階層サイズ設定のための日次上限を作成する - 日次上限を設定する場合は、上限に達したときにアラートを作成するだけでなく、ある割合 (90% など) に達したときに通知されるアラート ルールも作成してください。- 可能であればワークスペースの変革を検討する - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
- "severity": "高い",
- "text": "vCenterがADDに接続されていることを確認し、「名前付きユーザーアカウント」に基づく認証を有効にします",
- "waf": "安全"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
+ "text": "ログのパージポリシーと自動化を適用する(必要に応じて、ログをコールドストレージに移動できます)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
- "severity": "中程度",
- "text": "vCenter から ADDS への接続でセキュア プロトコル (LDAPS) が使用されていることを確認します",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
+ "text": "ディスクが本当に必要かどうかを確認し、必要でない場合は削除します。必要な場合は、下位のストレージ階層を見つけるか、バックアップを使用します。",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
- "severity": "中程度",
- "text": "vCenter IdP の CloudAdmin アカウントは、緊急アカウント(非常用アカウント)としてのみ使用されます",
- "waf": "安全"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
+ "text": "未使用のストレージを下位階層に移動し、カスタマイズされたルールを使用することを検討する - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
- "severity": "高い",
- "text": "NSX-Manager が外部 ID プロバイダ (LDAPS) と統合されていることを確認します。",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
+ "text": "advisor が VM の適切なサイズ設定用に構成されていることを確認する",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
- "severity": "中程度",
- "text": "VMware vSphere 内で使用するために RBAC モデルが作成されているか",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "description": "コスト分析でメーターカテゴリライセンスを検索して確認してください",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
+ "text": "すべての Windows VM でスクリプトを実行する https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- Windows VM が頻繁に作成される場合は、ポリシーの実装を検討してください",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
- "severity": "中程度",
- "text": "RBAC アクセス許可は、特定のユーザーではなく、ADDS グループに付与する必要があります",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
+ "text": "これは、すでにライセンスを持っている場合は、AHUBの下に置くこともできます https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
- "severity": "高い",
- "text": "Azure の Azure VMware Solution リソースに対する RBAC アクセス許可は、限られた所有者のセットのみに \"ロックダウン\" されます",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
+ "text": "予約済み VM ファミリを柔軟性オプションで統合する (4 から 5 ファミリ以下)",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
- "severity": "高い",
- "text": "すべてのカスタム ロールのスコープが CloudAdmin で許可された承認で設定されていることを確認する",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
+ "text": "Azure 予約インスタンスを利用する: この機能を使用すると、VM を 1 年または 3 年間予約できるため、PAYG 価格と比較して大幅なコスト削減が実現します。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
- "severity": "高い",
- "text": "お客様のユース ケースに適した Azure VMware Solution 接続モデルが選択されているか",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
+ "text": "より大きなディスクのみ予約できます => 1 TiB -",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
- "severity": "高い",
- "text": "オンプレミスから Azure への ExpressRoute または VPN 接続が \"接続モニター\" を使用して監視されていることを確認する",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
+ "text": "適切なサイズ最適化の後",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution バックエンドの ExpressRoute 接続を監視するために、Azure ネイティブ リソースから Azure VMware Solution 仮想マシンへの接続モニターが作成されていることを確認します",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Sql/servers",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
+ "text": "該当するかどうかを確認し、ポリシー/変更 https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations を適用します",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
- "severity": "中程度",
- "text": "エンド 2 エンドの接続を監視するために、オンプレミス リソースから Azure VMware Solution 仮想マシンへの接続モニターが作成されていることを確認します",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
+ "text": "VM +ライセンス部分の割引(ahub + 3YRI)は約70%の割引です",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
- "severity": "高い",
- "text": "ルート サーバーを使用する場合は、ルート サーバーから ExR ゲートウェイ、オンプレミスに伝達されるルートが 1000 を超えないようにします (ARS 制限)。",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
+ "text": "需要に合わせて、フラットなサイジングではなく、VMSS の使用を検討してください",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
- "severity": "高い",
- "text": "Azure Portal で Azure VMware Solution リソースを管理するロールに対して Privileged Identity Management が実装されていますか (永続的なアクセス許可は許可されません)",
- "waf": "安全"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "AKS",
+ "text": "AKS オートスケーラーを使用してクラスターの使用量に一致させる (ポッドの要件がスケーラーと一致していることを確認する)",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
- "severity": "高い",
- "text": "Privileged Identity Management 監査レポートは、Azure VMware Solution PIM ロールに対して実装する必要がある",
- "waf": "安全"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
+ "text": "該当する場合は、復旧ポイントを vault-archive に移動します (検証)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
- "severity": "中程度",
- "text": "Privileged Identity Management を使用している場合は、Azure VMware Solution のホストの自動置換通知用の有効な SMTP レコードを使用して、有効な Entra ID が有効なアカウントが作成されていることを確認します。(常任許可が必要)",
- "waf": "安全"
+ "arm-service": "Microsoft.Databricks/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
+ "text": "可能な場合は、フォールバックでスポット VM を使用することを検討してください。クラスターの自動終了を検討してください。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
- "severity": "高い",
- "text": "CloudAdmin アカウントの使用を緊急アクセスのみに制限する",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
+ "text": "関数 - 接続の再利用",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
- "severity": "中程度",
- "text": "vCenter Server でカスタム RBAC ロールを作成して、vCenter 内に最小特権モデルを実装します",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
+ "text": "関数 - データをローカルにキャッシュする",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
- "severity": "中程度",
- "text": "cloudadmin (vCenter) と admin (NSX) の資格情報を定期的にローテーションするように定義されたプロセスです。",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
+ "text": "関数 - コールド スタート - 「パッケージから実行」機能を使用します。このようにして、コードは単一のzipファイルとしてダウンロードされます。これにより、たとえば、多くのノードモジュールを持つJavascript関数が大幅に改善される可能性があります。言語固有のツールを使用してパッケージサイズを縮小します (ツリーを揺るがす Javascript アプリケーションなど)。",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
- "severity": "高い",
- "text": "一元化された ID プロバイダーを使用して、Azure VMware Solution で実行されているワークロード (VM) に使用する",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
+ "text": "関数 - 関数を暖かく保つ",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "費用"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
+ "text": "さまざまな関数で自動スケーリングを使用する場合、すべてのリソースのすべての自動スケーリングを駆動する 1 つが存在する可能性があるため、別の従量課金プランに移行することを検討してください (また、CPU のより高いプランを検討してください)",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
- "severity": "中程度",
- "text": "East-West トラフィック フィルタリングは NSX-T 内に実装されていますか",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
+ "text": "特定のプランの関数アプリはすべて一緒にスケーリングされるため、スケーリングに関する問題はプラン内のすべてのアプリに影響を与える可能性があります。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
- "severity": "高い",
- "text": "Azure VMware Solution 上のワークロードは、インターネットに直接公開されません。トラフィックは、Azure Application Gateway、Azure Firewall、またはサード パーティのソリューションによってフィルター処理され、検査されます",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
+ "text": "「待機時間」に対して請求されますか?この質問は、通常、非同期操作を実行して結果を待機する C# 関数のコンテキストで尋ねられます (例: await Task.Delay(1000) や await client)。GetAsync('http://google.com') です。答えはイエスです-GB秒の計算は、関数の開始時刻と終了時刻、およびその期間のメモリ使用量に基づいています。その間に CPU アクティビティに関して実際に何が起こるかは、計算には考慮されません。この規則の 1 つの例外は、永続関数を使用している場合です。オーケストレーター関数で待機に費やされた時間に対しては課金されません。可能な場合は、デマンド シェーピング技術を適用します (開発環境?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
- "severity": "高い",
- "text": "監査とログ記録は、Azure VMware Solution および Azure VMware Solution ベースのワークロードへの受信インターネット要求に対して実装されます",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
+ "text": "Frontdoor - 既定のホームページをオフにするアプリのアプリケーション設定で、AzureWebJobsDisableHomepage を true に設定します。これにより、PoPに204(No Content)が返されるため、ヘッダーデータのみが返されます。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
- "severity": "中程度",
- "text": "セッション監視は、疑わしい/悪意のあるアクティビティを特定するために、Azure VMware Solution または Azure VMware Solution ベースのワークロードからの送信インターネット接続に実装されます",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
+ "text": "Frontdoor - 何も返さないものへのルーティング。関数、関数プロキシを設定するか、200 (OK) を返し、コンテンツを送信しない、または最小限のコンテンツを送信 するルートを Web アプリに追加します。これの利点は、呼び出されたときにログアウトできることです。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure の ExR/VPN Gateway サブネットで DDoS Standard 保護が有効になっているか",
- "waf": "安全"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
+ "text": "使用頻度の低いデータの階層のアーカイブを検討する",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
- "severity": "中程度",
- "text": "専用の特権アクセス ワークステーション (PAW) を使用して、Azure VMware Solution、vCenter、NSX Manager、HCX Manager を管理する",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
+ "text": "サイズが階層と一致しない場合は、ディスク サイズを確認します (つまり、513 GiB のディスクは P30 (1TiB) を支払います) と、サイズ変更を検討してください",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution で実行されているワークロードに対して Advanced Threat Detection (Microsoft Defender for Cloud 別名 ASC) を有効にする",
- "waf": "安全"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
+ "text": "可能な場合は、Premium や Ultra ではなく Standard SSD の使用を検討してください",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure ARC for Servers を使用して、Azure ネイティブ テクノロジを使用して Azure VMware Solution で実行されているワークロードを適切に管理します (Azure ARC for Azure VMware Solution はまだ利用できません)",
- "waf": "安全"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
+ "text": "ストレージ アカウントの場合は、選択したレベルによってトランザクション料金が加算されていないことを確認します (次のレベルに移動する方が安くなる可能性があります)",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
- "severity": "低い",
- "text": "Azure VMware Solution 上のワークロードで、実行時に十分なデータ暗号化 (ゲスト内ディスク暗号化や SQL TDE など) が使用されるようにします。(保存時の vSAN 暗号化がデフォルトです)",
- "waf": "安全"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
+ "text": "ASR の場合、RPO/RTO とレプリケーション スループットで許可されている場合は、Standard SSD ディスクの使用を検討してください",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
- "severity": "低い",
- "text": "ゲスト内暗号化を使用する場合は、可能な場合は Azure Key Vault に暗号化キーを格納します",
- "waf": "安全"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
+ "text": "ストレージ アカウント: 必要なホット層や GRS を確認する",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution で実行されているワークロードには、拡張セキュリティ更新プログラムのサポートの使用を検討してください (Azure VMware Solution は ESU の対象です)",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
+ "text": "ディスク - あらゆる場所で Premium SSD ディスクの使用を検証: たとえば、非運用環境を Standard SSD またはオンデマンド Premium SSD にスワップできます",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
- "severity": "高い",
- "text": "適切な vSAN データ冗長化方式(RAID 仕様)が使用されていることを確認します。",
- "waf": "確実"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
+ "text": "予算を作成してコストを管理し、支出の異常や過剰支出のリスクを関係者に自動的に通知するアラートを作成します。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
- "severity": "高い",
- "text": "許容障害ポリシーが vSAN ストレージのニーズを満たすために設定されていることを確認します",
- "waf": "確実"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
+ "text": "追加のデータ分析のために、コスト データをストレージ アカウントにエクスポートします。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
- "severity": "高い",
- "text": "十分なクォータを要求し、拡張とディザスタリカバリの要件を考慮していることを確認します",
- "waf": "確実"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
+ "text": "専用 SQL プールのコストを制御するには、リソースが使用されていないときに一時停止します。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
- "severity": "中程度",
- "text": "ESXiへのアクセス制限を理解し、サードパーティのソリューションに影響を与える可能性のあるアクセス制限があることを確認してください。",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
+ "text": "サーバーレス Apache Spark の自動一時停止機能を有効にし、それに応じてタイムアウト値を設定します。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
- "severity": "中程度",
- "text": "ESXi ホストの密度と効率に関するポリシーがあることを確認し、新しいノードを要求するためのリード タイムを念頭に置いてください",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
+ "text": "さまざまなサイズの複数の Apache Spark プール定義を作成します。",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution の適切なコスト管理プロセスが整っていることを確認する - Azure Cost Management を使用できます",
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
+ "text": "Azure Synapse Analytics のコストを節約するために、事前購入プランで Azure Synapse コミット ユニット (SCU) を 1 年間購入します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
- "severity": "低い",
- "text": "Azure VMware Solution を使用するためのコストを最適化するために Azure 予約インスタンスが使用されているか",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
+ "text": "中断可能なジョブにスポット VM を使用する: これらは、割引価格で入札および購入できる VM であり、重要でないワークロードにコスト効率の高いソリューションを提供します。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
- "severity": "中程度",
- "text": "他の Azure Native Services を使用する場合は、Azure Private-Link の使用を検討してください",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
+ "text": "すべての VM の適切なサイズ設定",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
- "severity": "高い",
- "text": "必要なすべてのリソースが同じ Azure 可用性ゾーン内に存在することを確認する",
- "waf": "パフォーマンス"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
+ "text": "正規化されたサイズと最新のサイズでサイズをスワップする VM",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution ゲスト VM ワークロードに対して Microsoft Defender for Cloud を有効にする",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "VM の適切なサイズ設定 - 使用率を 5% 未満で監視することから始めて、その後 40% まで作業します",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "費用"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure Arc 対応サーバーを使用して Azure VMware Solution ゲスト VM のワークロードを管理する",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "アプリケーションをコンテナー化すると、VM の密度が向上し、スケーリングにかかるコストを節約できます",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "費用"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
"service": "AVS",
"severity": "高い",
- "text": "Azure VMware Solution での診断ログとメトリック ログを有効にするEnable Diagnostic and metric logging on Azure VMware Solution",
- "waf": "オペレーションズ"
+ "text": "ADDS ドメイン コントローラーがネイティブ Azure の ID サブスクリプションにデプロイされていることを確認する",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
"service": "AVS",
"severity": "中程度",
- "text": "Log Analytics エージェントを Azure VMware Solution ゲスト VM ワークロードにデプロイする",
- "waf": "オペレーションズ"
+ "text": "Azure ベースのリソース (Azure VMware Solution を含む) からの認証要求を Azure にローカルに保持するように ADDS サイトとサービスが構成されていることを確認します",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
"service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution VM ワークロードのバックアップ ポリシーとソリューションが文書化され、実装されていることを確認します",
- "waf": "オペレーションズ"
+ "severity": "高い",
+ "text": "vCenterがADDに接続されていることを確認し、「名前付きユーザーアカウント」に基づく認証を有効にします",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
"service": "AVS",
"severity": "中程度",
- "text": "Microsoft Defender for Cloud を使用して、Azure VMware Solution で実行されているワークロードのコンプライアンス監視を行う",
+ "text": "vCenter から ADDS への接続でセキュア プロトコル (LDAPS) が使用されていることを確認します",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
"service": "AVS",
"severity": "中程度",
- "text": "適用可能なコンプライアンス ベースラインは Microsoft Defender for Cloud に追加されていますか",
+ "text": "vCenter IdP の CloudAdmin アカウントは、緊急アカウント(非常用アカウント)としてのみ使用されます",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
"service": "AVS",
"severity": "高い",
- "text": "Azure VMware Solution のデプロイに使用する Azure リージョンを選択するときにデータ所在地が評価されましたか",
+ "text": "NSX-Manager が外部 ID プロバイダ (LDAPS) と統合されていることを確認します。",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
"service": "AVS",
- "severity": "高い",
- "text": "データ処理への影響 (サービス プロバイダー/サービス コンシューマー モデル) が明確で文書化されているか",
+ "severity": "中程度",
+ "text": "VMware vSphere 内で使用するために RBAC モデルが作成されているか",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
"service": "AVS",
"severity": "中程度",
- "text": "コンプライアンス上の理由で必要な場合にのみ、vSAN に CMK (カスタマー マネージド キー) を使用することを検討してください。",
+ "text": "RBAC アクセス許可は、特定のユーザーではなく、ADDS グループに付与する必要があります",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
- "severity": "高い",
- "text": "Azure VMware Solution のコア監視分析情報を有効にするダッシュボードを作成するCreate dashboards to enable a core Azure VMware Solution monitoring insights",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
"service": "AVS",
"severity": "高い",
- "text": "Azure VMware Solution のパフォーマンス (CPU >80%、平均メモリ >80%、vSAN >70%) に関する自動アラートの重大しきい値の警告アラートを作成する",
- "waf": "オペレーションズ"
+ "text": "Azure の Azure VMware Solution リソースに対する RBAC アクセス許可は、限られた所有者のセットのみに \"ロックダウン\" されます",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
"service": "AVS",
"severity": "高い",
- "text": "vSAN の消費量が 75% を下回っているかどうかを監視するための重要なアラートが作成されていることを確認します (これは VMware からのサポートしきい値です)。",
- "waf": "オペレーションズ"
+ "text": "すべてのカスタム ロールのスコープが CloudAdmin で許可された承認で設定されていることを確認する",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
"service": "AVS",
"severity": "高い",
- "text": "Azure Service Health のアラートと通知に対してアラートが構成されていることを確認する",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
- "severity": "中程度",
- "text": "処理のために Azure Storage アカウントまたは Azure EventHub に送信するように Azure VMware Solution ログを構成する",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
- "severity": "低い",
- "text": "VMware vSphere での詳細な分析情報が必要な場合:vRealize Operations や vRealize Network Insights がソリューションで使用されていますか?",
- "waf": "オペレーションズ"
+ "text": "お客様のユース ケースに適した Azure VMware Solution 接続モデルが選択されているか",
+ "waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
"service": "AVS",
"severity": "高い",
- "text": "仮想マシンの vSAN ストレージ ポリシーはシック プロビジョニングを適用するため、このポリシーがデフォルトのストレージ ポリシーではないことを確認します",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
- "severity": "中程度",
- "text": "vSAN は有限のリソースであるため、vSphere コンテンツ ライブラリが vSAN に配置されていないことを確認する",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
- "severity": "中程度",
- "text": "バックアップ ソリューションのデータ リポジトリが vSAN ストレージの外部に保存されていることを確認します。Azure ネイティブまたはディスク プールでバックアップされるデータストア上",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
- "severity": "中程度",
- "text": "Azure Arc for Servers を使用して Azure VMware Solution で実行されているワークロードがハイブリッド管理されていることを確認する (Arc for Azure VMware Solution はプレビュー段階です)",
+ "text": "オンプレミスから Azure への ExpressRoute または VPN 接続が \"接続モニター\" を使用して監視されていることを確認する",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
"service": "AVS",
"severity": "中程度",
- "text": "Azure VMware Solution で実行されているワークロードが Azure Log Analytics と Azure Monitor を使用して監視されていることを確認する",
+ "text": "Azure VMware Solution バックエンドの ExpressRoute 接続を監視するために、Azure ネイティブ リソースから Azure VMware Solution 仮想マシンへの接続モニターが作成されていることを確認します",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
"service": "AVS",
"severity": "中程度",
- "text": "Azure VMware Solution で実行されているワークロードを、既存の更新プログラム管理ツールまたは Azure Update Management に含める",
+ "text": "エンド 2 エンドの接続を監視するために、オンプレミス リソースから Azure VMware Solution 仮想マシンへの接続モニターが作成されていることを確認します",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
"service": "AVS",
- "severity": "中程度",
- "text": "Azure Policy を使用して、Azure の管理、監視、セキュリティ ソリューションに Azure VMware Solution ワークロードをオンボードする",
+ "severity": "高い",
+ "text": "ルート サーバーを使用する場合は、ルート サーバーから ExR ゲートウェイ、オンプレミスに伝達されるルートが 1000 を超えないようにします (ARS 制限)。",
"waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
"service": "AVS",
- "severity": "中程度",
- "text": "Azure VMware Solution で実行されているワークロードが Microsoft Defender for Cloud にオンボードされていることを確認する",
+ "severity": "高い",
+ "text": "Azure Portal で Azure VMware Solution リソースを管理するロールに対して Privileged Identity Management が実装されていますか (永続的なアクセス許可は許可されません)",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
- "severity": "中程度",
- "text": "vSAN は有限のリソースであるため、バックアップが vSAN に保存されないようにする",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
- "severity": "中程度",
- "text": "すべてのDRソリューションが検討され、ビジネスに最適なソリューションが決定されましたか?[SRM/JetStream/Zerto/Veeam/...]",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
- "severity": "中程度",
- "text": "ディザスター リカバリー テクノロジがネイティブの Azure IaaS の場合は、Azure Site Recovery を使用します",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
"service": "AVS",
"severity": "高い",
- "text": "いずれかの災害ソリューションで自動復旧計画を使用し、手動タスクを可能な限り回避します",
- "waf": "確実"
+ "text": "Privileged Identity Management 監査レポートは、Azure VMware Solution PIM ロールに対して実装する必要がある",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
"service": "AVS",
"severity": "中程度",
- "text": "地政学的リージョンのペアをセカンダリディザスタリカバリ環境として使用する",
- "waf": "確実"
+ "text": "Privileged Identity Management を使用している場合は、Azure VMware Solution のホストの自動置換通知用の有効な SMTP レコードを使用して、有効な Entra ID が有効なアカウントが作成されていることを確認します。(常任許可が必要)",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
"service": "AVS",
"severity": "高い",
- "text": "リージョン間で 2 つの異なるアドレス空間を使用します (例: 10.0.0.0/16 と 192.168.0.0/16)。",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
- "severity": "中程度",
- "text": "ExpressRoute Global Reach は、プライマリとセカンダリの Azure VMware Solution プライベート クラウド間の接続に使用されますか、それともネットワーク仮想アプライアンスを介してルーティングされますか?",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
- "severity": "中程度",
- "text": "すべてのバックアップソリューションが検討され、ビジネスに最適なソリューションが決定されましたか?[ MABS/CommVault/Metallic.io/Veeam/ . ]",
- "waf": "確実"
+ "text": "CloudAdmin アカウントの使用を緊急アクセスのみに制限する",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
"service": "AVS",
"severity": "中程度",
- "text": "バックアップ ソリューションを Azure VMware Solution プライベート クラウドと同じリージョンにデプロイする",
- "waf": "確実"
+ "text": "vCenter Server でカスタム RBAC ロールを作成して、vCenter 内に最小特権モデルを実装します",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
"service": "AVS",
"severity": "中程度",
- "text": "バックアップ ソリューションを vSan の外部の Azure ネイティブ コンポーネントにデプロイする",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
- "severity": "低い",
- "text": "Azure プラットフォームによって管理されている VMware コンポーネントの復元を要求するプロセスは用意されていますか?",
- "waf": "確実"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
- "severity": "低い",
- "text": "手動デプロイの場合、すべての構成とデプロイを文書化する必要があります",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
- "severity": "低い",
- "text": "手動デプロイの場合は、Azure VMware Solution プライベート クラウドでの偶発的なアクションを防ぐために、リソース ロックの実装を検討してください",
- "waf": "オペレーションズ"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
- "severity": "低い",
- "text": "自動デプロイの場合は、最小限のプライベート クラウドをデプロイし、必要に応じてスケーリングします",
- "waf": "オペレーションズ"
+ "text": "cloudadmin (vCenter) と admin (NSX) の資格情報を定期的にローテーションするように定義されたプロセスです。",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
- "severity": "低い",
- "text": "自動デプロイの場合は、デプロイを開始する前にクォータを要求または予約します",
- "waf": "オペレーションズ"
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "一元化された ID プロバイダーを使用して、Azure VMware Solution で実行されているワークロード (VM) に使用する",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
"service": "AVS",
- "severity": "低い",
- "text": "自動デプロイの場合は、適切なガバナンスのために、自動化または Azure Policy を使用して関連するリソース ロックが作成されていることを確認します",
- "waf": "オペレーションズ"
+ "severity": "中程度",
+ "text": "East-West トラフィック フィルタリングは NSX-T 内に実装されていますか",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
"service": "AVS",
- "severity": "低い",
- "text": "ExR 認証キーに人間が理解できる名前を実装して、キーの目的/用途を簡単に識別できるようにします",
- "waf": "オペレーションズ"
+ "severity": "高い",
+ "text": "Azure VMware Solution 上のワークロードは、インターネットに直接公開されません。トラフィックは、Azure Application Gateway、Azure Firewall、またはサード パーティのソリューションによってフィルター処理され、検査されます",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
"service": "AVS",
- "severity": "低い",
- "text": "Azure VMware Solution と ExpressRoute のデプロイに個別のサービス プリンシパルを使用する場合は、キー コンテナーを使用してシークレットと承認キーを格納します",
- "waf": "オペレーションズ"
+ "severity": "高い",
+ "text": "監査とログ記録は、Azure VMware Solution および Azure VMware Solution ベースのワークロードへの受信インターネット要求に対して実装されます",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
"service": "AVS",
- "severity": "低い",
- "text": "Azure VMware Solution では限られた数の並列操作しかサポートされないため、Azure VMware Solution に多くのリソースをデプロイする必要がある場合に、IaC でアクションをシリアル化するためのリソースの依存関係を定義します。",
- "waf": "オペレーションズ"
+ "severity": "中程度",
+ "text": "セッション監視は、疑わしい/悪意のあるアクティビティを特定するために、Azure VMware Solution または Azure VMware Solution ベースのワークロードからの送信インターネット接続に実装されます",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
"service": "AVS",
- "severity": "低い",
- "text": "単一の Tier-1 ゲートウェイで NSX-T セグメントの自動構成を実行する場合は、NSX-Manager API ではなく Azure Portal API を使用します",
- "waf": "オペレーションズ"
+ "severity": "中程度",
+ "text": "Azure の ExR/VPN Gateway サブネットで DDoS Standard 保護が有効になっているか",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
"service": "AVS",
"severity": "中程度",
- "text": "自動スケールアウトを使用する場合は、Azure VMware Solution を実行しているサブスクリプションに対して十分な Azure VMware Solution クォータを申請してください",
- "waf": "パフォーマンス"
+ "text": "専用の特権アクセス ワークステーション (PAW) を使用して、Azure VMware Solution、vCenter、NSX Manager、HCX Manager を管理する",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
"service": "AVS",
"severity": "中程度",
- "text": "自動スケールインを使用する場合は、そのようなアクションを実行する前に、ストレージ ポリシーの要件を必ず考慮してください",
- "waf": "パフォーマンス"
+ "text": "Azure VMware Solution で実行されているワークロードに対して Advanced Threat Detection (Microsoft Defender for Cloud 別名 ASC) を有効にする",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
"service": "AVS",
"severity": "中程度",
- "text": "スケーリング操作は、一度に 1 つのスケール操作しか実行できないため、常に 1 つの SDDC 内でシリアル化する必要があります (複数のクラスタが使用されている場合でも)",
- "waf": "パフォーマンス"
+ "text": "Azure ARC for Servers を使用して、Azure ネイティブ テクノロジを使用して Azure VMware Solution で実行されているワークロードを適切に管理します (Azure ARC for Azure VMware Solution はまだ利用できません)",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
"service": "AVS",
- "severity": "中程度",
- "text": "アーキテクチャで使用されるサードパーティソリューションでのスケーリング操作を検討および検証します(サポートされているかどうか)",
- "waf": "パフォーマンス"
+ "severity": "低い",
+ "text": "Azure VMware Solution 上のワークロードで、実行時に十分なデータ暗号化 (ゲスト内ディスク暗号化や SQL TDE など) が使用されるようにします。(保存時の vSAN 暗号化がデフォルトです)",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
"service": "AVS",
- "severity": "中程度",
- "text": "自動化で環境のスケールイン/スケールアウトの上限を定義して適用する",
- "waf": "パフォーマンス"
+ "severity": "低い",
+ "text": "ゲスト内暗号化を使用する場合は、可能な場合は Azure Key Vault に暗号化キーを格納します",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
"service": "AVS",
"severity": "中程度",
- "text": "監視ルールを実装して、自動スケーリング操作を監視し、成功と失敗を監視して、適切な (自動化された) 応答を有効にします",
- "waf": "オペレーションズ"
+ "text": "Azure VMware Solution で実行されているワークロードには、拡張セキュリティ更新プログラムのサポートの使用を検討してください (Azure VMware Solution は ESU の対象です)",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
"service": "AVS",
"severity": "高い",
- "text": "MONを使用する場合は、同時に構成されたVMの制限(HCXのMON制限[400 - 標準、1000 - 大規模アプライアンス])に注意してください",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "text": "適切な vSAN データ冗長化方式(RAID 仕様)が使用されていることを確認します。",
"waf": "確実"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
"service": "AVS",
"severity": "高い",
- "text": "MON を使用する場合、100 を超えるネットワーク拡張で MON を有効にすることはできません",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "text": "許容障害ポリシーが vSAN ストレージのニーズを満たすために設定されていることを確認します",
"waf": "確実"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
"service": "AVS",
- "severity": "中程度",
- "text": "移行に VPN 接続を使用する場合は、それに応じて MTU サイズを調整します。",
- "waf": "パフォーマンス"
+ "severity": "高い",
+ "text": "十分なクォータを要求し、拡張とディザスタリカバリの要件を考慮していることを確認します",
+ "waf": "確実"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
"service": "AVS",
"severity": "中程度",
- "text": "Azure に接続する接続性の低いリージョン (500 Mbps 以下) の場合は、HCX WAN 最適化アプライアンスのデプロイを検討してください",
- "waf": "パフォーマンス"
+ "text": "ESXiへのアクセス制限を理解し、サードパーティのソリューションに影響を与える可能性のあるアクセス制限があることを確認してください。",
+ "waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
"service": "AVS",
"severity": "中程度",
- "text": "移行がオンプレミスアプライアンスから開始され、クラウドアプライアンスから開始されていないことを確認します(逆移行は実行しないでください)",
- "waf": "確実"
+ "text": "ESXi ホストの密度と効率に関するポリシーがあることを確認し、新しいノードを要求するためのリード タイムを念頭に置いてください",
+ "waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
"service": "AVS",
"severity": "中程度",
- "text": "Azure NetApp Files を使用して Azure VMware Solution のストレージを拡張する場合は、VM に直接接続するのではなく、これを VMware データストアとして使用することを検討してください。",
- "waf": "確実"
+ "text": "Azure VMware Solution の適切なコスト管理プロセスが整っていることを確認する - Azure Cost Management を使用できます",
+ "waf": "費用"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
"service": "AVS",
- "severity": "中程度",
- "text": "専用の ExpressRoute ゲートウェイが外部データ ストレージ ソリューションに使用されていることを確認する",
- "waf": "確実"
+ "severity": "低い",
+ "text": "Azure VMware Solution を使用するためのコストを最適化するために Azure 予約インスタンスが使用されているか",
+ "waf": "費用"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
"service": "AVS",
"severity": "中程度",
- "text": "外部データ ストレージ ソリューションに使用されている ExpressRoute ゲートウェイで FastPath が有効になっていることを確認します",
- "waf": "確実"
+ "text": "他の Azure Native Services を使用する場合は、Azure Private-Link の使用を検討してください",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
"service": "AVS",
"severity": "高い",
- "text": "ストレッチ クラスタを使用している場合は、選択したディザスタ リカバリ ソリューションがベンダーによってサポートされていることを確認します",
- "waf": "確実"
+ "text": "必要なすべてのリソースが同じ Azure 可用性ゾーン内に存在することを確認する",
+ "waf": "パフォーマンス"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
"service": "AVS",
- "severity": "高い",
- "text": "ストレッチ クラスターを使用する場合は、提供される SLA が要件を満たしていることを確認します",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "Azure VMware Solution ゲスト VM ワークロードに対して Microsoft Defender for Cloud を有効にする",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
"service": "AVS",
- "severity": "高い",
- "text": "ストレッチ クラスターを使用している場合は、両方の ExpressRoute 回線が接続ハブに接続されていることを確認します。",
- "waf": "確実"
+ "severity": "中程度",
+ "text": "Azure Arc 対応サーバーを使用して Azure VMware Solution ゲスト VM のワークロードを管理する",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
"service": "AVS",
"severity": "高い",
- "text": "ストレッチ クラスターを使用している場合は、両方の ExpressRoute 回線で GlobalReach が有効になっていることを確認します。",
- "waf": "確実"
+ "text": "Azure VMware Solution での診断ログとメトリック ログを有効にするEnable Diagnostic and metric logging on Azure VMware Solution",
+ "waf": "オペレーションズ"
},
{
+ "arm-service": "Microsoft.AVS/privateClouds",
"checklist": "Azure VMware Solution Design Review",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
"service": "AVS",
- "severity": "高い",
- "text": "サイトの耐障害性の設定を適切に検討し、必要に応じてビジネスに合わせて変更しましたか?",
- "waf": "確実"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
- "service": "APIM",
"severity": "中程度",
- "text": "グローバルレベルでのエラー処理ポリシーの実装",
+ "text": "Log Analytics エージェントを Azure VMware Solution ゲスト VM ワークロードにデプロイする",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
"severity": "中程度",
- "text": "すべての API ポリシーに要素が含まれていることを確認します。",
+ "text": "Azure VMware Solution VM ワークロードのバックアップ ポリシーとソリューションが文書化され、実装されていることを確認します",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
"severity": "中程度",
- "text": "ポリシーフラグメントを使用して、複数の API で同じポリシー定義を繰り返さないようにする",
- "waf": "オペレーションズ"
+ "text": "Microsoft Defender for Cloud を使用して、Azure VMware Solution で実行されているワークロードのコンプライアンス監視を行う",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
"severity": "中程度",
- "text": "API の収益化を計画している場合は、「収益化のサポート」の記事でおすすめの方法をご確認ください",
- "waf": "オペレーションズ"
+ "text": "適用可能なコンプライアンス ベースラインは Microsoft Defender for Cloud に追加されていますか",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
"severity": "高い",
- "text": "診断設定を有効にしてログを Azure Monitor にエクスポートする",
- "waf": "オペレーションズ"
+ "text": "Azure VMware Solution のデプロイに使用する Azure リージョンを選択するときにデータ所在地が評価されましたか",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "データ処理への影響 (サービス プロバイダー/サービス コンシューマー モデル) が明確で文書化されているか",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"severity": "中程度",
- "text": "Application Insights を有効にして、より詳細なテレメトリを実現する",
+ "text": "コンプライアンス上の理由で必要な場合にのみ、vSAN に CMK (カスタマー マネージド キー) を使用することを検討してください。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "Azure VMware Solution のコア監視分析情報を有効にするダッシュボードを作成するCreate dashboards to enable a core Azure VMware Solution monitoring insights",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
"severity": "高い",
- "text": "最も重要なメトリックに関するアラートを構成する",
+ "text": "Azure VMware Solution のパフォーマンス (CPU >80%、平均メモリ >80%、vSAN >70%) に関する自動アラートの重大しきい値の警告アラートを作成する",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
"severity": "高い",
- "text": "カスタム SSL 証明書が Azure Key Vault に格納され、安全にアクセスして更新できるようにする",
- "waf": "安全"
+ "text": "vSAN の消費量が 75% を下回っているかどうかを監視するための重要なアラートが作成されていることを確認します (これは VMware からのサポートしきい値です)。",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
"severity": "高い",
- "text": "Azure AD を使用して API (データ プレーン) への受信要求を保護する",
- "waf": "安全"
+ "text": "Azure Service Health のアラートと通知に対してアラートが構成されていることを確認する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
"severity": "中程度",
- "text": "Microsoft Entra ID を使用して開発者ポータルでユーザーを認証する",
- "waf": "安全"
+ "text": "処理のために Azure Storage アカウントまたは Azure EventHub に送信するように Azure VMware Solution ログを構成する",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
- "severity": "中程度",
- "text": "適切なグループを作成して、製品の可視性を制御します",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "VMware vSphere での詳細な分析情報が必要な場合:vRealize Operations や vRealize Network Insights がソリューションで使用されていますか?",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
- "severity": "中程度",
- "text": "バックエンド機能を使用して、冗長な API バックエンド構成を排除します",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "仮想マシンの vSAN ストレージ ポリシーはシック プロビジョニングを適用するため、このポリシーがデフォルトのストレージ ポリシーではないことを確認します",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
"severity": "中程度",
- "text": "名前付き値を使用して、ポリシーで使用できる共通の値を格納します",
+ "text": "vSAN は有限のリソースであるため、vSphere コンテンツ ライブラリが vSAN に配置されていないことを確認する",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
"severity": "中程度",
- "text": "DR の場合は、99.99% の SLA で 2 つ以上のリージョンにスケーリングされたデプロイで Premium レベルを活用します",
- "waf": "確実"
+ "text": "バックアップ ソリューションのデータ リポジトリが vSAN ストレージの外部に保存されていることを確認します。Azure ネイティブまたはディスク プールでバックアップされるデータストア上",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
"severity": "中程度",
- "text": "少なくとも 1 つのユニットを 2 つ以上の可用性ゾーンにデプロイして、SLA を 99.99% に向上させる",
- "waf": "確実"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
- "severity": "高い",
- "text": "自動バックアップ・ルーチンがあることを確認する",
- "waf": "確実"
+ "text": "Azure Arc for Servers を使用して Azure VMware Solution で実行されているワークロードがハイブリッド管理されていることを確認する (Arc for Azure VMware Solution はプレビュー段階です)",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"severity": "中程度",
- "text": "ポリシーを使用して、フェイルオーバー・バックエンドURLとキャッシュを追加し、コールの失敗を減らします。",
- "waf": "確実"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
- "severity": "低い",
- "text": "高パフォーマンス レベルでログを記録する必要がある場合は、Event Hubs ポリシーを検討してください",
+ "text": "Azure VMware Solution で実行されているワークロードが Azure Log Analytics と Azure Monitor を使用して監視されていることを確認する",
"waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
"severity": "中程度",
- "text": "調整ポリシーを適用して、毎秒の要求数を制御する",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
- "waf": "パフォーマンス"
+ "text": "Azure VMware Solution で実行されているワークロードを、既存の更新プログラム管理ツールまたは Azure Update Management に含める",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
"severity": "中程度",
- "text": "負荷が増加したときにインスタンスの数をスケールアウトするように自動スケーリングを構成する",
- "waf": "パフォーマンス"
+ "text": "Azure Policy を使用して、Azure の管理、監視、セキュリティ ソリューションに Azure VMware Solution ワークロードをオンボードする",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
"severity": "中程度",
- "text": "セルフホステッド ゲートウェイをデプロイする場所は、バックエンド API に近いリージョンが Azure にありません。",
- "waf": "パフォーマンス"
+ "text": "Azure VMware Solution で実行されているワークロードが Microsoft Defender for Cloud にオンボードされていることを確認する",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
"severity": "中程度",
- "text": "運用環境のワークロードには Premium レベルを使用します。",
+ "text": "vSAN は有限のリソースであるため、バックアップが vSAN に保存されないようにする",
"waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
"severity": "中程度",
- "text": "複数リージョン モデルでは、ポリシーを使用して、可用性または待機時間に基づいてリージョン バックエンドに要求をルーティングします。",
+ "text": "すべてのDRソリューションが検討され、ビジネスに最適なソリューションが決定されましたか?[SRM/JetStream/Zerto/Veeam/...]",
"waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
- "severity": "高い",
- "text": "APIM の制限に注意する",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
+ "severity": "中程度",
+ "text": "ディザスター リカバリー テクノロジがネイティブの Azure IaaS の場合は、Azure Site Recovery を使用します",
"waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
"severity": "高い",
- "text": "セルフホステッド ゲートウェイのデプロイに回復性があることを確認します。",
+ "text": "いずれかの災害ソリューションで自動復旧計画を使用し、手動タスクを可能な限り回避します",
"waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
- "severity": "中程度",
- "text": "複数リージョンのデプロイに APIM の前で Azure Front Door を使用するUse Azure Front Door in front of APIM for multi-region deployment",
- "waf": "パフォーマンス"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
"severity": "中程度",
- "text": "仮想ネットワーク (VNet) 内にサービスをデプロイするDeploy the service within a Virtual Network (VNet)",
- "waf": "安全"
+ "text": "地政学的リージョンのペアをセカンダリディザスタリカバリ環境として使用する",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
- "severity": "中程度",
- "text": "ネットワーク セキュリティ グループ (NSG) をサブネットにデプロイして、APIM との間のトラフィックを制限または監視します。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "リージョン間で 2 つの異なるアドレス空間を使用します (例: 10.0.0.0/16 と 192.168.0.0/16)。",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"severity": "中程度",
- "text": "プライベート エンドポイントをデプロイして、APIM が VNet にデプロイされていない場合に受信トラフィックをフィルター処理します。",
- "waf": "安全"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
- "severity": "高い",
- "text": "パブリックネットワークアクセスの無効化",
- "waf": "安全"
+ "text": "ExpressRoute Global Reach は、プライマリとセカンダリの Azure VMware Solution プライベート クラウド間の接続に使用されますか、それともネットワーク仮想アプライアンスを介してルーティングされますか?",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"severity": "中程度",
- "text": "PowerShell 自動化スクリプトで管理を簡素化",
- "waf": "オペレーションズ"
+ "text": "すべてのバックアップソリューションが検討され、ビジネスに最適なソリューションが決定されましたか?[ MABS/CommVault/Metallic.io/Veeam/ . ]",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
"severity": "中程度",
- "text": "Infrastructure-as-code を使用して APIM を構成します。Cloud Adaption Framework APIM Landing Zone Accelerator から DevOps のベスト プラクティスを確認する",
- "waf": "オペレーションズ"
+ "text": "バックアップ ソリューションを Azure VMware Solution プライベート クラウドと同じリージョンにデプロイする",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
"severity": "中程度",
- "text": "Visual Studio Code APIM 拡張機能の使用を促進して API 開発を迅速化する",
- "waf": "オペレーションズ"
+ "text": "バックアップ ソリューションを vSan の外部の Azure ネイティブ コンポーネントにデプロイする",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
- "severity": "中程度",
- "text": "DevOpsとCI/CDをワークフローに実装する",
- "waf": "オペレーションズ"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "Azure プラットフォームによって管理されている VMware コンポーネントの復元を要求するプロセスは用意されていますか?",
+ "waf": "確実"
},
{
- "checklist": "Azure API Management Review",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
- "severity": "中程度",
- "text": "クライアント証明書認証を使用した API の保護",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "手動デプロイの場合、すべての構成とデプロイを文書化する必要があります",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
- "severity": "中程度",
- "text": "クライアント証明書認証を使用したバックエンド サービスのセキュリティ保護",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "手動デプロイの場合は、Azure VMware Solution プライベート クラウドでの偶発的なアクションを防ぐために、リソース ロックの実装を検討してください",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
- "severity": "中程度",
- "text": "「OWASP API Security Top 10 の脅威を軽減するための推奨事項」の記事を確認し、API に適用できるものを確認します",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "自動デプロイの場合は、最小限のプライベート クラウドをデプロイし、必要に応じてスケーリングします",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
- "severity": "中程度",
- "text": "承認機能を使用して、バックエンド API の OAuth 2.0 トークンの管理を簡素化します",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "自動デプロイの場合は、デプロイを開始する前にクォータを要求または予約します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
- "severity": "高い",
- "text": "転送中の情報を暗号化する場合は、最新のTLSバージョンを使用します。可能であれば、古くて不要なプロトコルと暗号を無効にします。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "自動デプロイの場合は、適切なガバナンスのために、自動化または Azure Policy を使用して関連するリソース ロックが作成されていることを確認します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
- "severity": "高い",
- "text": "シークレット (名前付き値) が Azure Key Vault に格納され、安全にアクセスして更新できるようにする",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "ExR 認証キーに人間が理解できる名前を実装して、キーの目的/用途を簡単に識別できるようにします",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
- "severity": "中程度",
- "text": "可能な限りマネージド ID を使用して、他の Azure リソースに対する認証を行う",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "Azure VMware Solution と ExpressRoute のデプロイに個別のサービス プリンシパルを使用する場合は、キー コンテナーを使用してシークレットと承認キーを格納します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure API Management Review",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
- "severity": "高い",
- "text": "Web アプリケーション ファイアウォール (WAF) を使用するには、APIM の前に Application Gateway をデプロイします",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "Azure VMware Solution では限られた数の並列操作しかサポートされないため、Azure VMware Solution に多くのリソースをデプロイする必要がある場合に、IaC でアクションをシリアル化するためのリソースの依存関係を定義します。",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
- "severity": "高い",
- "text": "2 つのレプリカで読み取り操作の可用性を 99.9% にする",
- "waf": "確実"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
+ "severity": "低い",
+ "text": "単一の Tier-1 ゲートウェイで NSX-T セグメントの自動構成を実行する場合は、NSX-Manager API ではなく Azure Portal API を使用します",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
"severity": "中程度",
- "text": "3 つのレプリカで読み取り/書き込み操作の可用性を 99.9% に向上させる",
- "waf": "確実"
+ "text": "自動スケールアウトを使用する場合は、Azure VMware Solution を実行しているサブスクリプションに対して十分な Azure VMware Solution クォータを申請してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
- "severity": "高い",
- "text": "読み取りレプリカや書き込みレプリカを有効にすることでアベイラビリティーゾーンを活用する",
- "waf": "確実"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
+ "severity": "中程度",
+ "text": "自動スケールインを使用する場合は、そのようなアクションを実行する前に、ストレージ ポリシーの要件を必ず考慮してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
"severity": "中程度",
- "text": "リージョンの冗長性については、地理的リージョン間で検索インデックスをレプリケートする自動化された方法が提供されないため、検索用に 2 つ以上のリージョンにサービスを手動で作成します",
- "waf": "確実"
+ "text": "スケーリング操作は、一度に 1 つのスケール操作しか実行できないため、常に 1 つの SDDC 内でシリアル化する必要があります (複数のクラスタが使用されている場合でも)",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
"severity": "中程度",
- "text": "複数のサービス間でデータを同期するには、複数のサービスでコンテンツを更新するためにインデクサーを使用するか、複数のサービスでコンテンツの更新をプッシュするために REST API を使用する",
- "waf": "確実"
+ "text": "アーキテクチャで使用されるサードパーティソリューションでのスケーリング操作を検討および検証します(サポートされているかどうか)",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
"severity": "中程度",
- "text": "Azure Traffic Manager を使用して要求を調整する",
- "waf": "確実"
+ "text": "自動化で環境のスケールイン/スケールアウトの上限を定義して適用する",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
- "severity": "高い",
- "text": "Azure Cognitive Search インデックスをバックアップおよび復元します。このサンプル コードを使用して、インデックス定義とスナップショットを一連の Json ファイルにバックアップします",
- "waf": "確実"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
+ "severity": "中程度",
+ "text": "監視ルールを実装して、自動スケーリング操作を監視し、成功と失敗を監視して、適切な (自動化された) 応答を有効にします",
+ "waf": "オペレーションズ"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
- "severity": "中程度",
- "text": "フレキシブル サーバーの活用",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "MONを使用する場合は、同時に構成されたVMの制限(HCXのMON制限[400 - 標準、1000 - 大規模アプライアンス])に注意してください",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
"waf": "確実"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "高い",
- "text": "Availability Zones (地域的に適用可能な場合) を活用する",
+ "text": "MON を使用する場合、100 を超えるネットワーク拡張で MON を有効にすることはできません",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "確実"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
"severity": "中程度",
- "text": "リージョン間の DR シナリオでのデータイン レプリケーションの活用",
- "waf": "確実"
+ "text": "移行に VPN 接続を使用する場合は、それに応じて MTU サイズを調整します。",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
"severity": "中程度",
- "text": "Azure Data Factory の FTA 回復性プレイブックの活用",
- "waf": "確実"
+ "text": "Azure に接続する接続性の低いリージョン (500 Mbps 以下) の場合は、HCX WAN 最適化アプライアンスのデプロイを検討してください",
+ "waf": "パフォーマンス"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
- "severity": "高い",
- "text": "Availability Zones をサポートするリージョンでゾーン冗長パイプラインを使用するUse zone redundant pipelines in regions that support Availability Zones",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
+ "severity": "中程度",
+ "text": "移行がオンプレミスアプライアンスから開始され、クラウドアプライアンスから開始されていないことを確認します(逆移行は実行しないでください)",
"waf": "確実"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
"severity": "中程度",
- "text": "DevOps を使用して Github と Azure DevOps の統合で ARM テンプレートをバックアップする",
+ "text": "Azure NetApp Files を使用して Azure VMware Solution のストレージを拡張する場合は、VM に直接接続するのではなく、これを VMware データストアとして使用することを検討してください。",
"waf": "確実"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"severity": "中程度",
- "text": "セルフホステッド統合ランタイム VM を別のリージョンにレプリケートしてください",
+ "text": "専用の ExpressRoute ゲートウェイが外部データ ストレージ ソリューションに使用されていることを確認する",
"waf": "確実"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
"severity": "中程度",
- "text": "必ず、姉妹リージョンでネットワークをレプリケートまたは複製してください。別のリージョンに VNet のコピーを作成する必要があります",
+ "text": "外部データ ストレージ ソリューションに使用されている ExpressRoute ゲートウェイで FastPath が有効になっていることを確認します",
"waf": "確実"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "description": "ADF パイプラインで Key Vault が使用されている場合は、Key Vault をレプリケートするために何もする必要はありません。Key Vault はマネージド サービスであり、Microsoft が処理します",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
- "severity": "低い",
- "text": "Keyvault 統合を使用している場合は、Keyvault の SLA を使用して可用性を把握します",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "ストレッチ クラスタを使用している場合は、選択したディザスタ リカバリ ソリューションがベンダーによってサポートされていることを確認します",
"waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub は、保存データの暗号化を提供します。独自のキーを使用する場合、データは引き続き Microsoft マネージド キーを使用して暗号化されますが、さらに Microsoft マネージド キーはカスタマー マネージド キーを使用して暗号化されます。",
- "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
- "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
- "service": "Event Hubs",
- "severity": "低い",
- "text": "必要に応じて、保存データの暗号化でカスタマー マネージド キー オプションを使用する",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "ストレッチ クラスターを使用する場合は、提供される SLA が要件を満たしていることを確認します",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hubs 名前空間を使用すると、クライアントは TLS 1.0 以降でデータを送受信できます。より厳格なセキュリティ対策を適用するには、クライアントが新しいバージョンの TLS を使用してデータを送受信するように Event Hubs 名前空間を構成できます。Event Hubs 名前空間で TLS の最小バージョンが必要な場合、古いバージョンで行われた要求はすべて失敗します。",
- "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
- "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
- "service": "Event Hubs",
- "severity": "中程度",
- "text": "要求に最低限必要なバージョンのトランスポート層セキュリティ (TLS) を適用する",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "ストレッチ クラスターを使用している場合は、両方の ExpressRoute 回線が接続ハブに接続されていることを確認します。",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Event Hubs 名前空間を作成すると、名前空間に対して RootManageSharedAccessKey という名前のポリシー規則が自動的に作成されます。このポリシーには、名前空間全体に対する管理アクセス許可があります。このルールは、管理ルートアカウントのように扱い、アプリケーションでは使用しないことをお勧めします。RBAC で認証プロバイダーとして AAD を使用することをお勧めします。",
- "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
- "service": "Event Hubs",
- "severity": "中程度",
- "text": "必要のない場合はrootアカウントの使用を避けてください",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "ストレッチ クラスターを使用している場合は、両方の ExpressRoute 回線で GlobalReach が有効になっていることを確認します。",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure リソースのマネージド ID は、Azure Virtual Machines (VM)、関数アプリ、Virtual Machine Scale Sets、その他のサービスで実行されているアプリケーションから Azure AD 資格情報を使用して、Event Hubs リソースへのアクセスを承認できます。Azure リソースのマネージド ID を Azure AD 認証と共に使用することで、クラウドで実行されるアプリケーションに資格情報を格納することを回避できます。",
- "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
- "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
- "service": "Event Hubs",
- "severity": "中程度",
- "text": "可能な場合は、アプリケーションでマネージド ID を使用して Azure Event Hub に対する認証を行う必要があります。そうでない場合は、ストレージ資格情報 (SAS、サービス プリンシパル資格情報) を Azure Key Vault または同等のサービスに用意することを検討してください",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
+ "severity": "高い",
+ "text": "サイトの耐障害性の設定を適切に検討し、必要に応じてビジネスに合わせて変更しましたか?",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "アクセス許可を作成するときは、Azure Event Hub へのクライアントのアクセスをきめ細かく制御します。Azure Event Hub のアクセス許可は、個々のリソース レベル (コンシューマー グループ、イベント ハブ エンティティ、イベント ハブ名前空間など) にスコープを設定する必要があり、またそうする必要があります。",
- "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
+ "service": "IoT Hub DPS",
"severity": "高い",
- "text": "最小特権データ プレーン RBAC を使用する",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "安全"
+ "text": "ビジネスと SLO の要件に基づいて適切なロジック アプリのホスティング プランを選択する",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub リソース ログには、操作ログ、仮想ネットワーク、Kafka ログが含まれます。ランタイム監査ログは、Event Hubs のすべてのデータ プレーン アクセス操作 (イベントの送受信など) に関する集計された診断情報をキャプチャします。",
- "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
- "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
- "service": "Event Hubs",
- "severity": "中程度",
- "text": "セキュリティ調査のログ記録を有効にします。Azure Monitor を使用して、リソース ログ、ランタイム監査ログ、Kafka ログなどのメトリックとログをキャプチャします",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "安全"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "IoT Hub DPS",
+ "severity": "高い",
+ "text": "ゾーンの冗長性と可用性ゾーンを使用してリージョンの障害からロジック アプリを保護する",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "既定では、Azure Event Hub にはパブリック IP アドレスがあり、インターネットに到達できます。プライベート エンドポイントを使用すると、仮想ネットワークと Azure Event Hub の間のトラフィックが Microsoft のバックボーン ネットワークを経由するようになります。それに加えて、パブリックエンドポイントを使用しない場合は無効にする必要があります。",
- "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
- "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
- "service": "Event Hubs",
- "severity": "中程度",
- "text": "プライベート エンドポイントを使用して Azure Event Hub にアクセスし、該当する場合はパブリック ネットワーク アクセスを無効にすることを検討してください。",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "安全"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "8aed4fbf-0830-4883-899d-222a154af478",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "IoT Hub DPS",
+ "severity": "高い",
+ "text": "重要なワークロードに対するリージョン間 DR 戦略を検討する",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "IP ファイアウォールを使用すると、パブリック エンドポイントを、CIDR (Classless Inter-Domain Routing) 表記の一連の IPv4 アドレスまたは IPv4 アドレス範囲のみに制限できます。",
- "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
- "service": "Event Hubs",
- "severity": "中程度",
- "text": "特定の IP アドレスまたは範囲からの Azure Event Hub 名前空間へのアクセスのみを許可することを検討してください",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "安全"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "IoT Hub DPS",
+ "severity": "高い",
+ "text": "分離環境にデプロイする場合は、App Service Environment (ASE) v3 を使用するか、それらに移行します",
+ "waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "IoT Hub DPS",
"severity": "中程度",
- "text": "FTAレジリエンシーハンドブックの活用",
- "waf": "確実"
+ "text": "Azure DevOps または GitHub を活用して CI/CD を合理化し、ロジック アプリ コードを保護",
+ "waf": "オペレーションズ"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "これは、ゾーン対応リージョンの Premium、Dedicated、または Standard SKU を使用してポータルから作成された新しい EH 名前空間に対して自動的にオンになります。EH メタデータとイベント データ自体の両方がゾーン間でレプリケートされます",
- "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
- "service": "Event Hubs",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
"severity": "高い",
- "text": "Availability Zones の活用 (地域的に適用可能な場合)",
+ "text": "Azure Cache for Redis のゾーン冗長を有効にします。Azure Cache for Redis では、Premium レベルと Enterprise レベルでゾーン冗長構成がサポートされています。ゾーン冗長キャッシュでは、同じリージョン内の異なる Azure Availability Zones にノードを配置できます。これにより、データセンターや AZ の停止が単一障害点として排除され、キャッシュの全体的な可用性が向上します。",
"waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
- "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
- "service": "Event Hubs",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
"severity": "中程度",
- "text": "予測可能なパフォーマンスのために Premium または Dedicated SKU を使用する",
- "waf": "確実"
- },
- {
- "checklist": "Azure Event Hub Review",
- "description": "組み込みの geo ディザスター リカバリー機能を有効にすると、名前空間の構成全体 (Event Hubs、コンシューマー グループ、設定) がプライマリ名前空間からセカンダリ名前空間に継続的にレプリケートされ、プライマリからセカンダリへのフェールオーバーをいつでも 1 回だけ行うことができます。アクティブ/パッシブ機能は、アプリケーション構成を変更することなく、障害が発生した Azure リージョンからの復旧と破棄を容易にするように設計されています",
- "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
- "service": "Event Hubs",
- "severity": "高い",
- "text": "アクティブ パッシブ構成を使用した Geo ディザスター リカバリーの計画",
+ "text": "Azure Cache for Redis インスタンスのデータ永続化を構成します。キャッシュ データはメモリに格納されるため、まれに複数のノードで計画外の障害が発生すると、すべてのデータがドロップされる可能性があります。データの完全な損失を回避するために、Redis 永続化では、メモリ内データのスナップショットを定期的に取得し、ストレージ アカウントに格納できます。",
"waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "ダウンしたリージョンでのイベントデータの停止または損失を許容できない DR 構成に使用する必要があります。このような場合は、レプリケーションのガイダンスに従い、組み込みの geo ディザスター リカバリー機能 (アクティブ/パッシブ) を使用しないでください。アクティブ/アクティブでは、異なるリージョンと名前空間で複数の Event Hubs を保持し、イベントはハブ間でレプリケートされます",
- "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
- "service": "Event Hubs",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
"severity": "中程度",
- "text": "ビジネス クリティカルなアプリケーションの場合は、アクティブ アクティブ構成を使用します",
+ "text": "geo 冗長ストレージ アカウントを使用して Azure Cache for Redis データを保持するか、geo 冗長性を使用できない場合はゾーン冗長を使用します",
"waf": "確実"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
- "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
- "service": "Event Hubs",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
"severity": "中程度",
- "text": "回復力のある Event Hubs の設計",
+ "text": "Premium Azure Cache for Redis インスタンスのパッシブ geo レプリケーションを構成します。geo レプリケーションは、2 つ以上の Azure Cache for Redis インスタンス (通常は 2 つの Azure リージョンにまたがる) をリンクするためのメカニズムです。geo レプリケーションは、主にリージョン間のディザスター リカバリー用に設計されています。2 つの Premium レベルのキャッシュ インスタンスは、プライマリ キャッシュへの読み取りと書き込みを提供する方法で geo レプリケーションを介して接続され、そのデータはセカンダリ キャッシュにレプリケートされます。",
"waf": "確実"
}
],
"metadata": {
"name": "WAF checklist",
- "timestamp": "June 24, 2024"
+ "timestamp": "October 02, 2024"
},
"severities": [
{
@@ -7848,7 +10008,7 @@
},
{
"description": "推奨事項は理解されているが、現在の要件では不要",
- "name": "リスクの受け入れ"
+ "name": "必要なし"
},
{
"description": "現在のデザインには適用されません",
diff --git a/checklists/waf_checklist.ko.json b/checklists/waf_checklist.ko.json
index e1312fbf2..3727c709f 100644
--- a/checklists/waf_checklist.ko.json
+++ b/checklists/waf_checklist.ko.json
@@ -1,6157 +1,8115 @@
{
"items": [
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
- "severity": "낮다",
- "text": "AKS Windows 워크로드에 필요한 경우 HostProcess 컨테이너를 사용할 수 있습니다.",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
+ "severity": "높다",
+ "text": "Azure Cache for Redis에 대한 영역 중복성을 사용하도록 설정합니다. Azure Cache for Redis는 프리미엄 및 엔터프라이즈 계층에서 영역 중복 구성을 지원합니다. 영역 중복 캐시는 동일한 지역의 여러 Azure 가용성 영역에 노드를 배치할 수 있습니다. 데이터 센터 또는 AZ 중단을 단일 장애 지점으로 제거하고 캐시의 전반적인 가용성을 높입니다.",
"waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "severity": "낮다",
- "text": "이벤트 기반 워크로드를 실행하는 경우 KEDA 사용Use KEDA if running event-driven workloads",
- "waf": "공연"
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
+ "severity": "보통",
+ "text": "Azure Cache for Redis 인스턴스에 대한 데이터 지속성을 구성합니다. 캐시 데이터는 메모리에 저장되기 때문에 드물게 계획되지 않은 여러 노드의 오류로 인해 모든 데이터가 삭제될 수 있습니다. 데이터가 완전히 손실되는 것을 방지하기 위해 Redis 지속성을 사용하면 메모리 내 데이터의 주기적인 스냅숏을 만들어 저장소 계정에 저장할 수 있습니다.",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
- "severity": "낮다",
- "text": "Dapr을 사용하여 마이크로 서비스 개발 용이",
- "waf": "작업"
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
+ "severity": "보통",
+ "text": "지역 중복 스토리지 계정을 사용하여 Azure Cache for Redis 데이터를 유지하거나 지역 중복을 사용할 수 없는 경우 영역 중복을 유지합니다",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
- "severity": "높다",
- "text": "SLA 지원 AKS 제품 사용",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
+ "severity": "보통",
+ "text": "프리미엄 Azure Cache for Redis 인스턴스에 대한 수동 지역 복제를 구성합니다. 지역에서 복제는 일반적으로 두 개의 Azure 지역에 걸쳐 있는 둘 이상의 Azure Cache for Redis 인스턴스를 연결하는 메커니즘입니다. 지역에서 복제는 주로 지역 간 재해 복구를 위해 설계되었습니다. 두 개의 프리미엄 계층 캐시 인스턴스는 주 캐시에 대한 읽기 및 쓰기를 제공하는 방식으로 지역 복제를 통해 연결되며, 해당 데이터는 보조 캐시에 복제됩니다.",
"waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "낮다",
- "text": "Pod 및 배포 정의에서 중단 예산 사용Use Disruption Budgets in your pod and deployment definitions",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
+ "severity": "높다",
+ "text": "비즈니스 및 SLO 요구 사항에 따라 올바른 Logic App 호스팅 계획 선택Select the right Logic App hosting plan based on your business & SLO requirements",
"waf": "신뢰도"
},
{
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
"severity": "높다",
- "text": "개인 레지스트리를 사용하는 경우 여러 지역에 이미지를 저장하도록 지역 복제를 구성합니다",
+ "text": "영역 중복 및 가용성 영역을 사용하여 지역 오류로부터 논리 앱 보호Protect logic apps from region failures with zone redundancy and availability zones",
"waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
- "severity": "낮다",
- "text": "kubecost와 같은 외부 애플리케이션을 사용하여 다른 사용자에게 비용 할당",
- "waf": "비용"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
+ "severity": "높다",
+ "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
- "severity": "낮다",
- "text": "축소 모드를 사용하여 노드 삭제/할당 취소",
- "waf": "비용"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
+ "severity": "높다",
+ "text": "격리된 환경에 배포하는 경우 ASE(App Service Environment) v3을 사용하거나 마이그레이션합니다",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
"severity": "보통",
- "text": "필요한 경우 AKS 클러스터에서 다중 인스턴스 분할 GPU 사용",
- "waf": "비용"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
- "severity": "낮다",
- "text": "개발/테스트 클러스터를 실행하는 경우 NodePool 시작/중지를 사용합니다.",
- "waf": "비용"
+ "text": "Azure DevOps 또는 GitHub를 활용하여 CI/CD를 간소화하고 논리 앱 코드를 보호합니다.",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
- "severity": "보통",
- "text": "Kubernetes용 Azure Policy를 사용하여 클러스터 규정 준수 보장",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "ADDS 도메인 컨트롤러가 네이티브 Azure의 ID 구독에 배포되었는지 확인합니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
+ "service": "AVS",
"severity": "보통",
- "text": "사용자/시스템 노드 풀이 있는 컨트롤 플레인에서 응용 프로그램 분리",
+ "text": "ADDS 사이트 및 서비스가 Azure 기반 리소스(Azure VMware Solution 포함)의 인증 요청을 Azure에 로컬로 유지하도록 구성되어 있는지 확인합니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "낮다",
- "text": "시스템 nodepool에 taint를 추가하여 전용으로 만듭니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "vCenter가 ADDS에 연결되어 있는지 확인하여 '명명된 사용자 계정'을 기반으로 인증을 사용하도록 설정합니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
+ "service": "AVS",
"severity": "보통",
- "text": "이미지에 개인 레지스트리(예: ACR) 사용",
+ "text": "vCenter에서 ADDS로의 연결이 보안 프로토콜(LDAPS)을 사용하고 있는지 확인합니다.",
"waf": "안전"
},
{
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
+ "service": "AVS",
"severity": "보통",
- "text": "이미지에서 취약성 검사",
+ "text": "vCenter IdP의 CloudAdmin 계정은 긴급 계정으로만 사용됩니다(Break-glass).",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
+ "service": "AVS",
"severity": "높다",
- "text": "앱 분리 요구 사항 정의(네임스페이스/노드 풀/클러스터)",
+ "text": "NSX-Manager가 외부 ID 제공자(LDAPS)와 통합되었는지 확인합니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
+ "service": "AVS",
"severity": "보통",
- "text": "CSI 비밀 저장소 드라이버를 사용하여 Azure Key Vault에 비밀 저장",
- "waf": "안전"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
- "severity": "높다",
- "text": "클러스터에 서비스 주체를 사용하는 경우 주기적으로(예: 분기별) 자격 증명을 새로 고칩니다",
+ "text": "VMware vSphere에서 사용하기 위해 RBAC 모델이 생성되었습니까?",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
+ "service": "AVS",
"severity": "보통",
- "text": "필요한 경우 키 관리 서비스 etcd 암호화를 추가합니다.",
+ "text": "RBAC 권한은 특정 사용자가 아닌 ADDS 그룹에 부여해야 합니다",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
- "severity": "낮다",
- "text": "필요한 경우 AKS용 기밀 컴퓨팅을 사용하는 것이 좋습니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure의 Azure VMware Solution 리소스에 대한 RBAC 권한은 제한된 소유자 집합으로만 '잠김'됩니다",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
- "severity": "보통",
- "text": "컨테이너용 Defender 사용 고려",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "모든 사용자 지정 역할의 범위가 CloudAdmin 허용 권한 부여로 지정되었는지 확인합니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
+ "service": "AVS",
"severity": "높다",
- "text": "서비스 주체 대신 관리 ID 사용",
- "waf": "안전"
+ "text": "현재 고객 사용 사례에 대해 올바른 Azure VMware Solution 연결 모델을 선택했습니까?",
+ "waf": "공연"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "'연결 모니터'를 사용하여 온-프레미스에서 Azure로의 ExpressRoute 또는 VPN 연결이 모니터링되는지 확인합니다.",
+ "waf": "작업"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
+ "service": "AVS",
"severity": "보통",
- "text": "AAD와 인증 통합(관리형 통합 사용)",
- "waf": "안전"
+ "text": "Azure VMware Solution 백 엔드 ExpressRoute 연결을 모니터링하기 위해 Azure 네이티브 리소스에서 Azure VMware Solution 가상 머신으로 연결 모니터가 만들어졌는지 확인합니다.",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
+ "service": "AVS",
"severity": "보통",
- "text": "관리자 kubeconfig에 대한 액세스 제한(get-credentials --admin)",
+ "text": "엔드-2-엔드 연결을 모니터링하기 위해 온-프레미스 리소스에서 Azure VMware Solution 가상 머신으로 연결 모니터가 만들어졌는지 확인합니다.",
+ "waf": "작업"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "경로 서버를 사용하는 경우 경로 서버에서 ExR 게이트웨이로, 온-프레미스로 1,000개 이상의 경로가 전파되지 않도록 합니다(ARS 제한).",
+ "waf": "작업"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure Portal에서 Azure VMware Solution 리소스를 관리하는 역할에 대해 Privileged Identity Management가 구현되어 있나요(고정 권한이 허용되지 않음).",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure VMware Solution PIM 역할에 대해 Privileged Identity Management 감사 보고를 구현해야 합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
+ "service": "AVS",
"severity": "보통",
- "text": "AAD RBAC와 권한 부여 통합",
+ "text": "Privileged Identity Management를 사용하는 경우 Azure VMware Solution 자동 호스트 교체 알림에 대한 유효한 SMTP 레코드를 사용하여 유효한 Entra ID 사용 계정을 만들었는지 확인합니다. (상시 권한 필요)",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
+ "service": "AVS",
"severity": "높다",
- "text": "쿠버네티스에서 RBAC 권한을 제한하기 위해 네임스페이스 사용",
+ "text": "CloudAdmin 계정 사용을 긴급 액세스로만 제한",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
+ "service": "AVS",
"severity": "보통",
- "text": "Pod ID 액세스 관리의 경우 Azure AD 워크로드 ID(미리 보기)를 사용합니다.",
+ "text": "vCenter에서 사용자 지정 RBAC 역할을 만들어 vCenter 내에서 최소 권한 모델 구현",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
+ "service": "AVS",
"severity": "보통",
- "text": "AKS 비대화형 로그인의 경우 kubelogin(미리 보기)을 사용합니다.",
+ "text": "cloudadmin(vCenter) 및 admin(NSX) 자격 증명을 정기적으로 순환하도록 정의된 프로세스입니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure VMware Solution에서 실행되는 워크로드(VM)에 사용할 중앙 집중식 ID 공급자 사용",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
+ "service": "AVS",
"severity": "보통",
- "text": "AKS 로컬 계정 사용 안 함",
+ "text": "NSX-T 내에서 East-West 트래픽 필터링이 구현되었는지 여부",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "낮다",
- "text": "필요한 경우 Just-in-time 클러스터 액세스 구성",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure VMware Solution의 워크로드는 인터넷에 직접 노출되지 않습니다. 트래픽은 Azure Application Gateway, Azure Firewall 또는 제3자 솔루션에 의해 필터링되고 검사됩니다",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "낮다",
- "text": "AKS에 필요한 경우 AAD 조건부 액세스 구성",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "감사 및 로깅은 Azure VMware Solution 및 Azure VMware Solution 기반 워크로드에 대한 인바운드 인터넷 요청에 대해 구현됩니다",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
- "severity": "낮다",
- "text": "Windows AKS 워크로드에 필요한 경우 gMSA를 구성합니다. ",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "세션 모니터링은 의심스러운/악의적인 활동을 식별하기 위해 Azure VMware Solution 또는 Azure VMware Solution 기반 워크로드의 아웃바운드 인터넷 연결에 대해 구현됩니다",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
+ "service": "AVS",
"severity": "보통",
- "text": "더 세밀하게 제어하려면 관리형 Kubelet ID를 사용하는 것이 좋습니다.",
+ "text": "Azure의 ExR/VPN Gateway 서브넷에서 DDoS 표준 보호를 사용할 수 있나요?",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
+ "service": "AVS",
"severity": "보통",
- "text": "AGIC를 사용하는 경우 클러스터 간에 AppGW를 공유하지 마세요",
- "waf": "신뢰도"
+ "text": "전용 PAW(Privileged Access Workstation)를 사용하여 Azure VMware Solution, vCenter, NSX Manager 및 HCX Manager 관리",
+ "waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
- "severity": "높다",
- "text": "AKS HTTP 라우팅 추가 기능을 사용하지 말고, 애플리케이션 라우팅 추가 기능과 함께 관리되는 NGINX 수신을 대신 사용합니다.",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "Azure VMware Solution에서 실행되는 워크로드에 대해 Advanced Threat Detection(클라우드용 Microsoft Defender 또는 ASC) 사용",
+ "waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
+ "service": "AVS",
"severity": "보통",
- "text": "Windows 워크로드의 경우 가속화된 네트워킹을 사용합니다.",
- "waf": "공연"
+ "text": "서버용 Azure ARC를 사용하여 Azure 네이티브 기술을 사용하여 Azure VMware Solution에서 실행되는 워크로드를 적절하게 제어합니다(Azure VMware Solution용 Azure ARC는 아직 사용할 수 없음).",
+ "waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
- "severity": "높다",
- "text": "표준 ALB 사용(기본 ALB와 반대)",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "Azure VMware Solution의 워크로드가 런타임 중에 충분한 데이터 암호화(예: 게스트 내 디스크 암호화 및 SQL TDE)를 사용하는지 확인합니다. (vSAN 미사용 암호화가 기본값임)",
+ "waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
- "severity": "보통",
- "text": "Azure CNI를 사용하는 경우 NodePools에 다른 서브넷을 사용하는 것이 좋습니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "게스트 내 암호화를 사용하는 경우 가능한 경우 Azure Key Vault에 암호화 키를 저장합니다",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
+ "service": "AVS",
"severity": "보통",
- "text": "프라이빗 엔드포인트(기본 설정) 또는 Virtual Network 서비스 엔드포인트를 사용하여 클러스터에서 PaaS 서비스에 액세스",
+ "text": "Azure VMware Solution에서 실행되는 워크로드에 대해 확장된 보안 업데이트 지원을 사용하는 것이 좋습니다(Azure VMware Solution은 ESU에 적합함).",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
+ "service": "AVS",
"severity": "높다",
- "text": "요구 사항에 가장 적합한 CNI 네트워크 플러그 인 선택(Azure CNI 권장)",
+ "text": "적절한 vSAN 데이터 이중화 방법이 사용되는지 확인합니다(RAID 규격).",
"waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "높다",
- "text": "Azure CNI를 사용하는 경우 노드당 최대 Pod 수를 고려하여 서브넷 크기를 적절하게 조정합니다",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
+ "service": "AVS",
"severity": "높다",
- "text": "Azure CNI를 사용하는 경우 최대 Pod/노드(기본값 30)를 확인합니다.",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "내부 앱의 경우 조직은 방화벽에서 전체 AKS 서브넷을 여는 경우가 많습니다. 이렇게 하면 노드에 대한 네트워크 액세스도 열리고 잠재적으로 Pod에 대한 액세스도 열립니다(Azure CNI를 사용하는 경우). LoadBalancer IP가 다른 서브넷에 있는 경우 앱 클라이언트에서 이 IP만 사용할 수 있어야 합니다. 또 다른 이유는 AKS 서브넷의 IP 주소가 부족한 리소스인 경우 서비스에 해당 IP 주소를 사용하면 클러스터의 최대 확장성이 감소하기 때문입니다.",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
- "severity": "낮다",
- "text": "개인 IP LoadBalancer 서비스를 사용하는 경우 AKS 서브넷이 아닌 전용 서브넷을 사용합니다",
- "waf": "안전"
+ "text": "vSAN 스토리지 요구 사항을 충족하기 위해 장애 허용 정책이 적용되어 있는지 확인합니다",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
+ "service": "AVS",
"severity": "높다",
- "text": "그에 따라 서비스 IP 주소 범위의 크기를 조정합니다(클러스터 확장성이 제한됨).",
+ "text": "충분한 할당량을 요청했는지 확인하고 성장 및 재해 복구 요구 사항을 고려했는지 확인합니다",
"waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
- "severity": "낮다",
- "text": "필요한 경우 자체 CNI 플러그인을 추가합니다.",
- "waf": "안전"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "ESXi에 대한 액세스 제약 조건을 이해하고 타사 솔루션에 영향을 줄 수 있는 액세스 제한이 있는지 확인합니다.",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
- "severity": "낮다",
- "text": "필요한 경우 AKS에서 노드당 공용 IP 구성",
- "waf": "공연"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "새 노드 요청에 대한 리드 타임을 염두에 두고 ESXi 호스트 밀도 및 효율성에 대한 정책이 있는지 확인합니다",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
+ "service": "AVS",
"severity": "보통",
- "text": "수신 컨트롤러를 사용하여 LoadBalancer 유형 서비스를 사용하여 노출하는 대신 웹 기반 앱을 노출합니다",
- "waf": "신뢰도"
+ "text": "Azure VMware Solution에 대한 적절한 비용 관리 프로세스가 있는지 확인 - Azure Cost Management를 사용할 수 있습니다.",
+ "waf": "비용"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
+ "service": "AVS",
"severity": "낮다",
- "text": "송신 트래픽 크기 조정을 위해 Azure NAT Gateway를 outboundType으로 사용",
- "waf": "신뢰도"
+ "text": "Azure VMware Solution 사용 비용을 최적화하는 데 사용되는 Azure 예약 인스턴스입니까?",
+ "waf": "비용"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
+ "service": "AVS",
"severity": "보통",
- "text": "Azure CNI IP 소모를 방지하기 위해 IP의 동적 할당 사용",
- "waf": "신뢰도"
+ "text": "다른 Azure 네이티브 서비스를 사용할 때 Azure Private-Link 사용 고려",
+ "waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
+ "service": "AVS",
"severity": "높다",
- "text": "보안 요구 사항에 필요한 경우 AzFW/NVA를 사용하여 송신 트래픽 필터링",
+ "text": "필요한 모든 리소스가 동일한 Azure 가용성 영역 내에 있는지 확인합니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "Azure VMware Solution 게스트 VM 워크로드에 대해 클라우드용 Microsoft Defender 사용",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
+ "service": "AVS",
"severity": "보통",
- "text": "퍼블릭 API 엔드포인트를 사용하는 경우 액세스할 수 있는 IP 주소를 제한합니다",
+ "text": "Azure Arc 지원 서버를 사용하여 Azure VMware Solution 게스트 VM 워크로드 관리",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "service": "AVS",
"severity": "높다",
- "text": "요구 사항에 따라 개인 클러스터를 사용합니다",
- "waf": "안전"
+ "text": "Azure VMware Solution에서 진단 및 메트릭 로깅 사용Enable Diagnostic and metric logging on Azure VMware Solution",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "service": "AVS",
"severity": "보통",
- "text": "Windows 2019 및 2022 AKS 노드의 경우 Calico 네트워크 정책을 사용할 수 있습니다. ",
- "waf": "안전"
+ "text": "Azure VMware Solution 게스트 VM 워크로드에 Log Analytics 에이전트 배포",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
- "severity": "높다",
- "text": "Kubernetes 네트워크 정책 옵션 사용(Calico/Azure)",
- "waf": "안전"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "Azure VMware Solution VM 워크로드에 대한 백업 정책 및 솔루션을 문서화하고 구현했는지 확인합니다.",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "severity": "높다",
- "text": "쿠버네티스 네트워크 정책을 사용하여 클러스터 내 보안 강화",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "클라우드용 Microsoft Defender를 사용하여 Azure VMware Solution에서 실행되는 워크로드의 규정 준수 모니터링",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "severity": "높다",
- "text": "웹 워크로드(UI 또는 API)에 WAF 사용Use a WAF for web workloads (UIs or APIs)",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "적용 가능한 규정 준수 기준이 클라우드용 Microsoft Defender에 추가되었나요?",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
- "severity": "보통",
- "text": "AKS Virtual Network에서 DDoS 표준 사용Use DDoS Standard in the AKS Virtual Network",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure VMware Solution 배포에 사용할 Azure 지역을 선택할 때 데이터 보존이 평가되었나요?",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
- "severity": "낮다",
- "text": "필요한 경우 회사 HTTP 프록시를 추가합니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "데이터 처리의 영향(서비스 제공자/서비스 소비자 모델)이 명확하고 문서화되어 있습니까?",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"severity": "보통",
- "text": "고급 마이크로서비스 통신 관리를 위해 서비스 메시를 사용하는 것이 좋습니다",
+ "text": "규정 준수를 위해 필요한 경우에만 vSAN에 CMK(고객 관리 키)를 사용하는 것이 좋습니다.",
"waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
"severity": "높다",
- "text": "가장 중요한 메트릭에 대한 경고 구성(권장 사항은 Container Insights 참조)",
+ "text": "핵심 Azure VMware Solution 모니터링 인사이트를 사용하도록 설정하는 대시보드 만들기",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
- "severity": "낮다",
- "text": "Azure Advisor에서 클러스터에 대한 권장 사항을 정기적으로 확인합니다.",
- "waf": "작업"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
- "severity": "낮다",
- "text": "AKS 자동 인증서 회전 사용",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "Azure VMware Solution 성능에 대한 자동 경고에 대한 중요 임계값에 대한 경고 만들기(CPU >80%, 평균 메모리>80%, vSAN>70%)",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
"severity": "높다",
- "text": "kubernetes 버전을 주기적으로(예: 분기별) 업그레이드하거나 AKS 자동 업그레이드 기능을 사용하는 정기적인 프로세스가 있습니다.",
+ "text": "VMware의 지원 임계값이므로 vSAN 사용량이 75% 미만인지 모니터링하기 위해 중요한 경고가 생성되었는지 확인합니다.",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
"severity": "높다",
- "text": "node-image upgrade를 사용하지 않는 경우 Linux 노드 업그레이드에 kured를 사용합니다.",
+ "text": "Azure Service Health 경고 및 알림에 대해 경고가 구성되었는지 확인",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
- "severity": "높다",
- "text": "클러스터 노드 이미지를 주기적으로(예: 매주) 업그레이드하는 정기적인 프로세스가 있습니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "처리를 위해 Azure Storage 계정 또는 Azure EventHub로 보내도록 Azure VMware Solution 로깅 구성",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
"severity": "낮다",
- "text": "gitops를 고려하여 애플리케이션 또는 클러스터 구성을 여러 클러스터에 배포합니다.",
+ "text": "VMware vSphere에 대한 심층적인 통찰력이 필요한 경우: 솔루션에서 vRealize Operations 및/또는 vRealize Network Insights가 사용됩니까?",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
- "severity": "낮다",
- "text": "프라이빗 클러스터에서 AKS 명령 호출을 사용하는 것이 좋습니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "VM에 대한 vSAN 스토리지 정책은 씩 프로비저닝을 적용하므로 기본 스토리지 정책이 아닌지 확인합니다.",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
- "severity": "낮다",
- "text": "계획된 이벤트의 경우 노드 자동 드레인 사용을 고려하십시오.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "vSAN은 유한한 리소스이므로 vSphere 컨텐츠 라이브러리가 vSAN에 배치되지 않도록 합니다.",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
- "severity": "높다",
- "text": "노드 RG(일명 '인프라 RG')의 운영자가 변경을 수행하지 않도록 자체 거버넌스 관행을 개발합니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "백업 솔루션에 대한 데이터 저장소가 vSAN 스토리지 외부에 저장되어 있는지 확인합니다. Azure 네이티브 또는 디스크 풀 지원 데이터 저장소에서",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
- "severity": "낮다",
- "text": "사용자 정의 노드 RG (일명 '인프라 RG') 이름 사용",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "Azure VMware Solution에서 실행되는 워크로드가 서버용 Azure Arc를 사용하여 하이브리드 관리되는지 확인합니다(Arc for Azure VMware Solution은 미리 보기 상태임).",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"severity": "보통",
- "text": "YAML 매니페스트에서 더 이상 사용되지 않는 Kubernetes API를 사용하지 마십시오.",
+ "text": "Azure Log Analytics 및 Azure Monitor를 사용하여 Azure VMware Solution에서 실행되는 워크로드를 모니터링하는지 확인합니다.",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
- "severity": "낮다",
- "text": "테인트 Windows 노드",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "기존 업데이트 관리 도구 또는 Azure 업데이트 관리에 Azure VMware Solution에서 실행되는 워크로드 포함",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
- "severity": "낮다",
- "text": "Windows 컨테이너 패치 수준을 호스트 패치 수준과 동기화된 상태로 유지",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "Azure Policy를 사용하여 Azure 관리, 모니터링 및 보안 솔루션에서 Azure VMware Solution 워크로드 온보딩",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "클러스터 수준의 진단 설정을 통해Via Diagnostic Settings at the cluster level",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
- "severity": "낮다",
- "text": "마스터 로그(즉, API 로그)를 Azure Monitor 또는 기본 로그 관리 솔루션으로 보냅니다",
- "waf": "작업"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "Azure VMware Solution에서 실행되는 워크로드가 클라우드용 Microsoft Defender에 온보딩되었는지 확인",
+ "waf": "안전"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
- "severity": "낮다",
- "text": "필요한 경우 nodePool 스냅샷을 사용합니다.",
- "waf": "비용"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "vSAN은 유한한 리소스이므로 백업이 vSAN에 저장되지 않도록 합니다.",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
- "severity": "낮다",
- "text": "시간에 민감하지 않은 워크로드에 대한 스폿 노드 풀 고려",
- "waf": "작업"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "모든 DR 솔루션을 고려하고 비즈니스에 가장 적합한 솔루션을 결정했습니까? [SRM/제트스트림/제르토/빔/...]",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
- "severity": "낮다",
- "text": "빠른 버스팅을 위해 AKS 가상 노드 고려",
- "waf": "작업"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "재해 복구 기술이 네이티브 Azure IaaS인 경우 Azure Site Recovery 사용Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
"severity": "높다",
- "text": "Container Insights(또는 Prometheus와 같은 다른 도구)를 사용하여 클러스터 지표 모니터링",
- "waf": "작업"
+ "text": "재해 솔루션 중 하나와 함께 자동화된 복구 계획을 사용하고 가능한 한 수동 작업을 피하십시오.",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "지정학적 지역 쌍을 보조 재해 복구 환경으로 사용Use the geopolitical region pair as the secondary disaster recovery environment",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
"severity": "높다",
- "text": "Container Insights(또는 Telegraf/ElasticSearch와 같은 다른 도구)를 사용하여 클러스터 로그를 저장하고 분석합니다.",
- "waf": "작업"
+ "text": "지역 간에 2개의 서로 다른 주소 공간을 사용합니다(예: 서로 다른 지역에 대해 10.0.0.0/16 및 192.168.0.0/16).",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"severity": "보통",
- "text": "노드의 CPU 및 메모리 사용률 모니터링",
- "waf": "작업"
+ "text": "ExpressRoute Global Reach는 기본 및 보조 Azure VMware Solution 프라이빗 클라우드 간의 연결에 사용되나요, 아니면 네트워크 가상 어플라이언스를 통해 라우팅이 수행되나요?",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"severity": "보통",
- "text": "Azure CNI를 사용하는 경우 노드당 사용되는 Pod IP의 %를 모니터링합니다.",
- "waf": "작업"
+ "text": "모든 백업 솔루션을 고려하고 비즈니스에 가장 적합한 솔루션을 결정했습니까? [ MABS/CommVault/Metallic.io/Veeam/입니다. ]",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "OS 디스크의 I/O는 중요한 리소스입니다. 노드의 OS가 I/O에서 제한되면 예측할 수 없는 동작이 발생할 수 있으며, 일반적으로 노드가 NotReady로 선언됩니다",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
"severity": "보통",
- "text": "노드에서 OS 디스크 큐 크기 모니터링Monitor OS disk queue depth in nodes",
- "waf": "작업"
+ "text": "Azure VMware Solution 프라이빗 클라우드와 동일한 지역에 백업 솔루션 배포Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
"severity": "보통",
- "text": "AzFW/NVA에서 송신 필터링을 사용하지 않는 경우 표준 ALB 할당 SNAT 포트를 모니터링합니다",
- "waf": "작업"
+ "text": "vSan의 외부, Azure 네이티브 구성 요소에 백업 솔루션 배포",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
- "service": "AKS",
- "severity": "보통",
- "text": "AKS 클러스터에 대한 Resource Health 알림 구독Subscribe to resource health notifications for your AKS cluster",
- "waf": "작업"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "Azure 플랫폼에서 관리하는 VMware 구성 요소의 복원을 요청하는 프로세스가 마련되어 있나요?",
+ "waf": "신뢰도"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "높다",
- "text": "Pod 규격에서 요청 및 제한 구성",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "수동 배포의 경우 모든 구성 및 배포를 문서화해야 합니다",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "보통",
- "text": "네임스페이스에 대한 리소스 할당량 적용Enforce resource quotas for namespaces",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "수동 배포의 경우 Azure VMware Solution 프라이빗 클라우드에서 실수로 인한 작업을 방지하기 위해 리소스 잠금을 구현하는 것이 좋습니다",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
- "severity": "높다",
- "text": "구독에 노드 풀을 확장할 수 있는 충분한 할당량이 있는지 확인합니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "자동화된 배포의 경우 최소한의 프라이빗 클라우드를 배포하고 필요에 따라 확장합니다",
"waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
- "severity": "보통",
- "text": "Cluster Autoscaler 사용",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
"severity": "낮다",
- "text": "AKS 노드 풀에 대한 노드 구성 사용자 지정",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
- "severity": "보통",
- "text": "필요한 경우 Horizontal Pod Autoscaler 사용",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "노드가 클수록 임시 디스크 및 가속화된 네트워킹과 같은 더 높은 성능과 기능을 제공하지만 폭발 반경이 증가하고 크기 조정 세분성이 감소합니다",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
- "severity": "높다",
- "text": "너무 크거나 너무 작지 않은 적절한 노드 크기를 고려합니다",
- "waf": "공연"
+ "text": "자동화된 배포의 경우 배포를 시작하기 전에 할당량을 요청하거나 예약합니다",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
"severity": "낮다",
- "text": "확장성을 위해 5,000개 이상의 노드가 필요한 경우 추가 AKS 클러스터를 사용하는 것이 좋습니다",
- "waf": "공연"
+ "text": "자동화된 배포의 경우 적절한 거버넌스를 위해 자동화 또는 Azure Policy를 통해 관련 리소스 잠금을 만들어야 합니다",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
"severity": "낮다",
- "text": "AKS 자동화를 위해 EventGrid 이벤트를 구독하는 것이 좋습니다.",
- "waf": "공연"
+ "text": "ExR 인증 키에 대해 사람이 이해할 수 있는 이름을 구현하여 키의 목적/용도를 쉽게 식별할 수 있습니다.",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
"severity": "낮다",
- "text": "AKS 클러스터에서 장기 실행 작업의 경우 이벤트 종료를 고려합니다.",
- "waf": "공연"
+ "text": "Azure VMware Solution 및 ExpressRoute를 배포하는 데 별도의 서비스 원칙을 사용하는 경우 Key Vault를 사용하여 비밀 및 권한 부여 키를 저장합니다",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
"severity": "낮다",
- "text": "필요한 경우 AKS 노드에 Azure Dedicated Host를 사용하는 것이 좋습니다",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
- "severity": "높다",
- "text": "임시 OS 디스크 사용",
- "waf": "공연"
+ "text": "Azure VMware Solution은 제한된 수의 병렬 작업만 지원하므로 많은 리소스를 Azure VMware Solution 배포해야 하는 경우 IaC에서 작업을 직렬화하기 위한 리소스 종속성을 정의합니다.",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
- "severity": "높다",
- "text": "임시 디스크가 아닌 디스크의 경우 여러 Pod를 실행하는 데 고성능이 필요하고 기본 AKS 로그 회전 임계값을 사용하여 대규모 로그를 생성하므로 많은 Pod/노드를 실행할 때 노드에 높은 IOPS 및 더 큰 OS 디스크를 사용합니다",
- "waf": "공연"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
+ "severity": "낮다",
+ "text": "단일 Tier-1 게이트웨이를 사용하여 NSX-T 세그먼트의 자동화된 구성을 수행하는 경우 NSX-Manager API 대신 Azure Portal API를 사용합니다",
+ "waf": "작업"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
- "severity": "낮다",
- "text": "고성능 스토리지 옵션의 경우 AKS에서 Ultra Disks를 사용합니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
+ "severity": "보통",
+ "text": "자동화된 스케일 아웃을 사용하려는 경우 Azure VMware Solution을 실행하는 구독에 대해 충분한 Azure VMware Solution 할당량을 적용해야 합니다",
"waf": "공연"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
"severity": "보통",
- "text": "클러스터에서 상태를 유지하지 않고 외부(AzStorage, AzSQL, Cosmos 등)에 데이터를 저장합니다.",
+ "text": "자동 축소를 사용하려는 경우 이러한 작업을 수행하기 전에 스토리지 정책 요구 사항을 고려해야 합니다",
"waf": "공연"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
"severity": "보통",
- "text": "AzFiles 표준을 사용하는 경우 성능상의 이유로 AzFiles 프리미엄 및/또는 ANF를 고려합니다",
+ "text": "한 번에 하나의 크기 조정 작업만 수행할 수 있으므로 크기 조정 작업은 항상 단일 SDDC 내에서 직렬화되어야 합니다(여러 클러스터를 사용하는 경우에도)",
"waf": "공연"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
"severity": "보통",
- "text": "Azure 디스크 및 AZ를 사용하는 경우 올바른 영역에 스토리지를 프로비전하기 위해 VolumeBindingMode::WaitForFirstConsumer를 사용하여 LRS 디스크의 영역 내에 노드 풀을 사용하거나 여러 영역에 걸쳐 있는 노드 풀에 ZRS 디스크를 사용하는 것이 좋습니다",
+ "text": "아키텍처에 사용되는 제3자 솔루션에 대한 확장 작업을 고려하고 검증합니다(지원 여부)Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
"waf": "공연"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
"severity": "보통",
- "text": "전역 수준에서 오류 처리 정책 구현",
- "waf": "작업"
+ "text": "자동화에서 환경에 대한 규모 확장/축소 최대 한도 정의 및 적용Define and enforce scale in/out maximum limits for your environment in the automations",
+ "waf": "공연"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
"severity": "보통",
- "text": "모든 API 정책에 요소가 포함되어 있는지 확인합니다.",
+ "text": "모니터링 규칙을 구현하여 자동화된 조정 작업을 모니터링하고 성공 및 실패를 모니터링하여 적절한(자동) 응답을 사용하도록 설정합니다.",
"waf": "작업"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
- "service": "APIM",
- "severity": "보통",
- "text": "정책 조각을 사용하여 여러 API에서 동일한 정책 정의를 반복하지 않도록 합니다.",
- "waf": "작업"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
- "service": "APIM",
- "severity": "보통",
- "text": "API로 수익을 창출할 계획이라면 '수익 창출 지원' 도움말에서 권장사항을 확인하세요",
- "waf": "작업"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
- "service": "APIM",
- "severity": "높다",
- "text": "진단 설정을 사용하도록 설정하여 로그를 Azure Monitor로 내보내기",
- "waf": "작업"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
- "service": "APIM",
- "severity": "보통",
- "text": "더 자세한 원격 분석을 위해 Application Insights 사용",
- "waf": "작업"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
- "service": "APIM",
- "severity": "높다",
- "text": "가장 중요한 메트릭에 대한 경고 구성",
- "waf": "작업"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "높다",
- "text": "사용자 지정 SSL 인증서가 안전하게 액세스하고 업데이트할 수 있도록 Azure Key Vault에 저장되어 있는지 확인합니다",
- "waf": "안전"
+ "text": "MON을 사용하는 경우 동시에 구성된 VM의 제한(HCX에 대한 MON 제한[400 - 표준, 1000 - 대형 어플라이언스])을 알고 있어야 합니다.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "높다",
- "text": "Azure AD를 사용하여 API(데이터 평면)에 들어오는 요청 보호",
- "waf": "안전"
+ "text": "MON을 사용하는 경우 100개 이상의 네트워크 확장에서 MON을 사용하도록 설정할 수 없습니다",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
"severity": "보통",
- "text": "Microsoft Entra ID를 사용하여 개발자 포털에서 사용자 인증",
- "waf": "안전"
+ "text": "마이그레이션에 VPN 연결을 사용하는 경우 그에 따라 MTU 크기를 조정합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
"severity": "보통",
- "text": "제품의 가시성을 제어하기 위해 적절한 그룹을 만듭니다",
- "waf": "안전"
+ "text": "Azure(500Mbps 이하)에 연결하는 낮은 연결 지역의 경우 HCX WAN 최적화 어플라이언스 배포를 고려합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure API Management Review",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
"severity": "보통",
- "text": "백엔드 기능을 사용하여 중복 API 백엔드 구성 제거",
- "waf": "작업"
+ "text": "마이그레이션이 클라우드 어플라이언스가 아닌 온-프레미스 어플라이언스에서 시작되는지 확인합니다(역방향 마이그레이션을 수행하지 않음).",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
"severity": "보통",
- "text": "명명된 값을 사용하여 정책에서 사용할 수 있는 공통 값 저장",
- "waf": "작업"
+ "text": "Azure NetApp Files를 사용하여 Azure VMware Solution용 스토리지를 확장하는 경우 VM에 직접 연결하는 대신 VMware 데이터 저장소로 사용하는 것이 좋습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"severity": "보통",
- "text": "DR의 경우 99.99% SLA를 위해 둘 이상의 지역에 걸쳐 확장된 배포와 함께 프리미엄 계층을 활용합니다",
+ "text": "전용 ExpressRoute 게이트웨이가 외부 데이터 스토리지 솔루션에 사용되고 있는지 확인합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
"severity": "보통",
- "text": "99.99%의 SLA 증가를 위해 둘 이상의 가용성 영역에 하나 이상의 단위를 배포합니다.",
+ "text": "외부 데이터 스토리지 솔루션에 사용되는 ExpressRoute 게이트웨이에서 FastPath를 사용하도록 설정되어 있는지 확인합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
"severity": "높다",
- "text": "자동화된 백업 루틴이 있는지 확인",
+ "text": "확장된 클러스터를 사용하는 경우 선택한 재해 복구 솔루션이 공급업체에서 지원되는지 확인합니다",
"waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
- "severity": "보통",
- "text": "정책을 사용하여 장애 조치 백엔드 URL 및 캐싱을 추가하여 실패한 호출을 줄입니다.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "확장된 클러스터를 사용하는 경우 제공된 SLA가 요구 사항을 충족하는지 확인합니다",
"waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
- "severity": "낮다",
- "text": "고성능 수준에서 기록해야 하는 경우 Event Hubs 정책을 고려합니다",
- "waf": "작업"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "확장된 클러스터를 사용하는 경우 두 ExpressRoute 회로가 모두 연결 허브에 연결되어 있는지 확인합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
- "severity": "보통",
- "text": "제한 정책을 적용하여 초당 요청 수 제어Apply throttling policies to control the number of requests per second",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
- "waf": "공연"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "확장된 클러스터를 사용하는 경우 두 ExpressRoute 회로 모두에서 GlobalReach를 사용하도록 설정되어 있는지 확인합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
- "severity": "보통",
- "text": "부하가 증가할 때 인스턴스 수를 확장하도록 자동 크기 조정 구성Configure autoscaling to scale out the number of instances when the load increases",
- "waf": "공연"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
+ "severity": "높다",
+ "text": "사이트 재해 허용 범위 설정을 적절하게 고려하고 필요한 경우 비즈니스에 맞게 변경하십시오.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure API Management Review",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "스토리지와 관련된 Microsoft 클라우드 보안 벤치마크의 지침 적용",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "Azure에 백 엔드 API에 가까운 지역이 없는 자체 호스팅 게이트웨이를 배포합니다.",
- "waf": "공연"
+ "text": "'스토리지에 대한 Azure 보안 기준' 고려",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
- "severity": "보통",
- "text": "프로덕션 워크로드에 프리미엄 계층을 사용합니다.",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Azure Storage는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 액세스가 필요한 Azure Compute 리소스에만 Azure Storage를 안전하게 노출할 수 있으므로 공용 인터넷에 노출되지 않습니다",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Azure Storage에 프라이빗 엔드포인트를 사용하는 것이 좋습니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "새로 만든 저장소 계정은 ARM 배포 모델을 사용하여 만들어지므로 RBAC, 감사 등을 모두 사용할 수 있습니다. 구독에 클래식 배포 모델이 있는 이전 저장소 계정이 없는지 확인합니다.",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "다중 리전 모델에서는 Policies를 사용하여 가용성 또는 지연 시간에 따라 리전 백엔드로 요청을 라우팅합니다.",
- "waf": "신뢰도"
+ "text": "이전 스토리지 계정이 '클래식 배포 모델'을 사용하지 않는지 확인",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Microsoft Defender를 활용하여 의심스러운 활동 및 잘못된 구성에 대해 알아봅니다.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "APIM의 제한에 유의해야 합니다.",
- "waf": "신뢰도"
+ "text": "모든 스토리지 계정에 대해 Microsoft Defender 사용",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
- "severity": "높다",
- "text": "자체 호스팅 게이트웨이 배포가 복원력이 있는지 확인합니다.",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "일시 삭제 메커니즘을 사용하면 실수로 삭제된 Blob을 복구할 수 있습니다.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "다중 지역 배포를 위해 APIM 앞에서 Azure Front Door 사용Use Azure Front Door in front of APIM for multi-region deployment",
- "waf": "공연"
+ "text": "Blob에 대해 '일시 삭제' 사용Enable 'soft delete' for blobs",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "VNet(Virtual Network) 내에 서비스 배포Deploy the service within a Virtual Network (VNet)",
+ "text": "Blob에 대해 '일시 삭제' 사용 안 함",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
- "severity": "보통",
- "text": "서브넷에 NSG(네트워크 보안 그룹)를 배포하여 APIM에서 들어오고 나가는 트래픽을 제한하거나 모니터링합니다.",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "컨테이너에 대한 일시 삭제를 사용하면 컨테이너가 삭제된 후 컨테이너를 복구할 수 있습니다(예: 실수로 인한 삭제 작업에서 복구).",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "컨테이너에 대해 '일시 삭제' 사용Enable 'soft delete' for containers",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "프라이빗 엔드포인트를 배포하여 APIM이 VNet에 배포되지 않은 경우 들어오는 트래픽을 필터링합니다.",
+ "text": "컨테이너에 대해 '일시 삭제' 사용 안 함",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "사용자가 삭제하기 전에 먼저 삭제 잠금을 제거하도록 강제하여 저장소 계정이 실수로 삭제되는 것을 방지합니다.",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "공용 네트워크 액세스 사용 안 함",
+ "text": "스토리지 계정에 대한 리소스 잠금 사용Enable resource locks on storage accounts",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
- "severity": "보통",
- "text": "PowerShell 자동화 스크립트로 관리 간소화",
- "waf": "작업"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
- "severity": "보통",
- "text": "Infrastructure-as-code를 통해 APIM을 구성합니다. Cloud Adaption Framework APIM 랜딩 존 가속기에서 DevOps 모범 사례 검토",
- "waf": "작업"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Blob에 대한 '법적 보존' 또는 '시간 기반 보존' 정책을 고려하면 Blob, 컨테이너 또는 스토리지 계정을 삭제할 수 없습니다. '불가능'은 실제로 '불가능'을 의미합니다. 스토리지 계정에 변경할 수 없는 Blob이 포함된 경우 해당 스토리지 계정을 '제거'하는 유일한 방법은 Azure 구독을 취소하는 것입니다.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "변경할 수 없는 Blob 고려",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
- "severity": "보통",
- "text": "더 빠른 API 개발을 위해 Visual Studio Code APIM 확장 사용 촉진",
- "waf": "작업"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "모든 데이터 전송이 암호화되고, 무결성이 보호되고, 서버가 인증되도록 스토리지 계정에 대한 보호되지 않는 HTTP/80 액세스를 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "HTTPS 필요, 즉 스토리지 계정에서 포트 80 사용 안 함Require HTTPS, i.e. disable port 80 on the storage account",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
- "severity": "보통",
- "text": "워크플로에서 DevOps 및 CI/CD 구현",
- "waf": "작업"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "스토리지 계정에서 사용자 지정 도메인(호스트 이름)을 구성할 때 TLS/HTTPS가 필요한지 여부를 확인합니다. 이 경우 저장소 계정 앞에 Azure CDN을 배치해야 할 수 있습니다.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "HTTPS를 적용할 때(HTTP 사용 안 함) 스토리지 계정에 사용자 지정 도메인(CNAME)을 사용하지 않는지 확인합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "클라이언트가 SAS 토큰을 사용하여 Blob 데이터에 액세스할 때 HTTPS를 요구하면 자격 증명 손실 위험을 최소화하는 데 도움이 됩니다.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "클라이언트 인증서 인증을 사용하여 API 보안",
+ "text": "SAS(공유 액세스 서명) 토큰을 HTTPS 연결로만 제한",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
- "severity": "보통",
- "text": "클라이언트 인증서 인증을 사용한 보안 백엔드 서비스",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "AAD 토큰은 가능한 경우 공유 액세스 서명보다 우선해야 합니다",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Blob 액세스에 Azure AD(Azure Active Directory) 토큰 사용Use Azure Active Directory (Azure AD) tokens for blob access",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "사용자, 그룹 또는 응용 프로그램에 역할을 할당할 때 해당 보안 주체가 작업을 수행하는 데 필요한 권한만 부여합니다. 리소스에 대한 액세스를 제한하면 의도하지 않은 데이터 오용과 악의적인 데이터 오용을 모두 방지할 수 있습니다.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "'OWASP API 보안 상위 10개 위협을 완화하기 위한 권장 사항' 문서를 검토하고 API에 적용할 수 있는 항목을 확인합니다.",
+ "text": "IaM 권한의 최소 권한",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
- "severity": "보통",
- "text": "권한 부여 기능을 사용하여 백엔드 API에 대한 OAuth 2.0 토큰 관리 간소화",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "사용자 위임 SAS는 Azure AD(Azure Active Directory) 자격 증명과 SAS에 지정된 권한으로 보호됩니다. 사용자 위임 SAS는 범위와 기능 측면에서 서비스 SAS와 유사하지만 서비스 SAS에 비해 보안상의 이점을 제공합니다. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "SAS를 사용하는 경우 스토리지 계정 키 기반 SAS보다 '사용자 위임 SAS'를 선호합니다.",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "스토리지 계정 키('공유 키')에는 감사 기능이 거의 없습니다. 누가/언제 키 사본을 가져왔는지 모니터링할 수 있지만, 키가 여러 사람의 손에 들어가면 특정 사용자의 사용을 귀속시키는 것은 불가능합니다. AAD 인증에만 의존하면 스토리지 액세스를 사용자에게 더 쉽게 연결할 수 있습니다. ",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "전송 중인 정보를 암호화할 때 최신 TLS 버전을 사용합니다. 가능한 경우 오래되고 불필요한 프로토콜과 암호를 사용하지 않도록 설정합니다.",
+ "text": "AAD 액세스(및 사용자 위임 SAS)만 지원되도록 스토리지 계정 키를 사용하지 않도록 설정하는 것이 좋습니다.",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "활동 로그 데이터를 사용하여 스토리지 계정의 보안을 보거나 변경하는 '시기', '누가', '무엇을' 및 '방법'(예: 스토리지 계정 키, 액세스 정책 등)을 식별합니다.",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "비밀(명명된 값)이 안전하게 액세스하고 업데이트할 수 있도록 Azure Key Vault에 저장되었는지 확인합니다.",
+ "text": "Azure Monitor를 사용하여 스토리지 계정에 대한 컨트롤 플레인 작업을 감사하는 것이 좋습니다.",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "키 만료 정책을 사용하면 계정 액세스 키 교체에 대한 미리 알림을 설정할 수 있습니다. 지정된 간격이 경과하고 키가 아직 회전되지 않은 경우 알림이 표시됩니다.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "가능할 때마다 관리 ID를 사용하여 다른 Azure 리소스에 인증",
+ "text": "스토리지 계정 키를 사용하는 경우 '키 만료 정책'을 사용하도록 설정하는 것이 좋습니다",
"waf": "안전"
},
{
- "checklist": "Azure API Management Review",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
- "severity": "높다",
- "text": "APIM 앞에 Application Gateway를 배포하여 WAF(웹 애플리케이션 방화벽) 사용Use Web Application Firewall (WAF) by deploying Application Gateway in of APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS 만료 정책은 SAS가 유효한 권장 간격을 지정합니다. SAS 만료 정책은 서비스 SAS 또는 계정 SAS에 적용됩니다. 사용자가 권장 간격보다 큰 유효 간격을 사용하여 서비스 SAS 또는 계정 SAS를 생성하면 경고가 표시됩니다.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS 만료 정책 구성 고려",
"waf": "안전"
},
{
- "checklist": "IoT Hub Review",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
- "severity": "높다",
- "text": "지역적으로 적용 가능한 경우 가용성 영역 활용(자동으로 활성화됨)",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "저장된 액세스 정책은 스토리지 계정 키를 다시 생성할 필요 없이 서비스 SAS에 대한 권한을 취소하는 옵션을 제공합니다. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS를 저장된 액세스 정책에 연결하는 것이 좋습니다.",
+ "waf": "안전"
},
{
- "checklist": "IoT Hub Review",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "Microsoft에서 시작한 장애 조치(failover)에 유의하세요. 드문 경우지만 Microsoft는 영향을 받는 지역의 모든 IoT Hub를 해당 지역 쌍을 이루는 지역으로 장애 조치(failover)하기 위해 이러한 작업을 수행합니다.",
- "waf": "신뢰도"
+ "text": "체크 인된 연결 문자열 및 저장소 계정 키를 검색하도록 응용 프로그램의 소스 코드 리포지토리를 구성하는 것이 좋습니다.",
+ "waf": "안전"
},
{
- "checklist": "IoT Hub Review",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "이상적으로 애플리케이션은 관리 ID를 사용하여 Azure Storage에 인증해야 합니다. 이렇게 할 수 없는 경우 Azure KeyVault 또는 동등한 서비스에 스토리지 자격 증명(연결 문자열, 스토리지 계정 키, SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
- "waf": "신뢰도"
+ "text": "Azure KeyVault에 연결 문자열을 저장하는 것이 좋습니다(관리 ID를 사용할 수 없는 시나리오에서).",
+ "waf": "안전"
},
{
- "checklist": "IoT Hub Review",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "임시 SAS 서비스 SAS 또는 계정 SAS에서 단기 만료 시간을 사용합니다. 이러한 방식으로 SAS가 손상되더라도 짧은 시간 동안만 유효합니다. 이 방법은 저장된 액세스 정책을 참조할 수 없는 경우에 특히 중요합니다. 또한 단기 만료 시간은 업로드에 사용할 수 있는 시간을 제한하여 Blob에 쓸 수 있는 데이터의 양을 제한합니다.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "수동 장애 조치(failover)를 트리거하는 방법을 알아봅니다.",
- "waf": "신뢰도"
+ "text": "임시 SAS의 유효 기간을 단축하기 위해 노력",
+ "waf": "안전"
},
{
- "checklist": "IoT Hub Review",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
- "severity": "높다",
- "text": "장애 조치(failover) 후 장애 복구(failback)하는 방법을 알아봅니다.",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS를 만들 때는 가능한 한 구체적이고 제한적이어야 합니다. 훨씬 더 광범위한 액세스를 제공하는 SAS보다 단일 리소스 및 작업에 대해 SAS를 선호합니다.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS에 좁은 범위 적용",
+ "waf": "안전"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
- "severity": "높다",
- "text": "비즈니스 및 SLO 요구 사항에 따라 올바른 Logic App 호스팅 계획 선택Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS에는 SAS를 사용하여 리소스를 요청할 수 있는 권한이 있는 클라이언트 IP 주소 또는 주소 범위에 대한 매개 변수가 포함될 수 있습니다. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "가능한 경우 SAS의 범위를 특정 클라이언트 IP 주소로 지정하는 것이 좋습니다",
+ "waf": "안전"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS는 클라이언트가 업로드하는 데이터의 양을 제한할 수 없습니다. 시간 경과에 따른 스토리지 양의 가격 책정 모델을 고려할 때 클라이언트가 악의적으로 큰 콘텐츠를 업로드했는지 여부를 확인하는 것이 합리적일 수 있습니다.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "낮다",
+ "text": "클라이언트가 SAS를 사용하여 파일을 업로드한 후 업로드된 데이터를 확인하는 것이 좋습니다. ",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "'로컬 사용자 계정'을 사용하여 SFTP를 통해 Blob Storage에 액세스하는 경우 '일반적인' RBAC 컨트롤이 적용되지 않습니다. NFS 또는 REST를 통한 Blob 액세스는 SFTP 액세스보다 더 제한적일 수 있습니다. 안타깝게도 2023년 초부터 로컬 사용자는 현재 SFTP 엔드포인트에 대해 지원되는 유일한 ID 관리 형태입니다",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "영역 중복 및 가용성 영역을 사용하여 지역 오류로부터 논리 앱 보호Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "신뢰도"
+ "text": "SFTP: SFTP 액세스에 대한 '로컬 사용자'의 수를 제한하고 시간이 지남에 따라 액세스가 필요한지 여부를 감사합니다.",
+ "waf": "안전"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SFTP: SFTP 엔드포인트는 POSIX와 유사한 ACL을 지원하지 않습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "스토리지는 CORS(Cross-Origin Resource Sharing), 즉 다른 도메인의 웹앱이 동일 출처 정책을 완화할 수 있도록 하는 HTTP 기능을 지원합니다. CORS를 사용하도록 설정할 때 CorsRules를 최소 권한으로 유지합니다.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
- "waf": "신뢰도"
+ "text": "지나치게 광범위한 CORS 정책 방지",
+ "waf": "안전"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "미사용 데이터는 항상 서버 쪽에서 암호화되며 클라이언트 쪽에서도 암호화될 수 있습니다. 서버 쪽 암호화는 플랫폼 관리형 키(기본값) 또는 고객 관리형 키를 사용하여 발생할 수 있습니다. 클라이언트 쪽 암호화는 클라이언트가 Azure Storage에 Blob별로 암호화/암호 해독 키를 제공하거나 클라이언트 쪽에서 암호화를 완전히 처리하여 발생할 수 있습니다. 따라서 기밀성 보장을 위해 Azure Storage에 전혀 의존하지 않습니다.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "격리된 환경에 배포하는 경우 ASE(App Service Environment) v3을 사용하거나 마이그레이션합니다",
- "waf": "신뢰도"
+ "text": "미사용 데이터를 암호화하는 방법을 결정합니다. 데이터에 대한 스레드 모델을 이해합니다.",
+ "waf": "안전"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"severity": "보통",
- "text": "Azure DevOps 또는 GitHub를 활용하여 CI/CD를 간소화하고 논리 앱 코드를 보호합니다.",
- "waf": "작업"
+ "text": "사용해야 하는 플랫폼 암호화를 결정합니다.",
+ "waf": "안전"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "사용해야 하는 클라이언트 쪽 암호화를 결정합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Resource Graph Explorer(resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true)를 활용하여 익명 Blob 액세스를 허용하는 스토리지 계정을 찾습니다.",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
"severity": "높다",
- "text": "읽기 작업에 대해 99.9%의 가용성을 갖도록 복제본 2개 사용",
- "waf": "신뢰도"
+ "text": "공용 Blob 액세스가 필요한지 또는 특정 스토리지 계정에 대해 사용하지 않도록 설정할 수 있는지 여부를 고려합니다. ",
+ "waf": "안전"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
"severity": "보통",
- "text": "읽기/쓰기 작업에 대해 99.9%의 가용성을 갖도록 복제본 3개 사용",
+ "text": "장기 취소 가능 토큰을 사용하고, 토큰을 캐시하고, Microsoft ID 라이브러리를 사용하여 자동으로 획득합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
- "severity": "높다",
- "text": "읽기 및/또는 쓰기 복제본을 활성화하여 가용 영역 활용Leverage Availability Zones by enabling read and/or write replicas",
+ "checklist": "Identity Review Checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
+ "severity": "보통",
+ "text": "로그인 사용자 흐름이 백업되고 복원력이 있는지 확인합니다. 사용자를 로그인하는 데 사용하는 코드가 백업되고 복구 가능한지 확인합니다. 외부 프로세스와의 복원력 있는 인터페이스",
"waf": "신뢰도"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
"severity": "보통",
- "text": "지역 중복의 경우 Manually create services in 2 or more regions for Search는 지리적 지역 간에 검색 인덱스를 복제하는 자동화된 방법을 제공하지 않습니다",
+ "text": "사용자 지정 브랜드 자산은 CDN에서 호스팅되어야 합니다.",
+ "waf": "공연"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
+ "severity": "낮다",
+ "text": "여러 ID 공급자가 있어야 합니다(예: Microsoft, Google, Facebook 계정으로 로그인).",
"waf": "신뢰도"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "보통",
- "text": "여러 서비스에서 데이터를 동기화하려면 인덱서를 사용하여 여러 서비스의 콘텐츠를 업데이트하거나 REST API를 사용하여 여러 서비스에서 콘텐츠 업데이트를 푸시합니다.",
+ "text": "VM 수준에서 고가용성을 위한 VM 규칙(프리미엄 디스크, 서로 다른 가용성 영역에 있는 지역에 두 개 이상)을 따릅니다.",
"waf": "신뢰도"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
+ "checklist": "Identity Review Checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "보통",
- "text": "Azure Traffic Manager를 사용하여 요청 조정",
+ "text": "복제하지 마세요! 복제로 인해 디렉터리 동기화에 문제가 발생할 수 있습니다",
"waf": "신뢰도"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
- "severity": "높다",
- "text": "Azure Cognitive Search 인덱스를 백업 및 복원합니다. 이 샘플 코드를 사용하여 인덱스 정의 및 스냅샷을 일련의 Json 파일에 백업합니다",
+ "checklist": "Identity Review Checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "보통",
+ "text": "다중 지역에 대해 활성-활성 상태 보유",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
- "severity": "높다",
- "text": "ADDS 도메인 컨트롤러가 네이티브 Azure의 ID 구독에 배포되었는지 확인합니다.",
- "waf": "안전"
+ "checklist": "Identity Review Checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "보통",
+ "text": "추가 지역 및 위치에 Azure AD 도메인 서비스 스탬프 추가Add Azure AD Domain service stamps to additional regions and locations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
+ "checklist": "Identity Review Checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
"severity": "보통",
- "text": "ADDS 사이트 및 서비스가 Azure 기반 리소스(Azure VMware Solution 포함)의 인증 요청을 Azure에 로컬로 유지하도록 구성되어 있는지 확인합니다.",
- "waf": "안전"
+ "text": "DR에 복제본 세트 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
- "severity": "높다",
- "text": "vCenter가 ADDS에 연결되어 있는지 확인하여 '명명된 사용자 계정'을 기반으로 인증을 사용하도록 설정합니다.",
- "waf": "안전"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "전역 수준에서 오류 처리 정책 구현",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
"severity": "보통",
- "text": "vCenter에서 ADDS로의 연결이 보안 프로토콜(LDAPS)을 사용하고 있는지 확인합니다.",
- "waf": "안전"
+ "text": "모든 API 정책에 요소가 포함되어 있는지 확인합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
- "severity": "보통",
- "text": "vCenter IdP의 CloudAdmin 계정은 긴급 계정으로만 사용됩니다(Break-glass).",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
- "severity": "높다",
- "text": "NSX-Manager가 외부 ID 제공자(LDAPS)와 통합되었는지 확인합니다.",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
"severity": "보통",
- "text": "VMware vSphere에서 사용하기 위해 RBAC 모델이 생성되었습니까?",
- "waf": "안전"
+ "text": "정책 조각을 사용하여 여러 API에서 동일한 정책 정의를 반복하지 않도록 합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
"severity": "보통",
- "text": "RBAC 권한은 특정 사용자가 아닌 ADDS 그룹에 부여해야 합니다",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
- "severity": "높다",
- "text": "Azure의 Azure VMware Solution 리소스에 대한 RBAC 권한은 제한된 소유자 집합으로만 '잠김'됩니다",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
- "severity": "높다",
- "text": "모든 사용자 지정 역할의 범위가 CloudAdmin 허용 권한 부여로 지정되었는지 확인합니다.",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
- "severity": "높다",
- "text": "현재 고객 사용 사례에 대해 올바른 Azure VMware Solution 연결 모델을 선택했습니까?",
- "waf": "공연"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
- "severity": "높다",
- "text": "'연결 모니터'를 사용하여 온-프레미스에서 Azure로의 ExpressRoute 또는 VPN 연결이 모니터링되는지 확인합니다.",
+ "text": "API로 수익을 창출할 계획이라면 '수익 창출 지원' 도움말에서 권장사항을 확인하세요",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
- "severity": "보통",
- "text": "Azure VMware Solution 백 엔드 ExpressRoute 연결을 모니터링하기 위해 Azure 네이티브 리소스에서 Azure VMware Solution 가상 머신으로 연결 모니터가 만들어졌는지 확인합니다.",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
+ "severity": "높다",
+ "text": "진단 설정을 사용하도록 설정하여 로그를 Azure Monitor로 내보내기",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
"severity": "보통",
- "text": "엔드-2-엔드 연결을 모니터링하기 위해 온-프레미스 리소스에서 Azure VMware Solution 가상 머신으로 연결 모니터가 만들어졌는지 확인합니다.",
+ "text": "더 자세한 원격 분석을 위해 Application Insights 사용",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
"severity": "높다",
- "text": "경로 서버를 사용하는 경우 경로 서버에서 ExR 게이트웨이로, 온-프레미스로 1,000개 이상의 경로가 전파되지 않도록 합니다(ARS 제한).",
+ "text": "가장 중요한 메트릭에 대한 경고 구성",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
"severity": "높다",
- "text": "Azure Portal에서 Azure VMware Solution 리소스를 관리하는 역할에 대해 Privileged Identity Management가 구현되어 있나요(고정 권한이 허용되지 않음).",
+ "text": "사용자 지정 SSL 인증서가 안전하게 액세스하고 업데이트할 수 있도록 Azure Key Vault에 저장되어 있는지 확인합니다",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
"severity": "높다",
- "text": "Azure VMware Solution PIM 역할에 대해 Privileged Identity Management 감사 보고를 구현해야 합니다.",
+ "text": "Azure AD를 사용하여 API(데이터 평면)에 들어오는 요청 보호",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
"severity": "보통",
- "text": "Privileged Identity Management를 사용하는 경우 Azure VMware Solution 자동 호스트 교체 알림에 대한 유효한 SMTP 레코드를 사용하여 유효한 Entra ID 사용 계정을 만들었는지 확인합니다. (상시 권한 필요)",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
- "severity": "높다",
- "text": "CloudAdmin 계정 사용을 긴급 액세스로만 제한",
+ "text": "Microsoft Entra ID를 사용하여 개발자 포털에서 사용자 인증",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
"severity": "보통",
- "text": "vCenter에서 사용자 지정 RBAC 역할을 만들어 vCenter 내에서 최소 권한 모델 구현",
+ "text": "제품의 가시성을 제어하기 위해 적절한 그룹을 만듭니다",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
"severity": "보통",
- "text": "cloudadmin(vCenter) 및 admin(NSX) 자격 증명을 정기적으로 순환하도록 정의된 프로세스입니다.",
- "waf": "안전"
+ "text": "백엔드 기능을 사용하여 중복 API 백엔드 구성 제거",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
- "severity": "높다",
- "text": "Azure VMware Solution에서 실행되는 워크로드(VM)에 사용할 중앙 집중식 ID 공급자 사용",
- "waf": "안전"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "명명된 값을 사용하여 정책에서 사용할 수 있는 공통 값 저장",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
"severity": "보통",
- "text": "NSX-T 내에서 East-West 트래픽 필터링이 구현되었는지 여부",
- "waf": "안전"
+ "text": "DR의 경우 99.99% SLA를 위해 둘 이상의 지역에 걸쳐 확장된 배포와 함께 프리미엄 계층을 활용합니다",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
- "severity": "높다",
- "text": "Azure VMware Solution의 워크로드는 인터넷에 직접 노출되지 않습니다. 트래픽은 Azure Application Gateway, Azure Firewall 또는 제3자 솔루션에 의해 필터링되고 검사됩니다",
- "waf": "안전"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "99.99%의 SLA 증가를 위해 둘 이상의 가용성 영역에 하나 이상의 단위를 배포합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
"severity": "높다",
- "text": "감사 및 로깅은 Azure VMware Solution 및 Azure VMware Solution 기반 워크로드에 대한 인바운드 인터넷 요청에 대해 구현됩니다",
- "waf": "안전"
+ "text": "자동화된 백업 루틴이 있는지 확인",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
"severity": "보통",
- "text": "세션 모니터링은 의심스러운/악의적인 활동을 식별하기 위해 Azure VMware Solution 또는 Azure VMware Solution 기반 워크로드의 아웃바운드 인터넷 연결에 대해 구현됩니다",
- "waf": "안전"
+ "text": "정책을 사용하여 장애 조치 백엔드 URL 및 캐싱을 추가하여 실패한 호출을 줄입니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
- "severity": "보통",
- "text": "Azure의 ExR/VPN Gateway 서브넷에서 DDoS 표준 보호를 사용할 수 있나요?",
- "waf": "안전"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
+ "severity": "낮다",
+ "text": "고성능 수준에서 기록해야 하는 경우 Event Hubs 정책을 고려합니다",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
"severity": "보통",
- "text": "전용 PAW(Privileged Access Workstation)를 사용하여 Azure VMware Solution, vCenter, NSX Manager 및 HCX Manager 관리",
- "waf": "안전"
+ "text": "제한 정책을 적용하여 초당 요청 수 제어Apply throttling policies to control the number of requests per second",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure VMware Solution에서 실행되는 워크로드에 대해 Advanced Threat Detection(클라우드용 Microsoft Defender 또는 ASC) 사용",
- "waf": "안전"
+ "text": "부하가 증가할 때 인스턴스 수를 확장하도록 자동 크기 조정 구성Configure autoscaling to scale out the number of instances when the load increases",
+ "waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
"severity": "보통",
- "text": "서버용 Azure ARC를 사용하여 Azure 네이티브 기술을 사용하여 Azure VMware Solution에서 실행되는 워크로드를 적절하게 제어합니다(Azure VMware Solution용 Azure ARC는 아직 사용할 수 없음).",
- "waf": "안전"
+ "text": "Azure에 백 엔드 API에 가까운 지역이 없는 자체 호스팅 게이트웨이를 배포합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
- "severity": "낮다",
- "text": "Azure VMware Solution의 워크로드가 런타임 중에 충분한 데이터 암호화(예: 게스트 내 디스크 암호화 및 SQL TDE)를 사용하는지 확인합니다. (vSAN 미사용 암호화가 기본값임)",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
- "severity": "낮다",
- "text": "게스트 내 암호화를 사용하는 경우 가능한 경우 Azure Key Vault에 암호화 키를 저장합니다",
- "waf": "안전"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure VMware Solution에서 실행되는 워크로드에 대해 확장된 보안 업데이트 지원을 사용하는 것이 좋습니다(Azure VMware Solution은 ESU에 적합함).",
- "waf": "안전"
+ "text": "프로덕션 워크로드에 프리미엄 계층을 사용합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
- "severity": "높다",
- "text": "적절한 vSAN 데이터 이중화 방법이 사용되는지 확인합니다(RAID 규격).",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "다중 리전 모델에서는 Policies를 사용하여 가용성 또는 지연 시간에 따라 리전 백엔드로 요청을 라우팅합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
"severity": "높다",
- "text": "vSAN 스토리지 요구 사항을 충족하기 위해 장애 허용 정책이 적용되어 있는지 확인합니다",
+ "text": "APIM의 제한에 유의해야 합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
"severity": "높다",
- "text": "충분한 할당량을 요청했는지 확인하고 성장 및 재해 복구 요구 사항을 고려했는지 확인합니다",
+ "text": "자체 호스팅 게이트웨이 배포가 복원력이 있는지 확인합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
"severity": "보통",
- "text": "ESXi에 대한 액세스 제약 조건을 이해하고 타사 솔루션에 영향을 줄 수 있는 액세스 제한이 있는지 확인합니다.",
- "waf": "작업"
+ "text": "다중 지역 배포를 위해 APIM 앞에서 Azure Front Door 사용Use Azure Front Door in front of APIM for multi-region deployment",
+ "waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
"severity": "보통",
- "text": "새 노드 요청에 대한 리드 타임을 염두에 두고 ESXi 호스트 밀도 및 효율성에 대한 정책이 있는지 확인합니다",
- "waf": "작업"
+ "text": "VNet(Virtual Network) 내에 서비스 배포Deploy the service within a Virtual Network (VNet)",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure VMware Solution에 대한 적절한 비용 관리 프로세스가 있는지 확인 - Azure Cost Management를 사용할 수 있습니다.",
- "waf": "비용"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
- "severity": "낮다",
- "text": "Azure VMware Solution 사용 비용을 최적화하는 데 사용되는 Azure 예약 인스턴스입니까?",
- "waf": "비용"
+ "text": "서브넷에 NSG(네트워크 보안 그룹)를 배포하여 APIM에서 들어오고 나가는 트래픽을 제한하거나 모니터링합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
"severity": "보통",
- "text": "다른 Azure 네이티브 서비스를 사용할 때 Azure Private-Link 사용 고려",
+ "text": "프라이빗 엔드포인트를 배포하여 APIM이 VNet에 배포되지 않은 경우 들어오는 트래픽을 필터링합니다.",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
"severity": "높다",
- "text": "필요한 모든 리소스가 동일한 Azure 가용성 영역 내에 있는지 확인합니다.",
- "waf": "공연"
+ "text": "공용 네트워크 액세스 사용 안 함",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure VMware Solution 게스트 VM 워크로드에 대해 클라우드용 Microsoft Defender 사용",
- "waf": "안전"
+ "text": "PowerShell 자동화 스크립트로 관리 간소화",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure Arc 지원 서버를 사용하여 Azure VMware Solution 게스트 VM 워크로드 관리",
- "waf": "안전"
+ "text": "Infrastructure-as-code를 통해 APIM을 구성합니다. Cloud Adaption Framework APIM 랜딩 존 가속기에서 DevOps 모범 사례 검토",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
- "service": "AVS",
- "severity": "높다",
- "text": "Azure VMware Solution에서 진단 및 메트릭 로깅 사용Enable Diagnostic and metric logging on Azure VMware Solution",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "더 빠른 API 개발을 위해 Visual Studio Code APIM 확장 사용 촉진",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure VMware Solution 게스트 VM 워크로드에 Log Analytics 에이전트 배포",
+ "text": "워크플로에서 DevOps 및 CI/CD 구현",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
"severity": "보통",
- "text": "Azure VMware Solution VM 워크로드에 대한 백업 정책 및 솔루션을 문서화하고 구현했는지 확인합니다.",
- "waf": "작업"
+ "text": "클라이언트 인증서 인증을 사용하여 API 보안",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
+ "service": "APIM",
"severity": "보통",
- "text": "클라우드용 Microsoft Defender를 사용하여 Azure VMware Solution에서 실행되는 워크로드의 규정 준수 모니터링",
+ "text": "클라이언트 인증서 인증을 사용한 보안 백엔드 서비스",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
+ "service": "APIM",
"severity": "보통",
- "text": "적용 가능한 규정 준수 기준이 클라우드용 Microsoft Defender에 추가되었나요?",
+ "text": "'OWASP API 보안 상위 10개 위협을 완화하기 위한 권장 사항' 문서를 검토하고 API에 적용할 수 있는 항목을 확인합니다.",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
- "service": "AVS",
- "severity": "높다",
- "text": "Azure VMware Solution 배포에 사용할 Azure 지역을 선택할 때 데이터 보존이 평가되었나요?",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "권한 부여 기능을 사용하여 백엔드 API에 대한 OAuth 2.0 토큰 관리 간소화",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
+ "service": "APIM",
"severity": "높다",
- "text": "데이터 처리의 영향(서비스 제공자/서비스 소비자 모델)이 명확하고 문서화되어 있습니까?",
+ "text": "전송 중인 정보를 암호화할 때 최신 TLS 버전을 사용합니다. 가능한 경우 오래되고 불필요한 프로토콜과 암호를 사용하지 않도록 설정합니다.",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
- "service": "AVS",
- "severity": "보통",
- "text": "규정 준수를 위해 필요한 경우에만 vSAN에 CMK(고객 관리 키)를 사용하는 것이 좋습니다.",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
+ "service": "APIM",
+ "severity": "높다",
+ "text": "비밀(명명된 값)이 안전하게 액세스하고 업데이트할 수 있도록 Azure Key Vault에 저장되었는지 확인합니다.",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
- "severity": "높다",
- "text": "핵심 Azure VMware Solution 모니터링 인사이트를 사용하도록 설정하는 대시보드 만들기",
- "waf": "작업"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
+ "service": "APIM",
+ "severity": "보통",
+ "text": "가능할 때마다 관리 ID를 사용하여 다른 Azure 리소스에 인증",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
- "service": "AVS",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
+ "service": "APIM",
"severity": "높다",
- "text": "Azure VMware Solution 성능에 대한 자동 경고에 대한 중요 임계값에 대한 경고 만들기(CPU >80%, 평균 메모리>80%, vSAN>70%)",
- "waf": "작업"
+ "text": "APIM 앞에 Application Gateway를 배포하여 WAF(웹 애플리케이션 방화벽) 사용Use Web Application Firewall (WAF) by deploying Application Gateway in of APIM",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
- "service": "AVS",
- "severity": "높다",
- "text": "VMware의 지원 임계값이므로 vSAN 사용량이 75% 미만인지 모니터링하기 위해 중요한 경고가 생성되었는지 확인합니다.",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "Azure Front Door에서 고객 관리형 TLS 인증서를 사용하는 경우 '최신' 인증서 버전을 사용합니다. 수동 인증서 갱신으로 인한 중단 위험을 줄입니다.",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
- "service": "AVS",
- "severity": "높다",
- "text": "Azure Service Health 경고 및 알림에 대해 경고가 구성되었는지 확인",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "WAF 정책과 함께 Azure Front Door를 사용하여 여러 Azure 지역에 걸쳐 있는 글로벌 HTTP/S 앱을 제공하고 보호할 수 있습니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
"severity": "보통",
- "text": "처리를 위해 Azure Storage 계정 또는 Azure EventHub로 보내도록 Azure VMware Solution 로깅 구성",
- "waf": "작업"
+ "text": "Front Door 및 Application Gateway를 사용하여 HTTP/S 앱을 보호하는 경우 Front Door에서 WAF 정책을 사용합니다. Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
- "severity": "낮다",
- "text": "VMware vSphere에 대한 심층적인 통찰력이 필요한 경우: 솔루션에서 vRealize Operations 및/또는 vRealize Network Insights가 사용됩니까?",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Web Application Firewall이 트래픽을 허용하거나 거부하기 위해 적절한 조치를 취할 수 있도록 Front Door에 대한 WAF 정책을 '방지' 모드'에 배포합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
"severity": "높다",
- "text": "VM에 대한 vSAN 스토리지 정책은 씩 프로비저닝을 적용하므로 기본 스토리지 정책이 아닌지 확인합니다.",
- "waf": "작업"
+ "text": "Traffic Manager를 Front Door 뒤에 배치하지 마세요.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
- "severity": "보통",
- "text": "vSAN은 유한한 리소스이므로 vSphere 컨텐츠 라이브러리가 vSAN에 배치되지 않도록 합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Azure Front Door 및 원본에서 동일한 도메인 이름을 사용합니다. 호스트 이름이 일치하지 않으면 미묘한 버그가 발생할 수 있습니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
- "severity": "보통",
- "text": "백업 솔루션에 대한 데이터 저장소가 vSAN 스토리지 외부에 저장되어 있는지 확인합니다. Azure 네이티브 또는 디스크 풀 지원 데이터 저장소에서",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "낮다",
+ "text": "Azure Front Door 원본 그룹에 원본이 하나만 있는 경우 상태 프로브를 사용하지 않도록 설정합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
"severity": "보통",
- "text": "Azure VMware Solution에서 실행되는 워크로드가 서버용 Azure Arc를 사용하여 하이브리드 관리되는지 확인합니다(Arc for Azure VMware Solution은 미리 보기 상태임).",
- "waf": "작업"
+ "text": "Azure Front Door에 대한 양호한 상태 프로브 엔드포인트를 선택합니다. 애플리케이션의 모든 종속성을 확인하는 상태 엔드포인트를 구축하는 것이 좋습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
- "service": "AVS",
- "severity": "보통",
- "text": "Azure Log Analytics 및 Azure Monitor를 사용하여 Azure VMware Solution에서 실행되는 워크로드를 모니터링하는지 확인합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "낮다",
+ "text": "Azure Front Door와 함께 HEAD 상태 프로브를 사용하여 Front Door가 애플리케이션으로 보내는 트래픽을 줄입니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
- "service": "AVS",
- "severity": "보통",
- "text": "기존 업데이트 관리 도구 또는 Azure 업데이트 관리에 Azure VMware Solution에서 실행되는 워크로드 포함",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Azure Front Door에서 관리형 TLS 인증서를 사용합니다. 운영 비용을 줄이고 인증서 갱신으로 인한 중단 위험을 줄입니다.",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
"severity": "보통",
- "text": "Azure Policy를 사용하여 Azure 관리, 모니터링 및 보안 솔루션에서 Azure VMware Solution 워크로드 온보딩",
+ "text": "Azure Front Door WAF 구성을 코드로 정의합니다. 코드를 사용하면 새 규칙 집합 버전을 보다 쉽게 채택하고 추가 보호를 얻을 수 있습니다.",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
- "service": "AVS",
- "severity": "보통",
- "text": "Azure VMware Solution에서 실행되는 워크로드가 클라우드용 Microsoft Defender에 온보딩되었는지 확인",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Azure Front Door에서 엔드투엔드 TLS를 사용합니다. 클라이언트에서 Front Door로, Front Door에서 원본으로의 연결에 TLS를 사용합니다.",
"waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
- "severity": "보통",
- "text": "vSAN은 유한한 리소스이므로 백업이 vSAN에 저장되지 않도록 합니다.",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"severity": "보통",
- "text": "모든 DR 솔루션을 고려하고 비즈니스에 가장 적합한 솔루션을 결정했습니까? [SRM/제트스트림/제르토/빔/...]",
- "waf": "신뢰도"
+ "text": "Azure Front Door에서 HTTP를 HTTPS로 리디렉션을 사용합니다. 이전 클라이언트를 HTTPS 요청으로 자동으로 리디렉션하여 지원합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
- "severity": "보통",
- "text": "재해 복구 기술이 네이티브 Azure IaaS인 경우 Azure Site Recovery 사용Use Azure Site Recovery when the Disaster Recovery technology is native Azure IaaS",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Azure Front Door WAF를 사용하도록 설정합니다. 다양한 공격으로부터 애플리케이션을 보호합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"severity": "높다",
- "text": "재해 솔루션 중 하나와 함께 자동화된 복구 계획을 사용하고 가능한 한 수동 작업을 피하십시오.",
- "waf": "신뢰도"
+ "text": "검색 모드에서 WAF를 구성하여 워크로드에 맞게 Azure Front Door WAF를 조정하여 가양성 검색을 줄이고 수정합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
- "service": "AVS",
- "severity": "보통",
- "text": "지정학적 지역 쌍을 보조 재해 복구 환경으로 사용Use the geopolitical region pair as the secondary disaster recovery environment",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Azure Front Door WAF 정책에서 요청 본문 검사 기능을 사용하도록 설정합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
"severity": "높다",
- "text": "지역 간에 2개의 서로 다른 주소 공간을 사용합니다(예: 서로 다른 지역에 대해 10.0.0.0/16 및 192.168.0.0/16).",
- "waf": "신뢰도"
+ "text": "Azure Front Door WAF 기본 규칙 집합을 사용하도록 설정합니다. 기본 규칙 집합은 일반적인 공격을 탐지하고 차단합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
- "severity": "보통",
- "text": "ExpressRoute Global Reach는 기본 및 보조 Azure VMware Solution 프라이빗 클라우드 간의 연결에 사용되나요, 아니면 네트워크 가상 어플라이언스를 통해 라우팅이 수행되나요?",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "Azure Front Door WAF 봇 보호 규칙 집합을 사용하도록 설정합니다. 봇 규칙은 좋은 봇과 나쁜 봇을 감지합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"severity": "보통",
- "text": "모든 백업 솔루션을 고려하고 비즈니스에 가장 적합한 솔루션을 결정했습니까? [ MABS/CommVault/Metallic.io/Veeam/입니다. ]",
- "waf": "신뢰도"
+ "text": "최신 Azure Front Door WAF 규칙 집합 버전을 사용합니다. 규칙 집합 업데이트는 현재 위협 환경을 고려하기 위해 정기적으로 업데이트됩니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
"severity": "보통",
- "text": "Azure VMware Solution 프라이빗 클라우드와 동일한 지역에 백업 솔루션 배포Deploy your backup solution in the same region as your Azure VMware Solution private cloud",
- "waf": "신뢰도"
+ "text": "Azure Front Door WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 단기간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
"severity": "보통",
- "text": "vSan의 외부, Azure 네이티브 구성 요소에 백업 솔루션 배포",
- "waf": "신뢰도"
+ "text": "Azure Front Door WAF 속도 제한에 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호를 제공합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
"severity": "낮다",
- "text": "Azure 플랫폼에서 관리하는 VMware 구성 요소의 복원을 요청하는 프로세스가 마련되어 있나요?",
- "waf": "신뢰도"
+ "text": "모든 지역에서 트래픽이 발생할 것으로 예상되지 않는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
- "severity": "낮다",
- "text": "수동 배포의 경우 모든 구성 및 배포를 문서화해야 합니다",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "Azure Front Door WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 마세요.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
- "severity": "낮다",
- "text": "수동 배포의 경우 Azure VMware Solution 프라이빗 클라우드에서 실수로 인한 작업을 방지하기 위해 리소스 잠금을 구현하는 것이 좋습니다",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "Diagnostic Settings(진단 설정)를 켜서 로그 및 메트릭을 캡처합니다. 리소스 활동 로그, 액세스 로그, 상태 프로브 로그 및 WAF 로그를 포함합니다. 알림을 설정합니다.",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
- "severity": "낮다",
- "text": "자동화된 배포의 경우 최소한의 프라이빗 클라우드를 배포하고 필요에 따라 확장합니다",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "Azure Front Door WAF 로그를 Microsoft Sentinel로 보냅니다.",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
- "severity": "낮다",
- "text": "자동화된 배포의 경우 배포를 시작하기 전에 할당량을 요청하거나 예약합니다",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "배포 전략을 지원하는 라우팅 방법을 선택합니다. 구성된 가중치 계수에 따라 트래픽을 분산하는 가중치 방법은 액티브-액티브 모델을 지원합니다. 모든 트래픽을 수신하고 보조 지역으로 트래픽을 백업으로 보내도록 주 지역을 구성하는 우선 순위 기반 값은 활성-수동 모델을 지원합니다. 앞의 방법을 지연 시간과 결합하여 지연 시간이 가장 낮은 오리진이 트래픽을 수신하도록 합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
- "service": "AVS",
- "severity": "낮다",
- "text": "자동화된 배포의 경우 적절한 거버넌스를 위해 자동화 또는 Azure Policy를 통해 관련 리소스 잠금을 만들어야 합니다",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "하나 이상의 백 엔드 풀에 여러 원본을 두어 중복성을 지원합니다. 항상 응용 프로그램의 중복 인스턴스를 가지고 있으며 각 인스턴스가 끝점 또는 원본을 노출하는지 확인하십시오. 이러한 원본을 하나 이상의 백 엔드 풀에 배치할 수 있습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
- "service": "AVS",
- "severity": "낮다",
- "text": "ExR 인증 키에 대해 사람이 이해할 수 있는 이름을 구현하여 키의 목적/용도를 쉽게 식별할 수 있습니다.",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "백 엔드에 대한 요청 전달에 대한 시간 제한을 설정합니다. 엔드포인트의 필요에 따라 시간 제한 설정을 조정합니다. 그렇지 않으면 원본이 응답을 보내기 전에 Azure Front Door가 연결을 닫을 수 있습니다. 모든 원본의 시간 제한이 더 짧은 경우 Azure Front Door의 기본 시간 제한을 낮출 수도 있습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
- "service": "AVS",
- "severity": "낮다",
- "text": "Azure VMware Solution 및 ExpressRoute를 배포하는 데 별도의 서비스 원칙을 사용하는 경우 Key Vault를 사용하여 비밀 및 권한 부여 키를 저장합니다",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "응용 프로그램에 세션 선호도가 필요한지 여부를 결정합니다. 높은 안정성 요구 사항이 있는 경우 세션 선호도를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
- "service": "AVS",
- "severity": "낮다",
- "text": "Azure VMware Solution은 제한된 수의 병렬 작업만 지원하므로 많은 리소스를 Azure VMware Solution 배포해야 하는 경우 IaC에서 작업을 직렬화하기 위한 리소스 종속성을 정의합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "호스트 헤더를 백 엔드로 보냅니다. 백 엔드 서비스는 해당 호스트의 트래픽만 허용하는 규칙을 만들 수 있도록 호스트 이름을 인식해야 합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
- "service": "AVS",
- "severity": "낮다",
- "text": "단일 Tier-1 게이트웨이를 사용하여 NSX-T 세그먼트의 자동화된 구성을 수행하는 경우 NSX-Manager API 대신 Azure Portal API를 사용합니다",
- "waf": "작업"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "캐싱을 지원하는 엔드포인트에 대해 캐싱을 사용합니다.",
+ "waf": "비용"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
- "service": "AVS",
- "severity": "보통",
- "text": "자동화된 스케일 아웃을 사용하려는 경우 Azure VMware Solution을 실행하는 구독에 대해 충분한 Azure VMware Solution 할당량을 적용해야 합니다",
- "waf": "공연"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "낮다",
+ "text": "단일 백 엔드 풀에서 상태 검사를 사용하지 않도록 설정합니다. Azure Front Door 원본 그룹에 원본이 하나만 구성된 경우 이러한 호출이 필요하지 않습니다. 이는 엔드포인트에 여러 원본을 가질 수 없는 경우에만 권장됩니다.",
+ "waf": "비용"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
"severity": "보통",
- "text": "자동 축소를 사용하려는 경우 이러한 작업을 수행하기 전에 스토리지 정책 요구 사항을 고려해야 합니다",
- "waf": "공연"
+ "text": "보안 보고서를 활용하기 위해 프리미엄 계층을 사용하는 것이 좋지만 표준 Azure Front Door 프로필은 기본 제공 분석/보고서에서 트래픽 보고서만 제공합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
"severity": "보통",
- "text": "한 번에 하나의 크기 조정 작업만 수행할 수 있으므로 크기 조정 작업은 항상 단일 SDDC 내에서 직렬화되어야 합니다(여러 클러스터를 사용하는 경우에도)",
- "waf": "공연"
+ "text": "가능한 경우 와일드카드 TLS 인증서를 사용합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"severity": "보통",
- "text": "아키텍처에 사용되는 제3자 솔루션에 대한 확장 작업을 고려하고 검증합니다(지원 여부)Consider and validate scaling operations on 3rd party solutions used in the architecture (supported or not)",
+ "text": "캐싱을 위해 응용 프로그램 쿼리 문자열을 최적화합니다. 순전히 정적인 콘텐츠의 경우 쿼리 문자열을 무시하여 캐시 사용을 최대화합니다. 응용 프로그램에서 쿼리 문자열을 사용하는 경우 캐시 키에 포함하는 것이 좋습니다. 캐시 키에 쿼리 문자열을 포함하면 Azure Front Door가 구성에 따라 캐시된 응답 또는 기타 응답을 제공할 수 있습니다.",
"waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
"severity": "보통",
- "text": "자동화에서 환경에 대한 규모 확장/축소 최대 한도 정의 및 적용Define and enforce scale in/out maximum limits for your environment in the automations",
+ "text": "다운로드 가능한 콘텐츠에 액세스할 때 파일 압축을 사용합니다.",
"waf": "공연"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
- "service": "AVS",
- "severity": "보통",
- "text": "모니터링 규칙을 구현하여 자동화된 조정 작업을 모니터링하고 성공 및 실패를 모니터링하여 적절한(자동) 응답을 사용하도록 설정합니다.",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "높다",
+ "text": "클래식 Azure Front Door는 2027년 3월까지 더 이상 사용되지 않으므로 현재 클래식 Azure Front Door를 사용하는 경우 표준 또는 프리미엄 SKU로 마이그레이션하는 것이 좋습니다.",
"waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
- "severity": "높다",
- "text": "MON을 사용하는 경우 동시에 구성된 VM의 제한(HCX에 대한 MON 제한[400 - 표준, 1000 - 대형 어플라이언스])을 알고 있어야 합니다.",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "중요 업무용 고가용성 시나리오의 경우 Traffic Manager 부하 분산 Azure Front Door 및 타사 CDN 공급자 CDN 프로필을 사용하는 것이 좋습니다. ",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
"severity": "높다",
- "text": "MON을 사용하는 경우 100개 이상의 네트워크 확장에서 MON을 사용하도록 설정할 수 없습니다",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "신뢰도"
+ "text": "원본과 함께 Front Door를 App Services로 사용하는 경우 액세스 제한을 사용하여 Azure Front Door를 통해서만 앱 서비스에 대한 트래픽을 잠그는 것이 좋습니다. ",
+ "waf": "안전"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
- "service": "AVS",
- "severity": "보통",
- "text": "마이그레이션에 VPN 연결을 사용하는 경우 그에 따라 MTU 크기를 조정합니다.",
- "waf": "공연"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
+ "service": "IoT Hub DPS",
+ "severity": "높다",
+ "text": "비즈니스 및 SLO 요구 사항에 따라 올바른 Logic App 호스팅 계획 선택Select the right Logic App hosting plan based on your business & SLO requirements",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
- "service": "AVS",
- "severity": "보통",
- "text": "Azure(500Mbps 이하)에 연결하는 낮은 연결 지역의 경우 HCX WAN 최적화 어플라이언스 배포를 고려합니다.",
- "waf": "공연"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "IoT Hub DPS",
+ "severity": "높다",
+ "text": "영역 중복 및 가용성 영역을 사용하여 지역 오류로부터 논리 앱 보호Protect logic apps from region failures with zone redundancy and availability zones",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
- "service": "AVS",
- "severity": "보통",
- "text": "마이그레이션이 클라우드 어플라이언스가 아닌 온-프레미스 어플라이언스에서 시작되는지 확인합니다(역방향 마이그레이션을 수행하지 않음).",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "8aed4fbf-0830-4883-899d-222a154af478",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "IoT Hub DPS",
+ "severity": "높다",
+ "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "AVS",
- "severity": "보통",
- "text": "Azure NetApp Files를 사용하여 Azure VMware Solution용 스토리지를 확장하는 경우 VM에 직접 연결하는 대신 VMware 데이터 저장소로 사용하는 것이 좋습니다.",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "IoT Hub DPS",
+ "severity": "높다",
+ "text": "격리된 환경에 배포하는 경우 ASE(App Service Environment) v3을 사용하거나 마이그레이션합니다",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "AVS",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "IoT Hub DPS",
"severity": "보통",
- "text": "전용 ExpressRoute 게이트웨이가 외부 데이터 스토리지 솔루션에 사용되고 있는지 확인합니다.",
- "waf": "신뢰도"
+ "text": "Azure DevOps 또는 GitHub를 활용하여 CI/CD를 간소화하고 논리 앱 코드를 보호합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "AVS",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"severity": "보통",
- "text": "외부 데이터 스토리지 솔루션에 사용되는 ExpressRoute 게이트웨이에서 FastPath를 사용하도록 설정되어 있는지 확인합니다.",
+ "text": "유연한 서버 활용",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "AVS",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
"severity": "높다",
- "text": "확장된 클러스터를 사용하는 경우 선택한 재해 복구 솔루션이 공급업체에서 지원되는지 확인합니다",
+ "text": "지역적으로 적용 가능한 경우 가용 영역 활용Leverage Availability Zones where regionally applicable",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "AVS",
- "severity": "높다",
- "text": "확장된 클러스터를 사용하는 경우 제공된 SLA가 요구 사항을 충족하는지 확인합니다",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
+ "severity": "보통",
+ "text": "지역 간 DR 시나리오에 입력 데이터 복제 활용",
"waf": "신뢰도"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "AVS",
- "severity": "높다",
- "text": "확장된 클러스터를 사용하는 경우 두 ExpressRoute 회로가 모두 연결 허브에 연결되어 있는지 확인합니다.",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "ACSS(Azure Center for SAP solutions)는 SAP를 Azure의 최상위 워크로드로 만드는 Azure 제품입니다. ACSS는 Azure에서 SAP 시스템을 통합 워크로드로 만들고 실행할 수 있도록 하는 엔드투엔드 솔루션으로, 혁신을 위한 보다 원활한 기반을 제공합니다. 새 Azure 기반 SAP 시스템과 기존 Azure 기반 SAP 시스템 모두에 대한 관리 기능을 활용할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "AVS",
- "severity": "높다",
- "text": "확장된 클러스터를 사용하는 경우 두 ExpressRoute 회로 모두에서 GlobalReach를 사용하도록 설정되어 있는지 확인합니다.",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure는 Linux 및 Windows에서 SAP 배포 자동화를 지원합니다. SAP Deployment Automation Framework는 SAP 환경을 배포, 설치 및 유지 관리할 수 있는 오픈 소스 오케스트레이션 툴입니다.",
+ "training": "https://github.com/Azure/sap-automation",
+ "waf": "작업"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "AVS",
- "severity": "높다",
- "text": "사이트 재해 허용 범위 설정을 적절하게 고려하고 필요한 경우 비즈니스에 맞게 변경하십시오.",
+ "checklist": "SAP Checklist",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "RTO를 충족하는 언제든지 특정 시점과 시간 프레임에서 프로덕션 데이터베이스에 대한 특정 시점 복구를 수행합니다. 특정 시점 복구에는 일반적으로 DBMS 계층 또는 SAP를 통해 데이터를 삭제하는 운영자 오류가 포함됩니다",
"waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "스토리지와 관련된 Microsoft 클라우드 보안 벤치마크의 지침 적용",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
"severity": "보통",
- "text": "'스토리지에 대한 Azure 보안 기준' 고려",
- "waf": "안전"
+ "text": "백업 및 복구 시간을 테스트하여 재해 발생 후 모든 시스템을 동시에 복원하기 위한 RTO 요구 사항을 충족하는지 확인합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Azure Storage는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 액세스가 필요한 Azure Compute 리소스에만 Azure Storage를 안전하게 노출할 수 있으므로 공용 인터넷에 노출되지 않습니다",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Storage에 프라이빗 엔드포인트를 사용하는 것이 좋습니다.",
- "waf": "안전"
+ "text": "쌍을 이루는 지역 간에 표준 스토리지를 복제할 수 있지만 표준 스토리지를 사용하여 데이터베이스 또는 가상 하드 디스크를 저장할 수는 없습니다. 사용하는 쌍을 이루는 지역 간에만 백업을 복제할 수 있습니다. 다른 모든 데이터의 경우 SQL Server Always On 또는 SAP HANA 시스템 복제와 같은 기본 DBMS 기능을 사용하여 복제를 실행합니다. SAP 애플리케이션 계층에 Site Recovery, rsync 또는 robocopy 및 기타 타사 소프트웨어를 조합하여 사용합니다.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "새로 만든 저장소 계정은 ARM 배포 모델을 사용하여 만들어지므로 RBAC, 감사 등을 모두 사용할 수 있습니다. 구독에 클래식 배포 모델이 있는 이전 저장소 계정이 없는지 확인합니다.",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"severity": "보통",
- "text": "이전 스토리지 계정이 '클래식 배포 모델'을 사용하지 않는지 확인",
- "waf": "안전"
+ "text": "고가용성을 달성하기 위해 Azure 가용성 영역을 사용하는 경우 SAP 애플리케이션 서버와 데이터베이스 서버 간의 대기 시간을 고려해야 합니다. 대기 시간이 긴 영역의 경우 SAP 애플리케이션 서버와 데이터베이스 서버가 항상 동일한 영역에서 실행되도록 운영 절차를 마련해야 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Microsoft Defender를 활용하여 의심스러운 활동 및 잘못된 구성에 대해 알아봅니다.",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
"severity": "높다",
- "text": "모든 스토리지 계정에 대해 Microsoft Defender 사용",
- "waf": "안전"
+ "text": "온-프레미스에서 주 및 보조 Azure 재해 복구 지역으로의 ExpressRoute 연결을 설정합니다. 또한 ExpressRoute를 사용하는 대신 온-프레미스에서 주 및 보조 Azure 재해 복구 지역으로 VPN 연결을 설정하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "일시 삭제 메커니즘을 사용하면 실수로 삭제된 Blob을 복구할 수 있습니다.",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "Blob에 대해 '일시 삭제' 사용Enable 'soft delete' for blobs",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "DR 지역에서 데이터의 암호를 해독할 수 있도록 인증서, 비밀 또는 키와 같은 키 자격 증명 모음 콘텐츠를 지역 간에 복제합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
"severity": "보통",
- "text": "Blob에 대해 '일시 삭제' 사용 안 함",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "컨테이너에 대한 일시 삭제를 사용하면 컨테이너가 삭제된 후 컨테이너를 복구할 수 있습니다(예: 실수로 인한 삭제 작업에서 복구).",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
- "severity": "높다",
- "text": "컨테이너에 대해 '일시 삭제' 사용Enable 'soft delete' for containers",
- "waf": "안전"
+ "text": "기본 및 재해 복구 가상 네트워크를 피어링합니다. 예를 들어 HANA 시스템 복제의 경우 SAP HANA DB 가상 네트워크를 재해 복구 사이트의 SAP HANA DB 가상 네트워크에 피어링해야 합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "컨테이너에 대해 '일시 삭제' 사용 안 함",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "SAP 배포에 Azure NetApp Files 스토리지를 사용하는 경우 최소한 두 지역의 프리미엄 계층에 두 개의 Azure NetApp Files 계정을 만듭니다.",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "사용자가 삭제하기 전에 먼저 삭제 잠금을 제거하도록 강제하여 저장소 계정이 실수로 삭제되는 것을 방지합니다.",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
"severity": "높다",
- "text": "스토리지 계정에 대한 리소스 잠금 사용Enable resource locks on storage accounts",
- "waf": "안전"
+ "text": "기본 데이터베이스 복제 기술을 사용하여 HA 쌍의 데이터베이스를 동기화해야 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Blob에 대한 '법적 보존' 또는 '시간 기반 보존' 정책을 고려하면 Blob, 컨테이너 또는 스토리지 계정을 삭제할 수 없습니다. '불가능'은 실제로 '불가능'을 의미합니다. 스토리지 계정에 변경할 수 없는 Blob이 포함된 경우 해당 스토리지 계정을 '제거'하는 유일한 방법은 Azure 구독을 취소하는 것입니다.",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
"severity": "높다",
- "text": "변경할 수 없는 Blob 고려",
- "waf": "안전"
+ "text": "기본 VNet(가상 네트워크)의 CIDR은 DR 사이트 VNet의 CIDR과 충돌하거나 겹치지 않아야 합니다",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "모든 데이터 전송이 암호화되고, 무결성이 보호되고, 서버가 인증되도록 스토리지 계정에 대한 보호되지 않는 HTTP/80 액세스를 사용하지 않도록 설정하는 것이 좋습니다. ",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
"severity": "높다",
- "text": "HTTPS 필요, 즉 스토리지 계정에서 포트 80 사용 안 함Require HTTPS, i.e. disable port 80 on the storage account",
- "waf": "안전"
+ "text": "Site Recovery를 사용하여 응용 프로그램 서버를 DR 사이트에 복제합니다. Site Recovery는 중앙 서비스 클러스터 VM을 DR 사이트에 복제하는 데도 도움이 될 수 있습니다. DR을 호출할 때 DR 사이트에서 Linux Pacemaker 클러스터를 다시 구성해야 합니다(예: VIP 또는 SBD 바꾸기, corosync.conf 실행 등).",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "스토리지 계정에서 사용자 지정 도메인(호스트 이름)을 구성할 때 TLS/HTTPS가 필요한지 여부를 확인합니다. 이 경우 저장소 계정 앞에 Azure CDN을 배치해야 할 수 있습니다.",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"severity": "높다",
- "text": "HTTPS를 적용할 때(HTTP 사용 안 함) 스토리지 계정에 사용자 지정 도메인(CNAME)을 사용하지 않는지 확인합니다.",
- "waf": "안전"
+ "text": "단일 장애 지점에 대한 SAP 소프트웨어의 가용성을 고려합니다. 여기에는 SAP NetWeaver 및 SAP S/4HANA 아키텍처, SAP ABAP 및 ASCS + SCS에서 사용되는 DBMS와 같은 애플리케이션 내의 단일 실패 지점이 포함됩니다. 또한 SAP Web Dispatcher와 같은 다른 도구도 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "클라이언트가 SAS 토큰을 사용하여 Blob 데이터에 액세스할 때 HTTPS를 요구하면 자격 증명 손실 위험을 최소화하는 데 도움이 됩니다.",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "SAS(공유 액세스 서명) 토큰을 HTTPS 연결로만 제한",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP 및 SAP 데이터베이스의 경우 자동 장애 조치(failover) 클러스터를 구현하는 것이 좋습니다. Windows에서 Windows Server 장애 조치(failover) 클러스터링은 장애 조치(failover)를 지원합니다. Linux에서 Linux Pacemaker 또는 SIOS Protection Suite 및 Veritas InfoScale과 같은 타사 도구는 장애 조치를 지원합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "AAD 토큰은 가능한 경우 공유 액세스 서명보다 우선해야 합니다",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
"severity": "높다",
- "text": "Blob 액세스에 Azure AD(Azure Active Directory) 토큰 사용Use Azure Active Directory (Azure AD) tokens for blob access",
- "waf": "안전"
+ "text": "Azure는 기본 및 보조 VM이 DBMS 데이터에 대한 스토리지를 공유하는 아키텍처를 지원하지 않습니다. DBMS 계층의 경우 일반적인 아키텍처 패턴은 기본 및 보조 VM에서 사용하는 것과 다른 스토리지 스택을 사용하여 동시에 데이터베이스를 복제하는 것입니다.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "사용자, 그룹 또는 응용 프로그램에 역할을 할당할 때 해당 보안 주체가 작업을 수행하는 데 필요한 권한만 부여합니다. 리소스에 대한 액세스를 제한하면 의도하지 않은 데이터 오용과 악의적인 데이터 오용을 모두 방지할 수 있습니다.",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "IaM 권한의 최소 권한",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "DBMS 데이터 및 트랜잭션/다시 실행 로그 파일은 Azure 지원 블록 스토리지 또는 Azure NetApp Files에 저장됩니다. Azure Files 또는 Azure Premium Files는 SAP 워크로드를 사용하여 DBMS 데이터 및/또는 다시 실행 로그 파일에 대한 스토리지로 지원되지 않습니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "사용자 위임 SAS는 Azure AD(Azure Active Directory) 자격 증명과 SAS에 지정된 권한으로 보호됩니다. 사용자 위임 SAS는 범위와 기능 측면에서 서비스 SAS와 유사하지만 서비스 SAS에 비해 보안상의 이점을 제공합니다. ",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
"severity": "높다",
- "text": "SAS를 사용하는 경우 스토리지 계정 키 기반 SAS보다 '사용자 위임 SAS'를 선호합니다.",
- "waf": "안전"
+ "text": "ASCS + SCS 구성 요소 및 특정 고가용성 시나리오에 대해 Windows에서 Azure 공유 디스크를 사용할 수 있습니다. SAP 애플리케이션 계층 구성 요소 및 DBMS 계층에 대해 장애 조치(failover) 클러스터를 별도로 설정합니다. Azure는 현재 SAP 애플리케이션 계층 구성 요소와 DBMS 계층을 하나의 장애 조치(failover) 클러스터로 결합하는 고가용성 아키텍처를 지원하지 않습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "스토리지 계정 키('공유 키')에는 감사 기능이 거의 없습니다. 누가/언제 키 사본을 가져왔는지 모니터링할 수 있지만, 키가 여러 사람의 손에 들어가면 특정 사용자의 사용을 귀속시키는 것은 불가능합니다. AAD 인증에만 의존하면 스토리지 액세스를 사용자에게 더 쉽게 연결할 수 있습니다. ",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
"severity": "높다",
- "text": "AAD 액세스(및 사용자 위임 SAS)만 지원되도록 스토리지 계정 키를 사용하지 않도록 설정하는 것이 좋습니다.",
- "waf": "안전"
+ "text": "SAP ASCS(애플리케이션 계층 구성 요소) 및 DBMS 계층에 대한 대부분의 장애 조치(failover) 클러스터에는 장애 조치(failover) 클러스터에 대한 가상 IP 주소가 필요합니다. Azure Load Balancer는 다른 모든 경우에 대해 가상 IP 주소를 처리해야 합니다. 한 가지 설계 원칙은 클러스터 구성당 하나의 부하 분산 장치를 사용하는 것입니다. 부하 분산 장치의 표준 버전(표준 Load Balancer SKU)을 사용하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "활동 로그 데이터를 사용하여 스토리지 계정의 보안을 보거나 변경하는 '시기', '누가', '무엇을' 및 '방법'(예: 스토리지 계정 키, 액세스 정책 등)을 식별합니다.",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Monitor를 사용하여 스토리지 계정에 대한 컨트롤 플레인 작업을 감사하는 것이 좋습니다.",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "키 만료 정책을 사용하면 계정 액세스 키 교체에 대한 미리 알림을 설정할 수 있습니다. 지정된 간격이 경과하고 키가 아직 회전되지 않은 경우 알림이 표시됩니다.",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "스토리지 계정 키를 사용하는 경우 '키 만료 정책'을 사용하도록 설정하는 것이 좋습니다",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "SAS 만료 정책은 SAS가 유효한 권장 간격을 지정합니다. SAS 만료 정책은 서비스 SAS 또는 계정 SAS에 적용됩니다. 사용자가 권장 간격보다 큰 유효 간격을 사용하여 서비스 SAS 또는 계정 SAS를 생성하면 경고가 표시됩니다.",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "SAS 만료 정책 구성 고려",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "저장된 액세스 정책은 스토리지 계정 키를 다시 생성할 필요 없이 서비스 SAS에 대한 권한을 취소하는 옵션을 제공합니다. ",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "SAS를 저장된 액세스 정책에 연결하는 것이 좋습니다.",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "체크 인된 연결 문자열 및 저장소 계정 키를 검색하도록 응용 프로그램의 소스 코드 리포지토리를 구성하는 것이 좋습니다.",
- "waf": "안전"
+ "text": "로드 밸런서에서 부동 IP가 활성화되어 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "이상적으로 애플리케이션은 관리 ID를 사용하여 Azure Storage에 인증해야 합니다. 이렇게 할 수 없는 경우 Azure KeyVault 또는 동등한 서비스에 스토리지 자격 증명(연결 문자열, 스토리지 계정 키, SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다.",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure KeyVault에 연결 문자열을 저장하는 것이 좋습니다(관리 ID를 사용할 수 없는 시나리오에서).",
- "waf": "안전"
+ "text": "고가용성 인프라를 배포하기 전에 선택한 지역에 따라 Azure 가용성 집합을 사용하여 배포할지 또는 가용성 영역을 사용하여 배포할지를 결정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "임시 SAS 서비스 SAS 또는 계정 SAS에서 단기 만료 시간을 사용합니다. 이러한 방식으로 SAS가 손상되더라도 짧은 시간 동안만 유효합니다. 이 방법은 저장된 액세스 정책을 참조할 수 없는 경우에 특히 중요합니다. 또한 단기 만료 시간은 업로드에 사용할 수 있는 시간을 제한하여 Blob에 쓸 수 있는 데이터의 양을 제한합니다.",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
"severity": "높다",
- "text": "임시 SAS의 유효 기간을 단축하기 위해 노력",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "SAS를 만들 때는 가능한 한 구체적이고 제한적이어야 합니다. 훨씬 더 광범위한 액세스를 제공하는 SAS보다 단일 리소스 및 작업에 대해 SAS를 선호합니다.",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "SAS에 좁은 범위 적용",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "SAS에는 SAS를 사용하여 리소스를 요청할 수 있는 권한이 있는 클라이언트 IP 주소 또는 주소 범위에 대한 매개 변수가 포함될 수 있습니다. ",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "가능한 경우 SAS의 범위를 특정 클라이언트 IP 주소로 지정하는 것이 좋습니다",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "SAS는 클라이언트가 업로드하는 데이터의 양을 제한할 수 없습니다. 시간 경과에 따른 스토리지 양의 가격 책정 모델을 고려할 때 클라이언트가 악의적으로 큰 콘텐츠를 업로드했는지 여부를 확인하는 것이 합리적일 수 있습니다.",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
- "severity": "낮다",
- "text": "클라이언트가 SAS를 사용하여 파일을 업로드한 후 업로드된 데이터를 확인하는 것이 좋습니다. ",
- "waf": "안전"
+ "text": "SAP 구성 요소(중앙 서비스, 애플리케이션 서버 및 데이터베이스)용 애플리케이션에 대한 인프라 SLA를 충족하려면 모든 구성 요소에 대해 동일한 고가용성 옵션(VM, 가용성 집합, 가용성 영역)을 선택해야 합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "'로컬 사용자 계정'을 사용하여 SFTP를 통해 Blob Storage에 액세스하는 경우 '일반적인' RBAC 컨트롤이 적용되지 않습니다. NFS 또는 REST를 통한 Blob 액세스는 SFTP 액세스보다 더 제한적일 수 있습니다. 안타깝게도 2023년 초부터 로컬 사용자는 현재 SFTP 엔드포인트에 대해 지원되는 유일한 ID 관리 형태입니다",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"severity": "높다",
- "text": "SFTP: SFTP 액세스에 대한 '로컬 사용자'의 수를 제한하고 시간이 지남에 따라 액세스가 필요한지 여부를 감사합니다.",
- "waf": "안전"
+ "text": "동일한 가용성 집합에서 서로 다른 역할의 서버를 혼합하지 마십시오. 중앙 서비스 VM, 데이터베이스 VM, 애플리케이션 VM을 자체 가용성 집합으로 유지",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
"severity": "보통",
- "text": "SFTP: SFTP 엔드포인트는 POSIX와 유사한 ACL을 지원하지 않습니다.",
- "waf": "안전"
+ "text": "근접 배치 그룹을 사용하지 않는 한 Azure 가용성 영역 내에 Azure 가용성 집합을 배포할 수 없습니다.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "스토리지는 CORS(Cross-Origin Resource Sharing), 즉 다른 도메인의 웹앱이 동일 출처 정책을 완화할 수 있도록 하는 HTTP 기능을 지원합니다. CORS를 사용하도록 설정할 때 CorsRules를 최소 권한으로 유지합니다.",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"severity": "높다",
- "text": "지나치게 광범위한 CORS 정책 방지",
- "waf": "안전"
+ "text": "가용성 집합을 만들 때 사용 가능한 최대 장애 도메인 및 업데이트 도메인 수를 사용합니다. 예를 들어 하나의 가용성 집합에 두 개 이상의 VM을 배포하는 경우 Azure 계획된 유지 관리 외에도 잠재적인 물리적 하드웨어 오류, 네트워크 중단 또는 전원 중단의 영향을 제한할 수 있는 최대 장애 도메인 수(3개)와 충분한 업데이트 도메인을 사용합니다. 장애 도메인의 기본 수는 2개이며 나중에 온라인으로 변경할 수 없습니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "미사용 데이터는 항상 서버 쪽에서 암호화되며 클라이언트 쪽에서도 암호화될 수 있습니다. 서버 쪽 암호화는 플랫폼 관리형 키(기본값) 또는 고객 관리형 키를 사용하여 발생할 수 있습니다. 클라이언트 쪽 암호화는 클라이언트가 Azure Storage에 Blob별로 암호화/암호 해독 키를 제공하거나 클라이언트 쪽에서 암호화를 완전히 처리하여 발생할 수 있습니다. 따라서 기밀성 보장을 위해 Azure Storage에 전혀 의존하지 않습니다.",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"severity": "높다",
- "text": "미사용 데이터를 암호화하는 방법을 결정합니다. 데이터에 대한 스레드 모델을 이해합니다.",
- "waf": "안전"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "사용해야 하는 플랫폼 암호화를 결정합니다.",
- "waf": "안전"
+ "text": "가용성 집합 배포에서 Azure 근접 배치 그룹을 사용하는 경우 세 가지 SAP 구성 요소(중앙 서비스, 애플리케이션 서버 및 데이터베이스)가 모두 동일한 근접 배치 그룹에 있어야 합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
- "severity": "보통",
- "text": "사용해야 하는 클라이언트 쪽 암호화를 결정합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP SID당 하나의 근접 배치 그룹을 사용합니다. 그룹은 가용성 영역 또는 Azure 지역에 걸쳐 있지 않습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Resource Graph Explorer(resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true)를 활용하여 익명 Blob 액세스를 허용하는 스토리지 계정을 찾습니다.",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"severity": "높다",
- "text": "공용 Blob 액세스가 필요한지 또는 특정 스토리지 계정에 대해 사용하지 않도록 설정할 수 있는지 여부를 고려합니다. ",
- "waf": "안전"
+ "text": "운영 체제에 따라 다음 서비스 중 하나를 사용하여 SAP 중앙 서비스 클러스터를 실행합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Bot Service",
- "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
- "service": "Bot service",
+ "checklist": "SAP Checklist",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Bot Service의 안정성 지원 권장 사항을 따릅니다",
+ "text": "Azure는 현재 동일한 Linux Pacemaker 클러스터에서 ASCS와 DB HA를 결합하는 것을 지원하지 않습니다. 개별 클러스터로 분리합니다. 그러나 최대 5개의 여러 중앙 서비스 클러스터를 한 쌍의 VM으로 결합할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "신뢰도"
},
{
- "checklist": "Azure Bot Service",
- "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
- "service": "Bot service",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"severity": "보통",
- "text": "로컬 데이터 레지던시 및 지역 규정 준수를 통해 봇 배포Deploying bots with local data residency and regional compliance",
+ "text": "가용성 집합 또는 가용성 영역의 고가용성 쌍에 두 VM을 모두 배포합니다. 이러한 VM은 크기가 동일해야 하며 스토리지 구성이 동일해야 합니다.",
"waf": "신뢰도"
},
{
- "checklist": "Azure Bot Service",
- "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
- "service": "Bot service",
+ "checklist": "SAP Checklist",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Bot Service는 글로벌 및 지역 서비스 모두에 대해 활성-활성 모드로 실행됩니다. 중단이 발생하면 오류를 감지하거나 서비스를 관리할 필요가 없습니다. Azure Bot Service는 다중 지역 지리적 아키텍처에서 자동 장애 조치(failover) 및 자동 복구를 자동으로 수행합니다. EU 봇 지역 서비스의 경우 Azure Bot Service는 중복성을 보장하기 위해 활성/활성 복제가 있는 유럽 내 두 개의 전체 지역을 제공합니다. 글로벌 봇 서비스의 경우 사용 가능한 모든 지역/지역을 글로벌 공간으로 제공할 수 있습니다.",
+ "text": "Azure는 RHEL(Red Hat Enterprise Linux)에서 실행되는 동일한 고가용성 클러스터에서 SAP HANA와 ASCS/SCS 및 ERS 인스턴스의 설치 및 구성을 지원합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "신뢰도"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
- "severity": "보통",
- "text": "유연한 서버 활용",
+ "checklist": "SAP Checklist",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "프리미엄 관리형 SSD에서 모든 프로덕션 시스템을 실행하고 Azure NetApp Files 또는 Ultra Disk Storage를 사용합니다. 적어도 OS 디스크는 더 나은 성능과 최상의 SLA를 달성할 수 있도록 프리미엄 계층에 있어야 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
"waf": "신뢰도"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
+ "checklist": "SAP Checklist",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "service": "SAP",
"severity": "높다",
- "text": "지역적으로 적용 가능한 경우 가용 영역 활용Leverage Availability Zones where regionally applicable",
+ "text": null,
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
"waf": "신뢰도"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
- "severity": "보통",
- "text": "지역 간 DR 시나리오에 입력 데이터 복제 활용",
+ "checklist": "SAP Checklist",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP 워크로드에 사용하는 스토리지 유형에 따라 고가용성을 구성하는 것이 좋습니다. Azure에서 사용할 수 있는 일부 스토리지 서비스는 Azure Site Recovery에서 지원되지 않으므로 고가용성 구성이 다를 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
"waf": "신뢰도"
},
{
- "checklist": "Azure Function Review",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
"severity": "높다",
- "text": "비즈니스 및 SLO 요구 사항에 따라 올바른 기능 호스팅 계획을 선택하십시오.",
+ "text": null,
"waf": "신뢰도"
},
{
- "checklist": "Azure Function Review",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "severity": "높다",
- "text": "지역적으로 적용 가능한 가용성 영역 활용(소비 계층에는 사용할 수 없음)",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP System Start-Stop을 자동화하여 비용을 관리합니다.",
+ "waf": "비용"
},
{
- "checklist": "Azure Function Review",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
- "severity": "보통",
- "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "SAP HANA와 함께 Azure Premium Storage를 사용하는 경우 Azure Standard SSD Storage를 사용하여 비용에 민감한 스토리지 솔루션을 선택할 수 있습니다. 그러나 표준 SSD 또는 표준 HDD Azure Storage를 선택하면 개별 VM의 SLA에 영향을 줍니다. 또한 비프로덕션 환경과 같이 I/O 처리량이 낮고 대기 시간이 짧은 시스템의 경우 더 낮은 시리즈 VM을 사용할 수 있습니다.",
+ "waf": "비용"
},
{
- "checklist": "Azure Function Review",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
- "severity": "높다",
- "text": "격리된 환경에 배포하는 경우 ASE(App Service Environment) v3을 사용하거나 마이그레이션합니다",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "저렴한 대체 구성(다목적)으로 비프로덕션 HANA 데이터베이스 서버 VM에 대해 저성능 SKU를 선택할 수 있습니다. 그러나 E 시리즈와 같은 일부 VM 유형은 HANA 인증(SAP HANA 하드웨어 디렉터리)되지 않았거나 1ms 미만의 스토리지 대기 시간을 달성할 수 없다는 점에 유의해야 합니다.",
+ "waf": "비용"
},
{
- "checklist": "Azure Function Review",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
- "severity": "높다",
- "text": "App Service 계획에서 실행되는 모든 함수 앱에 대해 'Always On'이 사용하도록 설정되어 있는지 확인합니다.",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "service": "SAP",
+ "severity": null,
+ "text": null,
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "안전"
},
{
- "checklist": "Azure Function Review",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
"severity": "보통",
- "text": "함수 앱을 자체 스토리지 계정에 페어링합니다. 긴밀하게 결합되지 않는 한 함수 앱에 대한 스토리지 계정을 다시 사용하지 마세요",
- "waf": "신뢰도"
+ "text": "클라우드 커넥터를 통해 SAP 클라우드 애플리케이션에서 SAP 온-프레미스(IaaS 포함)로 ID를 전달하기 위한 주체 전파 적용",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "waf": "안전"
},
{
- "checklist": "Azure Function Review",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
+ "checklist": "SAP Checklist",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure DevOps 또는 GitHub를 활용하여 CI/CD를 간소화하고 함수 앱 코드를 보호합니다.",
- "waf": "작업"
+ "text": "SAML을 사용하여 Azure AD를 사용하여 SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics 및 SAP C4C와 같은 SAP SaaS 애플리케이션에 SSO를 구현합니다.",
+ "waf": null
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "보통",
- "text": "Azure Front Door에서 고객 관리형 TLS 인증서를 사용하는 경우 '최신' 인증서 버전을 사용합니다. 수동 인증서 갱신으로 인한 중단 위험 감소",
- "waf": "작업"
+ "checklist": "SAP Checklist",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "severity": null,
+ "text": "SAML을 사용하여 SAP Fiori 및 SAP Web GUI와 같은 SAP NetWeaver 기반 웹 애플리케이션에 대한 SSO를 구현합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": null
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "service": "SAP",
"severity": "보통",
- "text": "Application Gateway v2 SKU를 사용하고 있는지 확인합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": null,
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
+ "checklist": "SAP Checklist",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Load Balancer에 표준 SKU를 사용하고 있는지 확인합니다.",
+ "text": "SAP NetWeaver SSO 또는 파트너 솔루션을 사용하여 SAP GUI에 SSO를 구현할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
+ "checklist": "SAP Checklist",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "service": "SAP",
"severity": "보통",
- "text": "Load Balancer 프런트 엔드 IP 주소가 영역 중복인지 확인합니다(영역 프런트 엔드가 필요하지 않은 경우).",
+ "text": "SAP GUI 및 웹 브라우저 액세스용 SSO의 경우 구성 및 유지 관리가 용이하여 SNC/Kerberos/SPNEGO(간단하고 보호된 GSSAPI 협상 메커니즘)를 구현합니다. X.509 클라이언트 인증서를 사용하는 SSO의 경우 SAP SSO 솔루션의 구성 요소인 SAP Secure Login Server를 고려합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "service": "SAP",
"severity": "보통",
- "text": "Application Gateway v2는 IP 접두사가 /24보다 크거나 같은 서브넷에 배포해야 합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": null,
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "description": "일반적으로 역방향 프록시 및 특히 WAF의 관리는 네트워킹보다 애플리케이션에 더 가깝기 때문에 앱과 동일한 구독에 속합니다. 연결 구독에서 Application Gateway 및 WAF를 중앙 집중화하는 것은 단일 팀에서 관리하는 경우 괜찮을 수 있습니다.",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "service": "SAP",
"severity": "보통",
- "text": "랜딩 영역 가상 네트워크 내에서 그리고 보안 중인 앱을 사용하여 인바운드 HTTP(S) 연결을 프록시하는 데 사용되는 Azure Application Gateway v2 또는 파트너 NVA를 배포합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "SAP NetWeaver용 OAuth를 사용하여 SSO를 구현하여 타사 또는 사용자 지정 애플리케이션이 SAP NetWeaver OData 서비스에 액세스할 수 있도록 합니다.",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "service": "SAP",
"severity": "보통",
- "text": "애플리케이션 랜딩 존의 모든 공용 IP 주소에 대해 DDoS 네트워크 또는 IP 보호 계획을 사용합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "SAP HANA에 대한 SSO 구현",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "service": "SAP",
"severity": "보통",
- "text": "최소 인스턴스 수를 2개로 자동 크기 조정을 구성합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "신뢰도"
+ "text": "Azure AD를 RISE에서 호스트되는 SAP 시스템의 ID 공급자로 간주합니다. 자세한 내용은 Azure AD와 서비스 통합을 참조하세요.",
+ "waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
+ "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "service": "SAP",
"severity": "보통",
- "text": "가용성 영역에 Application Gateway 배포",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "신뢰도"
+ "text": "SAP에 액세스하는 애플리케이션의 경우 주체 전파를 사용하여 SSO를 설정할 수 있습니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "service": "SAP",
"severity": "보통",
- "text": "WAF 정책과 함께 Azure Front Door를 사용하여 여러 Azure 지역에 걸쳐 있는 글로벌 HTTP/S 앱을 제공하고 보호할 수 있습니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "SAP IAS(Identity Authentication Service)가 필요한 SAP BTP 서비스 또는 SaaS 솔루션을 사용하는 경우 SAP Cloud Identity Authentication Services와 Azure AD 간에 SSO를 구현하여 해당 SAP 서비스에 액세스하는 것이 좋습니다. 이 통합을 통해 SAP IAS는 프록시 ID 공급자 역할을 하고 중앙 사용자 저장소 및 ID 공급자로 Azure AD에 인증 요청을 전달할 수 있습니다.",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "service": "SAP",
"severity": "보통",
- "text": "Front Door 및 Application Gateway를 사용하여 HTTP/S 앱을 보호하는 경우 Front Door에서 WAF 정책을 사용합니다. Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "SAP BTP에 대한 SSO 구현",
"waf": "안전"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
- "severity": "높다",
- "text": "Traffic Manager를 사용하여 HTTP/S 이외의 프로토콜에 걸쳐 있는 글로벌 앱을 제공합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "severity": "낮다",
- "text": "사용자가 내부 애플리케이션에만 액세스해야 하는 경우 Microsoft Entra ID 애플리케이션 프록시가 AVD(Azure Virtual Desktop)의 대안으로 고려되었나요?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "checklist": "SAP Checklist",
+ "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP SuccessFactors를 사용하는 경우 Azure AD 자동화된 사용자 프로비저닝을 사용하는 것이 좋습니다. 이 통합을 통해 SAP SuccessFactors에 신입 사원을 추가할 때 Azure AD에서 해당 사용자 계정을 자동으로 생성할 수 있습니다. 필요에 따라 Microsoft 365 또는 Azure AD에서 지원하는 기타 SaaS 애플리케이션에서 사용자 계정을 만들 수 있습니다. SAP SuccessFactors에 이메일 주소의 쓰기 저장을 사용합니다.",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "checklist": "SAP Checklist",
+ "description": "관리 그룹 계층 구조를 4개 이하로 합리적으로 평평하게 유지합니다.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
+ "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "service": "SAP",
"severity": "보통",
- "text": "네트워크에서 들어오는 연결에 대해 열려 있는 방화벽 포트 수를 줄이려면 Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 내부 애플리케이션에 대한 안전하고 인증된 액세스를 제공하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "안전"
+ "text": "SAP 구독에 기존 관리 그룹 정책 적용",
+ "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
+ "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"severity": "높다",
- "text": "'방지' 모드에서 Front Door에 대한 WAF 정책을 배포합니다.",
- "waf": "안전"
+ "text": "긴밀하게 결합된 애플리케이션을 동일한 SAP 구독에 통합하여 추가적인 라우팅 및 관리 복잡성 방지",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Traffic Manager와 Azure Front Door를 결합하지 마세요.",
- "waf": "안전"
+ "text": "구독을 배율 단위로 활용하고 리소스를 확장하려면 환경별로 구독을 배포하는 것이 좋습니다. 샌드박스, 비프로덕션, 프로덕션 ",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
+ "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Front Door 및 원본에서 동일한 도메인 이름을 사용합니다. 호스트 이름이 일치하지 않으면 미묘한 버그가 발생할 수 있습니다.",
- "waf": "안전"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "낮다",
- "text": "Azure Front Door 원본 그룹에 원본이 하나만 있는 경우 상태 프로브를 사용하지 않도록 설정합니다.",
- "waf": "공연"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "보통",
- "text": "Azure Front Door에 대한 양호한 상태 프로브 엔드포인트를 선택합니다. 애플리케이션의 모든 종속성을 확인하는 상태 엔드포인트를 빌드하는 것이 좋습니다.",
- "waf": "신뢰도"
+ "text": "구독 프로비저닝의 일부로 할당량 증가를 보장(예: 구독 내에서 사용 가능한 총 VM 코어 수)",
+ "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
+ "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
+ "service": "SAP",
"severity": "낮다",
- "text": "Azure Front Door와 함께 HEAD 상태 프로브를 사용하여 Front Door가 애플리케이션으로 보내는 트래픽을 줄입니다.",
- "waf": "공연"
+ "text": "할당량 API는 Azure 서비스에 대한 할당량을 보고 관리하는 데 사용할 수 있는 REST API입니다. 필요한 경우 사용을 고려하십시오.",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
+ "checklist": "SAP Checklist",
+ "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
+ "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "service": "SAP",
"severity": "높다",
- "text": "SNAT 확장성 향상을 위해 Load Balancer 아웃바운드 규칙 대신 Azure NAT Gateway 사용",
- "waf": "신뢰도"
+ "text": "가용성 영역에 배포하는 경우 할당량이 승인되면 VM의 영역 배포를 사용할 수 있는지 확인합니다. 필요한 구독, VM 시리즈, CPU 수 및 가용성 영역을 포함한 지원 요청을 제출합니다.",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Front Door에서 관리형 TLS 인증서를 사용합니다. 운영 비용을 줄이고 인증서 갱신으로 인한 중단 위험을 줄입니다.",
+ "text": "필요한 서비스 및 기능이 선택한 배포 지역 내에서 사용할 수 있는지 확인합니다(예: ). ANF, 지역 등.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
"waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Front Door WAF 구성을 코드로 정의합니다. 코드를 사용하면 새 규칙 집합 버전을 보다 쉽게 채택하고 추가 보호를 얻을 수 있습니다.",
+ "text": "비용 분류 및 리소스 그룹화를 위해 Azure 리소스 태그 활용(BillTo, 부서(또는 사업부), 환경(프로덕션, 스테이지, 개발), 계층(웹 계층, 응용 프로그램 계층), 응용 프로그램 소유자, 프로젝트 이름)",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Front Door에서 엔드투엔드 TLS를 사용합니다. 클라이언트에서 Front Door로, Front Door에서 원본으로 연결하는 데 TLS를 사용합니다.",
- "waf": "안전"
+ "text": "Azure Backup 서비스를 사용하여 HANA 데이터베이스를 보호할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Front Door에서 HTTP에서 HTTPS로 리디렉션을 사용합니다. 이전 클라이언트를 HTTPS 요청으로 자동 리디렉션하여 지원합니다.",
- "waf": "안전"
+ "text": "HANA, Oracle 또는 DB2 데이터베이스에 Azure NetApp Files를 배포하는 경우 Azure 애플리케이션 일치 스냅샷 도구(AzAcSnap)를 사용하여 애플리케이션 일치 스냅샷을 만듭니다. AzAcSnap은 Oracle 데이터베이스도 지원합니다. 개별 VM이 아닌 중앙 VM에서 AzAcSnap을 사용하는 것이 좋습니다.",
+ "waf": "신뢰도"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
"severity": "높다",
- "text": "Azure Front Door WAF를 사용하도록 설정합니다. 다양한 공격으로부터 애플리케이션을 보호합니다.",
- "waf": "안전"
+ "text": "운영 체제와 SAP 시스템 간의 표준 시간대 일치를 확인합니다.",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "높다",
- "text": "워크로드에 맞게 Azure Front Door WAF를 튜닝합니다. 가양성 탐지를 줄입니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "동일한 클러스터에서 서로 다른 애플리케이션 서비스를 그룹화하지 마세요. 예를 들어 DRBD와 중앙 서비스 클러스터를 동일한 클러스터에 결합하지 마세요. 그러나 동일한 Pacemaker 클러스터를 사용하여 약 5개의 서로 다른 중앙 서비스(다중 SID 클러스터)를 관리할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "높다",
- "text": "Azure Front Door WAF 정책에서 요청 본문 검사 기능을 사용하도록 설정합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
+ "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "Azure 실행 비용을 절약하고 최적화하기 위해 스누즈 모델에서 개발/테스트 시스템을 실행하는 것이 좋습니다.",
+ "waf": "비용"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "높다",
- "text": "Azure Front Door WAF 기본 규칙 집합을 사용하도록 설정합니다. 기본 규칙 집합은 일반적인 공격을 탐지하고 차단합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
+ "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP 자산을 관리하여 고객과 파트너 관계를 맺는 경우 Azure Lighthouse를 사용하는 것이 좋습니다. Azure Lighthouse를 사용하면 관리 서비스 공급자가 Azure 네이티브 ID 서비스를 사용하여 고객 환경에 인증할 수 있습니다. 고객은 언제든지 액세스 권한을 취소하고 서비스 제공업체의 조치를 감사할 수 있으므로 제어권을 고객에게 부여합니다.",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
- "severity": "높다",
- "text": "Azure Front Door WAF 봇 보호 규칙 집합을 사용하도록 설정합니다. 봇 규칙은 좋은 봇과 나쁜 봇을 감지합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
+ "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure 업데이트 관리자를 사용하여 단일 VM 또는 여러 VM에 대해 사용 가능한 업데이트의 상태를 확인하고 정기적인 패치를 예약하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
- "severity": "보통",
- "text": "최신 Azure Front Door WAF 규칙 집합 버전을 사용합니다. 규칙 집합 업데이트는 현재 위협 환경을 고려하기 위해 정기적으로 업데이트됩니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "SAP Landscape Management(LaMa)를 사용하여 SAP Basis 운영을 최적화하고 관리합니다. Azure용 SAP LaMa 커넥터를 사용하여 SAP 시스템을 재배치, 복사, 복제 및 새로 고칩니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Front Door WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 짧은 시간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
- "waf": "안전"
+ "text": "SAP용 Azure Monitor 솔루션을 사용하여 Azure에서 SAP 워크로드(SAP HANA, 고가용성 SUSE 클러스터 및 SQL 시스템)를 모니터링합니다. SAP Solution Manager를 사용하여 SAP용 Azure Monitor 솔루션을 보완하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
- "severity": "보통",
- "text": "Azure Front Door WAF 속도 제한에 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호 기능을 제공합니다. ",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP용 VM 확장 검사를 실행합니다. SAP용 VM 확장은 VM(가상 머신)의 할당된 관리 ID를 사용하여 VM 모니터링 및 구성 데이터에 액세스합니다. 이 검사는 SAP 애플리케이션의 모든 성능 메트릭이 기본 SAP용 Azure 확장에서 제공되는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "낮다",
- "text": "모든 지역에서 트래픽이 발생하지 않을 것으로 예상되는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "액세스 제어 및 규정 준수 보고에 Azure Policy를 사용합니다. Azure Policy는 일관된 정책 준수와 빠른 위반 감지를 보장하기 위해 조직 전체 설정을 적용할 수 있는 기능을 제공합니다. ",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Front Door WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 않도록 합니다.",
- "waf": "안전"
+ "text": "Azure Network Watcher의 연결 모니터를 사용하여 SAP 데이터베이스 및 애플리케이션 서버에 대한 대기 시간 메트릭을 모니터링합니다. 또는 Azure Monitor를 사용하여 네트워크 대기 시간 측정값을 수집하고 표시합니다.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
- "severity": "높다",
- "text": "Azure Application Gateway WAF 봇 보호 규칙 집합 사용Enable the Azure Application Gateway WAF bot protection rule set 봇 규칙은 좋은 봇과 나쁜 봇을 검색합니다.",
- "waf": "안전"
- },
- {
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
- "severity": "높다",
- "text": "Azure Application Gateway WAF 정책에서 요청 본문 검사 기능을 사용하도록 설정합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "73686af4-6791-4f89-95ad-a43324e13811",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "프로비저닝된 Azure 인프라에서 SAP HANA에 대한 품질 검사를 수행하여 프로비저닝된 VM이 Azure의 SAP HANA 모범 사례를 준수하는지 확인합니다.",
+ "waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"severity": "높다",
- "text": "워크로드에 대한 Azure Application Gateway WAF를 조정합니다. 가양성 탐지를 줄입니다.",
- "waf": "안전"
+ "text": "각 Azure 구독에 대해 영역 배포 전에 Azure 가용성 영역에서 대기 시간 테스트를 실행하여 Azure에서 SAP를 배포하기 위한 대기 시간이 짧은 영역을 선택합니다.",
+ "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "waf": "공연"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
- "severity": "높다",
- "text": "'방지' 모드에서 Application Gateway에 대한 WAF 정책을 배포합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "복원력 보고서를 실행하여 프로비저닝된 전체 Azure 인프라(컴퓨팅, 데이터베이스, 네트워킹, 스토리지, Site Recovery)의 구성이 Azure용 Cloud Adaption Framework에서 정의한 구성을 준수하는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
+ "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Application Gateway WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 짧은 시간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
+ "text": "SAP용 Microsoft Sentinel 솔루션을 사용하여 위협 방지를 구현합니다. 이 솔루션을 사용하여 SAP 시스템을 모니터링하고 비즈니스 로직 및 애플리케이션 계층 전반에서 정교한 위협을 탐지할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Application Gateway WAF 속도 제한에 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호 기능을 제공합니다. ",
- "waf": "안전"
+ "text": "Azure 태그 지정을 활용하여 리소스를 논리적으로 그룹화 및 추적하고, 배포를 자동화하고, 가장 중요한 것은 발생한 비용에 대한 가시성을 제공할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
+ "service": "SAP",
"severity": "낮다",
- "text": "모든 지역에서 트래픽이 발생하지 않을 것으로 예상되는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
- "waf": "안전"
+ "text": "대기 시간에 민감한 애플리케이션에 대해 VM 간 대기 시간 모니터링을 사용합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Application Gateway WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 않도록 합니다.",
- "waf": "안전"
+ "text": "Azure Site Recovery 모니터링을 사용하여 SAP 애플리케이션 서버에 대한 재해 복구 서비스의 상태를 유지 관리합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
"severity": "보통",
- "text": "최신 Azure Application Gateway WAF 규칙 집합 버전을 사용합니다. 규칙 집합 업데이트는 현재 위협 환경을 고려하기 위해 정기적으로 업데이트됩니다.",
- "waf": "안전"
+ "text": "모든 데이터베이스 파일 시스템 및 실행 프로그램을 바이러스 백신 검사에서 제외합니다. 이를 포함하면 성능 문제가 발생할 수 있습니다. 제외 목록에 대한 규범적 세부 정보는 데이터베이스 공급업체에 문의하십시오. 예를 들어 Oracle은 바이러스 백신 검사에서 /oracle//sapdata를 제외하는 것이 좋습니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
- "severity": "보통",
- "text": "진단 설정을 추가하여 Azure Application Gateway WAF 로그를 저장합니다.",
- "waf": "작업"
+ "checklist": "SAP Checklist",
+ "guid": "c027f893-f404-41a9-b33d-39d625a14964",
+ "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "마이그레이션 후 비 HANA 데이터베이스에 대한 전체 데이터베이스 통계를 수집하는 것이 좋습니다. 예를 들어 SAP Note 1020260 - Oracle 통계 제공을 구현합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
+ "service": "SAP",
"severity": "보통",
- "text": "진단 설정을 추가하여 Azure Front Door WAF 로그를 저장합니다.",
- "waf": "작업"
+ "text": "Azure에서 SAP를 사용하는 모든 Oracle 배포에 Oracle ASM(자동 스토리지 관리)을 사용하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "waf": "공연"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Application Gateway WAF 로그를 Microsoft Sentinel로 보냅니다.",
- "waf": "작업"
+ "text": "Oracle을 실행하는 Azure의 SAP의 경우 SQL 스크립트 컬렉션을 통해 성능 문제를 진단할 수 있습니다. AWR(Automatic Workload Repository) 보고서에는 Oracle 시스템의 문제를 진단하는 데 유용한 정보가 포함되어 있습니다. 여러 세션 동안 AWR 보고서를 실행하고 최대 피크 시간을 선택하여 분석에 대한 광범위한 적용 범위를 보장하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
+ "waf": "공연"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "보통",
- "text": "Azure Front Door WAF 로그를 Microsoft Sentinel로 보냅니다.",
+ "checklist": "SAP Checklist",
+ "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "Azure Site Recovery 모니터링을 사용하여 SAP 애플리케이션 서버에 대한 재해 복구 서비스의 상태를 유지 관리합니다.",
+ "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure Application Gateway WAF 구성을 코드로 정의합니다. 코드를 사용하면 새 규칙 집합 버전을 보다 쉽게 채택하고 추가 보호를 얻을 수 있습니다.",
- "waf": "작업"
+ "text": "HTTP/S 앱을 안전하게 배달하려면 Application Gateway v2를 사용하고 WAF 보호 및 정책이 사용하도록 설정되어 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
"severity": "보통",
- "text": "레거시 WAF 구성 대신 WAF 정책을 사용합니다.",
+ "text": "Azure로 마이그레이션하는 동안 가상 머신의 DNS 또는 가상 이름이 변경되지 않은 경우 백그라운드 DNS 및 가상 이름은 SAP 환경의 많은 시스템 인터페이스를 연결하며, 고객은 시간이 지남에 따라 개발자가 정의하는 인터페이스를 가끔씩만 인식할 수 있습니다. 마이그레이션 후 가상 또는 DNS 이름이 변경될 때 다양한 시스템 간에 연결 문제가 발생하며, 이러한 유형의 문제를 방지하기 위해 DNS 별칭을 유지하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
"waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
"severity": "보통",
- "text": "Application Gateway 서브넷의 연결(예: NSG 사용)만 허용하도록 백 엔드에서 인바운드 트래픽을 필터링합니다.",
- "waf": "안전"
+ "text": "서로 다른 DNS 영역을 사용하여 각 환경(샌드박스, 개발, 사전 프로덕션 및 프로덕션)을 서로 구분합니다. 예외는 자체 VNet을 사용하는 SAP 배포의 경우입니다. 여기서는 프라이빗 DNS 영역이 필요하지 않을 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
+ "checklist": "SAP Checklist",
+ "description": "VNet 피어링을 구성할 때 원격 가상 네트워크에 대한 트래픽 허용 설정을 사용합니다.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
+ "guid": "a3592829-e6e2-4061-9368-6af46791f893",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "원본이 Azure Front Door 인스턴스의 트래픽만 가져와야 합니다.",
- "waf": "안전"
+ "text": "로컬 및 글로벌 VNet 피어링은 연결을 제공하며, 여러 Azure 지역에서 SAP 배포를 위한 랜딩 존 간의 연결을 보장하기 위해 선호되는 접근 방식입니다",
+ "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
+ "service": "SAP",
"severity": "높다",
- "text": "백 엔드 서버에 대한 트래픽을 암호화해야 합니다.",
- "waf": "안전"
+ "text": "SAP 애플리케이션과 SAP 데이터베이스 서버 간에 NVA를 배포하는 것은 지원되지 않습니다",
+ "training": "https://me.sap.com/notes/2731110",
+ "waf": "공연"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
- "service": "App Gateway",
- "severity": "높다",
- "text": "웹 응용 프로그램 방화벽을 사용해야 합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
+ "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 새로운, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
+ "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
+ "service": "SAP",
"severity": "보통",
- "text": "HTTP를 HTTPS로 리디렉션",
- "waf": "안전"
+ "text": "파트너 NVA를 사용하는 경우에만 지역 간에 NVA(네트워크 가상 어플라이언스)를 배포하는 것이 좋습니다. 네이티브 NVA가 있는 경우 지역 또는 VNet 간의 NVA가 필요하지 않습니다. 파트너 네트워킹 기술 및 NVA를 배포하는 경우 공급업체의 지침에 따라 Azure 네트워킹과 충돌하는 구성을 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
+ "waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
+ "service": "SAP",
"severity": "보통",
- "text": "게이트웨이 관리 쿠키를 사용하여 처리를 위해 사용자 세션에서 동일한 서버로 트래픽을 전달합니다.",
+ "text": "Virtual WAN은 가상 WAN 기반 토폴로지에 대한 스포크 VNet 간의 연결을 관리하며(UDR[사용자 정의 라우팅] 또는 NVA를 설정할 필요 없음) 동일한 가상 허브의 VNet 간 트래픽에 대한 최대 네트워크 처리량은 초당 50기가비트입니다. 필요한 경우 SAP 랜딩 존은 VNet 피어링을 사용하여 다른 랜딩 존에 연결하고 이 대역폭 제한을 극복할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
"waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
- "severity": "높다",
- "text": "계획된 서비스 업데이트 중에 연결 드레이닝을 사용하도록 설정하여 백 엔드 풀의 기존 멤버에 대한 연결 손실을 방지합니다.",
- "waf": "안전"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "82734c88-6ba2-4802-8459-11475e39e530",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP Workload를 실행하는 VM에 공용 IP를 할당하는 것은 권장되지 않습니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
- "severity": "낮다",
- "text": "사용자 지정 오류 페이지를 만들어 개인화된 사용자 환경 표시",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "ASR을 구성할 때 DR 쪽에서 IP 주소를 예약하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "작업"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "프로덕션 및 DR 사이트에 겹치는 IP 주소 범위를 사용하지 마십시오.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "작업"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure는 VNet에서 여러 위임된 서브넷을 만드는 데 도움이 되지만 Azure NetApp Files용 VNet에는 하나의 위임된 서브넷만 존재할 수 있습니다. Azure NetApp Files에 대해 둘 이상의 위임된 서브넷을 사용하는 경우 새 볼륨을 만들려는 시도가 실패합니다.",
+ "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
+ "waf": "작업"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
+ "service": "SAP",
"severity": "보통",
- "text": "HTTP 요청 및 응답 헤더를 편집하여 클라이언트와 서버 간의 라우팅 및 정보 교환을 보다 쉽게 할 수 있습니다.",
+ "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다.",
+ "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
+ "service": "SAP",
"severity": "보통",
- "text": "빠른 글로벌 장애 조치(failover)를 통해 글로벌 웹 트래픽 라우팅 및 최상위 계층 최종 사용자 성능 및 안정성을 최적화하도록 Front Door 구성",
- "waf": "공연"
+ "text": "Application Gateway, SAP Web Dispatcher 및 기타 타사 서비스 간의 비교에서 볼 수 있듯이 Application Gateway 및 Web Application Firewall SAP 웹앱에 대한 역방향 프록시 역할을 하는 경우 Application Gateway 및 Web Application Firewall에 대한 제한 사항이 있습니다.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "전송 계층 부하 분산 사용Use transport layer load balancing",
- "waf": "공연"
+ "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역 전체에서 글로벌 보호를 제공합니다.",
+ "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "단일 게이트웨이에서 여러 웹 응용 프로그램에 대한 호스트 또는 도메인 이름을 기반으로 라우팅 구성Configure routing based on host or domain name for multiple web applications on a single gateway",
+ "text": "Azure Front Door 및 Application Gateway를 사용하여 HTTP/S 애플리케이션을 보호하는 경우 Azure Front Door의 Web Application Firewall 정책을 활용합니다. Azure Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
+ "checklist": "SAP Checklist",
+ "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
"severity": "보통",
- "text": "SSL 인증서 관리를 중앙 집중화하여 백엔드 서버 팜의 암호화 및 암호 해독 오버헤드를 줄입니다.",
+ "text": "웹 응용 프로그램 방화벽을 사용하여 인터넷에 노출될 때 트래픽을 검사합니다. 또 다른 옵션은 부하 분산 장치 또는 Application Gateway 또는 타사 솔루션과 같은 기본 제공 방화벽 기능이 있는 리소스와 함께 사용하는 것입니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
"waf": "안전"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
- "severity": "낮다",
- "text": "WebSocket 및 HTTP/2 프로토콜에 대한 기본 지원을 위해 Application Gateway 사용",
+ "checklist": "SAP Checklist",
+ "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 새로운, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
+ "waf": "공연"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "데이터 유출을 방지하려면 Azure Private Link를 사용하여 Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory 등과 같은 PaaS(Platform as a Service) 리소스에 안전하게 액세스합니다. Azure 프라이빗 엔드포인트는 VNet과 Azure Storage, Azure Backup 등과 같은 서비스 간의 트래픽을 보호하는 데도 도움이 될 수 있습니다. VNet과 프라이빗 엔드포인트 사용 서비스 간의 트래픽은 Microsoft 글로벌 네트워크를 통해 이동하므로 공용 인터넷에 노출되지 않습니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
"waf": "안전"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
- "service": "IoT Hub DPS",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
+ "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "service": "SAP",
"severity": "높다",
- "text": "비즈니스 및 SLO 요구 사항에 따라 올바른 Logic App 호스팅 계획 선택Select the right Logic App hosting plan based on your business & SLO requirements",
- "waf": "신뢰도"
+ "text": "SAP 애플리케이션 및 DBMS 계층에 사용되는 VM에서 Azure 가속 네트워킹이 사용하도록 설정되어 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "공연"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "IoT Hub DPS",
- "severity": "높다",
- "text": "영역 중복 및 가용성 영역을 사용하여 지역 오류로부터 논리 앱 보호Protect logic apps from region failures with zone redundancy and availability zones",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure Load Balancer에 대한 내부 배포가 DSR(Direct Server Return)을 사용하도록 설정되어 있는지 확인합니다. 이 설정(유동 IP 사용)은 DBMS 계층의 고가용성 구성에 내부 로드 밸런서 구성을 사용할 때 대기 시간을 줄입니다.",
+ "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "8aed4fbf-0830-4883-899d-222a154af478",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "IoT Hub DPS",
- "severity": "높다",
- "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
- "waf": "신뢰도"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
+ "guid": "6791f893-5ada-4433-84e1-3811523181aa",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "ASG(애플리케이션 보안 그룹) 및 NSG 규칙을 사용하여 SAP 애플리케이션과 DBMS 계층 간의 네트워크 보안 액세스 제어 목록을 정의할 수 있습니다. ASG는 가상 머신을 그룹화하여 보안을 관리하는 데 도움을 줍니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "IoT Hub DPS",
+ "checklist": "SAP Checklist",
+ "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
"severity": "높다",
- "text": "격리된 환경에 배포하는 경우 ASE(App Service Environment) v3을 사용하거나 마이그레이션합니다",
- "waf": "신뢰도"
+ "text": "피어링되지 않은 다른 Azure VNet에 SAP 애플리케이션 계층 및 SAP DBMS를 배치하는 것은 지원되지 않습니다.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "공연"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "IoT Hub DPS",
+ "checklist": "SAP Checklist",
+ "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"severity": "보통",
- "text": "Azure DevOps 또는 GitHub를 활용하여 CI/CD를 간소화하고 논리 앱 코드를 보호합니다.",
- "waf": "작업"
+ "text": "SAP 애플리케이션에서 네트워크 대기 시간을 최적화하려면 Azure 근접 배치 그룹을 사용하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
- "text": "Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview 의 데이터 수집 규칙",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "온-프레미스와 Azure 간에 분할된 SAP 애플리케이션 서버 계층 및 DBMS 계층을 실행하는 것은 전혀 지원되지 않습니다. 두 계층 모두 온-프레미스 또는 Azure에 완전히 상주해야 합니다.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
- "text": "기본 데이터 원본을 찾을 수 없는 백업 인스턴스 확인",
+ "checklist": "SAP Checklist",
+ "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "계층 간의 과도한 네트워크 트래픽으로 인해 발생할 수 있는 상당한 비용 때문에 DBMS(데이터베이스 관리 시스템) 및 SAP 시스템의 애플리케이션 계층을 서로 다른 VNet에 호스트하고 VNet 피어링과 연결하는 것은 권장되지 않습니다. Azure 가상 네트워크 내의 서브넷을 사용하여 SAP 애플리케이션 계층과 DBMS 계층을 분리하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"waf": "비용"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
- "text": "연결되지 않은 서비스(디스크, NIC, IP 주소 등) 삭제 또는 보관",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "402a9846-d515-4061-aff8-cd30088693fa",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "Linux 게스트 운영 체제에서 Load Balancer를 사용하는 경우 Linux 네트워크 매개 변수 net.ipv4.tcp_timestamps가 0으로 설정되어 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
- "text": "중요 업무용 응용 프로그램에 대한 Site Recovery 저장소와 백업 간의 적절한 균형을 고려합니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP RISE/ECS 배포의 경우 가상 피어링은 고객의 기존 Azure 환경과의 연결을 설정하는 기본 방법입니다. SAP vnet과 고객 vnet은 모두 NSG(네트워크 보안 그룹)로 보호되므로 vnet 피어링을 통해 SAP 및 데이터베이스 포트에서 통신할 수 있습니다",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
- "text": "40개의 서로 다른 로그 분석 작업 영역 간의 지출 및 절감 기회 확인 - 비프로덕션 작업 영역에 대해 서로 다른 보존 및 데이터 수집 사용-인식 및 계층 크기 조정을 위한 일일 한도 만들기 - 일일 한도를 설정하는 경우 한도에 도달할 때 경고를 만드는 것 외에도 특정 비율(예: 90%)에 도달했을 때 알림을 받을 경고 규칙도 만들어야 합니다. - 가능한 경우 작업 영역 변환 고려 - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "checklist": "SAP Checklist",
+ "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "Azure VM에 대한 SAP HANA 데이터베이스 백업을 검토합니다.",
"waf": "비용"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
- "text": "제거 로그 정책 및 자동화 적용(필요한 경우 로그를 콜드 스토리지로 이동할 수 있음)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "checklist": "SAP Checklist",
+ "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP에 사용되는 Site Recovery 기본 제공 모니터링을 검토합니다.",
"waf": "비용"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
- "text": "디스크가 실제로 필요한지 확인하고, 그렇지 않은 경우 삭제하십시오. 필요한 경우 더 낮은 스토리지 계층을 찾거나 백업을 사용합니다.",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
+ "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP HANA 시스템 환경 모니터링 지침을 검토합니다.",
+ "waf": "작업"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
- "text": "사용자 지정 규칙을 사용하여 사용하지 않는 스토리지를 하위 계층으로 이동하는 것이 좋습니다 - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure Linux VM 백업 전략에서 Oracle Database를 검토합니다.",
+ "waf": "작업"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
- "text": "Advisor가 VM 올바른 크기 조정에 대해 구성되어 있는지 확인합니다. ",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
+ "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SQL Server 2016에서 Azure Blob Storage 사용을 검토합니다.",
+ "waf": "작업"
},
{
- "checklist": "Cost Optimization Checklist",
- "description": "Cost analysys에서 Meter Category Licenses를 검색하여 확인합니다.",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
- "text": "모든 Windows VM에서 스크립트 실행 https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- Windows VM을 자주 만드는 경우 정책 구현을 고려합니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure VM에 대한 자동화된 Backup v2 사용을 검토합니다.",
+ "waf": "작업"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
- "text": " 이미 라이선스가 있는 경우 AHUB에 넣을 수도 https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "프리미엄 디스크(V1)를 사용하는 경우 M 시리즈에 쓰기 가속기 사용",
+ "waf": "작업"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "text": "유연성 옵션을 사용하여 예약된 VM 제품군 통합(4-5개 이하의 제품군)",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "가용성 영역 대기 시간을 테스트합니다.",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "text": "Azure Reserved Instances 활용: 이 기능을 사용하면 1년 또는 3년 동안 VM을 예약할 수 있으므로 PAYG 가격에 비해 상당한 비용 절감 효과를 얻을 수 있습니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
+ "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "모든 SAP 구성요소에 대해 SAP EarlyWatch Alert를 활성화합니다.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "text": "더 큰 디스크만 예약할 수 있습니다 => 1TiB -",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP ABAPMeter 보고서 /SSA/CAT를 사용하여 SAP 애플리케이션 서버-데이터베이스 서버 대기 시간을 검토합니다.",
+ "training": "https://me.sap.com/notes/0002879613",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
- "text": "적절한 크기 최적화 후",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "CCMS를 사용하여 SQL Server 성능 모니터링을 검토합니다.",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
- "text": "적용 가능한 경우 확인 및 정책/변경 https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations 시행",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
+ "link": "https://me.sap.com/notes/500235",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP 애플리케이션 계층 VM과 DBMS VM(NIPING) 간의 네트워크 대기 시간을 테스트합니다.",
+ "training": "https://me.sap.com/notes/1100926/E",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
- "text": "VM + 라이선스 부분 할인(ahub + 3YRI)은 약 70% 할인입니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
+ "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP HANA Studio 알림을 검토합니다.",
+ "waf": "공연"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "text": "플랫 사이징보다는 VMSS를 사용하여 수요에 맞추는 것이 좋습니다",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
+ "link": "https://me.sap.com/notes/1969700",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "HANA_Configuration_Minichecks를 사용하여 SAP HANA 상태 점검을 수행합니다.",
+ "waf": "공연"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Cost Optimization Checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
- "text": "AKS 자동 크기 조정기를 사용하여 클러스터 사용량과 일치시킵니다(Pod 요구 사항이 스케일러와 일치하는지 확인).",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure, 온-프레미스 또는 기타 클라우드 환경에서 Windows 및 Linux VM을 실행하는 경우 Azure Automation의 업데이트 관리 센터를 사용하여 보안 패치를 포함한 운영 체제 업데이트를 관리할 수 있습니다.",
+ "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
- "text": "해당하는 경우 복구 지점을 자격 증명 모음 보관으로 이동(유효성 검사)Move recovery points to vault-archive where applicable (Validate)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "08951710-79a2-492a-adbc-06d7a401545b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP는 SAP 시스템을 보호하기 위해 즉각적인 조치가 필요한 매우 중요한 보안 패치 또는 핫픽스를 릴리스하므로 SAP 보안 OSS 노트를 정기적으로 검토합니다.",
+ "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
- "text": "가능한 경우 대체와 함께 스폿 VM을 사용하는 것이 좋습니다. 클러스터의 자동 종료를 고려합니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "SQL Server SAP의 경우 SQL Server 시스템 관리자 계정을 사용하지 않으므로 SQL Server 시스템 관리자 계정을 사용하지 않도록 설정할 수 있습니다. 원래 시스템 관리자 계정을 비활성화하기 전에 시스템 관리자 권한이 있는 다른 사용자가 서버에 액세스할 수 있는지 확인합니다.",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
- "text": "함수 - 연결 재사용",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "xp_cmdshell 비활성화합니다. SQL Server 기능 xp_cmdshell SQL Server 내부 운영 체제 명령 셸을 사용하도록 설정합니다. 이는 보안 감사에서 잠재적인 위험입니다.",
+ "training": "https://me.sap.com/notes/3019299/E",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
- "text": "함수 - 로컬에 데이터 캐시",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "Azure에서 SAP HANA 데이터베이스 서버를 암호화하려면 SAP HANA 네이티브 암호화 기술을 사용합니다. 또한 Azure에서 SQL Server를 사용하는 경우 TDE(투명한 데이터 암호화)를 사용하여 데이터 및 로그 파일을 보호하고 백업도 암호화되도록 합니다.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
- "text": "기능 - 콜드 스타트 - '패키지에서 실행' 기능을 사용합니다. 이렇게 하면 코드가 단일 zip 파일로 다운로드됩니다. 예를 들어, 이것은 많은 노드 모듈이 있는 Javascript 함수를 크게 개선할 수 있습니다. 언어별 도구를 사용하여 패키지 크기를 줄입니다(예: 트리 쉐이킹 Javascript 애플리케이션).",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "Azure Storage 암호화는 모든 Azure Resource Manager 및 클래식 스토리지 계정에 대해 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다. 데이터는 기본적으로 암호화되므로 Azure Storage 암호화를 사용하기 위해 코드나 애플리케이션을 수정할 필요가 없습니다.",
+ "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
- "text": "기능 - 기능을 따뜻하게 유지",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "Azure Key Vault를 사용하여 비밀 및 자격 증명 저장",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
- "text": "다른 함수와 함께 자동 크기 조정을 사용하는 경우 모든 리소스에 대한 모든 자동 크기 조정을 구동하는 것이 있을 수 있으므로 별도의 소비 계획으로 이동하는 것이 좋습니다(CPU에 대한 더 높은 계획 고려).",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "무단 변경으로부터 보호하기 위해 성공적인 배포 후 Azure 리소스를 잠그는 것이 좋습니다. 또한 사용자 지정된 Azure 정책(Custome 역할)을 사용하여 구독별로 LOCK 제약 조건 및 규칙을 적용할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
- "text": "지정된 계획의 함수 앱은 모두 함께 크기가 조정되므로 크기 조정과 관련된 모든 문제는 계획의 모든 앱에 영향을 줄 수 있습니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "삭제된 개체에 대한 보존 보호를 허용하기 위해 일시 삭제 및 제거 정책을 사용하도록 설정된 Azure Key Vault를 프로비전합니다.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
- "text": "'대기 시간'에 대한 요금이 청구되나요? 이 질문은 일반적으로 비동기 작업을 수행하고 결과를 기다리는 C # 함수 (예 : await Task.Delay(1000) 또는 await client )의 컨텍스트에서 묻습니다. GetAsync('http://google.com')입니다. 대답은 '예'입니다 - GB 초 계산은 함수의 시작 및 종료 시간과 해당 기간 동안의 메모리 사용량을 기반으로 합니다. CPU 작업 측면에서 해당 시간 동안 실제로 발생하는 일은 계산에 포함되지 않습니다. 이 규칙의 한 가지 예외는 지속성 함수를 사용하는 경우입니다. 오케스트레이터 함수에서 대기하는 데 소요된 시간에 대해서는 요금이 청구되지 않습니다.가능한 경우 수요 형성 기술을 적용합니다(개발 환경?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "기존 요구 사항에 따라 규정 및 규정 준수 제어(내부/외부) - 필요한 Azure 정책 및 Azure RBAC 역할 결정",
+ "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
- "text": "Frontdoor - 기본 홈페이지 끄기앱의 애플리케이션 설정에서 AzureWebJobsDisableHomepage를 true로 설정합니다. 이렇게 하면 PoP에 204(콘텐츠 없음)가 반환되므로 헤더 데이터만 반환됩니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP 환경에서 엔드포인트용 Microsoft Defender 사용하도록 설정하는 경우 모든 서버를 대상으로 하는 대신 DBMS 서버에서 데이터 및 로그 파일을 제외하는 것이 좋습니다. 대상 파일을 제외할 때 DBMS 공급업체의 권장 사항을 따릅니다.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
- "text": "Frontdoor 프론트도어 - 아무것도 반환하지 않는 무언가로 라우팅합니다. 함수, 함수 프록시를 설정하거나 WebApp에서 200(정상)을 반환하고 콘텐츠를 보내지 않거나 최소한으로 보내는 경로를 추가합니다. 이것의 장점은 호출될 때 로그아웃할 수 있다는 것입니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "클라우드용 Microsoft Defender의 Just-In-Time 액세스 권한이 있는 SAP 관리자 사용자 지정 역할을 위임합니다.",
+ "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
- "text": "덜 사용되는 데이터에 대한 보관 계층 고려",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "타사 보안 제품을 DIAG(SAP GUI)용 SNC(Secure Network Communications), RFC 및 HTTPS용 SPNEGO와 통합하여 전송 중인 데이터를 암호화합니다.",
+ "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
- "text": "크기가 계층과 일치하지 않는 디스크 크기를 확인합니다(예: 513GiB 디스크는 P30(1TiB)를 지불하고 크기 조정을 고려합니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "보안 주체 암호화 기능을 위해 기본적으로 Microsoft 관리형 키를 사용하고 필요한 경우 고객 관리형 키를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
- "text": "가능하면 프리미엄 또는 울트라 대신 표준 SSD를 사용하는 것이 좋습니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "애플리케이션당 환경, 지역별 Azure Key Vault를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
- "text": "스토리지 계정의 경우 선택한 계층이 트랜잭션 요금을 합산하지 않는지 확인합니다(다음 계층으로 이동하는 것이 더 저렴할 수 있음).",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
+ "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "비 HANA Windows 및 비 Windows 운영 체제에 대한 디스크 암호화 키 및 비밀을 제어하고 관리하려면 Azure Key Vault를 사용합니다. SAP HANA는 Azure Key Vault에서 지원되지 않으므로 SAP ABAP 또는 SSH 키와 같은 대체 방법을 사용해야 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
- "text": "ASR의 경우 RPO/RTO 및 복제 처리량이 허용하는 경우 표준 SSD 디스크를 사용하는 것이 좋습니다",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "Azure 스포크 구독의 SAP에 대한 RBAC(역할 기반 액세스 제어) 역할을 사용자 지정하여 실수로 인한 네트워크 관련 변경을 방지합니다.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
- "text": "스토리지 계정: 핫 계층 및/또는 GRS 필요 확인",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
+ "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "SAP 자산의 나머지 부분에서 DMZ 및 NVA를 격리하고, Azure Private Link를 구성하고, Azure의 SAP 리소스를 안전하게 관리 및 제어합니다.",
+ "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
- "text": "디스크 - 모든 곳에서 프리미엄 SSD 디스크 사용의 유효성을 검사합니다. 예를 들어 비프로덕션은 표준 SSD 또는 주문형 프리미엄 SSD로 교환할 수 있습니다. ",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
+ "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "Azure에서 Microsoft 맬웨어 방지 소프트웨어를 사용하여 악성 파일, 애드웨어 및 기타 위협으로부터 가상 머신을 보호하는 것이 좋습니다.",
+ "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
- "text": "예산을 만들어 비용을 관리하고 이해 관계자에게 지출 이상 및 초과 지출 위험을 자동으로 알리는 경고를 만듭니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "더욱 강력한 보호를 위해 엔드포인트용 Microsoft Defender 사용하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
- "text": "추가 데이터 분석을 위해 비용 데이터를 스토리지 계정으로 내보냅니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "높다",
+ "text": "가상 네트워크 피어링을 통해 스포크 네트워크에 연결된 허브 가상 네트워크를 통해 모든 트래픽을 전달하여 인터넷 또는 온-프레미스 네트워크에서 SAP 애플리케이션 및 데이터베이스 서버를 격리합니다. 피어링된 가상 네트워크는 Azure의 SAP 솔루션이 공용 인터넷에서 격리되도록 보장합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
- "text": "리소스를 사용하지 않을 때 일시 중지하여 전용 SQL 풀에 대한 비용을 제어합니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "낮다",
+ "text": "SAP Fiori와 같은 인터넷 연결 애플리케이션의 경우 보안 수준을 유지하면서 애플리케이션 요구 사항에 따라 부하를 분산해야 합니다. 계층 7 보안의 경우 Azure Marketplace에서 사용할 수 있는 타사 WAF(Web Application Firewall)를 사용할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
- "text": "서버리스 Apache Spark 자동 일시 중지 기능을 활성화하고 그에 따라 제한 시간 값을 설정합니다.",
- "waf": "비용"
+ "checklist": "SAP Checklist",
+ "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
+ "service": "SAP",
+ "severity": "보통",
+ "text": "SAP용 Azure Monitor 솔루션에서 보안 통신을 사용하도록 설정하려면 루트 인증서 또는 서버 인증서를 사용하도록 선택할 수 있습니다. 루트 인증서를 사용하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
- "text": "다양한 크기의 Apache Spark 풀 정의를 여러 개 만듭니다.",
- "waf": "비용"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus 프리미엄은 미사용 데이터의 암호화를 제공합니다. 사용자 고유의 키를 사용하는 경우 데이터는 여전히 Microsoft 관리형 키를 사용하여 암호화되지만 Microsoft 관리형 키도 고객 관리형 키를 사용하여 암호화됩니다. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "낮다",
+ "text": "필요한 경우 미사용 데이터 암호화에서 고객 관리형 키 옵션을 사용합니다",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
- "text": "사전 구매 플랜으로 1년 동안 Azure Synapse SCU(커밋 단위)를 구매하여 Azure Synapse Analytics 비용을 절감하세요.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "비용"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "클라이언트 애플리케이션과 Azure Service Bus 네임스페이스 간의 통신은 TLS(전송 계층 보안)를 사용하여 암호화됩니다. Azure Service Bus 네임스페이스를 사용하면 클라이언트가 TLS 1.0 이상을 사용하여 데이터를 보내고 받을 수 있습니다. 보다 엄격한 보안 조치를 적용하기 위해 클라이언트가 최신 버전의 TLS를 사용하여 데이터를 보내고 받도록 Service Bus 네임스페이스를 구성할 수 있습니다.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
+ "severity": "보통",
+ "text": "요청에 필요한 최소 버전의 TLS(전송 계층 보안) 적용 ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
- "text": "인터럽트 가능한 작업에 스폿 VM 사용: 할인된 가격으로 입찰 및 구매할 수 있는 VM으로, 중요하지 않은 워크로드에 비용 효율적인 솔루션을 제공합니다.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "비용"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Service Bus 네임스페이스를 만들면 네임스페이스에 대해 RootManageSharedAccessKey라는 SAS 규칙이 자동으로 만들어집니다. 이 정책에는 전체 네임스페이스에 대한 관리 권한이 있습니다. 이 규칙은 관리 루트 계정처럼 취급하고 애플리케이션에서 사용하지 않는 것이 좋습니다. RBAC에서 AAD를 인증 공급자로 사용하는 것이 좋습니다. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "보통",
+ "text": "필요하지 않은 경우 루트 계정을 사용하지 마십시오.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "text": "모든 VM의 적절한 크기 조정",
- "waf": "비용"
- },
- {
- "checklist": "Cost Optimization Checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
- "text": "VM 크기를 정규화된 최신 크기로 바꾸기",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "비용"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure 리소스 지원을 위해 관리되는 엔터티가 사용하도록 설정된 가상 머신 또는 Azure App Service 애플리케이션 내에서 실행되는 Service Bus 클라이언트 앱은 SAS 규칙 및 키 또는 기타 액세스 토큰을 처리할 필요가 없습니다. 클라이언트 앱에는 Service Bus 메시징 네임스페이스의 엔드포인트 주소만 필요합니다. ",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "보통",
+ "text": "가능한 경우 애플리케이션은 관리 ID를 사용하여 Azure Service Bus에 인증해야 합니다. 그렇지 않은 경우 Azure Key Vault 또는 동등한 서비스에 스토리지 자격 증명(SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "적절한 크기 조정 VM - 사용량을 5% 미만으로 모니터링하는 것으로 시작한 다음 최대 40%까지 작업",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "비용"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "사용 권한을 만들 때 Azure Service Bus에 대한 클라이언트의 액세스를 세밀하게 제어할 수 있습니다. Azure Service Bus의 사용 권한은 개별 리소스 수준(예: 큐, 토픽 또는 구독)으로 범위를 지정할 수 있으며 지정해야 합니다. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "높다",
+ "text": "최소 권한 데이터 플레인 RBAC 사용",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "안전"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "애플리케이션을 컨테이너화하면 VM 밀도를 개선하고 확장 비용을 절감할 수 있습니다",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "비용"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus 리소스 로그에는 작업 로그, 가상 네트워크 및 IP 필터링 로그가 포함됩니다. 런타임 감사 로그는 Service Bus에서 다양한 데이터 평면 액세스 작업(예: 메시지 보내기 또는 받기)에 대해 집계된 진단 정보를 캡처합니다.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "보통",
+ "text": "보안 조사를 위해 로깅을 사용하도록 설정합니다. Azure Monitor를 사용하여 리소스 로그 및 런타임 감사 로그 추적(현재 프리미엄 계층에서만 사용 가능)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "안전"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure Service Bus는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 가상 네트워크와 Azure Service Bus 간의 트래픽이 Microsoft 백본 네트워크를 통과할 수 있습니다. 또한 공용 엔드포인트를 사용하지 않는 경우 사용하지 않도록 설정해야 합니다. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
"severity": "보통",
- "text": "장기 취소 가능 토큰을 사용하고, 토큰을 캐시하고, Microsoft ID 라이브러리를 사용하여 자동으로 획득합니다.",
- "waf": "신뢰도"
+ "text": "프라이빗 엔드포인트를 사용하여 Azure Service Bus에 액세스하고 해당하는 경우 공용 네트워크 액세스를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "안전"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "IP 방화벽을 사용하면 퍼블릭 엔드포인트를 CIDR(Classless Inter-Domain Routing) 표기법의 IPv4 주소 집합 또는 IPv4 주소 범위로만 추가로 제한할 수 있습니다. ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
"severity": "보통",
- "text": "로그인 사용자 흐름이 백업되고 복원력이 있는지 확인합니다. 사용자를 로그인하는 데 사용하는 코드가 백업되고 복구 가능한지 확인합니다. 외부 프로세스와의 복원력 있는 인터페이스",
+ "text": "특정 IP 주소 또는 범위에서만 Azure Service Bus 네임스페이스에 액세스할 수 있도록 허용하는 것이 좋습니다",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "AKS Windows 워크로드에 필요한 경우 HostProcess 컨테이너를 사용할 수 있습니다.",
"waf": "신뢰도"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
- "severity": "보통",
- "text": "사용자 지정 브랜드 자산은 CDN에서 호스팅되어야 합니다.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "이벤트 기반 워크로드를 실행하는 경우 KEDA 사용Use KEDA if running event-driven workloads",
"waf": "공연"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
"severity": "낮다",
- "text": "여러 ID 공급자가 있어야 합니다(예: Microsoft, Google, Facebook 계정으로 로그인).",
- "waf": "신뢰도"
+ "text": "Dapr을 사용하여 마이크로 서비스 개발 용이",
+ "waf": "작업"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "보통",
- "text": "VM 수준에서 고가용성을 위한 VM 규칙(프리미엄 디스크, 서로 다른 가용성 영역에 있는 지역에 두 개 이상)을 따릅니다.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "SLA 지원 AKS 제품 사용",
"waf": "신뢰도"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "보통",
- "text": "복제하지 마세요! 복제로 인해 디렉터리 동기화에 문제가 발생할 수 있습니다",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "Pod 및 배포 정의에서 중단 예산 사용Use Disruption Budgets in your pod and deployment definitions",
"waf": "신뢰도"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "보통",
- "text": "다중 지역에 대해 활성-활성 상태 보유",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
+ "severity": "높다",
+ "text": "개인 레지스트리를 사용하는 경우 여러 지역에 이미지를 저장하도록 지역 복제를 구성합니다",
"waf": "신뢰도"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "severity": "보통",
- "text": "추가 지역 및 위치에 Azure AD 도메인 서비스 스탬프 추가Add Azure AD Domain service stamps to additional regions and locations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "kubecost와 같은 외부 애플리케이션을 사용하여 다른 사용자에게 비용 할당",
+ "waf": "비용"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "축소 모드를 사용하여 노드 삭제/할당 취소",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
"severity": "보통",
- "text": "DR에 복제본 세트 사용",
- "waf": "신뢰도"
+ "text": "필요한 경우 AKS 클러스터에서 다중 인스턴스 분할 GPU 사용",
+ "waf": "비용"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
"severity": "낮다",
- "text": "모범 사례는 기준 고가용성 영역 중복 웹 애플리케이션 아키텍처를 참조하세요.",
- "waf": "신뢰도"
+ "text": "개발/테스트 클러스터를 실행하는 경우 NodePool 시작/중지를 사용합니다.",
+ "waf": "비용"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
"severity": "보통",
- "text": "프리미엄 및 표준 계층을 사용합니다. 이러한 계층은 스테이징 슬롯 및 자동 백업을 지원합니다.",
- "waf": "신뢰도"
+ "text": "Kubernetes용 Azure Policy를 사용하여 클러스터 규정 준수 보장",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
- "severity": "높다",
- "text": "지역적으로 적용 가능한 경우 가용성 영역 활용(프리미엄 v2 또는 v3 계층 필요)",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "사용자/시스템 노드 풀이 있는 컨트롤 플레인에서 응용 프로그램 분리",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "시스템 nodepool에 taint를 추가하여 전용으로 만듭니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
"severity": "보통",
- "text": "상태 확인 구현",
- "waf": "신뢰도"
+ "text": "이미지에 개인 레지스트리(예: ACR) 사용",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
- "severity": "높다",
- "text": "Azure App Service에 대한 백업 및 복원 모범 사례를 참조하세요.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
+ "severity": "보통",
+ "text": "이미지에서 취약성 검사",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
"severity": "높다",
- "text": "Azure App Service 안정성 모범 사례 구현",
- "waf": "신뢰도"
+ "text": "앱 분리 요구 사항 정의(네임스페이스/노드 풀/클러스터)",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
- "severity": "낮다",
- "text": "App Service 앱을 다른 지역으로 이동하는 방법을 숙지합니다. 재해가 발생하는 동안",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
- "severity": "높다",
- "text": "Azure App Service의 안정성 지원 숙지",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
"severity": "보통",
- "text": "App Service 계획에서 실행되는 Function Apps에 대해 \"Always On\"이 사용하도록 설정되어 있는지 확인합니다.",
- "waf": "신뢰도"
+ "text": "CSI 비밀 저장소 드라이버를 사용하여 Azure Key Vault에 비밀 저장",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
- "severity": "보통",
- "text": "상태 검사를 사용하여 App Service 인스턴스 모니터링Monitor App Service instances using Health checks",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "클러스터에 서비스 주체를 사용하는 경우 주기적으로(예: 분기별) 자격 증명을 새로 고칩니다",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
"severity": "보통",
- "text": "Application Insights 가용성 테스트를 사용하여 웹앱 또는 웹 사이트의 가용성 및 응답성 모니터링",
- "waf": "신뢰도"
+ "text": "필요한 경우 키 관리 서비스 etcd 암호화를 추가합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
"severity": "낮다",
- "text": "Application Insights 표준 테스트를 사용하여 웹앱 또는 웹 사이트의 가용성 및 응답성 모니터링",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure App Service Review",
- "description": "Azure Key Vault를 사용하여 애플리케이션에 필요한 모든 비밀을 저장합니다. Key Vault는 비밀을 저장하기 위한 안전하고 감사된 환경을 제공하며 Key Vault SDK 또는 App Service Key Vault 참조를 통해 App Service와 잘 통합됩니다.",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
- "severity": "높다",
- "text": "Key Vault를 사용하여 비밀 저장",
+ "text": "필요한 경우 AKS용 기밀 컴퓨팅을 사용하는 것이 좋습니다.",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "관리 ID를 사용하여 Key Vault SDK를 사용하거나 App Service Key Vault 참조를 통해 Key Vault에 연결합니다.",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
- "severity": "높다",
- "text": "관리 ID를 사용하여 Key Vault에 연결",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "컨테이너용 Defender 사용 고려",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service TLS 인증서를 Key Vault에 저장합니다.",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
"severity": "높다",
- "text": "Key Vault를 사용하여 TLS 인증서를 저장합니다.",
+ "text": "서비스 주체 대신 관리 ID 사용",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "중요한 정보를 처리하는 시스템은 격리해야 합니다. 이렇게 하려면 별도의 App Service 계획 또는 App Service Environment를 사용하고 다른 구독 또는 관리 그룹을 사용하는 것이 좋습니다.",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
"severity": "보통",
- "text": "민감한 정보를 처리하는 시스템 격리",
+ "text": "AAD와 인증 통합(관리형 통합 사용)",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service의 로컬 디스크는 암호화되지 않으며 중요한 데이터를 저장해서는 안 됩니다. (예: D:\\\\Local and %TMP%).",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
"severity": "보통",
- "text": "로컬 디스크에 중요한 데이터를 저장하지 마십시오.",
+ "text": "관리자 kubeconfig에 대한 액세스 제한(get-credentials --admin)",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "인증된 웹 애플리케이션의 경우 Azure AD 또는 Azure AD B2C와 같이 잘 설정된 ID 공급자를 사용합니다. 선택한 애플리케이션 프레임워크를 활용하여 이 공급자와 통합하거나 App Service 인증/권한 부여 기능을 사용합니다.",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
"severity": "보통",
- "text": "인증에 설정된 ID 공급자 사용",
- "waf": "안전"
- },
- {
- "checklist": "Azure App Service Review",
- "description": "잘 관리되고 안전한 DevOps 배포 파이프라인과 같이 제어되고 신뢰할 수 있는 환경에서 App Service에 코드를 배포합니다. 이렇게 하면 버전이 제어되지 않고 악성 호스트에서 배포되는 것으로 확인되지 않은 코드를 방지할 수 있습니다.",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
- "severity": "높다",
- "text": "신뢰할 수 있는 환경에서 배포",
+ "text": "AAD RBAC와 권한 부여 통합",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "FTP/FTPS 및 WebDeploy/SCM 모두에 대한 기본 인증을 사용 안함으로 설정합니다. 이렇게 하면 이러한 서비스에 대한 액세스가 비활성화되고 배포에 Azure AD 보안 엔드포인트가 사용됩니다. SCM 사이트는 Azure AD 자격 증명을 사용하여 열 수도 있습니다.",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
"severity": "높다",
- "text": "기본 인증 사용 안 함",
+ "text": "쿠버네티스에서 RBAC 권한을 제한하기 위해 네임스페이스 사용",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "가능한 경우 관리 ID를 사용하여 Azure AD 보안 리소스에 연결합니다. 이렇게 할 수 없는 경우 Key Vault에 비밀을 저장하고 대신 관리 ID를 사용하여 Key Vault에 연결합니다.",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
- "severity": "높다",
- "text": "관리 ID를 사용하여 리소스에 연결",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "Pod ID 액세스 관리의 경우 Azure AD 워크로드 ID(미리 보기)를 사용합니다.",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure Container Registry에 저장된 이미지를 사용하는 경우 관리 ID를 사용하여 끌어옵니다.",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
- "severity": "높다",
- "text": "관리 ID를 사용하여 컨테이너 끌어오기",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "AKS 비대화형 로그인의 경우 kubelogin(미리 보기)을 사용합니다.",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service의 진단 설정을 구성하면 모든 원격 분석을 로깅 및 모니터링의 중앙 대상으로 Log Analytics에 보낼 수 있습니다. 이를 통해 HTTP 로그, 애플리케이션 로그, 플랫폼 로그 등과 같은 App Service의 런타임 활동을 모니터링할 수 있습니다.",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
+ "service": "AKS",
"severity": "보통",
- "text": "Log Analytics에 App Service 런타임 로그 보내기Send App Service runtime logs to Log Analytics",
+ "text": "AKS 로컬 계정 사용 안 함",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "활동 로그를 Log Analytics에 로깅 및 모니터링의 중앙 대상으로 보내도록 진단 설정을 지정합니다. 이렇게 하면 App Service 리소스 자체에서 컨트롤 플레인 작업을 모니터링할 수 있습니다.",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
- "severity": "보통",
- "text": "Log Analytics에 App Service 활동 로그 보내기Send App Service activity logs to Log Analytics",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "필요한 경우 Just-in-time 클러스터 액세스 구성",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "지역 VNet 통합, 네트워크 보안 그룹 및 UDR의 조합을 사용하여 아웃바운드 네트워크 액세스를 제어합니다. 트래픽은 Azure Firewall과 같은 NVA로 라우팅되어야 합니다. 방화벽의 로그를 모니터링해야 합니다.",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
- "severity": "보통",
- "text": "아웃바운드 네트워크 액세스를 제어해야 함",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "AKS에 필요한 경우 AAD 조건부 액세스 구성",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "VNet 통합을 사용하고 VNet NAT Gateway 또는 NVA와 같은 Azure Firewall을 사용하여 안정적인 아웃바운드 IP를 제공할 수 있습니다. 이렇게 하면 필요한 경우 수신 당사자가 IP를 기반으로 허용 목록을 만들 수 있습니다. Azure 서비스에 대한 통신의 경우 IP 주소에 의존할 필요가 없는 경우가 많으며 서비스 엔드포인트와 같은 메커니즘을 대신 사용해야 합니다. (또한 수신 끝에서 프라이빗 엔드포인트를 사용하면 SNAT가 발생하지 않고 안정적인 아웃바운드 IP 범위를 제공합니다.)",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "service": "AKS",
"severity": "낮다",
- "text": "인터넷 주소에 대한 아웃바운드 통신을 위한 안정적인 IP 보장",
+ "text": "Windows AKS 워크로드에 필요한 경우 gMSA를 구성합니다. ",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service 액세스 제한, 서비스 엔드포인트 또는 프라이빗 엔드포인트의 조합을 사용하여 인바운드 네트워크 액세스를 제어합니다. 웹앱 자체 및 SCM 사이트에 대해 서로 다른 액세스 제한이 필요하고 구성될 수 있습니다.",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "높다",
- "text": "인바운드 네트워크 액세스를 제어해야 합니다.",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "더 세밀하게 제어하려면 관리형 Kubelet ID를 사용하는 것이 좋습니다.",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "Application Gateway 또는 Azure Front Door와 같은 Web Application Firewall을 사용하여 악의적인 인바운드 트래픽으로부터 보호합니다. WAF의 로그를 모니터링해야 합니다.",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "AGIC를 사용하는 경우 클러스터 간에 AppGW를 공유하지 마세요",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "service": "AKS",
"severity": "높다",
- "text": "App Service 앞에서 WAF 사용Use a WAF in front of App Service",
- "waf": "안전"
+ "text": "AKS HTTP 라우팅 추가 기능을 사용하지 말고, 애플리케이션 라우팅 추가 기능과 함께 관리되는 NGINX 수신을 대신 사용합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure App Service Review",
- "description": "WAF에 대한 액세스만 잠궈 WAF를 우회할 수 없는지 확인합니다. 액세스 제한, 서비스 엔드포인트 및 프라이빗 엔드포인트의 조합을 사용합니다.",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "Windows 워크로드의 경우 가속화된 네트워킹을 사용합니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"severity": "높다",
- "text": "WAF가 우회되지 않도록 방지",
- "waf": "안전"
+ "text": "표준 ALB 사용(기본 ALB와 반대)",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service 구성에서 최소 TLS 정책을 1.2로 설정합니다.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "service": "AKS",
"severity": "보통",
- "text": "최소 TLS 정책을 1.2로 설정합니다.",
+ "text": "Azure CNI를 사용하는 경우 NodePools에 다른 서브넷을 사용하는 것이 좋습니다.",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "HTTPS만 사용하도록 App Service를 구성합니다. 이로 인해 App Service가 HTTP에서 HTTPS로 리디렉션됩니다. 코드 또는 WAF에서 HSTS(HTTP Strict Transport Security)를 사용하여 HTTPS를 통해서만 사이트에 액세스해야 함을 브라우저에 알리는 것이 좋습니다.",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
- "severity": "높다",
- "text": "HTTPS만 사용",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "프라이빗 엔드포인트(기본 설정) 또는 Virtual Network 서비스 엔드포인트를 사용하여 클러스터에서 PaaS 서비스에 액세스",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "CORS 구성에서 와일드카드를 사용하면 모든 원본이 서비스에 액세스할 수 있으므로 CORS의 목적에 어긋나므로 사용하지 마세요. 특히 서비스에 액세스할 수 있을 것으로 예상되는 원본만 허용합니다.",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"severity": "높다",
- "text": "와일드카드는 CORS에 사용할 수 없습니다.",
- "waf": "안전"
+ "text": "요구 사항에 가장 적합한 CNI 네트워크 플러그 인 선택(Azure CNI 권장)",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure App Service Review",
- "description": "원격 디버깅은 서비스에서 추가 포트를 열어 공격 노출 영역을 증가시키므로 프로덕션에서 켜면 안 됩니다. 서비스는 48시간 후에 자동으로 원격 디버깅을 설정합니다.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "높다",
- "text": "원격 디버깅 끄기",
- "waf": "안전"
+ "text": "Azure CNI를 사용하는 경우 노드당 최대 Pod 수를 고려하여 서브넷 크기를 적절하게 조정합니다",
+ "waf": "공연"
},
{
- "checklist": "Azure App Service Review",
- "description": "App Service용 Defender를 사용하도록 설정합니다. 이는 다른 위협 중에서도 알려진 악성 IP 주소에 대한 통신을 탐지합니다. 작업의 일부로 App Service용 Defender의 권장 사항을 검토합니다.",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
- "severity": "보통",
- "text": "클라우드용 Defender 사용 - App Service용 Defender",
- "waf": "안전"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "Azure CNI를 사용하는 경우 최대 Pod/노드(기본값 30)를 확인합니다.",
+ "waf": "공연"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure는 네트워크에서 DDoS 기본 보호를 제공하며, 정상적인 트래픽 패턴을 학습하고 비정상적인 동작을 감지할 수 있는 지능형 DDoS 표준 기능으로 개선할 수 있습니다. DDoS 표준은 Virtual Network에 적용되므로 Application Gateway 또는 NVA와 같은 앱 앞의 네트워크 리소스에 대해 구성해야 합니다.",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
- "severity": "보통",
- "text": "WAF VNet에서 DDOS 보호 표준 사용Enable DDOS Protection Standard on the WAF VNet",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "내부 앱의 경우 조직은 방화벽에서 전체 AKS 서브넷을 여는 경우가 많습니다. 이렇게 하면 노드에 대한 네트워크 액세스도 열리고 잠재적으로 Pod에 대한 액세스도 열립니다(Azure CNI를 사용하는 경우). LoadBalancer IP가 다른 서브넷에 있는 경우 앱 클라이언트에서 이 IP만 사용할 수 있어야 합니다. 또 다른 이유는 AKS 서브넷의 IP 주소가 부족한 리소스인 경우 서비스에 해당 IP 주소를 사용하면 클러스터의 최대 확장성이 감소하기 때문입니다.",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "개인 IP LoadBalancer 서비스를 사용하는 경우 AKS 서브넷이 아닌 전용 서브넷을 사용합니다",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure Container Registry에 저장된 이미지를 사용하는 경우 프라이빗 엔드포인트 및 앱 설정 'WEBSITE_PULL_IMAGE_OVER_VNET'를 사용하여 Azure Container Registry에서 가상 네트워크를 통해 끌어옵니다.",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
- "severity": "보통",
- "text": "Virtual Network를 통해 컨테이너 끌어오기",
- "waf": "안전"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "그에 따라 서비스 IP 주소 범위의 크기를 조정합니다(클러스터 확장성이 제한됨).",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure App Service Review",
- "description": "참여의 침투 테스트 규칙에 따라 웹 응용 프로그램에 대한 침투 테스트를 수행합니다.",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
- "severity": "보통",
- "text": "침투 테스트 수행",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "필요한 경우 자체 CNI 플러그인을 추가합니다.",
"waf": "안전"
},
{
- "checklist": "Azure App Service Review",
- "description": "DevSecOps 사례에 따라 취약성을 검증하고 검사한 신뢰할 수 있는 코드를 배포합니다.",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
- "severity": "보통",
- "text": "유효성이 검사된 코드 배포",
- "waf": "안전"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "필요한 경우 AKS에서 노드당 공용 IP 구성",
+ "waf": "공연"
},
{
- "checklist": "Azure App Service Review",
- "description": "지원되는 플랫폼, 프로그래밍 언어, 프로토콜 및 프레임워크의 최신 버전을 사용합니다.",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
- "severity": "높다",
- "text": "최신 플랫폼, 언어, 프로토콜 및 프레임워크 사용",
- "waf": "안전"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "수신 컨트롤러를 사용하여 LoadBalancer 유형 서비스를 사용하여 노출하는 대신 웹 기반 앱을 노출합니다",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub는 미사용 데이터의 암호화를 제공합니다. 사용자 고유의 키를 사용하는 경우 데이터는 여전히 Microsoft 관리형 키를 사용하여 암호화되지만 Microsoft 관리형 키는 고객 관리형 키를 사용하여 암호화됩니다. ",
- "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
- "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "service": "AKS",
"severity": "낮다",
- "text": "필요한 경우 미사용 데이터 암호화에서 고객 관리형 키 옵션 사용Use customer-managed key option in data at rest encryption when required",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "안전"
+ "text": "송신 트래픽 크기 조정을 위해 Azure NAT Gateway를 outboundType으로 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hubs 네임스페이스를 사용하면 클라이언트가 TLS 1.0 이상을 사용하여 데이터를 보내고 받을 수 있습니다. 더 엄격한 보안 조치를 적용하기 위해 클라이언트가 최신 버전의 TLS를 사용하여 데이터를 보내고 받도록 Event Hubs 네임스페이스를 구성할 수 있습니다. Event Hubs 네임스페이스에 최소 버전의 TLS가 필요한 경우 이전 버전으로 수행된 모든 요청이 실패합니다. ",
- "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
- "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "service": "AKS",
"severity": "보통",
- "text": "요청에 필요한 최소 버전의 TLS(전송 계층 보안) 적용 ",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Azure CNI IP 소모를 방지하기 위해 IP의 동적 할당 사용",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "보안 요구 사항에 필요한 경우 AzFW/NVA를 사용하여 송신 트래픽 필터링",
"waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Event Hubs 네임스페이스를 만들 때 네임스페이스에 대해 RootManageSharedAccessKey라는 정책 규칙이 자동으로 만들어집니다. 이 정책에는 전체 네임스페이스에 대한 관리 권한이 있습니다. 이 규칙을 관리 루트 계정처럼 취급하고 응용 프로그램에서 사용하지 않는 것이 좋습니다. RBAC에서 AAD를 인증 공급자로 사용하는 것이 좋습니다. ",
- "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "service": "AKS",
"severity": "보통",
- "text": "필요하지 않은 경우 루트 계정을 사용하지 마십시오.",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "text": "퍼블릭 API 엔드포인트를 사용하는 경우 액세스할 수 있는 IP 주소를 제한합니다",
"waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure 리소스에 대한 관리 ID는 Azure VM(Virtual Machines), 함수 앱, Virtual Machine Scale Sets 및 기타 서비스에서 실행되는 애플리케이션에서 Azure AD 자격 증명을 사용하여 Event Hubs 리소스에 대한 액세스 권한을 부여할 수 있습니다. Azure AD 인증과 함께 Azure 리소스에 대한 관리 ID를 사용하면 클라우드에서 실행되는 애플리케이션에 자격 증명을 저장하지 않아도 됩니다. ",
- "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
- "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
- "service": "Event Hubs",
- "severity": "보통",
- "text": "가능한 경우 애플리케이션은 관리 ID를 사용하여 Azure Event Hub에 인증해야 합니다. 그렇지 않은 경우 Azure Key Vault 또는 동등한 서비스에 스토리지 자격 증명(SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "안전"
- },
- {
- "checklist": "Azure Event Hub Review",
- "description": "권한을 만들 때 Azure Event Hub에 대한 클라이언트의 액세스를 세밀하게 제어할 수 있습니다. Azure Event Hub의 사용 권한은 개별 리소스 수준(예: 소비자 그룹, 이벤트 허브 엔터티, 이벤트 허브 네임스페이스 등)으로 범위를 지정할 수 있으며 범위가 지정되어야 합니다.",
- "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "service": "AKS",
"severity": "높다",
- "text": "최소 권한 데이터 평면 RBAC 사용",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "text": "요구 사항에 따라 개인 클러스터를 사용합니다",
"waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub 리소스 로그에는 작업 로그, 가상 네트워크 및 Kafka 로그가 포함됩니다. 런타임 감사 로그는 Event Hubs의 모든 데이터 평면 액세스 작업(예: 이벤트 보내기 또는 받기)에 대해 집계된 진단 정보를 캡처합니다.",
- "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
- "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"severity": "보통",
- "text": "보안 조사를 위해 로깅을 사용하도록 설정합니다. Azure Monitor를 사용하여 리소스 로그, 런타임 감사 로그 및 Kafka 로그와 같은 메트릭 및 로그를 캡처합니다.",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "text": "Windows 2019 및 2022 AKS 노드의 경우 Calico 네트워크 정책을 사용할 수 있습니다. ",
"waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure Event Hub는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 가상 네트워크와 Azure Event Hub 간의 트래픽이 Microsoft 백본 네트워크를 통해 트래버스할 수 있습니다. 또한 퍼블릭 엔드포인트를 사용하지 않는 경우 사용하지 않도록 설정해야 합니다. ",
- "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
- "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
- "service": "Event Hubs",
- "severity": "보통",
- "text": "프라이빗 엔드포인트를 사용하여 Azure Event Hub에 액세스하고 해당하는 경우 공용 네트워크 액세스를 사용하지 않도록 설정하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "Kubernetes 네트워크 정책 옵션 사용(Calico/Azure)",
"waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "IP 방화벽을 사용하면 퍼블릭 엔드포인트를 CIDR(Classless Inter-Domain Routing) 표기법의 IPv4 주소 또는 IPv4 주소 범위 집합으로만 추가로 제한할 수 있습니다. ",
- "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
- "service": "Event Hubs",
- "severity": "보통",
- "text": "특정 IP 주소 또는 범위에서 Azure Event Hub 네임스페이스에 대한 액세스만 허용하는 것이 좋습니다",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "쿠버네티스 네트워크 정책을 사용하여 클러스터 내 보안 강화",
"waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
- "service": "Event Hubs",
- "severity": "보통",
- "text": "FTA 탄력성 핸드북 활용",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure Event Hub Review",
- "description": " 영역 사용 지역의 프리미엄, 전용 또는 표준 SKU를 사용하여 포털에서 만든 새 EH 네임스페이스에 대해 자동으로 설정됩니다. EH 메타데이터와 이벤트 데이터 자체는 모두 영역 간에 복제됩니다",
- "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
"severity": "높다",
- "text": "지역적으로 적용 가능한 경우 가용성 영역 활용Leverage Availability Zones if regionally applicable",
- "waf": "신뢰도"
+ "text": "웹 워크로드(UI 또는 API)에 WAF 사용Use a WAF for web workloads (UIs or APIs)",
+ "waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
- "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "service": "AKS",
"severity": "보통",
- "text": "예측 가능한 성능을 위해 프리미엄 또는 전용 SKU 사용",
- "waf": "신뢰도"
+ "text": "AKS Virtual Network에서 DDoS 표준 사용Use DDoS Standard in the AKS Virtual Network",
+ "waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "기본 제공 지역 재해 복구 기능을 사용하도록 설정하면 네임스페이스(Event Hubs, 소비자 그룹 및 설정)의 전체 구성이 기본 네임스페이스에서 보조 네임스페이스로 지속적으로 복제되며, 언제든지 한 번만 장애 조치(failover)를 주 네임스페이스에서 보조 네임스페이스로 이동할 수 있습니다. 활성/수동 기능은 애플리케이션 구성을 변경할 필요 없이 실패한 Azure 지역에서 더 쉽게 복구하고 중단할 수 있도록 설계되었습니다",
- "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
- "service": "Event Hubs",
- "severity": "높다",
- "text": "Active Passive 구성을 사용하여 지역 재해 복구 계획Plan for Geo Disaster Recovery using Active Passive configuration",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "필요한 경우 회사 HTTP 프록시를 추가합니다.",
+ "waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "다운된 지역에서 이벤트 데이터의 중단 또는 손실을 허용할 수 없는 DR 구성에 사용해야 합니다. 이러한 경우 복제 지침을 따르고 기본 제공 지역 재해 복구 기능(활성/수동)을 사용하지 마세요. 액티브/액티브를 사용하여 서로 다른 지역 및 네임스페이스에서 여러 Event Hubs를 유지 관리하면 허브 간에 이벤트가 복제됩니다",
- "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
- "service": "Event Hubs",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "service": "AKS",
"severity": "보통",
- "text": "Business Critical Applications의 경우 Active Active 구성을 사용합니다.",
- "waf": "신뢰도"
+ "text": "고급 마이크로서비스 통신 관리를 위해 서비스 메시를 사용하는 것이 좋습니다",
+ "waf": "안전"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
- "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
- "service": "Event Hubs",
- "severity": "보통",
- "text": "복원력 있는 Event Hubs 설계",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "가장 중요한 메트릭에 대한 경고 구성(권장 사항은 Container Insights 참조)",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "Azure Spring Apps는 모든 앱에 대해 두 개의 배포를 허용하며, 그 중 하나만 프로덕션 트래픽을 수신합니다. 블루-그린 배포 전략을 통해 가동 중지 시간 제로를 달성할 수 있습니다. 파란색 녹색 배포는 표준 및 엔터프라이즈 계층에서만 사용할 수 있습니다. ADO/GitHub 작업과 함께 CI/CD를 사용하여 배포를 자동화할 수 있습니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "Azure Advisor에서 클러스터에 대한 권장 사항을 정기적으로 확인합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "Azure Spring Apps 인스턴스는 애플리케이션에 대해 여러 지역에서 만들 수 있으며 Traffic Manager/Front Door에서 트래픽을 라우팅할 수 있습니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "AKS 자동 인증서 회전 사용",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "지원되는 지역에서 Azure Spring Apps는 영역 중복으로 배포할 수 있으며, 이는 인스턴스가 가용성 영역에 자동으로 분산됨을 의미합니다. 이 기능은 Standard 및 Enterprise 계층에서만 사용할 수 있습니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "kubernetes 버전을 주기적으로(예: 분기별) 업그레이드하거나 AKS 자동 업그레이드 기능을 사용하는 정기적인 프로세스가 있습니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "앱에 1개 이상의 앱 인스턴스 사용",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "node-image upgrade를 사용하지 않는 경우 Linux 노드 업그레이드에 kured를 사용합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "로그, 메트릭 및 추적을 사용하여 Azure Spring Apps를 모니터링합니다. ASA를 Application Insights와 통합하고, 오류를 추적하고, 통합 문서를 만듭니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "클러스터 노드 이미지를 주기적으로(예: 매주) 업그레이드하는 정기적인 프로세스가 있습니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "Spring Cloud Gateway에서 자동 크기 조정 설정",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "gitops를 고려하여 애플리케이션 또는 클러스터 구성을 여러 클러스터에 배포합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "service": "AKS",
"severity": "낮다",
- "text": "표준 소비 및 전용 플랜이 있는 앱에 대해 자동 크기 조정을 사용하도록 설정합니다.",
- "waf": "신뢰도"
+ "text": "프라이빗 클러스터에서 AKS 명령 호출을 사용하는 것이 좋습니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
- "severity": "보통",
- "text": "중요 업무용 앱에 대한 Spring Boot의 상업적 지원을 위해 Enterprise 플랜을 사용합니다. 다른 계층에서는 OSS 지원을 받을 수 있습니다.",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
- "severity": "보통",
- "text": "Azure Data Factory에 대한 FTA 복원력 플레이북 활용",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "계획된 이벤트의 경우 노드 자동 드레인 사용을 고려하십시오.",
+ "waf": "작업"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
+ "service": "AKS",
"severity": "높다",
- "text": "가용성 영역을 지원하는 지역에서 영역 중복 파이프라인 사용Use zone redundant pipelines in regions that support Availability Zones",
- "waf": "신뢰도"
+ "text": "노드 RG(일명 '인프라 RG')의 운영자가 변경을 수행하지 않도록 자체 거버넌스 관행을 개발합니다.",
+ "waf": "작업"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
- "severity": "보통",
- "text": "DevOps를 사용하여 Github/Azure DevOps 통합으로 ARM 템플릿 백업 ",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "사용자 정의 노드 RG (일명 '인프라 RG') 이름 사용",
+ "waf": "작업"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "service": "AKS",
"severity": "보통",
- "text": "다른 지역에서 자체 호스팅 통합 런타임 VM을 복제해야 합니다. ",
- "waf": "신뢰도"
+ "text": "YAML 매니페스트에서 더 이상 사용되지 않는 Kubernetes API를 사용하지 마십시오.",
+ "waf": "작업"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
- "severity": "보통",
- "text": "자매 지역에서 네트워크를 복제하거나 복제해야 합니다. 다른 지역에서 Vnet의 복사본을 만들어야 합니다",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "테인트 Windows 노드",
+ "waf": "작업"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "description": "ADF 파이프라인에서 Key Vault를 사용하는 경우 Key Vault를 복제하기 위해 아무 작업도 수행할 필요가 없습니다. Key Vault는 관리되는 서비스이며 Microsoft에서 처리합니다",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "service": "AKS",
"severity": "낮다",
- "text": "Keyvault 통합을 사용하는 경우 Keyvault의 SLA를 사용하여 가용성을 파악합니다",
- "waf": "신뢰도"
+ "text": "Windows 컨테이너 패치 수준을 호스트 패치 수준과 동기화된 상태로 유지",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
- "service": "SAP",
- "severity": "보통",
- "text": "ACSS(Azure Center for SAP solutions)는 SAP를 Azure의 최상위 워크로드로 만드는 Azure 제품입니다. ACSS는 Azure에서 SAP 시스템을 통합 워크로드로 만들고 실행할 수 있도록 하는 엔드투엔드 솔루션으로, 혁신을 위한 보다 원활한 기반을 제공합니다. 신규 및 기존 Azure 기반 SAP 시스템 모두에 대한 관리 기능을 활용할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "클러스터 수준의 진단 설정을 통해Via Diagnostic Settings at the cluster level",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "마스터 로그(즉, API 로그)를 Azure Monitor 또는 기본 로그 관리 솔루션으로 보냅니다",
"waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure는 Linux 및 Windows에서 SAP 배포 자동화를 지원합니다. SAP Deployment Automation Framework는 SAP 환경을 배포, 설치 및 유지 관리할 수 있는 오픈 소스 오케스트레이션 도구입니다.",
- "training": "https://github.com/Azure/sap-automation",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "필요한 경우 nodePool 스냅샷을 사용합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "시간에 민감하지 않은 워크로드에 대한 스폿 노드 풀 고려",
"waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
- "service": "SAP",
- "severity": "보통",
- "text": "RTO를 충족하는 시점과 시간 프레임에서 프로덕션 데이터베이스에 대한 특정 시점으로 복구를 수행합니다. 특정 시점 복구에는 일반적으로 DBMS 계층 또는 SAP를 통해 데이터를 삭제하는 운영자 오류가 포함됩니다",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "빠른 버스팅을 위해 AKS 가상 노드 고려",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
- "service": "SAP",
- "severity": "보통",
- "text": "백업 및 복구 시간을 테스트하여 재해 발생 후 모든 시스템을 동시에 복원하기 위한 RTO 요구 사항을 충족하는지 확인합니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
+ "severity": "높다",
+ "text": "Container Insights(또는 Prometheus와 같은 다른 도구)를 사용하여 클러스터 지표 모니터링",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "높다",
- "text": "쌍을 이루는 지역 간에 표준 스토리지를 복제할 수 있지만 표준 스토리지를 사용하여 데이터베이스 또는 가상 하드 디스크를 저장할 수는 없습니다. 사용하는 쌍을 이루는 지역 간에만 백업을 복제할 수 있습니다. 다른 모든 데이터의 경우 SQL Server Always On 또는 SAP HANA 시스템 복제와 같은 네이티브 DBMS 기능을 사용하여 복제를 실행합니다. SAP 애플리케이션 계층에 Site Recovery, rsync 또는 robocopy 및 기타 타사 소프트웨어의 조합을 사용합니다.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "신뢰도"
+ "text": "Container Insights(또는 Telegraf/ElasticSearch와 같은 다른 도구)를 사용하여 클러스터 로그를 저장하고 분석합니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
"severity": "보통",
- "text": "Azure 가용성 영역을 사용하여 고가용성을 달성하는 경우 SAP 애플리케이션 서버와 데이터베이스 서버 간의 대기 시간을 고려해야 합니다. 대기 시간이 긴 영역의 경우 SAP 애플리케이션 서버와 데이터베이스 서버가 항상 동일한 영역에서 실행되도록 운영 절차를 마련해야 합니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "신뢰도"
+ "text": "노드의 CPU 및 메모리 사용률 모니터링",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "SAP",
- "severity": "높다",
- "text": "온-프레미스에서 기본 및 보조 Azure 재해 복구 지역으로의 ExpressRoute 연결을 설정합니다. 또한 ExpressRoute를 사용하는 대신 온-프레미스에서 주 및 보조 Azure 재해 복구 지역으로 VPN 연결을 설정하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "Azure CNI를 사용하는 경우 노드당 사용되는 Pod IP의 %를 모니터링합니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "SAP",
- "severity": "낮다",
- "text": "DR 지역에서 데이터의 암호를 해독할 수 있도록 지역 간에 인증서, 비밀 또는 키와 같은 키 자격 증명 모음 콘텐츠를 복제합니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "OS 디스크의 I/O는 중요한 리소스입니다. 노드의 OS가 I/O에서 제한되면 예측할 수 없는 동작이 발생할 수 있으며, 일반적으로 노드가 NotReady로 선언됩니다",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "노드에서 OS 디스크 큐 크기 모니터링Monitor OS disk queue depth in nodes",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"severity": "보통",
- "text": "기본 및 재해 복구 가상 네트워크를 피어링합니다. 예를 들어 HANA 시스템 복제의 경우 SAP HANA DB 가상 네트워크를 재해 복구 사이트의 SAP HANA DB 가상 네트워크에 피어링해야 합니다.",
- "waf": "신뢰도"
+ "text": "AzFW/NVA에서 송신 필터링을 사용하지 않는 경우 표준 ALB 할당 SNAT 포트를 모니터링합니다",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
- "service": "SAP",
- "severity": "낮다",
- "text": "SAP 배포에 Azure NetApp Files 스토리지를 사용하는 경우 최소한 두 지역의 프리미엄 계층에 두 개의 Azure NetApp Files 계정을 만듭니다.",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "AKS 클러스터에 대한 Resource Health 알림 구독Subscribe to resource health notifications for your AKS cluster",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"severity": "높다",
- "text": "기본 데이터베이스 복제 기술을 사용하여 HA 쌍의 데이터베이스를 동기화해야 합니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
- "waf": "신뢰도"
+ "text": "Pod 규격에서 요청 및 제한 구성",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
- "service": "SAP",
- "severity": "높다",
- "text": "기본 VNet(가상 네트워크)에 대한 CIDR은 DR 사이트 VNet의 CIDR과 충돌하거나 겹치지 않아야 합니다",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "네임스페이스에 대한 리소스 할당량 적용Enforce resource quotas for namespaces",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "AKS",
"severity": "높다",
- "text": "Site Recovery를 사용하여 응용 프로그램 서버를 DR 사이트에 복제합니다. Site Recovery는 중앙 서비스 클러스터 VM을 DR 사이트에 복제하는 데도 도움이 될 수 있습니다. DR을 호출할 때 DR 사이트에서 Linux Pacemaker 클러스터를 다시 구성해야 합니다(예: VIP 또는 SBD 바꾸기, corosync.conf 실행 등).",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "신뢰도"
+ "text": "구독에 노드 풀을 확장할 수 있는 충분한 할당량이 있는지 확인합니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "높다",
- "text": "단일 장애 지점에 대한 SAP 소프트웨어의 가용성을 고려합니다. 여기에는 SAP NetWeaver 및 SAP S/4HANA 아키텍처, SAP ABAP 및 ASCS + SCS에서 사용되는 DBMS와 같은 애플리케이션 내의 단일 실패 지점이 포함됩니다. 또한 SAP Web Dispatcher와 같은 다른 도구도 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "Cluster Autoscaler 사용",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
- "service": "SAP",
- "severity": "높다",
- "text": "SAP 및 SAP 데이터베이스의 경우 자동 장애 조치(failover) 클러스터를 구현하는 것이 좋습니다. Windows에서 Windows Server 장애 조치(failover) 클러스터링은 장애 조치(failover)를 지원합니다. Linux에서 Linux Pacemaker 또는 SIOS Protection Suite 및 Veritas InfoScale과 같은 타사 툴은 장애 조치를 지원합니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "AKS 노드 풀에 대한 노드 구성 사용자 지정",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
- "severity": "높다",
- "text": "Azure는 기본 및 보조 VM이 DBMS 데이터에 대한 스토리지를 공유하는 아키텍처를 지원하지 않습니다. DBMS 계층의 경우 일반적인 아키텍처 패턴은 기본 및 보조 VM에서 사용하는 것과 다른 스토리지 스택을 사용하여 동시에 데이터베이스를 복제하는 것입니다.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "필요한 경우 Horizontal Pod Autoscaler 사용",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "노드가 클수록 임시 디스크 및 가속화된 네트워킹과 같은 더 높은 성능과 기능을 제공하지만 폭발 반경이 증가하고 크기 조정 세분성이 감소합니다",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
"severity": "높다",
- "text": "DBMS 데이터 및 트랜잭션/다시 실행 로그 파일은 Azure 지원 블록 스토리지 또는 Azure NetApp Files에 저장됩니다. Azure Files 또는 Azure Premium Files는 DBMS 데이터 및/또는 SAP 워크로드가 있는 다시 실행 로그 파일에 대한 스토리지로 지원되지 않습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
- "waf": "신뢰도"
+ "text": "너무 크거나 너무 작지 않은 적절한 노드 크기를 고려합니다",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
- "service": "SAP",
- "severity": "높다",
- "text": "ASCS + SCS 구성 요소 및 특정 고가용성 시나리오에 대해 Windows에서 Azure 공유 디스크를 사용할 수 있습니다. SAP 애플리케이션 계층 구성 요소 및 DBMS 계층에 대해 장애 조치(failover) 클러스터를 별도로 설정합니다. Azure는 현재 SAP 애플리케이션 계층 구성 요소와 DBMS 계층을 하나의 장애 조치(failover) 클러스터로 결합하는 고가용성 아키텍처를 지원하지 않습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "확장성을 위해 5,000개 이상의 노드가 필요한 경우 추가 AKS 클러스터를 사용하는 것이 좋습니다",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
- "service": "SAP",
- "severity": "높다",
- "text": "SAP ASCS(애플리케이션 계층 구성 요소) 및 DBMS 계층에 대한 대부분의 장애 조치(failover) 클러스터에는 장애 조치(failover) 클러스터에 대한 가상 IP 주소가 필요합니다. Azure Load Balancer는 다른 모든 경우에 대한 가상 IP 주소를 처리해야 합니다. 한 가지 설계 원칙은 클러스터 구성당 하나의 부하 분산 장치를 사용하는 것입니다. 부하 분산 장치의 표준 버전(표준 Load Balancer SKU)을 사용하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "AKS 자동화를 위해 EventGrid 이벤트를 구독하는 것이 좋습니다.",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
- "service": "SAP",
- "severity": "높다",
- "text": "로드 밸런서에서 유동 IP가 사용하도록 설정되어 있는지 확인합니다.",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "AKS 클러스터에서 장기 실행 작업의 경우 이벤트 종료를 고려합니다.",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "SAP",
- "severity": "높다",
- "text": "고가용성 인프라를 배포하기 전에 선택한 지역에 따라 Azure 가용성 집합 또는 가용성 영역을 사용하여 배포할지 여부를 결정합니다.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "필요한 경우 AKS 노드에 Azure Dedicated Host를 사용하는 것이 좋습니다",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
"severity": "높다",
- "text": "SAP 구성 요소(중앙 서비스, 애플리케이션 서버 및 데이터베이스)용 애플리케이션에 대한 인프라 SLA를 충족하려면 모든 구성 요소에 대해 동일한 고가용성 옵션(VM, 가용성 집합, 가용성 영역)을 선택해야 합니다.",
- "waf": "신뢰도"
+ "text": "임시 OS 디스크 사용",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
"severity": "높다",
- "text": "동일한 가용성 집합에 서로 다른 역할의 서버를 혼합하지 마십시오. 중앙 서비스 VM, 데이터베이스 VM, 애플리케이션 VM을 자체 가용성 집합으로 유지",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "신뢰도"
+ "text": "임시 디스크가 아닌 디스크의 경우 여러 Pod를 실행하는 데 고성능이 필요하고 기본 AKS 로그 회전 임계값을 사용하여 대규모 로그를 생성하므로 많은 Pod/노드를 실행할 때 노드에 높은 IOPS 및 더 큰 OS 디스크를 사용합니다",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
+ "severity": "낮다",
+ "text": "고성능 스토리지 옵션의 경우 AKS에서 Ultra Disks를 사용합니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
"severity": "보통",
- "text": "근접 배치 그룹을 사용하지 않는 한 Azure 가용성 영역 내에 Azure 가용성 집합을 배포할 수 없습니다.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "신뢰도"
+ "text": "클러스터에서 상태를 유지하지 않고 외부(AzStorage, AzSQL, Cosmos 등)에 데이터를 저장합니다.",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
- "severity": "높다",
- "text": "가용성 집합을 만들 때 사용 가능한 최대 장애 도메인 및 업데이트 도메인 수를 사용합니다. 예를 들어 하나의 가용성 집합에 두 개 이상의 VM을 배포하는 경우 Azure의 계획된 유지 관리 외에도 잠재적인 물리적 하드웨어 오류, 네트워크 중단 또는 전원 중단의 영향을 제한하기 위해 최대 장애 도메인 수(3개)와 충분한 업데이트 도메인을 사용합니다. 장애 도메인의 기본 수는 2개이며 나중에 온라인으로 변경할 수 없습니다.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "AzFiles 표준을 사용하는 경우 성능상의 이유로 AzFiles 프리미엄 및/또는 ANF를 고려합니다",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "높다",
- "text": "가용성 집합 배포에서 Azure 근접 배치 그룹을 사용하는 경우 세 가지 SAP 구성 요소(중앙 서비스, 애플리케이션 서버 및 데이터베이스)가 모두 동일한 근접 배치 그룹에 있어야 합니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
+ "severity": "보통",
+ "text": "Azure 디스크 및 AZ를 사용하는 경우 올바른 영역에 스토리지를 프로비전하기 위해 VolumeBindingMode::WaitForFirstConsumer를 사용하여 LRS 디스크의 영역 내에 노드 풀을 사용하거나 여러 영역에 걸쳐 있는 노드 풀에 ZRS 디스크를 사용하는 것이 좋습니다",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "높다",
- "text": "SAP SID당 하나의 근접 배치 그룹을 사용합니다. 그룹은 가용성 영역 또는 Azure 지역에 걸쳐 있지 않습니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "Application Gateway v2 SKU를 사용하고 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "높다",
- "text": "운영 체제에 따라 다음 서비스 중 하나를 사용하여 SAP 중앙 서비스 클러스터를 실행합니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
+ "severity": "보통",
+ "text": "Azure Load Balancer에 표준 SKU를 사용하고 있는지 확인합니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
- "service": "SAP",
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
"severity": "보통",
- "text": "Azure는 현재 동일한 Linux Pacemaker 클러스터에서 ASCS와 DB HA의 결합을 지원하지 않습니다. 개별 클러스터로 분리합니다. 그러나 최대 5개의 여러 중앙 서비스 클러스터를 한 쌍의 VM으로 결합할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "신뢰도"
+ "text": "Load Balancer 프런트 엔드 IP 주소가 영역 중복인지 확인합니다(영역 프런트 엔드가 필요하지 않은 경우).",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
"severity": "보통",
- "text": "가용성 집합 또는 가용성 영역의 고가용성 쌍에 두 VM을 모두 배포합니다. 이러한 VM은 크기가 동일하고 스토리지 구성이 동일해야 합니다.",
- "waf": "신뢰도"
+ "text": "Application Gateways v2는 IP 접두사가 /24보다 크거나 같은 서브넷에 배포해야 합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "description": "일반적으로 역방향 프록시 및 특히 WAF의 관리는 네트워킹보다 애플리케이션에 더 가깝기 때문에 앱과 동일한 구독에 속합니다. 연결 구독에서 Application Gateway 및 WAF를 중앙 집중화하는 것은 단일 팀에서 관리하는 경우 괜찮을 수 있습니다.",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
"severity": "보통",
- "text": "Azure는 RHEL(Red Hat Enterprise Linux)에서 실행되는 동일한 고가용성 클러스터에 SAP HANA, ASCS/SCS 및 ERS 인스턴스의 설치 및 구성을 지원합니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "신뢰도"
+ "text": "랜딩 존 가상 네트워크 내에서 그리고 보안 중인 앱을 사용하여 인바운드 HTTP(S) 연결을 프록시하는 데 사용되는 Azure Application Gateway v2 또는 파트너 NVA를 배포합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
- "severity": "높다",
- "text": "프리미엄 관리형 SSD에서 모든 프로덕션 시스템을 실행하고 Azure NetApp Files 또는 Ultra Disk Storage를 사용합니다. 적어도 OS 디스크는 프리미엄 계층에 있어야 더 나은 성능과 최상의 SLA를 달성할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "애플리케이션 랜딩 존의 모든 공용 IP 주소에 대해 DDoS 네트워크 또는 IP 보호 계획을 사용합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
- "service": "SAP",
- "severity": "높다",
- "text": "Azure의 SAP HANA는 SAP에서 인증한 스토리지 유형에서만 실행해야 합니다. 특정 볼륨은 해당되는 경우 특정 디스크 구성에서 실행되어야 합니다. 이러한 구성에는 Write Accelerator 사용 및 Premium Storage 사용이 포함됩니다. 또한 스토리지에서 실행되는 파일 시스템이 시스템에서 실행되는 DBMS와 호환되는지 확인해야 합니다.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "최소 2개의 인스턴스로 자동 크기 조정을 구성합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
- "service": "SAP",
- "severity": "높다",
- "text": "SAP 워크로드에 사용하는 스토리지 유형에 따라 고가용성을 구성하는 것이 좋습니다. Azure에서 사용할 수 있는 일부 스토리지 서비스는 Azure Site Recovery에서 지원되지 않으므로 고가용성 구성이 다를 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "가용성 영역에 Application Gateway 배포",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
- "severity": "높다",
- "text": "일부 지역에서는 다양한 네이티브 Azure Storage 서비스(예: Azure Files, Azure NetApp Files, Azure Shared Disk)를 사용하지 못할 수 있습니다. 따라서 장애 조치(failover) 후 DR 지역에서 유사한 SAP를 설정하려면 해당 스토리지 서비스가 DR 사이트에서 제공되는지 확인합니다.",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
+ "severity": "보통",
+ "text": "Front Door 및 Application Gateway를 사용하여 HTTP/S 앱을 보호하는 경우 Front Door에서 WAF 정책을 사용합니다. Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP System Start-Stop을 자동화하여 비용을 관리합니다.",
- "waf": "비용"
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "severity": "높다",
+ "text": "Traffic Manager를 사용하여 HTTP/S 이외의 프로토콜에 걸쳐 있는 글로벌 앱을 제공합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
"severity": "낮다",
- "text": "SAP HANA와 함께 Azure Premium Storage를 사용하는 경우 Azure 표준 SSD 스토리지를 사용하여 비용에 민감한 스토리지 솔루션을 선택할 수 있습니다. 그러나 표준 SSD 또는 표준 HDD Azure Storage를 선택하면 개별 VM의 SLA에 영향을 줍니다. 또한 비프로덕션 환경과 같이 I/O 처리량이 낮고 대기 시간이 짧은 시스템의 경우 더 낮은 시리즈 VM을 사용할 수 있습니다.",
- "waf": "비용"
+ "text": "사용자가 내부 애플리케이션에만 액세스해야 하는 경우 Microsoft Entra ID 애플리케이션 프록시를 AVD(Azure Virtual Desktop)의 대안으로 고려했나요?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "낮다",
- "text": "저렴한 대체 구성(다목적)으로 비프로덕션 HANA 데이터베이스 서버 VM에 대해 저성능 SKU를 선택할 수 있습니다. 그러나 E 시리즈와 같은 일부 VM 유형은 HANA 인증(SAP HANA 하드웨어 디렉터리)되지 않았거나 1ms 미만의 스토리지 대기 시간을 달성할 수 없습니다.",
- "waf": "비용"
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "보통",
+ "text": "네트워크에서 들어오는 연결에 대해 열려 있는 방화벽 포트 수를 줄이려면 Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 내부 애플리케이션에 대한 안전하고 인증된 액세스 권한을 부여하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
- "service": "SAP",
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
"severity": "높다",
- "text": "관리 그룹, 구독, 리소스 그룹 및 리소스에 대한 RBAC 모델 적용Enforce a RBAC model for management groups, subscriptions, resource groups and resources",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "안전"
+ "text": "SNAT 확장성 향상을 위해 Load Balancer 아웃바운드 규칙 대신 Azure NAT Gateway 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "보통",
- "text": "클라우드 커넥터를 통해 SAP 클라우드 애플리케이션에서 SAP 온-프레미스(IaaS 포함)로 ID를 전달하기 위한 보안 주체 전파 적용",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
+ "severity": "높다",
+ "text": "Azure Application Gateway WAF 봇 보호 규칙 집합을 사용하도록 설정합니다. 봇 규칙은 좋은 봇과 나쁜 봇을 감지합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "보통",
- "text": "SAML을 사용하여 Azure AD로 SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics 및 SAP C4C와 같은 SAP SaaS 애플리케이션에 대한 SSO를 구현합니다.",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
+ "severity": "높다",
+ "text": "Azure Application Gateway WAF 정책에서 요청 본문 검사 기능이 사용하도록 설정되어 있는지 확인합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
- "severity": "보통",
- "text": "SAML을 사용하여 SAP Fiori 및 SAP Web GUI와 같은 SAP NetWeaver 기반 웹 애플리케이션에 대한 SSO를 구현합니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
+ "service": "App Gateway",
+ "severity": "높다",
+ "text": "워크로드에 대한 검색 모드에서 Azure Application Gateway WAF를 튜닝합니다. 거짓 긍정 탐지를 줄입니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
- "service": "SAP",
- "severity": "보통",
- "text": "SAML을 사용하여 SAP Fiori 및 SAP Web GUI와 같은 SAP NetWeaver 기반 웹 애플리케이션에 대한 SSO를 구현합니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
+ "severity": "높다",
+ "text": "'방지' 모드에서 Application Gateway에 대한 WAF 정책을 배포합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP NetWeaver SSO 또는 파트너 솔루션을 사용하여 SAP GUI에 대한 SSO를 구현할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "text": "Azure Application Gateway WAF에 속도 제한을 추가합니다. 속도 제한은 클라이언트가 실수로 또는 의도적으로 단기간에 많은 양의 트래픽을 보내는 것을 차단합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP GUI 및 웹 브라우저 액세스를 위한 SSO의 경우 구성 및 유지 관리가 용이하여 SNC/Kerberos/SPNEGO(간단하고 보호된 GSSAPI 협상 메커니즘)를 구현합니다. X.509 클라이언트 인증서를 사용하는 SSO의 경우 SAP SSO 솔루션의 구성 요소인 SAP 보안 로그인 서버를 고려합니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "text": "Azure Application Gateway WAF 속도 제한에 대해 높은 임계값을 사용합니다. 높은 속도 제한 임계값은 합법적인 트래픽 차단을 방지하는 동시에 인프라를 압도할 수 있는 매우 많은 수의 요청에 대한 보호를 제공합니다. ",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP GUI 및 웹 브라우저 액세스를 위한 SSO의 경우 구성 및 유지 관리가 용이하여 SNC/Kerberos/SPNEGO(간단하고 보호된 GSSAPI 협상 메커니즘)를 구현합니다. X.509 클라이언트 인증서를 사용하는 SSO의 경우 SAP SSO 솔루션의 구성 요소인 SAP 보안 로그인 서버를 고려합니다.",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
+ "severity": "낮다",
+ "text": "모든 지역에서 트래픽이 발생할 것으로 예상되지 않는 경우 지역 필터를 사용하여 예상하지 못한 국가의 트래픽을 차단합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP NetWeaver용 OAuth를 사용하여 SSO를 구현하여 타사 또는 사용자 지정 애플리케이션이 SAP NetWeaver OData 서비스에 액세스할 수 있도록 합니다.",
+ "text": "Azure Application Gateway WAF를 사용하여 트래픽을 지리적으로 필터링할 때 알 수 없는(ZZ) 위치를 지정합니다. IP 주소를 지리적으로 일치시킬 수 없는 경우 합법적인 요청을 실수로 차단하지 마세요.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP HANA에 대한 SSO 구현",
+ "text": "최신 Azure Application Gateway WAF 규칙 집합 버전을 사용합니다. 규칙 집합 업데이트는 현재 위협 환경을 고려하기 위해 정기적으로 업데이트됩니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
"severity": "보통",
- "text": "Azure AD를 RISE에서 호스트되는 SAP 시스템의 ID 공급자로 간주합니다. 자세한 내용은 Azure AD와 서비스 통합을 참조하세요.",
- "waf": "안전"
+ "text": "진단 설정을 추가하여 Azure Application Gateway WAF 로그를 저장합니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
- "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP에 액세스하는 애플리케이션의 경우 보안 주체 전파를 사용하여 SSO를 설정할 수 있습니다.",
- "waf": "안전"
+ "text": "Azure Application Gateway WAF 로그를 Microsoft Sentinel로 보냅니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP IAS(Identity Authentication Service)가 필요한 SAP BTP 서비스 또는 SaaS 솔루션을 사용하는 경우 SAP Cloud Identity Authentication Services와 Azure AD 간에 SSO를 구현하여 해당 SAP 서비스에 액세스하는 것이 좋습니다. 이 통합을 통해 SAP IAS는 프록시 ID 공급자 역할을 하고 중앙 사용자 저장소 및 ID 공급자인 Azure AD에 인증 요청을 전달할 수 있습니다.",
- "waf": "안전"
+ "text": "Azure Application Gateway WAF 구성을 코드로 정의합니다. 코드를 사용하면 새 규칙 집합 버전을 보다 쉽게 채택하고 추가 보호를 얻을 수 있습니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP BTP에 대한 SSO 구현",
- "waf": "안전"
+ "text": "레거시 WAF 구성 대신 WAF 정책을 사용합니다.",
+ "waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
"severity": "보통",
- "text": "SAP SuccessFactors를 사용하는 경우 Azure AD 자동화된 사용자 프로비저닝을 사용하는 것이 좋습니다. 이 통합을 통해 SAP SuccessFactors에 새 직원을 추가할 때 Azure AD에서 해당 사용자 계정을 자동으로 만들 수 있습니다. 필요에 따라 Microsoft 365 또는 Azure AD 지원하는 기타 SaaS 애플리케이션에서 사용자 계정을 만들 수 있습니다. SAP SuccessFactors에 이메일 주소의 쓰기 저장을 사용합니다.",
+ "text": "Application Gateway 서브넷의 연결(예: NSG)만 허용하도록 백 엔드에서 인바운드 트래픽을 필터링합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP 구독에 기존 관리 그룹 정책 적용",
- "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
"severity": "높다",
- "text": "긴밀하게 결합된 애플리케이션을 동일한 SAP 구독에 통합하여 추가적인 라우팅 및 관리 복잡성 방지",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "waf": "작업"
+ "text": "백엔드 서버에 대한 트래픽을 암호화해야 합니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
"severity": "높다",
- "text": "구독을 배율 단위로 활용하고 리소스를 확장하려면 환경별로 구독을 배포하는 것이 좋습니다. 샌드박스, 비프로덕션, 프로덕션 ",
- "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "waf": "작업"
+ "text": "웹 응용 프로그램 방화벽을 사용해야 합니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
- "service": "SAP",
- "severity": "높다",
- "text": "구독 프로비저닝의 일부로 할당량 증가 확인(예: 구독 내에서 사용 가능한 총 VM 코어)",
- "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "waf": "작업"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "HTTP를 HTTPS로 리디렉션",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
- "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
- "service": "SAP",
- "severity": "낮다",
- "text": "할당량 API는 Azure 서비스에 대한 할당량을 보고 관리하는 데 사용할 수 있는 REST API입니다. 필요한 경우 사용을 고려하십시오.",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "게이트웨이 관리 쿠키를 사용하여 처리를 위해 사용자 세션에서 동일한 서버로 트래픽을 전달합니다.",
"waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
- "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
"severity": "높다",
- "text": "가용성 영역에 배포하는 경우 할당량이 승인되면 VM의 영역 배포를 사용할 수 있는지 확인합니다. 필요한 구독, VM 시리즈, CPU 수 및 가용성 영역을 사용하여 지원 요청을 제출합니다.",
- "waf": "작업"
+ "text": "계획된 서비스 업데이트 중에 연결 드레이닝을 사용하도록 설정하여 백 엔드 풀의 기존 멤버에 대한 연결 손실을 방지합니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
- "severity": "높다",
- "text": "예를 들어 선택한 배포 지역 내에서 필요한 서비스 및 기능을 사용할 수 있는지 확인합니다. ANF, 지역 등.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
+ "severity": "낮다",
+ "text": "사용자 지정 오류 페이지를 만들어 개인화된 사용자 경험을 표시합니다.",
"waf": "작업"
},
{
- "checklist": "SAP Checklist",
- "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
"severity": "보통",
- "text": "비용 분류 및 리소스 그룹화를 위해 Azure 리소스 태그 활용(BillTo, 부서(또는 사업부), 환경(프로덕션, 스테이지, 개발), 계층(웹 계층, 애플리케이션 계층), 애플리케이션 소유자, 프로젝트 이름)",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "작업"
+ "text": "클라이언트와 서버 간의 라우팅 및 정보 교환을 보다 쉽게 하기 위해 HTTP 요청 및 응답 헤더를 편집합니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
- "severity": "높다",
- "text": "Azure Backup 서비스를 사용하여 HANA 데이터베이스를 보호할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "신뢰도"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "Front Door를 구성하여 글로벌 웹 트래픽 라우팅, 최상위 최종 사용자 성능 및 빠른 글로벌 장애 조치(failover)를 통해 안정성을 최적화합니다.",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
"severity": "보통",
- "text": "HANA, Oracle 또는 DB2 데이터베이스용 Azure NetApp Files를 배포하는 경우 Azure 애플리케이션 일치 스냅샷 도구(AzAcSnap)를 사용하여 애플리케이션 일치 스냅샷을 만듭니다. AzAcSnap은 Oracle 데이터베이스도 지원합니다. 개별 VM이 아닌 중앙 VM에서 AzAcSnap을 사용하는 것이 좋습니다.",
- "waf": "신뢰도"
+ "text": "전송 계층 부하 분산 사용",
+ "waf": "공연"
},
{
- "checklist": "SAP Checklist",
- "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
- "severity": "높다",
- "text": "운영 체제와 SAP 시스템 간의 표준 시간대 일치를 확인합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
+ "severity": "보통",
+ "text": "단일 게이트웨이에서 여러 웹 응용 프로그램에 대한 호스트 또는 도메인 이름을 기반으로 라우팅을 구성합니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
"severity": "보통",
- "text": "동일한 클러스터에서 서로 다른 애플리케이션 서비스를 그룹화하지 마세요. 예를 들어 DRBD와 중앙 서비스 클러스터를 동일한 클러스터에 결합하지 마세요. 그러나 동일한 Pacemaker 클러스터를 사용하여 약 5개의 서로 다른 중앙 서비스(다중 SID 클러스터)를 관리할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "신뢰도"
+ "text": "SSL 인증서 관리를 중앙 집중화하여 백엔드 서버 팜의 암호화 및 암호 해독 오버헤드를 줄입니다.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
- "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
- "service": "SAP",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
"severity": "낮다",
- "text": "Azure 실행 비용을 절감하고 최적화하기 위해 다시 알림 모델에서 개발/테스트 시스템을 실행하는 것이 좋습니다.",
- "waf": "비용"
+ "text": "WebSocket 및 HTTP/2 프로토콜에 대한 기본 지원을 위해 Application Gateway 사용",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
- "link": "https://learn.microsoft.com/azure/lighthouse/overview",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP 자산을 관리하여 고객과 파트너 관계를 맺는 경우 Azure Lighthouse를 사용하는 것이 좋습니다. Azure Lighthouse를 사용하면 관리 서비스 공급자가 Azure 네이티브 ID 서비스를 사용하여 고객 환경에 인증할 수 있습니다. 고객은 언제든지 액세스 권한을 취소하고 서비스 제공업체의 조치를 감사할 수 있으므로 고객의 손에 제어 권한을 부여합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
+ "severity": "낮다",
+ "text": "모범 사례는 기준 고가용성 영역 중복 웹 애플리케이션 아키텍처를 참조하세요.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
- "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure Update Manager를 사용하여 단일 VM 또는 여러 VM에 대해 사용 가능한 업데이트의 상태를 확인하고 정기적인 패치를 예약하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
- "waf": "작업"
+ "text": "프리미엄 및 표준 계층을 사용합니다. 이러한 계층은 스테이징 슬롯 및 자동 백업을 지원합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
- "service": "SAP",
- "severity": "낮다",
- "text": "SAP Landscape Management(LaMa)를 사용하여 SAP Basis 운영을 최적화하고 관리합니다. Azure용 SAP LaMa 커넥터를 사용하여 SAP 시스템을 재배치, 복사, 복제 및 새로 고칩니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
- "waf": "작업"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "지역적으로 적용 가능한 경우 가용성 영역 활용(프리미엄 v2 또는 v3 계층 필요)",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
- "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP용 Azure Monitor 솔루션을 사용하여 Azure에서 SAP 워크로드(SAP HANA, 고가용성 SUSE 클러스터 및 SQL 시스템)를 모니터링합니다. SAP Solution Manager를 사용하여 SAP용 Azure Monitor 솔루션을 보완하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
- "service": "SAP",
- "severity": "높다",
- "text": "SAP용 VM 확장 검사를 실행합니다. SAP용 VM 확장은 VM(가상 머신)의 할당된 관리 ID를 사용하여 VM 모니터링 및 구성 데이터에 액세스합니다. 이 검사는 SAP 애플리케이션의 모든 성능 메트릭이 기본 SAP용 Azure 확장에서 제공되는지 확인합니다.",
- "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "SAP",
- "severity": "보통",
- "text": "액세스 제어 및 규정 준수 보고에 Azure Policy를 사용합니다. Azure Policy는 일관된 정책 준수와 빠른 위반 감지를 보장하기 위해 조직 전체 설정을 적용하는 기능을 제공합니다. ",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure Network Watcher의 연결 모니터를 사용하여 SAP 데이터베이스 및 애플리케이션 서버에 대한 대기 시간 메트릭을 모니터링합니다. 또는 Azure Monitor를 사용하여 네트워크 대기 시간 측정값을 수집하고 표시합니다.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
- "waf": "작업"
+ "text": "상태 확인 구현",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "73686af4-6791-4f89-95ad-a43324e13811",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
- "service": "SAP",
- "severity": "보통",
- "text": "프로비저닝된 Azure 인프라에서 SAP HANA에 대한 품질 검사를 수행하여 프로비저닝된 VM이 Azure의 SAP HANA 모범 사례를 준수하는지 확인합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "Azure App Service에 대한 백업 및 복원 모범 사례를 참조하세요.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
"severity": "높다",
- "text": "각 Azure 구독에 대해 영역 배포 전에 Azure 가용성 영역에서 대기 시간 테스트를 실행하여 Azure에서 SAP를 배포하기 위한 대기 시간이 짧은 영역을 선택합니다.",
- "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "waf": "공연"
+ "text": "Azure App Service 안정성 모범 사례 구현",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
- "service": "SAP",
- "severity": "보통",
- "text": "복원력 보고서를 실행하여 프로비저닝된 전체 Azure 인프라(컴퓨팅, 데이터베이스, 네트워킹, 스토리지, Site Recovery)의 구성이 Azure용 클라우드 적응 프레임워크에서 정의한 구성을 준수하는지 확인합니다.",
- "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
+ "severity": "낮다",
+ "text": "App Service 앱을 다른 지역으로 이동하는 방법을 숙지합니다. 재해가 발생하는 동안",
"waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
- "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP용 Microsoft Sentinel 솔루션을 사용하여 위협 방지를 구현합니다. 이 솔루션을 사용하여 SAP 시스템을 모니터링하고 비즈니스 로직 및 애플리케이션 계층 전체에서 정교한 위협을 탐지할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
- "waf": "안전"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "Azure App Service의 안정성 지원 숙지",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure 태그 지정을 활용하여 리소스를 논리적으로 그룹화 및 추적하고, 배포를 자동화하고, 가장 중요한 것은 발생한 비용에 대한 가시성을 제공할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
- "service": "SAP",
- "severity": "낮다",
- "text": "대기 시간에 민감한 애플리케이션에 대해 VM 간 대기 시간 모니터링을 사용합니다.",
- "waf": "공연"
+ "text": "App Service 계획에서 실행되는 Function Apps에 대해 \"Always On\"이 사용하도록 설정되어 있는지 확인합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure Site Recovery 모니터링을 사용하여 SAP 애플리케이션 서버에 대한 재해 복구 서비스의 상태를 유지 관리합니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "text": "상태 검사를 사용하여 App Service 인스턴스 모니터링Monitor App Service instances using Health checks",
"waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
"severity": "보통",
- "text": "모든 데이터베이스 파일 시스템 및 실행 프로그램을 바이러스 백신 검사에서 제외합니다. 이를 포함하면 성능 문제가 발생할 수 있습니다. 제외 목록에 대한 규범적 세부 정보는 데이터베이스 공급업체에 문의하십시오. 예를 들어 Oracle은 바이러스 백신 검사에서 /oracle//sapdata를 제외할 것을 권장합니다.",
- "waf": "공연"
+ "text": "Application Insights 가용성 테스트를 사용하여 웹앱 또는 웹 사이트의 가용성 및 응답성 모니터링",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "c027f893-f404-41a9-b33d-39d625a14964",
- "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
"severity": "낮다",
- "text": "마이그레이션 후 비 HANA 데이터베이스에 대한 전체 데이터베이스 통계를 수집하는 것이 좋습니다. 예를 들어 SAP Note 1020260 - Oracle 통계 제공을 구현합니다.",
- "waf": "공연"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure에서 SAP를 사용하는 모든 Oracle 배포에 Oracle ASM(Automatic Storage Management)을 사용하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
- "waf": "공연"
+ "text": "Application Insights 표준 테스트를 사용하여 웹앱 또는 웹 사이트의 가용성 및 응답성 모니터링",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
- "service": "SAP",
- "severity": "보통",
- "text": "Oracle을 실행하는 Azure의 SAP의 경우 SQL 스크립트 컬렉션은 성능 문제를 진단하는 데 도움이 될 수 있습니다. AWR(Automatic Workload Repository) 보고서에는 Oracle 시스템의 문제점을 진단하는 데 유용한 정보가 포함되어 있습니다. 여러 세션 동안 AWR 보고서를 실행하고 피크 시간을 선택하여 광범위한 분석 범위를 보장하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
- "waf": "공연"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Key Vault를 사용하여 애플리케이션에 필요한 모든 비밀을 저장합니다. Key Vault는 비밀을 저장하기 위한 안전하고 감사된 환경을 제공하며 Key Vault SDK 또는 App Service Key Vault 참조를 통해 App Service와 잘 통합됩니다.",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "Key Vault를 사용하여 비밀 저장",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "관리 ID를 사용하여 Key Vault SDK를 사용하거나 App Service Key Vault 참조를 통해 Key Vault에 연결합니다.",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"severity": "높다",
- "text": "Azure Site Recovery 모니터링을 사용하여 SAP 애플리케이션 서버에 대한 재해 복구 서비스의 상태를 유지 관리합니다.",
- "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "waf": "작업"
+ "text": "관리 ID를 사용하여 Key Vault에 연결",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "HTTP/S 앱을 안전하게 배달하려면 Application Gateway v2를 사용하고 WAF 보호 및 정책이 사용하도록 설정되어 있는지 확인합니다.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service TLS 인증서를 Key Vault에 저장합니다.",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "Key Vault를 사용하여 TLS 인증서를 저장합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "중요한 정보를 처리하는 시스템은 격리해야 합니다. 이렇게 하려면 별도의 App Service 계획 또는 App Service Environment를 사용하고 다른 구독 또는 관리 그룹을 사용하는 것이 좋습니다.",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure로 마이그레이션하는 동안 가상 머신의 DNS 또는 가상 이름이 변경되지 않은 경우 백그라운드 DNS 및 가상 이름은 SAP 환경의 많은 시스템 인터페이스를 연결하며, 고객은 시간이 지남에 따라 개발자가 정의하는 인터페이스를 인식하는 경우에만 인식할 수 있습니다. 마이그레이션 후 가상 또는 DNS 이름이 변경될 때 다양한 시스템 간에 연결 문제가 발생하며, 이러한 유형의 문제를 방지하기 위해 DNS 별칭을 유지하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "작업"
+ "text": "민감한 정보를 처리하는 시스템 격리",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service의 로컬 디스크는 암호화되지 않으며 중요한 데이터를 저장해서는 안 됩니다. (예: D:\\\\Local and %TMP%).",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"severity": "보통",
- "text": "서로 다른 DNS 영역을 사용하여 각 환경(샌드박스, 개발, 사전 프로덕션 및 프로덕션)을 서로 구분합니다. 예외는 자체 VNet을 사용하는 SAP 배포의 경우입니다. 여기서는 프라이빗 DNS 영역이 필요하지 않을 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "작업"
+ "text": "로컬 디스크에 중요한 데이터를 저장하지 마십시오.",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "a3592829-e6e2-4061-9368-6af46791f893",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "인증된 웹 애플리케이션의 경우 Azure AD 또는 Azure AD B2C와 같이 잘 설정된 ID 공급자를 사용합니다. 선택한 애플리케이션 프레임워크를 활용하여 이 공급자와 통합하거나 App Service 인증/권한 부여 기능을 사용합니다.",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
"severity": "보통",
- "text": "로컬 및 글로벌 VNet 피어링은 연결을 제공하며, 여러 Azure 지역에서 SAP 배포를 위한 랜딩 존 간의 연결을 보장하기 위해 선호되는 접근 방식입니다",
- "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
- "waf": "신뢰도"
+ "text": "인증에 설정된 ID 공급자 사용",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "잘 관리되고 안전한 DevOps 배포 파이프라인과 같이 제어되고 신뢰할 수 있는 환경에서 App Service에 코드를 배포합니다. 이렇게 하면 버전이 제어되지 않고 악성 호스트에서 배포되는 것으로 확인되지 않은 코드를 방지할 수 있습니다.",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
"severity": "높다",
- "text": "SAP 애플리케이션과 SAP 데이터베이스 서버 간에 NVA를 배포하는 것은 지원되지 않습니다",
- "training": "https://me.sap.com/notes/2731110",
- "waf": "공연"
+ "text": "신뢰할 수 있는 환경에서 배포",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 신규, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
- "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
- "service": "SAP",
- "severity": "보통",
- "text": "파트너 NVA를 사용하는 경우에만 지역 간에 NVA(네트워크 가상 어플라이언스)를 배포하는 것이 좋습니다. 네이티브 NVA가 있는 경우 지역 또는 VNet 간의 NVA가 필요하지 않습니다. 파트너 네트워킹 기술 및 NVA를 배포하는 경우 공급업체의 지침에 따라 Azure 네트워킹과 충돌하는 구성을 확인합니다.",
- "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
- "service": "SAP",
- "severity": "보통",
- "text": "Virtual WAN은 가상 WAN 기반 토폴로지에 대한 스포크 VNet 간의 연결을 관리하며(UDR[사용자 정의 라우팅] 또는 NVA를 설정할 필요 없음) 동일한 가상 허브의 VNet 간 트래픽에 대한 최대 네트워크 처리량은 초당 50기가비트입니다. 필요한 경우 SAP 랜딩 존은 VNet 피어링을 사용하여 다른 랜딩 존에 연결하고 이 대역폭 제한을 극복할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
- "waf": "작업"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "82734c88-6ba2-4802-8459-11475e39e530",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "FTP/FTPS 및 WebDeploy/SCM 모두에 대한 기본 인증을 사용 안함으로 설정합니다. 이렇게 하면 이러한 서비스에 대한 액세스가 비활성화되고 배포에 Azure AD 보안 엔드포인트가 사용됩니다. SCM 사이트는 Azure AD 자격 증명을 사용하여 열 수도 있습니다.",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
"severity": "높다",
- "text": "SAP 워크로드를 실행하는 VM에 대한 공용 IP 할당은 권장되지 않습니다.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "text": "기본 인증 사용 안 함",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "가능한 경우 관리 ID를 사용하여 Azure AD 보안 리소스에 연결합니다. 이렇게 할 수 없는 경우 Key Vault에 비밀을 저장하고 대신 관리 ID를 사용하여 Key Vault에 연결합니다.",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
"severity": "높다",
- "text": "ASR을 구성할 때 DR 쪽에서 IP 주소를 예약하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "작업"
+ "text": "관리 ID를 사용하여 리소스에 연결",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Container Registry에 저장된 이미지를 사용하는 경우 관리 ID를 사용하여 끌어옵니다.",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
"severity": "높다",
- "text": "프로덕션 및 DR 사이트에 겹치는 IP 주소 범위를 사용하지 마십시오.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "작업"
+ "text": "관리 ID를 사용하여 컨테이너 끌어오기",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service의 진단 설정을 구성하면 모든 원격 분석을 로깅 및 모니터링의 중앙 대상으로 Log Analytics에 보낼 수 있습니다. 이를 통해 HTTP 로그, 애플리케이션 로그, 플랫폼 로그 등과 같은 App Service의 런타임 활동을 모니터링할 수 있습니다.",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure는 VNet에서 여러 위임된 서브넷을 만드는 데 도움이 되지만 Azure NetApp Files용 VNet에는 위임된 서브넷이 하나만 존재할 수 있습니다. Azure NetApp Files에 대해 둘 이상의 위임된 서브넷을 사용하는 경우 새 볼륨을 만들려는 시도가 실패합니다.",
- "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
- "waf": "작업"
+ "text": "Log Analytics에 App Service 런타임 로그 보내기Send App Service runtime logs to Log Analytics",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "활동 로그를 Log Analytics에 로깅 및 모니터링의 중앙 대상으로 보내도록 진단 설정을 지정합니다. 이렇게 하면 App Service 리소스 자체에서 컨트롤 플레인 작업을 모니터링할 수 있습니다.",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
"severity": "보통",
- "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다",
- "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "text": "Log Analytics에 App Service 활동 로그 보내기Send App Service activity logs to Log Analytics",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
- "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "지역 VNet 통합, 네트워크 보안 그룹 및 UDR의 조합을 사용하여 아웃바운드 네트워크 액세스를 제어합니다. 트래픽은 Azure Firewall과 같은 NVA로 라우팅되어야 합니다. 방화벽의 로그를 모니터링해야 합니다.",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
"severity": "보통",
- "text": "Application Gateway, SAP Web Dispatcher 및 기타 타사 서비스 간의 비교에서 볼 수 있듯이 Application Gateway가 SAP 웹앱에 대한 역방향 프록시 역할을 하는 경우 Application Gateway 및 Web Application Firewall에 제한 사항이 있습니다.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "text": "아웃바운드 네트워크 액세스를 제어해야 함",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역에서 전역 보호를 제공합니다.",
- "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "VNet 통합을 사용하고 VNet NAT Gateway 또는 NVA와 같은 Azure Firewall을 사용하여 안정적인 아웃바운드 IP를 제공할 수 있습니다. 이렇게 하면 필요한 경우 수신 당사자가 IP를 기반으로 허용 목록을 만들 수 있습니다. Azure 서비스에 대한 통신의 경우 IP 주소에 의존할 필요가 없는 경우가 많으며 서비스 엔드포인트와 같은 메커니즘을 대신 사용해야 합니다. (또한 수신 끝에서 프라이빗 엔드포인트를 사용하면 SNAT가 발생하지 않고 안정적인 아웃바운드 IP 범위를 제공합니다.)",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
+ "severity": "낮다",
+ "text": "인터넷 주소에 대한 아웃바운드 통신을 위한 안정적인 IP 보장",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure Front Door 및 Application Gateway를 사용하여 HTTP/S 애플리케이션을 보호하는 경우 Azure Front Door의 Web Application Firewall 정책을 활용합니다. Azure Front Door에서만 트래픽을 수신하도록 Application Gateway를 잠급니다.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service 액세스 제한, 서비스 엔드포인트 또는 프라이빗 엔드포인트의 조합을 사용하여 인바운드 네트워크 액세스를 제어합니다. 웹앱 자체 및 SCM 사이트에 대해 서로 다른 액세스 제한이 필요하고 구성될 수 있습니다.",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "인바운드 네트워크 액세스를 제어해야 합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ada4332-4e13-4811-9231-81aa41742694",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "웹 애플리케이션 방화벽을 사용하여 트래픽이 인터넷에 노출될 때 트래픽을 검사합니다. 또 다른 옵션은 부하 분산 장치 또는 Application Gateway 또는 타사 솔루션과 같은 기본 제공 방화벽 기능이 있는 리소스와 함께 사용하는 것입니다.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Application Gateway 또는 Azure Front Door와 같은 Web Application Firewall을 사용하여 악의적인 인바운드 트래픽으로부터 보호합니다. WAF의 로그를 모니터링해야 합니다.",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "App Service 앞에서 WAF 사용Use a WAF in front of App Service",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure 지역 및 온-프레미스 위치 간에 글로벌 전송 연결이 필요한 신규, 대규모 또는 글로벌 네트워크에서 Azure 배포에 Virtual WAN을 사용합니다. 이 방법을 사용하면 Azure 네트워킹에 대한 전이적 라우팅을 수동으로 설정할 필요가 없으며 Azure의 SAP 배포에 대한 표준을 따를 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
- "waf": "공연"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "WAF에 대한 액세스만 잠궈 WAF를 우회할 수 없는지 확인합니다. 액세스 제한, 서비스 엔드포인트 및 프라이빗 엔드포인트의 조합을 사용합니다.",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "WAF가 우회되지 않도록 방지",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service 구성에서 최소 TLS 정책을 1.2로 설정합니다.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
"severity": "보통",
- "text": "데이터 유출을 방지하려면 Azure Private Link를 사용하여 Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen2, Azure Data Factory 등과 같은 PaaS(Platform as a Service) 리소스에 안전하게 액세스합니다. Azure 프라이빗 엔드포인트는 VNet과 Azure Storage, Azure Backup 등과 같은 서비스 간의 트래픽을 보호하는 데도 도움이 될 수 있습니다. VNet과 프라이빗 엔드포인트 사용 서비스 간의 트래픽은 Microsoft 글로벌 네트워크를 통해 이동하므로 공용 인터넷에 노출되지 않습니다.",
- "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
+ "text": "최소 TLS 정책을 1.2로 설정합니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "HTTPS만 사용하도록 App Service를 구성합니다. 이로 인해 App Service가 HTTP에서 HTTPS로 리디렉션됩니다. 코드 또는 WAF에서 HSTS(HTTP Strict Transport Security)를 사용하여 HTTPS를 통해서만 사이트에 액세스해야 함을 브라우저에 알리는 것이 좋습니다.",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
"severity": "높다",
- "text": "SAP 애플리케이션 및 DBMS 계층에 사용되는 VM에서 Azure 가속 네트워킹이 사용하도록 설정되어 있는지 확인합니다.",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "공연"
+ "text": "HTTPS만 사용",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
- "service": "SAP",
- "severity": "보통",
- "text": "Azure Load Balancer에 대한 내부 배포가 DSR(Direct Server Return)을 사용하도록 설정되어 있는지 확인합니다. 이 설정(유동 IP 사용)은 DBMS 계층의 고가용성 구성에 내부 부하 분산 장치 구성을 사용할 때 대기 시간을 줄입니다.",
- "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "CORS 구성에서 와일드카드를 사용하면 모든 원본이 서비스에 액세스할 수 있으므로 CORS의 목적에 어긋나므로 사용하지 마세요. 특히 서비스에 액세스할 수 있을 것으로 예상되는 원본만 허용합니다.",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "와일드카드는 CORS에 사용할 수 없습니다.",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "6791f893-5ada-4433-84e1-3811523181aa",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "SAP",
- "severity": "보통",
- "text": "ASG(애플리케이션 보안 그룹) 및 NSG 규칙을 사용하여 SAP 애플리케이션과 DBMS 계층 간에 네트워크 보안 액세스 제어 목록을 정의할 수 있습니다. ASG는 보안을 관리하는 데 도움이 되도록 가상 머신을 그룹화합니다.",
- "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "원격 디버깅은 서비스에서 추가 포트를 열어 공격 노출 영역을 증가시키므로 프로덕션에서 켜면 안 됩니다. 서비스는 48시간 후에 자동으로 원격 디버깅을 설정합니다.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
+ "severity": "높다",
+ "text": "원격 디버깅 끄기",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "높다",
- "text": "피어링되지 않은 다른 Azure VNet에 SAP 애플리케이션 계층 및 SAP DBMS를 배치하는 것은 지원되지 않습니다.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "공연"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "App Service용 Defender를 사용하도록 설정합니다. 이는 다른 위협 중에서도 알려진 악성 IP 주소에 대한 통신을 탐지합니다. 작업의 일부로 App Service용 Defender의 권장 사항을 검토합니다.",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
+ "severity": "보통",
+ "text": "클라우드용 Defender 사용 - App Service용 Defender",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure는 네트워크에서 DDoS 기본 보호를 제공하며, 정상적인 트래픽 패턴을 학습하고 비정상적인 동작을 감지할 수 있는 지능형 DDoS 표준 기능으로 개선할 수 있습니다. DDoS 표준은 Virtual Network에 적용되므로 Application Gateway 또는 NVA와 같은 앱 앞의 네트워크 리소스에 대해 구성해야 합니다.",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
"severity": "보통",
- "text": "SAP 애플리케이션에서 네트워크 대기 시간을 최적화하려면 Azure 근접 배치 그룹을 사용하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
- "waf": "공연"
+ "text": "WAF VNet에서 DDOS 보호 표준 사용Enable DDOS Protection Standard on the WAF VNet",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "높다",
- "text": "온-프레미스와 Azure 간에 분할된 SAP 애플리케이션 서버 계층 및 DBMS 계층을 실행하는 것은 전혀 지원되지 않습니다. 두 계층 모두 온-프레미스 또는 Azure에 완전히 상주해야 합니다.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "공연"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure Container Registry에 저장된 이미지를 사용하는 경우 프라이빗 엔드포인트 및 앱 설정 'WEBSITE_PULL_IMAGE_OVER_VNET'를 사용하여 Azure Container Registry에서 가상 네트워크를 통해 끌어옵니다.",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
+ "severity": "보통",
+ "text": "Virtual Network를 통해 컨테이너 끌어오기",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "높다",
- "text": "계층 간의 과도한 네트워크 트래픽으로 인해 발생할 수 있는 상당한 비용 때문에 다른 VNet에서 SAP 시스템의 DBMS(데이터베이스 관리 시스템) 및 애플리케이션 계층을 호스트하고 VNet 피어링과 연결하는 것은 권장되지 않습니다. Azure 가상 네트워크 내에서 서브넷을 사용하여 SAP 애플리케이션 계층과 DBMS 계층을 분리하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "비용"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "402a9846-d515-4061-aff8-cd30088693fa",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
- "service": "SAP",
- "severity": "높다",
- "text": "Linux 게스트 운영 체제에서 Load Balancer를 사용하는 경우 Linux 네트워크 매개 변수 net.ipv4.tcp_timestamps가 0으로 설정되어 있는지 확인합니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "공연"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "참여의 침투 테스트 규칙에 따라 웹 응용 프로그램에 대한 침투 테스트를 수행합니다.",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
+ "severity": "보통",
+ "text": "침투 테스트 수행",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "DevSecOps 사례에 따라 취약성을 검증하고 검사한 신뢰할 수 있는 코드를 배포합니다.",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
"severity": "보통",
- "text": "SAP RISE/ECS 배포의 경우 가상 피어링은 고객의 기존 Azure 환경과의 연결을 설정하는 기본 방법입니다. SAP vnet과 고객 vnet은 모두 NSG(네트워크 보안 그룹)로 보호되므로 vnet 피어링을 통해 SAP 및 데이터베이스 포트에서 통신할 수 있습니다",
+ "text": "유효성이 검사된 코드 배포",
"waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "지원되는 플랫폼, 프로그래밍 언어, 프로토콜 및 프레임워크의 최신 버전을 사용합니다.",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
"severity": "높다",
- "text": "Azure VM에 대한 SAP HANA 데이터베이스 백업을 검토합니다.",
- "waf": "비용"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP에 사용되는 Site Recovery 기본 제공 모니터링을 검토합니다.",
- "waf": "비용"
+ "text": "최신 플랫폼, 언어, 프로토콜 및 프레임워크 사용",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
- "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
- "service": "SAP",
- "severity": "높다",
- "text": "SAP HANA 시스템 환경 모니터링 지침을 검토합니다.",
- "waf": "작업"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub는 미사용 데이터의 암호화를 제공합니다. 사용자 고유의 키를 사용하는 경우 데이터는 여전히 Microsoft 관리형 키를 사용하여 암호화되지만 Microsoft 관리형 키는 고객 관리형 키를 사용하여 암호화됩니다. ",
+ "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
+ "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
+ "service": "Event Hubs",
+ "severity": "낮다",
+ "text": "필요한 경우 미사용 데이터 암호화에서 고객 관리형 키 옵션 사용Use customer-managed key option in data at rest encryption when required",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hubs 네임스페이스를 사용하면 클라이언트가 TLS 1.0 이상을 사용하여 데이터를 보내고 받을 수 있습니다. 더 엄격한 보안 조치를 적용하기 위해 클라이언트가 최신 버전의 TLS를 사용하여 데이터를 보내고 받도록 Event Hubs 네임스페이스를 구성할 수 있습니다. Event Hubs 네임스페이스에 최소 버전의 TLS가 필요한 경우 이전 버전으로 수행된 모든 요청이 실패합니다. ",
+ "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "Azure Linux VM 백업 전략에서 Oracle Database를 검토합니다.",
- "waf": "작업"
+ "text": "요청에 필요한 최소 버전의 TLS(전송 계층 보안) 적용 ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
- "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Event Hubs 네임스페이스를 만들 때 네임스페이스에 대해 RootManageSharedAccessKey라는 정책 규칙이 자동으로 만들어집니다. 이 정책에는 전체 네임스페이스에 대한 관리 권한이 있습니다. 이 규칙을 관리 루트 계정처럼 취급하고 응용 프로그램에서 사용하지 않는 것이 좋습니다. RBAC에서 AAD를 인증 공급자로 사용하는 것이 좋습니다. ",
+ "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "SQL Server 2016에서 Azure Blob Storage 사용을 검토합니다.",
- "waf": "작업"
+ "text": "필요하지 않은 경우 루트 계정을 사용하지 마십시오.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure 리소스에 대한 관리 ID는 Azure VM(Virtual Machines), 함수 앱, Virtual Machine Scale Sets 및 기타 서비스에서 실행되는 애플리케이션에서 Azure AD 자격 증명을 사용하여 Event Hubs 리소스에 대한 액세스 권한을 부여할 수 있습니다. Azure AD 인증과 함께 Azure 리소스에 대한 관리 ID를 사용하면 클라우드에서 실행되는 애플리케이션에 자격 증명을 저장하지 않아도 됩니다. ",
+ "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "Azure VM에 대한 자동화된 Backup v2 사용을 검토합니다.",
- "waf": "작업"
+ "text": "가능한 경우 애플리케이션은 관리 ID를 사용하여 Azure Event Hub에 인증해야 합니다. 그렇지 않은 경우 Azure Key Vault 또는 동등한 서비스에 스토리지 자격 증명(SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "권한을 만들 때 Azure Event Hub에 대한 클라이언트의 액세스를 세밀하게 제어할 수 있습니다. Azure Event Hub의 사용 권한은 개별 리소스 수준(예: 소비자 그룹, 이벤트 허브 엔터티, 이벤트 허브 네임스페이스 등)으로 범위를 지정할 수 있으며 범위가 지정되어야 합니다.",
+ "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
+ "service": "Event Hubs",
"severity": "높다",
- "text": "프리미엄 디스크(V1)를 사용할 때 M 시리즈에 쓰기 가속기 사용Enabling Write accelerator for M series when using premium disks(V1)",
- "waf": "작업"
+ "text": "최소 권한 데이터 평면 RBAC 사용",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub 리소스 로그에는 작업 로그, 가상 네트워크 및 Kafka 로그가 포함됩니다. 런타임 감사 로그는 Event Hubs의 모든 데이터 평면 액세스 작업(예: 이벤트 보내기 또는 받기)에 대해 집계된 진단 정보를 캡처합니다.",
+ "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
+ "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "가용성 영역 대기 시간을 테스트합니다.",
- "waf": "공연"
+ "text": "보안 조사를 위해 로깅을 사용하도록 설정합니다. Azure Monitor를 사용하여 리소스 로그, 런타임 감사 로그 및 Kafka 로그와 같은 메트릭 및 로그를 캡처합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
- "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure Event Hub는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 가상 네트워크와 Azure Event Hub 간의 트래픽이 Microsoft 백본 네트워크를 통해 트래버스할 수 있습니다. 또한 퍼블릭 엔드포인트를 사용하지 않는 경우 사용하지 않도록 설정해야 합니다. ",
+ "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
+ "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "모든 SAP 구성 요소에 대해 SAP EarlyWatch Alert를 활성화합니다.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
- "waf": "공연"
+ "text": "프라이빗 엔드포인트를 사용하여 Azure Event Hub에 액세스하고 해당하는 경우 공용 네트워크 액세스를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "IP 방화벽을 사용하면 퍼블릭 엔드포인트를 CIDR(Classless Inter-Domain Routing) 표기법의 IPv4 주소 또는 IPv4 주소 범위 집합으로만 추가로 제한할 수 있습니다. ",
+ "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "SAP ABAPMeter 보고서 /SSA/CAT를 사용하여 SAP 애플리케이션 서버-데이터베이스 서버 대기 시간을 검토합니다.",
- "training": "https://me.sap.com/notes/0002879613",
- "waf": "공연"
+ "text": "특정 IP 주소 또는 범위에서 Azure Event Hub 네임스페이스에 대한 액세스만 허용하는 것이 좋습니다",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "안전"
},
{
- "checklist": "SAP Checklist",
- "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "CCMS를 사용하여 SQL Server 성능 모니터링을 검토합니다.",
- "waf": "공연"
+ "text": "FTA 탄력성 핸드북 활용",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
- "link": "https://me.sap.com/notes/500235",
- "service": "SAP",
- "severity": "보통",
- "text": "SAP 애플리케이션 계층 VM과 DBMS VM(NIPING) 간의 네트워크 대기 시간을 테스트합니다.",
- "training": "https://me.sap.com/notes/1100926/E",
- "waf": "공연"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": " 영역 사용 지역의 프리미엄, 전용 또는 표준 SKU를 사용하여 포털에서 만든 새 EH 네임스페이스에 대해 자동으로 설정됩니다. EH 메타데이터와 이벤트 데이터 자체는 모두 영역 간에 복제됩니다",
+ "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
+ "service": "Event Hubs",
+ "severity": "높다",
+ "text": "지역적으로 적용 가능한 경우 가용성 영역 활용Leverage Availability Zones if regionally applicable",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
- "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
+ "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "SAP HANA Studio 경고를 검토합니다.",
- "waf": "공연"
+ "text": "예측 가능한 성능을 위해 프리미엄 또는 전용 SKU 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
- "link": "https://me.sap.com/notes/1969700",
- "service": "SAP",
- "severity": "보통",
- "text": "HANA_Configuration_Minichecks를 사용하여 SAP HANA 상태 검사를 수행합니다.",
- "waf": "공연"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "기본 제공 지역 재해 복구 기능을 사용하도록 설정하면 네임스페이스(Event Hubs, 소비자 그룹 및 설정)의 전체 구성이 기본 네임스페이스에서 보조 네임스페이스로 지속적으로 복제되며, 언제든지 한 번만 장애 조치(failover)를 주 네임스페이스에서 보조 네임스페이스로 이동할 수 있습니다. 활성/수동 기능은 애플리케이션 구성을 변경할 필요 없이 실패한 Azure 지역에서 더 쉽게 복구하고 중단할 수 있도록 설계되었습니다",
+ "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
+ "service": "Event Hubs",
+ "severity": "높다",
+ "text": "Active Passive 구성을 사용하여 지역 재해 복구 계획Plan for Geo Disaster Recovery using Active Passive configuration",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "다운된 지역에서 이벤트 데이터의 중단 또는 손실을 허용할 수 없는 DR 구성에 사용해야 합니다. 이러한 경우 복제 지침을 따르고 기본 제공 지역 재해 복구 기능(활성/수동)을 사용하지 마세요. 액티브/액티브를 사용하여 서로 다른 지역 및 네임스페이스에서 여러 Event Hubs를 유지 관리하면 허브 간에 이벤트가 복제됩니다",
+ "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "Azure, 온-프레미스 또는 기타 클라우드 환경에서 Windows 및 Linux VM을 실행하는 경우 Azure Automation의 업데이트 관리 센터를 사용하여 보안 패치를 포함한 운영 체제 업데이트를 관리할 수 있습니다.",
- "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "waf": "안전"
+ "text": "Business Critical Applications의 경우 Active Active 구성을 사용합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "08951710-79a2-492a-adbc-06d7a401545b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
+ "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
+ "service": "Event Hubs",
"severity": "보통",
- "text": "SAP는 SAP 시스템을 보호하기 위해 즉각적인 조치가 필요한 매우 중요한 보안 패치 또는 핫픽스를 릴리스하므로 SAP 보안 OSS 노트를 정기적으로 검토합니다.",
- "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
- "waf": "안전"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "낮다",
- "text": "SQL Server SAP의 경우 SQL Server SAP 시스템에서 계정을 사용하지 않으므로 SQL Server 시스템 관리자 계정을 사용하지 않도록 설정할 수 있습니다. 원래 시스템 관리자 계정을 비활성화하기 전에 시스템 관리자 권한이 있는 다른 사용자가 서버에 액세스할 수 있는지 확인합니다.",
- "waf": "안전"
+ "text": "복원력 있는 Event Hubs 설계",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "높다",
- "text": "xp_cmdshell 비활성화합니다. SQL Server 기능 xp_cmdshell SQL Server 내부 운영 체제 명령 셸을 사용할 수 있습니다. 이는 보안 감사에서 발생할 수 있는 잠재적 위험입니다.",
- "training": "https://me.sap.com/notes/3019299/E",
- "waf": "안전"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"severity": "높다",
- "text": "Azure에서 SAP HANA 데이터베이스 서버를 암호화하는 데는 SAP HANA 네이티브 암호화 기술이 사용됩니다. 또한 Azure에서 SQL Server를 사용하는 경우 TDE(투명한 데이터 암호화)를 사용하여 데이터 및 로그 파일을 보호하고 백업도 암호화되도록 합니다.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "waf": "안전"
+ "text": "읽기 작업에 대해 99.9%의 가용성을 갖도록 복제본 2개 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "SAP",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"severity": "보통",
- "text": "Azure Storage 암호화는 모든 Azure Resource Manager 및 클래식 스토리지 계정에 대해 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다. 데이터는 기본적으로 암호화되므로 Azure Storage 암호화를 사용하기 위해 코드 또는 애플리케이션을 수정할 필요가 없습니다.",
- "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
- "waf": "안전"
+ "text": "읽기/쓰기 작업에 대해 99.9%의 가용성을 갖도록 복제본 3개 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
"severity": "높다",
- "text": "Azure Key Vault를 사용하여 비밀 및 자격 증명 저장",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "안전"
+ "text": "읽기 및/또는 쓰기 복제본을 활성화하여 가용 영역 활용Leverage Availability Zones by enabling read and/or write replicas",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "SAP",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
"severity": "보통",
- "text": "무단 변경으로부터 보호하기 위해 성공적인 배포 후 Azure 리소스를 잠그는 것이 좋습니다. 사용자 지정된 Azure 정책(Custome 역할)을 사용하여 구독별로 LOCK 제약 조건 및 규칙을 적용할 수도 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
- "waf": "안전"
+ "text": "지역 중복의 경우 Manually create services in 2 or more regions for Search는 지리적 지역 간에 검색 인덱스를 복제하는 자동화된 방법을 제공하지 않습니다",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
"severity": "보통",
- "text": "삭제된 개체에 대한 보존 보호를 허용하기 위해 일시 삭제 및 제거 정책을 사용하도록 설정된 Azure Key Vault를 프로비전합니다.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "안전"
+ "text": "여러 서비스에서 데이터를 동기화하려면 인덱서를 사용하여 여러 서비스의 콘텐츠를 업데이트하거나 REST API를 사용하여 여러 서비스에서 콘텐츠 업데이트를 푸시합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
- "service": "SAP",
- "severity": "높다",
- "text": "기존 요구 사항에 따라 규정 및 규정 준수 제어(내부/외부) - 필요한 Azure 정책 및 Azure RBAC 역할 결정",
- "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
- "waf": "안전"
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
+ "severity": "보통",
+ "text": "Azure Traffic Manager를 사용하여 요청 조정",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
"severity": "높다",
- "text": "SAP 환경에서 엔드포인트용 Microsoft Defender 사용하도록 설정하는 경우 모든 서버를 대상으로 하는 대신 DBMS 서버에서 데이터 및 로그 파일을 제외하는 것이 좋습니다. 대상 파일을 제외할 때 DBMS 공급업체의 권장 사항을 따릅니다.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
- "waf": "안전"
+ "text": "Azure Cognitive Search 인덱스를 백업 및 복원합니다. 이 샘플 코드를 사용하여 인덱스 정의 및 스냅샷을 일련의 Json 파일에 백업합니다",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
"severity": "높다",
- "text": "클라우드용 Microsoft Defender의 Just-In-Time 액세스 권한이 있는 SAP 관리자 사용자 지정 역할을 위임합니다.",
- "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "waf": "안전"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "낮다",
- "text": "타사 보안 제품을 DIAG(SAP GUI)용 SNC(Secure Network Communications), RFC 및 HTTPS용 SPNEGO와 통합하여 전송 중인 데이터를 암호화합니다.",
- "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
- "waf": "안전"
+ "text": "지역적으로 적용 가능한 경우 가용성 영역 활용(자동으로 활성화됨)",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"severity": "보통",
- "text": "보안 주체 암호화 기능을 위해 기본적으로 Microsoft 관리형 키를 사용하고 필요한 경우 고객 관리형 키를 사용합니다.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "안전"
+ "text": "Microsoft에서 시작한 장애 조치(failover)에 유의하세요. 드문 경우지만 Microsoft는 영향을 받는 지역의 모든 IoT Hub를 해당 지역 쌍을 이루는 지역으로 장애 조치(failover)하기 위해 이러한 작업을 수행합니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
"severity": "높다",
- "text": "애플리케이션, 환경, 지역당 Azure Key Vault를 사용합니다.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "안전"
+ "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
- "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"severity": "높다",
- "text": "비 HANA Windows 및 비 Windows 운영 체제에 대한 디스크 암호화 키 및 비밀을 제어하고 관리하려면 Azure Key Vault를 사용합니다. SAP HANA는 Azure Key Vault에서 지원되지 않으므로 SAP ABAP 또는 SSH 키와 같은 대체 방법을 사용해야 합니다.",
- "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
- "waf": "안전"
+ "text": "수동 장애 조치(failover)를 트리거하는 방법을 알아봅니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
"severity": "높다",
- "text": "실수로 인한 네트워크 관련 변경을 방지하기 위해 Azure의 SAP 스포크 구독에 대한 RBAC(역할 기반 액세스 제어) 역할 사용자 지정",
- "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
- "waf": "안전"
+ "text": "장애 조치(failover) 후 장애 복구(failback)하는 방법을 알아봅니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
- "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
- "service": "SAP",
- "severity": "높다",
- "text": "나머지 SAP 자산에서 DMZ 및 NVA를 격리하고, Azure Private Link를 구성하고, Azure의 SAP 리소스를 안전하게 관리 및 제어합니다",
- "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
- "waf": "안전"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
+ "severity": "보통",
+ "text": "Azure Spring Apps는 모든 앱에 대해 두 개의 배포를 허용하며, 그 중 하나만 프로덕션 트래픽을 수신합니다. 블루-그린 배포 전략을 통해 가동 중지 시간 제로를 달성할 수 있습니다. 파란색 녹색 배포는 표준 및 엔터프라이즈 계층에서만 사용할 수 있습니다. ADO/GitHub 작업과 함께 CI/CD를 사용하여 배포를 자동화할 수 있습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
- "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "service": "SAP",
- "severity": "낮다",
- "text": "Azure에서 Microsoft 맬웨어 방지 소프트웨어를 사용하여 악성 파일, 애드웨어 및 기타 위협으로부터 가상 머신을 보호하는 것이 좋습니다.",
- "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
- "waf": "안전"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
+ "severity": "보통",
+ "text": "Azure Spring Apps 인스턴스는 애플리케이션에 대해 여러 지역에서 만들 수 있으며 Traffic Manager/Front Door에서 트래픽을 라우팅할 수 있습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
- "service": "SAP",
- "severity": "낮다",
- "text": "더욱 강력한 보호를 위해 엔드포인트용 Microsoft Defender 사용하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
- "waf": "안전"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
+ "severity": "보통",
+ "text": "지원되는 지역에서 Azure Spring Apps는 영역 중복으로 배포할 수 있으며, 이는 인스턴스가 가용성 영역에 자동으로 분산됨을 의미합니다. 이 기능은 Standard 및 Enterprise 계층에서만 사용할 수 있습니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
- "severity": "높다",
- "text": "가상 네트워크 피어링을 통해 스포크 네트워크에 연결된 허브 가상 네트워크를 통해 모든 트래픽을 전달하여 SAP 애플리케이션 및 데이터베이스 서버를 인터넷 또는 온-프레미스 네트워크에서 격리합니다. 피어링된 가상 네트워크는 Azure의 SAP 솔루션이 공용 인터넷에서 격리되도록 보장합니다.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
- "waf": "안전"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
+ "severity": "보통",
+ "text": "앱에 1개 이상의 앱 인스턴스 사용",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "낮다",
- "text": "SAP Fiori와 같은 인터넷 연결 애플리케이션의 경우 보안 수준을 유지하면서 애플리케이션 요구 사항에 따라 부하를 분산해야 합니다. 계층 7 보안의 경우 Azure Marketplace에서 사용할 수 있는 타사 WAF(Web Application Firewall)를 사용할 수 있습니다.",
- "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
- "waf": "안전"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
+ "severity": "보통",
+ "text": "로그, 메트릭 및 추적을 사용하여 Azure Spring Apps를 모니터링합니다. ASA를 Application Insights와 통합하고, 오류를 추적하고, 통합 문서를 만듭니다.",
+ "waf": "신뢰도"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
- "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
- "service": "SAP",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
"severity": "보통",
- "text": "SAP용 Azure Monitor 솔루션에서 보안 통신을 사용하도록 설정하려면 루트 인증서 또는 서버 인증서를 사용하도록 선택할 수 있습니다. 루트 인증서를 사용하는 것이 좋습니다.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "안전"
+ "text": "Spring Cloud Gateway에서 자동 크기 조정 설정",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
+ "severity": "낮다",
+ "text": "표준 소비 및 전용 플랜이 있는 앱에 대해 자동 크기 조정을 사용하도록 설정합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
+ "severity": "보통",
+ "text": "중요 업무용 앱에 대한 Spring Boot의 상업적 지원을 위해 Enterprise 플랜을 사용합니다. 다른 계층에서는 OSS 지원을 받을 수 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "높다",
+ "text": "격리 권장 사항, 액세스 제어, 데이터 보호, 백업 및 로깅과 같은 Key Vault의 모범 사례를 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "보통",
+ "text": "Key Vault는 관리형 서비스이며 Microsoft는 지역 내 및 지역 간에 장애 조치(failover)를 처리합니다. Key Vault의 가용성 및 중복성을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "보통",
+ "text": "키 자격 증명 모음의 콘텐츠는 키와 비밀의 높은 내구성을 유지하기 위해 지역 내에서 그리고 최소 150마일 떨어진 보조 지역에 복제되지만 동일한 지역 내에 복제됩니다. Key Vault의 데이터 복제를 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "보통",
+ "text": "장애 조치(failover) 중에는 액세스 정책 또는 방화벽 구성 및 설정을 변경할 수 없습니다. 키 자격 증명 모음은 장애 조치(failover) 중에 읽기 전용 모드가 됩니다. Key Vault의 장애 조치(failover) 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "보통",
+ "text": "비밀, 키 또는 인증서와 같은 키 자격 증명 모음 개체를 백업할 때 백업 작업은 개체를 암호화된 Blob으로 다운로드합니다. 이 Blob은 Azure 외부에서 암호 해독할 수 없습니다. 이 Blob에서 사용 가능한 데이터를 가져오려면 동일한 Azure 구독 및 Azure geography 내의 키 자격 증명 모음으로 Blob을 복원해야 합니다. Key Vault의 백업 및 복원 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "높다",
+ "text": "비밀의 우발적 또는 악의적 삭제로부터 보호하려면 키 자격 증명 모음에서 일시 삭제 및 제거 보호 기능을 구성합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "낮다",
+ "text": "Key Vault의 일시 삭제된 리소스는 90일의 설정된 기간 동안 보존됩니다. Key Vault의 일시 삭제 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "낮다",
+ "text": "Key Vault의 백업 제한 사항을 이해합니다. Key Vault는 500개가 넘는 이전 버전의 키, 비밀 또는 인증서 개체를 백업하는 기능을 지원하지 않습니다. 키, 비밀 또는 인증서 개체를 백업하려고 하면 오류가 발생할 수 있습니다. 이전 버전의 키, 비밀 또는 인증서는 삭제할 수 없습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "낮다",
+ "text": "Key Vault는 현재 단일 작업으로 전체 키 자격 증명 모음을 백업하는 방법을 제공하지 않으며 키, 비밀 및 인증서는 개별적으로 백업해야 합니다. Key Vault의 백업 및 복원 지침을 숙지합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "보통",
+ "text": "데이터 손실을 방지하기 위해 암호화에 키를 사용하는 경우 제거 보호를 사용하는 것이 좋습니다. 제거 보호는 선택적 Key Vault 동작이며 기본적으로 사용하도록 설정되어 있지 않습니다. 제거 보호는 일시 삭제를 사용하도록 설정한 후에만 사용하도록 설정할 수 있습니다. CLI, PowerShell 또는 포털을 통해 켤 수 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "보통",
+ "text": "RBAC는 키 자격 증명 모음에 대한 액세스를 제어하는 데 권장됩니다. Key Vault의 액세스 제어 지침을 숙지합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "공명형 AI를 위한 Metaprompting 가드레일 따르기",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "더 나은 속도 제한, 부하 분산, 인증 및 로깅을 위해 APIM 또는 AI Central과 같은 솔루션을 사용하여 게이트웨이 패턴을 고려합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "AOAI 인스턴스에 대한 모니터링 활성화",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "리소스에 대해 수행된 작업(예: 구독 키 다시 생성) 또는 메트릭 임계값(예: 한 시간에 10을 초과하는 오류 수)에 의해 생성된 활동 로그의 항목과 같은 이벤트를 팀에 알리는 경고를 만듭니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "용량으로 인한 서비스 중단을 방지하기 위해 토큰 사용량을 모니터링합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "처리된 추론 토큰, 생성된 완료 토큰, 속도 제한 모니터링과 같은 메트릭 관찰",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "text": "진단이 충분하지 않은 경우 Azure OpenAI 앞에 있는 Azure API Managements와 같은 게이트웨이를 사용하여 허용되는 경우 들어오는 프롬프트와 나가는 응답을 모두 기록하는 것이 좋습니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Infrastructure as code를 사용하여 Azure OpenAI Service, 모델 배포 및 모든 관련 리소스를 배포합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "API 키 대신 관리 ID로 Microsoft Entra 인증 사용",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "입력과 정답이 있는 알려진 골든 데이터 세트를 사용하여 시스템의 성능/정확도를 평가합니다. 평가를 위해 PromptFlow의 기능을 활용합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "프로비저닝된 처리량 모델의 사용 평가 ",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure AI 콘텐츠 안전성 검토 및 구현",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "분당 토큰 및 응답을 기반으로 시스템의 처리량을 정의 및 평가하고 요구 사항에 맞춥니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "토큰 크기, 스트리밍 옵션을 제한하여 시스템의 대기 시간을 개선합니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "탄력성 요구를 예측하여 우선 순위에 따라 동기 및 일괄 처리 요청 분리를 결정합니다. 우선 순위가 높은 경우 동기 접근 방식을 사용하고 낮은 우선 순위의 경우 큐를 사용한 비동기 일괄 처리가 선호됩니다",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "소비자의 예상 수요를 기반으로 토큰 사용 요구 사항을 벤치마킹합니다. 프로비저닝된 처리량 단위 배포를 사용하는 경우 처리량의 유효성을 검사하는 데 도움이 되도록 Azure OpenAI 벤치마킹 도구를 사용하는 것이 좋습니다",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "PTU(프로비저닝된 처리량 단위)를 사용하는 경우 오버플로 요청에 대한 TPM(분당 토큰) 배포를 배포하는 것이 좋습니다. 게이트웨이를 사용하여 PTU 제한에 도달할 때 TPM 배포로 요청을 라우팅합니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "올바른 작업에 적합한 모델을 선택하십시오. 속도, 응답 품질 및 출력 복잡성 간에 적절한 절충점이 있는 모델 선택",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "미세 조정으로 모델 성능이 향상되었는지 여부를 파악하기 위해 미세 조정 없이 성능에 대한 기준이 있습니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "text": "여러 지역에 여러 OAI 인스턴스 배포",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "APIM과 같은 게이트웨이 패턴을 사용하여 재시도 및 상태 확인 구현Implement retry & healthchecks with gateway pattern like APIM",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "워크로드에 대한 TPM 및 RPM의 적절한 할당량이 있는지 확인합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "HAI 도구 키트 지침의 고려 사항을 검토하고 slution에 대한 이러한 상호 작용 방법을 적용합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "미세 조정이 사용되는 경우 지역 간에 별도의 미세 조정된 모델을 배포합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "중요한 데이터를 정기적으로 백업 및 복제하여 데이터 손실 또는 시스템 장애 발생 시 데이터 가용성과 복구 가능성을 보장합니다. Azure의 백업 및 재해 복구 서비스를 활용하여 데이터를 보호하세요.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "SLA를 갖도록 Azure AI 검색 서비스 계층을 선택해야 합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "text": "임베딩을 생성하기 전에 데이터 및 민감도를 분류하고 Microsoft Purview를 사용하여 레이블을 지정하고 생성된 임베딩을 동일한 민감도 및 분류로 처리해야 합니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "BYOK(옵션)를 사용한 SSE/디스크 암호화로 RAG에 사용되는 데이터 암호화",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "데이터 소스 간 전송 중인 데이터, RAG(Retrieval-Augmented Generation) 및 LLM 통신에 사용되는 AI 검색에 TLS가 적용되는지 확인합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "RBAC를 사용하여 Azure OpenAI 서비스에 대한 액세스를 관리합니다. 사용자에게 적절한 권한을 할당하고 사용자의 역할과 책임에 따라 액세스를 제한합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "데이터 암호화, 마스킹 또는 수정 기술을 구현하여 비프로덕션 환경에서 또는 테스트 또는 문제 해결을 위해 데이터를 공유할 때 민감한 데이터를 숨기거나 난독화된 값으로 대체합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure Defender를 활용하여 보안 위협을 탐지 및 대응하고 의심스러운 활동 또는 위반을 식별하기 위한 모니터링 및 경고 메커니즘을 설정합니다. 고급 위협 탐지 및 대응을 위해 Azure Sentinel 활용",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "규정 준수 규정을 준수하기 위해 데이터 보존 및 폐기 정책을 수립합니다. 더 이상 필요하지 않은 데이터에 대한 안전한 삭제 방법을 구현하고 데이터 보존 및 폐기 활동에 대한 감사 추적을 유지 관리합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Content Safety를 사용하여 Prompt shields 및 groundedness detection 구현 ",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "개인 정보 보호 제어를 구현하고 데이터 처리 활동에 필요한 동의 또는 권한을 얻어 GDPR 또는 HIPAA와 같은 관련 데이터 보호 규정을 준수하도록 합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "데이터 보안 모범 사례, 데이터 안전한 처리의 중요성, 데이터 침해와 관련된 잠재적 위험에 대해 직원을 교육합니다. 데이터 보안 프로토콜을 성실히 따르도록 권장합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "생산 데이터를 개발 및 테스트 데이터와 분리합니다. 프로덕션에서는 실제 민감한 데이터만 사용하고 개발 및 테스트 환경에서는 익명 또는 합성 데이터를 활용합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "데이터 민감도 수준이 다양하다면 각 수준에 대해 별도의 인덱스를 만드는 것이 좋습니다. 예를 들어, 일반 데이터에 대한 인덱스와 민감한 데이터에 대한 인덱스가 있을 수 있으며, 각각 다른 액세스 프로토콜에 의해 제어됩니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "한 단계 더 나아가 중요한 데이터 세트를 서비스의 다른 인스턴스에 배치합니다. 각 인스턴스는 고유한 특정 RBAC 정책 집합으로 제어할 수 있습니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "민감한 정보에서 생성된 임베딩과 벡터는 그 자체로 민감하다는 점을 인식해야 합니다. 이 데이터에는 원본 자료와 동일한 보호 조치가 제공되어야 합니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "임베딩 및 벡터가 있는 데이터 저장소에 RBAC를 적용하고 역할의 액세스 요구 사항에 따라 액세스 범위를 지정합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "AI 서비스에 대한 프라이빗 엔드포인트를 구성하여 네트워크 내 서비스 액세스를 제한합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure Firewall 및 UDR을 사용하여 엄격한 인바운드 및 아웃바운드 트래픽 제어를 적용하고 외부 통합 지점을 제한합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "네트워크 세분화 및 액세스 제어를 구현하여 LLM 애플리케이션에 대한 액세스를 인증된 사용자 및 시스템으로만 제한하고 측면 이동을 방지합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "LLMLingua 또는 gprtrim과 같은 프롬프트 압축 도구 사용",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "LLM 애플리케이션에서 사용하는 API 및 엔드포인트가 관리 ID, API 키 또는 OAuth와 같은 인증 및 권한 부여 메커니즘으로 적절하게 보호되어 무단 액세스를 방지해야 합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "다단계 인증(multi-factor authentication)과 같은 강력한 최종 사용자 인증 메커니즘을 적용하여 LLM 애플리케이션 및 관련 네트워크 리소스에 대한 무단 액세스를 방지합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "네트워크 모니터링 도구를 구현하여 의심스럽거나 악의적인 활동에 대한 네트워크 트래픽을 탐지하고 분석합니다. 로깅을 활성화하여 네트워크 이벤트를 캡처하고 보안 사고 발생 시 포렌식 분석을 용이하게 합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "보안 감사 및 침투 테스트를 수행하여 LLM 애플리케이션의 네트워크 인프라에서 네트워크 보안 약점 또는 취약성을 식별하고 해결합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "text": "Azure AI 서비스는 더 나은 관리를 위해 적절하게 태그가 지정됩니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "낮다",
+ "text": "Azure AI Service 계정은 조직의 명명 규칙을 따릅니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure AI Services 리소스의 진단 로그를 사용하도록 설정해야 함",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "키 액세스(로컬 인증)는 보안을 위해 사용하지 않도록 설정하는 것이 좋습니다. 키 기반 액세스를 사용하지 않도록 설정하면 Microsoft Entra ID가 유일한 액세스 방법이 되어 최소 권한 원칙과 세분화된 제어를 유지할 수 있습니다. ",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure Key Vault를 사용하여 키를 안전하게 저장하고 관리하세요. LLM 애플리케이션의 코드 내에 중요한 키를 하드 코딩하거나 포함하지 않도록 하고 관리 ID를 사용하여 Azure Key Vault에서 안전하게 검색합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure Key Vault에 저장된 키를 정기적으로 회전하고 만료하여 무단 액세스의 위험을 최소화합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "tiktoken을 사용하여 대화 모드에서 토큰 최적화를 위한 토큰 크기 이해",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "보안 코딩 관행에 따라 주입 공격, XSS(교차 사이트 스크립팅) 또는 보안 구성 오류와 같은 일반적인 취약성을 방지합니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "LLM 라이브러리와 다른 시스템 컴포넌트를 정기적으로 업데이트하고 패치하는 프로세스를 설정합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "Azure OpenAI 또는 기타 LLM 사용 약관, 정책 및 지침, 허용되는 사용 사례 준수",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "기본 모델과 미세 조정된 모델 및 토큰 단계 크기의 비용 차이를 이해합니다.",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "가능한 경우 호출당 오버헤드를 최소화하여 전체 비용을 줄일 수 있는 일괄 처리 요청. 배치 크기를 최적화해야 합니다.",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "모델 사용을 모니터링하는 비용 추적 시스템을 설정하고 해당 정보를 사용하여 모델 선택 및 프롬프트 크기를 알립니다",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "모델 응답당 토큰 수에 대한 최대 제한을 설정합니다. 유효한 응답에 사용할 수 있을 만큼 충분히 큰지 확인하기 위해 크기를 최적화합니다",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "안정성을 위한 AI 검색 설정에 대해 제공된 지침을 검토합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "AI Search Vector 스토리지 계획 및 관리",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "LLMOps 사례를 적용하여 GenAI 애플리케이션의 라이프사이클 관리를 자동화합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "청구 모델 사용 평가 - PAYG 대 PTU",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "모델 버전 간에 전환할 때 프롬프트와 응용 프로그램의 품질을 평가합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "GenAI 앱을 평가, 모니터링 및 개선하여 근거, 관련성, 정확성, 일관성, 유창성 등의 기능을 제공합니다.",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "다양한 검색 매개 변수를 기반으로 Azure AI Search 결과를 평가합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "데이터를 사용하여 프롬프트 엔지니어링 및 RAG와 같은 다른 기본 접근 방식을 시도한 경우에만 모델을 미세 조정하여 정확도를 높이는 방법으로 살펴보십시오",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "프롬프트 엔지니어링 기법을 사용하여 LLM 응답의 정확도 향상",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "GenAI 애플리케이션을 위한 레드 팀",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "최종 사용자에게 LLM 응답에 대한 점수 매기기 옵션을 제공하고 이러한 점수를 추적합니다. ",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "높다",
+ "text": "할당량 관리 방법 고려",
+ "waf": "비용 최적화"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "보통",
+ "text": "APIM 기반 게이트웨이와 같은 Load Balancer 솔루션을 사용하여 서비스 및 지역 간에 부하와 용량을 분산합니다",
+ "waf": "운영 우수성"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "스토리지와 관련된 Microsoft 클라우드 보안 벤치마크의 지침 적용",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "'스토리지에 대한 Azure 보안 기준'을 고려합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Azure Storage는 기본적으로 공용 IP 주소를 가지며 인터넷에 연결할 수 있습니다. 프라이빗 엔드포인트를 사용하면 액세스가 필요한 Azure Compute 리소스에만 Azure Storage를 안전하게 노출할 수 있으므로 공용 인터넷에 노출되지 않습니다",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Azure Storage에 프라이빗 엔드포인트를 사용하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "새로 만든 스토리지 계정은 ARM 배포 모델을 사용하여 생성되므로 RBAC, 감사 등이 모두 활성화됩니다. 구독에 클래식 배포 모델을 사용하는 이전 저장소 계정이 없는지 확인합니다.",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "이전 스토리지 계정이 '클래식 배포 모델'을 사용하지 않는지 확인",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Microsoft Defender를 활용하여 의심스러운 활동 및 잘못된 구성에 대해 알아보세요.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "모든 스토리지 계정에 대해 Microsoft Defender 사용",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "일시 삭제 메커니즘을 사용하면 실수로 삭제된 Blob을 복구할 수 있습니다.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "Blob에 대해 '일시 삭제' 사용Enable 'soft delete' for blobs",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "Blob에 대해 '일시 삭제' 사용 안 함",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "컨테이너에 대한 일시 삭제를 사용하면 컨테이너가 삭제된 후 복구할 수 있습니다(예: 실수로 삭제한 작업에서 복구).",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "컨테이너에 대해 '일시 삭제' 사용Enable 'soft delete' for containers",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "예를 들어 애플리케이션이 기밀성, 개인 정보 보호 또는 규정 준수를 위해 삭제된 정보가 즉시 삭제되도록 해야 하는 경우와 같이 특정 Blob 컨테이너에 대해 '일시 삭제'를 선택적으로 사용하지 않도록 설정하는 것이 좋습니다. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "컨테이너에 대해 '일시 삭제' 사용 안 함",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "사용자가 삭제하기 전에 먼저 삭제 잠금을 제거하도록 강제하여 스토리지 계정의 우발적인 삭제를 방지합니다.",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "스토리지 계정에 대한 리소스 잠금 사용Enable resource locks on storage accounts",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Blob에 대한 '법적 보존' 또는 '시간 기반 보존' 정책을 고려하면 Blob, 컨테이너 또는 스토리지 계정을 삭제할 수 없습니다. '불가능한'은 실제로 '불가능한'을 의미합니다. 스토리지 계정에 변경할 수 없는 Blob이 포함되면 해당 스토리지 계정을 '제거'하는 유일한 방법은 Azure 구독을 취소하는 것입니다.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "변경할 수 없는 Blob 고려",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "스토리지 계정에 대한 보호되지 않는 HTTP/80 액세스를 사용하지 않도록 설정하여 모든 데이터 전송이 암호화되고 무결성이 보호되며 서버가 인증되도록 하는 것이 좋습니다. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "HTTPS 필요, 즉 스토리지 계정에서 포트 80 사용 안 함Require HTTPS, i.e. disable port 80 on the storage account",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "스토리지 계정에서 사용자 지정 도메인(호스트 이름)을 구성할 때 TLS/HTTPS가 필요한지 확인합니다. 이 경우 스토리지 계정 앞에 Azure CDN을 배치해야 할 수 있습니다.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "HTTPS를 적용(HTTP 사용 안 함)할 때 스토리지 계정에 사용자 지정 도메인(CNAME)을 사용하지 않는지 확인합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "클라이언트가 SAS 토큰을 사용하여 Blob 데이터에 액세스할 때 HTTPS를 요구하면 자격 증명 손실 위험을 최소화하는 데 도움이 됩니다.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS(공유 액세스 서명) 토큰을 HTTPS 연결로만 제한",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": ". 최신 TLS 버전을 적용하면 이전 버전을 사용하는 클라이언트의 요청이 거부됩니다. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "스토리지 계정에 대한 최신 TLS 버전 적용Enforce the latest TLS version for a storage account",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "가능한 경우 Microsoft Entra ID 토큰을 공유 액세스 서명보다 선호해야 합니다",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Blob 액세스에 Microsoft Entra ID 토큰 사용Use Microsoft Entra ID tokens for blob access",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "사용자, 그룹 또는 응용 프로그램에 역할을 할당할 때 해당 보안 주체가 작업을 수행하는 데 필요한 권한만 부여합니다. 리소스에 대한 액세스를 제한하면 의도하지 않은 데이터 오용과 악의적인 데이터 오용을 모두 방지할 수 있습니다.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "IaM 권한의 최소 권한",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "사용자 위임 SAS는 Azure AD(Azure Active Directory) 자격 증명과 SAS에 대해 지정된 권한으로 보호됩니다. 사용자 위임 SAS는 범위와 기능 측면에서 서비스 SAS와 유사하지만 서비스 SAS에 비해 보안상의 이점을 제공합니다. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "SAS를 사용하는 경우 스토리지 계정 키 기반 SAS보다 '사용자 위임 SAS'를 선호합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "스토리지 계정 키('공유 키')에는 감사 기능이 거의 없습니다. 누가/언제 키 복사본을 가져왔는지 모니터링할 수 있지만 키가 여러 사람의 손에 들어가면 특정 사용자의 사용을 귀속시킬 수 없습니다. Entra ID 인증에만 의존하면 스토리지 액세스를 사용자에게 더 쉽게 연결할 수 있습니다. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Microsoft Entra ID 액세스(및 사용자 위임 SAS)만 지원되도록 스토리지 계정 키를 사용하지 않도록 설정하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "활동 로그 데이터를 사용하여 스토리지 계정의 보안을 '언제', '누가', '무엇을' 및 '어떻게' 확인하거나 변경합니다(예: 스토리지 계정 키, 액세스 정책 등).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Azure Monitor를 사용하여 스토리지 계정에 대한 컨트롤 플레인 작업을 감사하는 것이 좋습니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "키 만료 정책을 사용하면 계정 액세스 키의 교체에 대한 미리 알림을 설정할 수 있습니다. 지정된 간격이 경과하고 키가 아직 회전되지 않은 경우 알림이 표시됩니다.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "스토리지 계정 키를 사용하는 경우 '키 만료 정책'을 사용하도록 설정하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS 만료 정책은 SAS가 유효한 권장 간격을 지정합니다. SAS 만료 정책은 서비스 SAS 또는 계정 SAS에 적용됩니다. 사용자가 권장 간격보다 큰 유효성 간격으로 서비스 SAS 또는 계정 SAS를 생성하면 경고가 표시됩니다.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS 만료 정책을 구성하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "저장된 액세스 정책은 스토리지 계정 키를 다시 생성할 필요 없이 서비스 SAS에 대한 사용 권한을 취소할 수 있는 옵션을 제공합니다. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS를 저장된 액세스 정책에 연결하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "체크 인된 연결 문자열 및 저장소 계정 키를 검색하도록 응용 프로그램의 소스 코드 리포지토리를 구성하는 것이 좋습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "이상적으로 애플리케이션은 관리 ID를 사용하여 Azure Storage에 인증해야 합니다. 가능하지 않은 경우 Azure KeyVault 또는 동등한 서비스에 스토리지 자격 증명(연결 문자열, 스토리지 계정 키, SAS, 서비스 주체 자격 증명)을 사용하는 것이 좋습니다.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "Azure KeyVault에 연결 문자열을 저장하는 것이 좋습니다(관리 ID를 사용할 수 없는 시나리오에서).",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "임시 SAS 서비스 SAS 또는 계정 SAS에서 가까운 만료 시간을 사용합니다. 이러한 방식으로 SAS가 손상되더라도 짧은 시간 동안만 유효합니다. 이 방법은 저장된 액세스 정책을 참조할 수 없는 경우에 특히 중요합니다. 또한 단기 만료 시간은 Blob에 업로드할 수 있는 시간을 제한하여 Blob에 쓸 수 있는 데이터의 양을 제한합니다.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "임시 SAS의 유효 기간을 단축하기 위해 노력",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS를 만들 때는 가능한 한 구체적이고 제한적이어야 합니다. 훨씬 더 광범위한 액세스를 제공하는 SAS보다 단일 리소스 및 작업에 대해 SAS를 선호합니다.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SAS에 좁은 범위 적용",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS에는 SAS를 사용하여 리소스를 요청할 수 있는 권한이 있는 클라이언트 IP 주소 또는 주소 범위에 대한 매개 변수가 포함될 수 있습니다. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "가능한 경우 SAS 범위를 특정 클라이언트 IP 주소로 지정하는 것이 좋습니다",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS는 클라이언트가 업로드하는 데이터의 양을 제한할 수 없습니다. 시간 경과에 따른 스토리지 양의 가격 책정 모델을 감안할 때 클라이언트가 악의적으로 큰 콘텐츠를 업로드했는지 여부를 확인하는 것이 합리적일 수 있습니다.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "낮다",
+ "text": "클라이언트가 SAS를 사용하여 파일을 업로드한 후 업로드된 데이터를 확인하는 것이 좋습니다. ",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "'로컬 사용자 계정'을 사용하여 SFTP를 통해 Blob Storage에 액세스하는 경우 '일반적인' RBAC 컨트롤이 적용되지 않습니다. NFS 또는 REST를 통한 Blob 액세스는 SFTP 액세스보다 더 제한적일 수 있습니다. 안타깝게도 2023년 초부터 로컬 사용자는 현재 SFTP 엔드포인트에 대해 지원되는 유일한 ID 관리 형태입니다",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "SFTP: SFTP 액세스를 위한 '로컬 사용자'의 수를 제한하고 시간이 지남에 따라 액세스가 필요한지 여부를 감사합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "SFTP: SFTP 엔드포인트는 POSIX와 유사한 ACL을 지원하지 않습니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "스토리지는 CORS(Cross-Origin Resource Sharing), 즉 다른 도메인의 웹 앱이 동일 출처 정책을 완화할 수 있도록 하는 HTTP 기능을 지원합니다. CORS를 사용하도록 설정하는 경우 CorsRules를 최소 권한으로 유지합니다.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "지나치게 광범위한 CORS 정책 방지",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "미사용 데이터는 항상 서버 쪽에서 암호화되며 클라이언트 쪽에서도 암호화될 수 있습니다. 서버 쪽 암호화는 플랫폼 관리형 키(기본값) 또는 고객 관리형 키를 사용하여 발생할 수 있습니다. 클라이언트 쪽 암호화는 클라이언트가 Azure Storage에 Blob별로 암호화/암호 해독 키를 제공하도록 하거나 클라이언트 쪽에서 암호화를 완전히 처리하여 발생할 수 있습니다. 따라서 기밀 보장을 위해 Azure Storage에 전혀 의존하지 않습니다.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "미사용 데이터를 암호화하는 방법을 결정합니다. 데이터에 대한 스레드 모델을 이해합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "어떤 플랫폼 암호화를 사용해야 하는지 확인합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "클라이언트 쪽 암호화를 사용해야 하는지 여부를 결정합니다.",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "리소스 그래프 탐색기(리소스 | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true)를 활용하여 익명 Blob 액세스를 허용하는 스토리지 계정을 찾습니다.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "공용 Blob 익명 액세스가 필요한지 또는 특정 스토리지 계정에 대해 사용하지 않도록 설정할 수 있는지 여부를 고려합니다. ",
+ "waf": "안전"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "성능 및 안정성 향상을 위해 storagev2 계정 유형 활용",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "높다",
+ "text": "최고의 가용성을 위해 GRS, ZRS 또는 GZRS 스토리지 활용",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "장애 조치(failover) 후 쓰기 작업의 경우 고객 관리 장애 조치(failover)를 사용합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "Microsoft 관리 장애 조치(failover) 세부 정보 이해",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "보통",
+ "text": "일시 삭제 사용",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
+ "service": "Bot service",
+ "severity": "보통",
+ "text": "Azure Bot Service의 안정성 지원 권장 사항을 따릅니다",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
+ "service": "Bot service",
+ "severity": "보통",
+ "text": "로컬 데이터 레지던시 및 지역 규정 준수를 통해 봇 배포Deploying bots with local data residency and regional compliance",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
+ "service": "Bot service",
+ "severity": "보통",
+ "text": "Azure Bot Service는 글로벌 및 지역 서비스 모두에 대해 활성-활성 모드로 실행됩니다. 중단이 발생하면 오류를 감지하거나 서비스를 관리할 필요가 없습니다. Azure Bot Service는 다중 지역 지리적 아키텍처에서 자동 장애 조치(failover) 및 자동 복구를 자동으로 수행합니다. EU 봇 지역 서비스의 경우 Azure Bot Service는 중복성을 보장하기 위해 활성/활성 복제가 있는 유럽 내 두 개의 전체 지역을 제공합니다. 글로벌 봇 서비스의 경우 사용 가능한 모든 지역/지역을 글로벌 공간으로 제공할 수 있습니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "severity": "높다",
+ "text": "비즈니스 및 SLO 요구 사항에 따라 올바른 기능 호스팅 계획을 선택하십시오.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "severity": "높다",
+ "text": "지역적으로 적용 가능한 가용성 영역 활용(소비 계층에는 사용할 수 없음)",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
+ "severity": "보통",
+ "text": "중요한 워크로드에 대한 지역 간 DR 전략 고려",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
+ "severity": "높다",
+ "text": "격리된 환경에 배포하는 경우 ASE(App Service Environment) v3을 사용하거나 마이그레이션합니다",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "Azure Functions",
+ "severity": "높다",
+ "text": "App Service 계획에서 실행되는 모든 함수 앱에 대해 'Always On'이 사용하도록 설정되어 있는지 확인합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
+ "severity": "보통",
+ "text": "함수 앱을 자체 스토리지 계정에 페어링합니다. 긴밀하게 결합되지 않는 한 함수 앱에 대한 스토리지 계정을 다시 사용하지 마세요",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
+ "severity": "보통",
+ "text": "Azure DevOps 또는 GitHub를 활용하여 CI/CD를 간소화하고 함수 앱 코드를 보호합니다.",
+ "waf": "작업"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
+ "text": "Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview 의 데이터 수집 규칙",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
+ "text": "기본 데이터 원본을 찾을 수 없는 백업 인스턴스 확인",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
+ "text": "연결되지 않은 서비스(디스크, NIC, IP 주소 등) 삭제 또는 보관",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
+ "text": "중요 업무용 응용 프로그램에 대한 Site Recovery 저장소와 백업 간의 적절한 균형을 고려합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
+ "text": "40개의 서로 다른 로그 분석 작업 영역 간의 지출 및 절감 기회 확인 - 비프로덕션 작업 영역에 대해 서로 다른 보존 및 데이터 수집 사용-인식 및 계층 크기 조정을 위한 일일 한도 만들기 - 일일 한도를 설정하는 경우 한도에 도달할 때 경고를 만드는 것 외에도 특정 비율(예: 90%)에 도달했을 때 알림을 받을 경고 규칙도 만들어야 합니다. - 가능한 경우 작업 영역 변환 고려 - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
+ "text": "제거 로그 정책 및 자동화 적용(필요한 경우 로그를 콜드 스토리지로 이동할 수 있음)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
+ "text": "디스크가 실제로 필요한지 확인하고, 그렇지 않은 경우 삭제하십시오. 필요한 경우 더 낮은 스토리지 계층을 찾거나 백업을 사용합니다.",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
+ "text": "사용자 지정 규칙을 사용하여 사용하지 않는 스토리지를 하위 계층으로 이동하는 것이 좋습니다 - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
+ "text": "Advisor가 VM 올바른 크기 조정에 대해 구성되어 있는지 확인합니다. ",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "description": "Cost analysys에서 Meter Category Licenses를 검색하여 확인합니다.",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
+ "text": "모든 Windows VM에서 스크립트 실행 https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- Windows VM을 자주 만드는 경우 정책 구현을 고려합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
+ "text": " 이미 라이선스가 있는 경우 AHUB에 넣을 수도 https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
+ "text": "유연성 옵션을 사용하여 예약된 VM 제품군 통합(4-5개 이하의 제품군)",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
+ "text": "Azure Reserved Instances 활용: 이 기능을 사용하면 1년 또는 3년 동안 VM을 예약할 수 있으므로 PAYG 가격에 비해 상당한 비용 절감 효과를 얻을 수 있습니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
+ "text": "더 큰 디스크만 예약할 수 있습니다 => 1TiB -",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
+ "text": "적절한 크기 최적화 후",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Sql/servers",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
+ "text": "적용 가능한 경우 확인 및 정책/변경 https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations 시행",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
+ "text": "VM + 라이선스 부분 할인(ahub + 3YRI)은 약 70% 할인입니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
+ "text": "플랫 사이징보다는 VMSS를 사용하여 수요에 맞추는 것이 좋습니다",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "AKS",
+ "text": "AKS 자동 크기 조정기를 사용하여 클러스터 사용량과 일치시킵니다(Pod 요구 사항이 스케일러와 일치하는지 확인).",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
+ "text": "해당하는 경우 복구 지점을 자격 증명 모음 보관으로 이동(유효성 검사)Move recovery points to vault-archive where applicable (Validate)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Databricks/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
+ "text": "가능한 경우 대체와 함께 스폿 VM을 사용하는 것이 좋습니다. 클러스터의 자동 종료를 고려합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
+ "text": "함수 - 연결 재사용",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
+ "text": "함수 - 로컬에 데이터 캐시",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
+ "text": "기능 - 콜드 스타트 - '패키지에서 실행' 기능을 사용합니다. 이렇게 하면 코드가 단일 zip 파일로 다운로드됩니다. 예를 들어, 이것은 많은 노드 모듈이 있는 Javascript 함수를 크게 개선할 수 있습니다. 언어별 도구를 사용하여 패키지 크기를 줄입니다(예: 트리 쉐이킹 Javascript 애플리케이션).",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
+ "text": "기능 - 기능을 따뜻하게 유지",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
+ "text": "다른 함수와 함께 자동 크기 조정을 사용하는 경우 모든 리소스에 대한 모든 자동 크기 조정을 구동하는 것이 있을 수 있으므로 별도의 소비 계획으로 이동하는 것이 좋습니다(CPU에 대한 더 높은 계획 고려).",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
+ "text": "지정된 계획의 함수 앱은 모두 함께 크기가 조정되므로 크기 조정과 관련된 모든 문제는 계획의 모든 앱에 영향을 줄 수 있습니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
+ "text": "'대기 시간'에 대한 요금이 청구되나요? 이 질문은 일반적으로 비동기 작업을 수행하고 결과를 기다리는 C # 함수 (예 : await Task.Delay(1000) 또는 await client )의 컨텍스트에서 묻습니다. GetAsync('http://google.com')입니다. 대답은 '예'입니다 - GB 초 계산은 함수의 시작 및 종료 시간과 해당 기간 동안의 메모리 사용량을 기반으로 합니다. CPU 작업 측면에서 해당 시간 동안 실제로 발생하는 일은 계산에 포함되지 않습니다. 이 규칙의 한 가지 예외는 지속성 함수를 사용하는 경우입니다. 오케스트레이터 함수에서 대기하는 데 소요된 시간에 대해서는 요금이 청구되지 않습니다.가능한 경우 수요 형성 기술을 적용합니다(개발 환경?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
+ "text": "Frontdoor - 기본 홈페이지 끄기앱의 애플리케이션 설정에서 AzureWebJobsDisableHomepage를 true로 설정합니다. 이렇게 하면 PoP에 204(콘텐츠 없음)가 반환되므로 헤더 데이터만 반환됩니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
+ "text": "Frontdoor 프론트도어 - 아무것도 반환하지 않는 무언가로 라우팅합니다. 함수, 함수 프록시를 설정하거나 WebApp에서 200(정상)을 반환하고 콘텐츠를 보내지 않거나 최소한으로 보내는 경로를 추가합니다. 이것의 장점은 호출될 때 로그아웃할 수 있다는 것입니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
+ "text": "덜 사용되는 데이터에 대한 보관 계층 고려",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
+ "text": "크기가 계층과 일치하지 않는 디스크 크기를 확인합니다(예: 513GiB 디스크는 P30(1TiB)를 지불하고 크기 조정을 고려합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
+ "text": "가능하면 프리미엄 또는 울트라 대신 표준 SSD를 사용하는 것이 좋습니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
+ "text": "스토리지 계정의 경우 선택한 계층이 트랜잭션 요금을 합산하지 않는지 확인합니다(다음 계층으로 이동하는 것이 더 저렴할 수 있음).",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
+ "text": "ASR의 경우 RPO/RTO 및 복제 처리량이 허용하는 경우 표준 SSD 디스크를 사용하는 것이 좋습니다",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
+ "text": "스토리지 계정: 핫 계층 및/또는 GRS 필요 확인",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
+ "text": "디스크 - 모든 곳에서 프리미엄 SSD 디스크 사용의 유효성을 검사합니다. 예를 들어 비프로덕션은 표준 SSD 또는 주문형 프리미엄 SSD로 교환할 수 있습니다. ",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
+ "text": "예산을 만들어 비용을 관리하고 이해 관계자에게 지출 이상 및 초과 지출 위험을 자동으로 알리는 경고를 만듭니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
+ "text": "추가 데이터 분석을 위해 비용 데이터를 스토리지 계정으로 내보냅니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
+ "text": "리소스를 사용하지 않을 때 일시 중지하여 전용 SQL 풀에 대한 비용을 제어합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
+ "text": "서버리스 Apache Spark 자동 일시 중지 기능을 활성화하고 그에 따라 제한 시간 값을 설정합니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
+ "text": "다양한 크기의 Apache Spark 풀 정의를 여러 개 만듭니다.",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
+ "text": "사전 구매 플랜으로 1년 동안 Azure Synapse SCU(커밋 단위)를 구매하여 Azure Synapse Analytics 비용을 절감하세요.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
+ "text": "인터럽트 가능한 작업에 스폿 VM 사용: 할인된 가격으로 입찰 및 구매할 수 있는 VM으로, 중요하지 않은 워크로드에 비용 효율적인 솔루션을 제공합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
+ "text": "모든 VM의 적절한 크기 조정",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
+ "text": "VM 크기를 정규화된 최신 크기로 바꾸기",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "적절한 크기 조정 VM - 사용량을 5% 미만으로 모니터링하는 것으로 시작한 다음 최대 40%까지 작업",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "애플리케이션을 컨테이너화하면 VM 밀도를 개선하고 확장 비용을 절감할 수 있습니다",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "비용"
+ },
+ {
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
+ "severity": "보통",
+ "text": "Azure Data Factory에 대한 FTA 복원력 플레이북 활용",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "높다",
+ "text": "가용성 영역을 지원하는 지역에서 영역 중복 파이프라인 사용Use zone redundant pipelines in regions that support Availability Zones",
+ "waf": "신뢰도"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
- "severity": "높다",
- "text": "Azure Cache for Redis에 대한 영역 중복성을 사용하도록 설정합니다. Azure Cache for Redis는 프리미엄 및 엔터프라이즈 계층에서 영역 중복 구성을 지원합니다. 영역 중복 캐시는 동일한 지역의 여러 Azure 가용성 영역에 노드를 배치할 수 있습니다. 데이터 센터 또는 AZ 중단을 단일 장애 지점으로 제거하고 캐시의 전반적인 가용성을 높입니다.",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
+ "severity": "보통",
+ "text": "DevOps를 사용하여 Github/Azure DevOps 통합으로 ARM 템플릿 백업 ",
"waf": "신뢰도"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"severity": "보통",
- "text": "Azure Cache for Redis 인스턴스에 대한 데이터 지속성을 구성합니다. 캐시 데이터는 메모리에 저장되기 때문에 드물게 계획되지 않은 여러 노드의 오류로 인해 모든 데이터가 삭제될 수 있습니다. 데이터가 완전히 손실되는 것을 방지하기 위해 Redis 지속성을 사용하면 메모리 내 데이터의 주기적인 스냅숏을 만들어 저장소 계정에 저장할 수 있습니다.",
+ "text": "다른 지역에서 자체 호스팅 통합 런타임 VM을 복제해야 합니다. ",
"waf": "신뢰도"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"severity": "보통",
- "text": "지역 중복 스토리지 계정을 사용하여 Azure Cache for Redis 데이터를 유지하거나 지역 중복을 사용할 수 없는 경우 영역 중복을 유지합니다",
+ "text": "자매 지역에서 네트워크를 복제하거나 복제해야 합니다. 다른 지역에서 Vnet의 복사본을 만들어야 합니다",
"waf": "신뢰도"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "description": "ADF 파이프라인에서 Key Vault를 사용하는 경우 Key Vault를 복제하기 위해 아무 작업도 수행할 필요가 없습니다. Key Vault는 관리되는 서비스이며 Microsoft에서 처리합니다",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
+ "severity": "낮다",
+ "text": "Keyvault 통합을 사용하는 경우 Keyvault의 SLA를 사용하여 가용성을 파악합니다",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
"severity": "보통",
- "text": "프리미엄 Azure Cache for Redis 인스턴스에 대한 수동 지역 복제를 구성합니다. 지역에서 복제는 일반적으로 두 개의 Azure 지역에 걸쳐 있는 둘 이상의 Azure Cache for Redis 인스턴스를 연결하는 메커니즘입니다. 지역에서 복제는 주로 지역 간 재해 복구를 위해 설계되었습니다. 두 개의 프리미엄 계층 캐시 인스턴스는 주 캐시에 대한 읽기 및 쓰기를 제공하는 방식으로 지역 복제를 통해 연결되며, 해당 데이터는 보조 캐시에 복제됩니다.",
+ "text": "다중 지역 애플리케이션 랜딩 존 및 재해 복구 시나리오를 신속하게 지원할 수 있도록 여러 지역에 Azure 랜딩 존 연결 리소스를 배포합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "신뢰도"
},
{
@@ -6161,6 +8119,7 @@
"service": "Entra",
"severity": "보통",
"text": "다중 테넌트에 대한 명확한 규정 또는 비즈니스 요구 사항이 없는 한 Azure 리소스를 관리하기 위해 하나의 Entra 테넌트를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "작업"
},
{
@@ -6169,7 +8128,8 @@
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
"service": "Entra",
"severity": "낮다",
- "text": "Microsoft Entra ID 테넌트를 관리하기 위한 다중 테넌트 자동화 접근 방식이 있는지 확인합니다.",
+ "text": "다중 테넌트 자동화 접근 방식을 사용하여 Microsoft Entra ID 테넌트를 관리합니다.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "작업"
},
{
@@ -6177,8 +8137,9 @@
"guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
"service": "Entra",
- "severity": "낮다",
- "text": "다중 테넌트 관리를 위해 Azure Lighthouse 활용",
+ "severity": "높다",
+ "text": "동일한 ID로 다중 테넌트 관리에 Azure Lighthouse를 사용합니다.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
"waf": "작업"
},
{
@@ -6186,29 +8147,28 @@
"guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
"service": "Entra",
- "severity": "보통",
- "text": "Azure Lighthouse가 파트너별로 테넌트를 관리하는 데 사용되는지 확인합니다.",
+ "severity": "높다",
+ "text": "파트너에게 테넌트를 관리할 수 있는 액세스 권한을 부여하는 경우 Azure Lighthouse를 사용합니다.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
"waf": "비용"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "348ef254-c27d-442e-abba-c7571559ab91",
"link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
"service": "Entra",
"severity": "높다",
- "text": "클라우드 운영 모델에 맞는 RBAC 모델을 적용합니다. 관리 그룹 및 구독에서 범위 지정 및 할당Scope and Assign across Management Groups and Subscriptions.",
+ "text": "클라우드 운영 모델에 맞는 RBAC 모델을 적용합니다. 관리 그룹 및 구독에서 범위를 지정하고 할당합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
"service": "Entra",
- "severity": "높다",
- "text": "모든 계정 유형에 대해 인증 유형 회사 또는 학교 계정만 사용합니다. Microsoft 계정 사용 금지",
+ "severity": "보통",
+ "text": "모든 계정 유형에 대해 회사 또는 학교 계정 인증 유형만 사용합니다. Microsoft 계정을 사용하지 마십시오.",
"training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "안전"
},
@@ -6218,7 +8178,7 @@
"link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
"service": "Entra",
"severity": "보통",
- "text": "그룹만 사용하여 권한을 할당합니다. 그룹 관리 시스템이 이미 있는 경우 Entra ID 전용 그룹에 온-프레미스 그룹을 추가합니다.",
+ "text": "그룹만 사용하여 사용 권한을 할당합니다. 그룹 관리 시스템이 이미 있는 경우 Entra ID 전용 그룹에 온-프레미스 그룹을 추가합니다.",
"training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "안전"
},
@@ -6227,20 +8187,19 @@
"guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
"link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
"service": "Entra",
- "severity": "낮다",
- "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 Microsoft Entra ID 조건부 액세스 정책 적용",
+ "severity": "높다",
+ "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 Microsoft Entra ID 조건부 액세스 정책을 적용합니다.",
"training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "안전"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
"link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
"service": "Entra",
"severity": "높다",
- "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 다단계 인증 적용",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "text": "Azure 환경에 대한 권한이 있는 모든 사용자에 대해 다단계 인증을 적용합니다.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "안전"
},
{
@@ -6249,27 +8208,39 @@
"link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
"service": "Entra",
"severity": "보통",
- "text": "Microsoft Entra ID PIM(Privileged Identity Management)을 적용하여 제로 스탠딩 액세스 및 최소 권한 설정",
+ "text": "Microsoft Entra ID PIM(Privileged Identity Management)을 적용하여 제로 스탠딩 액세스 및 최소 권한을 설정합니다.",
"training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "안전"
},
{
"checklist": "Azure Landing Zone Review",
"guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
"service": "Entra",
"severity": "보통",
- "text": "Active Directory 도메인 서비스에서 Entra 도메인 서비스로 전환하려는 경우 모든 워크로드의 호환성을 평가합니다",
+ "text": "Active Directory Domain Services에서 Entra Domain Services로 전환하려는 경우 모든 워크로드의 호환성을 평가합니다.",
"training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
"waf": "안전"
},
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
+ "severity": "보통",
+ "text": "Microsoft Entra Domain Services를 사용하는 경우 복제본 세트를 사용합니다. 복제본 세트는 관리되는 도메인의 복원력을 향상시키고 추가 지역에 배포할 수 있도록 합니다. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "신뢰도"
+ },
{
"checklist": "Azure Landing Zone Review",
"guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
"link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
"service": "Entra",
"severity": "보통",
- "text": "Microsoft Entra ID 로그를 플랫폼 중앙 Azure Monitor와 통합합니다. Azure Monitor를 사용하면 Azure의 로그 및 모니터링 데이터에 대한 단일 정보 원본을 사용할 수 있으므로 조직에 로그 수집 및 보존에 대한 요구 사항을 충족할 수 있는 클라우드 네이티브 옵션을 제공합니다.",
+ "text": "Microsoft Entra ID 로그를 플랫폼 중앙 Azure Monitor와 통합합니다. Azure Monitor는 Azure의 로그 및 모니터링 데이터에 대한 단일 정보 소스를 허용하여 조직에 로그 수집 및 보존에 대한 요구 사항을 충족할 수 있는 클라우드 네이티브 옵션을 제공합니다.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "안전"
},
{
@@ -6279,8 +8250,8 @@
"link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
"service": "Entra",
"severity": "높다",
- "text": "테넌트 전체 계정 잠금을 방지하기 위해 긴급 액세스 또는 비상 계정을 구현합니다",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "응급 액세스 또는 비상 계정을 구현하여 테넌트 전체 계정 잠금을 방지합니다. MFA는 2024년 10월에 모든 사용자에 대해 기본적으로 설정됩니다. 암호 키(FIDO2)를 사용하거나 MFA에 대한 인증서 기반 인증을 구성하도록 이러한 계정을 업데이트하는 것이 좋습니다. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "안전"
},
{
@@ -6289,7 +8260,7 @@
"link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
"service": "Entra",
"severity": "보통",
- "text": "Microsoft Entra ID 역할 할당에 온-프레미스 동기화된 계정을 사용하지 마세요.",
+ "text": "특별히 필요한 시나리오가 없는 한 Microsoft Entra ID 역할 할당에 온-프레미스 동기화 계정을 사용하지 마세요.",
"training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "안전"
},
@@ -6299,47 +8270,51 @@
"link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
"service": "Entra",
"severity": "보통",
- "text": "필요한 경우 Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 내부 애플리케이션(클라우드 또는 온-프레미스에서 호스트됨)에 대한 안전하고 인증된 액세스를 제공합니다.",
+ "text": "Microsoft Entra ID 애플리케이션 프록시를 사용하여 원격 사용자에게 애플리케이션에 대한 액세스 권한을 부여하는 경우 테넌트당 하나의 인스턴스만 가질 수 있으므로 플랫폼 리소스로 관리합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
"service": "VNet",
"severity": "보통",
- "text": "최대한의 유연성이 필요한 네트워크 시나리오를 위해 기존의 허브 앤 스포크(hub-and-spoke) 네트워크 토폴로지를 기반으로 하는 네트워크 설계를 활용합니다.",
+ "text": "최대한의 유연성이 필요한 네트워크 시나리오에는 허브 및 스포크(hub-and-spoke) 네트워크 토폴로지를 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
"service": "VNet",
"severity": "높다",
- "text": "ExpressRoute 게이트웨이, VPN 게이트웨이 및 Azure Firewall 또는 중앙 허브 가상 네트워크의 파트너 NVA를 포함한 공유 네트워킹 서비스를 확인합니다. 필요한 경우 DNS 서버도 배포합니다.",
+ "text": "ExpressRoute 게이트웨이, VPN 게이트웨이 및 Azure Firewall 또는 파트너 NVA를 포함한 공유 네트워킹 서비스를 중앙 허브 가상 네트워크에 배포합니다. 필요한 경우 DNS 서비스도 배포합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "비용"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "VNet",
- "severity": "보통",
+ "severity": "높다",
"text": "애플리케이션 랜딩 존의 모든 공용 IP 주소에 대해 DDoS 네트워크 또는 IP 보호 계획을 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
"link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
"service": "NVA",
"severity": "보통",
- "text": "파트너 네트워킹 기술 또는 NVA를 배포할 때 파트너 공급업체의 지침을 따릅니다",
+ "text": "파트너 네트워킹 기술 또는 NVA를 배포할 때 파트너 공급업체의 지침을 따릅니다.",
"waf": "신뢰도"
},
{
@@ -6350,9 +8325,11 @@
"service": "ExpressRoute",
"severity": "낮다",
"text": "허브 및 스포크 시나리오에서 ExpressRoute와 VPN 게이트웨이 간의 전송이 필요한 경우 Azure Route Server를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/virtualHubs",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
"guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
@@ -6360,19 +8337,22 @@
"service": "ARS",
"severity": "낮다",
"text": "Route Server를 사용하는 경우 Route Server 서브넷에 /27 접두사를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
"service": "VNet",
"severity": "보통",
- "text": "Azure 지역에 걸쳐 여러 허브 및 스포크 토폴로지가 있는 네트워크 아키텍처의 경우 허브 VNet 간에 글로벌 가상 네트워크 피어링을 사용하여 지역을 서로 연결합니다.",
+ "text": "Azure 지역 간에 여러 허브 및 스포크 토폴로지가 있는 네트워크 아키텍처의 경우 허브 VNet 간의 글로벌 가상 네트워크 피어링을 사용하여 지역을 서로 연결합니다.",
"training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
"link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
@@ -6383,34 +8363,59 @@
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
"guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "보통",
- "text": "스포크 가상 네트워크를 중앙 허브 가상 네트워크에 연결할 때 ExpressRoute를 통해 보급할 수 있는 최대 접두사 수(1000)인 VNet 피어링 제한(500)을 고려합니다",
+ "text": "한 지역에 400개 이상의 스포크 네트워크가 있는 경우 VNet 피어링 제한(500) 및 ExpressRoute를 통해 보급할 수 있는 최대 접두사 수(1000)를 우회하기 위해 추가 허브를 배포합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "신뢰도"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
"guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
"service": "VNet",
"severity": "보통",
- "text": "경로 테이블당 경로 제한(400)을 고려합니다.",
+ "text": "경로 테이블당 경로 수를 400개로 제한합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "신뢰도"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
"guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
"service": "VNet",
"severity": "높다",
- "text": "VNet 피어링을 구성할 때 '원격 가상 네트워크에 대한 트래픽 허용' 설정을 사용합니다",
+ "text": "VNet 피어링을 구성할 때 '원격 가상 네트워크에 대한 트래픽 허용' 설정을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "신뢰도"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "높다",
+ "text": "영역 중복 배포와 함께 표준 Load Balancer SKU를 사용하는 경우 표준 SKU Load Balancer를 선택하면 가용성 영역 및 영역 복원력을 통해 안정성이 향상되어 배포가 영역 및 지역 오류를 견딜 수 있습니다. Basic과 달리 전역 부하 분산을 지원하고 SLA를 제공합니다.",
+ "waf": "신뢰도"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "높다",
+ "text": "부하 분산 장치 백 엔드 풀에 두 개 이상의 인스턴스가 포함되어 있는지 확인하고, 백 엔드에 두 개 이상의 인스턴스를 사용하여 Azure Load Balancer를 배포하면 단일 실패 지점을 방지하고 확장성을 지원할 수 있습니다.",
"waf": "신뢰도"
},
{
@@ -6421,21 +8426,21 @@
"service": "ExpressRoute",
"severity": "보통",
"text": "ExpressRoute Direct를 사용하는 경우 조직의 라우터와 MSEE 간의 계층 2 수준에서 트래픽을 암호화하도록 MACsec을 구성합니다. 다이어그램은 흐름에서 이 암호화를 보여 줍니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "안전"
},
{
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
"service": "ExpressRoute",
- "severity": "낮다",
- "text": "MACsec을 사용할 수 없는 시나리오(예: ExpressRoute Direct를 사용하지 않는 경우)의 경우 VPN Gateway를 사용하여 ExpressRoute 개인 피어링을 통해 IPsec 터널을 설정합니다.",
+ "severity": "보통",
+ "text": "MACsec을 사용할 수 없는 시나리오(예: ExpressRoute Direct를 사용하지 않음)의 경우 VPN Gateway를 사용하여 ExpressRoute 개인 피어링을 통해 IPsec 터널을 설정합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "안전"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "558fd772-49b8-4211-82df-27ee412e7f98",
@@ -6447,18 +8452,19 @@
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
"guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "VNet",
- "severity": "낮다",
- "text": "개인 인터넷에 대한 주소 할당 범위의 IP 주소를 사용합니다(RFC 1918).",
+ "severity": "보통",
+ "text": "개인 인터넷(RFC 1918)에 대한 주소 할당 범위의 IP 주소를 사용합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
"guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
@@ -6470,47 +8476,62 @@
"waf": "공연"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
"link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
"service": "VNet",
"severity": "높다",
- "text": "프로덕션 및 DR 사이트에 겹치는 IP 주소 범위를 사용하지 마십시오.",
+ "text": "프로덕션 및 재해 복구 사이트에 대해 겹치는 IP 주소 범위를 사용하지 마세요.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "신뢰도"
},
{
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "높다",
+ "text": "해당하는 경우 표준 SKU 및 영역 중복 IP를 사용하며, Azure의 공용 IP 주소는 비영역, 영역 또는 영역 중복으로 사용할 수 있는 표준 SKU일 수 있습니다. 영역 중복 IP는 모든 영역에서 액세스할 수 있으므로 단일 영역 오류에 저항하여 더 높은 복원력을 제공합니다. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
"service": "DNS",
"severity": "보통",
- "text": "Azure에서 이름 확인만 필요한 환경의 경우 이름 확인을 위해 위임된 영역(예: 'azure.contoso.com')을 사용하여 확인을 위해 Azure 프라이빗 DNS를 사용합니다.",
+ "text": "Azure의 이름 확인만 필요한 환경의 경우 이름 확인을 위해 위임된 영역(예: 'azure.contoso.com')을 사용하여 Azure 프라이빗 DNS를 확인합니다.",
"training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
"link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
"service": "DNS",
"severity": "보통",
- "text": "Azure 및 온-프레미스에서 이름 확인이 필요한 환경의 경우 Azure DNS Private Resolver를 사용하는 것이 좋습니다.",
+ "text": "Azure 및 온-프레미스에서 이름 확인이 필요하고 Active Directory와 같은 기존 엔터프라이즈 DNS 서비스가 없는 환경의 경우 Azure DNS Private Resolver를 사용하여 DNS 요청을 Azure 또는 온-프레미스 DNS 서버로 라우팅합니다.",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
"service": "DNS",
"severity": "낮다",
"text": "자체 DNS(예: Red Hat OpenShift)를 요구하고 배포하는 특수 워크로드는 선호하는 DNS 솔루션을 사용해야 합니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "작업"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
"guid": "614658d3-558f-4d77-849b-821112df27ee",
"link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
@@ -6521,15 +8542,29 @@
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
+ "severity": "보통",
+ "text": "여러 Azure 지역 간의 DNS 확인을 관리하기 위한 계획과 서비스가 다른 지역으로 장애 조치(failover)되는 경우 계획 구현",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "microsoft.network/bastionHosts",
"checklist": "Azure Landing Zone Review",
"guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
"link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
"service": "Bastion",
"severity": "보통",
- "text": "Azure Bastion을 사용하여 네트워크에 안전하게 연결하는 것이 좋습니다.",
+ "text": "Azure Bastion을 사용하여 네트워크에 안전하게 연결합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "안전"
},
{
+ "arm-service": "microsoft.network/bastionHosts",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
"guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
@@ -6537,19 +8572,22 @@
"service": "Bastion",
"severity": "보통",
"text": "서브넷 /26 이상에서 Azure Bastion을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "안전"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "WAF",
"severity": "보통",
- "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역에서 전역 보호를 제공합니다.",
+ "text": "Azure Front Door 및 WAF 정책을 사용하여 랜딩 존에 대한 인바운드 HTTP/S 연결을 위해 Azure 지역 전체에서 글로벌 보호를 제공합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "안전"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
@@ -6560,39 +8598,40 @@
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "WAF",
"severity": "높다",
- "text": "WAF 및 기타 역방향 프록시 배포는 인바운드 HTTP/S 연결에 필요하며, 랜딩 존 가상 네트워크 내에 배포하고 보호하고 인터넷에 노출하는 앱과 함께 배포합니다.",
+ "text": "인바운드 HTTP/S 연결에 WAF 및 기타 역방향 프록시가 필요한 경우 랜딩 존 가상 네트워크 내에 배포하고 보호하고 인터넷에 노출하는 앱과 함께 배포합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
"service": "VNet",
"severity": "높다",
- "text": "Azure DDoS 네트워크 또는 IP 보호 계획을 사용하여 가상 네트워크 내에서 공용 IP 주소 엔드포인트를 보호할 수 있습니다.",
+ "text": "Azure DDoS 네트워크 또는 IP 보호 계획을 사용하여 가상 네트워크 내의 공용 IP 주소 엔드포인트를 보호할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "b034c01e-110b-463a-b36e-e3346e57f225",
"link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
"service": "VNet",
"severity": "높다",
- "text": "예정된 호환성이 손상되는 변경 전에 네트워크 아웃바운드 트래픽 구성 및 전략을 평가하고 검토합니다. 2025년 9월 30일에 새 배포에 대한 기본 아웃바운드 액세스가 사용 중지되고 명시적 액세스 구성만 허용됩니다",
+ "text": "예정된 호환성이 손상되는 변경 전에 네트워크 아웃바운드 트래픽 구성 및 전략을 관리하는 방법을 계획합니다. 2025년 9월 30일에 새 배포에 대한 기본 아웃바운드 액세스가 사용 중지되고 명시적 액세스 구성만 허용됩니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "신뢰도"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
"link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
@@ -6602,14 +8641,25 @@
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "높다",
+ "text": "Virtual Machines에 직접 연결된 공용 IP 주소를 거부하는 정책 할당이 있는지 확인합니다. 특정 VM에서 공용 IP가 필요한 경우 제외를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "안전"
+ },
{
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
"service": "ExpressRoute",
"severity": "보통",
- "text": "ExpressRoute를 Azure에 대한 기본 연결로 사용할 수 있는지 조사했는지 확인합니다.",
+ "text": "ExpressRoute를 Azure에 대한 기본 연결로 사용합니다. VPN을 백업 연결의 소스로 사용합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "공연"
},
@@ -6621,7 +8671,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
"service": "ExpressRoute",
"severity": "보통",
- "text": "여러 ExpressRoute 회로 또는 여러 온-프레미스 위치를 사용하는 경우 특정 경로를 선호하는 경우 BGP 특성을 사용하여 라우팅을 최적화해야 합니다.",
+ "text": "여러 ExpressRoute 회로 또는 여러 온-프레미스 위치를 사용하는 경우 BGP 특성을 사용하여 라우팅을 최적화합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
@@ -6630,15 +8680,14 @@
"checklist": "Azure Landing Zone Review",
"graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
"guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
"service": "ExpressRoute",
"severity": "보통",
- "text": "대역폭 및 성능 요구 사항에 따라 ExpressRoute/VPN 게이트웨이에 적합한 SKU를 사용하고 있는지 확인합니다.",
+ "text": "대역폭 및 성능 요구 사항에 따라 ExpressRoute/VPN 게이트웨이에 적합한 SKU를 선택합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "공연"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
@@ -6646,11 +8695,11 @@
"link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
"service": "ExpressRoute",
"severity": "높다",
- "text": "비용을 정당화하는 대역폭에 도달하는 경우에만 무제한 데이터 ExpressRoute 회로를 사용해야 합니다.",
+ "text": "비용을 정당화하는 대역폭에 도달하는 경우에만 무제한 데이터 ExpressRoute 회로를 사용하고 있는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "비용"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
@@ -6658,7 +8707,8 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
"service": "ExpressRoute",
"severity": "높다",
- "text": "회로의 피어링 위치가 로컬 SKU에 대한 Azure 지역을 지원하는 경우 ExpressRoute의 로컬 SKU를 활용하여 회로 비용을 줄입니다.",
+ "text": "회로 피어링 위치가 로컬 SKU에 대한 Azure 지역을 지원하는 경우 ExpressRoute의 로컬 SKU를 활용하여 회로 비용을 줄입니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "비용"
},
{
@@ -6691,24 +8741,24 @@
"link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
"service": "ExpressRoute",
"severity": "보통",
- "text": "짧은 대기 시간이 필요하거나 온-프레미스에서 Azure로의 처리량이 10Gbps보다 커야 하는 경우 FastPath를 사용하여 데이터 경로에서 ExpressRoute 게이트웨이를 우회합니다.",
+ "text": "짧은 대기 시간이 필요하거나 온-프레미스에서 Azure로의 처리량이 10Gbps보다 커야 하는 경우 FastPath를 사용하여 데이터 경로에서 ExpressRoute 게이트웨이를 우회할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "공연"
},
{
- "arm-service": "microsoft.network/vpnGateways",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
"guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
"link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
"service": "VPN",
"severity": "보통",
- "text": "영역 중복 VPN Gateway를 사용하여 분기 또는 원격 위치를 Azure(사용 가능한 경우)에 연결합니다.",
+ "text": "영역 중복 VPN 게이트웨이를 사용하여 분기 또는 원격 위치를 Azure(사용 가능한 경우)에 연결합니다.",
"training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "신뢰도"
},
{
- "arm-service": "microsoft.network/vpnGateways",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
"checklist": "Azure Landing Zone Review",
"guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
"link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
@@ -6719,14 +8769,13 @@
"waf": "신뢰도"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "718cb437-b060-2589-8856-2e93a5c6633b",
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
"service": "ExpressRoute",
"severity": "높다",
- "text": "ExpressRoute Direct를 사용하는 경우 비용을 절감하기 위해 로컬 Azure 지역에 대한 ExpressRoute 로컬 회로를 사용하는 것이 좋습니다",
+ "text": "ExpressRoute Direct를 사용하는 경우 비용을 절감하기 위해 로컬 Azure 지역에 대한 ExpressRoute 로컬 회로를 사용하는 것이 좋습니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "비용"
},
@@ -6737,7 +8786,7 @@
"link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
"service": "ExpressRoute",
"severity": "보통",
- "text": "트래픽 격리 또는 전용 대역폭이 필요한 경우(예: 프로덕션 환경과 비프로덕션 환경을 분리하기 위해) 다른 ExpressRoute 회로를 사용합니다. 격리된 라우팅 도메인을 보장하고 시끄러운 이웃 위험을 완화하는 데 도움이 됩니다.",
+ "text": "트래픽 격리 또는 전용 대역폭이 필요한 경우(예: 프로덕션 환경과 비프로덕션 환경을 분리하기 위해) 다른 ExpressRoute 회로를 사용합니다. 이는 격리된 라우팅 도메인을 보장하고 시끄러운 이웃 위험을 완화하는 데 도움이 됩니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "안전"
},
@@ -6759,7 +8808,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
"service": "ExpressRoute",
"severity": "보통",
- "text": "네트워크 전체, 특히 온-프레미스와 Azure 간의 연결을 모니터링하려면 연결 모니터를 사용합니다.",
+ "text": "네트워크를 통한 연결, 특히 온-프레미스와 Azure 간의 연결을 모니터링하기 위해 연결 모니터를 사용합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "작업"
},
@@ -6768,7 +8817,7 @@
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
"guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
"service": "ExpressRoute",
"severity": "보통",
"text": "중복성을 위해 서로 다른 피어링 위치의 ExpressRoute 회로를 사용합니다.",
@@ -6782,11 +8831,11 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
"service": "ExpressRoute",
"severity": "보통",
- "text": "특히 단일 ExpressRoute 회로만 사용하는 경우 사이트 간 VPN을 ExpressRoute의 장애 조치(failover)로 사용합니다.",
+ "text": "단일 ExpressRoute 회로만 사용하는 경우 사이트 간 VPN을 ExpressRoute의 장애 조치(failover)로 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
@@ -6798,14 +8847,14 @@
"waf": "신뢰도"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "d581a947-69a2-4783-942e-9df3664324c8",
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
"service": "ExpressRoute",
"severity": "높다",
- "text": "ExpressRoute를 사용하는 경우 온-프레미스 라우팅은 동적이어야 하며, 연결 오류가 발생할 경우 회로의 나머지 연결로 수렴되어야 합니다. 로드는 두 연결 모두에서 이상적으로는 액티브/액티브로 공유되어야 하지만 액티브/패시브도 지원됩니다.",
+ "text": "ExpressRoute를 사용하는 경우 온-프레미스 라우팅은 동적이어야 하며, 연결 오류가 발생할 경우 회로의 나머지 연결로 수렴해야 합니다. 로드는 두 연결 모두에서 액티브/액티브로 이상적으로 공유되어야 하지만 액티브/패시브도 지원됩니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
{
@@ -6837,7 +8886,7 @@
"link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
"service": "ExpressRoute",
"severity": "높다",
- "text": "복원력을 높이기 위해 서로 다른 피어링 위치에서 둘 이상의 회로에 ExpressRoute 게이트웨이를 연결합니다.",
+ "text": "복원력을 높이기 위해 ExpressRoute 게이트웨이를 서로 다른 피어링 위치에서 둘 이상의 회로에 연결합니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "신뢰도"
},
@@ -6864,20 +8913,30 @@
"waf": "공연"
},
{
- "ammp": true,
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "낮다",
+ "text": "검사를 위해 Azure 트래픽을 하이브리드 위치로 보내지 마세요. 대신 'Azure의 트래픽이 Azure에 유지' 원칙을 따라 Azure의 리소스 간 통신이 Microsoft 백본 네트워크를 통해 발생하도록 합니다.",
+ "waf": "공연"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
"service": "Firewall",
"severity": "높다",
- "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다",
+ "text": "Azure Firewall을 사용하여 인터넷에 대한 Azure 아웃바운드 트래픽, 비 HTTP/S 인바운드 연결 및 East/West 트래픽 필터링(조직에 필요한 경우)을 제어합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
"service": "Firewall",
"severity": "보통",
"text": "글로벌 Azure Firewall 정책을 만들어 글로벌 네트워크 환경에서 보안 태세를 제어하고 모든 Azure Firewall 인스턴스에 할당합니다. Azure 역할 기반 액세스 제어를 통해 증분 방화벽 정책을 로컬 보안 팀에 위임하여 특정 지역의 요구 사항을 충족하는 세분화된 정책을 허용합니다.",
@@ -6885,50 +8944,53 @@
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
"link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
"service": "Firewall",
"severity": "낮다",
- "text": "조직에서 이러한 솔루션을 사용하여 아웃바운드 연결을 보호하려는 경우 Firewall Manager 내에서 지원되는 파트너 SaaS 보안 공급자를 구성합니다.",
+ "text": "조직에서 아웃바운드 연결을 보호하기 위해 이러한 솔루션을 사용하려는 경우 Firewall Manager 내에서 지원되는 파트너 SaaS 보안 공급자를 구성합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
"guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
"link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
"service": "Firewall",
"severity": "높다",
- "text": "FQDN 기반 네트워크 규칙 및 DNS 프록시와 함께 Azure Firewall을 사용하여 애플리케이션 규칙에서 지원하지 않는 프로토콜을 통해 인터넷으로의 송신 트래픽을 필터링합니다.",
+ "text": "응용 프로그램 규칙을 사용하여 지원되는 프로토콜에 대한 대상 호스트 이름에서 아웃바운드 트래픽을 필터링합니다. FQDN 기반 네트워크 규칙 및 DNS 프록시와 함께 Azure Firewall을 사용하여 다른 프로토콜을 통해 인터넷으로의 송신 트래픽을 필터링합니다.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
"guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
"link": "https://learn.microsoft.com/azure/firewall/premium-features",
"service": "Firewall",
"severity": "높다",
- "text": "추가 보안 및 보호를 위해 Azure Firewall 프리미엄을 사용합니다.",
+ "text": "Azure Firewall 프리미엄을 사용하여 추가 보안 기능을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
"guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
"service": "Firewall",
"severity": "높다",
"text": "추가 보호를 위해 Azure Firewall 위협 인텔리전스 모드를 경고 및 거부로 구성합니다.",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
"guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
@@ -6936,21 +8998,22 @@
"service": "Firewall",
"severity": "높다",
"text": "추가 보호를 위해 Azure Firewall IDPS 모드를 거부로 구성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
"guid": "a3784907-9836-4271-aafc-93535f8ec08b",
"link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
"service": "Firewall",
"severity": "높다",
- "text": "Virtual WAN에 연결되지 않은 VNet의 서브넷의 경우 인터넷 트래픽이 Azure Firewall 또는 네트워크 가상 어플라이언스로 리디렉션되도록 경로 테이블을 연결합니다",
+ "text": "Virtual WAN에 연결되지 않은 VNet의 서브넷의 경우 인터넷 트래픽이 Azure Firewall 또는 네트워크 가상 어플라이언스로 리디렉션되도록 경로 테이블을 연결합니다.",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "715d833d-4708-4527-90ac-1b142c7045ba",
"link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
@@ -6961,7 +9024,7 @@
"waf": "작업"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
"link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
@@ -6972,7 +9035,7 @@
"waf": "작업"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
"guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
@@ -6980,54 +9043,64 @@
"service": "Firewall",
"severity": "높다",
"text": "Azure Firewall 서브넷에 /26 접두사를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
"link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
"service": "Firewall",
"severity": "보통",
- "text": "방화벽 정책 내의 규칙을 Rule Collection Groups(규칙 컬렉션 그룹) 및 Rule Collections(규칙 컬렉션)로 정렬하고 사용 빈도에 따라 정렬합니다",
+ "text": "방화벽 정책 내의 규칙을 Rule Collection Groups(규칙 수집 그룹) 및 Rule Collections(규칙 컬렉션)로 정렬하고 사용 빈도에 따라 정렬합니다.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
"link": "https://learn.microsoft.com/azure/firewall/ip-groups",
"service": "Firewall",
"severity": "보통",
- "text": "IP 그룹 또는 IP 접두사를 사용하여 IP 테이블 규칙 수 줄이기",
+ "text": "IP 그룹 또는 IP 접두사를 사용하여 IP 테이블 규칙의 수를 줄입니다.",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
"link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
"service": "Firewall",
"severity": "보통",
- "text": "와일드카드를 DNAT의 소스 IP로 사용하지 않으려면 * 또는 any와 같이 수신 DNAT에 대한 소스 IP를 지정해야 합니다",
+ "text": "와일드카드를 DNAT의 소스 IP로 사용하지 마십시오(예: * 또는 any). 들어오는 DNAT에 대한 소스 IP를 지정해야 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
"service": "Firewall",
"severity": "보통",
- "text": "SNAT 포트 사용량을 모니터링하고, NAT 게이트웨이 설정을 평가하고, 원활한 장애 조치(failover)를 보장하여 SNAT 포트 소모를 방지합니다. 포트 수가 제한에 가까워지면 SNAT 소모가 임박했다는 신호입니다.",
+ "text": "SNAT 포트 사용량을 모니터링하고, NAT 게이트웨이 설정을 평가하고, 원활한 장애 조치(failover)를 보장하여 SNAT 포트 고갈을 방지합니다. 포트 수가 제한에 가까워지면 SNAT 고갈이 임박했을 수 있다는 신호입니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "346840b8-1064-496e-8396-4b1340172d52",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
"service": "Firewall",
"severity": "높다",
- "text": "TLS 검사 활성화",
+ "text": "Azure Firewall 프리미엄을 사용하는 경우 TLS 검사를 사용하도록 설정합니다.",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
"link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
@@ -7037,58 +9110,81 @@
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
"link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
"service": "Firewall",
"severity": "보통",
- "text": "TLS 검사의 일환으로 검사를 위해 Azure App Gateway에서 트래픽을 수신하도록 계획합니다.",
+ "text": "TLS 검사의 일환으로 검사를 위해 Azure App Gateway에서 트래픽 수신을 계획합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
"waf": "공연"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
"guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
"link": "https://learn.microsoft.com/azure/firewall/dns-details",
"service": "Firewall",
"severity": "보통",
- "text": "Azure Firewall DNS 프록시 구성 사용 ",
- "waf": "안전"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
- "severity": "보통",
- "text": "Virtual Machines에 직접 연결된 공용 IP 주소를 거부하는 정책 할당이 있는지 확인합니다.",
+ "text": "Azure Firewall DNS 프록시 구성을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
"link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
"service": "Firewall",
- "severity": "낮다",
- "text": "Azure Firewall을 Azure Monitor와 통합하고 진단 로깅을 사용하도록 설정하여 방화벽 로그를 저장하고 분석합니다.",
+ "severity": "높다",
+ "text": "Azure Firewall을 Azure Monitor와 통합하고 진단 로깅을 사용하도록 설정하여 방화벽 로그 및 메트릭을 저장하고 분석합니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
"link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
"service": "Firewall",
"severity": "낮다",
- "text": "방화벽 규칙에 대한 백업 구현",
+ "text": "방화벽 규칙에 대한 백업 구현Implement backups for your firewall rules",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
"waf": "작업"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
+ "severity": "높다",
+ "text": "여러 가용성 영역에 Azure Firewall을 배포합니다. Azure Firewall은 배포에 따라 다른 SLA를 제공합니다. 단일 가용 영역 또는 여러 가용 영역에서 작동하여 안정성과 성능을 향상시킬 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
+ "severity": "높다",
+ "text": "Azure Firewall VNet에서 DDoS Protection을 구성하고, DDoS 보호 계획을 Azure Firewall을 호스트하는 가상 네트워크와 연결하여 DDoS 공격에 대한 향상된 완화를 제공합니다. Azure Firewall Manager는 방화벽 인프라 및 DDoS 보호 계획 생성을 통합합니다. ",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
"checklist": "Azure Landing Zone Review",
"guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
"link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "높다",
- "text": "가상 네트워크에 삽입된 Azure PaaS 서비스에 대한 컨트롤 플레인 통신이 중단되지 않았는지 확인합니다(예: 0.0.0.0/0 경로 또는 컨트롤 플레인 트래픽을 차단하는 NSG 규칙).",
+ "text": "컨트롤 플레인 트래픽을 차단하는 0.0.0.0/0 경로 또는 NSG 규칙과 같이 가상 네트워크에 삽입된 Azure PaaS 서비스에 대한 컨트롤 플레인 통신을 중단하지 마세요.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "안전"
},
@@ -7096,36 +9192,37 @@
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
"service": "ExpressRoute",
"severity": "보통",
- "text": "프라이빗 엔드포인트 및 ExpressRoute 프라이빗 피어링을 통해 온-프레미스에서 Azure PaaS 서비스에 액세스합니다. 이 방법을 사용하면 공용 인터넷을 통한 전송을 방지할 수 있습니다.",
+ "text": "프라이빗 엔드포인트 및 ExpressRoute 프라이빗 피어링을 통해 온-프레미스에서 Azure PaaS 서비스에 액세스하세요. 이 방법을 사용하면 공용 인터넷을 통해 전송하지 않아도 됩니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
"guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
"service": "VNet",
- "severity": "보통",
+ "severity": "높다",
"text": "모든 서브넷에서 기본적으로 가상 네트워크 서비스 엔드포인트를 사용하도록 설정하지 마세요.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
"service": "Firewall",
"severity": "보통",
- "text": "데이터 반출을 방지하기 위해 Azure Firewall 또는 NVA의 IP 주소 대신 FQDN을 사용하여 Azure PaaS 서비스에 대한 송신 트래픽을 필터링합니다. Private Link를 사용하는 경우 모든 FQDN을 차단할 수 있으며, 그렇지 않으면 필요한 PaaS 서비스만 허용할 수 있습니다.",
+ "text": "Azure Firewall 또는 NVA의 IP 주소 대신 FQDN을 사용하여 Azure PaaS 서비스에 대한 송신 트래픽을 필터링하여 데이터 반출을 방지합니다. Private Link를 사용하는 경우 모든 FQDN을 차단할 수 있으며, 그렇지 않으면 필요한 PaaS 서비스만 허용할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "안전"
},
{
- "ammp": true,
"arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
@@ -7133,67 +9230,64 @@
"link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
"service": "ExpressRoute",
"severity": "높다",
- "text": "게이트웨이 서브넷에 /27 이상의 접두사를 사용합니다",
+ "text": "게이트웨이 서브넷에 /27 접두사 이상을 사용합니다.",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
"guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
"link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
"service": "NSG",
- "severity": "보통",
- "text": "VirtualNetwork 서비스 태그를 사용하여 연결을 제한하는 NSG 인바운드 기본 규칙을 사용하지 마세요.",
+ "severity": "높다",
+ "text": "VirtualNetwork 서비스 태그를 사용하여 연결을 제한하는 NSG 인바운드 기본 규칙에 의존하지 마세요.",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
"guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
"service": "NSG",
"severity": "보통",
- "text": "NSG를 사용하여 서브넷 간의 트래픽과 플랫폼 전체의 East/West 트래픽(랜딩 존 간 트래픽)을 보호할 수 있습니다.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "안전"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
- "severity": "보통",
- "text": "애플리케이션 팀은 서브넷 수준 NSG에서 애플리케이션 보안 그룹을 사용하여 랜딩 존 내의 다중 계층 VM을 보호해야 합니다.",
+ "text": "NSG를 사용하여 서브넷 전체의 트래픽과 플랫폼 전체의 동쪽/서쪽 트래픽(랜딩 존 간 트래픽)을 보호할 수 있습니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
"guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
"link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"service": "NSG",
"severity": "보통",
- "text": "NSG 및 애플리케이션 보안 그룹을 사용하여 랜딩 존 내에서 트래픽을 마이크로 세그먼트화하고 중앙 NVA를 사용하여 트래픽 흐름을 필터링하지 않도록 합니다.",
+ "text": "NSG 및 애플리케이션 보안 그룹을 사용하여 랜딩 존 내의 트래픽을 마이크로 세그먼트화하고 중앙 NVA를 사용하여 트래픽 흐름을 필터링하지 않도록 합니다.",
"training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
"guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
"service": "NSG",
"severity": "보통",
- "text": "VNet 흐름 로그를 사용하도록 설정하고 트래픽 분석에 제공하여 내부 및 외부 트래픽 흐름에 대한 인사이트를 얻습니다.",
+ "text": "VNet 흐름 로그를 사용하도록 설정하고 트래픽 분석에 제공하여 내부 및 외부 트래픽 흐름에 대한 인사이트를 얻을 수 있습니다.",
"training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
"guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
"link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
"service": "NSG",
"severity": "보통",
- "text": "NSG당 NSG 규칙의 제한(1000)을 고려합니다.",
+ "text": "1,000개의 규칙 제한으로 인해 NSG당 900개 이상의 NSG 규칙을 구현하지 마세요.",
"training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
"waf": "신뢰도"
},
@@ -7204,7 +9298,7 @@
"link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
"service": "VWAN",
"severity": "보통",
- "text": "간소화된 Azure 네트워킹 관리를 위해 Virtual WAN을 고려하고 시나리오가 Virtual WAN 라우팅 디자인 목록에 명시적으로 설명되어 있는지 확인합니다",
+ "text": "시나리오가 Virtual WAN 라우팅 디자인 목록에 명시적으로 설명된 경우 Virtual WAN을 사용합니다.",
"training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
"waf": "작업"
},
@@ -7212,20 +9306,11 @@
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
"guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
"service": "VWAN",
"severity": "보통",
"text": "Azure 지역당 Virtual WAN 허브를 사용하여 공통 글로벌 Azure Virtual WAN을 통해 Azure 지역 간에 여러 랜딩 존을 함께 연결합니다.",
- "waf": "공연"
- },
- {
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "낮다",
- "text": "Azure의 리소스 간 통신이 Microsoft 백본 네트워크를 통해 발생하도록 'Azure의 트래픽은 Azure에 유지' 원칙에 따라",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "공연"
},
{
@@ -7233,10 +9318,10 @@
"checklist": "Azure Landing Zone Review",
"graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
"guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
"service": "VWAN",
"severity": "보통",
- "text": "아웃바운드 인터넷 트래픽 보호 및 필터링을 위해 보안 허브에 Azure Firewall을 배포합니다",
+ "text": "아웃바운드 인터넷 트래픽 보호 및 필터링을 위해 보안 허브에 Azure Firewall을 배포합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "안전"
},
@@ -7244,10 +9329,11 @@
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
"guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
"service": "VWAN",
"severity": "보통",
- "text": "네트워크 아키텍처가 Azure Virtual WAN 제한 내에 있는지 확인합니다.",
+ "text": "Virtual WAN 네트워크 아키텍처가 식별된 아키텍처 시나리오에 맞는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
@@ -7258,26 +9344,31 @@
"service": "VWAN",
"severity": "보통",
"text": "Virtual WAN용 Azure Monitor Insights를 사용하여 Virtual WAN의 엔드투엔드 토폴로지, 상태 및 주요 메트릭을 모니터링합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "작업"
},
{
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
"guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
"service": "VWAN",
"severity": "보통",
- "text": "이러한 흐름을 명시적으로 차단해야 하는 경우가 아니면 IaC 배포가 Virtual WAN에서 분기 간 트래픽을 사용하지 않도록 설정하지 않는지 확인합니다.",
+ "text": "이러한 흐름을 명시적으로 차단해야 하는 경우가 아니면 Virtual WAN에서 분기 간 트래픽을 사용하지 않도록 설정하지 마세요.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
"guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
"service": "VWAN",
"severity": "보통",
"text": "AS-Path는 ExpressRoute 또는 VPN보다 유연하므로 허브 라우팅 기본 설정으로 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
@@ -7287,151 +9378,187 @@
"link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
"service": "VWAN",
"severity": "보통",
- "text": "IaC 배포가 Virtual WAN에서 레이블 기반 전파를 구성하는지 확인하며, 그렇지 않으면 가상 허브 간의 연결이 손상됩니다.",
+ "text": "Virtual WAN에서 레이블 기반 전파를 구성하지 않으면 가상 허브 간의 연결이 손상됩니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "ammp": true,
"arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
"guid": "9c75dfef-573c-461c-a698-68598595581a",
"link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
"service": "VWAN",
"severity": "높다",
- "text": "가상 허브에 충분한 IP 공간(이상적으로는 /23 접두사)을 할당합니다.",
+ "text": "가상 허브에 /23 이상의 접두사를 할당하여 충분한 IP 공간을 사용할 수 있도록 합니다.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "신뢰도"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "높다",
- "text": "Azure Policy를 전략적으로 활용하고, 정책 이니셔티브를 사용하여 관련 정책을 그룹화하고, 환경에 대한 컨트롤을 정의합니다.",
+ "text": "Azure Policy를 전략적으로 활용하고, 정책 이니셔티브를 사용하여 관련 정책을 그룹화하여 환경에 대한 컨트롤을 정의합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "보통",
"text": "규정 및 규정 준수 요구 사항을 Azure Policy 정의 및 Azure 역할 할당에 매핑합니다.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "223ace8c-b123-408c-a501-7f154e3ab369",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "보통",
"text": "상속된 범위에서 할당할 수 있도록 중간 루트 관리 그룹에서 Azure Policy 정의를 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "3829e7e3-1618-4368-9a04-77a209945bda",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "보통",
+ "severity": "높다",
"text": "필요한 경우 최하위 수준에서 제외를 사용하여 가장 적절한 수준에서 정책 할당을 관리합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "43334f24-9116-4341-a2ba-527526944008",
"link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
"service": "Policy",
"severity": "낮다",
- "text": "Azure Policy를 사용하여 사용자가 구독/관리 그룹 수준에서 프로비전할 수 있는 서비스 제어",
+ "text": "Azure Policy를 사용하여 사용자가 구독/관리 그룹 수준에서 프로비전할 수 있는 서비스를 제어합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
- "severity": "보통",
+ "severity": "높다",
"text": "가능한 경우 기본 제공 정책을 사용하여 운영 오버헤드를 최소화합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "description": "특정 범위에 Resource Policy Contributor 역할을 할당하면 관련 팀에 정책 관리를 위임할 수 있습니다. 예를 들어 중앙 IT 팀은 관리 그룹 수준 정책을 감독하고 응용 프로그램 팀은 구독에 대한 정책을 처리하여 조직 표준을 준수하는 분산 거버넌스를 가능하게 할 수 있습니다.",
+ "description": "Resource Policy Contributor 역할을 특정 범위에 할당하면 정책 관리를 관련 팀에 위임할 수 있습니다. 예를 들어 중앙 IT 팀은 관리 그룹 수준 정책을 감독할 수 있고, 응용 프로그램 팀은 구독에 대한 정책을 처리하여 조직 표준을 준수하는 분산 거버넌스를 가능하게 할 수 있습니다.",
"guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
"link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
"service": "Policy",
"severity": "보통",
- "text": "특정 범위에서 기본 제공 Resource Policy 기여자 역할을 할당하여 응용 프로그램 수준 거버넌스를 사용하도록 설정합니다.",
+ "text": "특정 범위에서 기본 제공 Resource Policy Contributor 역할을 할당하여 응용 프로그램 수준 거버넌스를 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "19048384-5c98-46cb-8913-156a12476e49",
"link": "https://learn.microsoft.com/azure/governance/policy/overview",
"service": "Policy",
"severity": "보통",
"text": "상속된 범위에서 제외를 통해 관리하지 않도록 루트 관리 그룹 범위에서 수행된 Azure Policy 할당 수를 제한합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
"link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
"service": "Policy",
"severity": "보통",
- "text": "데이터 주권 요구 사항이 있는 경우 Azure Policy를 배포하여 적용할 수 있습니다",
+ "text": "데이터 주권 요구 사항이 있는 경우 이를 적용하기 위해 Azure 정책을 배포해야 합니다.",
"training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
"service": "Policy",
"severity": "보통",
- "text": "Sovereign Landing Zone의 경우 주권 정책 기준의 정책 이니셔티브가 배포되고 올바른 MG 수준에서 할당됩니다.",
+ "text": "Sovereign Landing Zone의 경우 주권 정책 기준을 배포하고 올바른 관리 그룹 수준에서 할당합니다.",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
"link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
"service": "Policy",
"severity": "보통",
- "text": "Sovereign Landing Zone의 경우 정책 매핑에 대한 주권 제어 목표가 문서화되어 있습니다.",
+ "text": "Sovereign Landing Zone의 경우 정책 매핑에 대한 Sovereign Control 목표를 문서화합니다.",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
"guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
"service": "Policy",
"severity": "보통",
- "text": "Sovereign Landing Zone의 경우 '정책 매핑에 대한 Sovereign Control 목표'의 CRUD에 대한 프로세스가 마련되어 있습니다.",
+ "text": "Sovereign Landing Zone의 경우 'Sovereign Control 목표를 정책 매핑에 적용'을 관리하기 위한 프로세스가 마련되어 있는지 확인합니다.",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
"service": "Monitor",
"severity": "보통",
- "text": "Azure RBAC(Azure 역할 기반 액세스 제어), 데이터 주권 요구 사항 또는 데이터 보존 정책에 별도의 작업 영역이 필요한 경우를 제외하고 단일 모니터 로그 작업 영역을 사용하여 플랫폼을 중앙에서 관리합니다.",
+ "text": "Azure RBAC(Azure 역할 기반 액세스 제어), 데이터 주권 요구 사항 또는 데이터 보존 정책에 따라 별도의 작업 영역이 필요한 경우를 제외하고 단일 모니터 로그 작업 영역을 사용하여 플랫폼을 중앙에서 관리합니다.",
"training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "보통",
+ "text": "모든 지역에 대해 단일 Azure Monitor 로그 작업 영역을 사용할지 또는 다양한 지리적 지역을 포괄하는 여러 작업 영역을 만들지 여부를 결정합니다. 각 접근 방식에는 잠재적인 지역 간 네트워킹 요금을 포함하여 장점과 단점이 있습니다",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "신뢰도"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
"service": "Monitor",
- "severity": "보통",
- "text": "로그 보존 요구 사항이 12년을 초과하는 경우 로그를 Azure Storage로 내보냅니다. 변경 불가능한 스토리지를 한 번 쓰기, 여러 번 읽기 정책과 함께 사용하여 사용자가 지정한 간격 동안 데이터를 지우거나 수정할 수 없도록 합니다.",
+ "severity": "높다",
+ "text": "로그 보존 요구 사항이 12년을 초과하는 경우 로그를 Azure Storage로 내보냅니다. Write-Once, Read-Many 정책과 함께 변경할 수 없는 스토리지를 사용하여 사용자가 지정한 간격 동안 데이터를 지우거나 수정할 수 없도록 합니다.",
"training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
"link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
@@ -7442,264 +9569,279 @@
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
"service": "VM",
"severity": "보통",
- "text": "Azure에서 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure Update Manager를 사용합니다.",
+ "text": "Azure에서 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure 업데이트 관리자를 사용합니다.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
"service": "VM",
"severity": "보통",
- "text": "Azure Arc를 사용하여 Azure 외부의 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure Update Manager를 사용합니다.",
+ "text": "Azure Arc를 사용하여 Azure 외부의 Windows 및 Linux VM에 대한 패치 메커니즘으로 Azure 업데이트 관리자를 사용합니다.",
"training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "작업"
},
{
+ "arm-service": "microsoft.network/networkWatchers",
"checklist": "Azure Landing Zone Review",
"guid": "90483845-c986-4cb2-a131-56a12476e49f",
"link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
"service": "Network Watcher",
"severity": "보통",
- "text": "Network Watcher를 사용하여 트래픽 흐름을 사전에 모니터링",
+ "text": "Network Watcher를 사용하여 트래픽 흐름을 사전에 모니터링합니다.",
"training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
"service": "Monitor",
"severity": "보통",
"text": "인사이트 및 보고를 위해 Azure Monitor 로그를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "97be9951-9048-4384-9c98-6cb2913156a1",
"link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
"service": "Monitor",
"severity": "보통",
"text": "Azure Monitor 경고를 사용하여 운영 경고를 생성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
"link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
"service": "Monitor",
"severity": "보통",
- "text": "Azure Automation 계정을 통해 변경 및 인벤토리 추적을 사용하는 경우 Log Analytics 작업 영역과 자동화 계정을 함께 연결하기 위해 지원되는 지역을 선택했는지 확인합니다.",
+ "text": "Azure Automation 계정을 통해 변경 및 인벤토리 추적을 사용하는 경우 Log Analytics 작업 영역과 자동화 계정을 함께 연결하는 데 지원되는 지역을 선택했는지 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
"link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
"service": "Backup",
- "severity": "보통",
- "text": "Azure Backup을 사용하는 경우 기본 설정은 GRS이므로 다양한 백업 유형(GRS, ZRS & LRS)을 고려합니다",
+ "severity": "낮다",
+ "text": "Azure Backup을 사용하는 경우 기본 설정은 GRS이므로 백업에 올바른 백업 유형(GRS, ZRS & LRS)을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "신뢰도"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
"link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
"service": "VM",
"severity": "보통",
- "text": "Azure 정책을 사용하여 VM 확장을 통해 소프트웨어 구성을 자동으로 배포하고 규격 기준 VM 구성을 적용합니다.",
+ "text": "Azure 게스트 정책을 사용하여 VM 확장을 통해 소프트웨어 구성을 자동으로 배포하고 규격 기준 VM 구성을 적용합니다.",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "description": "Azure Policy의 게스트 구성 기능은 컴퓨터 설정(예: OS, 애플리케이션, 환경)을 감사하고 수정하여 리소스가 예상 구성에 맞는지 확인할 수 있으며, 업데이트 관리는 VM에 대한 패치 관리를 적용할 수 있습니다.",
+ "description": "Azure Policy의 게스트 구성 기능을 사용하여 컴퓨터 설정(예: OS, 애플리케이션, 환경)을 감사하고 수정하여 리소스가 예상 구성에 맞는지 확인하고, 업데이트 관리는 VM에 대한 패치 관리를 적용할 수 있습니다.",
"guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
"service": "VM",
"severity": "보통",
"text": "Azure Policy를 통해 VM 보안 구성 드리프트를 모니터링합니다.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
"link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
"service": "VM",
"severity": "보통",
- "text": "Azure-Azure Virtual Machines 재해 복구 시나리오에 Azure Site Recovery를 사용합니다. 이렇게 하면 지역 간에 워크로드를 복제할 수 있습니다.",
+ "text": "Azure-to-Azure Virtual Machines 재해 복구 시나리오에는 Azure Site Recovery를 사용합니다. 이렇게 하면 지역 간에 워크로드를 복제할 수 있습니다.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
"waf": "작업"
},
{
+ "arm-service": "Microsoft.RecoveryServices/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
"link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
"service": "Backup",
"severity": "보통",
- "text": "Azure 네이티브 백업 기능 또는 Azure 호환 제3자 백업 솔루션을 사용합니다.",
+ "text": "Azure 네이티브 백업 기능 또는 Azure 호환 타사 백업 솔루션을 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
"waf": "작업"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "높다",
- "text": "VM이 지원되는 지역에서 VM에 대한 가용성 영역을 활용합니다.",
- "waf": "신뢰도"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "높다",
- "text": "단일 VM에서 프로덕션 워크로드를 실행하지 마세요.",
- "waf": "신뢰도"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "보통",
- "text": "Azure Load Balancer 및 Application Gateway는 들어오는 네트워크 트래픽을 여러 리소스에 분산합니다.",
- "waf": "신뢰도"
- },
- {
- "ammp": true,
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
"service": "WAF",
"severity": "높다",
- "text": "Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 WAF 로그를 저장하는 진단 설정을 추가합니다. 로그를 정기적으로 검토하여 공격 및 가양성 탐지를 확인합니다.",
+ "text": "진단 설정을 추가하여 Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 WAF 로그를 저장합니다. 로그를 정기적으로 검토하여 공격 및 가양성 탐지를 확인합니다.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
"waf": "작업"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
"guid": "7f408960-c626-44cb-a018-347c8d790cdf",
"link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
"service": "WAF",
"severity": "보통",
- "text": "Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 Microsoft Sentinel로 WAF 로그를 보냅니다. 공격을 감지하고 WAF 원격 분석을 전체 Azure 환경에 통합합니다.",
+ "text": "Azure Front Door 및 Azure Application Gateway와 같은 애플리케이션 배달 서비스에서 Microsoft Sentinel로 WAF 로그를 보냅니다. 공격을 탐지하고 WAF 텔레메트리를 전체 Azure 환경에 통합합니다.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
"waf": "작업"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "5017f154-e3ab-4369-9829-e7e316183687",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "Key Vault",
"severity": "높다",
- "text": "Azure Key Vault를 사용하여 비밀 및 자격 증명 저장",
+ "text": "Azure Key Vault를 사용하여 비밀과 자격 증명을 저장합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
"guid": "a0477a20-9945-4bda-9333-4f2491163418",
"link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
"service": "Key Vault",
"severity": "보통",
- "text": "다양한 애플리케이션 및 지역에 대해 서로 다른 Azure Key Vault를 사용하여 트랜잭션 규모 제한을 방지하고 비밀에 대한 액세스를 제한합니다.",
+ "text": "서로 다른 애플리케이션 및 지역에 대해 서로 다른 Azure Key Vault를 사용하여 트랜잭션 규모 제한을 방지하고 비밀에 대한 액세스를 제한합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
"text": "삭제된 개체에 대한 보존 보호를 허용하기 위해 일시 삭제 및 제거 정책을 사용하도록 설정된 Azure Key Vault를 프로비전합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "dc055bcf-619e-48a1-9f98-879525d62688",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
"text": "키, 비밀 및 인증서를 영구적으로 삭제할 수 있는 권한 부여를 특수 사용자 지정 Microsoft Entra ID 역할로 제한하여 최소 권한 모델을 따릅니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
"text": "공용 인증 기관을 통해 인증서 관리 및 갱신 프로세스를 자동화하여 관리를 용이하게 합니다.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "913156a1-2476-4e49-b541-acdce979377b",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
"text": "키 및 인증서 교체를 위한 자동화된 프로세스를 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
"text": "자격 증명 모음에서 방화벽 및 가상 네트워크 서비스 엔드포인트 또는 프라이빗 엔드포인트를 사용하도록 설정하여 키 자격 증명 모음에 대한 액세스를 제어합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
"link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
"service": "Key Vault",
"severity": "보통",
"text": "플랫폼 중앙 Azure Monitor Log Analytics 작업 영역을 사용하여 Key Vault의 각 인스턴스 내에서 키, 인증서 및 비밀 사용을 감사합니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
"text": "Key Vault 인스턴스화 및 권한 있는 액세스를 위임하고 Azure Policy를 사용하여 일관된 규정 준수 구성을 적용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "91163418-2ba5-4275-8694-4008be7d7e48",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
- "text": "애플리케이션, 환경, 지역당 Azure Key Vault를 사용합니다.",
+ "text": "애플리케이션당 환경, 지역별 Azure Key Vault를 사용합니다.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "25d62688-6d70-4ba6-a97b-e99519048384",
"link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
"service": "Key Vault",
"severity": "보통",
- "text": "자체 키를 가져오려는 경우 고려되는 모든 서비스에서 지원되지 않을 수 있습니다. 불일치가 원하는 결과를 방해하지 않도록 관련 완화를 구현합니다. 대기 시간을 최소화하는 적절한 지역 쌍과 재해 복구 지역을 선택합니다.",
+ "text": "사용자 고유의 키를 가져오려는 경우 고려되는 모든 서비스에서 지원되지 않을 수 있습니다. 불일치가 원하는 결과를 방해하지 않도록 관련 완화를 구현합니다. 대기 시간을 최소화하는 적절한 지역 쌍 및 재해 복구 지역을 선택합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
"link": "https://learn.microsoft.com/industry/sovereignty/key-management",
"service": "Key Vault",
"severity": "보통",
- "text": "Sovereign Landing Zone의 경우 Azure Key Vault 관리형 HSM을 사용하여 비밀 및 자격 증명을 저장합니다.",
+ "text": "Sovereign Landing Zone의 경우 Azure Key Vault 관리형 HSM을 사용하여 비밀과 자격 증명을 저장합니다.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "안전"
},
{
@@ -7709,64 +9851,80 @@
"service": "Entra",
"severity": "보통",
"text": "Microsoft Entra ID 보고 기능을 사용하여 액세스 제어 감사 보고서를 생성합니다.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "안전"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "09945bda-4333-44f2-9911-634182ba5275",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
"service": "Defender",
"severity": "높다",
"text": "모든 구독에 대해 Defender 클라우드 보안 태세 관리를 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "안전"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
"service": "Defender",
"severity": "높다",
- "text": "모든 구독에서 서버에 대한 Defender 클라우드 워크로드 보호 계획을 사용하도록 설정합니다.",
+ "text": "모든 구독의 서버에 대해 Defender 클라우드 워크로드 보호 계획을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "안전"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
"guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
"link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
"service": "Defender",
"severity": "높다",
"text": "모든 구독에서 Azure 리소스에 대한 Defender 클라우드 워크로드 보호 계획을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
"link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
"service": "VM",
"severity": "높다",
"text": "IaaS 서버에서 Endpoint Protection을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
"guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
"link": "https://learn.microsoft.com/azure/security-center/",
"service": "VM",
"severity": "보통",
"text": "Azure Monitor 로그 및 클라우드용 Defender를 통해 기본 운영 체제 패치 드리프트를 모니터링합니다.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "안전"
},
{
+ "arm-service": "Microsoft.Insights/components",
"checklist": "Azure Landing Zone Review",
"guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
"link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"service": "Monitor",
"severity": "보통",
"text": "기본 리소스 구성을 중앙 집중식 Azure Monitor Log Analytics 작업 영역에 연결합니다.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "안전"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "높다",
+ "text": "상관 관계가 있는 로그를 통한 중앙 집중식 위협 탐지 - SIEM(보안 정보 및 이벤트 관리)을 통해 다양한 서비스 간에 상관 관계를 파악할 수 있는 중앙 위치에 보안 데이터를 통합합니다.",
"waf": "안전"
},
{
@@ -7775,7 +9933,7 @@
"link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
"service": "Entra",
"severity": "보통",
- "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 투명 로그가 사용하도록 설정됩니다.",
+ "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 투명 로그를 사용하도록 설정합니다.",
"waf": "안전"
},
{
@@ -7784,21 +9942,22 @@
"link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
"service": "Entra",
"severity": "보통",
- "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 고객 Lockbox를 사용할 수 있습니다.",
+ "text": "Sovereign Landing Zone의 경우 Entra ID 테넌트에서 고객 Lockbox를 사용하도록 설정합니다.",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Landing Zone Review",
"guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
"link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
"service": "Storage",
"severity": "높다",
- "text": "스토리지 계정에 대한 보안 전송을 사용하도록 설정해야 함",
+ "text": "스토리지 계정에 대한 보안 전송을 사용하도록 설정합니다.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Storage/storageAccounts",
"checklist": "Azure Landing Zone Review",
"guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
"link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
@@ -7808,19 +9967,20 @@
"waf": "안전"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.KeyVault/vaults",
"checklist": "Azure Landing Zone Review",
"guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
"link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
"service": "Key Vault",
"severity": "높다",
"text": "Key Vault 비밀을 사용하여 자격 증명(가상 머신 사용자 암호), 인증서 또는 키와 같은 중요한 정보를 하드 코딩하지 않도록 합니다.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "작업"
}
],
"metadata": {
"name": "WAF checklist",
- "timestamp": "June 24, 2024"
+ "timestamp": "October 02, 2024"
},
"severities": [
{
@@ -7847,7 +10007,7 @@
"name": "성취"
},
{
- "description": "권장 사항은 이해되었지만 현재 요구 사항에 필요하지 않음",
+ "description": "권장 사항을 이해하지만 현재 요구 사항에 필요하지 않음",
"name": "필요 없음"
},
{
diff --git a/checklists/waf_checklist.pt.json b/checklists/waf_checklist.pt.json
index b5c689c53..c3a7d671e 100644
--- a/checklists/waf_checklist.pt.json
+++ b/checklists/waf_checklist.pt.json
@@ -1,7489 +1,9825 @@
{
"items": [
{
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
+ "severity": "Alto",
+ "text": "Habilite a redundância de zona para o Cache do Azure para Redis. O Cache do Azure para Redis dá suporte a configurações redundantes de zona nas camadas Premium e Enterprise. Um cache redundante de zona pode colocar seus nós em diferentes zonas de disponibilidade do Azure na mesma região. Ele elimina a interrupção do data center ou AZ como um único ponto de falha e aumenta a disponibilidade geral do cache.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
"severity": "Média",
- "text": "Aproveite o servidor flexível",
+ "text": "Configure a persistência de dados para uma instância do Cache do Azure para Redis. Como os dados do cache são armazenados na memória, uma falha rara e não planejada de vários nós pode fazer com que todos os dados sejam descartados. Para evitar a perda completa de dados, a persistência do Redis permite que você tire instantâneos periódicos de dados na memória e os armazene em sua conta de armazenamento.",
"waf": "Fiabilidade"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
- "severity": "Alto",
- "text": "Aproveite as zonas de disponibilidade quando aplicável regionalmente",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
+ "severity": "Média",
+ "text": "Use a conta de armazenamento com redundância geográfica para persistir o Cache do Azure para dados Redis ou zonalmente redundante onde a redundância geográfica não está disponível",
"waf": "Fiabilidade"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
"severity": "Média",
- "text": "Aproveite a replicação de dados para cenários de DR entre regiões",
+ "text": "Configure a replicação geográfica passiva para instâncias do Cache Premium do Azure para Redis. A replicação geográfica é um mecanismo para vincular duas ou mais instâncias do Cache do Azure para Redis, normalmente abrangendo duas regiões do Azure. A replicação geográfica foi projetada principalmente para recuperação de desastres entre regiões. Duas instâncias de cache de camada Premium são conectadas por meio de replicação geográfica de uma forma que fornece leituras e gravações no cache primário e que os dados são replicados para o cache secundário.",
"waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
- "text": "Regras de coleta de dados no Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Verifique se você está usando o SKU do Gateway de Aplicativo v2",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
- "text": "Verificar instâncias de backup com a fonte de dados subjacente não encontrada",
- "waf": "Custar"
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
+ "severity": "Média",
+ "text": "Verifique se você está usando o SKU Standard para seus Azure Load Balancers",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
- "text": "Excluir ou arquivar serviços não associados (discos, nics, endereços IP etc.)",
- "waf": "Custar"
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
+ "severity": "Média",
+ "text": "Verifique se os endereços IP de front-end dos Load Balancers têm redundância de zona (a menos que você precise de front-ends zonais).",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
- "text": "Considere um bom equilíbrio entre recuperação de local, armazenamento e backup para aplicativos não essenciais",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Seus Gateways de Aplicativo v2 devem ser implantados em sub-redes com prefixos IP iguais ou maiores que /24",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
- "text": "Verifique os gastos e as oportunidades de economia entre os 40 diferentes espaços de trabalho de análise de log - use retenção e coleta de dados diferentes para espaços de trabalho não prod - crie limite diário para reconhecimento e dimensionamento de camadas - Se você definir um limite diário, além de criar um alerta quando o limite for atingido, certifique-se de também criar uma regra de alerta para ser notificado quando alguma porcentagem for atingida (90%, por exemplo). - considerar a transformação do espaço de trabalho, se possível - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "description": "A administração de proxies reversos em geral e WAF em particular está mais próxima do aplicativo do que da rede, portanto, eles pertencem à mesma assinatura que o aplicativo. Centralizar o Gateway de Aplicativo e o WAF na assinatura de conectividade pode ser OK se ele for gerenciado por uma única equipe.",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Implante o Gateway de Aplicativo do Azure v2 ou NVAs de parceiros usados para proxy de conexões HTTP(S) de entrada na rede virtual da zona de destino e com os aplicativos que eles estão protegendo.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
- "text": "Impor uma política de log de limpeza e automação (se necessário, os logs podem ser movidos para armazenamento frio)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Use uma rede DDoS ou planos de proteção de IP para todos os endereços IP públicos em zonas de destino do aplicativo.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
- "text": "Verifique se os discos são realmente necessários, se não: excluir. Se forem necessários, encontre níveis de armazenamento mais baixos ou use backup -",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Configure o dimensionamento automático com uma quantidade mínima de instâncias de duas.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
- "text": "Considere mover o armazenamento não utilizado para o nível inferior, com regra personalizada - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Implantar o Gateway de Aplicativo em Zonas de Disponibilidade",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
- "text": "Verifique se o Advisor está configurado para o dimensionamento correto da VM ",
- "waf": "Custar"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Ao usar o Front Door e o Gateway de Aplicativo para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Front Door. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "description": "verifique pesquisando as Licenças de Categoria de Medidor na Análise de Custos",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
- "text": "executar o script em todas as VMs do Windows https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- considere implementar uma diretiva se as VMs do Windows forem criadas com frequência",
- "waf": "Custar"
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "severity": "Alto",
+ "text": "Use o Gerenciador de Tráfego para fornecer aplicativos globais que abrangem protocolos diferentes de HTTP/S.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
- "text": " isso também pode ser colocado no AHUB se você já tiver licenças https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "Custar"
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "Baixo",
+ "text": "Se os usuários precisarem apenas de acesso a aplicativos internos, o Proxy de Aplicativo de ID do Microsoft Entra foi considerado como uma alternativa à AVD (Área de Trabalho Virtual) do Azure?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "text": "Consolidar famílias de VM reservadas com opção de flexibilidade (não mais do que 4-5 famílias)",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "Custar"
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Para reduzir o número de portas de firewall abertas para conexões de entrada em sua rede, considere usar o Proxy de Aplicativo de ID do Microsoft Entra para fornecer aos usuários remotos acesso seguro e autenticado a aplicativos internos.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "text": "Utilize instâncias reservadas do Azure: esse recurso permite reservar VMs por um período de 1 ou 3 anos, proporcionando uma economia significativa em comparação com os preços do PAYG.",
- "waf": "Custar"
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
+ "severity": "Alto",
+ "text": "Usar o Gateway NAT do Azure em vez das regras de saída do Load Balancer para melhorar a escalabilidade SNAT",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "text": "Somente discos maiores podem ser reservados => 1 TiB -",
- "waf": "Custar"
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Habilite o conjunto de regras de proteção contra bot do WAF do Gateway de Aplicativo do Azure. As regras de bot detectam bots bons e ruins.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
- "text": "Após a otimização do dimensionamento correto",
- "waf": "Custar"
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Verifique se o recurso de inspeção do corpo da solicitação está habilitado na política WAF do Gateway de Aplicativo do Azure.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
- "text": "Verifique se aplicável e aplique a política/alteração https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
- "waf": "Custar"
- },
- {
- "checklist": "Cost Optimization Checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
- "text": "O desconto da peça de licença VM + (ahub + 3YRI) é de cerca de 70% de desconto",
- "waf": "Custar"
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Ajuste o WAF do Gateway de Aplicativo do Azure no modo de detecção para sua carga de trabalho. Reduza as detecções de falsos positivos.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "text": "Considere o uso de um VMSS para corresponder à demanda em vez de dimensionamento simples",
- "waf": "Custar"
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Implante sua política de WAF para Gateway de Aplicativo no modo 'Prevenção'.",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Cost Optimization Checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
- "text": "Use o autoscaler AKS para corresponder ao uso de clusters (verifique se os requisitos dos pods correspondem ao dimensionador)",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Adicione a limitação de taxa ao WAF do Gateway de Aplicativo do Azure. A limitação de taxa bloqueia os clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
- "text": "Mover pontos de recuperação para o vault-archive, quando aplicável (Validar)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Use um limite alto para os limites de taxa do WAF do Gateway de Aplicativo do Azure. Os limites de limite de taxa altos evitam o bloqueio do tráfego legítimo, ao mesmo tempo em que fornecem proteção contra números extremamente altos de solicitações que podem sobrecarregar sua infraestrutura. ",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
- "text": "Considere o uso de VMs spot com fallback sempre que possível. Considere o autotermination de clusters.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
+ "severity": "Baixo",
+ "text": "Se você não estiver esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
- "text": "Funções - Reutilizar conexões",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Gateway de Aplicativo do Azure. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
- "text": "Funções - Armazenar dados em cache localmente",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Use a versão mais recente do conjunto de regras do WAF do Gateway de Aplicativo do Azure. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário de ameaças atual.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
- "text": "Funções - Partidas a frio - Use a funcionalidade 'Executar do pacote'. Dessa forma, o código é baixado como um único arquivo zip. Isso pode, por exemplo, resultar em melhorias significativas com as funções Javascript, que possuem muitos módulos de nó. Use ferramentas específicas de linguagem para reduzir o tamanho do pacote, por exemplo, aplicativos Javascript que agitam árvores.",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Adicione configurações de diagnóstico para salvar os logs do WAF do Gateway de Aplicativo do Azure.",
+ "waf": "Operações"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
- "text": "Funções - Mantenha suas funções aquecidas",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Envie logs do WAF do Gateway de Aplicativo do Azure para o Microsoft Sentinel.",
+ "waf": "Operações"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
- "text": "Ao usar o dimensionamento automático com funções diferentes, pode haver um que conduza todo o dimensionamento automático para todos os recursos - considere movê-lo para um plano de consumo separado (e considere um plano mais alto para a CPU)",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Defina a configuração do WAF do Gateway de Aplicativo do Azure como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
+ "waf": "Operações"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
- "text": "Os aplicativos de função em um determinado plano são todos dimensionados juntos, portanto, quaisquer problemas com o dimensionamento podem afetar todos os aplicativos no plano.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Use as Políticas do WAF em vez da configuração herdada do WAF.",
+ "waf": "Operações"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
- "text": "Sou cobrado por 'tempo de espera'? Essa pergunta geralmente é feita no contexto de uma função C# que faz uma operação assíncrona e aguarda o resultado, por exemplo, aguardar Task.Delay(1000) ou aguardar cliente. GetAsync('http://google.com'). A resposta é sim - o segundo cálculo de GB é baseado na hora de início e término da função e no uso de memória durante esse período. O que realmente acontece ao longo desse tempo em termos de atividade da CPU não é levado em consideração no cálculo. Uma exceção a essa regra é se você estiver usando funções duráveis. Você não é cobrado pelo tempo gasto em espera em funções de orquestrador.aplique técnicas de modelagem de demanda sempre que possível (ambientes de desenvolvimento?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Filtre o tráfego de entrada nos back-ends para que eles aceitem apenas conexões da sub-rede do Gateway de Aplicativo, por exemplo, com NSGs.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
- "text": "Frontdoor - Desativar a página inicial padrãoNas configurações do aplicativo do seu aplicativo, defina AzureWebJobsDisableHomepage como true. Isso retornará um 204 (Sem Conteúdo) para o PoP para que apenas os dados de cabeçalho sejam retornados.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Você deve criptografar o tráfego para os servidores de back-end.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
- "text": "Frontdoor - Rota para algo que não retorna nada. Configure uma Função, Proxy de Função ou adicione uma rota em seu WebApp que retorne 200 (OK) e envie conteúdo nulo ou mínimo. A vantagem disso é que você poderá fazer logout quando for chamado.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Você deve usar um Web Application Firewall.",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
- "text": "Considere níveis de arquivamento para dados menos usados",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Redirecionar HTTP para HTTPS",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
- "text": "Verifique os tamanhos de disco em que o tamanho não corresponde à camada (ou seja, um disco de 513 GiB pagará um P30 (1TiB) e considere o redimensionamento",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Use cookies gerenciados por gateway para direcionar o tráfego de uma sessão de usuário para o mesmo servidor para processamento",
+ "waf": "Operações"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
- "text": "Considere usar SSD padrão em vez de Premium ou Ultra sempre que possível",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
+ "severity": "Alto",
+ "text": "Habilitar a drenagem de conexão durante atualizações de serviço planejadas para evitar a perda de conexão para membros existentes do pool de back-end",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
- "text": "Para contas de armazenamento, verifique se a camada escolhida não está somando encargos de transação (pode ser mais barato passar para a próxima camada)",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
+ "severity": "Baixo",
+ "text": "Crie páginas de erro personalizadas para exibir uma experiência de usuário personalizada",
+ "waf": "Operações"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
- "text": "Para ASR, considere o uso de discos SSD padrão se o RPO/RTO e a taxa de transferência de replicação permitirem",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Edite solicitações HTTP e cabeçalhos de resposta para facilitar o roteamento e a troca de informações entre o cliente e o servidor",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
- "text": "Contas de armazenamento: verifique o hot tier e/ou o GRS necessário",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Configure o Front Door para otimizar o roteamento de tráfego da Web global e o desempenho e a confiabilidade do usuário final de nível superior por meio de failover global rápido",
+ "waf": "Desempenho"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
- "text": "Discos - valide o uso de discos SSD Premium em todos os lugares: por exemplo, não-prod pode trocar para SSD padrão ou SSD Premium sob demanda ",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Usar o balanceamento de carga da camada de transporte",
+ "waf": "Desempenho"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
- "text": "Crie orçamentos para gerenciar custos e crie alertas que notifiquem automaticamente as partes interessadas sobre anomalias de gastos e riscos de gastos excessivos.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Configurar o roteamento com base no host ou no nome de domínio para vários aplicativos Web em um único gateway",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
- "text": "Exporte dados de custo para uma conta de armazenamento para análise de dados adicionais.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
+ "severity": "Média",
+ "text": "Centralize o gerenciamento de certificados SSL para reduzir a sobrecarga de criptografia e descriptografia de um farm de servidores de back-end",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
- "text": "Controle os custos de um pool SQL dedicado pausando o recurso quando ele não estiver em uso.",
- "waf": "Custar"
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
+ "severity": "Baixo",
+ "text": "Usar o Gateway de Aplicativo para obter suporte nativo para protocolos WebSocket e HTTP/2",
+ "waf": "Segurança"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
- "text": "Habilite o recurso de pausa automática do Apache Spark sem servidor e defina seu valor de tempo limite de acordo.",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "Os Aplicativos Spring do Azure permitem duas implantações para cada aplicativo, apenas um dos quais recebe tráfego de produção. Você pode obter tempo de inatividade zero com estratégias de implantação em verde azul. A implantação verde azul só está disponível nas camadas Standard e Enterprise. Você pode automatizar a implantação usando CI/CD com ações do ADO/GitHub",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
- "text": "Crie várias definições de pool do Apache Spark de vários tamanhos.",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "As instâncias do Azure Spring Apps podem ser criadas em várias regiões para seus aplicativos e o tráfego pode ser roteado pelo Gerenciador de Tráfego/Front Door.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
- "text": "Adquira unidades de confirmação (SCU) do Azure Synapse por um ano com um plano de pré-compra para economizar nos custos do Azure Synapse Analytics.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "Na região com suporte, os Aplicativos Spring do Azure podem ser implantados como zona redundante, o que significa que as instâncias são distribuídas automaticamente entre zonas de disponibilidade. Esse recurso só está disponível nas camadas Standard e Enterprise.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
- "text": "Usar VMs spot para trabalhos interruptíveis: são VMs que podem ser licitadas e compradas a um preço com desconto, fornecendo uma solução econômica para cargas de trabalho não críticas.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "Usar mais de 1 instância de aplicativo para seus aplicativos",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "text": "Dimensionamento correto de todas as VMs",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "Monitore os Aplicativos Spring do Azure com logs, métricas e rastreamento. Integre o ASA com insights de aplicativos e rastreie falhas e crie pastas de trabalho.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
- "text": "Trocar VM dimensionada com tamanhos normalizados e mais recentes",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "Configurar o dimensionamento automático no Spring Cloud Gateway",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "VMs de dimensionamento correto - comece com o monitoramento do uso abaixo de 5% e, em seguida, trabalhe até 40%",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
+ "severity": "Baixo",
+ "text": "Habilite o dimensionamento automático para os aplicativos com o plano de consumo padrão e dedicado.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "A conteinerização de um aplicativo pode melhorar a densidade da VM e economizar dinheiro no dimensionamento",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Custar"
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
+ "severity": "Média",
+ "text": "Use o plano Enterprise para suporte comercial de inicialização spring para aplicativos de missão crítica. Com outras camadas, você obtém suporte a OSS.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Function Review",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Selecione o plano de hospedagem de função certo com base em seus requisitos de negócios e SLO",
- "waf": "Fiabilidade"
+ "text": "Siga as proteções do Metaprompting para uma IA razoável",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Function Review",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Aproveitar zonas de disponibilidade quando aplicável regionalmente (não disponível para a camada de consumo)",
- "waf": "Fiabilidade"
+ "text": "Considere padrões de gateway com APIM ou soluções como AI central para melhor limitação de taxa, balanceamento de carga, autenticação e registro",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Function Review",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
- "severity": "Média",
- "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Habilitar o monitoramento para suas instâncias AOAI",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Function Review",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Se estiver implantando em um ambiente isolado, use ou migre para o ASE (Ambiente do Serviço de Aplicativo) v3",
- "waf": "Fiabilidade"
+ "text": "Crie alertas para notificar as equipes sobre eventos, como uma entrada no log de atividades criada por uma ação executada no recurso, como regenerar suas chaves de assinatura ou um limite de métrica, como o número de erros que excedem 10 em uma hora",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Function Review",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Verifique se 'Sempre Ativado' está habilitado para todos os Aplicativos de Função em execução no Plano do Serviço de Aplicativo",
- "waf": "Fiabilidade"
+ "text": "Monitore o uso do token para evitar interrupções de serviço devido à capacidade",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Function Review",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Emparelhe um aplicativo de função com sua própria conta de armazenamento. Tente não reutilizar contas de armazenamento para aplicativos de função, a menos que eles estejam firmemente acoplados",
- "waf": "Fiabilidade"
+ "text": "Observe métricas como tokens de inferência processados, monitoramento de tokens de conclusão gerados para limite de taxa",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Function Review",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
- "severity": "Média",
- "text": "Aproveite o Azure DevOps ou o GitHub para simplificar o CI/CD e proteger seu código do Aplicativo de Função",
- "waf": "Operações"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "text": "Se o diagnóstico não for suficiente para você, considere usar um gateway como o Gerenciamento de API do Azure na frente do Azure OpenAI para registrar prompts de entrada e respostas de saída, quando permitido",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Habilite a redundância de zona para o Cache do Azure para Redis. O Cache do Azure para Redis dá suporte a configurações redundantes de zona nas camadas Premium e Enterprise. Um cache redundante de zona pode colocar seus nós em diferentes zonas de disponibilidade do Azure na mesma região. Ele elimina a interrupção do data center ou AZ como um único ponto de falha e aumenta a disponibilidade geral do cache.",
- "waf": "Fiabilidade"
+ "text": "Usar a infraestrutura como código para implantar o serviço OpenAI do Azure, implantações de modelo e todos os recursos relacionados",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
- "severity": "Média",
- "text": "Configure a persistência de dados para uma instância do Cache do Azure para Redis. Como os dados do cache são armazenados na memória, uma falha rara e não planejada de vários nós pode fazer com que todos os dados sejam descartados. Para evitar a perda completa de dados, a persistência do Redis permite que você tire instantâneos periódicos de dados na memória e os armazene em sua conta de armazenamento.",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Usar a autenticação do Microsoft Entra com identidade gerenciada em vez de chave de API",
+ "waf": "Segurança"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
- "severity": "Média",
- "text": "Use a conta de armazenamento com redundância geográfica para persistir o Cache do Azure para dados Redis ou zonalmente redundante onde a redundância geográfica não está disponível",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Avalie o desempenho/precisão do sistema com um conjunto de dados dourado conhecido que tenha as entradas e as respostas corretas. Aproveite os recursos do PromptFlow para avaliação.",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
- "severity": "Média",
- "text": "Configure a replicação geográfica passiva para instâncias do Cache Premium do Azure para Redis. A replicação geográfica é um mecanismo para vincular duas ou mais instâncias do Cache do Azure para Redis, normalmente abrangendo duas regiões do Azure. A replicação geográfica foi projetada principalmente para recuperação de desastres entre regiões. Duas instâncias de cache de camada Premium são conectadas por meio de replicação geográfica de uma forma que fornece leituras e gravações no cache primário e que os dados são replicados para o cache secundário.",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Avaliar o uso do modelo de taxa de transferência provisionada ",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Examinar e implementar a segurança de conteúdo do Azure AI",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Defina e avalie a taxa de transferência do sistema com base em tokens e resposta por minuto e alinhe-se aos requisitos",
+ "waf": "Desempenho"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use um locatário do Entra para gerenciar seus recursos do Azure, a menos que você tenha um requisito regulamentar ou comercial claro para multilocatários.",
- "waf": "Operações"
+ "text": "Melhore a latência do sistema limitando os tamanhos dos tokens, as opções de streaming",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Entra",
- "severity": "Baixo",
- "text": "Verifique se você tem uma abordagem de automação multilocatário para gerenciar seus locatários do Microsoft Entra ID",
- "waf": "Operações"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Estime as demandas de elasticidade para determinar a segregação de solicitações síncronas e em lote com base na prioridade. Para alta prioridade, use a abordagem síncrona e, para baixa prioridade, o processamento em lote assíncrono com fila é preferível",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "Entra",
- "severity": "Baixo",
- "text": "Aproveite o Farol do Azure para gerenciamento multilocatário",
- "waf": "Operações"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Compare os requisitos de consumo de token com base nas demandas estimadas dos consumidores. Considere usar a ferramenta de benchmarking OpenAI do Azure para ajudá-lo a validar a taxa de transferência se você estiver usando implantações de Unidade de Produtividade Provisionada",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Verifique se o Farol do Azure é usado para administrar o locatário por parceiro",
- "waf": "Custar"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "348ef254-c27d-442e-abba-c7571559ab91",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "service": "Entra",
- "severity": "Alto",
- "text": "Aplique um modelo RBAC que se alinhe ao seu modelo operacional de nuvem. Escopo e atribuição entre grupos de gerenciamento e assinaturas.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "Segurança"
+ "text": "Se você estiver usando PTUs (Unidades de Produtividade Provisionadas), considere implantar uma implantação de token por minuto (TPM) para solicitações de estouro. Use um gateway para rotear solicitações para a implantação do TPM quando os limites de PTU forem atingidos.",
+ "waf": "Desempenho"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Use apenas o tipo de autenticação Conta corporativa ou de estudante para todos os tipos de conta. Evite usar a conta da Microsoft",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "Segurança"
+ "text": "Escolha o modelo certo para a tarefa certa. Escolha modelos com a compensação certa entre velocidade, qualidade de resposta e complexidade de saída",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use apenas grupos para atribuir permissões. Adicione grupos locais ao grupo Entra ID somente se um sistema de gerenciamento de grupo já estiver em vigor.",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "Segurança"
+ "text": "Tenha uma linha de base para o desempenho sem ajuste fino para saber se o ajuste fino melhorou ou não o desempenho do modelo",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"severity": "Baixo",
- "text": "Impor políticas de acesso condicional do Microsoft Entra ID para qualquer usuário com direitos a ambientes do Azure",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "Segurança"
+ "text": "Implantar várias instâncias de OAI em regiões",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Impor a autenticação multifator para qualquer usuário com direitos aos ambientes do Azure",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "Segurança"
+ "text": "Implemente novas tentativas e verificações de integridade com o padrão de Gateway como APIM",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Impor o Microsoft Entra ID Privileged Identity Management (PIM) para estabelecer acesso permanente zero e privilégio mínimo",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "Segurança"
+ "text": "Garantir que tenha cotas adequadas de TPM e RPM para a carga de trabalho",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Se estiver planejando mudar de Serviços de Domínio do Active Directory para serviços de domínio Entra, avalie a compatibilidade de todas as cargas de trabalho",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
- "waf": "Segurança"
+ "text": "Revise as considerações nas diretrizes do kit de ferramentas HAI e aplique essas práticas de interação para a análise",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Integre os logs de ID do Microsoft Entra com o Azure Monitor central da plataforma. O Azure Monitor permite uma única fonte de verdade sobre dados de log e monitoramento no Azure, oferecendo às organizações opções nativas de nuvem para atender aos requisitos de coleta e retenção de logs.",
+ "text": "Implantar modelos ajustados separados entre regiões se o ajuste fino for empregado",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Faça backup e replique regularmente dados críticos para garantir a disponibilidade e a capacidade de recuperação dos dados em caso de perda de dados ou falhas do sistema. Aproveite os serviços de backup e recuperação de desastre do Azure para proteger seus dados.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "As camadas de serviço de pesquisa de IA do Azure devem ser escolhidas para ter um SLA ",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "text": "Classifique os dados e a confidencialidade, rotulando com o Microsoft Purview antes de gerar as inserções e certifique-se de tratar as inserções geradas com a mesma confidencialidade e classificação",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
- "service": "Entra",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Implementar um acesso de emergência ou contas de quebra-vidro para evitar o bloqueio de contas em todo o locatário",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "Criptografar dados usados para RAG com criptografia SSE/Disco com BYOK opcional",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "Entra",
- "severity": "Média",
- "text": "Evite usar contas sincronizadas locais para atribuições de função de ID do Microsoft Entra.",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Certifique-se de que o TLS seja aplicado para dados em trânsito entre fontes de dados, pesquisa de IA usada para RG (Geração Aumentada por Recuperação) e comunicação LLM",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Entra",
- "severity": "Média",
- "text": "Quando necessário, use o Microsoft Entra ID Application Proxy para dar aos usuários remotos acesso seguro e autenticado a aplicativos internos (hospedados na nuvem ou no local).",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Use o RBAC para gerenciar o acesso aos serviços do OpenAI do Azure. Atribua permissões apropriadas aos usuários e restrinja o acesso com base em suas funções e responsabilidades",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Aproveite um design de rede baseado na topologia de rede hub-and-spoke tradicional para cenários de rede que exigem flexibilidade máxima.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "Implemente técnicas de criptografia, mascaramento ou redação de dados para ocultar dados confidenciais ou substituí-los por valores ofuscados em ambientes de não produção ou ao compartilhar dados para fins de teste ou solução de problemas",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Verifique se os serviços de rede compartilhados, incluindo gateways de Rota Expressa, gateways VPN e Firewall do Azure ou NVAs de parceiros na rede virtual de hub central. Se necessário, implante também servidores DNS.",
- "waf": "Custar"
+ "text": "Utilize o Azure Defender para detectar e responder a ameaças de segurança e configurar mecanismos de monitoramento e alerta para identificar atividades suspeitas ou violações. Aproveite o Azure Sentinel para detecção e resposta avançadas a ameaças",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use uma rede DDoS ou planos de proteção IP para todos os endereços IP públicos nas zonas de aterrissagem do aplicativo.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Estabeleça políticas de retenção e descarte de dados para cumprir os regulamentos de conformidade. Implemente métodos de exclusão segura para dados que não são mais necessários e mantenha uma trilha de auditoria das atividades de retenção e descarte de dados",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
- "severity": "Média",
- "text": "Ao implantar tecnologias de rede de parceiros ou NVAs, siga as orientações do fornecedor parceiro",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Implementar proteções imediatas e detecção de aterramento usando a Segurança de conteúdo ",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
- "service": "ExpressRoute",
- "severity": "Baixo",
- "text": "Se você precisar transitar entre gateways ExpressRoute e VPN em cenários de hub e spoke, use o Servidor de Rota do Azure.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Garanta a conformidade com os regulamentos de proteção de dados relevantes, como GDPR ou HIPAA, implementando controles de privacidade e obtendo os consentimentos ou permissões necessários para atividades de processamento de dados.",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
- "service": "ARS",
- "severity": "Baixo",
- "text": "Se estiver usando o Servidor de Rotas, use um prefixo /27 para a sub-rede do Servidor de Rotas.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Eduque seus funcionários sobre as melhores práticas de segurança de dados, a importância de lidar com dados com segurança e os possíveis riscos associados a violações de dados. Incentive-os a seguir os protocolos de segurança de dados diligentemente.",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
- "service": "VNet",
- "severity": "Média",
- "text": "Para arquiteturas de rede com várias topologias de hub e spoke em regiões do Azure, use emparelhamentos de rede virtual global entre as VNets de hub para conectar as regiões umas às outras.",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Mantenha os dados de produção separados dos dados de desenvolvimento e teste. Use apenas dados confidenciais reais na produção e utilize dados anônimos ou sintéticos em ambientes de desenvolvimento e teste.",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use o Azure Monitor for Networks para monitorar o estado de ponta a ponta das redes no Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Operações"
+ "text": "Se você tiver níveis variados de confidencialidade de dados, considere criar índices separados para cada nível. Por exemplo, você pode ter um índice para dados gerais e outro para dados confidenciais, cada um regido por diferentes protocolos de acesso",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Ao conectar redes virtuais spoke à rede virtual do hub central, considere os limites de emparelhamento de VNet (500), o número máximo de prefixos que podem ser anunciados via Rota Expressa (1000)",
- "waf": "Fiabilidade"
+ "text": "Leve a segregação um passo adiante, colocando conjuntos de dados confidenciais em diferentes instâncias do serviço. Cada instância pode ser controlada com seu próprio conjunto específico de políticas RBAC",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
- "severity": "Média",
- "text": "Considere o limite de rotas por tabela de rotas (400).",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Reconheça que incorporações e vetores gerados a partir de informações confidenciais são eles próprios sensíveis. Esses dados devem receber as mesmas medidas de proteção que o material de origem",
+ "waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Use a configuração 'Permitir tráfego para rede virtual remota' ao configurar emparelhamentos de rede virtual",
- "waf": "Fiabilidade"
+ "text": "Aplique o RBAC aos armazenamentos de dados com incorporações e vetores e acesso ao escopo com base nos requisitos de acesso da função",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
- "service": "ExpressRoute",
- "severity": "Média",
- "text": "Quando você estiver usando o ExpressRoute Direct, configure o MACsec para criptografar o tráfego no nível de camada dois entre os roteadores da organização e o MSEE. O diagrama mostra essa criptografia no fluxo.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Configurar o ponto de extremidade privado para serviços de IA para restringir o acesso ao serviço em sua rede",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
- "severity": "Baixo",
- "text": "Para cenários em que MACsec não é uma opção (por exemplo, não usar o ExpressRoute Direct), use um gateway VPN para estabelecer túneis IPsec sobre emparelhamento privado da Rota Expressa.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Imponha um controle estrito de tráfego de entrada e saída com o Firewall do Azure e UDRs e limite os pontos de integração externos",
"waf": "Segurança"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Certifique-se de que nenhum espaço de endereço IP sobreposto entre regiões do Azure e locais locais seja usado",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "Implemente segmentação de rede e controles de acesso para restringir o acesso ao aplicativo LLM apenas a usuários e sistemas autorizados e evitar movimentos laterais",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
- "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
- "severity": "Baixo",
- "text": "Use endereços IP dos intervalos de alocação de endereços para internets privadas (RFC 1918).",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Use ferramentas de compactação imediatas como LLMLingua ou gprtrim",
+ "waf": "Otimização de custos"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
- "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Certifique-se de que o espaço de endereço IP não seja desperdiçado, não crie redes virtuais desnecessariamente grandes (por exemplo, /16)",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Desempenho"
+ "text": "Certifique-se de que as APIs e os endpoints usados pelo aplicativo LLM estejam devidamente protegidos com mecanismos de autenticação e autorização, como identidades gerenciadas, chaves de API ou OAuth, para impedir o acesso não autorizado.",
+ "waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
- "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
- "service": "VNet",
- "severity": "Alto",
- "text": "Evite usar intervalos de endereços IP sobrepostos para sites de produção e DR.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Aplique mecanismos fortes de autenticação do usuário final, como autenticação multifator, para impedir o acesso não autorizado ao aplicativo LLM e aos recursos de rede associados",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Para ambientes em que a resolução de nomes no Azure é tudo o que é necessário, use o DNS Privado do Azure para resolução com uma zona delegada para resolução de nomes (como 'azure.contoso.com').",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operações"
+ "text": "Implemente ferramentas de monitoramento de rede para detectar e analisar o tráfego de rede em busca de atividades suspeitas ou maliciosas. Habilite o registro para capturar eventos de rede e facilitar a análise forense em caso de incidentes de segurança",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
- "service": "DNS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Para ambientes em que a resolução de nomes no Azure e no local é necessária, considere usar o Resolvedor Privado de DNS do Azure.",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "text": "Realize auditorias de segurança e testes de penetração para identificar e resolver quaisquer pontos fracos ou vulnerabilidades de segurança de rede na infraestrutura de rede do aplicativo LLM",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
"severity": "Baixo",
- "text": "Cargas de trabalho especiais que exigem e implantam seu próprio DNS (como o Red Hat OpenShift) devem usar sua solução DNS preferida.",
- "waf": "Operações"
+ "text": "Os Serviços de IA do Azure são marcados corretamente para melhor gerenciamento",
+ "waf": "Excelência Operacional"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "614658d3-558f-4d77-849b-821112df27ee",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
- "service": "DNS",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "Baixo",
+ "text": "As contas do Serviço de IA do Azure seguem as convenções de nomenclatura organizacional",
+ "waf": "Excelência Operacional"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Habilite o registro automático para o DNS do Azure para gerenciar automaticamente o ciclo de vida dos registros DNS para as máquinas virtuais implantadas em uma rede virtual.",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "Operações"
+ "text": "Os logs de diagnóstico nos recursos de serviços de IA do Azure devem ser habilitados",
+ "waf": "Excelência Operacional"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
- "service": "Bastion",
- "severity": "Média",
- "text": "Considere usar o Bastião do Azure para se conectar com segurança à sua rede.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Recomenda-se que o acesso à chave (autenticação local) seja desabilitado por segurança. Depois de desabilitar o acesso baseado em chave, o Microsoft Entra ID se torna o único método de acesso, o que permite manter o princípio de privilégio mínimo e o controle granular. ",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
- "service": "Bastion",
- "severity": "Média",
- "text": "Use o Bastião do Azure em uma sub-rede /26 ou maior.",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Armazene e gerencie chaves com segurança usando o Azure Key Vault. Evite codificar ou inserir chaves confidenciais no código do aplicativo LLM e recuperá-las com segurança do Azure Key Vault usando identidades gerenciadas",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "WAF",
- "severity": "Média",
- "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre as regiões do Azure para conexões HTTP/S de entrada para uma zona de aterrissagem.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Gire e expire regularmente as chaves armazenadas no Azure Key Vault para minimizar o risco de acesso não autorizado.",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
- "severity": "Baixo",
- "text": "Ao usar o Azure Front Door e o Gateway de Aplicativo do Azure para ajudar a proteger aplicativos HTTP/S, use políticas de WAF no Azure Front Door. Bloqueie o Gateway de Aplicativo do Azure para receber tráfego somente do Azure Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Use tiktoken para entender os tamanhos de token para otimizações de token no modo de conversação",
+ "waf": "Otimização de custos"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Implantar WAFs e outros proxies reversos são necessários para conexões HTTP/S de entrada, implantá-los em uma rede virtual de zona de aterrissagem e junto com os aplicativos que eles estão protegendo e expondo à Internet.",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "Siga práticas de codificação segura para evitar vulnerabilidades comuns, como ataques de injeção, cross-site scripting (XSS) ou configurações incorretas de segurança",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Use os planos de Proteção de IP ou Rede DDoS do Azure para ajudar a proteger os pontos de extremidade de Endereços IP Públicos nas redes virtuais.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Configure um processo para atualizar e corrigir regularmente as bibliotecas LLM e outros componentes do sistema",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Avalie e analise a configuração e a estratégia do tráfego de saída da rede antes da próxima mudança de ruptura. Em 30 de setembro de 2025, o acesso de saída padrão para novas implantações será desativado e somente as configurações de acesso explícito serão permitidas",
- "waf": "Fiabilidade"
+ "text": "Aderir aos termos de uso, políticas e diretrizes do Azure OpenAI ou de outros LLMs e casos de uso permitidos",
+ "waf": "Excelência Operacional"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Entender a diferença no custo de modelos básicos e modelos ajustados e tamanhos de etapa de token",
+ "waf": "Otimização de custos"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"severity": "Alto",
- "text": "Adicione configurações de diagnóstico para salvar logs relacionados a DDoS para todos os endereços IP públicos protegidos (IP DDoS ou Proteção de Rede).",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Segurança"
+ "text": "Solicitações em lote, sempre que possível, para minimizar a sobrecarga por chamada, o que pode reduzir os custos gerais. Certifique-se de otimizar o tamanho do lote",
+ "waf": "Otimização de custos"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Verifique se você investigou a possibilidade de usar a Rota Expressa como conexão primária com o Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Desempenho"
+ "text": "Configure um sistema de rastreamento de custos que monitore o uso do modelo e use essas informações para ajudar a informar as escolhas do modelo e solicitar tamanhos",
+ "waf": "Otimização de custos"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "description": "Você pode usar os pesos de conexão e prependente de caminho AS para influenciar o tráfego do Azure para o local e toda a gama de atributos BGP em seus próprios roteadores para influenciar o tráfego do local para o Azure.",
- "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Ao usar vários circuitos de Rota Expressa ou vários locais locais, certifique-se de otimizar o roteamento com atributos BGP, se determinados caminhos forem preferidos.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidade"
+ "text": "Defina um limite máximo para o número de tokens por resposta do modelo. Otimize o tamanho para garantir que seja grande o suficiente para uma resposta válida",
+ "waf": "Otimização de custos"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
- "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Verifique se você está usando a SKU certa para os gateways ExpressRoute/VPN com base nos requisitos de largura de banda e desempenho.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Desempenho"
+ "text": "Examine as diretrizes fornecidas sobre como configurar a pesquisa de IA para confiabilidade",
+ "waf": "Excelência Operacional"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Certifique-se de que você está usando circuitos de Rota Expressa de dados ilimitados somente se atingir a largura de banda que justifica seu custo.",
- "waf": "Custar"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Planejar e gerenciar o armazenamento de vetores do AI Search",
+ "waf": "Excelência Operacional"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Aproveite a SKU Local da Rota Expressa para reduzir o custo de seus circuitos, se o local de emparelhamento de seus circuitos oferecer suporte às regiões do Azure para a SKU Local.",
- "waf": "Custar"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Aplique as práticas do LLMOps para automatizar o gerenciamento do ciclo de vida de seus aplicativos GenAI",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
- "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
- "service": "ExpressRoute",
- "severity": "Média",
- "text": "Implante um gateway de Rota Expressa com redundância de zona nas regiões do Azure com suporte.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Avalie o uso de modelos de faturamento - PAYG vs PTU",
+ "waf": "Otimização de custos"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Para cenários que exigem largura de banda superior a 10 Gbps ou portas dedicadas de 10/100 Gbps, use o ExpressRoute Direct.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Desempenho"
+ "text": "Avaliar a qualidade de prompts e aplicativos ao alternar entre versões de modelo",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Quando a baixa latência for necessária ou a taxa de transferência do local para o Azure precisar ser maior que 10 Gbps, habilite o FastPath para ignorar o gateway da Rota Expressa a partir do caminho de dados.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Desempenho"
+ "text": "Avalie, monitore e refine seus aplicativos GenAI para recursos como fundamentação, relevância, precisão, coerência, fluência,",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/vpnGateways",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
- "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
- "service": "VPN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use gateways VPN com redundância de zona para conectar filiais ou locais remotos ao Azure (quando disponível).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
- "waf": "Fiabilidade"
+ "text": "Avaliar os resultados do Azure AI Search com base em diferentes parâmetros de pesquisa",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/vpnGateways",
- "checklist": "Azure Landing Zone Review",
- "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
- "service": "VPN",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use dispositivos VPN redundantes no local (ativo/ativo ou ativo/passivo).",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
- "waf": "Fiabilidade"
+ "text": "Olhe para os modelos de ajuste fino como forma de aumentar a precisão somente quando você tiver tentado outras abordagens básicas, como engenharia rápida e RAG com seus dados",
+ "waf": "Excelência Operacional"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Se estiver usando o ExpressRoute Direct, considere usar circuitos locais do ExpressRoute para as regiões locais do Azure para economizar custos",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Custar"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
+ "severity": "Média",
+ "text": "Use técnicas de engenharia rápida para melhorar a precisão das respostas do LLM",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Quando o isolamento de tráfego ou a largura de banda dedicada forem necessários, como para separar ambientes de produção e de não produção, use circuitos de Rota Expressa diferentes. Ele ajudará você a garantir domínios de roteamento isolados e aliviar os riscos de vizinhos barulhentos.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Equipe vermelha de seus aplicativos GenAI",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Monitore a disponibilidade e a utilização do ExpressRoute usando o Express Route Insights integrado.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operações"
+ "text": "Forneça aos usuários finais opções de pontuação para respostas LLM e acompanhe essas pontuações. ",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
- "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
- "service": "ExpressRoute",
- "severity": "Média",
- "text": "Use o Monitor de Conexão para monitoramento de conectividade na rede, especialmente entre o local e o Azure.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operações"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
+ "severity": "Alto",
+ "text": "Considere as práticas de gerenciamento de cotas",
+ "waf": "Otimização de custos"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
- "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
"severity": "Média",
- "text": "Use circuitos de Rota Expressa de diferentes locais de emparelhamento para redundância.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidade"
+ "text": "Use soluções de balanceador de carga, como gateway baseado em APIM, para balancear carga e capacidade entre serviços e regiões",
+ "waf": "Excelência Operacional"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"severity": "Média",
- "text": "Use VPN site a site como failover da Rota Expressa, especialmente se estiver usando apenas um único circuito da Rota Expressa.",
+ "text": "Aproveite o servidor flexível",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
- "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
"severity": "Alto",
- "text": "Se você estiver usando uma tabela de rotas na GatewaySubnet, verifique se as rotas de gateway são propagadas.",
+ "text": "Aproveite as zonas de disponibilidade quando aplicável regionalmente",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "d581a947-69a2-4783-942e-9df3664324c8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Se estiver usando a Rota Expressa, seu roteamento local deve ser dinâmico: no caso de uma falha de conexão, ele deve convergir para a conexão restante do circuito. A carga deve ser compartilhada entre ambas as conexões idealmente como ativa/ativa, embora ativa/passiva também seja suportada.",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
+ "severity": "Média",
+ "text": "Aproveite a replicação de dados para cenários de DR entre regiões",
"waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
- "service": "ExpressRoute",
- "severity": "Média",
- "text": "Verifique se os dois links físicos do circuito da Rota Expressa estão conectados a dois dispositivos de borda distintos na rede.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Verifique se os controladores de domínio ADDS estão implantados na assinatura de identidade no Azure nativo",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
+ "service": "AVS",
"severity": "Média",
- "text": "Verifique se o BFD (Bidirectional Forwarding Detection) está habilitado e configurado em dispositivos de roteamento de borda do cliente ou provedor.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidade"
+ "text": "Verifique se os sites e serviços do ADDS estão configurados para manter as solicitações de autenticação de recursos baseados no Azure (incluindo a Solução VMware do Azure) locais para o Azure",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
+ "service": "AVS",
"severity": "Alto",
- "text": "Conecte o ExpressRoute Gateway a dois ou mais circuitos de locais de emparelhamento diferentes para maior resiliência.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Fiabilidade"
+ "text": "Verifique se o vCenter está conectado ao ADDS para habilitar a autenticação com base em 'contas de usuário nomeadas'",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
+ "service": "AVS",
"severity": "Média",
- "text": "Configure logs e alertas de diagnóstico para o gateway de rede virtual da Rota Expressa.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Operações"
+ "text": "Verifique se a conexão do vCenter com o ADDS está usando um protocolo seguro (LDAPS)",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
- "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
+ "service": "AVS",
"severity": "Média",
- "text": "Evite usar circuitos de Rota Expressa para comunicação de VNet-to-VNet.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "Desempenho"
+ "text": "A conta do CloudAdmin no vCenter IdP é usada apenas como uma conta de emergência (break-glass)",
+ "waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
+ "service": "AVS",
"severity": "Alto",
- "text": "Usar o Firewall do Azure para controlar o tráfego de saída do Azure para a Internet, conexões de entrada não HTTP/S e filtragem de tráfego Leste/Oeste (se a organização exigir)",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Certifique-se de que o NSX-Manager esteja integrado a um provedor de identidade externo (LDAPS)",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
+ "service": "AVS",
"severity": "Média",
- "text": "Crie uma política global do Firewall do Azure para controlar a postura de segurança no ambiente de rede global e atribua-a a todas as instâncias do Firewall do Azure. Permita que as políticas granulares atendam aos requisitos de regiões específicas delegando políticas de firewall incrementais a equipes de segurança locais por meio do controle de acesso baseado em função do Azure.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Foi criado um modelo RBAC para uso no VMware vSphere",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
- "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
- "service": "Firewall",
- "severity": "Baixo",
- "text": "Configure provedores de segurança SaaS de parceiros com suporte no Firewall Manager se a organização quiser usar essas soluções para ajudar a proteger as conexões de saída.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "As permissões RBAC devem ser concedidas em grupos ADDS e não em usuários específicos",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
+ "service": "AVS",
"severity": "Alto",
- "text": "Use regras de rede baseadas em FQDN e o Firewall do Azure com proxy DNS para filtrar o tráfego de saída para a Internet em protocolos sem suporte pelas regras de aplicativo.",
+ "text": "As permissões RBAC no recurso Solução VMware do Azure no Azure são 'bloqueadas' apenas para um conjunto limitado de proprietários",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
+ "service": "AVS",
"severity": "Alto",
- "text": "Use o Firewall do Azure Premium para segurança e proteção adicionais.",
+ "text": "Certifique-se de que todas as funções personalizadas tenham escopo com autorizações permitidas do CloudAdmin",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
+ "service": "AVS",
"severity": "Alto",
- "text": "Configure o modo de Inteligência de Ameaças do Firewall do Azure para Alertar e Negar para obter proteção adicional.",
- "waf": "Segurança"
+ "text": "O modelo de conectividade correto da Solução VMware do Azure está selecionado para o caso de uso do cliente em mãos?",
+ "waf": "Desempenho"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
+ "service": "AVS",
"severity": "Alto",
- "text": "Configure o modo IDPS do Firewall do Azure para Negar para obter proteção adicional.",
- "waf": "Segurança"
+ "text": "Garantir que as conexões de Rota Expressa ou VPN do local para o Azure sejam monitoradas usando o 'monitor de conexão'",
+ "waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
- "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
- "service": "Firewall",
- "severity": "Alto",
- "text": "Para sub-redes em redes virtuais não conectadas à WAN Virtual, anexe uma tabela de rotas para que o tráfego da Internet seja redirecionado para o Firewall do Azure ou para um Dispositivo Virtual de Rede",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "Verifique se um monitor de conexão foi criado a partir de um recurso nativo do Azure para uma máquina virtual da Solução VMware do Azure para monitorar a conexão de Rota Expressa de back-end da Solução VMware do Azure",
+ "waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
+ "service": "AVS",
"severity": "Média",
- "text": "Adicione configurações de diagnóstico para salvar logs, usando a tabela de destino Específico do Recurso, para todas as implantações do Firewall do Azure.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Verifique se um monitor de conexão é criado a partir de um recurso local para uma máquina virtual da Solução VMware do Azure para monitorar a conectividade de ponta 2",
"waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
- "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
- "service": "Firewall",
- "severity": "Importante",
- "text": "Migre das regras clássicas do Firewall do Azure (se existirem) para a Política de Firewall.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Quando o servidor de rotas for usado, certifique-se de que não mais de 1000 rotas sejam propagadas do servidor de rotas para o gateway ExR para o local (limite ARS).",
"waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
+ "service": "AVS",
"severity": "Alto",
- "text": "Use um prefixo /26 para suas sub-redes do Firewall do Azure.",
+ "text": "O Gerenciamento de Identidades Privilegiadas é implementado para funções que gerenciam o recurso da Solução VMware do Azure no Portal do Azure (não são permitidas permissões permanentes)",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
- "service": "Firewall",
- "severity": "Média",
- "text": "Organizar regras dentro da diretiva de firewall em Grupos de Coleta de Regras e Coleções de Regras e com base em sua frequência de uso",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Os relatórios de auditoria do Gerenciamento de Identidades Privilegiadas devem ser implementados para as funções PIM da Solução VMware do Azure",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
- "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
+ "service": "AVS",
"severity": "Média",
- "text": "Usar grupos de IP ou prefixos IP para reduzir o número de regras de tabela de IP",
- "waf": "Desempenho"
+ "text": "Se o uso do Gerenciamento de Identidades Privilegiadas estiver sendo usado, certifique-se de que uma conta válida habilitada para ID do Entra seja criada com um registro SMTP válido para notificações de substituição automática do Host da Solução VMware do Azure. (permissões permanentes necessárias)",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Limitar o uso da conta do CloudAdmin apenas ao acesso de emergência",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
+ "service": "AVS",
"severity": "Média",
- "text": "Evite curingas como um IP de origem para DNATS, como * ou qualquer, você deve especificar IPs de origem para DNATs de entrada",
- "waf": "Desempenho"
+ "text": "Criar funções RBAC personalizadas no vCenter para implementar um modelo de privilégios mínimos dentro do vCenter",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
+ "service": "AVS",
"severity": "Média",
- "text": "Evite o esgotamento da porta SNAT monitorando o uso da porta SNAT, avaliando as configurações do gateway NAT e garantindo failover contínuo. Se a contagem de portas se aproximar do limite, é um sinal de que a exaustão do SNAT pode ser iminente.",
- "waf": "Desempenho"
+ "text": "É um processo definido para alternar regularmente as credenciais cloudadmin (vCenter) e admin (NSX)",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "346840b8-1064-496e-8396-4b1340172d52",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
"severity": "Alto",
- "text": "Habilitar a inspeção TLS",
- "waf": "Desempenho"
+ "text": "Usar um provedor de identidade centralizado a ser usado para cargas de trabalho (VMs) em execução na Solução VMware do Azure",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
- "service": "Firewall",
- "severity": "Baixo",
- "text": "Use categorias da Web para permitir ou negar acesso de saída a tópicos específicos.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "A filtragem de tráfego Leste-Oeste é implementada no NSX-T",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
- "service": "Firewall",
- "severity": "Média",
- "text": "Como parte da inspeção TLS, planeje o recebimento de tráfego dos Gateways de Aplicativo do Azure para inspeção.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "As cargas de trabalho na Solução VMware do Azure não são diretamente expostas à Internet. O tráfego é filtrado e inspecionado pelo Gateway de Aplicativo do Azure, pelo Firewall do Azure ou por soluções de terceiros",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details",
- "service": "Firewall",
- "severity": "Média",
- "text": "Habilitar a configuração de proxy DNS do Firewall do Azure ",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "A auditoria e o registro em log são implementados para solicitações de entrada da Internet para cargas de trabalho baseadas na Solução VMware do Azure e na Solução VMware do Azure",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
+ "service": "AVS",
"severity": "Média",
- "text": "Verifique se há uma atribuição de diretiva para negar endereços IP públicos diretamente vinculados a Máquinas Virtuais",
+ "text": "O monitoramento de sessão é implementado para conexões de saída da Internet a partir da Solução VMware do Azure ou cargas de trabalho baseadas na Solução VMware do Azure para identificar atividades suspeitas/mal-intencionadas",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
- "service": "Firewall",
- "severity": "Baixo",
- "text": "Integre o Firewall do Azure ao Azure Monitor e habilite o log de diagnóstico para armazenar e analisar logs de firewall.",
- "waf": "Operações"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
- "severity": "Baixo",
- "text": "Implementar backups para suas regras de firewall",
- "waf": "Operações"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "App Gateway",
- "severity": "Alto",
- "text": "Verifique se a comunicação do plano de controle para serviços de PaaS do Azure injetados em uma rede virtual não está interrompida, por exemplo, com uma rota 0.0.0.0/0 ou uma regra NSG que bloqueia o tráfego do plano de controle.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "A proteção padrão contra DDoS está habilitada na sub-rede do Gateway ExR/VPN no Azure",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
+ "service": "AVS",
"severity": "Média",
- "text": "Acesse os serviços de PaaS do Azure locais por meio de pontos de extremidade privados e emparelhamento privado da Rota Expressa. Esse método evita o trânsito pela internet pública.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "Usar uma estação de trabalho de acesso privilegiado (PAW) dedicada para gerenciar a Solução VMware do Azure, o vCenter, o gerenciador NSX e o gerenciador HCX",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
- "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "VNet",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
+ "service": "AVS",
"severity": "Média",
- "text": "Não habilite pontos de extremidade de serviço de rede virtual por padrão em todas as sub-redes.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "text": "Habilitar a Detecção Avançada de Ameaças (Microsoft Defender for Cloud, também conhecido como ASC) para cargas de trabalho em execução na Solução VMware do Azure",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
+ "service": "AVS",
"severity": "Média",
- "text": "Filtre o tráfego de saída para os serviços de PaaS do Azure usando FQDNs em vez de endereços IP no Firewall do Azure ou em um NVA para impedir a exfiltração de dados. Se estiver usando o Private Link, você poderá bloquear todos os FQDNs, caso contrário, permita apenas os serviços de PaaS necessários.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "text": "Usar o Azure ARC for Servers para controlar corretamente as cargas de trabalho em execução na Solução VMware do Azure usando tecnologias nativas do Azure (o Azure ARC for Azure VMware Solution ainda não está disponível)",
"waf": "Segurança"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
- "service": "ExpressRoute",
- "severity": "Alto",
- "text": "Use pelo menos um prefixo /27 para suas sub-redes do Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Garanta que as cargas de trabalho na Solução VMware do Azure usem criptografia de dados suficiente durante o tempo de execução (como criptografia de disco convidado e SQL TDE). (a criptografia vSAN em repouso é padrão)",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
- "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
- "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
- "service": "NSG",
- "severity": "Média",
- "text": "Não confie nas regras padrão de entrada do NSG usando a marca de serviço VirtualNetwork para limitar a conectividade.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Quando a criptografia no convidado é usada, armazene chaves de criptografia no cofre de chaves do Azure quando possível",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
- "service": "NSG",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
+ "service": "AVS",
"severity": "Média",
- "text": "Use NSGs para ajudar a proteger o tráfego entre sub-redes, bem como o tráfego leste/oeste através da plataforma (tráfego entre zonas de pouso).",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "text": "Considere usar o suporte estendido de atualização de segurança para cargas de trabalho em execução na Solução VMware do Azure (a Solução VMware do Azure é qualificada para ESU)",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
- "severity": "Média",
- "text": "A equipe de aplicativos deve usar grupos de segurança de aplicativos nos NSGs de nível de sub-rede para ajudar a proteger VMs de várias camadas dentro da zona de aterrissagem.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Certifique-se de que o método de redundância de dados vSAN apropriado seja usado (especificação RAID)",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
- "severity": "Média",
- "text": "Use NSGs e grupos de segurança de aplicativos para microssegmentar o tráfego dentro da zona de aterrissagem e evite usar um NVA central para filtrar os fluxos de tráfego.",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Certifique-se de que a política de falha na tolerância esteja em vigor para atender às suas necessidades de armazenamento vSAN",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
- "severity": "Média",
- "text": "Habilite os Logs de Fluxo de Rede Virtual e alimente-os na Análise de Tráfego para obter insights sobre os fluxos de tráfego internos e externos.",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Certifique-se de ter solicitado cota suficiente, garantindo que você tenha considerado o crescimento e o requisito de recuperação de desastres",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
- "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "NSG",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
+ "service": "AVS",
"severity": "Média",
- "text": "Considere o limite de regras NSG por NSG (1000).",
- "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "waf": "Fiabilidade"
+ "text": "Certifique-se de que as restrições de acesso ao ESXi sejam compreendidas, há limites de acesso que podem afetar as soluções de terceiros 3rd.",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
+ "service": "AVS",
"severity": "Média",
- "text": "Considere a WAN Virtual para gerenciamento simplificado de rede do Azure e verifique se seu cenário está explicitamente descrito na lista de designs de roteamento de WAN Virtual",
- "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "text": "Certifique-se de ter uma política em torno da densidade e eficiência do host ESXi, tendo em mente o prazo de espera para solicitar novos nós",
"waf": "Operações"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
+ "service": "AVS",
"severity": "Média",
- "text": "Use um hub de WAN Virtual por região do Azure para conectar várias zonas de aterrissagem entre regiões do Azure por meio de uma WAN Virtual do Azure global comum.",
- "waf": "Desempenho"
+ "text": "Garantir que um bom processo de gerenciamento de custos esteja em vigor para a Solução VMware do Azure - o Gerenciamento de Custos do Azure pode ser usado",
+ "waf": "Custar"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
+ "service": "AVS",
"severity": "Baixo",
- "text": "Siga o princípio 'o tráfego no Azure permanece no Azure' para que a comunicação entre recursos no Azure ocorra por meio da rede de backbone da Microsoft",
+ "text": "As instâncias reservadas do Azure são usadas para otimizar o custo de uso da Solução VMware do Azure",
+ "waf": "Custar"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "Considere o uso do Azure Private-Link ao usar outros Serviços Nativos do Azure",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Verifique se todos os recursos necessários residem na(s) mesma(s) zona(s) de disponibilidade do Azure",
"waf": "Desempenho"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
- "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
+ "service": "AVS",
"severity": "Média",
- "text": "Para proteção e filtragem de tráfego de Internet de saída, implante o Firewall do Azure em hubs seguros",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "Habilitar cargas de trabalho de VM convidada do Microsoft Defender for Cloud for Azure VMware Solution",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
+ "service": "AVS",
"severity": "Média",
- "text": "Verifique se a arquitetura de rede está dentro dos limites da WAN Virtual do Azure.",
- "waf": "Fiabilidade"
+ "text": "Usar servidores habilitados para Arc do Azure para gerenciar suas cargas de trabalho de VM convidada da Solução VMware do Azure",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Habilitar o log de diagnóstico e de métrica na solução VMware do Azure",
+ "waf": "Operações"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o Azure Monitor Insights para WAN Virtual para monitorar a topologia de ponta a ponta da WAN Virtual, o status e as principais métricas.",
+ "text": "Implantar os agentes do Log Analytics nas cargas de trabalho da VM convidada da Solução VMware do Azure",
"waf": "Operações"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
"severity": "Média",
- "text": "Certifique-se de que suas implantações de IaC não desabilitem o tráfego de ramificação para filial na WAN Virtual, a menos que esses fluxos devam ser explicitamente bloqueados.",
- "waf": "Fiabilidade"
+ "text": "Verifique se você tem uma política e uma solução de backup documentadas e implementadas para cargas de trabalho de VM da Solução VMware do Azure",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o AS-Path como preferência de roteamento de hub, já que ele é mais flexível do que o ExpressRoute ou o VPN.",
- "waf": "Fiabilidade"
+ "text": "Usar o Microsoft Defender for Cloud para monitoramento de conformidade de cargas de trabalho em execução no Azure VMware Solution",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
"severity": "Média",
- "text": "Certifique-se de que suas implantações IaC estejam configurando a propagação baseada em rótulo na WAN Virtual, caso contrário, a conectividade entre hubs virtuais será prejudicada.",
- "waf": "Fiabilidade"
+ "text": "São as linhas de base de conformidade aplicáveis adicionadas ao Microsoft Defender for Cloud",
+ "waf": "Segurança"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/virtualWans",
- "checklist": "Azure Landing Zone Review",
- "guid": "9c75dfef-573c-461c-a698-68598595581a",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
- "service": "VWAN",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
"severity": "Alto",
- "text": "Atribua espaço IP suficiente a hubs virtuais, idealmente um prefixo /23.",
- "waf": "Fiabilidade"
+ "text": "A residência de dados foi avaliada ao selecionar regiões do Azure a serem usadas para a implantação da Solução VMware do Azure",
+ "waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
"severity": "Alto",
- "text": "Aproveite a Política do Azure estrategicamente, defina controles para seu ambiente, usando Iniciativas de Política para agrupar políticas relacionadas.",
+ "text": "As implicações do processamento de dados (modelo de prestador de serviços / consumidor de serviços) são claras e documentadas",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"severity": "Média",
- "text": "Mapeie os requisitos normativos e de conformidade para definições de Política do Azure e atribuições de função do Azure.",
+ "text": "Considere o uso de CMK (Customer Managed Key) para vSAN somente se necessário por motivo(s) de conformidade.",
"waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Média",
- "text": "Estabelecer definições de Política do Azure no grupo de gerenciamento raiz intermediário para que possam ser atribuídas em escopos herdados",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Criar painéis para habilitar os principais insights de monitoramento da Solução VMware do Azure",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Média",
- "text": "Gerencie atribuições de política no nível mais alto apropriado, com exclusões nos níveis inferiores, se necessário.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Criar alertas de aviso para limites críticos para alertas automáticos sobre o desempenho da solução VMware do Azure (CPU >80%, memória média >80%, vSAN >70%)",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "43334f24-9116-4341-a2ba-527526944008",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
- "service": "Policy",
- "severity": "Baixo",
- "text": "Usar a Política do Azure para controlar quais serviços os usuários podem provisionar no nível do grupo de assinatura/gerenciamento",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Certifique-se de que o alerta crítico seja criado para monitorar se o consumo de vSAN está abaixo de 75%, pois esse é um limite de suporte do VMware",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Média",
- "text": "Use políticas internas sempre que possível para minimizar a sobrecarga operacional.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Verifique se os alertas estão configurados para alertas e notificações de Integridade do Serviço do Azure",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "description": "A atribuição da função Colaborador de Política de Recursos a escopos específicos permite delegar o gerenciamento de políticas a equipes relevantes. Por exemplo, uma equipe central de TI pode supervisionar políticas de nível de grupo de gerenciamento, enquanto as equipes de aplicativos lidam com políticas para suas assinaturas, permitindo a governança distribuída com aderência aos padrões organizacionais.",
- "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
- "service": "Policy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
"severity": "Média",
- "text": "Atribua a função interna de Colaborador de Política de Recursos em um escopo específico para habilitar a governança em nível de aplicativo.",
- "waf": "Segurança"
+ "text": "Configurar o log da Solução VMware do Azure para ser enviado a uma conta de Armazenamento do Azure ou ao Azure EventHub para processamento",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "19048384-5c98-46cb-8913-156a12476e49",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "Média",
- "text": "Limite o número de atribuições da Política do Azure feitas no escopo do grupo de gerenciamento raiz para evitar o gerenciamento por meio de exclusões em escopos herdados.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Se for necessário um insight profundo no VMware vSphere: o vRealize Operations e/ou o vRealize Network Insights são usados na solução?",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
- "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
- "service": "Policy",
- "severity": "Média",
- "text": "Se existirem requisitos de soberania de dados, as Políticas do Azure podem ser implantadas para impô-los",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Verifique se a política de armazenamento vSAN para VMs NÃO é a política de armazenamento padrão, pois essa política aplica provisionamento espesso",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
- "service": "Policy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
"severity": "Média",
- "text": "Para a Zona de Desembarque Soberano, a iniciativa política de base da política de soberania é implantada e atribuída no nível correto de MG.",
- "waf": "Segurança"
+ "text": "Verifique se as bibliotecas de conteúdo do vSphere não são colocadas no vSAN, pois o vSAN é um recurso finito",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
- "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
- "service": "Policy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
"severity": "Média",
- "text": "Para a Zona de Desembarque Soberano, os objetivos de Controle Soberano para o mapeamento de políticas são documentados.",
- "waf": "Segurança"
+ "text": "Certifique-se de que os repositórios de dados da solução de backup sejam armazenados fora do armazenamento vSAN. No nativo do Azure ou em um armazenamento de dados com backup de pool de discos",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
- "service": "Policy",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
"severity": "Média",
- "text": "Para a Zona de Desembarque Soberano, está em vigor o processo para CRUD de \"Objetivos de Controle Soberano para mapeamento de políticas\".",
- "waf": "Segurança"
+ "text": "Garantir que as cargas de trabalho em execução na Solução VMware do Azure sejam gerenciadas de forma híbrida usando o Azure Arc for Servers (a Solução VMware do Arc for Azure está em visualização)",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"severity": "Média",
- "text": "Use um único espaço de trabalho de logs de monitor para gerenciar plataformas centralmente, exceto onde o controle de acesso baseado em função do Azure (RBAC do Azure), os requisitos de soberania de dados ou as políticas de retenção de dados exigem espaços de trabalho separados.",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "text": "Garantir que as cargas de trabalho em execução na Solução VMware do Azure sejam monitoradas usando o Azure Log Analytics e o Azure Monitor",
"waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Monitor",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
"severity": "Média",
- "text": "Exporte logs para o Armazenamento do Azure se seus requisitos de retenção de log excederem doze anos. Use o armazenamento imutável com uma política de gravação única e leitura de muitos para tornar os dados não apagáveis e não modificáveis por um intervalo especificado pelo usuário.",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "text": "Incluir cargas de trabalho em execução na Solução VMware do Azure nas ferramentas de gerenciamento de atualizações existentes ou no Gerenciamento de Atualizações do Azure",
"waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
"severity": "Média",
- "text": "Monitore o desvio de configuração da máquina virtual (VM) no nível do sistema operacional usando a Política do Azure. Habilitar os recursos de auditoria de Configuração de Máquina do Azure Automanage por meio da política ajuda as cargas de trabalho da equipe de aplicativos a consumir imediatamente os recursos de recursos com pouco esforço.",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "text": "Usar a Política do Azure para integrar cargas de trabalho da Solução VMware do Azure nas soluções de Gerenciamento, Monitoramento e Segurança do Azure",
"waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o Azure Update Manager como um mecanismo de aplicação de patches para VMs do Windows e Linux no Azure.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operações"
+ "text": "Garantir que as cargas de trabalho em execução na Solução VMware do Azure sejam integradas ao Microsoft Defender for Cloud",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o Azure Update Manager como um mecanismo de aplicação de patches para VMs Windows e Linux fora do Azure usando o Azure Arc.",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "Operações"
+ "text": "Certifique-se de que os backups não sejam armazenados no vSAN, pois o vSAN é um recurso finito",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Network Watcher",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o Inspetor de Rede para monitorar proativamente os fluxos de tráfego",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "Operações"
+ "text": "Todas as soluções de DR foram consideradas e uma solução que é melhor para o seu negócio foi decidida? [SRM/JetStream/Zerto/Veeam/...]",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Monitor",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
"severity": "Média",
- "text": "Use os Logs do Azure Monitor para insights e relatórios.",
- "waf": "Operações"
+ "text": "Usar o Azure Site Recovery quando a tecnologia de Recuperação de Desastres for IaaS nativa do Azure",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
- "service": "Monitor",
- "severity": "Média",
- "text": "Use alertas do Azure Monitor para a geração de alertas operacionais.",
- "waf": "Operações"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Use planos de recuperação automatizados com qualquer uma das soluções de desastre, evite ao máximo tarefas manuais",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "Monitor",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
"severity": "Média",
- "text": "Ao usar o Controle de Alterações e Inventário por meio de Contas de Automação do Azure, verifique se você selecionou regiões com suporte para vincular seu espaço de trabalho do Log Analytics e contas de automação.",
- "waf": "Operações"
+ "text": "Usar o par de regiões geopolíticas como o ambiente secundário de recuperação de desastres",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Backup",
- "severity": "Média",
- "text": "Ao usar o Backup do Azure, considere os diferentes tipos de backup (GRS, ZRS E LRS), pois a configuração padrão é GRS",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Use 2 espaços de endereço diferentes entre as regiões, por exemplo: 10.0.0.0/16 e 192.168.0.0/16 para as diferentes regiões",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"severity": "Média",
- "text": "Use as políticas do Azure para implantar automaticamente configurações de software por meio de extensões de VM e impor uma configuração de VM de linha de base compatível.",
- "waf": "Segurança"
+ "text": "O ExpressRoute Global Reach será usado para conectividade entre as Nuvens Privadas da Solução VMware do Azure primária e secundária ou o roteamento é feito por meio de dispositivos virtuais de rede?",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "description": "Os recursos de configuração de convidado da Política do Azure podem auditar e corrigir as configurações do computador (por exemplo, sistema operacional, aplicativo, ambiente) para garantir que os recursos estejam alinhados com as configurações esperadas, e o Gerenciamento de Atualizações pode impor o gerenciamento de patches para VMs.",
- "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"severity": "Média",
- "text": "Monitore o desvio de configuração de segurança da VM por meio da Política do Azure.",
- "waf": "Segurança"
+ "text": "Todas as soluções de backup foram consideradas e uma solução que é melhor para o seu negócio foi decidida? [ MABS/CommVault/Metallic.io/Veeam/ . ]",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o Azure Site Recovery para cenários de recuperação de desastres de Máquinas Virtuais do Azure para Azure. Isso permite que você replique cargas de trabalho entre regiões.",
- "waf": "Operações"
+ "text": "Implante sua solução de backup na mesma região que sua nuvem privada da Solução VMware do Azure",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "Backup",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
"severity": "Média",
- "text": "Use os recursos de backup nativos do Azure ou uma solução de backup de terceiros de terceiros compatível com o Azure.",
- "waf": "Operações"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
- "severity": "Alto",
- "text": "Aproveite as zonas de disponibilidade para suas VMs em regiões onde elas são suportadas.",
+ "text": "Implante sua solução de backup fora do vSan, em componentes nativos do Azure",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
- "severity": "Alto",
- "text": "Evite executar uma carga de trabalho de produção em uma única VM.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Existe um processo para solicitar uma restauração dos componentes VMware gerenciados pela Plataforma Azure?",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "Média",
- "text": "O Balanceador de Carga do Azure e o Gateway de Aplicativo distribuem o tráfego de rede de entrada em vários recursos.",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Para implantações manuais, todas as configurações e implantações devem ser documentadas",
+ "waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "WAF",
- "severity": "Alto",
- "text": "Adicione configurações de diagnóstico para salvar logs WAF de serviços de entrega de aplicativos, como o Azure Front Door e o Azure Application Gateway. Analise regularmente os logs para verificar se há ataques e detecções de falsos positivos.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Para implantações manuais, considere implementar bloqueios de recursos para evitar ações acidentais em sua nuvem privada de solução VMware do Azure",
"waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "WAF",
- "severity": "Média",
- "text": "Envie logs do WAF de seus serviços de entrega de aplicativos, como o Azure Front Door e o Azure Application Gateway, para o Microsoft Sentinel. Detecte ataques e integre a telemetria WAF ao seu ambiente geral do Azure.",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Para implantações automatizadas, implante uma nuvem privada mínima e dimensione conforme necessário",
"waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "5017f154-e3ab-4369-9829-e7e316183687",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "Key Vault",
- "severity": "Alto",
- "text": "Usar o Cofre de Chaves do Azure para armazenar seus segredos e credenciais",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Para implantações automatizadas, solicite ou reserve cota antes de iniciar a implantação",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "guid": "a0477a20-9945-4bda-9333-4f2491163418",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
- "service": "Key Vault",
- "severity": "Média",
- "text": "Use diferentes Cofres de Chaves do Azure para diferentes aplicativos e regiões para evitar limites de escala de transação e restringir o acesso a segredos.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Para implantação automatizada, verifique se os bloqueios de recursos relevantes são criados por meio da automação ou da Política do Azure para uma governança adequada",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Média",
- "text": "Provisione o Cofre de Chaves do Azure com as políticas de exclusão e limpeza suaves habilitadas para permitir a proteção de retenção para objetos excluídos.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Implemente nomes humanos compreensíveis para chaves de autorização ExR para permitir a fácil identificação da finalidade/uso das chaves",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Média",
- "text": "Siga um modelo de privilégios mínimos, limitando a autorização para excluir permanentemente chaves, segredos e certificados para funções personalizadas especializadas do Microsoft Entra ID.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Usar o Cofre de chaves para armazenar segredos e chaves de autorização quando Princípios de Serviço separados são usados para implantar a Solução VMware do Azure e a Rota Expressa",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Média",
- "text": "Automatize o processo de gerenciamento e renovação de certificados com autoridades de certificação públicas para facilitar a administração.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Defina dependências de recursos para serializar ações no IaC quando muitos recursos precisarem ser implantados no/na Solução VMware do Azure, pois a Solução VMware do Azure oferece suporte apenas a um número limitado de operações paralelas.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "913156a1-2476-4e49-b541-acdce979377b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "Média",
- "text": "Estabeleça um processo automatizado para rotação de chaves e certificados.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
+ "severity": "Baixo",
+ "text": "Ao executar a configuração automatizada de segmentos NSX-T com um único gateway de Camada 1, use as APIs do Portal do Azure em vez das APIs do NSX-Manager",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
"severity": "Média",
- "text": "Habilite o firewall e o ponto de extremidade do serviço de rede virtual ou o ponto de extremidade privado no cofre para controlar o acesso ao cofre de chaves.",
- "waf": "Segurança"
+ "text": "Ao pretender usar a expansão automatizada, certifique-se de aplicar cota suficiente da Solução VMware do Azure para as assinaturas que executam a Solução VMware do Azure",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
"severity": "Média",
- "text": "Use o espaço de trabalho central do Azure Monitor Log Analytics para auditar o uso de chaves, certificados e segredos em cada instância do Cofre de Chaves.",
- "waf": "Segurança"
+ "text": "Ao pretender usar o scale-in automatizado, certifique-se de levar em consideração os requisitos da política de armazenamento antes de executar essa ação",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
"severity": "Média",
- "text": "Delegue instanciação do Cofre da Chave e acesso privilegiado e use a Política do Azure para impor uma configuração consistente e compatível.",
- "waf": "Segurança"
+ "text": "As operações de dimensionamento sempre precisam ser serializadas em um único SDDC, pois apenas uma operação de escala pode ser executada por vez (mesmo quando vários clusters são usados)",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
"severity": "Média",
- "text": "Use um Cofre de Chaves do Azure por aplicativo, por ambiente, por região.",
- "waf": "Segurança"
+ "text": "Considerar e validar operações de dimensionamento em soluções de terceiros 3rd usadas na arquitetura (suportadas ou não)",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
"severity": "Média",
- "text": "Se você quiser trazer suas próprias chaves, isso pode não ser suportado em todos os serviços considerados. Implemente mitigações relevantes para que as inconsistências não prejudiquem os resultados desejados. Escolha pares de regiões apropriados e regiões de recuperação de desastres que minimizem a latência.",
- "waf": "Segurança"
+ "text": "Definir e impor limites máximos de entrada/saída de escala para seu ambiente nas automações",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
"severity": "Média",
- "text": "Para Sovereign Landing Zone, use o HSM gerenciado pelo Cofre de Chaves do Azure para armazenar seus segredos e credenciais.",
- "waf": "Segurança"
+ "text": "Implementar regras de monitoramento para monitorar operações de dimensionamento automatizadas e monitorar o sucesso e a falha para habilitar respostas apropriadas (automatizadas)",
+ "waf": "Operações"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
- "service": "Entra",
- "severity": "Média",
- "text": "Use os recursos de relatório do Microsoft Entra ID para gerar relatórios de auditoria de controle de acesso.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Ao usar o MON, esteja ciente dos limites de VMs configuradas simulataneamente (MON Limit for HCX [400 - standard, 1000 - Larger appliance])",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "09945bda-4333-44f2-9911-634182ba5275",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
- "service": "Defender",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "Alto",
- "text": "Habilite o Defender Cloud Security Posture Management para todas as assinaturas.",
- "waf": "Segurança"
+ "text": "Ao usar o MON, você não pode habilitar o MON em mais de 100 extensões de rede",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
- "service": "Defender",
- "severity": "Alto",
- "text": "Habilite um Plano de Proteção de Carga de Trabalho do Defender Cloud para Servidores em todas as assinaturas.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "Se estiver usando uma conexão VPN para migrações, ajuste o tamanho da MTU de acordo.",
+ "waf": "Desempenho"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
- "service": "Defender",
- "severity": "Alto",
- "text": "Habilite os Planos de Proteção de Carga de Trabalho do Defender Cloud para Recursos do Azure em todas as assinaturas.",
- "waf": "Segurança"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
- "service": "VM",
- "severity": "Alto",
- "text": "Habilite o Endpoint Protection em servidores IaaS.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
+ "severity": "Média",
+ "text": "Para regiões de baixa conectividade conectadas ao Azure (500Mbps ou menos), considere implantar o dispositivo de otimização de WAN HCX",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
- "link": "https://learn.microsoft.com/azure/security-center/",
- "service": "VM",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
"severity": "Média",
- "text": "Monitore o desvio de patches do sistema operacional base por meio do Azure Monitor Logs e do Defender for Cloud.",
- "waf": "Segurança"
+ "text": "Certifique-se de que as migrações sejam iniciadas a partir do dispositivo local e NÃO do dispositivo em nuvem (NÃO execute uma migração reversa)",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
"severity": "Média",
- "text": "Conecte configurações de recursos padrão a um espaço de trabalho centralizado do Azure Monitor Log Analytics.",
- "waf": "Segurança"
+ "text": "Quando o Azure Netapp Files for usado para estender o armazenamento para a Solução VMware do Azure, considere usá-lo como um armazenamento de dados VMware em vez de anexá-lo diretamente a uma VM.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
- "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
- "service": "Entra",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"severity": "Média",
- "text": "Para a Zona de Pouso Soberano, os logs de transparência são habilitados no locatário do ID do Entra.",
- "waf": "Segurança"
+ "text": "Verifique se um ExpressRoute Gateway dedicado está sendo usado para soluções de armazenamento de dados externos",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
- "service": "Entra",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
"severity": "Média",
- "text": "Para Sovereign Landing Zone, o Customer Lockbox está habilitado no locatário do Entra ID.",
- "waf": "Segurança"
+ "text": "Verifique se o FastPath está habilitado no ExpressRoute Gateway que está sendo usado para soluções de armazenamento de dados externos",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Storage",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
"severity": "Alto",
- "text": "A transferência segura para contas de armazenamento deve ser habilitada",
- "waf": "Segurança"
+ "text": "Se estiver usando cluster estendido, verifique se a solução de recuperação de desastres selecionada é suportada pelo fornecedor",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
- "service": "Storage",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
"severity": "Alto",
- "text": "Habilite a exclusão flexível do contêiner para que a conta de armazenamento recupere um contêiner excluído e seu conteúdo.",
- "waf": "Segurança"
+ "text": "Se estiver usando cluster estendido, verifique se o SLA fornecido atenderá aos seus requisitos",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "service": "Key Vault",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
"severity": "Alto",
- "text": "Use segredos do Cofre de Chaves para evitar a codificação de informações confidenciais, como credenciais (máquinas virtuais, senhas de usuário), certificados ou chaves.",
- "waf": "Operações"
- },
- {
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
- "severity": "Média",
- "text": "Aproveite o Manual de Resiliência de FTA para o Azure Data Factory",
+ "text": "Se estiver usando cluster estendido, verifique se ambos os circuitos da Rota Expressa estão conectados ao hub de conectividade.",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
"severity": "Alto",
- "text": "Usar pipelines redundantes de zona em regiões que oferecem suporte a zonas de disponibilidade",
+ "text": "Se estiver usando cluster estendido, verifique se ambos os circuitos da Rota Expressa têm o GlobalReach habilitado.",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
- "severity": "Média",
- "text": "Usar DevOps para fazer backup dos modelos ARM com a integração Github/Azure DevOps ",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
+ "severity": "Alto",
+ "text": "Faça com que as configurações de tolerância a desastres do site tenham sido devidamente consideradas e alteradas para sua empresa, se necessário.",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
"severity": "Média",
- "text": "Certifique-se de replicar as VMs do Self-Hosted Integration Runtime em outra região ",
+ "text": "Implante seus recursos de conectividade de zona de destino do Azure em várias regiões, para que você possa dar suporte rapidamente a zonas de destino de aplicativos de várias regiões e cenários de recuperação de desastre.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "service": "Entra",
"severity": "Média",
- "text": "Certifique-se de replicar ou duplicar sua rede na região irmã. Você tem que fazer uma cópia do seu Vnet em outra região",
- "waf": "Fiabilidade"
+ "text": "Use um locatário do Entra para gerenciar seus recursos do Azure, a menos que você tenha um requisito regulatório ou comercial claro para multilocatários.",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
+ "waf": "Operações"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "description": "Se seus pipelines do ADF usarem o Cofre de Chaves, você não precisará fazer nada para replicar o Cofre de Chaves. O Cofre de Chaves é um serviço gerenciado e a Microsoft cuida dele para você",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Entra",
"severity": "Baixo",
- "text": "Se estiver usando a integração do Keyvault, use o SLA do Keyvault para entender sua disponibilidade",
- "waf": "Fiabilidade"
+ "text": "Use a abordagem de Automação Multilocatário para gerenciar seus locatários de ID do Microsoft Entra.",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
+ "waf": "Operações"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
- "severity": "Baixo",
- "text": "Consulte a arquitetura de aplicativo Web com redundância de zona altamente disponível da linha de base para obter as práticas recomendadas",
- "waf": "Fiabilidade"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Use o Azure Lighthouse para gerenciamento de vários locatários com as mesmas IDs.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
+ "waf": "Operações"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
- "severity": "Média",
- "text": "Use as camadas Premium e Standard. Esses níveis oferecem suporte a slots de preparo e backups automatizados.",
- "waf": "Fiabilidade"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Se você conceder a um parceiro acesso para administrar seu locatário, use o Azure Lighthouse.",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
+ "waf": "Custar"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "service": "Entra",
"severity": "Alto",
- "text": "Aproveite as zonas de disponibilidade quando aplicável regionalmente (requer a camada Premium v2 ou v3)",
- "waf": "Fiabilidade"
+ "text": "Aplique um modelo RBAC que se alinhe ao seu modelo operacional de nuvem. Escopo e Atribuição entre Grupos de Gerenciamento e Assinaturas.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
+ "service": "Entra",
"severity": "Média",
- "text": "Implementar verificações de integridade",
- "waf": "Fiabilidade"
+ "text": "Use apenas o tipo de autenticação Conta corporativa ou de estudante para todos os tipos de conta. Evite usar a conta da Microsoft",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
- "severity": "Alto",
- "text": "Consulte as práticas recomendadas de backup e restauração para o Serviço de Aplicativo do Azure",
- "waf": "Fiabilidade"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Use apenas grupos para atribuir permissões. Adicione grupos locais ao grupo Somente ID do Entra se um sistema de gerenciamento de grupo já estiver em vigor.",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "service": "Entra",
"severity": "Alto",
- "text": "Implementar práticas recomendadas de confiabilidade do Serviço de Aplicativo do Azure",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
- "severity": "Baixo",
- "text": "Familiarizar-se com como mover um aplicativo do Serviço de Aplicativo para outra região durante um desastre",
- "waf": "Fiabilidade"
+ "text": "Imponha políticas de Acesso Condicional da ID do Microsoft Entra para qualquer usuário com direitos a ambientes do Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "service": "Entra",
"severity": "Alto",
- "text": "Familiarizar-se com o suporte de confiabilidade no Serviço de Aplicativo do Azure",
- "waf": "Fiabilidade"
+ "text": "Imponha a autenticação multifator para qualquer usuário com direitos aos ambientes do Azure.",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "Entra",
"severity": "Média",
- "text": "Verifique se \"Sempre Ativo\" está habilitado para Aplicativos de Função em execução em um plano de serviço de aplicativo",
- "waf": "Fiabilidade"
+ "text": "Imponha o Microsoft Entra ID Privileged Identity Management (PIM) para estabelecer acesso permanente zero e privilégios mínimos.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"severity": "Média",
- "text": "Monitorar instâncias do Serviço de Aplicativo usando verificações de integridade",
- "waf": "Fiabilidade"
+ "text": "Se estiver planejando alternar dos Serviços de Domínio Active Directory para os serviços de domínio Entra, avalie a compatibilidade de todas as cargas de trabalho.",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"severity": "Média",
- "text": "Monitorar a disponibilidade e a capacidade de resposta do aplicativo Web ou site usando testes de disponibilidade do Application Insights",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Azure App Service Review",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
- "severity": "Baixo",
- "text": "Usar o teste Application Insights Standard para monitorar a disponibilidade e a capacidade de resposta do aplicativo Web ou site",
+ "text": "Ao usar o Microsoft Entra Domain Services, use conjuntos de réplicas. Os conjuntos de réplicas melhorarão a resiliência do domínio gerenciado e permitirão que você implante em regiões adicionais. ",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Use o Cofre de Chaves do Azure para armazenar quaisquer segredos de que o aplicativo precisa. O Cofre de Chaves fornece um ambiente seguro e auditado para armazenar segredos e está bem integrado ao Serviço de Aplicativo por meio do SDK do Cofre de Chaves ou das Referências do Cofre de Chaves do Serviço de Aplicativo.",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
- "severity": "Alto",
- "text": "Usar o Cofre de Chaves para armazenar segredos",
- "waf": "Segurança"
- },
- {
- "checklist": "Azure App Service Review",
- "description": "Use uma Identidade Gerenciada para se conectar ao Cofre de Chaves usando o SDK do Cofre de Chaves ou por meio das Referências do Cofre de Chaves do Serviço de Aplicativo.",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
- "severity": "Alto",
- "text": "Usar a Identidade Gerenciada para se conectar ao Cofre de Chaves",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Integre os logs de ID do Microsoft Entra com o Azure Monitor central da plataforma. O Azure Monitor permite uma única fonte de verdade sobre dados de log e monitoramento no Azure, oferecendo às organizações opções nativas de nuvem para atender aos requisitos de coleta e retenção de logs.",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Armazene o certificado TLS do Serviço de Aplicativo no Cofre de Chaves.",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
+ "ammp": true,
+ "checklist": "Azure Landing Zone Review",
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "service": "Entra",
"severity": "Alto",
- "text": "Use o Cofre de Chaves para armazenar o certificado TLS.",
+ "text": "Implemente um acesso de emergência ou contas de emergência para evitar o bloqueio de conta em todo o locatário. A MFA será ativada por padrão para todos os usuários em outubro de 2024. Recomendamos atualizar essas contas para usar a chave de acesso (FIDO2) ou configurar a autenticação baseada em certificado para MFA. ",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Os sistemas que processam informações confidenciais devem ser isolados. Para fazer isso, use Planos do Serviço de Aplicativo ou Ambientes do Serviço de Aplicativo separados e considere o uso de assinaturas ou grupos de gerenciamento diferentes.",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "Entra",
"severity": "Média",
- "text": "Isolar sistemas que processam informações confidenciais",
+ "text": "Não use contas sincronizadas locais para atribuições de função de ID do Microsoft Entra, a menos que você tenha um cenário que exija isso especificamente.",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Os discos locais no Serviço de Aplicativo não são criptografados e os dados confidenciais não devem ser armazenados neles. (Por exemplo: D:\\\\Local e %TMP%).",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Entra",
"severity": "Média",
- "text": "Não armazene dados confidenciais no disco local",
+ "text": "Ao usar o Proxy de Aplicativo de ID do Microsoft Entra para fornecer acesso de usuários remotos a aplicativos, gerencie-o como um recurso da plataforma, pois você só pode ter uma instância por locatário.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Para aplicativos Web autenticados, use um Provedor de Identidade bem estabelecido, como o Azure AD ou o Azure AD B2C. Aproveite a estrutura de aplicativo de sua escolha para se integrar a esse provedor ou use o recurso de Autenticação/Autorização do Serviço de Aplicativo.",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "service": "VNet",
"severity": "Média",
- "text": "Usar um provedor de identidade estabelecido para autenticação",
+ "text": "Use uma topologia de rede hub-and-spoke para cenários de rede que exigem flexibilidade máxima.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Implante código no Serviço de Aplicativo a partir de um ambiente controlado e confiável, como um pipeline de implantação de DevOps bem gerenciado e seguro. Isso evita que o código que não foi controlado por versão e verificado para ser implantado a partir de um host mal-intencionado.",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "service": "VNet",
"severity": "Alto",
- "text": "Implantar a partir de um ambiente confiável",
- "waf": "Segurança"
+ "text": "Implante serviços de rede compartilhados, incluindo gateways do ExpressRoute, gateways de VPN e Firewall do Azure ou NVAs de parceiros na rede virtual do hub central. Se necessário, implante também serviços DNS.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Custar"
},
{
- "checklist": "Azure App Service Review",
- "description": "Desative a autenticação básica para FTP/FTPS e WebDeploy/SCM. Isso desabilita o acesso a esses serviços e impõe o uso de pontos de extremidade protegidos do Azure AD para implantação. Observe que o site do SCM também pode ser aberto usando credenciais do Azure AD.",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "VNet",
"severity": "Alto",
- "text": "Desabilitar a autenticação básica",
+ "text": "Use um plano de proteção de IP ou rede DDoS para todos os endereços IP públicos nas zonas de destino do aplicativo.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Sempre que possível, use a Identidade Gerenciada para se conectar aos recursos protegidos do Azure AD. Se isso não for possível, armazene segredos no Cofre de Chaves e conecte-se ao Cofre de Chaves usando uma Identidade Gerenciada.",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
- "severity": "Alto",
- "text": "Usar a Identidade Gerenciada para se conectar a recursos",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
+ "severity": "Média",
+ "text": "Ao implantar tecnologias de rede de parceiros ou NVAs, siga as diretrizes do fornecedor do parceiro.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "service": "ExpressRoute",
+ "severity": "Baixo",
+ "text": "Se você precisar de trânsito entre o ExpressRoute e os gateways de VPN em cenários hub e spoke, use o Servidor de Rota do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Onde estiver usando imagens armazenadas no Registro de Contêiner do Azure, extraia-as usando uma Identidade Gerenciada.",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
- "severity": "Alto",
- "text": "Extrair contêineres usando uma identidade gerenciada",
+ "arm-service": "Microsoft.Network/virtualHubs",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "service": "ARS",
+ "severity": "Baixo",
+ "text": "Se estiver usando o Servidor de Roteamento, use um prefixo /27 para a sub-rede do Servidor de Roteamento.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Ao definir as configurações de diagnóstico do Serviço de Aplicativo, você pode enviar toda a telemetria para o Log Analytics como o destino central para registro em log e monitoramento. Isso permite que você monitore a atividade de tempo de execução do Serviço de Aplicativo, como logs HTTP, logs de aplicativos, logs de plataforma, ...",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
+ "service": "VNet",
"severity": "Média",
- "text": "Enviar logs de tempo de execução do Serviço de Aplicativo para o Log Analytics",
- "waf": "Segurança"
+ "text": "Para arquiteturas de rede com várias topologias hub-and-spoke em regiões do Azure, use emparelhamentos de rede virtual global entre as VNets do hub para conectar as regiões entre si.",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure App Service Review",
- "description": "Configure uma configuração de diagnóstico para enviar o log de atividades para o Log Analytics como o destino central para registro e monitoramento. Isso permite que você monitore a atividade do plano de controle no próprio recurso do Serviço de Aplicativo.",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
+ "service": "VNet",
"severity": "Média",
- "text": "Enviar logs de atividade do Serviço de Aplicativo para o Log Analytics",
- "waf": "Segurança"
+ "text": "Use o Azure Monitor para Redes para monitorar o estado de ponta a ponta das redes no Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Operações"
},
{
- "checklist": "Azure App Service Review",
- "description": "Controle o acesso à rede de saída usando uma combinação de integração regional de VNet, grupos de segurança de rede e UDR's. O tráfego deve ser roteado para um NVA, como o Firewall do Azure. Certifique-se de monitorar os logs do Firewall.",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"severity": "Média",
- "text": "O acesso à rede de saída deve ser controlado",
- "waf": "Segurança"
+ "text": "Se você tiver mais de 400 redes spoke em uma região, implante um hub adicional para ignorar os limites de emparelhamento VNet (500) e o número máximo de prefixos que podem ser anunciados por meio do ExpressRoute (1000).",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Você pode fornecer um IP de saída estável usando a integração de rede virtual e um gateway NAT de rede virtual ou um NVA como o Firewall do Azure. Isso permite que a parte receptora permita uma lista com base no IP, caso seja necessário. Observe que, para comunicações com os Serviços do Azure, geralmente não há necessidade de depender do endereço IP e mecânicas como Pontos de Extremidade de Serviço devem ser usadas. (Além disso, o uso de pontos de extremidade privados na extremidade de recebimento evita que o SNAT aconteça e fornece um intervalo de IP de saída estável.)",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
- "severity": "Baixo",
- "text": "Garantir um IP estável para comunicações de saída para endereços de Internet",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
+ "severity": "Média",
+ "text": "Limite o número de rotas por tabela de rotas a 400.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Controle o acesso à rede de entrada usando uma combinação de Restrições de Acesso do Serviço de Aplicativo, Pontos de Extremidade de Serviço ou Pontos de Extremidade Privados. Diferentes restrições de acesso podem ser necessárias e configuradas para o próprio aplicativo Web e o site do SCM.",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "service": "VNet",
"severity": "Alto",
- "text": "O acesso à rede de entrada deve ser controlado",
- "waf": "Segurança"
+ "text": "Use a configuração 'Permitir tráfego para rede virtual remota' ao configurar emparelhamentos VNet.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Proteja-se contra tráfego de entrada mal-intencionado usando um Firewall de Aplicativo Web, como o Gateway de Aplicativo ou o Azure Front Door. Certifique-se de monitorar os logs do WAF.",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"severity": "Alto",
- "text": "Usar um WAF na frente do Serviço de Aplicativo",
- "waf": "Segurança"
+ "text": "Use o SKU do Standard Load Balancer com uma implantação com redundância de zona, a seleção do SKU Standard Load Balancer aumenta a confiabilidade por meio de zonas de disponibilidade e resiliência de zona, garantindo que as implantações resistam a falhas de zona e região. Ao contrário do Basic, ele oferece suporte ao balanceamento de carga global e oferece um SLA.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Certifique-se de que o WAF não pode ser ignorado bloqueando o acesso apenas ao WAF. Use uma combinação de Restrições de Acesso, Pontos de Extremidade de Serviço e Pontos de Extremidade Privados.",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
"severity": "Alto",
- "text": "Evite que o WAF seja ignorado",
- "waf": "Segurança"
+ "text": "Verifique se os pools de back-end do balanceador de carga contêm pelo menos duas instâncias, a implantação de Azure Load Balancers com pelo menos duas instâncias no back-end evita um único ponto de falha e dá suporte à escalabilidade.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Defina a política TLS mínima como 1.2 na configuração do Serviço de Aplicativo.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Definir a política TLS mínima como 1.2",
- "waf": "Segurança"
- },
- {
- "checklist": "Azure App Service Review",
- "description": "Configure o Serviço de Aplicativo para usar somente HTTPS. Isso faz com que o Serviço de Aplicativo redirecione de HTTP para HTTPS. Considere fortemente o uso de HTTP Strict Transport Security (HSTS) em seu código ou a partir de seu WAF, que informa aos navegadores que o site só deve ser acessado usando HTTPS.",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
- "severity": "Alto",
- "text": "Usar somente HTTPS",
- "waf": "Segurança"
- },
- {
- "checklist": "Azure App Service Review",
- "description": "Não use curingas em sua configuração do CORS, pois isso permite que todas as origens acessem o serviço (derrotando assim o propósito do CORS). Especificamente, permita apenas as origens que você espera poder acessar o serviço.",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
- "severity": "Alto",
- "text": "Curingas não devem ser usados para CORS",
- "waf": "Segurança"
- },
- {
- "checklist": "Azure App Service Review",
- "description": "A depuração remota não deve ser ativada na produção, pois isso abre portas adicionais no serviço, o que aumenta a superfície de ataque. Observe que o serviço ativa a depuração remota automaticamente após 48 horas.",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
- "severity": "Alto",
- "text": "Desativar a depuração remota",
+ "text": "Quando você estiver usando o ExpressRoute Direct, configure o MACsec para criptografar o tráfego no nível da camada dois entre os roteadores da organização e o MSEE. O diagrama mostra essa criptografia no fluxo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Habilite o Defender para o Serviço de Aplicativo. Isso (entre outras ameaças) detecta comunicações com endereços IP mal-intencionados conhecidos. Analise as recomendações do Defender for App Service como parte de suas operações.",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Habilitar o Defender for Cloud - Defender for App Service",
+ "text": "Para cenários em que o MACsec não é uma opção (por exemplo, não usando o ExpressRoute Direct), use um gateway de VPN para estabelecer túneis IPsec no emparelhamento privado do ExpressRoute.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "O Azure fornece proteção contra DDoS Basic em sua rede, que pode ser aprimorada com recursos inteligentes de DDoS Standard que aprendem sobre padrões normais de tráfego e podem detectar comportamentos incomuns. O DDoS Standard se aplica a uma Rede Virtual, portanto, ele deve ser configurado para o recurso de rede na frente do aplicativo, como o Application Gateway ou um NVA.",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
- "severity": "Média",
- "text": "Habilitar o padrão de proteção DDOS na rede virtual WAF",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "ExpressRoute",
+ "severity": "Alto",
+ "text": "Verifique se nenhum espaço de endereço IP sobreposto entre regiões do Azure e locais é usado.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Ao usar imagens armazenadas no Registro de Contêiner do Azure, extraia-as por uma rede virtual do Registro de Contêiner do Azure usando seu ponto de extremidade privado e a configuração do aplicativo 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"severity": "Média",
- "text": "Extrair contêineres por uma rede virtual",
+ "text": "Use endereços IP dos intervalos de alocação de endereços para Internets privadas (RFC 1918).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure App Service Review",
- "description": "Realizar um teste de penetração na aplicação web seguindo as regras de teste de penetração de engajamento.",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
- "severity": "Média",
- "text": "Realizar um teste de penetração",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Certifique-se de que o espaço de endereço IP não seja desperdiçado, não crie redes virtuais desnecessariamente grandes (por exemplo, /16).",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure App Service Review",
- "description": "Implante código confiável que foi validado e verificado em busca de vulnerabilidades de acordo com as práticas de DevSecOps.",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
- "severity": "Média",
- "text": "Implantar código validado",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Não use intervalos de endereços IP sobrepostos para sites de produção e recuperação de desastres.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure App Service Review",
- "description": "Use as versões mais recentes de plataformas, linguagens de programação, protocolos e estruturas suportadas.",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
"severity": "Alto",
- "text": "Use plataformas, linguagens, protocolos e frameworks atualizados",
- "waf": "Segurança"
+ "text": "Use SKU Standard e IPs com redundância de zona quando aplicável, os endereços IP públicos no Azure podem ser de SKU padrão, disponíveis como não zonal, zonal ou com redundância de zona. Os IPs com redundância de zona podem ser acessados em todas as zonas, resistindo a qualquer falha de zona única, fornecendo assim maior resiliência. ",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Bot Service",
- "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
- "service": "Bot service",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
+ "service": "DNS",
"severity": "Média",
- "text": "Siga as recomendações de suporte de confiabilidade no Serviço de Bot do Azure",
- "waf": "Fiabilidade"
+ "text": "Para ambientes em que a resolução de nomes no Azure é tudo o que é necessário, use o DNS Privado do Azure para resolução com uma zona delegada para resolução de nomes (como 'azure.contoso.com').",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Bot Service",
- "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
- "service": "Bot service",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
+ "service": "DNS",
"severity": "Média",
- "text": "Implantando bots com residência de dados local e conformidade regional",
- "waf": "Fiabilidade"
+ "text": "Para ambientes em que a resolução de nomes no Azure e no local é necessária e não há nenhum serviço DNS corporativo existente, como o Active Directory, use o Resolvedor Privado de DNS do Azure para rotear solicitações de DNS para o Azure ou para servidores DNS locais.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Bot Service",
- "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
- "service": "Bot service",
- "severity": "Média",
- "text": "O Serviço de Bot do Azure é executado no modo ativo-ativo para serviços globais e regionais. Quando ocorre uma paralisação, você não precisa detectar erros ou gerenciar o serviço. O Serviço de Bot do Azure executa automaticamente o failover automático e a recuperação automática em uma arquitetura geográfica de várias regiões. Para o serviço regional de bot da UE, o Serviço de Bot do Azure fornece duas regiões completas dentro da Europa com replicação ativa/ativa para garantir redundância. Para o serviço de bot global, todas as regiões/geografias disponíveis podem ser servidas como a presença global.",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "service": "DNS",
+ "severity": "Baixo",
+ "text": "Cargas de trabalho especiais que exigem e implantam seu próprio DNS (como o Red Hat OpenShift) devem usar sua solução de DNS preferida.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
- "severity": "Média",
- "text": "Se você usar certificados TLS gerenciados pelo cliente com o Azure Front Door, use a versão de certificado 'Mais recente'. Reduzir o risco de paralisações causadas pela renovação manual de certificados",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
+ "service": "DNS",
+ "severity": "Alto",
+ "text": "Habilite o registro automático para o DNS do Azure para gerenciar automaticamente o ciclo de vida dos registros DNS para as máquinas virtuais implantadas em uma rede virtual.",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/dnsZones",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
"severity": "Média",
- "text": "Verifique se você está usando o SKU do Application Gateway v2",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Segurança"
+ "text": "Implementar um plano para gerenciar a resolução de DNS entre várias regiões do Azure e quando os serviços fazem failover para outra região",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "service": "Bastion",
"severity": "Média",
- "text": "Verifique se você está usando a SKU padrão para seus Balanceadores de Carga do Azure",
+ "text": "Use o Azure Bastion para se conectar com segurança à sua rede.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
+ "arm-service": "microsoft.network/bastionHosts",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "service": "Bastion",
"severity": "Média",
- "text": "Verifique se os endereços IP de front-end dos Load Balancers são redundantes por zona (a menos que você precise de frontends zonais).",
+ "text": "Use o Azure Bastion em uma sub-rede /26 ou maior.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "WAF",
"severity": "Média",
- "text": "Seus Application Gateways v2 devem ser implantados em sub-redes com prefixos IP iguais ou maiores que /24",
+ "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre regiões do Azure para conexões HTTP/S de entrada para uma zona de destino.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "description": "A administração de proxies reversos em geral e do WAF em particular está mais próxima do aplicativo do que da rede, portanto, eles pertencem à mesma assinatura que o aplicativo. Centralizar o Application Gateway e o WAF na assinatura de conectividade pode ser OK se for gerenciado por uma única equipe.",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Implante o Gateway de Aplicativo do Azure v2 ou NVAs de parceiros usados para fazer proxy de conexões HTTP(S) de entrada na rede virtual da zona de aterrissagem e com os aplicativos que eles estão protegendo.",
+ "service": "WAF",
+ "severity": "Baixo",
+ "text": "Ao usar o Azure Front Door e o Gateway de Aplicativo do Azure para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Azure Front Door. Bloqueie o Gateway de Aplicativo do Azure para receber tráfego somente do Azure Front Door.",
"training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
"link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Use uma rede DDoS ou planos de proteção IP para todos os endereços IP públicos nas zonas de aterrissagem do aplicativo.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "service": "WAF",
+ "severity": "Alto",
+ "text": "Quando WAFs e outros proxies reversos forem necessários para conexões HTTP/S de entrada, implante-os em uma rede virtual de zona de destino e junto com os aplicativos que eles estão protegendo e expondo à Internet.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Configure o dimensionamento automático com uma quantidade mínima de duas instâncias.",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Use os planos de Rede ou Proteção de IP do Azure contra DDoS para ajudar a proteger os pontos de extremidade de endereços IP públicos nas redes virtuais.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Implantar o Application Gateway em zonas de disponibilidade",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Planeje como gerenciar a configuração e a estratégia de tráfego de saída da rede antes da próxima alteração significativa. Em 30 de setembro de 2025, o acesso de saída padrão para novas implantações será desativado e somente configurações de acesso explícito serão permitidas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
- "severity": "Média",
- "text": "Use o Azure Front Door com políticas WAF para fornecer e ajudar a proteger aplicativos HTTP/S globais que abrangem várias regiões do Azure.",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Adicione configurações de diagnóstico para salvar logs relacionados a DDoS para todos os endereços IP públicos protegidos (IP DDoS ou Proteção de Rede).",
"training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
- "severity": "Média",
- "text": "Ao usar o Front Door e o Application Gateway para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Front Door. Bloqueie o Application Gateway para receber tráfego somente do Front Door.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Verifique se há uma atribuição de política para negar endereços IP públicos diretamente vinculados a máquinas virtuais. Use exclusões se IPs públicos forem necessários em VMs específicas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
- "severity": "Alto",
- "text": "Use o Gerenciador de Tráfego para fornecer aplicativos globais que abrangem protocolos diferentes de HTTP/S.",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Use o ExpressRoute como a conexão principal com o Azure. Use VPNs como fonte de conectividade de backup.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "severity": "Baixo",
- "text": "Se os usuários precisarem apenas de acesso a aplicativos internos, o Proxy de Aplicativo de ID do Microsoft Entra foi considerado uma alternativa à Área de Trabalho Virtual (AVD) do Azure?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Você pode usar o prefixo AS-path e pesos de conexão para influenciar o tráfego do Azure para o local e toda a gama de atributos BGP em seus próprios roteadores para influenciar o tráfego do local para o Azure.",
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Ao usar vários circuitos do ExpressRoute ou vários locais locais, use atributos BGP para otimizar o roteamento.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Para reduzir o número de portas de firewall abertas para conexões de entrada em sua rede, considere o uso do Microsoft Entra ID Application Proxy para dar aos usuários remotos acesso seguro e autenticado a aplicativos internos.",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Segurança"
+ "text": "Selecione o SKU correto para os gateways ExpressRoute/VPN com base nos requisitos de largura de banda e desempenho.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Desempenho"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Implante sua política de WAF para Front Door no modo 'Prevenção'.",
- "waf": "Segurança"
+ "text": "Verifique se você está usando circuitos do ExpressRoute de dados ilimitados somente se atingir a largura de banda que justifica seu custo.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Custar"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Evite combinar o Gerenciador de Tráfego do Azure e o Azure Front Door.",
- "waf": "Segurança"
+ "text": "Aproveite o SKU local do ExpressRoute para reduzir o custo de seus circuitos, se o local de emparelhamento de circuito der suporte às regiões do Azure para o SKU Local.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Custar"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "Alto",
- "text": "Use o mesmo nome de domínio no Azure Front Door e sua origem. Nomes de host incompatíveis podem causar bugs sutis.",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Implante um gateway do ExpressRoute com redundância de zona nas regiões do Azure com suporte.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
- "severity": "Baixo",
- "text": "Desabilite os testes de integridade quando houver apenas uma origem em um grupo de origem do Azure Front Door.",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Para cenários que exigem largura de banda superior a 10 Gbps ou portas dedicadas de 10/100 Gbps, use o ExpressRoute Direct.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Selecione bons pontos de extremidade de teste de integridade para o Azure Front Door. Considere a criação de pontos de extremidade de integridade que verifiquem todas as dependências do seu aplicativo.",
- "waf": "Fiabilidade"
+ "text": "Quando a baixa latência for necessária ou a taxa de transferência do local para o Azure precisar ser maior que 10 Gbps, habilite o FastPath para ignorar o gateway do ExpressRoute do caminho de dados.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
- "severity": "Baixo",
- "text": "Use testes de integridade do HEAD com o Azure Front Door para reduzir o tráfego que o Front Door envia para seu aplicativo.",
- "waf": "Desempenho"
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
+ "service": "VPN",
+ "severity": "Média",
+ "text": "Use gateways de VPN com redundância de zona para conectar branches ou locais remotos ao Azure (quando disponível).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
- "severity": "Alto",
- "text": "Usar o Gateway NAT do Azure em vez das regras de saída do Load Balancer para melhor escalabilidade do SNAT",
+ "arm-service": "microsoft.network/virtualNetworkGateways",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "service": "VPN",
+ "severity": "Média",
+ "text": "Use dispositivos VPN redundantes locais (ativo/ativo ou ativo/passivo).",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
"waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Use certificados TLS gerenciados com o Azure Front Door. Reduza o custo operacional e o risco de paralisações devido a renovações de certificados.",
- "waf": "Operações"
+ "text": "Se estiver usando o ExpressRoute Direct, considere usar circuitos locais do ExpressRoute para as regiões locais do Azure para economizar custos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Custar"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Quando o isolamento de tráfego ou a largura de banda dedicada for necessária, como para separar ambientes de produção e não produção, use circuitos diferentes do ExpressRoute. Ele ajudará você a garantir domínios de roteamento isolados e aliviar os riscos de vizinhos barulhentos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Defina sua configuração do WAF do Azure Front Door como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
+ "text": "Monitore a disponibilidade e a utilização do ExpressRoute usando o Express Route Insights interno.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Operações"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "Alto",
- "text": "Use o TLS de ponta a ponta com o Azure Front Door. Use o TLS para conexões de seus clientes com o Front Door e do Front Door com sua origem.",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Use o Monitor da Conexão para monitoramento de conectividade em toda a rede, especialmente entre o local e o Azure.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Use o redirecionamento HTTP para HTTPS com o Azure Front Door. Ofereça suporte a clientes mais antigos redirecionando-os para uma solicitação HTTPS automaticamente.",
- "waf": "Segurança"
+ "text": "Use circuitos do ExpressRoute de diferentes locais de emparelhamento para redundância.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "Alto",
- "text": "Habilite o WAF do Azure Front Door. Proteja seu aplicativo contra uma série de ataques.",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Use a VPN site a site como failover do ExpressRoute, se estiver usando apenas um único circuito do ExpressRoute.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Ajuste o WAF do Azure Front Door para sua carga de trabalho. Reduza as detecções de falsos positivos.",
- "waf": "Segurança"
+ "text": "Se você estiver usando uma tabela de rotas no GatewaySubnet, certifique-se de que as rotas de gateway sejam propagadas.",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Habilite o recurso de inspeção do corpo de solicitação habilitado na política WAF do Azure Front Door.",
- "waf": "Segurança"
+ "text": "Se estiver usando o ExpressRoute, o roteamento local deverá ser dinâmico: no caso de uma falha de conexão, ele deverá convergir para a conexão restante do circuito. A carga deve ser compartilhada entre ambas as conexões, idealmente como ativa/ativa, embora ativa/passiva também seja suportada.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
- "severity": "Alto",
- "text": "Habilite os conjuntos de regras padrão do WAF do Azure Front Door. Os conjuntos de regras padrão detectam e bloqueiam ataques comuns.",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Verifique se os dois links físicos do circuito do ExpressRoute estão conectados a dois dispositivos de borda distintos em sua rede.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
+ "service": "ExpressRoute",
+ "severity": "Média",
+ "text": "Certifique-se de que a Detecção de Encaminhamento Bidirecional (BFD) esteja habilitada e configurada em dispositivos de roteamento de borda do cliente ou provedor.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Habilite o conjunto de regras de proteção de bot do WAF do Azure Front Door. As regras de bot detectam bots bons e ruins.",
- "waf": "Segurança"
+ "text": "Conecte o Gateway do ExpressRoute a dois ou mais circuitos de diferentes locais de emparelhamento para maior resiliência.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Use a versão mais recente do conjunto de regras do WAF do Azure Front Door. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário atual de ameaças.",
- "waf": "Segurança"
+ "text": "Configure logs de diagnóstico e alertas para o gateway de rede virtual do ExpressRoute.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Adicione o limite de taxa ao WAF do Azure Front Door. A limitação de taxa bloqueia clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
+ "text": "Não use circuitos do ExpressRoute para comunicação VNet para VNet.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "Baixo",
+ "text": "Não envie o tráfego do Azure para locais híbridos para inspeção. Em vez disso, siga o princípio \"o tráfego no Azure permanece no Azure\" para que a comunicação entre os recursos no Azure ocorra por meio da rede de backbone da Microsoft.",
+ "waf": "Desempenho"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Use o Firewall do Azure para controlar o tráfego de saída do Azure para a Internet, conexões de entrada não HTTP/S e filtragem de tráfego Leste/Oeste (se a organização exigir).",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
+ "service": "Firewall",
"severity": "Média",
- "text": "Use um limite alto para os limites de taxa do WAF do Azure Front Door. Limites de limite de taxa alta evitam o bloqueio de tráfego legítimo, ao mesmo tempo em que fornecem proteção contra um número extremamente alto de solicitações que podem sobrecarregar sua infraestrutura. ",
+ "text": "Crie uma política global de Firewall do Azure para controlar a postura de segurança em todo o ambiente de rede global e atribua-a a todas as instâncias do Firewall do Azure. Permita que políticas granulares atendam aos requisitos de regiões específicas delegando políticas de firewall incrementais às equipes de segurança locais por meio do controle de acesso baseado em função do Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
+ "service": "Firewall",
"severity": "Baixo",
- "text": "Se você não está esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
+ "text": "Configure provedores de segurança SaaS de parceiros compatíveis no Firewall Manager se a organização quiser usar essas soluções para ajudar a proteger as conexões de saída.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
- "severity": "Média",
- "text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Azure Front Door. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Use regras de aplicativo para filtrar o tráfego de saída no nome do host de destino para protocolos com suporte. Use regras de rede baseadas em FQDN e Firewall do Azure com proxy DNS para filtrar o tráfego de saída para a Internet em outros protocolos.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "service": "Firewall",
"severity": "Alto",
- "text": "Habilitar o conjunto de regras de proteção de bot WAF do Gateway de Aplicativo do Azure As regras de bot detectam bots bons e ruins.",
+ "text": "Use o Firewall do Azure Premium para habilitar recursos de segurança adicionais.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
+ "service": "Firewall",
"severity": "Alto",
- "text": "Habilite o recurso de inspeção do corpo de solicitação habilitado na política WAF do Gateway de Aplicativo do Azure.",
+ "text": "Configure o modo de Inteligência contra Ameaças do Firewall do Azure como Alerta e Negação para proteção adicional.",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "service": "Firewall",
"severity": "Alto",
- "text": "Ajuste o WAF do Gateway de Aplicativo do Azure para sua carga de trabalho. Reduza as detecções de falsos positivos.",
+ "text": "Configure o modo IDPS do Firewall do Azure como Negar para proteção adicional.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Segurança"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
+ "service": "Firewall",
"severity": "Alto",
- "text": "Implante sua política de WAF para o Application Gateway no modo 'Prevenção'.",
+ "text": "Para sub-redes em VNets não conectadas à WAN Virtual, anexe uma tabela de rotas para que o tráfego da Internet seja redirecionado para o Firewall do Azure ou uma Solução de Virtualização de Rede.",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
+ "service": "Firewall",
"severity": "Média",
- "text": "Adicione o limite de taxa ao WAF do Gateway de Aplicativo do Azure. A limitação de taxa bloqueia clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
- "waf": "Segurança"
+ "text": "Adicione configurações de diagnóstico para salvar logs, usando a tabela de destino Específico do Recurso, para todas as implantações do Firewall do Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Use um limite alto para os limites de taxa do WAF do Gateway de Aplicativo do Azure. Limites de limite de taxa alta evitam o bloqueio de tráfego legítimo, ao mesmo tempo em que fornecem proteção contra um número extremamente alto de solicitações que podem sobrecarregar sua infraestrutura. ",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
+ "service": "Firewall",
+ "severity": "Importante",
+ "text": "Migre das regras clássicas do Firewall do Azure (se houver) para a Política de Firewall.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
- "severity": "Baixo",
- "text": "Se você não está esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Use um prefixo /26 para suas sub-redes do Firewall do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "service": "Firewall",
"severity": "Média",
- "text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Gateway de Aplicativo do Azure. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
- "waf": "Segurança"
+ "text": "Organize as regras dentro da política de firewall em Grupos de Coleção de Regras e Coleções de Regras e com base em sua frequência de uso.",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
+ "service": "Firewall",
"severity": "Média",
- "text": "Use a versão mais recente do conjunto de regras do WAF do Gateway de Aplicativo do Azure. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário atual de ameaças.",
- "waf": "Segurança"
+ "text": "Use grupos de IP ou prefixos de IP para reduzir o número de regras de tabela de IP.",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "service": "Firewall",
"severity": "Média",
- "text": "Adicione configurações de diagnóstico para salvar seus logs WAF do Gateway de Aplicativo do Azure.",
- "waf": "Operações"
+ "text": "Não use curingas como um IP de origem para DNATS, como * ou any, você deve especificar IPs de origem para DNATs de entrada.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "service": "Firewall",
"severity": "Média",
- "text": "Adicione configurações de diagnóstico para salvar seus logs do WAF do Azure Front Door.",
- "waf": "Operações"
+ "text": "Evite o esgotamento da porta SNAT monitorando o uso da porta SNAT, avaliando as configurações do NAT Gateway e garantindo um failover contínuo. Se a contagem de portas se aproximar do limite, é um sinal de que o esgotamento do SNAT pode ser iminente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Envie logs do WAF do Gateway de Aplicativo do Azure para o Microsoft Sentinel.",
- "waf": "Operações"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Se você estiver usando o Firewall do Azure Premium, habilite a Inspeção TLS.",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "Média",
- "text": "Envie logs do WAF do Azure Front Door para o Microsoft Sentinel.",
- "waf": "Operações"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
+ "service": "Firewall",
+ "severity": "Baixo",
+ "text": "Use categorias da Web para permitir ou negar o acesso de saída a tópicos específicos.",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "service": "Firewall",
"severity": "Média",
- "text": "Defina sua configuração do WAF do Gateway de Aplicativo do Azure como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
- "waf": "Operações"
+ "text": "Como parte da inspeção TLS, planeje o recebimento de tráfego dos Gateways de Aplicativo do Azure para inspeção.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "service": "Firewall",
"severity": "Média",
- "text": "Use políticas de WAF em vez da configuração de WAF herdada.",
+ "text": "Habilite a configuração de proxy DNS do Firewall do Azure.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Integre o Firewall do Azure ao Azure Monitor e habilite o log de diagnóstico para armazenar e analisar logs e métricas de firewall.",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
- "severity": "Média",
- "text": "Filtre o tráfego de entrada nos back-ends para que eles só aceitem conexões da sub-rede do Application Gateway, por exemplo, com NSGs.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "service": "Firewall",
+ "severity": "Baixo",
+ "text": "Implementar backups para suas regras de firewall",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "Média",
- "text": "Certifique-se de que suas origens recebam apenas o tráfego de sua instância do Azure Front Door.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
+ "severity": "Alto",
+ "text": "Implante o Firewall do Azure em várias zonas de disponibilidade. O Firewall do Azure oferece SLAs diferentes, dependendo de sua implantação; em uma única zona de disponibilidade ou em várias, melhorando potencialmente a confiabilidade e o desempenho.",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
"severity": "Alto",
- "text": "Você deve criptografar o tráfego para os servidores de back-end.",
- "waf": "Segurança"
+ "text": "Configure a Proteção contra DDoS na VNet do Firewall do Azure, associe um plano de proteção contra DDoS à rede virtual que hospeda o Firewall do Azure para fornecer mitigação aprimorada contra ataques de DDoS. O Gerenciador de Firewall do Azure integra a criação de infraestrutura de firewall e planos de proteção contra DDoS. ",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "App Gateway",
"severity": "Alto",
- "text": "Você deve usar um Web Application Firewall.",
+ "text": "Não interrompa a comunicação do painel de controle para serviços de PaaS do Azure injetados em redes virtuais, como com uma rota 0.0.0.0/0 ou uma regra NSG que bloqueia o tráfego do painel de controle.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
+ "service": "ExpressRoute",
"severity": "Média",
- "text": "Redirecionar HTTP para HTTPS",
+ "text": "Acesse os serviços de PaaS do Azure localmente por meio de pontos de extremidade privados e emparelhamento privado do ExpressRoute. Esse método evita o trânsito pela Internet pública.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
+ "service": "VNet",
+ "severity": "Alto",
+ "text": "Não habilite pontos de extremidade de serviço de rede virtual por padrão em todas as sub-redes.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
+ "service": "Firewall",
"severity": "Média",
- "text": "Usar cookies gerenciados por gateway para direcionar o tráfego de uma sessão de usuário para o mesmo servidor para processamento",
- "waf": "Operações"
+ "text": "Filtre o tráfego de saída para os serviços de PaaS do Azure usando FQDNs em vez de endereços IP no Firewall do Azure ou em uma NVA para evitar a exfiltração de dados. Se estiver usando o Link Privado, você poderá bloquear todos os FQDNs, caso contrário, permita apenas os serviços de PaaS necessários.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
+ "service": "ExpressRoute",
"severity": "Alto",
- "text": "Habilite a drenagem de conexão durante as atualizações de serviço planejadas para evitar a perda de conexão com membrs existentes do pool de back-end",
+ "text": "Utilize pelo menos um prefixo /27 para as sub-redes do Gateway.",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
- "severity": "Baixo",
- "text": "Criar páginas de erro personalizadas para exibir uma experiência de usuário personalizada",
- "waf": "Operações"
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
+ "service": "NSG",
+ "severity": "Alto",
+ "text": "Não confie nas regras padrão de entrada do NSG usando a marca de serviço VirtualNetwork para limitar a conectividade.",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "service": "NSG",
"severity": "Média",
- "text": "Edite solicitações HTTP e cabeçalhos de resposta para facilitar o roteamento e a troca de informações entre o cliente e o servidor",
+ "text": "Use NSGs para ajudar a proteger o tráfego entre sub-redes, bem como o tráfego leste/oeste na plataforma (tráfego entre zonas de destino).",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "NSG",
"severity": "Média",
- "text": "Configure o Front Door para otimizar o roteamento de tráfego global da Web e o desempenho do usuário final de nível superior e a confiabilidade por meio de failover global rápido",
- "waf": "Desempenho"
+ "text": "Use NSGs e grupos de segurança de aplicativos para microssegmentar o tráfego dentro da zona de destino e evite usar uma NVA central para filtrar fluxos de tráfego.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
+ "service": "NSG",
"severity": "Média",
- "text": "Usar balanceamento de carga da camada de transporte",
- "waf": "Desempenho"
+ "text": "Habilite os Logs de Fluxo de VNet e alimente-os na Análise de Tráfego para obter insights sobre fluxos de tráfego internos e externos.",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "Segurança"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "NSG",
"severity": "Média",
- "text": "Configurar o roteamento com base no host ou nome de domínio para vários aplicativos Web em um único gateway",
- "waf": "Segurança"
+ "text": "Não implemente mais de 900 regras de NSG por NSG, devido ao limite de 1000 regras.",
+ "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
+ "service": "VWAN",
"severity": "Média",
- "text": "Centralize o gerenciamento de certificados SSL para reduzir a sobrecarga de criptografia e descriptografia de um farm de servidores back-end",
- "waf": "Segurança"
+ "text": "Use a WAN Virtual se o cenário estiver explicitamente descrito na lista de designs de roteamento da WAN Virtual.",
+ "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "waf": "Operações"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
- "severity": "Baixo",
- "text": "Usar o Application Gateway para suporte nativo para protocolos WebSocket e HTTP/2",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Use um hub de WAN Virtual por região do Azure para conectar várias zonas de destino entre regiões do Azure por meio de uma WAN Virtual do Azure global comum.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Desempenho"
+ },
+ {
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Para proteção e filtragem de tráfego de saída da Internet, implante o Firewall do Azure em hubs seguros.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário para cargas de trabalho do AKS Windows, os contêineres HostProcess podem ser usados",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Verifique se a arquitetura de rede da WAN virtual está alinhada a um cenário de arquitetura identificado.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Usar o KEDA se estiver executando cargas de trabalho orientadas a eventos",
- "waf": "Desempenho"
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Use o Azure Monitor Insights para WAN Virtual para monitorar a topologia de ponta a ponta da WAN Virtual, o status e as principais métricas.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Use o Dapr para facilitar o desenvolvimento de microsserviços",
- "waf": "Operações"
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Não desabilite o tráfego branch a branch na WAN Virtual, a menos que esses fluxos devam ser bloqueados explicitamente.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
- "severity": "Alto",
- "text": "Use a oferta AKS apoiada por SLA",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Use AS-Path como preferência de roteamento de hub, pois é mais flexível que ExpressRoute ou VPN.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Usar orçamentos de interrupção em seu pod e definições de implantação",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "service": "VWAN",
+ "severity": "Média",
+ "text": "Configure a propagação baseada em rótulos na WAN Virtual, caso contrário, a conectividade entre hubs virtuais será prejudicada.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "service": "VWAN",
"severity": "Alto",
- "text": "Se estiver usando um registro privado, configure a replicação de região para armazenar imagens em várias regiões",
+ "text": "Atribua pelo menos um prefixo /23 a hubs virtuais para garantir que haja espaço IP suficiente disponível.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Use um aplicativo externo, como kubecost, para alocar custos para diferentes usuários",
- "waf": "Custar"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Usar o modo de redução para excluir/desalocar nós",
- "waf": "Custar"
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Aproveite o Azure Policy estrategicamente, defina controles para seu ambiente, usando Iniciativas de Política para agrupar políticas relacionadas.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "Média",
- "text": "Quando necessário, use a GPU de partioning de várias instâncias em clusters AKS",
- "waf": "Custar"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se estiver executando um cluster de desenvolvimento/teste, use NodePool Start/Stop",
- "waf": "Custar"
+ "text": "Mapeie os requisitos regulatórios e de conformidade para definições do Azure Policy e atribuições de função do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "Média",
- "text": "Usar a Política do Azure para Kubernetes para garantir a conformidade do cluster",
+ "text": "Estabeleça definições do Azure Policy no grupo de gerenciamento raiz intermediário para que elas possam ser atribuídas em escopos herdados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "Média",
- "text": "Separe os aplicativos do plano de controle com pools de nós de usuário/sistema",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Gerencie atribuições de política no nível apropriado mais alto com exclusões nos níveis inferiores, se necessário.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "service": "Policy",
"severity": "Baixo",
- "text": "Adicione mancha ao seu nodepool do sistema para torná-lo dedicado",
+ "text": "Use o Azure Policy para controlar quais serviços os usuários podem provisionar no nível da assinatura/grupo de gerenciamento.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
- "severity": "Média",
- "text": "Usar um registro privado para suas imagens, como o ACR",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Alto",
+ "text": "Use políticas internas sempre que possível para minimizar a sobrecarga operacional.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Atribuir a função Colaborador de Política de Recursos a escopos específicos permite delegar o gerenciamento de políticas a equipes relevantes. Por exemplo, uma equipe central de TI pode supervisionar as políticas no nível do grupo de gerenciamento, enquanto as equipes de aplicativos lidam com as políticas de suas assinaturas, permitindo a governança distribuída com adesão aos padrões organizacionais.",
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "service": "Policy",
"severity": "Média",
- "text": "Analise suas imagens em busca de vulnerabilidades",
+ "text": "Atribua a função interna de Colaborador de Política de Recursos em um escopo específico para habilitar a governança no nível do aplicativo.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
- "severity": "Alto",
- "text": "Definir requisitos de separação de aplicativos (namespace/nodepool/cluster)",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "Média",
+ "text": "Limite o número de atribuições do Azure Policy feitas no escopo do grupo de gerenciamento raiz para evitar o gerenciamento por meio de exclusões em escopos herdados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
- "service": "AKS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
+ "service": "Policy",
"severity": "Média",
- "text": "Armazene seus segredos no Cofre de Chaves do Azure com o driver do CSI Secrets Store",
+ "text": "Se houver requisitos de soberania de dados, as Políticas do Azure deverão ser implantadas para aplicá-los.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
- "severity": "Alto",
- "text": "Se estiver usando entidades de serviço para o cluster, atualize as credenciais periodicamente (como trimestralmente)",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
+ "service": "Policy",
+ "severity": "Média",
+ "text": "Para a Zona de Destino Soberana, implante a linha de base da política de soberania e atribua no nível correto do grupo de gerenciamento.",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
+ "service": "Policy",
"severity": "Média",
- "text": "Se necessário, adicione criptografia etcd do Serviço de Gerenciamento de Chaves",
+ "text": "Para Zona de Aterrissagem Soberana, documente os objetivos de Controle Soberano para mapeamento de políticas.",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário, considere o uso de computação confidencial para AKS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
+ "service": "Policy",
+ "severity": "Média",
+ "text": "Para a Zona de Aterrissagem Soberana, certifique-se de que o processo esteja em vigor para o gerenciamento de 'Objetivos de Controle Soberano para mapeamento de políticas'.",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
+ "service": "Monitor",
"severity": "Média",
- "text": "Considere o uso do Defender for Containers",
- "waf": "Segurança"
+ "text": "Use um workspace de logs de monitor único para gerenciar plataformas centralmente, exceto quando o RBAC (controle de acesso baseado em função) do Azure, os requisitos de soberania de dados ou as políticas de retenção de dados exigirem workspaces separados.",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "Média",
+ "text": "Decida se deseja usar um único workspace de Logs do Azure Monitor para todas as regiões ou criar vários workspaces para abranger várias regiões geográficas. Cada abordagem tem vantagens e desvantagens, incluindo possíveis cobranças de rede entre regiões",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Monitor",
"severity": "Alto",
- "text": "Usar identidades gerenciadas em vez de entidades de serviço",
- "waf": "Segurança"
+ "text": "Exporte logs para o Armazenamento do Azure se os requisitos de retenção de log excederem doze anos. Use o armazenamento imutável com uma política de gravação única e leitura múltipla para tornar os dados não apagáveis e não modificáveis por um intervalo especificado pelo usuário.",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
+ "service": "VM",
"severity": "Média",
- "text": "Integrar autenticação com AAD (usando a integração gerenciada)",
- "waf": "Segurança"
+ "text": "Monitore o descompasso de configuração da VM (máquina virtual) no nível do sistema operacional usando o Azure Policy. Habilitar os recursos de auditoria da Configuração de Computador do Gerenciamento Automatizado do Azure por meio da política ajuda as cargas de trabalho da equipe de aplicativos a consumir imediatamente os recursos de recursos com pouco esforço.",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
+ "service": "VM",
"severity": "Média",
- "text": "Limitar o acesso ao admin kubeconfig (get-credentials --admin)",
- "waf": "Segurança"
+ "text": "Use o Azure Update Manager como um mecanismo de aplicação de patch para VMs Windows e Linux no Azure.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "service": "VM",
"severity": "Média",
- "text": "Integrar autorização com AAD RBAC",
- "waf": "Segurança"
+ "text": "Use o Gerenciador de Atualizações do Azure como um mecanismo de aplicação de patch para VMs do Windows e do Linux fora do Azure usando o Azure Arc.",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
- "severity": "Alto",
- "text": "Usar namespaces para restringir o privilégio RBAC no Kubernetes",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/networkWatchers",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Network Watcher",
+ "severity": "Média",
+ "text": "Use o Observador de Rede para monitorar proativamente os fluxos de tráfego.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
- "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
- "service": "AKS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Monitor",
"severity": "Média",
- "text": "Para o Gerenciamento de Acesso à Identidade de Pod, use a Identidade de Carga de Trabalho do Azure AD (visualização)",
- "waf": "Segurança"
+ "text": "Use os Logs do Azure Monitor para obter insights e relatórios.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
- "service": "AKS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "service": "Monitor",
"severity": "Média",
- "text": "Para logins não interativos do AKS, use kubelogin (visualização)",
- "waf": "Segurança"
+ "text": "Use alertas do Azure Monitor para a geração de alertas operacionais.",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
- "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
- "service": "AKS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "Monitor",
"severity": "Média",
- "text": "Desativar contas locais do AKS",
- "waf": "Segurança"
+ "text": "Ao usar o Acompanhamento de Alterações e Inventário por meio de Contas de Automação do Azure, verifique se você selecionou regiões com suporte para vincular seu workspace do Log Analytics e contas de automação.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
- "service": "AKS",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Backup",
"severity": "Baixo",
- "text": "Configurar, se necessário, o acesso ao cluster just-in-time",
- "waf": "Segurança"
+ "text": "Ao usar o Backup do Azure, use os tipos de backup corretos (GRS, ZRS E LRS) para o backup, pois a configuração padrão é GRS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Configurar, se necessário, o acesso condicional do AAD para AKS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "VM",
+ "severity": "Média",
+ "text": "Use as políticas de convidado do Azure para implantar automaticamente as configurações de software por meio de extensões de VM e impor uma configuração de VM de linha de base compatível.",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
- "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário para cargas de trabalho do Windows AKS, configure o gMSA ",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "description": "Use os recursos de configuração de convidado do Azure Policy para auditar e corrigir as configurações do computador (por exemplo, sistema operacional, aplicativo, ambiente) para garantir que os recursos estejam alinhados com as configurações esperadas e que o Gerenciamento de Atualizações possa impor o gerenciamento de patches para VMs.",
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "VM",
+ "severity": "Média",
+ "text": "Monitore o descompasso de configuração de segurança da VM por meio do Azure Policy.",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
- "service": "AKS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
"severity": "Média",
- "text": "Para um controle mais fino, considere usar uma Identidade Kubelet gerenciada",
- "waf": "Segurança"
+ "text": "Use o Azure Site Recovery para cenários de recuperação de desastre de Máquinas Virtuais do Azure para o Azure. Isso permite replicar cargas de trabalho entre regiões.",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
- "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
- "service": "AKS",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "Backup",
"severity": "Média",
- "text": "Se estiver usando AGIC, não compartilhe um AppGW entre clusters",
- "waf": "Fiabilidade"
+ "text": "Use recursos de backup nativos do Azure ou uma solução de backup de terceiros compatível com o Azure.",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
- "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
- "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "WAF",
"severity": "Alto",
- "text": "Não use AKS HTTP Routing Add-On, use em vez disso a entrada NGINX gerenciada com o complemento de roteamento de aplicativo.",
- "waf": "Fiabilidade"
+ "text": "Adicione configurações de diagnóstico para salvar logs do WAF de serviços de entrega de aplicativos, como o Azure Front Door e o Gateway de Aplicativo do Azure. Revise regularmente os logs para verificar se há ataques e detecções de falsos positivos.",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
- "service": "AKS",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "WAF",
"severity": "Média",
- "text": "Para cargas de trabalho do Windows, use a Rede Acelerada",
- "waf": "Desempenho"
+ "text": "Envie logs do WAF de seus serviços de entrega de aplicativos, como o Azure Front Door e o Gateway de Aplicativo do Azure, para o Microsoft Sentinel. Detecte ataques e integre a telemetria do WAF ao seu ambiente geral do Azure.",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
+ "waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
- "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "Key Vault",
"severity": "Alto",
- "text": "Use o ALB padrão (em oposição ao básico)",
- "waf": "Fiabilidade"
+ "text": "Use o Azure Key Vault para armazenar seus segredos e credenciais.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
- "service": "AKS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Se estiver usando o CNI do Azure, considere usar sub-redes diferentes para NodePools",
+ "text": "Use diferentes Azure Key Vaults para diferentes aplicativos e regiões para evitar limites de escala de transação e restringir o acesso a segredos.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
- "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Usar Pontos de Extremidade Privados (preferencial) ou Pontos de Extremidade de Serviço de Rede Virtual para acessar serviços de PaaS do cluster",
+ "text": "Provisione o Azure Key Vault com as políticas de exclusão reversível e limpeza habilitadas para permitir a proteção de retenção para objetos excluídos.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
- "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "severity": "Alto",
- "text": "Escolha o melhor plug-in de rede CNI para seus requisitos (Azure CNI recomendado)",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Siga um modelo de privilégios mínimos limitando a autorização para excluir permanentemente chaves, segredos e certificados a funções personalizadas especializadas de ID do Microsoft Entra.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "Alto",
- "text": "Se estiver usando o Azure CNI, dimensione sua sub-rede de acordo considerando o número máximo de pods por nó",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Automatize o processo de gerenciamento e renovação de certificados com autoridades de certificação públicas para facilitar a administração.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "Alto",
- "text": "Se estiver usando o Azure CNI, verifique o máximo de pods/nó (padrão 30)",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Estabeleça um processo automatizado para rotação de chaves e certificados.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "Para aplicativos internos, as organizações geralmente abrem toda a sub-rede AKS em seus firewalls. Isso abre o acesso de rede para os nós também e, potencialmente, para os pods também (se estiver usando o Azure CNI). Se os IPs do LoadBalancer estiverem em uma sub-rede diferente, somente este precisará estar disponível para os clientes do aplicativo. Outra razão é que, se os endereços IP na sub-rede AKS são um recurso escasso, consumir seus endereços IP para serviços reduzirá a escalabilidade máxima do cluster.",
- "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
- "link": "https://learn.microsoft.com/azure/aks/internal-lb",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se estiver usando serviços LoadBalancer de IP privado, use uma sub-rede dedicada (não a sub-rede AKS)",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Habilite o firewall e o ponto de extremidade de serviço de rede virtual ou o ponto de extremidade privado no cofre para controlar o acesso ao cofre de chaves.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
- "severity": "Alto",
- "text": "Dimensione o intervalo de endereços IP do serviço de acordo (isso limitará a escalabilidade do cluster)",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Use o workspace do Log Analytics do Azure Monitor central da plataforma para auditar o uso de chave, certificado e segredo em cada instância do Key Vault.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
- "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário, adicione seu próprio plugin CNI",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Delegue a instanciação e o acesso privilegiado do Key Vault e use o Azure Policy para impor uma configuração consistente e compatível.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
- "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário, configure o IP público por nó no AKS",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Média",
+ "text": "Use um Azure Key Vault por aplicativo por ambiente por região.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
- "link": "https://learn.microsoft.com/azure/aks/concepts-network",
- "service": "AKS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Usar um controlador de entrada para expor aplicativos baseados na Web em vez de expô-los com serviços do tipo LoadBalancer",
- "waf": "Fiabilidade"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
- "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Usar o Gateway NAT do Azure como outboundType para dimensionar o tráfego de saída",
- "waf": "Fiabilidade"
+ "text": "Se você quiser trazer suas próprias chaves, isso pode não ser compatível com todos os serviços considerados. Implemente mitigação relevante para que as inconsistências não prejudiquem os resultados desejados. Escolha pares de regiões apropriados e regiões de recuperação de desastre que minimizem a latência.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
- "service": "AKS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Usar alocações dinâmicas de IPs para evitar o esgotamento de IP do CNI do Azure",
- "waf": "Fiabilidade"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
- "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
- "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
- "service": "AKS",
- "severity": "Alto",
- "text": "Filtre o tráfego de saída com AzFW/NVA se seus requisitos de segurança exigirem",
+ "text": "Para a Zona de Destino Soberana, use o HSM gerenciado do Azure Key Vault para armazenar seus segredos e credenciais.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
- "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
- "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
- "service": "AKS",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "service": "Entra",
"severity": "Média",
- "text": "Se estiver usando um ponto de extremidade de API público, restrinja os endereços IP que podem acessá-lo",
+ "text": "Use os recursos de relatório de ID do Microsoft Entra para gerar relatórios de auditoria de controle de acesso.",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
- "link": "https://learn.microsoft.com/azure/aks/private-clusters",
- "service": "AKS",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "service": "Defender",
"severity": "Alto",
- "text": "Use clusters privados se seus requisitos exigirem",
+ "text": "Habilite o Gerenciamento de Postura de Segurança de Nuvem do Defender para todas as assinaturas.",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
- "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
- "severity": "Média",
- "text": "Para os nós AKS do Windows 2019 e 2022, as Diretivas de Rede Calico podem ser usadas ",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "service": "Defender",
+ "severity": "Alto",
+ "text": "Habilite um Plano de Proteção de Carga de Trabalho de Nuvem do Defender para Servidores em todas as assinaturas.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
- "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
- "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
- "service": "AKS",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "service": "Defender",
"severity": "Alto",
- "text": "Habilitar uma opção de Política de Rede do Kubernetes (Calico/Azure)",
+ "text": "Habilite os Planos de Proteção de Carga de Trabalho de Nuvem do Defender para Recursos do Azure em todas as assinaturas.",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "service": "VM",
"severity": "Alto",
- "text": "Usar diretivas de rede do Kubernetes para aumentar a segurança intra-cluster",
+ "text": "Habilite o Endpoint Protection em servidores IaaS.",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
- "service": "AKS",
- "severity": "Alto",
- "text": "Usar um WAF para cargas de trabalho da Web (UIs ou APIs)",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "service": "VM",
+ "severity": "Média",
+ "text": "Monitore o descompasso de aplicação de patch do sistema operacional base por meio dos Logs do Azure Monitor e do Defender para Nuvem.",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
- "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
- "service": "AKS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"severity": "Média",
- "text": "Usar DDoS Standard na Rede Virtual AKS",
+ "text": "Conecte as configurações de recursos padrão a um workspace centralizado do Log Analytics do Azure Monitor.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
- "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
- "link": "https://learn.microsoft.com/azure/aks/http-proxy",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário, adicione o proxy HTTP da empresa",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "Alto",
+ "text": "Detecção centralizada de ameaças com logs correlacionados - consolide os dados de segurança em um local central onde possam ser correlacionados em vários serviços via SIEM (gerenciamento de eventos e informações de segurança)",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
- "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
- "service": "AKS",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
+ "service": "Entra",
"severity": "Média",
- "text": "Considere o uso de uma malha de serviço para gerenciamento avançado de comunicação de microsserviços",
+ "text": "Para Zona de Destino Soberana, habilite os logs de transparência no locatário da ID do Entra.",
"waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
- "service": "AKS",
- "severity": "Alto",
- "text": "Configurar alertas nas métricas mais críticas (consulte Insights de contêiner para obter recomendações)",
- "waf": "Operações"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Para Zona de Destino Soberana, habilite o Sistema de Proteção de Dados do cliente no locatário da ID do Entra.",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Verifique regularmente o Azure Advisor para obter recomendações sobre o seu cluster",
- "waf": "Operações"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Storage",
+ "severity": "Alto",
+ "text": "Habilite a transferência segura para contas de armazenamento.",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
- "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Habilitar a rotação automática do certificado AKS",
- "waf": "Operações"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
+ "service": "Storage",
+ "severity": "Alto",
+ "text": "Habilite a exclusão reversível do contêiner para a conta de armazenamento para recuperar um contêiner excluído e seu conteúdo.",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
- "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
- "service": "AKS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "service": "Key Vault",
"severity": "Alto",
- "text": "Tenha um processo regular para atualizar sua versão do kubernetes periodicamente (trimestralmente, por exemplo), ou use o recurso de atualização automática do AKS",
+ "text": "Use segredos do Key Vault para evitar codificar informações confidenciais, como credenciais (máquinas virtuais, senhas de usuário), certificados ou chaves.",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
"waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
- "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
- "service": "AKS",
- "severity": "Alto",
- "text": "Use kured para atualizações de nó do Linux caso você não esteja usando a atualização de imagem de nó",
- "waf": "Operações"
+ "checklist": "Identity Review Checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Use o token revogável de longa duração, armazene seu token em cache e adquira o token silenciosamente usando a Microsoft Identity Library",
+ "waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
- "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
- "service": "AKS",
- "severity": "Alto",
- "text": "Tenha um processo regular para atualizar as imagens do nó do cluster periodicamente (semanalmente, por exemplo)",
- "waf": "Operações"
+ "checklist": "Identity Review Checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
+ "severity": "Média",
+ "text": "Certifique-se de que os fluxos de usuário de entrada sejam armazenados em backup e resilientes. Certifique-se de que o código que você usa para entrar em seus usuários é de backup e recuperável. Interfaces resilientes com processos externos",
+ "waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Considere gitops para implantar aplicativos ou configuração de cluster em vários clusters",
- "waf": "Operações"
+ "checklist": "Identity Review Checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
+ "severity": "Média",
+ "text": "Os ativos de marca personalizados devem ser hospedados em uma CDN",
+ "waf": "Desempenho"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
- "link": "https://learn.microsoft.com/azure/aks/command-invoke",
- "service": "AKS",
+ "checklist": "Identity Review Checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
"severity": "Baixo",
- "text": "Considere o uso do comando AKS invoke em clusters privados",
- "waf": "Operações"
+ "text": "Ter vários provedores de identidade (ou seja, fazer login com suas contas da Microsoft, Google, Facebook)",
+ "waf": "Fiabilidade"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
- "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
- "service": "AKS",
+ "checklist": "Identity Review Checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "Média",
+ "text": "Siga as regras de VM para alta disponibilidade no nível da VM (discos premium, dois ou mais em uma região, em zonas de disponibilidade diferentes)",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "Média",
+ "text": "Não replique! A replicação pode criar problemas com a sincronização de diretórios",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "Média",
+ "text": "Ter ativo-ativo para várias regiões",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Adicionar carimbos de serviço de Domínio do Azure AD a regiões e locais adicionais",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "Identity Review Checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "Média",
+ "text": "Usar conjuntos de réplicas para DR",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Aplicar as orientações do benchmark de segurança na nuvem da Microsoft relacionadas ao armazenamento",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere a 'linha de base de segurança do Azure para armazenamento'",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "O Armazenamento do Azure, por padrão, tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem expor com segurança o Armazenamento do Azure apenas aos recursos de Computação do Azure que precisam de acesso, eliminando assim a exposição à Internet pública",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere o uso de pontos de extremidade privados para o Armazenamento do Azure",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "As contas de armazenamento recém-criadas são criadas usando o modelo de implantação ARM, para que o RBAC, a auditoria, etc., estejam todos habilitados. Verifique se não há contas de armazenamento antigas com modelo de implantação clássico em uma assinatura",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Verifique se as contas de armazenamento mais antigas não estão usando o 'modelo de implantação clássico'",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Aproveite o Microsoft Defender para saber mais sobre atividades suspeitas e configurações incorretas.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitar o Microsoft Defender para todas as suas contas de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "O mecanismo soft-delete permite recuperar blobs excluídos acidentalmente.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Ativar 'exclusão suave' para blobs",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere desativar seletivamente a \"exclusão suave\" para determinados contêineres de blob, por exemplo, se o aplicativo tiver que garantir que as informações excluídas sejam imediatamente excluídas, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Desativar 'exclusão suave' para blobs",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "A exclusão suave para contêineres permite que você recupere um contêiner depois que ele tenha sido excluído, por exemplo, recuperar de uma operação de exclusão acidental.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Ativar 'exclusão suave' para contêineres",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere desativar seletivamente a \"exclusão suave\" para determinados contêineres de blob, por exemplo, se o aplicativo tiver que garantir que as informações excluídas sejam imediatamente excluídas, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Desativar 'exclusão suave' para contêineres",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Evita a exclusão acidental de uma conta de armazenamento, forçando o usuário a remover primeiro o bloqueio de exclusão, antes da exclusão",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitar bloqueios de recursos em contas de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere políticas de \"retenção legal\" ou \"retenção baseada em tempo\" para blobs, de modo que seja impossível excluir o blob, o contêiner ou a conta de armazenamento. Por favor, note que \"impossível\" significa na verdade \"impossível\"; uma vez que uma conta de armazenamento contém um blob imutável, a única maneira de 'se livrar' dessa conta de armazenamento é cancelando a assinatura do Azure.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere blobs imutáveis",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Considere desabilitar o acesso HTTP/80 desprotegido à conta de armazenamento, para que todas as transferências de dados sejam criptografadas, protegidas por integridade e o servidor seja autenticado. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Exigir HTTPS, ou seja, desativar a porta 80 na conta de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Ao configurar um domínio personalizado (nome do host) em uma conta de armazenamento, verifique se você precisa de TLS/HTTPS; em caso afirmativo, talvez seja necessário colocar a CDN do Azure na frente da sua conta de armazenamento.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Ao impor HTTPS (desabilitando HTTP), verifique se você não usa domínios personalizados (CNAME) para a conta de armazenamento.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Exigir HTTPS quando um cliente usa um token SAS para acessar dados de blob ajuda a minimizar o risco de perda de credenciais.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Limitar tokens de assinatura de acesso compartilhado (SAS) somente a conexões HTTPS",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Os tokens AAD devem ser favorecidos em relação às assinaturas de acesso compartilhado, sempre que possível",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Usar tokens do Azure Active Directory (Azure AD) para acesso de blob",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Ao atribuir uma função a um usuário, grupo ou aplicativo, conceda a essa entidade de segurança apenas as permissões necessárias para que eles executem suas tarefas. Limitar o acesso aos recursos ajuda a evitar o uso indevido não intencional e mal-intencionado de seus dados.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Privilégio mínimo nas permissões do IaM",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Uma SAS de delegação de usuário é protegida com credenciais do Azure Active Directory (Azure AD) e também pelas permissões especificadas para a SAS. Uma SAS de delegação de usuário é análoga a uma SAS de serviço em termos de escopo e função, mas oferece benefícios de segurança em relação à SAS de serviço. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Ao usar o SAS, prefira o SAS de delegação de usuário ao SAS baseado em chave de conta de armazenamento.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "As chaves de conta de armazenamento ('chaves compartilhadas') têm pouquíssimos recursos de auditoria. Embora possa ser monitorado em quem/quando foi obtida uma cópia das chaves, uma vez que as chaves estão nas mãos de várias pessoas, é impossível atribuir o uso a um usuário específico. Depender exclusivamente da autenticação do AAD facilita a vinculação do acesso ao armazenamento a um usuário. ",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere desabilitar as chaves de conta de armazenamento, para que somente o acesso ao AAD (e a delegação de usuários SAS) seja suportado.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Use os dados do Registro de atividades para identificar \"quando\", \"quem\", \"o que\" e \"como\" a segurança da sua conta de armazenamento está sendo visualizada ou alterada (ou seja, chaves de conta de armazenamento, políticas de acesso, etc.).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere usar o Azure Monitor para auditar as operações do plano de controle na conta de armazenamento",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Uma política de expiração de chave permite que você defina um lembrete para a rotação das chaves de acesso da conta. O lembrete será exibido se o intervalo especificado tiver decorrido e as teclas ainda não tiverem sido giradas.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Ao usar chaves de conta de armazenamento, considere habilitar uma 'política de expiração de chave'",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Uma diretiva de expiração SAS especifica um intervalo recomendado sobre o qual a SAS é válida. As políticas de expiração do SAS se aplicam a um SAS de serviço ou a um SAS de conta. Quando um usuário gera SAS de serviço ou SAS de conta com um intervalo de validade maior do que o intervalo recomendado, ele verá um aviso.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere configurar uma política de expiração SAS",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "As políticas de acesso armazenado oferecem a opção de revogar permissões para uma SAS de serviço sem precisar gerar novamente as chaves da conta de armazenamento. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere vincular o SAS a uma política de acesso armazenado",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere configurar o repositório de código-fonte do aplicativo para detectar cadeias de conexão com check-in e chaves de conta de armazenamento.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Idealmente, seu aplicativo deve estar usando uma identidade gerenciada para autenticar no Armazenamento do Azure. Se isso não for possível, considere ter a credencial de armazenamento (cadeia de conexão, chave de conta de armazenamento, SAS, credencial da entidade de serviço) no Azure KeyVault ou em um serviço equivalente.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere armazenar cadeias de conexão no Cofre de Chaves do Azure (em cenários em que identidades gerenciadas não são possíveis)",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Use tempos de expiração de curto prazo em um SAS de serviço SAS ad hoc ou SAS de conta. Dessa forma, mesmo que um SAS seja comprometido, ele é válido apenas por um curto período de tempo. Essa prática é especialmente importante se você não puder fazer referência a uma política de acesso armazenado. Os tempos de expiração de curto prazo também limitam a quantidade de dados que podem ser gravados em um blob, limitando o tempo disponível para carregar nele.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Esforce-se por curtos períodos de validade para SAS ad-hoc",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Ao criar um SAS, seja o mais específico e restritivo possível. Prefira um SAS para um único recurso e operação em vez de um SAS que dá acesso muito mais amplo.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Aplicar um escopo restrito a uma SAS",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Uma SAS pode incluir parâmetros nos quais endereços IP de cliente ou intervalos de endereços estão autorizados a solicitar um recurso usando a SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere a definição do escopo do SAS para um endereço IP de cliente específico, sempre que possível",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Um SAS não pode restringir a quantidade de dados que um cliente carrega; Dado o modelo de precificação da quantidade de armazenamento ao longo do tempo, pode fazer sentido validar se os clientes carregaram conteúdo maliciosamente grande.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "Baixo",
+ "text": "Considere verificar os dados carregados, depois que os clientes usaram um SAS para carregar um arquivo. ",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Ao acessar o armazenamento de blob via SFTP usando uma 'conta de usuário local', os controles RBAC 'normais' não se aplicam. O acesso a blobs via NFS ou REST pode ser mais restritivo do que o acesso a SFTP. Infelizmente, no início de 2023, os usuários locais são a única forma de gerenciamento de identidade que atualmente é suportada para o ponto de extremidade SFTP",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "SFTP: Limite a quantidade de 'usuários locais' para acesso SFTP e audite se o acesso é necessário ao longo do tempo.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "SFTP: O ponto de extremidade SFTP não oferece suporte a ACLs do tipo POSIX.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "O armazenamento oferece suporte a CORS (Cross-Origin Resource Sharing), ou seja, um recurso HTTP que permite que aplicativos Web de um domínio diferente afrouxem a política de mesma origem. Ao habilitar o CORS, mantenha o CorsRules com o menor privilégio.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Evite políticas CORS excessivamente amplas",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Os dados em repouso são sempre criptografados no lado do servidor e, além disso, também podem ser criptografados no lado do cliente. A criptografia do lado do servidor pode acontecer usando uma chave gerenciada por plataforma (padrão) ou uma chave gerenciada pelo cliente. A criptografia do lado do cliente pode acontecer fazendo com que o cliente forneça uma chave de criptografia/descriptografia por blob para o armazenamento do Azure ou manipulando completamente a criptografia no lado do cliente. portanto, não depende do Armazenamento do Azure para garantias de confidencialidade.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Determine como os dados em repouso devem ser criptografados. Entenda o modelo de thread para dados.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Determine qual/se a criptografia de plataforma deve ser usada.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Determine qual/se a criptografia do lado do cliente deve ser usada.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "Aproveite o Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para localizar contas de armazenamento que permitem acesso anônimo a blobs.",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere se o acesso de blob público é necessário ou se pode ser desabilitado para determinadas contas de armazenamento. ",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "O ACSS (Centro de Soluções SAP) do Azure é uma oferta do Azure que torna o SAP uma carga de trabalho de nível superior no Azure. O ACSS é uma solução de ponta a ponta que permite criar e executar sistemas SAP como uma carga de trabalho unificada no Azure e fornece uma base mais perfeita para a inovação. Você pode aproveitar os recursos de gerenciamento para sistemas SAP novos e existentes baseados no Azure.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "O Azure dá suporte à automação de implantações do SAP no Linux e no Windows. O SAP Deployment Automation Framework é uma ferramenta de orquestração de software livre que pode implementar, instalar e manter ambientes SAP.",
+ "training": "https://github.com/Azure/sap-automation",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Execute uma recuperação pontual para seus bancos de dados de produção a qualquer momento e em um período de tempo que atenda ao seu RTO; a recuperação point-in-time normalmente inclui erros do operador que excluem dados na camada DBMS ou por meio do SAP, incidentalmente",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Teste os tempos de backup e recuperação para verificar se eles atendem aos requisitos de RTO para restaurar todos os sistemas simultaneamente após um desastre.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Você pode replicar o armazenamento padrão entre regiões emparelhadas, mas não pode usar o armazenamento padrão para armazenar seus bancos de dados ou discos rígidos virtuais. Você pode replicar backups somente entre regiões emparelhadas que você usa. Para todos os outros dados, execute a replicação usando recursos nativos do DBMS, como SQL Server Always On ou Replicação do Sistema SAP HANA. Use uma combinação de Site Recovery, rsync ou robocopy e outros softwares de terceiros para a camada de aplicativo SAP.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Ao usar as Zonas de Disponibilidade do Azure para obter alta disponibilidade, você deve considerar a latência entre os servidores de aplicativos SAP e os servidores de banco de dados. Para zonas com altas latências, os procedimentos operacionais precisam estar em vigor para garantir que os servidores de aplicativos SAP e os servidores de banco de dados estejam em execução na mesma zona o tempo todo.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Configure conexões do ExpressRoute do local para as regiões de recuperação de desastre primárias e secundárias do Azure. Além disso, como alternativa ao uso do ExpressRoute, considere configurar conexões VPN do local para as regiões primárias e secundárias de recuperação de desastre do Azure.",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Replique o conteúdo do cofre de chaves, como certificados, segredos ou chaves entre regiões, para que você possa descriptografar dados na região de recuperação de desastre.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Emparelhe as redes virtuais primárias e de recuperação de desastre. Por exemplo, para a Replicação do Sistema HANA, uma rede virtual de banco de dados do SAP HANA precisa ser emparelhada com a rede virtual de banco de dados do SAP HANA do site de recuperação de desastres.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Se você usar o armazenamento do Azure NetApp Files para suas implantações SAP, no mínimo, crie duas contas do Azure NetApp Files na camada Premium, em duas regiões.",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "A tecnologia de replicação de banco de dados nativa deve ser usada para sincronizar o banco de dados em um par de HA.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "O CIDR da VNet (rede virtual) primária não deve entrar em conflito ou se sobrepor ao CIDR da VNet do site de recuperação de desastre",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Use o Site Recovery para replicar um servidor de aplicativos para um site de recuperação de desastre. O Site Recovery também pode ajudar a replicar VMs de cluster de serviços centrais para o site de recuperação de desastre. Ao invocar a DR, você precisará reconfigurar o cluster do Linux Pacemaker no site de DR (por exemplo, substituir o VIP ou SBD, executar corosync.conf e muito mais).",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Considere a disponibilidade do software SAP em relação a pontos únicos de falha. Isso inclui pontos únicos de falha em aplicativos, como SGBDs utilizados nas arquiteturas SAP NetWeaver e SAP S/4HANA, SAP AP e ASCS + SCS. Além disso, outras ferramentas, como o SAP Web Dispatcher.",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Para bancos de dados SAP e SAP, considere implementar clusters de failover automáticos. No Windows, o Clustering de Failover do Windows Server dá suporte ao failover. No Linux, o Linux Pacemaker ou ferramentas de terceiros, como o SIOS Protection Suite e o Veritas InfoScale, oferecem suporte ao failover.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "O Azure não dá suporte a arquiteturas nas quais as VMs primárias e secundárias compartilham armazenamento para dados do DBMS. Para a camada DBMS, o padrão de arquitetura comum é replicar bancos de dados ao mesmo tempo e com pilhas de armazenamento diferentes daquelas que as VMs primárias e secundárias usam.",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Os dados do DBMS e os arquivos de log de transação/redo são armazenados no armazenamento em blocos com suporte do Azure ou no Azure NetApp Files. Não há suporte para Arquivos do Azure ou Arquivos Premium do Azure como armazenamento para dados do DBMS e/ou arquivos de log de restauração com carga de trabalho do SAP.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Você pode usar discos compartilhados do Azure no Windows para componentes ASCS + SCS e cenários específicos de alta disponibilidade. Configure seus clusters de failover separadamente para os componentes da camada de aplicativo SAP e a camada DBMS. Atualmente, o Azure não dá suporte a arquiteturas de alta disponibilidade que combinam componentes da camada de aplicativo SAP e a camada DBMS em um cluster de failover.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "A maioria dos clusters de failover para componentes da camada de aplicativo SAP (ASCS) e a camada DBMS exigem um endereço IP virtual para um cluster de failover. O Azure Load Balancer deve lidar com o endereço IP virtual para todos os outros casos. Um princípio de design é usar um balanceador de carga por configuração de cluster. Recomendamos que você use a versão padrão do balanceador de carga (SKU do Balanceador de Carga Padrão).",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Certifique-se de que o IP flutuante esteja habilitado no balanceador de carga",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Antes de implantar sua infraestrutura de alta disponibilidade e dependendo da região escolhida, determine se deseja implantar com um conjunto de disponibilidade do Azure ou uma zona de disponibilidade.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Se você quiser atender aos SLAs de infraestrutura para seus aplicativos para componentes SAP (serviços centrais, servidores de aplicativos e bancos de dados), deverá escolher as mesmas opções de alta disponibilidade (VMs, conjuntos de disponibilidade, zonas de disponibilidade) para todos os componentes.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Não misture servidores de funções diferentes no mesmo conjunto de disponibilidade. Mantenha VMs de serviços centrais, VMs de banco de dados e VMs de aplicativos em seus próprios conjuntos de disponibilidade",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Você não pode implantar conjuntos de disponibilidade do Azure em uma zona de disponibilidade do Azure, a menos que use grupos de posicionamento por proximidade.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Ao criar conjuntos de disponibilidade, use o número máximo de domínios de falha e atualize os domínios disponíveis. Por exemplo, se você implantar mais de duas VMs em um conjunto de disponibilidade, use o número máximo de domínios de falha (três) e domínios de atualização suficientes para limitar o efeito de possíveis falhas de hardware físico, interrupções de rede ou interrupções de energia, além da manutenção planejada do Azure. O número padrão de domínios de falha é dois e você não pode alterá-lo online posteriormente.",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Quando você usa grupos de posicionamento por proximidade do Azure em uma implantação de conjunto de disponibilidade, todos os três componentes SAP (serviços centrais, servidor de aplicativos e banco de dados) devem estar no mesmo grupo de posicionamento por proximidade.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Use um grupo de posicionamento por proximidade por SID SAP. Os grupos não se estendem por Zonas de Disponibilidade ou regiões do Azure",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Use um dos serviços a seguir para executar clusters de serviços centrais do SAP, dependendo do sistema operacional.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Atualmente, o Azure não dá suporte à combinação de ASCS e DB HA no mesmo cluster do Linux Pacemaker; separe-os em clusters individuais. No entanto, você pode combinar até cinco vários clusters de serviços centrais em um par de VMs.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implante ambas as VMs no par de alta disponibilidade em um conjunto de disponibilidade ou em zonas de disponibilidade. Essas VMs devem ter o mesmo tamanho e a mesma configuração de armazenamento.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "O Azure dá suporte à instalação e configuração de instâncias do SAP HANA e ASCS/SCS e ERS no mesmo cluster de alta disponibilidade em execução no RHEL (Red Hat Enterprise Linux).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Execute todos os sistemas de produção em SSDs gerenciados Premium e use o Azure NetApp Files ou o Armazenamento em Disco Ultra. Pelo menos o disco do sistema operacional deve estar na camada Premium para que você possa obter melhor desempenho e o melhor SLA.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Você deve executar o SAP HANA no Azure somente nos tipos de armazenamento certificados pelo SAP. Observe que determinados volumes devem ser executados em determinadas configurações de disco, quando aplicável. Essas configurações incluem habilitar o Acelerador de Gravação e usar o armazenamento Premium. Você também precisa garantir que o sistema de arquivos executado no armazenamento seja compatível com o DBMS executado na máquina.",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Considere configurar a alta disponibilidade dependendo do tipo de armazenamento que você usa para suas cargas de trabalho SAP. Alguns serviços de armazenamento disponíveis no Azure não têm suporte no Azure Site Recovery, portanto, sua configuração de alta disponibilidade pode ser diferente.",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Diferentes serviços de armazenamento nativos do Azure (como Arquivos do Azure, Azure NetApp Files, Disco Compartilhado do Azure) podem não estar disponíveis em todas as regiões. Portanto, para ter uma configuração SAP semelhante na região de recuperação de desastre após o failover, verifique se o respectivo serviço de armazenamento é oferecido no site de recuperação de desastre.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Automatize o sistema SAP Start-Stop para gerenciar custos.",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "No caso de usar o Armazenamento Premium do Azure com o SAP HANA, o armazenamento SSD Standard do Azure pode ser usado para selecionar uma solução de armazenamento econômica. No entanto, observe que escolher o armazenamento SSD Standard ou HDD Standard do Azure afetará o SLA das VMs individuais. Além disso, para sistemas com menor taxa de transferência de E/S e baixa latência, como ambientes de não produção, as VMs de série inferior podem ser usadas.",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Como uma configuração alternativa de baixo custo (multiuso), você pode escolher um SKU de baixo desempenho para suas VMs de servidor de banco de dados HANA que não são de produção. No entanto, é importante observar que alguns tipos de VM, como a série E, não são certificados pelo HANA (Diretório de Hardware do SAP HANA) ou não podem atingir uma latência de armazenamento inferior a 1 ms.",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Impor um modelo RBAC para grupos de gerenciamento, assinaturas, grupos de recursos e recursos",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Impor a propagação da entidade de segurança para encaminhar a identidade do aplicativo de nuvem SAP para o SAP local (incluindo IaaS) por meio do conector de nuvem",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implemente SSO para aplicativos SAP SaaS como SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics e SAP C4C com Azure AD usando SAML.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implemente o SSO para aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implemente o SSO para aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Você pode implementar o SSO no SAP GUI usando o SAP NetWeaver SSO ou uma solução de parceiro.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos/SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido à sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos/SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido à sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implemente o SSO usando o OAuth para SAP NetWeaver para permitir que aplicativos personalizados ou de terceiros acessem os serviços OData do SAP NetWeaver.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implementar SSO no SAP HANA",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Considere o Azure AD um provedor de identidade para sistemas SAP hospedados no RISE. Para obter mais informações, consulte Integrando o serviço ao Azure AD.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
+ "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para aplicativos que acessam o SAP, talvez você queira usar a propagação principal para estabelecer o SSO.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Se você estiver usando serviços SAP BTP ou soluções SaaS que exigem o SAP Identity Authentication Service (IAS), considere implementar o SSO entre o SAP Cloud Identity Authentication Services e o Azure AD para acessar esses serviços SAP. Essa integração permite que o SAP IAS atue como um provedor de identidade proxy e encaminhe solicitações de autenticação para o Azure AD como o repositório central de usuários e o provedor de identidade.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implementar SSO para SAP BTP",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Se você estiver usando o SAP SuccessFactors, considere usar o provisionamento automatizado de usuários do Azure AD. Com essa integração, à medida que você adiciona novos funcionários ao SAP SuccessFactors, você pode criar automaticamente suas contas de usuário no Azure AD. Opcionalmente, você pode criar contas de usuário no Microsoft 365 ou em outros aplicativos SaaS compatíveis com o Azure AD. Use o write-back do endereço de email para o SAP SuccessFactors.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "description": "Mantenha a hierarquia do grupo de gerenciamento razoavelmente plana, não mais do que quatro.",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
+ "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "impor políticas existentes do Grupo de Gerenciamento às Assinaturas SAP",
+ "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
+ "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Integre aplicativos fortemente acoplados na mesma assinatura SAP para evitar complexidade adicional de roteamento e gerenciamento",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Aproveite a assinatura como unidade de escala e dimensione nossos recursos, considere implantar a assinatura por ambiente, por exemplo. Caixa de areia, não-prod, prod ",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
+ "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Garantir o aumento da cota como parte do provisionamento da assinatura (por exemplo, total de núcleos de VM disponíveis em uma assinatura)",
+ "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
+ "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "A API de Cota é uma API REST que você pode usar para exibir e gerenciar cotas para serviços do Azure. Considere usá-lo, se necessário.",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
+ "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Se estiver implantando em uma zona de disponibilidade, verifique se a implantação da zona da VM está disponível depois que a cota for aprovada. Envie uma solicitação de suporte com a assinatura, a série de VMs, o número de CPUs e a zona de disponibilidade necessárias.",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Certifique-se de que os serviços e recursos necessários estejam disponíveis nas regiões de implantação escolhidas, por exemplo. ANF, Zona etc.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Aproveite a marca de recurso do Azure para categorização de custos e agrupamento de recursos (: BillTo, Departamento (ou Unidade de Negócios), Ambiente (Produção, Estágio, Desenvolvimento), Camada (Camada da Web, Camada de Aplicativo), Proprietário do Aplicativo, ProjectName)",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Ajude a proteger seu banco de dados HANA usando o serviço de Backup do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Se você implantar o Azure NetApp Files para seu banco de dados HANA, Oracle ou DB2, use a ferramenta AzAcSnap (Instantâneo Consistente com o Aplicativo do Azure) para tirar instantâneos consistentes com o aplicativo. O AzAcSnap também oferece suporte a bancos de dados Oracle. Considere usar o AzAcSnap em uma VM central em vez de em VMs individuais.",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Garanta correspondências de fuso horário entre o sistema operacional e o sistema SAP.",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Não agrupe diferentes serviços de aplicativo no mesmo cluster. Por exemplo, não combine clusters DRBD e de serviços centrais no mesmo cluster. No entanto, você pode usar o mesmo cluster do Pacemaker para gerenciar aproximadamente cinco serviços centrais diferentes (cluster de vários SID).",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
+ "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Considere executar sistemas de desenvolvimento/teste em um modelo de adiamento para economizar e otimizar os custos de execução do Azure.",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
+ "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Se você fizer parceria com clientes gerenciando suas propriedades SAP, considere o Azure Lighthouse. O Azure Lighthouse permite que os provedores de serviços gerenciados usem serviços de identidade nativos do Azure para se autenticar no ambiente dos clientes. Ele coloca o controle nas mãos dos clientes, pois eles podem revogar o acesso a qualquer momento e auditar as ações dos prestadores de serviços.",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
+ "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use o Azure Update Manager para verificar o status das atualizações disponíveis para uma única VM ou várias VMs e considere agendar patches regulares.",
+ "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Otimize e gerencie as operações do SAP Basis usando o SAP Landscape Management (LaMa). Use o conector SAP LaMa para Azure para realocar, copiar, clonar e atualizar sistemas SAP.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use o Azure Monitor para soluções SAP para monitorar suas cargas de trabalho SAP (SAP HANA, clusters SUSE de alta disponibilidade e sistemas SQL) no Azure. Considere complementar o Azure Monitor para soluções SAP com o SAP Solution Manager.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Execute uma extensão de VM para verificação SAP. A Extensão de VM para SAP usa a identidade gerenciada atribuída de uma VM (máquina virtual) para acessar dados de monitoramento e configuração de VM. A verificação garante que todas as métricas de desempenho em seu aplicativo SAP venham da Extensão do Azure para SAP subjacente.",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use o Azure Policy para controle de acesso e relatórios de conformidade. O Azure Policy fornece a capacidade de impor configurações em toda a organização para garantir a adesão consistente à política e a detecção rápida de violações. ",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use o Monitor da Conexão no Observador de Rede do Azure para monitorar métricas de latência para bancos de dados SAP e servidores de aplicativos. Ou colete e exiba medidas de latência de rede usando o Azure Monitor.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "73686af4-6791-4f89-95ad-a43324e13811",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Execute uma verificação de qualidade para o SAP HANA na infraestrutura provisionada do Azure para verificar se as VMs provisionadas estão em conformidade com as práticas recomendadas do SAP HANA no Azure.",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Para cada assinatura do Azure, execute um teste de latência nas zonas de disponibilidade do Azure antes da implantação zonal para escolher zonas de baixa latência para implantação do SAP no Azure.",
+ "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Execute o Relatório de Resiliência para garantir que a configuração de toda a infraestrutura provisionada do Azure (Computação, Banco de Dados, Rede, Armazenamento, Site Recovery) esteja em conformidade com a configuração definida pelo Cloud Adaption Framework for Azure.",
+ "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
+ "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Implemente a proteção contra ameaças usando a solução do Microsoft Sentinel para SAP. Use essa solução para monitorar seus sistemas SAP e detectar ameaças sofisticadas em toda a lógica de negócios e nas camadas de aplicativos.",
+ "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "A marcação do Azure pode ser aproveitada para agrupar e rastrear recursos logicamente, automatizar suas implantações e, o mais importante, fornecer visibilidade sobre os custos incorridos.",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
+ "service": "SAP",
"severity": "Baixo",
- "text": "Para eventos planejados, considere o uso do Dreno Automático de Nó",
+ "text": "Use o monitoramento de latência entre VMs para aplicativos sensíveis à latência.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastre para servidores de aplicativos SAP.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Exclua todos os sistemas de arquivos de banco de dados e programas executáveis das verificações antivírus. Incluí-los pode levar a problemas de desempenho. Verifique com os fornecedores de banco de dados os detalhes prescritivos na lista de exclusão. Por exemplo, a Oracle recomenda excluir /oracle//sapdata das verificações antivírus.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "c027f893-f404-41a9-b33d-39d625a14964",
+ "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Considere coletar estatísticas completas do banco de dados para bancos de dados não HANA após a migração. Por exemplo, implemente a nota 1020260 do SAP - Entrega de estatísticas do Oracle.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Considere usar o ASM (Gerenciamento Automático de Armazenamento) do Oracle para todas as implantações do Oracle que usam o SAP no Azure.",
+ "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para SAP no Azure executando Oracle, uma coleção de scripts SQL pode ajudá-lo a diagnosticar problemas de desempenho. Os relatórios do Automatic Workload Repository (AWR) contêm informações valiosas para diagnosticar problemas no sistema Oracle. Recomendamos que você execute um relatório AWR durante várias sessões e escolha horários de pico para ele, para garantir uma ampla cobertura para a análise.",
+ "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastre para servidores de aplicativos SAP.",
+ "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para entrega segura de aplicativos HTTP/S, use o Gateway de Aplicativo v2 e verifique se a proteção e as políticas do WAF estão habilitadas.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Se o DNS ou o nome virtual da máquina virtual não for alterado durante a migração para o Azure, o DNS em segundo plano e os nomes virtuais conectarão muitas interfaces do sistema no cenário SAP, e os clientes só às vezes estarão cientes das interfaces que os desenvolvedores definem ao longo do tempo. Surgem desafios de conexão entre vários sistemas quando os nomes virtuais ou DNS são alterados após as migrações, e é recomendável manter os aliases DNS para evitar esses tipos de dificuldades.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use diferentes zonas DNS para distinguir cada ambiente (sandbox, desenvolvimento, pré-produção e produção) uns dos outros. A exceção é para implantações SAP com sua própria VNet; aqui, as zonas DNS privadas podem não ser necessárias.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "description": "Ao configurar o emparelhamento VNet, use a configuração Permitir tráfego para redes virtuais remotas.",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
+ "guid": "a3592829-e6e2-4061-9368-6af46791f893",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "O emparelhamento VNet local e global fornece conectividade e é a abordagem preferencial para garantir a conectividade entre zonas de destino para implantações SAP em várias regiões do Azure",
+ "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
+ "waf": "Fiabilidade"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Não há suporte para implantar qualquer NVA entre o aplicativo SAP e o servidor de banco de dados SAP",
+ "training": "https://me.sap.com/notes/2731110",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
+ "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais em que você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
+ "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Considere implantar NVAs (soluções de virtualização de rede) entre regiões somente se NVAs de parceiros forem usadas. NVAs entre regiões ou VNets não serão necessárias se NVAs nativas estiverem presentes. Ao implantar tecnologias de rede de parceiros e NVAs, siga as diretrizes do fornecedor para verificar configurações conflitantes com a rede do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "A WAN Virtual gerencia a conectividade entre VNets spoke para topologias baseadas em WAN virtual (não é necessário configurar UDR [roteamento definido pelo usuário] ou NVAs) e a taxa de transferência máxima de rede para tráfego de VNet para VNet no mesmo hub virtual é de 50 gigabits por segundo. Se necessário, as zonas de destino do SAP podem usar o emparelhamento VNet para se conectar a outras zonas de destino e superar essa limitação de largura de banda.",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "82734c88-6ba2-4802-8459-11475e39e530",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "A atribuição de IP público à VM que executa a carga de trabalho SAP não é recomendada.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Considere reservar o endereço IP no lado da recuperação de desastre ao configurar o ASR",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Evite usar intervalos de endereços IP sobrepostos para sites de produção e DR.",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Embora o Azure ajude você a criar várias sub-redes delegadas em uma VNet, apenas uma sub-rede delegada pode existir em uma VNet para Azure NetApp Files. As tentativas de criar um novo volume falharão se você usar mais de uma sub-rede delegada para o Azure NetApp Files.",
+ "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
"waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
- "link": "https://learn.microsoft.com/azure/aks/faq",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Usar o Firewall do Azure para controlar o tráfego de saída do Azure para a Internet, conexões de entrada não HTTP/S e filtragem de tráfego Leste/Oeste (se a organização exigir)",
+ "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "O Gateway de Aplicativo e o Firewall de Aplicativo Web têm limitações quando o Gateway de Aplicativo serve como um proxy reverso para aplicativos Web SAP, conforme mostrado na comparação entre o Gateway de Aplicativo, o SAP Web Dispatcher e outros serviços de terceiros.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre regiões do Azure para conexões HTTP/S de entrada para uma zona de destino.",
+ "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Aproveite as políticas de Firewall de Aplicativo Web no Azure Front Door quando estiver usando o Azure Front Door e o Gateway de Aplicativo para proteger aplicativos HTTP/S. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Azure Front Door.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use um firewall de aplicativo Web para verificar seu tráfego quando ele for exposto à Internet. Outra opção é usá-lo com o balanceador de carga ou com recursos que tenham recursos de firewall internos, como Gateway de Aplicativo ou soluções de terceiros.",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais em que você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para evitar o vazamento de dados, use o Link Privado do Azure para acessar com segurança os recursos da plataforma como serviço, como Armazenamento de Blobs do Azure, Arquivos do Azure, Azure Data Lake Storage Gen2, Azure Data Factory e muito mais. O Ponto de Extremidade Privado do Azure também pode ajudar a proteger o tráfego entre VNets e serviços como Armazenamento do Azure, Backup do Azure e muito mais. O tráfego entre sua VNet e o serviço habilitado para Ponto de Extremidade Privado viaja pela rede global da Microsoft, o que impede sua exposição à Internet pública.",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
+ "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
+ "service": "SAP",
"severity": "Alto",
- "text": "Desenvolver práticas próprias de governança para garantir que nenhuma alteração seja realizada pelos operadores no nó RG (também conhecido como 'infra RG')",
+ "text": "Verifique se a rede acelerada do Azure está habilitada nas VMs usadas no aplicativo SAP e nas camadas do DBMS.",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Verifique se as implantações internas do Azure Load Balancer estão configuradas para usar o DSR (Retorno Direto do Servidor). Essa configuração (Habilitando IP Flutuante) reduzirá a latência quando as configurações do balanceador de carga interno forem usadas para configurações de alta disponibilidade na camada DBMS.",
+ "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
+ "guid": "6791f893-5ada-4433-84e1-3811523181aa",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Você pode usar o ASG (grupo de segurança do aplicativo) e as regras do NSG para definir listas de controle de acesso de segurança de rede entre o aplicativo SAP e as camadas do DBMS. Os ASGs agrupam máquinas virtuais para ajudar a gerenciar sua segurança.",
+ "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Não há suporte para a colocação da camada de aplicativo SAP e do DBMS SAP em diferentes VNets do Azure que não estão emparelhadas.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para obter a latência de rede ideal com aplicativos SAP, considere usar grupos de posicionamento por proximidade do Azure.",
+ "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "NÃO há suporte para executar uma camada do Servidor de Aplicativos SAP e uma camada do DBMS dividida entre o local e o Azure. Ambas as camadas precisam residir completamente no local ou no Azure.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
+ "link": "https://me.sap.com/notes/2015553",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Não é recomendável hospedar o DBMS (sistema de gerenciamento de banco de dados) e as camadas de aplicativo de sistemas SAP em VNets diferentes e conectá-los ao emparelhamento VNet devido aos custos substanciais que o tráfego de rede excessivo entre as camadas pode produzir. Recomendamos o uso de sub-redes na rede virtual do Azure para separar a camada de aplicativo SAP e a camada de DBMS.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "402a9846-d515-4061-aff8-cd30088693fa",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Se estiver usando o Load Balancer com sistemas operacionais convidados Linux, verifique se o parâmetro de rede Linux net.ipv4.tcp_timestamps está definido como 0.",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Para implantações do SAP RISE/ECS, o emparelhamento virtual é a maneira preferencial de estabelecer conectividade com o ambiente existente do Azure do cliente. Tanto a rede virtual SAP quanto a(s) rede virtual(is) do cliente são protegidas com NSG (grupos de segurança de rede), permitindo a comunicação nas portas SAP e de banco de dados por meio do emparelhamento de rede virtual",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Examine os backups de banco de dados do SAP HANA para VMs do Azure.",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Examine o monitoramento interno do Site Recovery, quando usado para SAP.",
+ "waf": "Custar"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
+ "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Revise as diretrizes Monitorando o cenário do sistema SAP HANA.",
"waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
- "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Use o nome personalizado do Node RG (também conhecido como 'Infra RG')",
+ "checklist": "SAP Checklist",
+ "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Examine o Oracle Database nas estratégias de backup de VM Linux do Azure.",
"waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
- "link": "https://kubernetes.io/docs/setup/release/notes/",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
+ "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
+ "service": "SAP",
"severity": "Média",
- "text": "Não use APIs do Kubernetes preteridas em seus manifestos do YAML",
+ "text": "Examine o uso do Armazenamento de Blobs do Azure com o SQL Server 2016.",
"waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
- "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Manchar os nós do Windows",
+ "checklist": "SAP Checklist",
+ "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Examine o uso do Backup Automatizado v2 para VMs do Azure.",
"waf": "Operações"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
- "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Mantenha o nível de patch dos contêineres do Windows sincronizado com o nível do patch do host",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Habilitando o acelerador de gravação para a série M ao usar discos premium (V1)",
+ "waf": "Operações"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Teste a latência da zona de disponibilidade.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
+ "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Ative o SAP EarlyWatch Alert para todos os componentes SAP.",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Revise a latência do servidor de aplicativos SAP para o servidor de banco de dados usando o relatório SAP ABAPMeter /SSA/CAT.",
+ "training": "https://me.sap.com/notes/0002879613",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Revise o monitoramento de desempenho do SQL Server usando o CCMS.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
+ "link": "https://me.sap.com/notes/500235",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Teste a latência de rede entre VMs da camada de aplicativo SAP e VMs do DBMS (NIPING).",
+ "training": "https://me.sap.com/notes/1100926/E",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
+ "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Revise os alertas do SAP HANA Studio.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
+ "link": "https://me.sap.com/notes/1969700",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Execute verificações de integridade do SAP HANA usando HANA_Configuration_Minichecks.",
+ "waf": "Desempenho"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Se você executar VMs do Windows e do Linux no Azure, localmente ou em outros ambientes de nuvem, poderá usar o Centro de gerenciamento de atualizações na Automação do Azure para gerenciar atualizações do sistema operacional, incluindo patches de segurança.",
+ "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "08951710-79a2-492a-adbc-06d7a401545b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Revise rotineiramente as notas de OSS de segurança do SAP porque o SAP lança patches de segurança altamente críticos, ou hot fixes, que exigem ação imediata para proteger seus sistemas SAP.",
+ "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Para SAP no SQL Server, você pode desabilitar a conta de administrador do sistema do SQL Server porque os sistemas SAP no SQL Server não usam a conta. Certifique-se de que outro usuário com direitos de administrador do sistema possa acessar o servidor antes de desabilitar a conta original de administrador do sistema.",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Desative xp_cmdshell. O recurso SQL Server xp_cmdshell habilita um shell de comando do sistema operacional interno do SQL Server. É um risco potencial em auditorias de segurança.",
+ "training": "https://me.sap.com/notes/3019299/E",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "A criptografia de servidores de banco de dados SAP HANA no Azure usa a tecnologia de criptografia nativa do SAP HANA. Além disso, se você estiver usando o SQL Server no Azure, use a TDE (Transparent Data Encryption) para proteger seus dados e arquivos de log e garantir que seus backups também sejam criptografados.",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "A criptografia do Armazenamento do Azure está habilitada para todas as contas de armazenamento clássicas e do Azure Resource Manager e não pode ser desabilitada. Como seus dados são criptografados por padrão, você não precisa modificar seu código ou aplicativos para usar a criptografia do Armazenamento do Azure.",
+ "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "Por meio de Configurações de Diagnóstico no nível do cluster",
- "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
- "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Envie logs mestre (também conhecidos como logs de API) para o Azure Monitor ou sua solução de gerenciamento de logs preferida",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Usar o Azure Key Vault para armazenar seus segredos e credenciais",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
- "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário, use instantâneos do nodePool",
- "waf": "Custar"
+ "checklist": "SAP Checklist",
+ "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "É recomendável BLOQUEAR os Recursos do Azure após a implantação bem-sucedida para proteger contra alterações não autorizadas. Você também pode impor restrições e regras de LOCK por assinatura usando políticas personalizadas do Azure (função personalizada).",
+ "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
- "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Considere pools de nós spot para cargas de trabalho não sensíveis ao tempo",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "SAP",
+ "severity": "Média",
+ "text": "Provisione o Azure Key Vault com as políticas de exclusão reversível e limpeza habilitadas para permitir a proteção de retenção para objetos excluídos.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
- "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Considere o nó virtual AKS para intermitência rápida",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Com base nos requisitos existentes, controles regulatórios e de conformidade (internos/externos) – determine quais políticas do Azure e a função RBAC do Azure são necessárias",
+ "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
"severity": "Alto",
- "text": "Monitore suas métricas de cluster com o Container Insights (ou outras ferramentas como o Prometheus)",
- "waf": "Operações"
+ "text": "Ao habilitar o Microsoft Defender para Ponto de Extremidade no ambiente SAP, recomendamos excluir dados e arquivos de log em servidores DBMS em vez de direcionar todos os servidores. Siga as recomendações do fornecedor do DBMS ao excluir arquivos de destino.",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
- "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
+ "service": "SAP",
"severity": "Alto",
- "text": "Armazene e analise seus logs de cluster com o Container Insights (ou outras ferramentas como Telegraf/ElasticSearch)",
- "waf": "Operações"
+ "text": "Delegue uma função personalizada de administrador do SAP com acesso just-in-time do Microsoft Defender para Nuvem.",
+ "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
- "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
- "service": "AKS",
- "severity": "Média",
- "text": "Monitorar a utilização da CPU e da memória dos nós",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "criptografar dados em trânsito integrando o produto de segurança de terceiros com comunicações de rede seguras (SNC) para DIAG (SAP GUI), RFC e SPNEGO para HTTPS",
+ "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
- "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
+ "service": "SAP",
"severity": "Média",
- "text": "Se estiver usando o Azure CNI, monitore a % de IPs de pod consumidos por nó",
- "waf": "Operações"
+ "text": "Padrão para chaves gerenciadas pela Microsoft para funcionalidade de criptografia principal e use chaves gerenciadas pelo cliente quando necessário.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "A E/S no disco do sistema operacional é um recurso crítico. Se o sistema operacional nos nós for limitado na E/S, isso pode levar a um comportamento imprevisível, geralmente terminando no nó sendo declarado NotReady",
- "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
- "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
- "service": "AKS",
- "severity": "Média",
- "text": "Monitorar a profundidade da fila de disco do sistema operacional nos nós",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Use um Azure Key Vault por aplicativo por ambiente por região.",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
- "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
- "service": "AKS",
- "severity": "Média",
- "text": "Se não estiver usando filtragem de saída com AzFW/NVA, monitore as portas SNAT ALB alocadas padrão",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
+ "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Para controlar e gerenciar chaves e segredos de criptografia de disco para sistemas operacionais Windows e Windows não HANA, use o Azure Key Vault. Não há suporte para o SAP HANA com o Azure Key Vault, portanto, você deve usar métodos alternativos, como chaves SAP ABAP ou SSH.",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
- "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
- "service": "AKS",
- "severity": "Média",
- "text": "Assine as notificações de integridade de recursos para seu cluster AKS",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
+ "service": "SAP",
+ "severity": "Alto",
+ "text": "Personalizar funções RBAC (controle de acesso baseado em função) para assinaturas SAP on Azure spoke para evitar alterações acidentais relacionadas à rede",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
+ "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
+ "service": "SAP",
"severity": "Alto",
- "text": "Configurar solicitações e limites nas especificações do pod",
- "waf": "Operações"
+ "text": "Isole DMZs e NVAs do restante da propriedade SAP, configure o Link Privado do Azure e gerencie e controle com segurança os recursos do SAP no Azure",
+ "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "769ef669-1a48-435a-a942-223ece80b123",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "Média",
- "text": "Impor cotas de recursos para namespaces",
- "waf": "Operações"
+ "checklist": "SAP Checklist",
+ "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
+ "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Considere usar o software antimalware da Microsoft no Azure para proteger suas máquinas virtuais contra arquivos mal-intencionados, adware e outras ameaças.",
+ "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Para obter uma proteção ainda mais poderosa, considere usar Microsoft Defender para Ponto de Extremidade.",
+ "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
"severity": "Alto",
- "text": "Verifique se sua assinatura tem cota suficiente para expandir seus nodepools",
- "waf": "Operações"
+ "text": "Isole o aplicativo SAP e os servidores de banco de dados da Internet ou da rede local passando todo o tráfego pela rede virtual do hub, que está conectada à rede spoke por emparelhamento de rede virtual. As redes virtuais emparelhadas garantem que a solução SAP no Azure seja isolada da Internet pública.",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
- "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "checklist": "SAP Checklist",
+ "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
+ "service": "SAP",
+ "severity": "Baixo",
+ "text": "Para aplicativos voltados para a Internet, como o SAP Fiori, certifique-se de distribuir a carga por requisitos do aplicativo, mantendo os níveis de segurança. Para segurança de Camada 7, você pode usar um WAF (Firewall de Aplicativo Web) de terceiros disponível no Azure Marketplace.",
+ "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "waf": "Segurança"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
+ "service": "SAP",
"severity": "Média",
- "text": "Usar o Autoscaler de Cluster",
- "waf": "Desempenho"
+ "text": "Para habilitar a comunicação segura no Azure Monitor para soluções SAP, você pode optar por usar um certificado raiz ou um certificado de servidor. É altamente recomendável que você use certificados raiz.",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
- "guid": "831c2872-c693-4b39-a887-a561bada49bc",
- "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
- "service": "AKS",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "O Barramento de Serviço Premium do Azure fornece criptografia de dados em repouso. Se você usar sua própria chave, os dados ainda serão criptografados usando a chave gerenciada pela Microsoft, mas, além disso, a chave gerenciada pela Microsoft será criptografada usando a chave gerenciada pelo cliente. ",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
"severity": "Baixo",
- "text": "Personalizar a configuração do nó para pools de nós AKS",
- "waf": "Desempenho"
+ "text": "Usar a opção de chave gerenciada pelo cliente na criptografia de dados em repouso quando necessário",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
- "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
- "service": "AKS",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "A comunicação entre um aplicativo cliente e um namespace do Barramento de Serviço do Azure é criptografada usando TLS (Transport Layer Security). Os namespaces do Barramento de Serviço do Azure permitem que os clientes enviem e recebam dados com TLS 1.0 e superior. Para impor medidas de segurança mais rígidas, você pode configurar o namespace do Barramento de Serviço para exigir que os clientes enviem e recebam dados com uma versão mais recente do TLS.",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
"severity": "Média",
- "text": "Use o Autoscaler do Pod Horizontal quando necessário",
- "waf": "Desempenho"
+ "text": "Impor uma versão mínima necessária do TLS (Transport Layer Security) para solicitações ",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "description": "Nós maiores trarão maior desempenho e recursos, como discos efêmeros e rede acelerada, mas aumentarão o raio de explosão e diminuirão a granularidade de dimensionamento",
- "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
- "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
- "service": "AKS",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Quando você cria um namespace do Barramento de Serviço, uma regra SAS chamada RootManageSharedAccessKey é criada automaticamente para o namespace. Essa política tem permissões de gerenciamento para todo o namespace. É recomendável que você trate essa regra como uma conta raiz administrativa e não a use em seu aplicativo. É recomendável usar o AAD como um provedor de autenticação com RBAC. ",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
+ "severity": "Média",
+ "text": "Evite usar a conta root quando não for necessário",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Um aplicativo cliente do Barramento de Serviço em execução dentro de um aplicativo do Serviço de Aplicativo do Azure ou em uma máquina virtual com entidades gerenciadas habilitadas para suporte a recursos do Azure não precisa lidar com regras e chaves SAS ou quaisquer outros tokens de acesso. O aplicativo cliente só precisa do endereço do ponto de extremidade do namespace do Sistema de Mensagens do Barramento de Serviço. ",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
+ "severity": "Média",
+ "text": "Quando possível, seu aplicativo deve usar uma identidade gerenciada para se autenticar no Barramento de Serviço do Azure. Caso contrário, considere ter a credencial de armazenamento (SAS, credencial de entidade de serviço) no Azure Key Vault ou em um serviço equivalente",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Ao criar permissões, forneça controle refinado sobre o acesso de um cliente ao Barramento de Serviço do Azure. As permissões no Barramento de Serviço do Azure podem e devem ter como escopo o nível de recurso individual, por exemplo, fila, tópico ou assinatura. ",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
"severity": "Alto",
- "text": "Considere um tamanho de nó apropriado, não muito grande ou muito pequeno",
- "waf": "Desempenho"
+ "text": "Usar o RBAC do plano de dados com privilégios mínimos",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
- "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se mais de 5000 nós forem necessários para escalabilidade, considere o uso de um cluster AKS adicional",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Os logs de recursos do Barramento de Serviço do Azure incluem logs operacionais, logs de rede virtual e filtragem de IP. Os logs de auditoria de tempo de execução capturam informações de diagnóstico agregadas para várias operações de acesso ao plano de dados (como enviar ou receber mensagens) no Barramento de Serviço.",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
+ "severity": "Média",
+ "text": "Habilite o registro em log para investigação de segurança. Usar o Azure Monitor para rastrear logs de recursos e logs de auditoria de runtime (atualmente disponível apenas na camada premium)",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
- "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Considere assinar o EventGrid Events para automação AKS",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Por padrão, o Barramento de Serviço do Azure tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem que o tráfego entre sua rede virtual e o Barramento de Serviço do Azure atravesse a rede de backbone da Microsoft. Além disso, você deve desabilitar os endpoints públicos se eles não forem usados. ",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "Média",
+ "text": "Considere usar pontos de extremidade privados para acessar o Barramento de Serviço do Azure e desabilitar o acesso à rede pública quando aplicável.",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
- "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Para operações de longa duração em um cluster AKS, considere o encerramento do evento",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Com o firewall IP, você pode restringir ainda mais o endpoint público a apenas um conjunto de endereços IPv4 ou intervalos de endereços IPv4 na notação CIDR (Classless Inter-Domain Routing). ",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
+ "severity": "Média",
+ "text": "Considere permitir apenas o acesso ao namespace do Barramento de Serviço do Azure de endereços IP ou intervalos específicos",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
- "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Se necessário, considere usar hosts dedicados do Azure para nós AKS",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Aplicar as diretrizes do parâmetro de comparação de segurança de nuvem da Microsoft relacionado ao armazenamento",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere a 'linha de base de segurança do Azure para armazenamento'",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
- "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
- "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Por padrão, o Armazenamento do Azure tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem expor com segurança o Armazenamento do Azure apenas aos recursos de Computação do Azure que precisam de acesso, eliminando assim a exposição à Internet pública",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Usar discos efêmeros do sistema operacional",
- "waf": "Desempenho"
+ "text": "Considere usar pontos de extremidade privados para o Armazenamento do Azure",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
- "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
- "service": "AKS",
- "severity": "Alto",
- "text": "Para discos não efêmeros, use IOPS altos e discos maiores do sistema operacional para os nós ao executar muitos pods/nó, pois requer alto desempenho para executar vários pods e gerará logs enormes com limites de rotação de log AKS padrão",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "As contas de armazenamento recém-criadas são criadas usando o modelo de implantação do ARM, para que o RBAC, a auditoria etc. estejam habilitados. Verifique se não há contas de armazenamento antigas com o modelo de implantação clássico em uma assinatura",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Verifique se as contas de armazenamento mais antigas não estão usando o \"modelo de implantação clássico\"",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
- "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
- "service": "AKS",
- "severity": "Baixo",
- "text": "Para a opção de armazenamento de hiperdesempenho, use Ultra Disks no AKS",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Aproveite o Microsoft Defender para saber mais sobre atividades suspeitas e configurações incorretas.",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitar o Microsoft Defender para todas as suas contas de armazenamento",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "O mecanismo de exclusão reversível permite recuperar blobs excluídos acidentalmente.",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Evite manter o estado no cluster e armazene dados fora (AzStorage, AzSQL, Cosmos, etc)",
- "waf": "Desempenho"
+ "text": "Habilitar 'exclusão reversível' para blobs",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere desabilitar seletivamente a \"exclusão reversível\" para determinados contêineres de blob, por exemplo, se o aplicativo precisar garantir que as informações excluídas sejam excluídas imediatamente, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Se estiver usando o AzFiles Standard, considere o AzFiles Premium e/ou ANF por motivos de desempenho",
- "waf": "Desempenho"
+ "text": "Desabilitar a 'exclusão reversível' para blobs",
+ "waf": "Segurança"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
- "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
- "service": "AKS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "A exclusão reversível para contêineres permite que você recupere um contêiner depois que ele foi excluído, por exemplo, recuperar de uma operação de exclusão acidental.",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Habilitar 'exclusão reversível' para contêineres",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere desabilitar seletivamente a \"exclusão reversível\" para determinados contêineres de blob, por exemplo, se o aplicativo precisar garantir que as informações excluídas sejam excluídas imediatamente, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Se estiver usando Discos e AZs do Azure, considere ter nodepools dentro de uma zona para disco LRS com VolumeBindingMode:WaitForFirstConsumer para provisionar armazenamento na zona direita ou use o disco ZRS para nodepools abrangendo várias zonas",
- "waf": "Desempenho"
+ "text": "Desabilitar a 'exclusão reversível' para contêineres",
+ "waf": "Segurança"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Impede a exclusão acidental de uma conta de armazenamento, forçando o usuário a remover primeiro o bloqueio de exclusão, antes da exclusão",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Selecione o plano de hospedagem de aplicativo lógico certo com base em seus requisitos de negócios e SLO",
- "waf": "Fiabilidade"
+ "text": "Habilitar bloqueios de recursos em contas de armazenamento",
+ "waf": "Segurança"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere as políticas de 'retenção legal' ou 'retenção baseada em tempo' para blobs, de modo que seja impossível excluir o blob, o contêiner ou a conta de armazenamento. Observe que 'impossível' na verdade significa 'impossível'; depois que uma conta de armazenamento contém um blob imutável, a única maneira de \"se livrar\" dessa conta de armazenamento é cancelando a assinatura do Azure.",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Proteja aplicativos lógicos contra falhas de região com redundância de zona e zonas de disponibilidade",
- "waf": "Fiabilidade"
+ "text": "Considere blobs imutáveis",
+ "waf": "Segurança"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Considere desabilitar o acesso HTTP/80 desprotegido à conta de armazenamento, para que todas as transferências de dados sejam criptografadas, protegidas por integridade e o servidor seja autenticado. ",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
- "waf": "Fiabilidade"
+ "text": "Exigir HTTPS, ou seja, desabilitar a porta 80 na conta de armazenamento",
+ "waf": "Segurança"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Ao configurar um domínio personalizado (nome do host) em uma conta de armazenamento, verifique se você precisa de TLS/HTTPS; nesse caso, talvez seja necessário colocar a CDN do Azure na frente de sua conta de armazenamento.",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Se estiver implantando em um ambiente isolado, use ou migre para o ASE (Ambiente do Serviço de Aplicativo) v3",
- "waf": "Fiabilidade"
+ "text": "Ao impor HTTPS (desabilitando o HTTP), verifique se você não usa domínios personalizados (CNAME) para a conta de armazenamento.",
+ "waf": "Segurança"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Exigir HTTPS quando um cliente usa um token SAS para acessar dados de blob ajuda a minimizar o risco de perda de credenciais.",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Aproveite o Azure DevOps ou o GitHub para simplificar o CI/CD e proteger seu código de Aplicativo Lógico",
- "waf": "Operações"
+ "text": "Limitar tokens de assinatura de acesso compartilhado (SAS) apenas a conexões HTTPS",
+ "waf": "Segurança"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
- "service": "IoT Hub DPS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": ". A imposição da versão mais recente do TLS rejeitará a solicitação de clientes que usam a versão mais antiga. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Selecione o plano de hospedagem de aplicativo lógico certo com base em seus requisitos de negócios e SLO",
- "waf": "Fiabilidade"
+ "text": "Impor a versão mais recente do TLS para uma conta de armazenamento",
+ "waf": "Segurança"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "IoT Hub DPS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Os tokens de ID do Microsoft Entra devem ser favorecidos em relação às assinaturas de acesso compartilhado, sempre que possível",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Proteja aplicativos lógicos contra falhas de região com redundância de zona e zonas de disponibilidade",
- "waf": "Fiabilidade"
+ "text": "Usar tokens de ID do Microsoft Entra para acesso a blobs",
+ "waf": "Segurança"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "8aed4fbf-0830-4883-899d-222a154af478",
- "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "IoT Hub DPS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Ao atribuir uma função a um usuário, grupo ou aplicativo, conceda a essa entidade de segurança apenas as permissões necessárias para que ela execute suas tarefas. Limitar o acesso aos recursos ajuda a evitar o uso indevido não intencional e mal-intencionado de seus dados.",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Privilégios mínimos em permissões de IaM",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Uma SAS de delegação de usuário é protegida com credenciais do Azure Active Directory (Azure AD) e também pelas permissões especificadas para a SAS. Uma SAS de delegação de usuário é análoga a uma SAS de serviço em termos de escopo e função, mas oferece benefícios de segurança em relação à SAS de serviço. ",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Ao usar SAS, prefira 'SAS de delegação de usuário' em vez de SAS baseada em chave de conta de armazenamento.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "As chaves da conta de armazenamento (\"chaves compartilhadas\") têm muito poucos recursos de auditoria. Embora possa ser monitorado em quem/quando buscou uma cópia das chaves, uma vez que as chaves estão nas mãos de várias pessoas, é impossível atribuir o uso a um usuário específico. Confiar apenas na autenticação do Entra ID facilita o acesso ao armazenamento a um usuário. ",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
- "waf": "Fiabilidade"
+ "text": "Considere desabilitar as chaves da conta de armazenamento, para que haja suporte apenas para o acesso à ID do Microsoft Entra (e à SAS de delegação de usuário).",
+ "waf": "Segurança"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "IoT Hub DPS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Use os dados do Log de Atividades para identificar \"quando\", \"quem\", \"o quê\" e \"como\" a segurança da sua conta de armazenamento está sendo exibida ou alterada (ou seja, chaves da conta de armazenamento, políticas de acesso etc.).",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Se estiver implantando em um ambiente isolado, use ou migre para o ASE (Ambiente do Serviço de Aplicativo) v3",
- "waf": "Fiabilidade"
+ "text": "Considere usar o Azure Monitor para auditar as operações do painel de controle na conta de armazenamento",
+ "waf": "Segurança"
},
{
- "checklist": "Device Provisioning Service Review",
- "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "IoT Hub DPS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Uma política de expiração de chave permite que você defina um lembrete para a rotação das chaves de acesso da conta. O lembrete é exibido se o intervalo especificado tiver decorrido e as teclas ainda não tiverem sido giradas.",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Aproveite o Azure DevOps ou o GitHub para simplificar o CI/CD e proteger seu código de Aplicativo Lógico",
- "waf": "Operações"
+ "text": "Ao usar chaves de conta de armazenamento, considere habilitar uma 'política de expiração de chave'",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Uma política de expiração de SAS especifica um intervalo recomendado durante o qual a SAS é válida. As políticas de expiração de SAS se aplicam a uma SAS de serviço ou a uma SAS de conta. Quando um usuário gera SAS de serviço ou uma SAS de conta com um intervalo de validade maior que o intervalo recomendado, ele verá um aviso.",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Implementar uma política de tratamento de erros em nível global",
- "waf": "Operações"
+ "text": "Considere configurar uma política de expiração de SAS",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "As políticas de acesso armazenadas oferecem a opção de revogar permissões para uma SAS de serviço sem precisar regenerar as chaves da conta de armazenamento. ",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Certifique-se de que todas as políticas de APIs incluam um elemento .",
- "waf": "Operações"
+ "text": "Considere vincular SAS a uma política de acesso armazenada",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Usar fragmentos de política para evitar a repetição das mesmas definições de políticas em várias APIs",
- "waf": "Operações"
+ "text": "Considere configurar o repositório de código-fonte do aplicativo para detectar cadeias de conexão e chaves de conta de armazenamento com check-in.",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
- "service": "APIM",
- "severity": "Média",
- "text": "Se você estiver planejando monetizar suas APIs, consulte o artigo 'suporte à monetização' para obter as práticas recomendadas",
- "waf": "Operações"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Idealmente, seu aplicativo deve usar uma identidade gerenciada para autenticar no Armazenamento do Azure. Se isso não for possível, considere ter a credencial de armazenamento (cadeia de conexão, chave da conta de armazenamento, SAS, credencial da entidade de serviço) no Azure KeyVault ou em um serviço equivalente.",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere armazenar cadeias de conexão no Azure KeyVault (em cenários em que as identidades gerenciadas não são possíveis)",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Use tempos de expiração de curto prazo em uma SAS de serviço SAS ad hoc ou SAS de conta. Dessa forma, mesmo que uma SAS seja comprometida, ela é válida apenas por um curto período de tempo. Essa prática é especialmente importante se você não puder fazer referência a uma política de acesso armazenada. Os tempos de expiração de curto prazo também limitam a quantidade de dados que podem ser gravados em um blob, limitando o tempo disponível para carregar nele.",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Habilitar Configurações de Diagnóstico para exportar logs para o Azure Monitor",
- "waf": "Operações"
+ "text": "Esforce-se por períodos de validade curtos para SAS ad-hoc",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Ao criar uma SAS, seja o mais específico e restritivo possível. Prefira uma SAS para um único recurso e operação em vez de uma SAS que oferece acesso muito mais amplo.",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Habilite o Application Insights para telemetria mais detalhada",
- "waf": "Operações"
+ "text": "Aplicar um escopo restrito a uma SAS",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Uma SAS pode incluir parâmetros nos quais os endereços IP do cliente ou intervalos de endereços estão autorizados a solicitar um recurso usando a SAS. ",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Considere definir o escopo da SAS para um endereço IP de cliente específico, sempre que possível",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Uma SAS não pode restringir a quantidade de dados que um cliente carrega; Dado o modelo de preços da quantidade de armazenamento ao longo do tempo, pode fazer sentido validar se os clientes carregaram conteúdos maliciosamente grandes.",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "Baixo",
+ "text": "Considere verificar os dados carregados depois que os clientes usaram uma SAS para carregar um arquivo. ",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Ao acessar o armazenamento de blobs por meio do SFTP usando uma \"conta de usuário local\", os controles RBAC \"usuais\" não se aplicam. O acesso a blobs via NFS ou REST pode ser mais restritivo do que o acesso SFTP. Infelizmente, a partir do início de 2023, os usuários locais são a única forma de gerenciamento de identidade com suporte atual para o endpoint SFTP",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Configurar alertas sobre as métricas mais críticas",
- "waf": "Operações"
+ "text": "SFTP: limite a quantidade de \"usuários locais\" para acesso SFTP e audite se o acesso é necessário ao longo do tempo.",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "SFTP: o endpoint SFTP não oferece suporte a ACLs semelhantes a POSIX.",
+ "waf": "Segurança"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "O armazenamento oferece suporte ao CORS (Cross-Origin Resource Sharing), ou seja, um recurso HTTP que permite que aplicativos Web de um domínio diferente afrouxem a política de mesma origem. Ao habilitar o CORS, mantenha as CorsRules com o menor privilégio.",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Certifique-se de que os certificados SSL personalizados sejam armazenados em um Cofre de Chaves do Azure para que possam ser acessados e atualizados com segurança",
+ "text": "Evite políticas de CORS excessivamente amplas",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Os dados em repouso são sempre criptografados no lado do servidor e, além disso, também podem ser criptografados no lado do cliente. A criptografia do lado do servidor pode ocorrer usando uma chave gerenciada pela plataforma (padrão) ou uma chave gerenciada pelo cliente. A criptografia do lado do cliente pode acontecer fazendo com que o cliente forneça uma chave de criptografia/descriptografia por blob para o armazenamento do Azure ou manipulando completamente a criptografia no lado do cliente. portanto, não dependendo do Armazenamento do Azure para garantias de confidencialidade.",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
"severity": "Alto",
- "text": "Proteger solicitações de entrada para APIs (plano de dados) com o Azure AD",
+ "text": "Determine como os dados em repouso devem ser criptografados. Entenda o modelo de thread para dados.",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Usar o Microsoft Entra ID para autenticar usuários no Portal do Desenvolvedor",
+ "text": "Determine qual/se a criptografia de plataforma deve ser usada.",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Criar grupos apropriados para controlar a visibilidade dos produtos",
+ "text": "Determine qual/se a criptografia do lado do cliente deve ser usada.",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
- "severity": "Média",
- "text": "Use o recurso Back-ends para eliminar configurações redundantes de back-end de API",
- "waf": "Operações"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "Aproveite o Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para localizar contas de armazenamento que permitem acesso anônimo a blobs.",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Considere se o acesso anônimo de blob público é necessário ou se ele pode ser desabilitado para determinadas contas de armazenamento. ",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
- "severity": "Média",
- "text": "Usar Valores Nomeados para armazenar valores comuns que podem ser usados em políticas",
- "waf": "Operações"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Aproveite um tipo de conta storagev2 para melhor desempenho e confiabilidade",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
- "severity": "Média",
- "text": "Para DR, aproveite o nível premium com implantações dimensionadas em duas ou mais regiões para um SLA de 99,99%",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "Alto",
+ "text": "Aproveite o armazenamento GRS, ZRS ou GZRS para obter a mais alta disponibilidade",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Implante pelo menos uma unidade em duas ou mais zonas de disponibilidade para um SLA aumentado de 99,99%",
+ "text": "Para operação de gravação após o failover, use o failover gerenciado pelo cliente ",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
- "severity": "Alto",
- "text": "Verifique se há uma rotina de backup automatizada",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
+ "severity": "Média",
+ "text": "Entender os detalhes do failover gerenciado pela Microsoft",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
"severity": "Média",
- "text": "Use Políticas para adicionar uma URL de back-end de failover e cache para reduzir chamadas com falha.",
+ "text": "Habilitar exclusão reversível",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
"severity": "Baixo",
- "text": "Se você precisar registrar em níveis de alto desempenho, considere a política de Hubs de Eventos",
- "waf": "Operações"
+ "text": "Consulte a arquitetura de aplicativo Web com redundância de zona altamente disponível da linha de base para obter as práticas recomendadas",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "Média",
- "text": "Aplicar políticas de limitação para controlar o número de solicitações por segundo",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
- "waf": "Desempenho"
+ "text": "Use as camadas Premium e Standard. Esses níveis oferecem suporte a slots de preparo e backups automatizados.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
- "severity": "Média",
- "text": "Configurar o dimensionamento automático para dimensionar o número de instâncias quando a carga aumenta",
- "waf": "Desempenho"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Aproveite as zonas de disponibilidade quando aplicável regionalmente (requer a camada Premium v2 ou v3)",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "Média",
- "text": "Implante gateways auto-hospedados onde o Azure não tem uma região próxima às APIs de back-end.",
- "waf": "Desempenho"
+ "text": "Implementar verificações de integridade",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
- "severity": "Média",
- "text": "Use a camada premium para cargas de trabalho de produção.",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Consulte as práticas recomendadas de backup e restauração para o Serviço de Aplicativo do Azure",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
- "severity": "Média",
- "text": "No modelo de várias regiões, use Políticas para rotear as solicitações para back-ends regionais com base na disponibilidade ou latência.",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Implementar práticas recomendadas de confiabilidade do Serviço de Aplicativo do Azure",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
- "severity": "Alto",
- "text": "Esteja atento aos limites da APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
+ "severity": "Baixo",
+ "text": "Familiarizar-se com como mover um aplicativo do Serviço de Aplicativo para outra região durante um desastre",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "service": "App Services",
"severity": "Alto",
- "text": "Certifique-se de que as implantações de gateway auto-hospedado sejam resilientes.",
+ "text": "Familiarizar-se com o suporte de confiabilidade no Serviço de Aplicativo do Azure",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"severity": "Média",
- "text": "Usar o Azure Front Door na frente do APIM para implantação em várias regiões",
- "waf": "Desempenho"
+ "text": "Verifique se \"Sempre Ativo\" está habilitado para Aplicativos de Função em execução em um plano de serviço de aplicativo",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "Média",
- "text": "Implantar o serviço em uma rede virtual (VNet)",
- "waf": "Segurança"
+ "text": "Monitorar instâncias do Serviço de Aplicativo usando verificações de integridade",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
"severity": "Média",
- "text": "Implante NSG (grupos de segurança de rede) em suas sub-redes para restringir ou monitorar o tráfego de/para APIM.",
- "waf": "Segurança"
+ "text": "Monitorar a disponibilidade e a capacidade de resposta do aplicativo Web ou site usando testes de disponibilidade do Application Insights",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
- "severity": "Média",
- "text": "Implante pontos de extremidade privados para filtrar o tráfego de entrada quando o APIM não for implantado em uma rede virtual.",
- "waf": "Segurança"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
+ "severity": "Baixo",
+ "text": "Usar o teste Application Insights Standard para monitorar a disponibilidade e a capacidade de resposta do aplicativo Web ou site",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Use o Cofre de Chaves do Azure para armazenar quaisquer segredos de que o aplicativo precisa. O Cofre de Chaves fornece um ambiente seguro e auditado para armazenar segredos e está bem integrado ao Serviço de Aplicativo por meio do SDK do Cofre de Chaves ou das Referências do Cofre de Chaves do Serviço de Aplicativo.",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"severity": "Alto",
- "text": "Desabilitar o acesso à rede pública",
+ "text": "Usar o Cofre de Chaves para armazenar segredos",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
- "severity": "Média",
- "text": "Simplifique o gerenciamento com scripts de automação do PowerShell",
- "waf": "Operações"
- },
- {
- "checklist": "Azure API Management Review",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
- "severity": "Média",
- "text": "Configure APIM via Infrastructure-as-code. Analise as práticas recomendadas de DevOps do Cloud Adaption Framework APIM Landing Zone Accelerator",
- "waf": "Operações"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Use uma Identidade Gerenciada para se conectar ao Cofre de Chaves usando o SDK do Cofre de Chaves ou por meio das Referências do Cofre de Chaves do Serviço de Aplicativo.",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Usar a Identidade Gerenciada para se conectar ao Cofre de Chaves",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
- "severity": "Média",
- "text": "Promover o uso da extensão API do Visual Studio Code para um desenvolvimento de API mais rápido",
- "waf": "Operações"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Armazene o certificado TLS do Serviço de Aplicativo no Cofre de Chaves.",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Use o Cofre de Chaves para armazenar o certificado TLS.",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Os sistemas que processam informações confidenciais devem ser isolados. Para fazer isso, use Planos do Serviço de Aplicativo ou Ambientes do Serviço de Aplicativo separados e considere o uso de assinaturas ou grupos de gerenciamento diferentes.",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "Média",
- "text": "Implemente DevOps e CI/CD em seu fluxo de trabalho",
- "waf": "Operações"
+ "text": "Isolar sistemas que processam informações confidenciais",
+ "waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Os discos locais no Serviço de Aplicativo não são criptografados e os dados confidenciais não devem ser armazenados neles. (Por exemplo: D:\\\\Local e %TMP%).",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"severity": "Média",
- "text": "APIs seguras usando autenticação de certificado de cliente",
+ "text": "Não armazene dados confidenciais no disco local",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Para aplicativos Web autenticados, use um Provedor de Identidade bem estabelecido, como o Azure AD ou o Azure AD B2C. Aproveite a estrutura de aplicativo de sua escolha para se integrar a esse provedor ou use o recurso de Autenticação/Autorização do Serviço de Aplicativo.",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
"severity": "Média",
- "text": "Serviços de back-end seguros usando autenticação de certificado de cliente",
+ "text": "Usar um provedor de identidade estabelecido para autenticação",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
- "severity": "Média",
- "text": "Consulte o artigo \"Recomendações para mitigar as 10 principais ameaças da segurança da API OWASP\" e verifique o que é aplicável às suas APIs",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Implante código no Serviço de Aplicativo a partir de um ambiente controlado e confiável, como um pipeline de implantação de DevOps bem gerenciado e seguro. Isso evita que o código que não foi controlado por versão e verificado para ser implantado a partir de um host mal-intencionado.",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Implantar a partir de um ambiente confiável",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
- "severity": "Média",
- "text": "Usar o recurso Autorizações para simplificar o gerenciamento do token OAuth 2.0 para suas APIs de back-end",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Desative a autenticação básica para FTP/FTPS e WebDeploy/SCM. Isso desabilita o acesso a esses serviços e impõe o uso de pontos de extremidade protegidos do Azure AD para implantação. Observe que o site do SCM também pode ser aberto usando credenciais do Azure AD.",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Desabilitar a autenticação básica",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Sempre que possível, use a Identidade Gerenciada para se conectar aos recursos protegidos do Azure AD. Se isso não for possível, armazene segredos no Cofre de Chaves e conecte-se ao Cofre de Chaves usando uma Identidade Gerenciada.",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
"severity": "Alto",
- "text": "Use a versão mais recente do TLS ao criptografar informações em trânsito. Desative protocolos e cifras desatualizados e desnecessários quando possível.",
+ "text": "Usar a Identidade Gerenciada para se conectar a recursos",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Onde estiver usando imagens armazenadas no Registro de Contêiner do Azure, extraia-as usando uma Identidade Gerenciada.",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
"severity": "Alto",
- "text": "Certifique-se de que os segredos (valores nomeados) sejam armazenados em um Cofre de Chaves do Azure para que possam ser acessados e atualizados com segurança",
+ "text": "Extrair contêineres usando uma identidade gerenciada",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Ao definir as configurações de diagnóstico do Serviço de Aplicativo, você pode enviar toda a telemetria para o Log Analytics como o destino central para registro em log e monitoramento. Isso permite que você monitore a atividade de tempo de execução do Serviço de Aplicativo, como logs HTTP, logs de aplicativos, logs de plataforma, ...",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"severity": "Média",
- "text": "Use identidades gerenciadas para autenticar em outros recursos do Azure sempre que possível",
+ "text": "Enviar logs de tempo de execução do Serviço de Aplicativo para o Log Analytics",
"waf": "Segurança"
},
{
- "checklist": "Azure API Management Review",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
- "severity": "Alto",
- "text": "Usar o WAF (Web Application Firewall) implantando o Application Gateway na frente do APIM",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Configure uma configuração de diagnóstico para enviar o log de atividades para o Log Analytics como o destino central para registro e monitoramento. Isso permite que você monitore a atividade do plano de controle no próprio recurso do Serviço de Aplicativo.",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
+ "severity": "Média",
+ "text": "Enviar logs de atividade do Serviço de Aplicativo para o Log Analytics",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Controle o acesso à rede de saída usando uma combinação de integração regional de VNet, grupos de segurança de rede e UDR's. O tráfego deve ser roteado para um NVA, como o Firewall do Azure. Certifique-se de monitorar os logs do Firewall.",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
"severity": "Média",
- "text": "O Azure Center for SAP solutions (ACSS) é uma oferta do Azure que torna o SAP uma carga de trabalho de nível superior no Azure. O ACSS é uma solução de ponta a ponta que permite criar e executar sistemas SAP como uma carga de trabalho unificada no Azure e fornece uma base mais perfeita para a inovação. Você pode aproveitar os recursos de gerenciamento para sistemas SAP novos e existentes baseados no Azure.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
- "waf": "Operações"
+ "text": "O acesso à rede de saída deve ser controlado",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
- "service": "SAP",
- "severity": "Média",
- "text": "O Azure dá suporte à automação de implantações SAP no Linux e no Windows. O SAP Deployment Automation Framework é uma ferramenta de orquestração de código aberto que pode implantar, instalar e manter ambientes SAP.",
- "training": "https://github.com/Azure/sap-automation",
- "waf": "Operações"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Você pode fornecer um IP de saída estável usando a integração de rede virtual e um gateway NAT de rede virtual ou um NVA como o Firewall do Azure. Isso permite que a parte receptora permita uma lista com base no IP, caso seja necessário. Observe que, para comunicações com os Serviços do Azure, geralmente não há necessidade de depender do endereço IP e mecânicas como Pontos de Extremidade de Serviço devem ser usadas. (Além disso, o uso de pontos de extremidade privados na extremidade de recebimento evita que o SNAT aconteça e fornece um intervalo de IP de saída estável.)",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
+ "severity": "Baixo",
+ "text": "Garantir um IP estável para comunicações de saída para endereços de Internet",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
- "service": "SAP",
- "severity": "Média",
- "text": "Executar uma recuperação point-in-time para seus bancos de dados de produção em qualquer ponto e em um período de tempo que atenda ao seu RTO; A recuperação point-in-time normalmente inclui erros do operador excluindo dados na camada DBMS ou por meio do SAP, incidentalmente",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Controle o acesso à rede de entrada usando uma combinação de Restrições de Acesso do Serviço de Aplicativo, Pontos de Extremidade de Serviço ou Pontos de Extremidade Privados. Diferentes restrições de acesso podem ser necessárias e configuradas para o próprio aplicativo Web e o site do SCM.",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "O acesso à rede de entrada deve ser controlado",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
- "service": "SAP",
- "severity": "Média",
- "text": "Teste os tempos de backup e recuperação para verificar se eles atendem aos requisitos de RTO para restaurar todos os sistemas simultaneamente após um desastre.",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Proteja-se contra tráfego de entrada mal-intencionado usando um Firewall de Aplicativo Web, como o Gateway de Aplicativo ou o Azure Front Door. Certifique-se de monitorar os logs do WAF.",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Usar um WAF na frente do Serviço de Aplicativo",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Certifique-se de que o WAF não pode ser ignorado bloqueando o acesso apenas ao WAF. Use uma combinação de Restrições de Acesso, Pontos de Extremidade de Serviço e Pontos de Extremidade Privados.",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"severity": "Alto",
- "text": "Você pode replicar o armazenamento padrão entre regiões emparelhadas, mas não pode usar o armazenamento padrão para armazenar seus bancos de dados ou discos rígidos virtuais. Você pode replicar backups somente entre regiões emparelhadas que você usa. Para todos os outros dados, execute sua replicação usando recursos nativos de DBMS, como SQL Server Always On ou SAP HANA System Replication. Use uma combinação de Site Recovery, rsync ou robocopy e outros softwares de terceiros para a camada de aplicativos SAP.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "Fiabilidade"
+ "text": "Evite que o WAF seja ignorado",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Defina a política TLS mínima como 1.2 na configuração do Serviço de Aplicativo.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
"severity": "Média",
- "text": "Ao usar as Zonas de Disponibilidade do Azure para obter alta disponibilidade, você deve considerar a latência entre servidores de aplicativos SAP e servidores de banco de dados. Para zonas com altas latências, os procedimentos operacionais precisam estar em vigor para garantir que os servidores de aplicativos SAP e os servidores de banco de dados estejam sendo executados na mesma zona o tempo todo.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Fiabilidade"
+ "text": "Definir a política TLS mínima como 1.2",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Configure o Serviço de Aplicativo para usar somente HTTPS. Isso faz com que o Serviço de Aplicativo redirecione de HTTP para HTTPS. Considere fortemente o uso de HTTP Strict Transport Security (HSTS) em seu código ou a partir de seu WAF, que informa aos navegadores que o site só deve ser acessado usando HTTPS.",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
"severity": "Alto",
- "text": "Configure conexões de Rota Expressa do local para as regiões primária e secundária de recuperação de desastres do Azure. Além disso, como alternativa ao uso da Rota Expressa, considere configurar conexões VPN locais para as regiões primária e secundária de recuperação de desastres do Azure.",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "waf": "Fiabilidade"
+ "text": "Usar somente HTTPS",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Replique o conteúdo do cofre de chaves, como certificados, segredos ou chaves entre regiões, para que você possa descriptografar dados na região de recuperação de desastres.",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Não use curingas em sua configuração do CORS, pois isso permite que todas as origens acessem o serviço (derrotando assim o propósito do CORS). Especificamente, permita apenas as origens que você espera poder acessar o serviço.",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Curingas não devem ser usados para CORS",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
- "service": "SAP",
- "severity": "Média",
- "text": "Emparelhar as redes virtuais primária e de recuperação de desastres. Por exemplo, para a replicação do sistema HANA, uma rede virtual SAP HANA DB precisa ser emparelhada para a rede virtual SAP HANA DB do site de recuperação de desastres.",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "A depuração remota não deve ser ativada na produção, pois isso abre portas adicionais no serviço, o que aumenta a superfície de ataque. Observe que o serviço ativa a depuração remota automaticamente após 48 horas.",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
+ "severity": "Alto",
+ "text": "Desativar a depuração remota",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Se você usar o armazenamento do Azure NetApp Files para suas implantações SAP, no mínimo, crie duas contas do Azure NetApp Files na camada Premium, em duas regiões.",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Habilite o Defender para o Serviço de Aplicativo. Isso (entre outras ameaças) detecta comunicações com endereços IP mal-intencionados conhecidos. Analise as recomendações do Defender for App Service como parte de suas operações.",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
+ "severity": "Média",
+ "text": "Habilitar o Defender for Cloud - Defender for App Service",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
- "severity": "Alto",
- "text": "A tecnologia de replicação de banco de dados nativo deve ser usada para sincronizar o banco de dados em um par de HA.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "O Azure fornece proteção contra DDoS Basic em sua rede, que pode ser aprimorada com recursos inteligentes de DDoS Standard que aprendem sobre padrões normais de tráfego e podem detectar comportamentos incomuns. O DDoS Standard se aplica a uma Rede Virtual, portanto, ele deve ser configurado para o recurso de rede na frente do aplicativo, como o Application Gateway ou um NVA.",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
+ "severity": "Média",
+ "text": "Habilitar o padrão de proteção DDOS na rede virtual WAF",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
- "service": "SAP",
- "severity": "Alto",
- "text": "O CIDR da rede virtual primária (VNet) não deve entrar em conflito ou se sobrepor ao CIDR da VNet do site de recuperação de desastres",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Ao usar imagens armazenadas no Registro de Contêiner do Azure, extraia-as por uma rede virtual do Registro de Contêiner do Azure usando seu ponto de extremidade privado e a configuração do aplicativo 'WEBSITE_PULL_IMAGE_OVER_VNET'.",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
+ "severity": "Média",
+ "text": "Extrair contêineres por uma rede virtual",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use a Recuperação de Site para replicar um servidor de aplicativos para um site de recuperação de desastres. A Recuperação de Site também pode ajudar na replicação de VMs de cluster de serviços centrais para o site de recuperação de desastres. Ao invocar o DR, você precisará reconfigurar o cluster do Linux Pacemaker no site de DR (por exemplo, substitua o VIP ou o SBD, execute o corosync.conf e muito mais).",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Realizar um teste de penetração na aplicação web seguindo as regras de teste de penetração de engajamento.",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
+ "severity": "Média",
+ "text": "Realizar um teste de penetração",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "Alto",
- "text": "Considere a disponibilidade do software SAP em relação a pontos únicos de falha. Isso inclui pontos únicos de falha em aplicativos como SGBDs utilizados nas arquiteturas SAP NetWeaver e SAP S/4HANA, SAP ABAP e ASCS + SCS. Além disso, outras ferramentas, como o SAP Web Dispatcher.",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Implante código confiável que foi validado e verificado em busca de vulnerabilidades de acordo com as práticas de DevSecOps.",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
+ "severity": "Média",
+ "text": "Implantar código validado",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
- "service": "SAP",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Use as versões mais recentes de plataformas, linguagens de programação, protocolos e estruturas suportadas.",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
"severity": "Alto",
- "text": "Para bancos de dados SAP e SAP, considere a implementação de clusters de failover automático. No Windows, o Clustering de Failover do Windows Server oferece suporte a failover. No Linux, Linux Pacemaker ou ferramentas de terceiros como SIOS Protection Suite e Veritas InfoScale suportam failover.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidade"
+ "text": "Use plataformas, linguagens, protocolos e frameworks atualizados",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
- "service": "SAP",
- "severity": "Alto",
- "text": "O Azure não oferece suporte a arquiteturas nas quais as VMs primária e secundária compartilham armazenamento para dados DBMS. Para a camada DBMS, o padrão de arquitetura comum é replicar bancos de dados ao mesmo tempo e com pilhas de armazenamento diferentes daquelas que as VMs primária e secundária usam.",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Implementar uma política de tratamento de erros em nível global",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
- "service": "SAP",
- "severity": "Alto",
- "text": "Os dados do DBMS e os arquivos de log de transação/refazer são armazenados no armazenamento em bloco com suporte do Azure ou nos Arquivos do Azure NetApp. Os Arquivos do Azure ou os Arquivos Premium do Azure não têm suporte como armazenamento para dados DBMS e/ou arquivos de log de refazer com a carga de trabalho SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Certifique-se de que todas as políticas de APIs incluam um elemento .",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
- "service": "SAP",
- "severity": "Alto",
- "text": "Você pode usar discos compartilhados do Azure no Windows para componentes ASCS + SCS e cenários específicos de alta disponibilidade. Configure seus clusters de failover separadamente para componentes da camada de aplicativo SAP e a camada DBMS. No momento, o Azure não oferece suporte a arquiteturas de alta disponibilidade que combinam componentes da camada de aplicativo SAP e a camada DBMS em um cluster de failover.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Usar fragmentos de política para evitar a repetição das mesmas definições de políticas em várias APIs",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
- "service": "SAP",
- "severity": "Alto",
- "text": "A maioria dos clusters de failover para ASCS (Application Layer Components, componentes da camada de aplicativo) SAP e a camada DBMS exigem um endereço IP virtual para um cluster de failover. O Balanceador de Carga do Azure deve manipular o endereço IP virtual para todos os outros casos. Um princípio de design é usar um balanceador de carga por configuração de cluster. Recomendamos que você use a versão padrão do balanceador de carga (SKU do Standard Load Balancer).",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Se você estiver planejando monetizar suas APIs, consulte o artigo 'suporte à monetização' para obter as práticas recomendadas",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
"severity": "Alto",
- "text": "Verifique se o IP flutuante está habilitado no balanceador de carga",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "Fiabilidade"
+ "text": "Habilitar Configurações de Diagnóstico para exportar logs para o Azure Monitor",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "SAP",
- "severity": "Alto",
- "text": "Antes de implantar sua infraestrutura de alta disponibilidade, e dependendo da região escolhida, determine se deseja implantar com um conjunto de disponibilidade do Azure ou uma zona de disponibilidade.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Habilite o Application Insights para telemetria mais detalhada",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
"severity": "Alto",
- "text": "Se desejar atender aos SLAs de infraestrutura de seus aplicativos para componentes SAP (serviços centrais, servidores de aplicativos e bancos de dados), você deverá escolher as mesmas opções de alta disponibilidade (VMs, conjuntos de disponibilidade, zonas de disponibilidade) para todos os componentes.",
- "waf": "Fiabilidade"
+ "text": "Configurar alertas sobre as métricas mais críticas",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
"severity": "Alto",
- "text": "Não misture servidores de funções diferentes no mesmo conjunto de disponibilidade. Mantenha VMs de serviços centrais, VMs de banco de dados, VMs de aplicativos em seus próprios conjuntos de disponibilidade",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
- "service": "SAP",
- "severity": "Média",
- "text": "Você não pode implantar conjuntos de disponibilidade do Azure em uma zona de disponibilidade do Azure, a menos que use grupos de posicionamento de proximidade.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "Fiabilidade"
+ "text": "Certifique-se de que os certificados SSL personalizados sejam armazenados em um Cofre de Chaves do Azure para que possam ser acessados e atualizados com segurança",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
"severity": "Alto",
- "text": "Ao criar conjuntos de disponibilidade, use o número máximo de domínios de falha e atualize domínios disponíveis. Por exemplo, se você implantar mais de duas VMs em um conjunto de disponibilidade, use o número máximo de domínios de falha (três) e domínios de atualização suficientes para limitar o efeito de possíveis falhas de hardware físico, interrupções de rede ou interrupções de energia, além da manutenção planejada do Azure. O número padrão de domínios de falha é dois e você não pode alterá-lo online mais tarde.",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "Fiabilidade"
+ "text": "Proteger solicitações de entrada para APIs (plano de dados) com o Azure AD",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "Alto",
- "text": "Quando você usa grupos de posicionamento de proximidade do Azure em uma implantação de conjunto de disponibilidade, todos os três componentes SAP (serviços centrais, servidor de aplicativos e banco de dados) devem estar no mesmo grupo de posicionamento de proximidade.",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Usar o Microsoft Entra ID para autenticar usuários no Portal do Desenvolvedor",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use um grupo de posicionamento de proximidade por SAP SID. Os grupos não se estendem por zonas de disponibilidade ou regiões do Azure",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Criar grupos apropriados para controlar a visibilidade dos produtos",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use um dos seguintes serviços para executar clusters de serviços centrais SAP, dependendo do sistema operacional.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Use o recurso Back-ends para eliminar configurações redundantes de back-end de API",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
"severity": "Média",
- "text": "No momento, o Azure não oferece suporte à combinação de ASCS e HA de banco de dados no mesmo cluster do Linux Pacemaker; Separe-os em agrupamentos individuais. No entanto, você pode combinar até cinco clusters de serviços centrais em um par de VMs.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Fiabilidade"
+ "text": "Usar Valores Nomeados para armazenar valores comuns que podem ser usados em políticas",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
"severity": "Média",
- "text": "Implante ambas as VMs no par de alta disponibilidade em um conjunto de disponibilidade ou em zonas de disponibilidade. Essas VMs devem ter o mesmo tamanho e a mesma configuração de armazenamento.",
+ "text": "Para DR, aproveite o nível premium com implantações dimensionadas em duas ou mais regiões para um SLA de 99,99%",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
"severity": "Média",
- "text": "O Azure oferece suporte à instalação e configuração de instâncias SAP HANA e ASCS/SCS e ERS no mesmo cluster de alta disponibilidade em execução no Red Hat Enterprise Linux (RHEL).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "text": "Implante pelo menos uma unidade em duas ou mais zonas de disponibilidade para um SLA aumentado de 99,99%",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
"severity": "Alto",
- "text": "Execute todos os sistemas de produção em SSDs gerenciados Premium e use o Azure NetApp Files ou o Ultra Disk Storage. Pelo menos o disco do sistema operacional deve estar na camada Premium para que você possa obter melhor desempenho e o melhor SLA.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "text": "Verifique se há uma rotina de backup automatizada",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
- "service": "SAP",
- "severity": "Alto",
- "text": "Você deve executar o SAP HANA no Azure somente nos tipos de armazenamento certificados pela SAP. Observe que determinados volumes devem ser executados em determinadas configurações de disco, quando aplicável. Essas configurações incluem a habilitação do Acelerador de Gravação e o uso do armazenamento Premium. Você também precisa garantir que o sistema de arquivos executado no armazenamento seja compatível com o DBMS executado na máquina.",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Use Políticas para adicionar uma URL de back-end de failover e cache para reduzir chamadas com falha.",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
- "service": "SAP",
- "severity": "Alto",
- "text": "Considere configurar a alta disponibilidade dependendo do tipo de armazenamento usado para suas cargas de trabalho SAP. Alguns serviços de armazenamento disponíveis no Azure não têm suporte no Azure Site Recovery, portanto, sua configuração de alta disponibilidade pode ser diferente.",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
+ "severity": "Baixo",
+ "text": "Se você precisar registrar em níveis de alto desempenho, considere a política de Hubs de Eventos",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
- "severity": "Alto",
- "text": "Diferentes serviços de armazenamento nativos do Azure (como Arquivos do Azure, Arquivos do Azure NetApp, Disco Compartilhado do Azure) podem não estar disponíveis em todas as regiões. Portanto, para ter uma configuração SAP semelhante na região de DR após o failover, certifique-se de que o respectivo serviço de armazenamento seja oferecido no local de DR.",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Aplicar políticas de limitação para controlar o número de solicitações por segundo",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "Desempenho"
},
{
- "checklist": "SAP Checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
"severity": "Média",
- "text": "Automatize o Start-Stop do sistema SAP para gerenciar custos.",
- "waf": "Custar"
+ "text": "Configurar o dimensionamento automático para dimensionar o número de instâncias quando a carga aumenta",
+ "waf": "Desempenho"
},
{
- "checklist": "SAP Checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "Baixo",
- "text": "No caso de usar o Armazenamento Premium do Azure com o SAP HANA, o armazenamento SSD padrão do Azure pode ser usado para selecionar uma solução de armazenamento econômica. No entanto, observe que escolher o armazenamento padrão SSD ou HDD padrão do Azure afetará o SLA das VMs individuais. Além disso, para sistemas com menor taxa de transferência de E/S e baixa latência, como ambientes que não são de produção, VMs de série mais baixa podem ser usadas.",
- "waf": "Custar"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Implante gateways auto-hospedados onde o Azure não tem uma região próxima às APIs de back-end.",
+ "waf": "Desempenho"
},
{
- "checklist": "SAP Checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Como uma configuração alternativa de baixo custo (multiuso), você pode escolher uma SKU de baixo desempenho para suas VMs de servidor de banco de dados HANA que não são de produção. No entanto, é importante observar que alguns tipos de VM, como a série E, não são certificados pelo HANA (SAP HANA Hardware Directory) ou não podem atingir latência de armazenamento inferior a 1ms.",
- "waf": "Custar"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Use a camada premium para cargas de trabalho de produção.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
- "service": "SAP",
- "severity": "Alto",
- "text": "Impor um modelo RBAC para grupos de gerenciamento, assinaturas, grupos de recursos e recursos",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "No modelo de várias regiões, use Políticas para rotear as solicitações para back-ends regionais com base na disponibilidade ou latência.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "Média",
- "text": "Impor a propagação principal para encaminhar a identidade do aplicativo de nuvem SAP para o SAP local (incluindo IaaS) por meio do conector de nuvem",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
- "waf": "Segurança"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
+ "severity": "Alto",
+ "text": "Esteja atento aos limites da APIM",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
- "service": "SAP",
- "severity": "Média",
- "text": "Implemente SSO em aplicativos SAP SaaS como SAP Analytics Cloud, SAP Cloud Platform, Business by design, SAP Qualtrics e SAP C4C com o Azure AD usando SAML.",
- "waf": "Segurança"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
+ "severity": "Alto",
+ "text": "Certifique-se de que as implantações de gateway auto-hospedado sejam resilientes.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
"severity": "Média",
- "text": "Implemente SSO em aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "Segurança"
+ "text": "Usar o Azure Front Door na frente do APIM para implantação em várias regiões",
+ "waf": "Desempenho"
},
{
- "checklist": "SAP Checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
"severity": "Média",
- "text": "Implemente SSO em aplicativos Web baseados no SAP NetWeaver, como SAP Fiori e SAP Web GUI, usando SAML.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "text": "Implantar o serviço em uma rede virtual (VNet)",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
"severity": "Média",
- "text": "Você pode implementar o SSO no SAP GUI usando o SAP NetWeaver SSO ou uma solução de parceiro.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "text": "Implante NSG (grupos de segurança de rede) em suas sub-redes para restringir ou monitorar o tráfego de/para APIM.",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
"severity": "Média",
- "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido a sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "text": "Implante pontos de extremidade privados para filtrar o tráfego de entrada quando o APIM não for implantado em uma rede virtual.",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
- "service": "SAP",
- "severity": "Média",
- "text": "Para SSO para SAP GUI e acesso ao navegador web, implemente SNC / Kerberos / SPNEGO (mecanismo de negociação GSSAPI simples e protegido) devido a sua facilidade de configuração e manutenção. Para SSO com certificados de cliente X.509, considere o SAP Secure Login Server, que é um componente da solução SAP SSO.",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
+ "severity": "Alto",
+ "text": "Desabilitar o acesso à rede pública",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
"severity": "Média",
- "text": "Implemente o SSO usando o OAuth for SAP NetWeaver para permitir que aplicativos de terceiros ou personalizados acessem os serviços OData do SAP NetWeaver.",
- "waf": "Segurança"
+ "text": "Simplifique o gerenciamento com scripts de automação do PowerShell",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
"severity": "Média",
- "text": "Implementar SSO no SAP HANA",
- "waf": "Segurança"
+ "text": "Configure APIM via Infrastructure-as-code. Analise as práticas recomendadas de DevOps do Cloud Adaption Framework APIM Landing Zone Accelerator",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
"severity": "Média",
- "text": "Considere o Azure AD um provedor de identidade para sistemas SAP hospedados no RISE. Para obter mais informações, consulte Integrando o serviço ao Azure AD.",
- "waf": "Segurança"
+ "text": "Promover o uso da extensão API do Visual Studio Code para um desenvolvimento de API mais rápido",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
- "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
"severity": "Média",
- "text": "Para aplicativos que acessam o SAP, convém usar a propagação principal para estabelecer o SSO.",
- "waf": "Segurança"
+ "text": "Implemente DevOps e CI/CD em seu fluxo de trabalho",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
"severity": "Média",
- "text": "Se você estiver usando serviços SAP BTP ou soluções SaaS que exigem o SAP Identity Authentication Service (IAS), considere implementar SSO entre o SAP Cloud Identity Authentication Services e o Azure AD para acessar esses serviços SAP. Essa integração permite que o SAP IAS atue como um provedor de identidade de proxy e encaminhe solicitações de autenticação para o Azure AD como o repositório central do usuário e o provedor de identidade.",
+ "text": "APIs seguras usando autenticação de certificado de cliente",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
+ "service": "APIM",
"severity": "Média",
- "text": "Implementar SSO no SAP BTP",
+ "text": "Serviços de back-end seguros usando autenticação de certificado de cliente",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
+ "service": "APIM",
"severity": "Média",
- "text": "Se você estiver usando o SAP SuccessFactors, considere usar o provisionamento automatizado de usuários do Azure AD. Com essa integração, à medida que você adiciona novos funcionários ao SAP SuccessFactors, pode criar automaticamente suas contas de usuário no Azure AD. Opcionalmente, você pode criar contas de usuário no Microsoft 365 ou em outros aplicativos SaaS com suporte no Azure AD. Use write-back do endereço de e-mail para SAP SuccessFactors.",
+ "text": "Consulte o artigo \"Recomendações para mitigar as 10 principais ameaças da segurança da API OWASP\" e verifique o que é aplicável às suas APIs",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
+ "service": "APIM",
"severity": "Média",
- "text": "impor políticas existentes do Grupo de Gerenciamento às assinaturas SAP",
- "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "waf": "Operações"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
- "severity": "Alto",
- "text": "Integre aplicativos fortemente acoplados na mesma assinatura SAP para evitar complexidade adicional de roteamento e gerenciamento",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "waf": "Operações"
+ "text": "Usar o recurso Autorizações para simplificar o gerenciamento do token OAuth 2.0 para suas APIs de back-end",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
+ "service": "APIM",
"severity": "Alto",
- "text": "Aproveite a assinatura como unidade de escala e dimensione nossos recursos, considere implantar a assinatura por ambiente, por exemplo. Sandbox, não-prod, prod ",
- "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "waf": "Operações"
+ "text": "Use a versão mais recente do TLS ao criptografar informações em trânsito. Desative protocolos e cifras desatualizados e desnecessários quando possível.",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
+ "service": "APIM",
"severity": "Alto",
- "text": "Garantir o aumento da cota como parte do provisionamento de assinatura (por exemplo, total de núcleos de VM disponíveis em uma assinatura)",
- "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "waf": "Operações"
+ "text": "Certifique-se de que os segredos (valores nomeados) sejam armazenados em um Cofre de Chaves do Azure para que possam ser acessados e atualizados com segurança",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
- "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
- "service": "SAP",
- "severity": "Baixo",
- "text": "A API de Cota é uma API REST que você pode usar para exibir e gerenciar cotas para serviços do Azure. Considere usá-lo, se necessário.",
- "waf": "Operações"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
+ "service": "APIM",
+ "severity": "Média",
+ "text": "Use identidades gerenciadas para autenticar em outros recursos do Azure sempre que possível",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
- "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
+ "service": "APIM",
"severity": "Alto",
- "text": "Se estiver implantando em uma zona de disponibilidade, verifique se a implantação da zona da VM estará disponível depois que a cota for aprovada. Envie uma solicitação de suporte com a assinatura, a série VM, o número de CPUs e a zona de disponibilidade necessárias.",
- "waf": "Operações"
+ "text": "Usar o WAF (Web Application Firewall) implantando o Application Gateway na frente do APIM",
+ "waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
"severity": "Alto",
- "text": "Certifique-se de que os serviços e recursos necessários estejam disponíveis nas regiões de implantação escolhidas, por exemplo. ANF, Zona etc.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
- "waf": "Operações"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
- "service": "SAP",
- "severity": "Média",
- "text": "Aproveite a marca de recurso do Azure para categorização de custos e agrupamento de recursos (: BillTo, Departamento (ou Unidade de Negócios), Ambiente (Produção, Estágio, Desenvolvimento), Camada (Camada da Web, Camada de Aplicativo), Proprietário do Aplicativo, ProjectName)",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "Operações"
+ "text": "Selecione o plano de hospedagem de função certo com base em seus requisitos de negócios e SLO",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
"severity": "Alto",
- "text": "Ajude a proteger seu banco de dados HANA usando o serviço de Backup do Azure.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "text": "Aproveitar zonas de disponibilidade quando aplicável regionalmente (não disponível para a camada de consumo)",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
"severity": "Média",
- "text": "Se você implantar os Arquivos NetApp do Azure para seu banco de dados HANA, Oracle ou DB2, use a ferramenta Azure Application Consistent Snapshot (AzAcSnap) para tirar instantâneos consistentes com o aplicativo. O AzAcSnap também suporta bancos de dados Oracle. Considere usar o AzAcSnap em uma VM central em vez de em VMs individuais.",
+ "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
"severity": "Alto",
- "text": "Garanta as correspondências de fuso horário entre o sistema operacional e o sistema SAP.",
- "waf": "Operações"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
- "service": "SAP",
- "severity": "Média",
- "text": "Não agrupe serviços de aplicativos diferentes no mesmo cluster. Por exemplo, não combine clusters DRBD e de serviços centrais no mesmo cluster. No entanto, você pode usar o mesmo cluster do Pacemaker para gerenciar aproximadamente cinco serviços centrais diferentes (cluster multi-SID).",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "text": "Se estiver implantando em um ambiente isolado, use ou migre para o ASE (Ambiente do Serviço de Aplicativo) v3",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
- "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Considere executar sistemas de desenvolvimento/teste em um modelo de soneca para economizar e otimizar os custos de execução do Azure.",
- "waf": "Custar"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "Azure Functions",
+ "severity": "Alto",
+ "text": "Verifique se 'Sempre Ativado' está habilitado para todos os Aplicativos de Função em execução no Plano do Serviço de Aplicativo",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
- "link": "https://learn.microsoft.com/azure/lighthouse/overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
"severity": "Média",
- "text": "Se você faz parceria com clientes gerenciando suas propriedades SAP, considere o Farol do Azure. O Azure Lighthouse permite que os provedores de serviços gerenciados usem os serviços de identidade nativos do Azure para se autenticar no ambiente dos clientes. Ele coloca o controle nas mãos dos clientes, porque eles podem revogar o acesso a qualquer momento e auditar as ações dos prestadores de serviços.",
- "waf": "Operações"
+ "text": "Emparelhe um aplicativo de função com sua própria conta de armazenamento. Tente não reutilizar contas de armazenamento para aplicativos de função, a menos que eles estejam firmemente acoplados",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
- "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
"severity": "Média",
- "text": "Use o Azure Update Manager para verificar o status das atualizações disponíveis para uma única VM ou várias VMs e considere agendar patches regulares.",
- "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "text": "Aproveite o Azure DevOps ou o GitHub para simplificar o CI/CD e proteger seu código do Aplicativo de Função",
"waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Otimize e gerencie as operações do SAP Basis usando o SAP Landscape Management (LaMa). Use o conector SAP LaMa para Azure para realocar, copiar, clonar e atualizar sistemas SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
- "waf": "Operações"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Aproveitar zonas de disponibilidade, se aplicável regionalmente (isso é habilitado automaticamente)",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
- "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"severity": "Média",
- "text": "Use as soluções do Azure Monitor for SAP para monitorar suas cargas de trabalho SAP (SAP HANA, clusters SUSE de alta disponibilidade e sistemas SQL) no Azure. Considere complementar o Azure Monitor para soluções SAP com o SAP Solution Manager.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Operações"
+ "text": "Esteja ciente dos failovers iniciados pela Microsoft. Eles são exercidos pela Microsoft em raras situações para fazer failover de todos os hubs IoT de uma região afetada para a região geo-emparelhada correspondente.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
"severity": "Alto",
- "text": "Execute uma verificação de extensão de VM para SAP. A Extensão de VM para SAP usa a identidade gerenciada atribuída de uma máquina virtual (VM) para acessar dados de monitoramento e configuração de VM. A verificação garante que todas as métricas de desempenho em seu aplicativo SAP venham da Extensão do Azure para SAP subjacente.",
- "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
- "waf": "Operações"
+ "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "SAP",
- "severity": "Média",
- "text": "Use a Política do Azure para controle de acesso e relatórios de conformidade. A Política do Azure fornece a capacidade de impor configurações em toda a organização para garantir a adesão consistente à política e a detecção rápida de violações. ",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "Operações"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Saiba como acionar um failover manual.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Use o Monitor de Conexão no Inspetor de Rede do Azure para monitorar métricas de latência para bancos de dados SAP e servidores de aplicativos. Ou colete e exiba medições de latência de rede usando o Azure Monitor.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
- "waf": "Operações"
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
+ "severity": "Alto",
+ "text": "Saiba como fazer failback após um failover.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "73686af4-6791-4f89-95ad-a43324e13811",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
- "service": "SAP",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
+ "service": "Bot service",
"severity": "Média",
- "text": "Execute uma verificação de qualidade para o SAP HANA na infraestrutura provisionada do Azure para verificar se as VMs provisionadas estão em conformidade com as práticas recomendadas do SAP HANA no Azure.",
- "waf": "Operações"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
- "severity": "Alto",
- "text": "Para cada assinatura do Azure, execute um teste de latência nas zonas de disponibilidade do Azure antes da implantação zonal para escolher zonas de baixa latência para implantação do SAP no Azure.",
- "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "waf": "Desempenho"
+ "text": "Siga as recomendações de suporte de confiabilidade no Serviço de Bot do Azure",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
- "service": "SAP",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
+ "service": "Bot service",
"severity": "Média",
- "text": "Execute o Relatório de Resiliência para garantir que a configuração de toda a infraestrutura provisionada do Azure (Computação, Banco de Dados, Rede, Armazenamento, Recuperação de Site) esteja em conformidade com a configuração definida pelo Cloud Adaption Framework para Azure.",
- "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "text": "Implantando bots com residência de dados local e conformidade regional",
"waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
- "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
+ "service": "Bot service",
"severity": "Média",
- "text": "Implemente a proteção contra ameaças usando a solução Microsoft Sentinel para SAP. Use esta solução para monitorar seus sistemas SAP e detectar ameaças sofisticadas em toda a lógica de negócios e camadas de aplicativos.",
- "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
- "waf": "Segurança"
+ "text": "O Serviço de Bot do Azure é executado no modo ativo-ativo para serviços globais e regionais. Quando ocorre uma paralisação, você não precisa detectar erros ou gerenciar o serviço. O Serviço de Bot do Azure executa automaticamente o failover automático e a recuperação automática em uma arquitetura geográfica de várias regiões. Para o serviço regional de bot da UE, o Serviço de Bot do Azure fornece duas regiões completas dentro da Europa com replicação ativa/ativa para garantir redundância. Para o serviço de bot global, todas as regiões/geografias disponíveis podem ser servidas como a presença global.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "service": "SAP",
- "severity": "Média",
- "text": "A marcação do Azure pode ser aproveitada para agrupar e controlar recursos logicamente, automatizar suas implantações e, o mais importante, fornecer visibilidade sobre os custos incorridos.",
- "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "waf": "Operações"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
+ "text": "Regras de coleta de dados no Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Use o monitoramento de latência entre VMs para aplicativos sensíveis à latência.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
+ "text": "Verificar instâncias de backup com a fonte de dados subjacente não encontrada",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
- "severity": "Média",
- "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastres para servidores de aplicativos SAP.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
+ "text": "Excluir ou arquivar serviços não associados (discos, nics, endereços IP etc.)",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
- "severity": "Média",
- "text": "Exclua todos os sistemas de arquivos de banco de dados e programas executáveis das verificações antivírus. Incluí-los pode levar a problemas de desempenho. Verifique com os fornecedores do banco de dados para obter detalhes prescritivos na lista de exclusão. Por exemplo, a Oracle recomenda excluir /oracle//sapdata das verificações antivírus.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
+ "text": "Considere um bom equilíbrio entre recuperação de local, armazenamento e backup para aplicativos não essenciais",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "c027f893-f404-41a9-b33d-39d625a14964",
- "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
- "service": "SAP",
- "severity": "Baixo",
- "text": "Considere a coleta de estatísticas completas de banco de dados para bancos de dados não-HANA após a migração. Por exemplo, implemente a nota SAP 1020260 - Entrega de estatísticas Oracle.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
+ "text": "Verifique os gastos e as oportunidades de economia entre os 40 diferentes espaços de trabalho de análise de log - use retenção e coleta de dados diferentes para espaços de trabalho não prod - crie limite diário para reconhecimento e dimensionamento de camadas - Se você definir um limite diário, além de criar um alerta quando o limite for atingido, certifique-se de também criar uma regra de alerta para ser notificado quando alguma porcentagem for atingida (90%, por exemplo). - considerar a transformação do espaço de trabalho, se possível - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
- "service": "SAP",
- "severity": "Média",
- "text": "Considere o uso do Oracle Automatic Storage Management (ASM) para todas as implantações Oracle que usam SAP no Azure.",
- "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
+ "text": "Impor uma política de log de limpeza e automação (se necessário, os logs podem ser movidos para armazenamento frio)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
- "service": "SAP",
- "severity": "Média",
- "text": "Para SAP no Azure executando Oracle, uma coleção de scripts SQL pode ajudá-lo a diagnosticar problemas de desempenho. Os relatórios do Automatic Workload Repository (AWR) contêm informações valiosas para diagnosticar problemas no sistema Oracle. Recomendamos que você execute um relatório AWR durante várias sessões e escolha horários de pico para ele, para garantir uma ampla cobertura para a análise.",
- "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
+ "text": "Verifique se os discos são realmente necessários, se não: excluir. Se forem necessários, encontre níveis de armazenamento mais baixos ou use backup -",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
- "severity": "Alto",
- "text": "Use o monitoramento do Azure Site Recovery para manter a integridade do serviço de recuperação de desastres para servidores de aplicativos SAP.",
- "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "waf": "Operações"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
+ "text": "Considere mover o armazenamento não utilizado para o nível inferior, com regra personalizada - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure ",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Para a entrega segura de aplicativos HTTP/S, use o Application Gateway v2 e verifique se a proteção e as políticas do WAF estão habilitadas.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
+ "text": "Verifique se o Advisor está configurado para o dimensionamento correto da VM ",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
- "severity": "Média",
- "text": "Se o DNS ou o nome virtual da máquina virtual não for alterado durante a migração para o Azure, o DNS em segundo plano e os nomes virtuais conectam muitas interfaces do sistema no cenário SAP, e os clientes só às vezes estão cientes das interfaces que os desenvolvedores definem ao longo do tempo. Surgem desafios de conexão entre vários sistemas quando os nomes virtuais ou DNS mudam após as migrações, e é recomendável manter os aliases DNS para evitar esses tipos de dificuldades.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operações"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "description": "verifique pesquisando as Licenças de Categoria de Medidor na Análise de Custos",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
+ "text": "executar o script em todas as VMs do Windows https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server- considere implementar uma diretiva se as VMs do Windows forem criadas com frequência",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
- "severity": "Média",
- "text": "Use zonas DNS diferentes para distinguir cada ambiente (sandbox, desenvolvimento, pré-produção e produção) um do outro. A exceção é para implantações SAP com sua própria VNet; aqui, zonas DNS privadas podem não ser necessárias.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "Operações"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
+ "text": " isso também pode ser colocado no AHUB se você já tiver licenças https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "a3592829-e6e2-4061-9368-6af46791f893",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Emparelhamento de rede virtual local e global fornecem conectividade e são as abordagens preferidas para garantir a conectividade entre zonas de aterrissagem para implantações SAP em várias regiões do Azure",
- "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
- "waf": "Fiabilidade"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
+ "text": "Consolidar famílias de VM reservadas com opção de flexibilidade (não mais do que 4-5 famílias)",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
- "service": "SAP",
- "severity": "Alto",
- "text": "Não há suporte para implantar qualquer NVA entre o aplicativo SAP e o servidor de banco de dados SAP",
- "training": "https://me.sap.com/notes/2731110",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
+ "text": "Utilize instâncias reservadas do Azure: esse recurso permite reservar VMs por um período de 1 ou 3 anos, proporcionando uma economia significativa em comparação com os preços do PAYG.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
- "service": "SAP",
- "severity": "Média",
- "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais onde você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
- "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "waf": "Operações"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
+ "text": "Somente discos maiores podem ser reservados => 1 TiB -",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
- "service": "SAP",
- "severity": "Média",
- "text": "Considere a implantação de dispositivos virtuais de rede (NVAs) entre regiões somente se NVAs de parceiros forem usados. NVAs entre regiões ou VNets não são necessários se NVAs nativos estiverem presentes. Ao implantar tecnologias de rede de parceiros e NVAs, siga as orientações do fornecedor para verificar configurações conflitantes com a rede do Azure.",
- "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
- "waf": "Operações"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
+ "text": "Após a otimização do dimensionamento correto",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
- "service": "SAP",
- "severity": "Média",
- "text": "A WAN virtual gerencia a conectividade entre VNets spoke para topologias baseadas em WAN virtual (não há necessidade de configurar o roteamento definido pelo usuário [UDR] ou NVAs), e a taxa de transferência máxima de rede para o tráfego de VNet-to-VNet no mesmo hub virtual é de 50 gigabits por segundo. Se necessário, as zonas de aterrissagem SAP podem usar o emparelhamento de VNet para se conectar a outras zonas de aterrissagem e superar essa limitação de largura de banda.",
- "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
- "waf": "Operações"
+ "arm-service": "Microsoft.Sql/servers",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
+ "text": "Verifique se aplicável e aplique a política/alteração https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "82734c88-6ba2-4802-8459-11475e39e530",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
- "severity": "Alto",
- "text": "A atribuição de IP público à VM que executa o SAP Workload não é recomendada.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
+ "text": "O desconto da peça de licença VM + (ahub + 3YRI) é de cerca de 70% de desconto",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "service": "SAP",
- "severity": "Alto",
- "text": "Considere reservar o endereço IP no lado do DR ao configurar o ASR",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "Operações"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
+ "text": "Considere o uso de um VMSS para corresponder à demanda em vez de dimensionamento simples",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
- "severity": "Alto",
- "text": "Evite usar intervalos de endereços IP sobrepostos para sites de produção e DR.",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "AKS",
+ "text": "Use o autoscaler AKS para corresponder ao uso de clusters (verifique se os requisitos dos pods correspondem ao dimensionador)",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
- "service": "SAP",
- "severity": "Média",
- "text": "Embora o Azure ajude você a criar várias sub-redes delegadas em uma rede virtual, apenas uma sub-rede delegada pode existir em uma rede virtual para arquivos do Azure NetApp. As tentativas de criar um novo volume falharão se você usar mais de uma sub-rede delegada para Arquivos do Azure NetApp.",
- "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
- "waf": "Operações"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
+ "text": "Mover pontos de recuperação para o vault-archive, quando aplicável (Validar)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
- "service": "SAP",
- "severity": "Média",
- "text": "Usar o Firewall do Azure para controlar o tráfego de saída do Azure para a Internet, conexões de entrada não HTTP/S e filtragem de tráfego Leste/Oeste (se a organização exigir)",
- "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Databricks/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
+ "text": "Considere o uso de VMs spot com fallback sempre que possível. Considere o autotermination de clusters.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
- "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
- "service": "SAP",
- "severity": "Média",
- "text": "O Application Gateway e o Web Application Firewall têm limitações quando o Application Gateway serve como um proxy reverso para aplicativos Web SAP, conforme mostrado na comparação entre o Application Gateway, o SAP Web Dispatcher e outros serviços de terceiros.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
+ "text": "Funções - Reutilizar conexões",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Use as políticas do Azure Front Door e do WAF para fornecer proteção global entre as regiões do Azure para conexões HTTP/S de entrada para uma zona de aterrissagem.",
- "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
+ "text": "Funções - Armazenar dados em cache localmente",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Aproveite as políticas do Web Application Firewall no Azure Front Door quando estiver usando o Azure Front Door e o Application Gateway para proteger aplicativos HTTP/S. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Azure Front Door.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
+ "text": "Funções - Partidas a frio - Use a funcionalidade 'Executar do pacote'. Dessa forma, o código é baixado como um único arquivo zip. Isso pode, por exemplo, resultar em melhorias significativas com as funções Javascript, que possuem muitos módulos de nó. Use ferramentas específicas de linguagem para reduzir o tamanho do pacote, por exemplo, aplicativos Javascript que agitam árvores.",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "Custar"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
+ "text": "Funções - Mantenha suas funções aquecidas",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ada4332-4e13-4811-9231-81aa41742694",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Use um firewall de aplicativo Web para verificar seu tráfego quando ele estiver exposto à Internet. Outra opção é usá-lo com seu balanceador de carga ou com recursos que tenham recursos internos de firewall, como o Application Gateway ou soluções de terceiros.",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
+ "text": "Ao usar o dimensionamento automático com funções diferentes, pode haver um que conduza todo o dimensionamento automático para todos os recursos - considere movê-lo para um plano de consumo separado (e considere um plano mais alto para a CPU)",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Use a WAN Virtual para implantações do Azure em redes novas, grandes ou globais onde você precisa de conectividade de trânsito global entre regiões do Azure e locais locais. Com essa abordagem, você não precisará configurar manualmente o roteamento transitivo para a rede do Azure e poderá seguir um padrão para implantações do SAP no Azure.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
+ "text": "Os aplicativos de função em um determinado plano são todos dimensionados juntos, portanto, quaisquer problemas com o dimensionamento podem afetar todos os aplicativos no plano.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "SAP",
- "severity": "Média",
- "text": "Para evitar o vazamento de dados, use o Link Privado do Azure para acessar com segurança recursos de plataforma como serviço, como Armazenamento de Blobs do Azure, Arquivos do Azure, Azure Data Lake Storage Gen2, Azure Data Factory e muito mais. O Ponto de Extremidade Privado do Azure também pode ajudar a proteger o tráfego entre VNets e serviços como o Armazenamento do Azure, o Backup do Azure e muito mais. O tráfego entre sua rede virtual e o serviço habilitado para ponto de extremidade privado viaja pela rede global da Microsoft, o que impede sua exposição à Internet pública.",
- "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
+ "text": "Sou cobrado por 'tempo de espera'? Essa pergunta geralmente é feita no contexto de uma função C# que faz uma operação assíncrona e aguarda o resultado, por exemplo, aguardar Task.Delay(1000) ou aguardar cliente. GetAsync('http://google.com'). A resposta é sim - o segundo cálculo de GB é baseado na hora de início e término da função e no uso de memória durante esse período. O que realmente acontece ao longo desse tempo em termos de atividade da CPU não é levado em consideração no cálculo. Uma exceção a essa regra é se você estiver usando funções duráveis. Você não é cobrado pelo tempo gasto em espera em funções de orquestrador.aplique técnicas de modelagem de demanda sempre que possível (ambientes de desenvolvimento?) https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
- "service": "SAP",
- "severity": "Alto",
- "text": "Verifique se a rede acelerada do Azure está habilitada nas VMs usadas nas camadas de aplicativo SAP e DBMS.",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "Desempenho"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
+ "text": "Frontdoor - Desativar a página inicial padrãoNas configurações do aplicativo do seu aplicativo, defina AzureWebJobsDisableHomepage como true. Isso retornará um 204 (Sem Conteúdo) para o PoP para que apenas os dados de cabeçalho sejam retornados.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
- "service": "SAP",
- "severity": "Média",
- "text": "Verifique se as implantações internas do Azure Load Balancer estão configuradas para usar DSR (Direct Server Return). Essa configuração (Habilitando IP flutuante) reduzirá a latência quando as configurações internas do balanceador de carga forem usadas para configurações de alta disponibilidade na camada DBMS.",
- "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
+ "text": "Frontdoor - Rota para algo que não retorna nada. Configure uma Função, Proxy de Função ou adicione uma rota em seu WebApp que retorne 200 (OK) e envie conteúdo nulo ou mínimo. A vantagem disso é que você poderá fazer logout quando for chamado.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "6791f893-5ada-4433-84e1-3811523181aa",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "SAP",
- "severity": "Média",
- "text": "Você pode usar as regras ASG (grupo de segurança de aplicativo) e NSG para definir listas de controle de acesso de segurança de rede entre o aplicativo SAP e as camadas DBMS. Os ASGs agrupam máquinas virtuais para ajudar a gerenciar sua segurança.",
- "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
+ "text": "Considere níveis de arquivamento para dados menos usados",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "Alto",
- "text": "Não há suporte para a colocação da camada de aplicativo SAP e do SGBD SAP em diferentes VNets do Azure que não são emparelhadas.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
+ "text": "Verifique os tamanhos de disco em que o tamanho não corresponde à camada (ou seja, um disco de 513 GiB pagará um P30 (1TiB) e considere o redimensionamento",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
- "severity": "Média",
- "text": "Para obter a latência de rede ideal com aplicativos SAP, considere o uso de grupos de posicionamento de proximidade do Azure.",
- "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
+ "text": "Considere usar SSD padrão em vez de Premium ou Ultra sempre que possível",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "Alto",
- "text": "NÃO há suporte para executar uma camada do SAP Application Server e uma camada de DBMS dividida entre o local e o Azure. Ambas as camadas precisam residir completamente no local ou no Azure.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
+ "text": "Para contas de armazenamento, verifique se a camada escolhida não está somando encargos de transação (pode ser mais barato passar para a próxima camada)",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "Alto",
- "text": "Não é recomendado hospedar o sistema de gerenciamento de banco de dados (DBMS) e as camadas de aplicativos dos sistemas SAP em diferentes VNets e conectá-los ao emparelhamento de VNet devido aos custos substanciais que o tráfego de rede excessivo entre as camadas pode produzir. Recomende o uso de sub-redes na rede virtual do Azure para separar a camada de aplicativo SAP e a camada DBMS.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
+ "text": "Para ASR, considere o uso de discos SSD padrão se o RPO/RTO e a taxa de transferência de replicação permitirem",
"waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "402a9846-d515-4061-aff8-cd30088693fa",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
- "service": "SAP",
- "severity": "Alto",
- "text": "Se estiver usando o Load Balancer com sistemas operacionais convidados Linux, verifique se o parâmetro de rede Linux net.ipv4.tcp_timestamps está definido como 0.",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
+ "text": "Contas de armazenamento: verifique o hot tier e/ou o GRS necessário",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
- "service": "SAP",
- "severity": "Média",
- "text": "Para implantações SAP RISE/ECS, o emparelhamento virtual é a maneira preferida de estabelecer conectividade com o ambiente existente do Azure do cliente. Tanto a vnet do SAP quanto a(s) vnet(s) do cliente são protegidas com grupos de segurança de rede (NSG), permitindo a comunicação nas portas SAP e de banco de dados por meio do emparelhamento vnet",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
+ "text": "Discos - valide o uso de discos SSD Premium em todos os lugares: por exemplo, não-prod pode trocar para SSD padrão ou SSD Premium sob demanda ",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
- "severity": "Alto",
- "text": "Revise os backups de banco de dados do SAP HANA para VMs do Azure.",
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
+ "text": "Crie orçamentos para gerenciar custos e crie alertas que notifiquem automaticamente as partes interessadas sobre anomalias de gastos e riscos de gastos excessivos.",
"waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
- "severity": "Média",
- "text": "Revise o monitoramento interno do Site Recovery, quando usado para SAP.",
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
+ "text": "Exporte dados de custo para uma conta de armazenamento para análise de dados adicionais.",
"waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
- "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
- "service": "SAP",
- "severity": "Alto",
- "text": "Revise as diretrizes de monitoramento do cenário do sistema SAP HANA.",
- "waf": "Operações"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
+ "text": "Controle os custos de um pool SQL dedicado pausando o recurso quando ele não estiver em uso.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
- "service": "SAP",
- "severity": "Média",
- "text": "Revise o Banco de Dados Oracle nas estratégias de backup de VM do Linux do Azure.",
- "waf": "Operações"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
+ "text": "Habilite o recurso de pausa automática do Apache Spark sem servidor e defina seu valor de tempo limite de acordo.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
- "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
- "service": "SAP",
- "severity": "Média",
- "text": "Analise o uso do Armazenamento de Blobs do Azure com o SQL Server 2016.",
- "waf": "Operações"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
+ "text": "Crie várias definições de pool do Apache Spark de vários tamanhos.",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
- "service": "SAP",
- "severity": "Média",
- "text": "Analise o uso do Backup Automatizado v2 para VMs do Azure.",
- "waf": "Operações"
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
+ "text": "Adquira unidades de confirmação (SCU) do Azure Synapse por um ano com um plano de pré-compra para economizar nos custos do Azure Synapse Analytics.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
- "service": "SAP",
- "severity": "Alto",
- "text": "Ativando o acelerador de gravação para a série M ao usar discos premium (V1)",
- "waf": "Operações"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
+ "text": "Usar VMs spot para trabalhos interruptíveis: são VMs que podem ser licitadas e compradas a um preço com desconto, fornecendo uma solução econômica para cargas de trabalho não críticas.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "service": "SAP",
- "severity": "Média",
- "text": "Testar a latência da zona de disponibilidade.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
+ "text": "Dimensionamento correto de todas as VMs",
+ "waf": "Custar"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
+ "text": "Trocar VM dimensionada com tamanhos normalizados e mais recentes",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
- "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
- "service": "SAP",
- "severity": "Média",
- "text": "Ative o SAP EarlyWatch Alert para todos os componentes SAP.",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "VMs de dimensionamento correto - comece com o monitoramento do uso abaixo de 5% e, em seguida, trabalhe até 40%",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
- "service": "SAP",
- "severity": "Média",
- "text": "Revise a latência do servidor de aplicativos SAP para o servidor de banco de dados usando o relatório SAP ABAPMeter /SSA/CAT.",
- "training": "https://me.sap.com/notes/0002879613",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "A conteinerização de um aplicativo pode melhorar a densidade da VM e economizar dinheiro no dimensionamento",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "Custar"
},
{
- "checklist": "SAP Checklist",
- "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
- "service": "SAP",
- "severity": "Média",
- "text": "Revise o monitoramento de desempenho do SQL Server usando o CCMS.",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "text": "Familiarize-se com as práticas recomendadas do Key Vault, como recomendações de isolamento, controle de acesso, proteção de dados, backup e registro em log.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
- "link": "https://me.sap.com/notes/500235",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Teste a latência de rede entre VMs de camada de aplicativo SAP e VMs DBMS (NIPING).",
- "training": "https://me.sap.com/notes/1100926/E",
- "waf": "Desempenho"
+ "text": "O Key Vault é um serviço gerenciado e a Microsoft lidará com o failover dentro e entre regiões. Familiarize-se com a disponibilidade e a redundância do Key Vault.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
- "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Revise os alertas do SAP HANA Studio.",
- "waf": "Desempenho"
+ "text": "O conteúdo do cofre de chaves é replicado dentro da região e para uma região secundária a pelo menos 150 milhas de distância, mas dentro da mesma geografia para manter a alta durabilidade de suas chaves e segredos. Familiarize-se com a replicação de dados do Key Vault.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
- "link": "https://me.sap.com/notes/1969700",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Execute verificações de integridade do SAP HANA usando HANA_Configuration_Minichecks.",
- "waf": "Desempenho"
+ "text": "Durante o failover, as configurações e configurações de política de acesso ou firewall não podem ser alteradas. O cofre de chaves estará no modo somente leitura durante o failover. Familiarize-se com as diretrizes de failover do Key Vault.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
"severity": "Média",
- "text": "Se você executar VMs do Windows e Linux no Azure, no local ou em outros ambientes de nuvem, poderá usar o Centro de gerenciamento de atualizações na Automação do Azure para gerenciar atualizações do sistema operacional, incluindo patches de segurança.",
- "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "waf": "Segurança"
+ "text": "Quando você faz backup de um objeto do cofre de chaves, como um segredo, uma chave ou um certificado, a operação de backup baixa o objeto como um blob criptografado. Esse blob não pode ser descriptografado fora do Azure. Para obter dados utilizáveis desse blob, você deve restaurar o blob em um cofre de chaves dentro da mesma assinatura do Azure e da mesma geografia do Azure. Familiarize-se com as diretrizes de backup e restauração do Key Vault.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "08951710-79a2-492a-adbc-06d7a401545b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
- "severity": "Média",
- "text": "Analise rotineiramente as notas de OSS de segurança do SAP porque o SAP lança patches de segurança altamente críticos, ou hot fixes, que exigem ação imediata para proteger seus sistemas SAP.",
- "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
- "waf": "Segurança"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "Alto",
+ "text": "Se você quiser proteção contra exclusão acidental ou mal-intencionada de seus segredos, configure recursos de proteção de exclusão reversível e limpeza em seu cofre de chaves.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
"severity": "Baixo",
- "text": "Para SAP no SQL Server, você pode desabilitar a conta de administrador do sistema do SQL Server porque os sistemas SAP no SQL Server não usam a conta. Certifique-se de que outro usuário com direitos de administrador do sistema possa acessar o servidor antes de desabilitar a conta de administrador do sistema original.",
- "waf": "Segurança"
+ "text": "Os recursos excluídos temporariamente do Key Vault são retidos por um período definido de 90 dias corridos. Familiarize-se com as diretrizes de exclusão reversível do Key Vault.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "Alto",
- "text": "Desative xp_cmdshell. O recurso do SQL Server xp_cmdshell habilita um shell de comando do sistema operacional interno do SQL Server. É um risco potencial em auditorias de segurança.",
- "training": "https://me.sap.com/notes/3019299/E",
- "waf": "Segurança"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Baixo",
+ "text": "Entenda as limitações de backup do Key Vault. O Key Vault não dá suporte à capacidade de fazer backup de mais de 500 versões anteriores de um objeto de chave, segredo ou certificado. A tentativa de fazer backup de uma chave, segredo ou objeto de certificado pode resultar em um erro. Não é possível excluir versões anteriores de uma chave, segredo ou certificado.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "Alto",
- "text": "A criptografia de servidores de banco de dados SAP HANA no Azure usa a tecnologia de criptografia nativa do SAP HANA. Além disso, se você estiver usando o SQL Server no Azure, use a TDE (Criptografia de Dados Transparente) para proteger seus dados e arquivos de log e garantir que seus backups também sejam criptografados.",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "waf": "Segurança"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "Baixo",
+ "text": "Atualmente, o Key Vault não fornece uma maneira de fazer backup de um cofre de chaves inteiro em uma única operação e chaves, segredos e certificados devem ser copiados individualmente. Familiarize-se com as diretrizes de backup e restauração do Key Vault.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
"severity": "Média",
- "text": "A criptografia de Armazenamento do Azure está habilitada para todas as contas clássicas e do Gerenciador de Recursos do Azure e não pode ser desabilitada. Como seus dados são criptografados por padrão, você não precisa modificar seu código ou aplicativos para usar a criptografia do Armazenamento do Azure.",
- "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
- "waf": "Segurança"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "SAP",
- "severity": "Alto",
- "text": "Usar o Cofre de Chaves do Azure para armazenar seus segredos e credenciais",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Segurança"
+ "text": "A proteção contra limpeza é recomendada ao usar chaves para criptografia para evitar a perda de dados. A proteção contra limpeza é um comportamento opcional do Key Vault e não está habilitada por padrão. A proteção contra limpeza só pode ser habilitada depois que a exclusão reversível estiver habilitada. Ele pode ser ativado via CLI, PowerShell ou Portal.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "SAP",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
"severity": "Média",
- "text": "É recomendável BLOQUEAR os Recursos do Azure após a implantação bem-sucedida para proteger contra alterações não autorizadas. Você também pode impor restrições e regras LOCK em sua base por assinatura usando políticas personalizadas do Azure (função Personalizada).",
- "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
+ "text": "O RBAC é recomendado para controlar o acesso ao cofre de chaves. Familiarize-se com as diretrizes de controle de acesso do Key Vault.",
"waf": "Segurança"
},
{
- "checklist": "SAP Checklist",
- "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
"severity": "Média",
- "text": "Provisione o Cofre de Chaves do Azure com as políticas de exclusão e limpeza suaves habilitadas para permitir a proteção de retenção para objetos excluídos.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Segurança"
+ "text": "Aproveite o Manual de Resiliência de FTA para o Azure Data Factory",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
- "service": "SAP",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"severity": "Alto",
- "text": "Com base nos requisitos existentes, controles normativos e de conformidade (internos/externos) - Determine quais Políticas do Azure e a função RBAC do Azure são necessárias",
- "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
- "waf": "Segurança"
+ "text": "Usar pipelines redundantes de zona em regiões que oferecem suporte a zonas de disponibilidade",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "Alto",
- "text": "Ao habilitar o Microsoft Defender for Endpoint no ambiente SAP, recomende excluir arquivos de dados e de log em servidores DBMS em vez de direcionar todos os servidores. Siga as recomendações do fornecedor do DBMS ao excluir arquivos de destino.",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
- "waf": "Segurança"
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
+ "severity": "Média",
+ "text": "Usar DevOps para fazer backup dos modelos ARM com a integração Github/Azure DevOps ",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
- "service": "SAP",
- "severity": "Alto",
- "text": "Delegue uma função personalizada de administrador SAP com acesso just-in-time do Microsoft Defender for Cloud.",
- "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "Média",
+ "text": "Certifique-se de replicar as VMs do Self-Hosted Integration Runtime em outra região ",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "Média",
+ "text": "Certifique-se de replicar ou duplicar sua rede na região irmã. Você tem que fazer uma cópia do seu Vnet em outra região",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "description": "Se seus pipelines do ADF usarem o Cofre de Chaves, você não precisará fazer nada para replicar o Cofre de Chaves. O Cofre de Chaves é um serviço gerenciado e a Microsoft cuida dele para você",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
"severity": "Baixo",
- "text": "criptografar dados em trânsito integrando o produto de segurança de terceiros com comunicações de rede seguras (SNC) para DIAG (SAP GUI), RFC e SPNEGO para HTTPS",
- "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
- "waf": "Segurança"
+ "text": "Se estiver usando a integração do Keyvault, use o SLA do Keyvault para entender sua disponibilidade",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
- "service": "SAP",
- "severity": "Média",
- "text": "O padrão é chaves gerenciadas pela Microsoft para a funcionalidade de criptografia principal e use chaves gerenciadas pelo cliente quando necessário.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
+ "service": "IoT Hub DPS",
+ "severity": "Alto",
+ "text": "Selecione o plano de hospedagem de aplicativo lógico certo com base em seus requisitos de negócios e SLO",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "IoT Hub DPS",
"severity": "Alto",
- "text": "Use um Cofre de Chaves do Azure por aplicativo, por ambiente, por região.",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "Segurança"
+ "text": "Proteja aplicativos lógicos contra falhas de região com redundância de zona e zonas de disponibilidade",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
- "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "8aed4fbf-0830-4883-899d-222a154af478",
+ "link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "IoT Hub DPS",
"severity": "Alto",
- "text": "Para controlar e gerenciar chaves de criptografia de disco e segredos para sistemas operacionais Windows e não Windows HANA, use o Cofre de Chaves do Azure. O SAP HANA não tem suporte com o Cofre de Chaves do Azure, portanto, você deve usar métodos alternativos, como chaves SAP ABAP ou SSH.",
- "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
- "waf": "Segurança"
+ "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
- "service": "SAP",
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "IoT Hub DPS",
"severity": "Alto",
- "text": "Personalizar funções RBAC (controle de acesso baseado em função) para SAP em assinaturas spoke do Azure para evitar alterações acidentais relacionadas à rede",
- "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
- "waf": "Segurança"
+ "text": "Se estiver implantando em um ambiente isolado, use ou migre para o ASE (Ambiente do Serviço de Aplicativo) v3",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
- "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
- "service": "SAP",
- "severity": "Alto",
- "text": "Isole DMZs e NVAs do restante do estado SAP, configure o Azure Private Link e gerencie e controle com segurança os recursos do SAP no Azure",
- "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
- "waf": "Segurança"
+ "arm-service": "Microsoft.Devices/provisioningServices",
+ "checklist": "Device Provisioning Service Review",
+ "guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "IoT Hub DPS",
+ "severity": "Média",
+ "text": "Aproveite o Azure DevOps ou o GitHub para simplificar o CI/CD e proteger seu código de Aplicativo Lógico",
+ "waf": "Operações"
},
{
- "checklist": "SAP Checklist",
- "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
- "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Considere usar o software antimalware da Microsoft no Azure para proteger suas máquinas virtuais contra arquivos mal-intencionados, adware e outras ameaças.",
- "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
- "waf": "Segurança"
+ "text": "Se necessário para cargas de trabalho do AKS Windows, os contêineres HostProcess podem ser usados",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Para obter uma proteção ainda mais poderosa, considere usar o Microsoft Defender for Endpoint.",
- "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
- "waf": "Segurança"
+ "text": "Usar o KEDA se estiver executando cargas de trabalho orientadas a eventos",
+ "waf": "Desempenho"
},
{
- "checklist": "SAP Checklist",
- "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Use o Dapr para facilitar o desenvolvimento de microsserviços",
+ "waf": "Operações"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
"severity": "Alto",
- "text": "Isole os servidores de aplicativo e banco de dados SAP da Internet ou da rede local passando todo o tráfego pela rede virtual de hub, que está conectada à rede spoke por emparelhamento de rede virtual. As redes virtuais emparelhadas garantem que a solução SAP no Azure seja isolada da Internet pública.",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
- "waf": "Segurança"
+ "text": "Use a oferta AKS apoiada por SLA",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Para aplicativos voltados para a Internet, como o SAP Fiori, certifique-se de distribuir a carga por requisitos de aplicativo, mantendo os níveis de segurança. Para segurança de Camada 7, você pode usar um WAF (Web Application Firewall) de terceiros disponível no Azure Marketplace.",
- "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
- "waf": "Segurança"
+ "text": "Usar orçamentos de interrupção em seu pod e definições de implantação",
+ "waf": "Fiabilidade"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
- "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
- "service": "SAP",
- "severity": "Média",
- "text": "Para habilitar a comunicação segura no Azure Monitor para soluções SAP, você pode optar por usar um certificado raiz ou um certificado de servidor. É altamente recomendável que você use certificados raiz.",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
+ "severity": "Alto",
+ "text": "Se estiver usando um registro privado, configure a replicação de região para armazenar imagens em várias regiões",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
- "severity": "Alto",
- "text": "Verifique se os controladores de domínio ADDS estão implantados na assinatura de identidade no Azure nativo",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Use um aplicativo externo, como kubecost, para alocar custos para diferentes usuários",
+ "waf": "Custar"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Usar o modo de redução para excluir/desalocar nós",
+ "waf": "Custar"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
"severity": "Média",
- "text": "Verifique se os sites e serviços do ADDS estão configurados para manter as solicitações de autenticação de recursos baseados no Azure (incluindo a Solução VMware do Azure) locais para o Azure",
- "waf": "Segurança"
+ "text": "Quando necessário, use a GPU de partioning de várias instâncias em clusters AKS",
+ "waf": "Custar"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
- "severity": "Alto",
- "text": "Verifique se o vCenter está conectado ao ADDS para habilitar a autenticação com base em 'contas de usuário nomeadas'",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se estiver executando um cluster de desenvolvimento/teste, use NodePool Start/Stop",
+ "waf": "Custar"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
"severity": "Média",
- "text": "Verifique se a conexão do vCenter com o ADDS está usando um protocolo seguro (LDAPS)",
+ "text": "Usar a Política do Azure para Kubernetes para garantir a conformidade do cluster",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
"severity": "Média",
- "text": "A conta do CloudAdmin no vCenter IdP é usada apenas como uma conta de emergência (break-glass)",
+ "text": "Separe os aplicativos do plano de controle com pools de nós de usuário/sistema",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
- "severity": "Alto",
- "text": "Certifique-se de que o NSX-Manager esteja integrado a um provedor de identidade externo (LDAPS)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Adicione mancha ao seu nodepool do sistema para torná-lo dedicado",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
"severity": "Média",
- "text": "Foi criado um modelo RBAC para uso no VMware vSphere",
+ "text": "Usar um registro privado para suas imagens, como o ACR",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
"severity": "Média",
- "text": "As permissões RBAC devem ser concedidas em grupos ADDS e não em usuários específicos",
+ "text": "Analise suas imagens em busca de vulnerabilidades",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
"severity": "Alto",
- "text": "As permissões RBAC no recurso Solução VMware do Azure no Azure são 'bloqueadas' apenas para um conjunto limitado de proprietários",
+ "text": "Definir requisitos de separação de aplicativos (namespace/nodepool/cluster)",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
- "severity": "Alto",
- "text": "Certifique-se de que todas as funções personalizadas tenham escopo com autorizações permitidas do CloudAdmin",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Armazene seus segredos no Cofre de Chaves do Azure com o driver do CSI Secrets Store",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
"severity": "Alto",
- "text": "O modelo de conectividade correto da Solução VMware do Azure está selecionado para o caso de uso do cliente em mãos?",
- "waf": "Desempenho"
+ "text": "Se estiver usando entidades de serviço para o cluster, atualize as credenciais periodicamente (como trimestralmente)",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
- "severity": "Alto",
- "text": "Garantir que as conexões de Rota Expressa ou VPN do local para o Azure sejam monitoradas usando o 'monitor de conexão'",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Se necessário, adicione criptografia etcd do Serviço de Gerenciamento de Chaves",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
- "severity": "Média",
- "text": "Verifique se um monitor de conexão foi criado a partir de um recurso nativo do Azure para uma máquina virtual da Solução VMware do Azure para monitorar a conexão de Rota Expressa de back-end da Solução VMware do Azure",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário, considere o uso de computação confidencial para AKS",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
"severity": "Média",
- "text": "Verifique se um monitor de conexão é criado a partir de um recurso local para uma máquina virtual da Solução VMware do Azure para monitorar a conectividade de ponta 2",
- "waf": "Operações"
+ "text": "Considere o uso do Defender for Containers",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
"severity": "Alto",
- "text": "Quando o servidor de rotas for usado, certifique-se de que não mais de 1000 rotas sejam propagadas do servidor de rotas para o gateway ExR para o local (limite ARS).",
- "waf": "Operações"
+ "text": "Usar identidades gerenciadas em vez de entidades de serviço",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
- "severity": "Alto",
- "text": "O Gerenciamento de Identidades Privilegiadas é implementado para funções que gerenciam o recurso da Solução VMware do Azure no Portal do Azure (não são permitidas permissões permanentes)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Integrar autenticação com AAD (usando a integração gerenciada)",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
- "severity": "Alto",
- "text": "Os relatórios de auditoria do Gerenciamento de Identidades Privilegiadas devem ser implementados para as funções PIM da Solução VMware do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Limitar o acesso ao admin kubeconfig (get-credentials --admin)",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
"severity": "Média",
- "text": "Se o uso do Gerenciamento de Identidades Privilegiadas estiver sendo usado, certifique-se de que uma conta válida habilitada para ID do Entra seja criada com um registro SMTP válido para notificações de substituição automática do Host da Solução VMware do Azure. (permissões permanentes necessárias)",
+ "text": "Integrar autorização com AAD RBAC",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
"severity": "Alto",
- "text": "Limitar o uso da conta do CloudAdmin apenas ao acesso de emergência",
+ "text": "Usar namespaces para restringir o privilégio RBAC no Kubernetes",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d2e0d5d7-71d4-41e3-910c-c57b4a4b1410",
+ "link": "https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar",
+ "service": "AKS",
"severity": "Média",
- "text": "Criar funções RBAC personalizadas no vCenter para implementar um modelo de privilégios mínimos dentro do vCenter",
+ "text": "Para o Gerenciamento de Acesso à Identidade de Pod, use a Identidade de Carga de Trabalho do Azure AD (visualização)",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f4dcf690-1b30-407d-abab-6f8aa780d3a3",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin",
+ "service": "AKS",
"severity": "Média",
- "text": "É um processo definido para alternar regularmente as credenciais cloudadmin (vCenter) e admin (NSX)",
+ "text": "Para logins não interativos do AKS, use kubelogin (visualização)",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
- "severity": "Alto",
- "text": "Usar um provedor de identidade centralizado a ser usado para cargas de trabalho (VMs) em execução na Solução VMware do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.disableLocalAccounts==true) | distinct id,compliant",
+ "guid": "b085b1f2-3119-4771-8c9a-bbf4411810ec",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Desativar contas locais do AKS",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
- "severity": "Média",
- "text": "A filtragem de tráfego Leste-Oeste é implementada no NSX-T",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "36abb0db-c118-4f4c-9880-3f30f9a2deb6",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Configurar, se necessário, o acesso ao cluster just-in-time",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
- "severity": "Alto",
- "text": "As cargas de trabalho na Solução VMware do Azure não são diretamente expostas à Internet. O tráfego é filtrado e inspecionado pelo Gateway de Aplicativo do Azure, pelo Firewall do Azure ou por soluções de terceiros",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4d7f4c6-79bf-45d0-aa05-ce8fc717e150",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Configurar, se necessário, o acesso condicional do AAD para AKS",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
- "severity": "Alto",
- "text": "A auditoria e o registro em log são implementados para solicitações de entrada da Internet para cargas de trabalho baseadas na Solução VMware do Azure e na Solução VMware do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e1123a7c-a333-4eb4-a120-4ee3f293c9f3",
+ "link": "https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário para cargas de trabalho do Windows AKS, configure o gMSA ",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1f711a74-3672-470b-b8b8-a2148d640d79",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity",
+ "service": "AKS",
"severity": "Média",
- "text": "O monitoramento de sessão é implementado para conexões de saída da Internet a partir da Solução VMware do Azure ou cargas de trabalho baseadas na Solução VMware do Azure para identificar atividades suspeitas/mal-intencionadas",
+ "text": "Para um controle mais fino, considere usar uma Identidade Kubelet gerenciada",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248",
+ "link": "https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/",
+ "service": "AKS",
"severity": "Média",
- "text": "A proteção padrão contra DDoS está habilitada na sub-rede do Gateway ExR/VPN no Azure",
- "waf": "Segurança"
+ "text": "Se estiver usando AGIC, não compartilhe um AppGW entre clusters",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
- "severity": "Média",
- "text": "Usar uma estação de trabalho de acesso privilegiado (PAW) dedicada para gerenciar a Solução VMware do Azure, o vCenter, o gerenciador NSX e o gerenciador HCX",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false) | distinct id,compliant",
+ "guid": "8008ae7d-7e4b-4475-a6c8-bdbf59bce65d",
+ "link": "https://learn.microsoft.com/azure/aks/http-application-routing",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Não use AKS HTTP Routing Add-On, use em vez disso a entrada NGINX gerenciada com o complemento de roteamento de aplicativo.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview",
+ "service": "AKS",
"severity": "Média",
- "text": "Habilitar a Detecção Avançada de Ameaças (Microsoft Defender for Cloud, também conhecido como ASC) para cargas de trabalho em execução na Solução VMware do Azure",
- "waf": "Segurança"
+ "text": "Para cargas de trabalho do Windows, use a Rede Acelerada",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct id,compliant",
+ "guid": "ba7da7be-9952-4914-a384-5d997cb39132",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Use o ALB padrão (em oposição ao básico)",
+ "waf": "Fiabilidade"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22fbe8d6-9b40-47ef-9011-25bb1a555a6b",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet",
+ "service": "AKS",
"severity": "Média",
- "text": "Usar o Azure ARC for Servers para controlar corretamente as cargas de trabalho em execução na Solução VMware do Azure usando tecnologias nativas do Azure (o Azure ARC for Azure VMware Solution ainda não está disponível)",
+ "text": "Se estiver usando o CNI do Azure, considere usar sub-redes diferentes para NodePools",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Garanta que as cargas de trabalho na Solução VMware do Azure usem criptografia de dados suficiente durante o tempo de execução (como criptografia de disco convidado e SQL TDE). (a criptografia vSAN em repouso é padrão)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c3c39c98-6bb2-4c12-859a-114b5e3df584",
+ "link": "https://learn.microsoft.com/azure/private-link/private-link-overview",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Usar Pontos de Extremidade Privados (preferencial) ou Pontos de Extremidade de Serviço de Rede Virtual para acessar serviços de PaaS do cluster",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Quando a criptografia no convidado é usada, armazene chaves de criptografia no cofre de chaves do Azure quando possível",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant",
+ "guid": "a0f61565-9de5-458f-a372-49c831112dbd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Escolha o melhor plug-in de rede CNI para seus requisitos (Azure CNI recomendado)",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
- "severity": "Média",
- "text": "Considere usar o suporte estendido de atualização de segurança para cargas de trabalho em execução na Solução VMware do Azure (a Solução VMware do Azure é qualificada para ESU)",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "7faf12e7-0943-4f63-8472-2da29c2b1cd6",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Se estiver usando o Azure CNI, dimensione sua sub-rede de acordo considerando o número máximo de pods por nó",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "22f54b29-bade-43aa-b1e8-c38ec9366673",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "Alto",
- "text": "Certifique-se de que o método de redundância de dados vSAN apropriado seja usado (especificação RAID)",
- "waf": "Fiabilidade"
+ "text": "Se estiver usando o Azure CNI, verifique o máximo de pods/nó (padrão 30)",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
- "severity": "Alto",
- "text": "Certifique-se de que a política de falha na tolerância esteja em vigor para atender às suas necessidades de armazenamento vSAN",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "Para aplicativos internos, as organizações geralmente abrem toda a sub-rede AKS em seus firewalls. Isso abre o acesso de rede para os nós também e, potencialmente, para os pods também (se estiver usando o Azure CNI). Se os IPs do LoadBalancer estiverem em uma sub-rede diferente, somente este precisará estar disponível para os clientes do aplicativo. Outra razão é que, se os endereços IP na sub-rede AKS são um recurso escasso, consumir seus endereços IP para serviços reduzirá a escalabilidade máxima do cluster.",
+ "guid": "13c00567-4b1e-4945-a459-c373e7ed6162",
+ "link": "https://learn.microsoft.com/azure/aks/internal-lb",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se estiver usando serviços LoadBalancer de IP privado, use uma sub-rede dedicada (não a sub-rede AKS)",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "43f63047-22d9-429c-8b1c-d622f54b29ba",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "Alto",
- "text": "Certifique-se de ter solicitado cota suficiente, garantindo que você tenha considerado o crescimento e o requisito de recuperação de desastres",
+ "text": "Dimensione o intervalo de endereços IP do serviço de acordo (isso limitará a escalabilidade do cluster)",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
- "severity": "Média",
- "text": "Certifique-se de que as restrições de acesso ao ESXi sejam compreendidas, há limites de acesso que podem afetar as soluções de terceiros 3rd.",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "57bf217f-6dc8-481c-81e2-785773e9c00f",
+ "link": "https://learn.microsoft.com/azure/aks/use-byo-cni",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário, adicione seu próprio plugin CNI",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
- "severity": "Média",
- "text": "Certifique-se de ter uma política em torno da densidade e eficiência do host ESXi, tendo em mente o prazo de espera para solicitar novos nós",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4b3bb365-9458-44d9-9ed1-5c8f52890364",
+ "link": "https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário, configure o IP público por nó no AKS",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b3808b9f-a1cf-4204-ad01-3a923ce474db",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-network",
+ "service": "AKS",
"severity": "Média",
- "text": "Garantir que um bom processo de gerenciamento de custos esteja em vigor para a Solução VMware do Azure - o Gerenciamento de Custos do Azure pode ser usado",
- "waf": "Custar"
+ "text": "Usar um controlador de entrada para expor aplicativos baseados na Web em vez de expô-los com serviços do tipo LoadBalancer",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ccb534e7-416e-4a1d-8e93-533b53199085",
+ "link": "https://learn.microsoft.com/azure/aks/nat-gateway",
+ "service": "AKS",
"severity": "Baixo",
- "text": "As instâncias reservadas do Azure são usadas para otimizar o custo de uso da Solução VMware do Azure",
- "waf": "Custar"
+ "text": "Usar o Gateway NAT do Azure como outboundType para dimensionar o tráfego de saída",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "8ee9a69a-1b58-4b1e-9c61-476e110a160b",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support",
+ "service": "AKS",
"severity": "Média",
- "text": "Considere o uso do Azure Private-Link ao usar outros Serviços Nativos do Azure",
- "waf": "Segurança"
+ "text": "Usar alocações dinâmicas de IPs para evitar o esgotamento de IP do CNI do Azure",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant",
+ "guid": "3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba",
+ "link": "https://learn.microsoft.com/azure/aks/limit-egress-traffic",
+ "service": "AKS",
"severity": "Alto",
- "text": "Verifique se todos os recursos necessários residem na(s) mesma(s) zona(s) de disponibilidade do Azure",
- "waf": "Desempenho"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
- "severity": "Média",
- "text": "Habilitar cargas de trabalho de VM convidada do Microsoft Defender for Cloud for Azure VMware Solution",
+ "text": "Filtre o tráfego de saída com AzFW/NVA se seus requisitos de segurança exigirem",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false) and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct id,compliant",
+ "guid": "c4581559-bb91-463e-a908-aed8c44ce3b2",
+ "link": "https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges",
+ "service": "AKS",
"severity": "Média",
- "text": "Usar servidores habilitados para Arc do Azure para gerenciar suas cargas de trabalho de VM convidada da Solução VMware do Azure",
+ "text": "Se estiver usando um ponto de extremidade de API público, restrinja os endereços IP que podem acessá-lo",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ecccd979-3b6b-4cda-9b50-eb2eb03dda6d",
+ "link": "https://learn.microsoft.com/azure/aks/private-clusters",
+ "service": "AKS",
"severity": "Alto",
- "text": "Habilitar o log de diagnóstico e de métrica na solução VMware do Azure",
- "waf": "Operações"
+ "text": "Use clusters privados se seus requisitos exigirem",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster) | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true) | distinct id, compliant",
+ "guid": "ce7f2a7c-297c-47c6-adea-a6ff838db665",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
"severity": "Média",
- "text": "Implantar os agentes do Log Analytics nas cargas de trabalho da VM convidada da Solução VMware do Azure",
- "waf": "Operações"
+ "text": "Para os nós AKS do Windows 2019 e 2022, as Diretivas de Rede Calico podem ser usadas ",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
- "service": "AVS",
- "severity": "Média",
- "text": "Verifique se você tem uma política e uma solução de backup documentadas e implementadas para cargas de trabalho de VM da Solução VMware do Azure",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant",
+ "guid": "58d7c892-ddb1-407d-9769-ae669ca48e4a",
+ "link": "https://learn.microsoft.com/azure/aks/use-network-policies",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Habilitar uma opção de Política de Rede do Kubernetes (Calico/Azure)",
+ "waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
- "service": "AVS",
- "severity": "Média",
- "text": "Usar o Microsoft Defender for Cloud para monitoramento de conformidade de cargas de trabalho em execução no Azure VMware Solution",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "85e2223e-ce8b-4b12-907c-a5f16f158e3e",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Usar diretivas de rede do Kubernetes para aumentar a segurança intra-cluster",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
- "service": "AVS",
- "severity": "Média",
- "text": "São as linhas de base de conformidade aplicáveis adicionadas ao Microsoft Defender for Cloud",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-network",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Usar um WAF para cargas de trabalho da Web (UIs ou APIs)",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
- "service": "AVS",
- "severity": "Alto",
- "text": "A residência de dados foi avaliada ao selecionar regiões do Azure a serem usadas para a implantação da Solução VMware do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "9bda4776-8f24-4c11-9775-c2ea55b46a94",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Usar DDoS Standard na Rede Virtual AKS",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
- "service": "AVS",
- "severity": "Alto",
- "text": "As implicações do processamento de dados (modelo de prestador de serviços / consumidor de serviços) são claras e documentadas",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "Resources | where type=~'microsoft.containerservice/managedclusters' | project resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id)) on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant = (enableDdosProtection == 'true')",
+ "guid": "6c46b91a-1107-4485-ad66-3183e2a8c266",
+ "link": "https://learn.microsoft.com/azure/aks/http-proxy",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário, adicione o proxy HTTP da empresa",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e9855d04-c3c3-49c9-a6bb-2c12159a114b",
+ "link": "https://learn.microsoft.com/azure/aks/servicemesh-about",
+ "service": "AKS",
"severity": "Média",
- "text": "Considere o uso de CMK (Customer Managed Key) para vSAN somente se necessário por motivo(s) de conformidade.",
+ "text": "Considere o uso de uma malha de serviço para gerenciamento avançado de comunicação de microsserviços",
"waf": "Segurança"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67f7a9ed-5b31-4f38-a3f3-9812b2463cff",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts",
+ "service": "AKS",
"severity": "Alto",
- "text": "Criar painéis para habilitar os principais insights de monitoramento da Solução VMware do Azure",
+ "text": "Configurar alertas nas métricas mais críticas (consulte Insights de contêiner para obter recomendações)",
+ "waf": "Operações"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "337453a3-cc63-4963-9a65-22ac19e80696",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-get-started",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Verifique regularmente o Azure Advisor para obter recomendações sobre o seu cluster",
+ "waf": "Operações"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "3aa70560-e7e7-4968-be3d-628af35b2ced",
+ "link": "https://learn.microsoft.com/azure/aks/certificate-rotation",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Habilitar a rotação automática do certificado AKS",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e189c599-df0d-45a7-9dd4-ce32c1881370",
+ "link": "https://learn.microsoft.com/azure/aks/supported-kubernetes-versions",
+ "service": "AKS",
"severity": "Alto",
- "text": "Criar alertas de aviso para limites críticos para alertas automáticos sobre o desempenho da solução VMware do Azure (CPU >80%, memória média >80%, vSAN >70%)",
+ "text": "Tenha um processo regular para atualizar sua versão do kubernetes periodicamente (trimestralmente, por exemplo), ou use o recurso de atualização automática do AKS",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f7c4c0d-4e51-4464-ad24-57ed67138b82",
+ "link": "https://learn.microsoft.com/azure/aks/node-updates-kured",
+ "service": "AKS",
"severity": "Alto",
- "text": "Certifique-se de que o alerta crítico seja criado para monitorar se o consumo de vSAN está abaixo de 75%, pois esse é um limite de suporte do VMware",
+ "text": "Use kured para atualizações de nó do Linux caso você não esteja usando a atualização de imagem de nó",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "139c9580-ade3-426a-ba09-cf157d9f6477",
+ "link": "https://learn.microsoft.com/azure/aks/node-image-upgrade",
+ "service": "AKS",
"severity": "Alto",
- "text": "Verifique se os alertas estão configurados para alertas e notificações de Integridade do Serviço do Azure",
+ "text": "Tenha um processo regular para atualizar as imagens do nó do cluster periodicamente (semanalmente, por exemplo)",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
- "severity": "Média",
- "text": "Configurar o log da Solução VMware do Azure para ser enviado a uma conta de Armazenamento do Azure ou ao Azure EventHub para processamento",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "0102ce16-ee30-41e6-b882-e52e4621dd68",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Considere gitops para implantar aplicativos ou configuração de cluster em vários clusters",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d7672c26-7602-4482-85a4-14527fbe855c",
+ "link": "https://learn.microsoft.com/azure/aks/command-invoke",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Se for necessário um insight profundo no VMware vSphere: o vRealize Operations e/ou o vRealize Network Insights são usados na solução?",
+ "text": "Considere o uso do comando AKS invoke em clusters privados",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
- "service": "AVS",
- "severity": "Alto",
- "text": "Verifique se a política de armazenamento vSAN para VMs NÃO é a política de armazenamento padrão, pois essa política aplica provisionamento espesso",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "31d7aaab-7571-4449-ab80-53d89e89d17b",
+ "link": "https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Para eventos planejados, considere o uso do Dreno Automático de Nó",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
- "severity": "Média",
- "text": "Verifique se as bibliotecas de conteúdo do vSphere não são colocadas no vSAN, pois o vSAN é um recurso finito",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ed0fda7f-211b-47c7-8b6e-c18873fb473c",
+ "link": "https://learn.microsoft.com/azure/aks/faq",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Desenvolver práticas próprias de governança para garantir que nenhuma alteração seja realizada pelos operadores no nó RG (também conhecido como 'infra RG')",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
- "severity": "Média",
- "text": "Certifique-se de que os repositórios de dados da solução de backup sejam armazenados fora do armazenamento vSAN. No nativo do Azure ou em um armazenamento de dados com backup de pool de discos",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant",
+ "guid": "73b32a5a-67f7-4a9e-b5b3-1f38c3f39812",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Use o nome personalizado do Node RG (também conhecido como 'Infra RG')",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b2463cff-e189-4c59-adf0-d5a73dd4ce32",
+ "link": "https://kubernetes.io/docs/setup/release/notes/",
+ "service": "AKS",
"severity": "Média",
- "text": "Garantir que as cargas de trabalho em execução na Solução VMware do Azure sejam gerenciadas de forma híbrida usando o Azure Arc for Servers (a Solução VMware do Arc for Azure está em visualização)",
+ "text": "Não use APIs do Kubernetes preteridas em seus manifestos do YAML",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
- "service": "AVS",
- "severity": "Média",
- "text": "Garantir que as cargas de trabalho em execução na Solução VMware do Azure sejam monitoradas usando o Azure Log Analytics e o Azure Monitor",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1881370-6f7c-44c0-b4e5-14648d2457ed",
+ "link": "https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Manchar os nós do Windows",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
- "service": "AVS",
- "severity": "Média",
- "text": "Incluir cargas de trabalho em execução na Solução VMware do Azure nas ferramentas de gerenciamento de atualizações existentes ou no Gerenciamento de Atualizações do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "67138b82-0102-4ce1-9ee3-01e6e882e52e",
+ "link": "https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Mantenha o nível de patch dos contêineres do Windows sincronizado com o nível do patch do host",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
- "service": "AVS",
- "severity": "Média",
- "text": "Usar a Política do Azure para integrar cargas de trabalho da Solução VMware do Azure nas soluções de Gerenciamento, Monitoramento e Segurança do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "Por meio de Configurações de Diagnóstico no nível do cluster",
+ "guid": "5b56ad48-408f-4e72-934c-476ba280dcf5",
+ "link": "https://learn.microsoft.com/azure/aks/monitor-aks",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Envie logs mestre (também conhecidos como logs de API) para o Azure Monitor ou sua solução de gerenciamento de logs preferida",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
- "service": "AVS",
- "severity": "Média",
- "text": "Garantir que as cargas de trabalho em execução na Solução VMware do Azure sejam integradas ao Microsoft Defender for Cloud",
- "waf": "Segurança"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "64d1a846-e28a-4b6b-9a33-22a635c15a21",
+ "link": "https://learn.microsoft.com/azure/aks/node-pool-snapshot",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário, use instantâneos do nodePool",
+ "waf": "Custar"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
- "severity": "Média",
- "text": "Certifique-se de que os backups não sejam armazenados no vSAN, pois o vSAN é um recurso finito",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5a5b252-1e44-4a59-a9d2-399c4d7b68d0",
+ "link": "https://learn.microsoft.com/azure/aks/spot-node-pool",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Considere pools de nós spot para cargas de trabalho não sensíveis ao tempo",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
- "severity": "Média",
- "text": "Todas as soluções de DR foram consideradas e uma solução que é melhor para o seu negócio foi decidida? [SRM/JetStream/Zerto/Veeam/...]",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true) | distinct id,compliant",
+ "guid": "c755562f-2b4e-4456-9b4d-874a748b662e",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Considere o nó virtual AKS para intermitência rápida",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
- "severity": "Média",
- "text": "Usar o Azure Site Recovery quando a tecnologia de Recuperação de Desastres for IaaS nativa do Azure",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "6f8389a7-f82c-4b8e-a8c0-aa63a25a4956",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Monitore suas métricas de cluster com o Container Insights (ou outras ferramentas como o Prometheus)",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true) | distinct id,compliant",
+ "guid": "eaa8dc4a-2436-47b3-9697-15b1752beee0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview",
+ "service": "AKS",
"severity": "Alto",
- "text": "Use planos de recuperação automatizados com qualquer uma das soluções de desastre, evite ao máximo tarefas manuais",
- "waf": "Fiabilidade"
+ "text": "Armazene e analise seus logs de cluster com o Container Insights (ou outras ferramentas como Telegraf/ElasticSearch)",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4621dd68-c5a5-4be2-bdb1-1726769ef669",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze",
+ "service": "AKS",
"severity": "Média",
- "text": "Usar o par de regiões geopolíticas como o ambiente secundário de recuperação de desastres",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
- "service": "AVS",
- "severity": "Alto",
- "text": "Use 2 espaços de endereço diferentes entre as regiões, por exemplo: 10.0.0.0/16 e 192.168.0.0/16 para as diferentes regiões",
- "waf": "Fiabilidade"
+ "text": "Monitorar a utilização da CPU e da memória dos nós",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "1a4835ac-9422-423e-ae80-b123081a5417",
+ "link": "https://learn.microsoft.com/azure/aks/configure-azure-cni",
+ "service": "AKS",
"severity": "Média",
- "text": "O ExpressRoute Global Reach será usado para conectividade entre as Nuvens Privadas da Solução VMware do Azure primária e secundária ou o roteamento é feito por meio de dispositivos virtuais de rede?",
- "waf": "Fiabilidade"
+ "text": "Se estiver usando o Azure CNI, monitore a % de IPs de pod consumidos por nó",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "A E/S no disco do sistema operacional é um recurso crítico. Se o sistema operacional nos nós for limitado na E/S, isso pode levar a um comportamento imprevisível, geralmente terminando no nó sendo declarado NotReady",
+ "guid": "415833ea-3ad3-4c2d-b733-165c3acbe04b",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance",
+ "service": "AKS",
"severity": "Média",
- "text": "Todas as soluções de backup foram consideradas e uma solução que é melhor para o seu negócio foi decidida? [ MABS/CommVault/Metallic.io/Veeam/ . ]",
- "waf": "Fiabilidade"
+ "text": "Monitorar a profundidade da fila de disco do sistema operacional nos nós",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "be209d39-fda4-4777-a424-d116785c2fa5",
+ "link": "https://learn.microsoft.com/azure/aks/load-balancer-standard",
+ "service": "AKS",
"severity": "Média",
- "text": "Implante sua solução de backup na mesma região que sua nuvem privada da Solução VMware do Azure",
- "waf": "Fiabilidade"
+ "text": "Se não estiver usando filtragem de saída com AzFW/NVA, monitore as portas SNAT ALB alocadas padrão",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "74c2ee76-569b-4a79-a57e-dedf91b022c9",
+ "link": "https://learn.microsoft.com/azure/aks/aks-resource-health",
+ "service": "AKS",
"severity": "Média",
- "text": "Implante sua solução de backup fora do vSan, em componentes nativos do Azure",
- "waf": "Fiabilidade"
+ "text": "Assine as notificações de integridade de recursos para seu cluster AKS",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Existe um processo para solicitar uma restauração dos componentes VMware gerenciados pela Plataforma Azure?",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b54eb2eb-03dd-4aa3-9927-18e2edb11726",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Configurar solicitações e limites nas especificações do pod",
+ "waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Para implantações manuais, todas as configurações e implantações devem ser documentadas",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "769ef669-1a48-435a-a942-223ece80b123",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Impor cotas de recursos para namespaces",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Para implantações manuais, considere implementar bloqueios de recursos para evitar ações acidentais em sua nuvem privada de solução VMware do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "081a5417-4158-433e-a3ad-3c2de733165c",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Verifique se sua assinatura tem cota suficiente para expandir seus nodepools",
"waf": "Operações"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Para implantações automatizadas, implante uma nuvem privada mínima e dimensione conforme necessário",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant",
+ "guid": "90ce65de-8e13-4f9c-abd4-69266abca264",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Usar o Autoscaler de Cluster",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant",
+ "guid": "831c2872-c693-4b39-a887-a561bada49bc",
+ "link": "https://learn.microsoft.com/azure/aks/custom-node-configuration",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Para implantações automatizadas, solicite ou reserve cota antes de iniciar a implantação",
- "waf": "Operações"
+ "text": "Personalizar a configuração do nó para pools de nós AKS",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Para implantação automatizada, verifique se os bloqueios de recursos relevantes são criados por meio da automação ou da Política do Azure para uma governança adequada",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "faa19bfe-9d55-4d04-a3c4-919ca1b2d121",
+ "link": "https://learn.microsoft.com/azure/aks/concepts-scale",
+ "service": "AKS",
+ "severity": "Média",
+ "text": "Use o Autoscaler do Pod Horizontal quando necessário",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
- "service": "AVS",
- "severity": "Baixo",
- "text": "Implemente nomes humanos compreensíveis para chaves de autorização ExR para permitir a fácil identificação da finalidade/uso das chaves",
- "waf": "Operações"
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "description": "Nós maiores trarão maior desempenho e recursos, como discos efêmeros e rede acelerada, mas aumentarão o raio de explosão e diminuirão a granularidade de dimensionamento",
+ "guid": "5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3",
+ "link": "https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Considere um tamanho de nó apropriado, não muito grande ou muito pequeno",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "38800e6a-ae01-40a2-9fbc-ae5a06e5462d",
+ "link": "https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Usar o Cofre de chaves para armazenar segredos e chaves de autorização quando Princípios de Serviço separados são usados para implantar a Solução VMware do Azure e a Rota Expressa",
- "waf": "Operações"
+ "text": "Se mais de 5000 nós forem necessários para escalabilidade, considere o uso de um cluster AKS adicional",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9583c0f6-6083-43f6-aa6b-df7102c901bb",
+ "link": "https://learn.microsoft.com/azure/event-grid/event-schema-aks",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Defina dependências de recursos para serializar ações no IaC quando muitos recursos precisarem ser implantados no/na Solução VMware do Azure, pois a Solução VMware do Azure oferece suporte apenas a um número limitado de operações paralelas.",
- "waf": "Operações"
+ "text": "Considere assinar o EventGrid Events para automação AKS",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c5016d8c-c6c9-4165-89ae-673ef0fff19d",
+ "link": "https://learn.microsoft.com/azure/aks/manage-abort-operations",
+ "service": "AKS",
"severity": "Baixo",
- "text": "Ao executar a configuração automatizada de segmentos NSX-T com um único gateway de Camada 1, use as APIs do Portal do Azure em vez das APIs do NSX-Manager",
- "waf": "Operações"
+ "text": "Para operações de longa duração em um cluster AKS, considere o encerramento do evento",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
- "service": "AVS",
- "severity": "Média",
- "text": "Ao pretender usar a expansão automatizada, certifique-se de aplicar cota suficiente da Solução VMware do Azure para as assinaturas que executam a Solução VMware do Azure",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c4e37133-f186-4ce1-aed9-9f1b32f6e021",
+ "link": "https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Se necessário, considere usar hosts dedicados do Azure para nós AKS",
"waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
- "service": "AVS",
- "severity": "Média",
- "text": "Ao pretender usar o scale-in automatizado, certifique-se de levar em consideração os requisitos da política de armazenamento antes de executar essa ação",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project id,name=strcat(name,'-',pools.name), resourceGroup, compliant",
+ "guid": "24367b33-6971-45b1-952b-eee0b9b588de",
+ "link": "https://learn.microsoft.com/azure/aks/cluster-configuration",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Usar discos efêmeros do sistema operacional",
"waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
- "service": "AVS",
- "severity": "Média",
- "text": "As operações de dimensionamento sempre precisam ser serializadas em um único SDDC, pois apenas uma operação de escala pode ser executada por vez (mesmo quando vários clusters são usados)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f0ce315f-1120-4166-8206-94f2cf3a4d07",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/disks-types",
+ "service": "AKS",
+ "severity": "Alto",
+ "text": "Para discos não efêmeros, use IOPS altos e discos maiores do sistema operacional para os nós ao executar muitos pods/nó, pois requer alto desempenho para executar vários pods e gerará logs enormes com limites de rotação de log AKS padrão",
"waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
- "service": "AVS",
- "severity": "Média",
- "text": "Considerar e validar operações de dimensionamento em soluções de terceiros 3rd usadas na arquitetura (suportadas ou não)",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "39c486ce-d5af-4062-89d5-18bb5fd795db",
+ "link": "https://learn.microsoft.com/azure/aks/use-ultra-disks",
+ "service": "AKS",
+ "severity": "Baixo",
+ "text": "Para a opção de armazenamento de hiperdesempenho, use Ultra Disks no AKS",
"waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "9f7547c1-747d-4c56-868a-714435bd19dd",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region",
+ "service": "AKS",
"severity": "Média",
- "text": "Definir e impor limites máximos de entrada/saída de escala para seu ambiente nas automações",
+ "text": "Evite manter o estado no cluster e armazene dados fora (AzStorage, AzSQL, Cosmos, etc)",
"waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "24429eb7-2281-4376-85cc-57b4a4b18142",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-storage",
+ "service": "AKS",
"severity": "Média",
- "text": "Implementar regras de monitoramento para monitorar operações de dimensionamento automatizadas e monitorar o sucesso e a falha para habilitar respostas apropriadas (automatizadas)",
- "waf": "Operações"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
- "severity": "Alto",
- "text": "Ao usar o MON, esteja ciente dos limites de VMs configuradas simulataneamente (MON Limit for HCX [400 - standard, 1000 - Larger appliance])",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
- "severity": "Alto",
- "text": "Ao usar o MON, você não pode habilitar o MON em mais de 100 extensões de rede",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "Fiabilidade"
+ "text": "Se estiver usando o AzFiles Standard, considere o AzFiles Premium e/ou ANF por motivos de desempenho",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
- "service": "AVS",
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "83958a8c-2689-4b32-ab57-cfc64546135a",
+ "link": "https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support",
+ "service": "AKS",
"severity": "Média",
- "text": "Se estiver usando uma conexão VPN para migrações, ajuste o tamanho da MTU de acordo.",
+ "text": "Se estiver usando Discos e AZs do Azure, considere ter nodepools dentro de uma zona para disco LRS com VolumeBindingMode:WaitForFirstConsumer para provisionar armazenamento na zona direita ou use o disco ZRS para nodepools abrangendo várias zonas",
"waf": "Desempenho"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
- "service": "AVS",
- "severity": "Média",
- "text": "Para regiões de baixa conectividade conectadas ao Azure (500Mbps ou menos), considere implantar o dispositivo de otimização de WAN HCX",
- "waf": "Desempenho"
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
+ "severity": "Alto",
+ "text": "Permitir que 2 réplicas tenham 99,9% de disponibilidade para operações de leitura",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
- "service": "AVS",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"severity": "Média",
- "text": "Certifique-se de que as migrações sejam iniciadas a partir do dispositivo local e NÃO do dispositivo em nuvem (NÃO execute uma migração reversa)",
+ "text": "Permitir que 3 réplicas tenham 99,9% de disponibilidade para operações de leitura/gravação",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "AVS",
- "severity": "Média",
- "text": "Quando o Azure Netapp Files for usado para estender o armazenamento para a Solução VMware do Azure, considere usá-lo como um armazenamento de dados VMware em vez de anexá-lo diretamente a uma VM.",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
+ "severity": "Alto",
+ "text": "Aproveite as zonas de disponibilidade habilitando réplicas de leitura e/ou gravação",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "AVS",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
"severity": "Média",
- "text": "Verifique se um ExpressRoute Gateway dedicado está sendo usado para soluções de armazenamento de dados externos",
+ "text": "Para redução regional, crie manualmente serviços em 2 ou mais regiões para a Pesquisa, pois não fornece um método automatizado de replicação de índices de pesquisa entre regiões geográficas",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "AVS",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
"severity": "Média",
- "text": "Verifique se o FastPath está habilitado no ExpressRoute Gateway que está sendo usado para soluções de armazenamento de dados externos",
+ "text": "Para sincronizar dados em vários serviços: Use indexadores para atualizar conteúdo em vários serviços ou Use APIs REST para enviar atualizações de conteúdo em vários serviços",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "AVS",
- "severity": "Alto",
- "text": "Se estiver usando cluster estendido, verifique se a solução de recuperação de desastres selecionada é suportada pelo fornecedor",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
+ "severity": "Média",
+ "text": "Usar o Gerenciador de Tráfego do Azure para coordenar solicitações",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "AVS",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
"severity": "Alto",
- "text": "Se estiver usando cluster estendido, verifique se o SLA fornecido atenderá aos seus requisitos",
+ "text": "Backup e restauração de um índice de pesquisa cognitiva do Azure. Use este código de exemplo para fazer backup da definição de índice e instantâneo em uma série de arquivos Json",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "AVS",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
"severity": "Alto",
- "text": "Se estiver usando cluster estendido, verifique se ambos os circuitos da Rota Expressa estão conectados ao hub de conectividade.",
+ "text": "Selecione o plano de hospedagem de aplicativo lógico certo com base em seus requisitos de negócios e SLO",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "AVS",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
"severity": "Alto",
- "text": "Se estiver usando cluster estendido, verifique se ambos os circuitos da Rota Expressa têm o GlobalReach habilitado.",
+ "text": "Proteja aplicativos lógicos contra falhas de região com redundância de zona e zonas de disponibilidade",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "AVS",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
"severity": "Alto",
- "text": "Faça com que as configurações de tolerância a desastres do site tenham sido devidamente consideradas e alteradas para sua empresa, se necessário.",
+ "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Aplicar as orientações do benchmark de segurança na nuvem da Microsoft relacionadas ao armazenamento",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
- "severity": "Média",
- "text": "Considere a 'linha de base de segurança do Azure para armazenamento'",
- "waf": "Segurança"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "O Armazenamento do Azure, por padrão, tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem expor com segurança o Armazenamento do Azure apenas aos recursos de Computação do Azure que precisam de acesso, eliminando assim a exposição à Internet pública",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
"severity": "Alto",
- "text": "Considere o uso de pontos de extremidade privados para o Armazenamento do Azure",
- "waf": "Segurança"
+ "text": "Se estiver implantando em um ambiente isolado, use ou migre para o ASE (Ambiente do Serviço de Aplicativo) v3",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "As contas de armazenamento recém-criadas são criadas usando o modelo de implantação ARM, para que o RBAC, a auditoria, etc., estejam todos habilitados. Verifique se não há contas de armazenamento antigas com modelo de implantação clássico em uma assinatura",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
"severity": "Média",
- "text": "Verifique se as contas de armazenamento mais antigas não estão usando o 'modelo de implantação clássico'",
- "waf": "Segurança"
+ "text": "Aproveite o Azure DevOps ou o GitHub para simplificar o CI/CD e proteger seu código de Aplicativo Lógico",
+ "waf": "Operações"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Aproveite o Microsoft Defender para saber mais sobre atividades suspeitas e configurações incorretas.",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Habilitar o Microsoft Defender para todas as suas contas de armazenamento",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Se você usar certificados TLS gerenciados pelo cliente com o Azure Front Door, use a versão do certificado 'Mais recente'. Reduza o risco de interrupções causadas pela renovação manual do certificado.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "O mecanismo soft-delete permite recuperar blobs excluídos acidentalmente.",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
"severity": "Média",
- "text": "Ativar 'exclusão suave' para blobs",
+ "text": "Use o Azure Front Door com políticas do WAF para fornecer e ajudar a proteger aplicativos HTTP/S globais que abrangem várias regiões do Azure.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere desativar seletivamente a \"exclusão suave\" para determinados contêineres de blob, por exemplo, se o aplicativo tiver que garantir que as informações excluídas sejam imediatamente excluídas, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
"severity": "Média",
- "text": "Desativar 'exclusão suave' para blobs",
+ "text": "Ao usar o Front Door e o Gateway de Aplicativo para ajudar a proteger aplicativos HTTP/S, use políticas WAF no Front Door. Bloqueie o Gateway de Aplicativo para receber tráfego somente do Front Door.",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "A exclusão suave para contêineres permite que você recupere um contêiner depois que ele tenha sido excluído, por exemplo, recuperar de uma operação de exclusão acidental.",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Ativar 'exclusão suave' para contêineres",
+ "text": "Implante sua política de WAF para o Front Door no modo 'Prevenção' para que o Firewall de Aplicativo Web tome as medidas apropriadas para permitir ou negar o tráfego.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere desativar seletivamente a \"exclusão suave\" para determinados contêineres de blob, por exemplo, se o aplicativo tiver que garantir que as informações excluídas sejam imediatamente excluídas, por exemplo, por motivos de confidencialidade, privacidade ou conformidade. ",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
- "severity": "Média",
- "text": "Desativar 'exclusão suave' para contêineres",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Evite colocar o Gerenciador de Tráfego atrás da Porta da Frente.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Evita a exclusão acidental de uma conta de armazenamento, forçando o usuário a remover primeiro o bloqueio de exclusão, antes da exclusão",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Habilitar bloqueios de recursos em contas de armazenamento",
+ "text": "Use o mesmo nome de domínio no Azure Front Door e sua origem. Nomes de host incompatíveis podem causar bugs sutis.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere políticas de \"retenção legal\" ou \"retenção baseada em tempo\" para blobs, de modo que seja impossível excluir o blob, o contêiner ou a conta de armazenamento. Por favor, note que \"impossível\" significa na verdade \"impossível\"; uma vez que uma conta de armazenamento contém um blob imutável, a única maneira de 'se livrar' dessa conta de armazenamento é cancelando a assinatura do Azure.",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere blobs imutáveis",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "text": "Desabilite as investigações de integridade quando houver apenas uma origem em um grupo de origens do Azure Front Door.",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Considere desabilitar o acesso HTTP/80 desprotegido à conta de armazenamento, para que todas as transferências de dados sejam criptografadas, protegidas por integridade e o servidor seja autenticado. ",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Exigir HTTPS, ou seja, desativar a porta 80 na conta de armazenamento",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Selecione pontos de extremidade de investigação de integridade boa para o Azure Front Door. Considere a criação de pontos de extremidade de integridade que verifiquem todas as dependências do aplicativo.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Ao configurar um domínio personalizado (nome do host) em uma conta de armazenamento, verifique se você precisa de TLS/HTTPS; em caso afirmativo, talvez seja necessário colocar a CDN do Azure na frente da sua conta de armazenamento.",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "text": "Use investigações de integridade HEAD com o Azure Front Door para reduzir o tráfego que o Front Door envia para seu aplicativo.",
+ "waf": "Desempenho"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Ao impor HTTPS (desabilitando HTTP), verifique se você não usa domínios personalizados (CNAME) para a conta de armazenamento.",
- "waf": "Segurança"
+ "text": "Use certificados TLS gerenciados com o Azure Front Door. Reduza o custo operacional e o risco de interrupções devido a renovações de certificados.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Exigir HTTPS quando um cliente usa um token SAS para acessar dados de blob ajuda a minimizar o risco de perda de credenciais.",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
"severity": "Média",
- "text": "Limitar tokens de assinatura de acesso compartilhado (SAS) somente a conexões HTTPS",
- "waf": "Segurança"
+ "text": "Defina a configuração do WAF do Azure Front Door como código. Usando o código, você pode adotar mais facilmente a nova versão do conjunto de regras e obter proteção adicional.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Os tokens AAD devem ser favorecidos em relação às assinaturas de acesso compartilhado, sempre que possível",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Usar tokens do Azure Active Directory (Azure AD) para acesso de blob",
+ "text": "Use o TLS de ponta a ponta com o Azure Front Door. Use o TLS para conexões de seus clientes com o Front Door e do Front Door com sua origem.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Ao atribuir uma função a um usuário, grupo ou aplicativo, conceda a essa entidade de segurança apenas as permissões necessárias para que eles executem suas tarefas. Limitar o acesso aos recursos ajuda a evitar o uso indevido não intencional e mal-intencionado de seus dados.",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"severity": "Média",
- "text": "Privilégio mínimo nas permissões do IaM",
+ "text": "Use o redirecionamento de HTTP para HTTPS com o Azure Front Door. Ofereça suporte a clientes mais antigos redirecionando-os para uma solicitação HTTPS automaticamente.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Uma SAS de delegação de usuário é protegida com credenciais do Azure Active Directory (Azure AD) e também pelas permissões especificadas para a SAS. Uma SAS de delegação de usuário é análoga a uma SAS de serviço em termos de escopo e função, mas oferece benefícios de segurança em relação à SAS de serviço. ",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Ao usar o SAS, prefira o SAS de delegação de usuário ao SAS baseado em chave de conta de armazenamento.",
+ "text": "Habilite o WAF do Azure Front Door. Proteja seu aplicativo contra uma variedade de ataques.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "As chaves de conta de armazenamento ('chaves compartilhadas') têm pouquíssimos recursos de auditoria. Embora possa ser monitorado em quem/quando foi obtida uma cópia das chaves, uma vez que as chaves estão nas mãos de várias pessoas, é impossível atribuir o uso a um usuário específico. Depender exclusivamente da autenticação do AAD facilita a vinculação do acesso ao armazenamento a um usuário. ",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Considere desabilitar as chaves de conta de armazenamento, para que somente o acesso ao AAD (e a delegação de usuários SAS) seja suportado.",
+ "text": "Ajuste o WAF do Azure Front Door para sua carga de trabalho configurando o WAF no modo de detecção para reduzir e corrigir detecções de falsos positivos.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Use os dados do Registro de atividades para identificar \"quando\", \"quem\", \"o que\" e \"como\" a segurança da sua conta de armazenamento está sendo visualizada ou alterada (ou seja, chaves de conta de armazenamento, políticas de acesso, etc.).",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Considere usar o Azure Monitor para auditar as operações do plano de controle na conta de armazenamento",
+ "text": "Habilite o recurso de inspeção do corpo da solicitação habilitado na política do WAF do Azure Front Door.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Uma política de expiração de chave permite que você defina um lembrete para a rotação das chaves de acesso da conta. O lembrete será exibido se o intervalo especificado tiver decorrido e as teclas ainda não tiverem sido giradas.",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
- "severity": "Média",
- "text": "Ao usar chaves de conta de armazenamento, considere habilitar uma 'política de expiração de chave'",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Habilite os conjuntos de regras padrão do WAF do Azure Front Door. Os conjuntos de regras padrão detectam e bloqueiam ataques comuns.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Uma diretiva de expiração SAS especifica um intervalo recomendado sobre o qual a SAS é válida. As políticas de expiração do SAS se aplicam a um SAS de serviço ou a um SAS de conta. Quando um usuário gera SAS de serviço ou SAS de conta com um intervalo de validade maior do que o intervalo recomendado, ele verá um aviso.",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
- "severity": "Média",
- "text": "Considere configurar uma política de expiração SAS",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Habilite o conjunto de regras de proteção contra bot do WAF do Azure Front Door. As regras de bot detectam bots bons e ruins.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "As políticas de acesso armazenado oferecem a opção de revogar permissões para uma SAS de serviço sem precisar gerar novamente as chaves da conta de armazenamento. ",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"severity": "Média",
- "text": "Considere vincular o SAS a uma política de acesso armazenado",
+ "text": "Use a versão mais recente do conjunto de regras do WAF do Azure Front Door. As atualizações do conjunto de regras são atualizadas regularmente para levar em conta o cenário de ameaças atual.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
"severity": "Média",
- "text": "Considere configurar o repositório de código-fonte do aplicativo para detectar cadeias de conexão com check-in e chaves de conta de armazenamento.",
+ "text": "Adicione a limitação de taxa ao WAF do Azure Front Door. A limitação de taxa bloqueia os clientes que enviam acidentalmente ou intencionalmente grandes quantidades de tráfego em um curto período de tempo.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Idealmente, seu aplicativo deve estar usando uma identidade gerenciada para autenticar no Armazenamento do Azure. Se isso não for possível, considere ter a credencial de armazenamento (cadeia de conexão, chave de conta de armazenamento, SAS, credencial da entidade de serviço) no Azure KeyVault ou em um serviço equivalente.",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere armazenar cadeias de conexão no Cofre de Chaves do Azure (em cenários em que identidades gerenciadas não são possíveis)",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Use um limite alto para os limites de taxa do WAF do Azure Front Door. Os limites de limite de taxa altos evitam o bloqueio do tráfego legítimo, ao mesmo tempo em que fornecem proteção contra números extremamente altos de solicitações que podem sobrecarregar sua infraestrutura.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Use tempos de expiração de curto prazo em um SAS de serviço SAS ad hoc ou SAS de conta. Dessa forma, mesmo que um SAS seja comprometido, ele é válido apenas por um curto período de tempo. Essa prática é especialmente importante se você não puder fazer referência a uma política de acesso armazenado. Os tempos de expiração de curto prazo também limitam a quantidade de dados que podem ser gravados em um blob, limitando o tempo disponível para carregar nele.",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Esforce-se por curtos períodos de validade para SAS ad-hoc",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "text": "Se você não estiver esperando tráfego de todas as regiões geográficas, use filtros geográficos para bloquear o tráfego de países não esperados.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Ao criar um SAS, seja o mais específico e restritivo possível. Prefira um SAS para um único recurso e operação em vez de um SAS que dá acesso muito mais amplo.",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
"severity": "Média",
- "text": "Aplicar um escopo restrito a uma SAS",
+ "text": "Especifique o local desconhecido (ZZ) ao filtrar geograficamente o tráfego com o WAF do Azure Front Door. Evite bloquear acidentalmente solicitações legítimas quando os endereços IP não puderem ser correspondidos geograficamente.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Uma SAS pode incluir parâmetros nos quais endereços IP de cliente ou intervalos de endereços estão autorizados a solicitar um recurso usando a SAS. ",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
"severity": "Média",
- "text": "Considere a definição do escopo do SAS para um endereço IP de cliente específico, sempre que possível",
- "waf": "Segurança"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "Um SAS não pode restringir a quantidade de dados que um cliente carrega; Dado o modelo de precificação da quantidade de armazenamento ao longo do tempo, pode fazer sentido validar se os clientes carregaram conteúdo maliciosamente grande.",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
- "severity": "Baixo",
- "text": "Considere verificar os dados carregados, depois que os clientes usaram um SAS para carregar um arquivo. ",
- "waf": "Segurança"
+ "text": "Capture logs e métricas ativando as Configurações de Diagnóstico. Inclua logs de atividades de recursos, logs de acesso, logs de investigação de integridade e logs do WAF. Configure alertas.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Ao acessar o armazenamento de blob via SFTP usando uma 'conta de usuário local', os controles RBAC 'normais' não se aplicam. O acesso a blobs via NFS ou REST pode ser mais restritivo do que o acesso a SFTP. Infelizmente, no início de 2023, os usuários locais são a única forma de gerenciamento de identidade que atualmente é suportada para o ponto de extremidade SFTP",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "SFTP: Limite a quantidade de 'usuários locais' para acesso SFTP e audite se o acesso é necessário ao longo do tempo.",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Envie logs do WAF do Azure Front Door para o Microsoft Sentinel.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
"severity": "Média",
- "text": "SFTP: O ponto de extremidade SFTP não oferece suporte a ACLs do tipo POSIX.",
- "waf": "Segurança"
+ "text": "Escolha um método de roteamento que dê suporte à sua estratégia de implantação. O método ponderado, que distribui o tráfego com base no coeficiente de peso configurado, oferece suporte a modelos ativos-ativos. Um valor baseado em prioridade que configura a região primária para receber todo o tráfego e enviar tráfego para a região secundária como backup oferece suporte a modelos ativo-passivo. Combine os métodos anteriores com latência para que a origem com a menor latência receba tráfego.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "O armazenamento oferece suporte a CORS (Cross-Origin Resource Sharing), ou seja, um recurso HTTP que permite que aplicativos Web de um domínio diferente afrouxem a política de mesma origem. Ao habilitar o CORS, mantenha o CorsRules com o menor privilégio.",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
"severity": "Alto",
- "text": "Evite políticas CORS excessivamente amplas",
- "waf": "Segurança"
+ "text": "Dar suporte à redundância por ter várias origens em um ou mais pools de back-end. Sempre tenha instâncias redundantes do seu aplicativo e certifique-se de que cada instância exponha um ponto de extremidade ou origem. Você pode colocar essas origens em um ou mais pools de back-end.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Os dados em repouso são sempre criptografados no lado do servidor e, além disso, também podem ser criptografados no lado do cliente. A criptografia do lado do servidor pode acontecer usando uma chave gerenciada por plataforma (padrão) ou uma chave gerenciada pelo cliente. A criptografia do lado do cliente pode acontecer fazendo com que o cliente forneça uma chave de criptografia/descriptografia por blob para o armazenamento do Azure ou manipulando completamente a criptografia no lado do cliente. portanto, não depende do Armazenamento do Azure para garantias de confidencialidade.",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Determine como os dados em repouso devem ser criptografados. Entenda o modelo de thread para dados.",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Defina um tempo limite para encaminhar solicitações para o back-end. Ajuste a configuração de tempo limite de acordo com as necessidades de seus endpoints. Caso contrário, o Azure Front Door poderá fechar a conexão antes que a origem envie a resposta. Você também pode reduzir o tempo limite padrão do Azure Front Door se todas as suas origens tiverem um tempo limite mais curto.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
"severity": "Média",
- "text": "Determine qual/se a criptografia de plataforma deve ser usada.",
- "waf": "Segurança"
+ "text": "Decida se seu aplicativo requer afinidade de sessão. Se você tiver requisitos de alta confiabilidade, recomendamos que você desabilite a afinidade de sessão.",
+ "waf": "Fiabilidade"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
"severity": "Média",
- "text": "Determine qual/se a criptografia do lado do cliente deve ser usada.",
+ "text": "Envie o cabeçalho do host para o back-end. Os serviços de back-end devem estar cientes do nome do host para que possam criar regras para aceitar o tráfego somente desse host.",
"waf": "Segurança"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "Aproveite o Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) para localizar contas de armazenamento que permitem acesso anônimo a blobs.",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
- "severity": "Alto",
- "text": "Considere se o acesso de blob público é necessário ou se pode ser desabilitado para determinadas contas de armazenamento. ",
- "waf": "Segurança"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Use o cache para pontos de extremidade que dão suporte a ele.",
+ "waf": "Custar"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
- "severity": "Média",
- "text": "Os Aplicativos Spring do Azure permitem duas implantações para cada aplicativo, apenas um dos quais recebe tráfego de produção. Você pode obter tempo de inatividade zero com estratégias de implantação em verde azul. A implantação verde azul só está disponível nas camadas Standard e Enterprise. Você pode automatizar a implantação usando CI/CD com ações do ADO/GitHub",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "Baixo",
+ "text": "Desabilite as verificações de integridade em pools de back-end únicos. Se você tiver apenas uma origem configurada no grupo de origens do Azure Front Door, essas chamadas serão desnecessárias. Isso só é recomendado se você não puder ter várias origens em seu endpoint.",
+ "waf": "Custar"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
"severity": "Média",
- "text": "As instâncias do Azure Spring Apps podem ser criadas em várias regiões para seus aplicativos e o tráfego pode ser roteado pelo Gerenciador de Tráfego/Front Door.",
- "waf": "Fiabilidade"
+ "text": "É recomendável usar a Camada Premium para aproveitar os relatórios de segurança, enquanto o Perfil Standard do Azure Front Door fornece apenas relatórios de tráfego em análises/relatórios internos.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
"severity": "Média",
- "text": "Na região com suporte, os Aplicativos Spring do Azure podem ser implantados como zona redundante, o que significa que as instâncias são distribuídas automaticamente entre zonas de disponibilidade. Esse recurso só está disponível nas camadas Standard e Enterprise.",
- "waf": "Fiabilidade"
+ "text": "Use certificados TLS curinga quando possível.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"severity": "Média",
- "text": "Usar mais de 1 instância de aplicativo para seus aplicativos",
- "waf": "Fiabilidade"
+ "text": "Otimize a cadeia de caracteres de consulta do aplicativo para armazenamento em cache. Para conteúdo puramente estático, ignore as cadeias de caracteres de consulta para maximizar o uso do cache. Se o aplicativo usar cadeias de caracteres de consulta, considere incluí-las na chave de cache. Incluir as cadeias de caracteres de consulta na chave de cache permite que o Azure Front Door forneça respostas armazenadas em cache ou outras respostas, com base em sua configuração.",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
"severity": "Média",
- "text": "Monitore os Aplicativos Spring do Azure com logs, métricas e rastreamento. Integre o ASA com insights de aplicativos e rastreie falhas e crie pastas de trabalho.",
- "waf": "Fiabilidade"
+ "text": "Use a compactação de arquivos ao acessar conteúdo para download.",
+ "waf": "Desempenho"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
- "severity": "Média",
- "text": "Configurar o dimensionamento automático no Spring Cloud Gateway",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Considere migrar para o SKU Standard ou Premium se você estiver usando o Azure Front Door Clássico atualmente, pois o Front Door do Azure Clássico será preterido até março de 2027.",
+ "waf": "Operações"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
- "severity": "Baixo",
- "text": "Habilite o dimensionamento automático para os aplicativos com o plano de consumo padrão e dedicado.",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
+ "severity": "Média",
+ "text": "Considere usar o balanceamento de carga do Gerenciador de Tráfego, o Azure Front Door e um perfil de CDN de provedor de CDN de terceiros para o cenário de alta disponibilidade crítico. ",
"waf": "Fiabilidade"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
- "severity": "Média",
- "text": "Use o plano Enterprise para suporte comercial de inicialização spring para aplicativos de missão crítica. Com outras camadas, você obtém suporte a OSS.",
- "waf": "Fiabilidade"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
+ "severity": "Alto",
+ "text": "Ao usar o Front Door com origem como serviços de aplicativos, considere bloquear o tráfego para serviços de aplicativos somente por meio do Azure Front Door usando restrições de acesso. ",
+ "waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "O Hub de Eventos do Azure fornece criptografia de dados em repouso. Se você usar sua própria chave, os dados ainda serão criptografados usando a chave gerenciada pela Microsoft, mas, além disso, a chave gerenciada pela Microsoft será criptografada usando a chave gerenciada pelo cliente. ",
"guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
@@ -7495,6 +9831,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Os namespaces dos Hubs de Eventos do Azure permitem que os clientes enviem e recebam dados com TLS 1.0 e superior. Para impor medidas de segurança mais rígidas, você pode configurar o namespace dos Hubs de Eventos para exigir que os clientes enviem e recebam dados com uma versão mais recente do TLS. Se um namespace de Hubs de Eventos exigir uma versão mínima do TLS, todas as solicitações feitas com uma versão mais antiga falharão. ",
"guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
@@ -7506,6 +9843,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Quando você cria um namespace de Hubs de Eventos, uma regra de política chamada RootManageSharedAccessKey é criada automaticamente para o namespace. Essa política tem permissões de gerenciamento para todo o namespace. É recomendável que você trate essa regra como uma conta raiz administrativa e não a use em seu aplicativo. Recomenda-se o uso do AAD como um provedor de autenticação com RBAC. ",
"guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
@@ -7517,6 +9855,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "As identidades gerenciadas para recursos do Azure podem autorizar o acesso a recursos dos Hubs de Eventos usando credenciais do Azure AD de aplicativos em execução em VMs (Máquinas Virtuais) do Azure, aplicativos de Função, Conjuntos de Dimensionamento de Máquina Virtual e outros serviços. Usando identidades gerenciadas para recursos do Azure junto com a autenticação do Azure AD, você pode evitar o armazenamento de credenciais com seus aplicativos executados na nuvem. ",
"guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
@@ -7528,6 +9867,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Ao criar permissões, forneça controle refinado sobre o acesso de um cliente ao Hub de Eventos do Azure. As permissões no Hub de Eventos do Azure podem e devem ter o escopo definido para o nível de recurso individual, por exemplo, grupo de consumidores, entidade de hub de eventos, namespaces de hub de eventos, etc.",
"guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
@@ -7539,6 +9879,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Os logs de recursos do Hub de Eventos do Azure incluem logs operacionais, logs de rede virtual e logs de Kafka. Os logs de auditoria de tempo de execução capturam informações de diagnóstico agregadas para todas as operações de acesso ao plano de dados (como eventos de envio ou recebimento) nos Hubs de Eventos.",
"guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
@@ -7550,6 +9891,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Por padrão, o Hub de Eventos do Azure tem um endereço IP público e pode ser acessado pela Internet. Os pontos de extremidade privados permitem que o tráfego entre sua rede virtual e o Hub de Eventos do Azure percorra a rede de backbone da Microsoft. Além disso, você deve desabilitar os pontos de extremidade públicos se eles não forem usados. ",
"guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
@@ -7561,6 +9903,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Com o firewall IP, você pode restringir ainda mais o ponto de extremidade público a apenas um conjunto de endereços IPv4 ou intervalos de endereços IPv4 na notação CIDR (Roteamento entre Domínios Sem Classe). ",
"guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
@@ -7572,6 +9915,7 @@
"waf": "Segurança"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"guid": "31d41e36-11c8-417b-8afb-c410d4391898",
"link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
@@ -7581,6 +9925,7 @@
"waf": "Fiabilidade"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": " Isso será ativado automaticamente para um novo namespace de EH criado a partir do portal com SKUs Premium, Dedicado ou Standard em uma região habilitada para região. Os metadados do EH e os próprios dados do evento são replicados entre zonas",
"guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
@@ -7591,6 +9936,7 @@
"waf": "Fiabilidade"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"guid": "20b56c56-ad58-4519-8f82-735c586bb281",
"link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
@@ -7600,6 +9946,7 @@
"waf": "Fiabilidade"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "O recurso interno de recuperação de desastres geográficos, quando habilitado, garante que toda a configuração de um namespace (Hubs de Eventos, Grupos de Consumidores e configurações) seja replicada continuamente de um namespace primário para um namespace secundário e permite uma movimentação de failover única do primário para o secundário a qualquer momento. O recurso Ativo/Passivo foi projetado para facilitar a recuperação e o abandono de uma região do Azure com falha sem precisar alterar as configurações do aplicativo",
"guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
@@ -7610,6 +9957,7 @@
"waf": "Fiabilidade"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"description": "Deve ser usado para configurações de DR em que uma interrupção ou perda de dados de eventos na região derrubada não pode ser tolerada. Para esses casos, siga as diretrizes de replicação e não use o recurso interno de recuperação de desastres geográficos (ativo/passivo). Com Ativo/Ativo, mantenha vários Hubs de Eventos em diferentes regiões e namespaces, e os eventos serão replicados entre os hubs",
"guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
@@ -7620,6 +9968,7 @@
"waf": "Fiabilidade"
},
{
+ "arm-service": "microsoft.eventhub/namespaces",
"checklist": "Azure Event Hub Review",
"guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
"link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
@@ -7627,200 +9976,11 @@
"severity": "Média",
"text": "Projetar Hubs de Eventos Resilientes",
"waf": "Fiabilidade"
- },
- {
- "checklist": "IoT Hub Review",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
- "severity": "Alto",
- "text": "Aproveitar zonas de disponibilidade, se aplicável regionalmente (isso é habilitado automaticamente)",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "IoT Hub Review",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "severity": "Média",
- "text": "Esteja ciente dos failovers iniciados pela Microsoft. Eles são exercidos pela Microsoft em raras situações para fazer failover de todos os hubs IoT de uma região afetada para a região geo-emparelhada correspondente.",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "IoT Hub Review",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
- "severity": "Alto",
- "text": "Considere uma estratégia de DR entre regiões para cargas de trabalho críticas",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "IoT Hub Review",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "severity": "Alto",
- "text": "Saiba como acionar um failover manual.",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "IoT Hub Review",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
- "severity": "Alto",
- "text": "Saiba como fazer failback após um failover.",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
- "severity": "Alto",
- "text": "Permitir que 2 réplicas tenham 99,9% de disponibilidade para operações de leitura",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
- "severity": "Média",
- "text": "Permitir que 3 réplicas tenham 99,9% de disponibilidade para operações de leitura/gravação",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
- "severity": "Alto",
- "text": "Aproveite as zonas de disponibilidade habilitando réplicas de leitura e/ou gravação",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
- "severity": "Média",
- "text": "Para redução regional, crie manualmente serviços em 2 ou mais regiões para a Pesquisa, pois não fornece um método automatizado de replicação de índices de pesquisa entre regiões geográficas",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
- "severity": "Média",
- "text": "Para sincronizar dados em vários serviços: Use indexadores para atualizar conteúdo em vários serviços ou Use APIs REST para enviar atualizações de conteúdo em vários serviços",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
- "severity": "Média",
- "text": "Usar o Gerenciador de Tráfego do Azure para coordenar solicitações",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
- "severity": "Alto",
- "text": "Backup e restauração de um índice de pesquisa cognitiva do Azure. Use este código de exemplo para fazer backup da definição de índice e instantâneo em uma série de arquivos Json",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
- "severity": "Média",
- "text": "Use o token revogável de longa duração, armazene seu token em cache e adquira o token silenciosamente usando a Microsoft Identity Library",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
- "severity": "Média",
- "text": "Certifique-se de que os fluxos de usuário de entrada sejam armazenados em backup e resilientes. Certifique-se de que o código que você usa para entrar em seus usuários é de backup e recuperável. Interfaces resilientes com processos externos",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
- "severity": "Média",
- "text": "Os ativos de marca personalizados devem ser hospedados em uma CDN",
- "waf": "Desempenho"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
- "severity": "Baixo",
- "text": "Ter vários provedores de identidade (ou seja, fazer login com suas contas da Microsoft, Google, Facebook)",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "Média",
- "text": "Siga as regras de VM para alta disponibilidade no nível da VM (discos premium, dois ou mais em uma região, em zonas de disponibilidade diferentes)",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "Média",
- "text": "Não replique! A replicação pode criar problemas com a sincronização de diretórios",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
- "severity": "Média",
- "text": "Ter ativo-ativo para várias regiões",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "severity": "Média",
- "text": "Adicionar carimbos de serviço de Domínio do Azure AD a regiões e locais adicionais",
- "waf": "Fiabilidade"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "severity": "Média",
- "text": "Usar conjuntos de réplicas para DR",
- "waf": "Fiabilidade"
}
],
"metadata": {
"name": "WAF checklist",
- "timestamp": "June 24, 2024"
+ "timestamp": "October 02, 2024"
},
"severities": [
{
@@ -7848,7 +10008,7 @@
},
{
"description": "Recomendação compreendida, mas não necessária pelos requisitos atuais",
- "name": "Não é necessário"
+ "name": "Risco aceito"
},
{
"description": "Não aplicável ao projeto atual",
diff --git a/checklists/waf_checklist.zh-Hant.json b/checklists/waf_checklist.zh-Hant.json
index 99f2d0d20..8447891cf 100644
--- a/checklists/waf_checklist.zh-Hant.json
+++ b/checklists/waf_checklist.zh-Hant.json
@@ -1,6 +1,7 @@
{
"items": [
{
+ "arm-service": "Microsoft.Devices/provisioningServices",
"checklist": "Device Provisioning Service Review",
"guid": "cb26b2ba-a9db-45d1-8260-d9c6ec1447d9",
"link": "https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare",
@@ -10,6 +11,7 @@
"waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Devices/provisioningServices",
"checklist": "Device Provisioning Service Review",
"guid": "f6dd7977-1123-4f39-b488-f91415a8430a",
"link": "https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
@@ -19,6 +21,7 @@
"waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Devices/provisioningServices",
"checklist": "Device Provisioning Service Review",
"guid": "8aed4fbf-0830-4883-899d-222a154af478",
"link": "https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
@@ -28,6 +31,7 @@
"waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Devices/provisioningServices",
"checklist": "Device Provisioning Service Review",
"guid": "da0f033e-d180-4f36-9aa4-c468dba14203",
"link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
@@ -37,6 +41,7 @@
"waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Devices/provisioningServices",
"checklist": "Device Provisioning Service Review",
"guid": "62711604-c9d1-4b0a-bdb7-5fda54a4f6c1",
"link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
@@ -46,393 +51,1431 @@
"waf": "操作"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
- "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
- "service": "Entra",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "使用長期可撤銷令牌,緩存令牌並使用 Microsoft 標識庫以靜默方式獲取令牌",
+ "text": "Azure Spring Apps 允許對每個應用進行兩次部署,其中只有一個部署接收生產流量。您可以使用藍綠部署策略實現零停機時間。藍綠部署僅在標準層和企業層中可用。可以使用 CI/CD 和 ADO/GitHub 操作自動執行部署",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
- "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
- "service": "AAD B2C",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
+ "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "請確保登錄使用者流已備份並具有復原能力。請確保用於登錄使用者的代碼已備份且可恢復。與外部進程的彈性介面",
+ "text": "可以在多個區域中為應用程式創建 Azure Spring Apps 實例,並且流量管理器/Front Door 可以路由流量。",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
- "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
- "service": "AAD B2C",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
+ "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "自訂品牌資產應託管在CDN上",
- "waf": "性能"
- },
- {
- "checklist": "Identity Review Checklist",
- "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
- "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
- "service": "AAD B2C",
- "severity": "低",
- "text": "擁有多個標識提供者(即使用您的 Microsoft、Google、Facebook 帳戶登錄)",
+ "text": "在支持的區域中,Azure Spring Apps 可以部署為區域冗餘,這意味著實例會自動分佈在可用性區域之間。此功能僅在標準層和企業層中可用。",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
+ "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "遵循 VM 規則,實現 VM 級別的高可用性(高級磁碟,一個區域中的兩個或更多磁碟,位於不同的可用性區域)",
+ "text": "對應用使用1個以上的應用實例",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "7504c230-6035-4183-95a5-85762acc6075",
+ "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "不要複製!複製可能會產生目錄同步問題",
+ "text": "使用日誌、指標和跟蹤監視 Azure Spring Apps。將 ASA 與應用程式見解集成,並跟蹤故障並創建工作簿。",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
- "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
- "service": "Windows AD",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "對多區域具有主動-主動",
+ "text": "在 Spring Cloud Gateway 中設置自動縮放",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
- "severity": "中等",
- "text": "將 Azure AD 域服務標記添加到其他區域和位置",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
+ "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
+ "service": "Spring Apps",
+ "severity": "低",
+ "text": "為具有標準使用量和專用計劃的應用啟用自動縮放。",
"waf": "可靠性"
},
{
- "checklist": "Identity Review Checklist",
- "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
- "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
- "service": "Entra",
+ "arm-service": "Microsoft.AppPlatform/Spring",
+ "checklist": "Azure Spring Apps Review",
+ "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
+ "link": "https://learn.microsoft.com/azure/spring-apps/overview",
+ "service": "Spring Apps",
"severity": "中等",
- "text": "將副本集用於DR",
- "waf": "可靠性"
- },
- {
- "checklist": "IoT Hub Review",
- "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
- "service": "IoT",
- "severity": "高",
- "text": "利用可用區(如果區域適用)(這是自動啟用的)",
+ "text": "使用企業計劃為關鍵任務應用提供 Spring Boot 的商業支援。使用其他層,您可以獲得 OSS 支援。",
"waf": "可靠性"
},
{
- "checklist": "IoT Hub Review",
- "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "severity": "中等",
- "text": "請注意 Microsoft 發起的故障轉移。Microsoft 在極少數情況下會執行這些操作,以將所有IoT中心從受影響的區域故障轉移到相應的異地配對區域。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
+ "service": "Azure Monitor",
+ "text": "Azure Monitor 中的數據收集規則 -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "成本"
},
{
- "checklist": "IoT Hub Review",
- "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
- "service": "IoT",
- "severity": "高",
- "text": "考慮為關鍵工作負載制定跨區域災難恢復策略",
- "waf": "可靠性"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "45901365-d38e-443f-abcb-d868266abca2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Azure Backup",
+ "text": "檢查未找到底層數據源的備份實例",
+ "waf": "成本"
},
{
- "checklist": "IoT Hub Review",
- "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
- "service": "IoT",
- "severity": "高",
- "text": "瞭解如何觸發手動故障轉移。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "VM",
+ "text": "刪除或存檔未關聯的服務(磁碟、網卡、IP 位址等)",
+ "waf": "成本"
},
{
- "checklist": "IoT Hub Review",
- "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
- "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
- "service": "IoT",
- "severity": "高",
- "text": "瞭解如何在故障轉移後進行故障回復。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Azure Backup",
+ "text": "考慮在網站恢復存儲和非任務關鍵型應用程式的備份之間取得良好的平衡",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
- "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
- "service": "AKS",
- "severity": "低",
- "text": "如果 AKS Windows 工作負載需要,可以使用 HostProcess 容器",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
+ "service": "Azure Monitor",
+ "text": "檢查 40 個不同 Log Analytics 工作區之間的支出和節省機會 - 對非生產工作區使用不同的保留和數據收集 - 創建每日上限以實現意識和層大小調整 - 如果確實設置了每日上限,除了在達到上限時創建警報外,請確保還創建警報規則,以便在達到某個百分比(例如 90%)時收到通知。- 如果可能,考慮工作空間改造 - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
- "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
- "service": "AKS",
- "severity": "低",
- "text": "如果運行事件驅動的工作負載,請使用KEDA",
- "waf": "性能"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Azure Monitor",
+ "text": "強制執行清除日誌策略和自動化(如果需要,可以將記錄移至冷存儲)",
+ "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
- "link": "https://dapr.io/",
- "service": "AKS",
- "severity": "低",
- "text": "使用 Dapr 簡化微服務開發",
- "waf": "操作"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "VM",
+ "text": "檢查磁碟是否確實需要,如果不是:刪除。如果需要,請尋找較低的儲存層或使用備份 -",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
- "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
- "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
- "service": "AKS",
- "severity": "高",
- "text": "使用 SLA 支援的 AKS 產品/服務",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
+ "service": "Storage",
+ "text": "考慮使用自定義規則將未使用的存儲移動到較低層 - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
- "service": "AKS",
- "severity": "低",
- "text": "在容器和部署定義中使用中斷預算",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "VM",
+ "text": "確保 advisor 配置為適合 VM 大小調整",
+ "waf": "成本"
},
{
- "checklist": "Azure AKS Review",
- "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
- "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
- "service": "ACR",
- "severity": "高",
- "text": "如果使用專用註冊表,請配置區域複製以將映像存儲在多個區域中",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "description": "通過在成本分析系統中搜索計量類別許可證進行檢查",
+ "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
+ "service": "VM",
+ "text": "在所有 Windows VM 上運行腳本 https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server - 如果頻繁創建 Windows VM,請考慮實施策略",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
- "service": "AKS",
- "severity": "低",
- "text": "使用外部應用(如 kubecost)將成本分配給不同的使用者",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "VM",
+ "text": "如果您已經擁有許可證,也可以將其置於 AHUB https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
"waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
- "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
- "service": "AKS",
- "severity": "低",
- "text": "使用縮減模式刪除/取消分配節點",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "VM",
+ "text": "使用靈活性選項(不超過 4-5 個系列)整合保留的 VM 系列",
+ "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
"waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
- "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
- "service": "AKS",
- "severity": "中等",
- "text": "需要時,請在 AKS 群集上使用多實例分組 GPU",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
+ "service": "VM",
+ "text": "利用 Azure 預留實例:此功能允許將 VM 預留 1 年或 3 年,與 PAYG 價格相比,可顯著節省成本。",
"waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
- "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
- "service": "AKS",
- "severity": "低",
- "text": "如果運行開發/測試群集,請使用 NodePool Start/Stop",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
+ "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
+ "service": "VM",
+ "text": "只能保留較大的磁碟 => 1 TiB -",
"waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
- "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
- "service": "AKS",
- "severity": "中等",
- "text": "使用適用於 Kubernetes 的 Azure Policy 確保群集符合性",
- "waf": "安全"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
- "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "中等",
- "text": "使用使用者/系統節點池將應用程式與控制平面分開",
- "waf": "安全"
- },
- {
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
- "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
- "service": "AKS",
- "severity": "低",
- "text": "向系統節點池添加污點以使其專用",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
+ "service": "VM",
+ "text": "調整大小優化后",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
- "link": "https://learn.microsoft.com/azure/container-registry/",
- "service": "AKS",
- "severity": "中等",
- "text": "對映像使用專用註冊表,例如 ACR",
- "waf": "安全"
+ "arm-service": "Microsoft.Sql/servers",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Azure SQL",
+ "text": "檢查是否適用並強制執行策略/更改 https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
+ "waf": "成本"
},
{
- "checklist": "Azure AKS Review",
- "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
- "link": "https://learn.microsoft.com/azure/security-center/container-security",
- "service": "ACR",
- "severity": "中等",
- "text": "掃描映像以查找漏洞",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "VM",
+ "text": "虛擬機 + 許可證部分折扣 (ahub + 3YRI) 約為 70% 的折扣",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
- "service": "AKS",
- "severity": "高",
- "text": "定義應用分離要求(命名空間/節點池/集群)",
- "waf": "安全"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "VM",
+ "text": "考慮使用 VMSS 來滿足需求,而不是按比例調整",
+ "waf": "成本"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
- "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
"service": "AKS",
- "severity": "中等",
- "text": "使用 CSI 機密存儲驅動程式將機密存儲在 Azure Key Vault 中",
- "waf": "安全"
+ "text": "使用 AKS 自動縮放程式符合群集使用方式(確保 Pod 要求與縮放程式符合)",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
- "link": "https://learn.microsoft.com/azure/aks/update-credentials",
- "service": "AKS",
- "severity": "高",
- "text": "如果將服務主體用於群集,請定期刷新憑據(如每季度)",
- "waf": "安全"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Azure Backup",
+ "text": "將恢復點移至保管庫存檔(如果適用)(驗證)",
+ "training": "https://azure.microsoft.com/pricing/reservations/",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
- "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
- "service": "AKS",
- "severity": "中等",
- "text": "如果需要,請添加金鑰管理服務 etcd 加密",
- "waf": "安全"
+ "arm-service": "Microsoft.Databricks/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
+ "service": "Databricks",
+ "text": "請考慮盡可能使用帶回退功能的現成 VM。考慮群集的自動終止。",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
- "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
- "service": "AKS",
- "severity": "低",
- "text": "如果需要,請考慮使用適用於 AKS 的機密計算",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
+ "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
+ "service": "Azure Functions",
+ "text": "功能 - 重用連接",
+ "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
- "service": "AKS",
- "severity": "中等",
- "text": "考慮使用 Defender for Containers",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
+ "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
+ "service": "Azure Functions",
+ "text": "函數 - 本地快取資料",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
- "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
- "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
- "service": "AKS",
- "severity": "高",
- "text": "使用託管標識而不是服務主體",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Azure Functions",
+ "text": "函數 - 冷啟動 - 使用“從包運行”功能。這樣,代碼將下載為單個 zip 檔。例如,這可以顯著改進具有大量節點模組的 Javascript 函數。使用特定於語言的工具來減小包大小,例如,搖樹 Javascript 應用程式。",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
- "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
- "link": "https://learn.microsoft.com/azure/aks/managed-aad",
- "service": "AKS",
- "severity": "中等",
- "text": "將身份驗證與 AAD(使用託管集成)集成",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
+ "service": "Azure Functions",
+ "text": "功能 - 保持功能溫暖",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
- "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
- "service": "AKS",
- "severity": "中等",
- "text": "限制對管理員 kubeconfig (get-credentials --admin) 的訪問",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Azure Functions",
+ "text": "使用具有不同功能的自動縮放時,可能會有一個資源驅動所有資源的所有自動縮放 - 請考慮將其移動到單獨的消耗計劃(並考慮更高的 CPU 計劃)",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
- "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
- "service": "AKS",
- "severity": "中等",
- "text": "將授權與 AAD RBAC 集成",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
+ "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
+ "service": "Azure Functions",
+ "text": "給定計劃中的函數應用都縮放在一起,因此縮放的任何問題都可能影響計劃中的所有應用。",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Azure AKS Review",
- "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
- "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
- "service": "AKS",
- "severity": "高",
- "text": "在 Kubernetes 中使用命名空間限制 RBAC 許可權",
- "waf": "安全"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
+ "service": "Azure Functions",
+ "text": "我需要為「等待時間」付費嗎?這個問題通常是在執行異步操作並等待結果的 C# 函數的上下文中提出的,例如 await Task.Delay(1000) 或 await client。GetAsync('http://google.com')。答案是肯定的 - GB 秒計算基於函數的開始和結束時間以及該時間段內的記憶體使用方式。在這段時間內實際發生的CPU活動未計入計算。此規則的一個例外是,如果使用的是持久函數。您無需為在業務流程協調程式函數中等待所花費的時間付費。在可能的情況下應用需求塑造技術(開發環境?)https://github.com/Azure-Samples/functions-csharp-premium-scaler",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Front Door",
+ "text": "Frontdoor - 關閉預設主頁在應用的應用程式設置中,將 AzureWebJobsDisableHomepage 設置為 true。這將向PoP返回204(無內容),因此僅返回標頭數據。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Front Door",
+ "text": "Frontdoor - 路由到不返回任何內容的內容。設置函數、函數代理,或在 WebApp 中添加返回 200 (OK) 且不發送內容或發送最少內容的路由。這樣做的好處是您可以在調用時註銷。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
+ "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
+ "service": "Storage",
+ "text": "考慮為使用較少的數據存檔層",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "VM",
+ "text": "檢查大小與層不匹配的磁碟大小(即 513 GiB 磁碟將支付 P30 (1TiB) 並考慮調整大小",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "Storage",
+ "text": "盡可能考慮使用標準 SSD,而不是 Premium 或 Ultra",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "Storage",
+ "text": "對於存儲帳戶,請確保所選層不會增加事務費用(移動到下一層可能會更便宜)",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "Site Recovery",
+ "text": "對於 ASR,如果 RPO/RTO 和複製輸送量允許,請考慮使用標準 SSD 磁碟",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
+ "service": "Storage",
+ "text": "存儲帳戶:檢查熱層和/或 GRS 必填",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "VM",
+ "text": "磁碟 - 驗證高級 SSD 磁碟在任何地方的使用方式:例如,非生產磁碟可以交換到標準 SSD 或按需高級 SSD",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
+ "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
+ "service": "Synapse",
+ "text": "創建預算以管理成本並創建警報,自動通知利益相關者支出異常和超支風險。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "Synapse",
+ "text": "將成本數據匯出到存儲帳戶以進行其他數據分析。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Synapse",
+ "text": "通過在不使用資源時暫停資源來控制專用 SQL 池的成本。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
+ "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
+ "service": "Synapse",
+ "text": "啟用無伺服器 Apache Spark 自動暫停功能,並相應地設置超時值。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Synapse",
+ "text": "創建多個不同大小的 Apache Spark 池定義。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Synapse/workspaces",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
+ "service": "Synapse",
+ "text": "使用預購計劃購買為期一年的 Azure Synapse 提交單元 (SCU),以節省 Azure Synapse Analytics 成本。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "VM",
+ "text": "將現成 VM 用於可中斷作業:這些 VM 可以以折扣價競標和購買,為非關鍵工作負載提供經濟高效的解決方案。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "VM",
+ "text": "合理調整所有 VM 的大小",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "VM",
+ "text": "將 VM 大小與規範化大小和最新大小交換",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "調整 VM 大小 - 從低於 5% 的監視使用率開始,然後工作到 40%",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Cost Optimization Checklist",
+ "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "VM",
+ "text": "容器化應用程式可以提高 VM 密度並節省擴展成本",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "6d37a33b-531c-4a91-871a-b69d8044f04e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "高",
+ "text": "熟悉 Key Vault 的最佳實踐,例如隔離建議、訪問控制、數據保護、備份和日誌記錄。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "Key Vault 是一項託管服務,Microsoft 將處理區域內和區域之間的故障轉移。熟悉 Key Vault 的可用性和冗餘。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "17fb86a2-eb45-42a4-9c34-52b92a2a1842",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "密鑰保管庫的內容將在區域內複製到至少 150 英里外的次要區域,但要在同一地理位置內,以保持金鑰和機密的高持久性。熟悉 Key Vault 的數據複製。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "614682ca-6e0c-4f34-9f03-c6d3f2b99a32",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "在故障轉移期間,無法訪問策略或防火牆配置和設置。在故障轉移期間,金鑰保管庫將處於只讀模式。熟悉 Key Vault 的故障轉移指南。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "9ef2b0d2-3206-4c94-b47a-4f07e6a1c509",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "備份金鑰保管庫物件(例如機密、金鑰或證書)時,備份操作會將該物件下載為加密的 blob。無法在 Azure 外部解密此 blob。若要從此 blob 獲取可用數據,必須將 blob 還原到同一 Azure 訂閱和 Azure 地理位置中的金鑰保管庫中。熟悉 Key Vault 的備份和還原指南。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "2df045b1-c0f6-47d3-9a9b-99cf6999684e",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "高",
+ "text": "如果要防止意外或惡意刪除機密,請在密鑰保管庫上配置軟刪除和清除保護功能。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "cbfa96b0-5249-4e6f-947c-d0e79509708c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
+ "service": "Key Vault",
+ "severity": "低",
+ "text": "Key Vault 的軟刪除資源將保留 90 個日曆日的固定期限。熟悉 Key Vault 的軟刪除指南。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "e8659d11-7e02-4db0-848c-c6541dbab68c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低",
+ "text": "瞭解 Key Vault 的備份限制。Key Vault 不支援備份超過 500 個金鑰、機密或證書對象的過去版本。嘗試備份金鑰、金鑰或證書物件可能會導致錯誤。無法刪除金鑰、金鑰或證書的早期版本。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "45c25e29-d0ef-4f07-aa04-0f8c64cbcc04",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations",
+ "service": "Key Vault",
+ "severity": "低",
+ "text": "Key Vault 目前不提供在單個操作中備份整個 Key Vault 的方法,並且必須單獨備份密鑰、機密和證書。熟悉 Key Vault 的備份和還原指南。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "guid": "0f15640b-31e5-4de6-85a7-d2c652fa09d3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "使用金鑰進行加密時,建議使用清除保護,以防止數據丟失。清除保護是一種可選的 Key Vault 行為,預設情況下未啟用。只有在啟用軟刪除後,才能啟用清除保護。可以通過 CLI、PowerShell 或 Portal 打開它。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Key Vault",
+ "graph": "resources| where type =~ 'microsoft.keyvault/vaults' | extend compliant = (properties.enableRbacAuthorization == true) | distinct id, compliant",
+ "guid": "d0642c1c-312b-4116-94ab-439e1c836819",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "建議使用 RBAC 來控制對 Key Vault 的訪問。熟悉 Key Vault 的訪問控制指南。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
+ "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "確保使用的是應用程式閘道 v2 SKU",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
+ "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "Load Balancer",
+ "severity": "中等",
+ "text": "確保將標準 SKU 用於 Azure 負載均衡器",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
+ "service": "Load Balancer",
+ "severity": "中等",
+ "text": "確保您的負載均衡器前端IP位址是區域冗餘的(除非您需要可用區前端)。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
+ "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "應用程式閘道 v2 應部署在IP前綴等於或大於 /24 的子網中",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "description": "一般來說,反向代理(尤其是 WAF)的管理更接近應用程式而不是網路,因此它們與應用程式屬於同一訂閱。如果應用程式閘道和 WAF 由一個團隊管理,則將其集中在連接訂閱中可能是可以的。",
+ "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "部署 Azure 應用程式閘道 v2 或合作夥伴 NVA,用於在登陸區虛擬網路中代理入站 HTTP(S) 連接,以及它們所保護的應用。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "對應用程式登陸區域中的所有公共IP位址使用 DDoS 網路或IP保護計畫。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
+ "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "配置自動縮放,最小實例數為 2。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
+ "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
+ "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "跨可用區部署應用程式閘道",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "使用 Front Door 和應用程式閘道幫助保護 HTTP/S 應用時,請在 Front Door 中使用 WAF 策略。鎖定應用程式閘道以僅接收來自 Front Door 的流量。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/trafficManagerProfiles",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Traffic Manager",
+ "severity": "高",
+ "text": "使用流量管理器交付跨 HTTP/S 以外的協定的全域應用。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "可靠性"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "低",
+ "text": "如果使用者只需要存取內部應用程式,是否考慮將 Microsoft Entra ID 應用程式代理作為 Azure 虛擬桌面 (AVD) 的替代方案?",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "安全"
+ },
+ {
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "Entra",
+ "severity": "中等",
+ "text": "要減少網路中為傳入連接打開的防火牆埠數,請考慮使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對內部應用程式的安全且經過身份驗證的訪問。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "Microsoft.Network/loadBalancers",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
+ "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "Load Balancer",
+ "severity": "高",
+ "text": "使用 Azure NAT 閘道而不是負載均衡器出站規則來提高 SNAT 可伸縮性",
+ "waf": "可靠性"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
+ "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "啟用 Azure 應用程式閘道 WAF 機器人保護規則集。機器人規則檢測好的機器人和壞的機器人。",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "確保 Azure 應用程式閘道 WAF 策略中是否啟用了請求正文檢查功能。",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "在檢測模式下優化工作負載的 Azure 應用程式閘道 WAF。減少誤報檢測。",
+ "waf": "安全"
+ },
+ {
+ "ammp": true,
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview?source=recommendations",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "在「防護」模式下部署應用程式閘道的 WAF 策略。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "向 Azure 應用程式閘道 WAF 添加速率限制。Rate limit 會阻止客戶端在短時間內意外或故意發送大量流量。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "對 Azure 應用程式閘道 WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎設施不堪重負的極大量請求提供保護。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
+ "service": "App Gateway",
+ "severity": "低",
+ "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選條件來阻止來自非預期國家/地區的流量。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "在使用 Azure 應用程式閘道 WAF 對流量進行異地篩選時,指定未知 (ZZ) 位置。避免在IP位址無法進行異地匹配時意外阻止合法請求。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "使用最新的 Azure 應用程式閘道 WAF 規則集版本。規則集更新會定期更新,以考慮當前的威脅形勢。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "添加診斷設置以保存 Azure 應用程式閘道 WAF 紀錄。",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "將 Azure 應用程式閘道 WAF 紀錄發送到 Microsoft Sentinel。",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "將 Azure 應用程式閘道 WAF 設定定義為代碼。通過使用代碼,您可以更輕鬆地採用新的規則集版本並獲得額外的保護。",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "使用 WAF 策略而不是舊版 WAF 配置。",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "篩選後端中的入站流量,使其僅接受來自應用程式閘道子網的連接,例如使用NSG的連接。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "您應該對到後端伺服器的流量進行加密。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "您應該使用 Web 應用程式防火牆。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "將 HTTP 重定向到 HTTPS",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
+ "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "使用閘道託管的 Cookie 將流量從使用者工作階段定向到同一伺服器進行處理",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
+ "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "在計劃內服務更新期間啟用連接耗盡,以防止後端池的現有成員失去連接",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
+ "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
+ "service": "App Gateway",
+ "severity": "低",
+ "text": "創建自訂錯誤頁面以顯示個人化的用戶體驗",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
+ "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "編輯 HTTP 請求和回應標頭,以便更輕鬆地在用戶端和伺服器之間進行路由和資訊交換",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "配置 Front Door 以優化全域 Web 流量路由和頂級最終使用者性能,並通過快速全域故障轉移實現可靠性",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "使用傳輸層負載均衡",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
+ "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "為單個閘道上的多個 Web 應用程式配置基於主機名稱或功能變數名稱的路由",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
+ "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
+ "service": "App Gateway",
+ "severity": "中等",
+ "text": "集中 SSL 證書管理以減少後端伺服器場的加密和解密開銷",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
+ "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
+ "service": "App Gateway",
+ "severity": "低",
+ "text": "使用應用程式閘道實現對 WebSocket 和 HTTP/2 協定的本機支援",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
+ "service": "Redis",
+ "severity": "高",
+ "text": "為 Azure Cache for Redis 啟用區域冗餘。Azure Cache for Redis 支持高級層和企業層中的區域冗餘配置。區域冗餘緩存可以將其節點放置在同一區域的不同 Azure 可用性區域中。它消除了作為單點故障的數據中心或可用區中斷,並提高了緩存的整體可用性。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
+ "service": "Redis",
+ "severity": "中等",
+ "text": "為 Azure Cache for Redis 實例配置數據持久性。由於緩存數據存儲在記憶體中,因此多個節點的罕見和計劃外故障可能會導致所有數據被丟棄。為了避免完全丟失數據,Redis 持久性允許您定期拍攝記憶體中數據的快照,並將其存儲到存儲帳戶中。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
+ "service": "Redis",
+ "severity": "中等",
+ "text": "使用異地冗餘存儲帳戶保留 Azure Cache for Redis 數據,或在異地冗餘不可用的情況下使用區域冗餘",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.cache/redis",
+ "checklist": "Redis Resiliency checklist",
+ "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
+ "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
+ "service": "Redis",
+ "severity": "中等",
+ "text": "為高級 Azure Cache for Redis 實例配置被動異地複製。異地複製是一種用於連結兩個或多個 Azure Cache for Redis 實例的機制,通常跨越兩個 Azure 區域。異地複製主要用於跨區域災難恢復。兩個高級層緩存實例通過異地複製進行連接,從而提供對主緩存的讀取和寫入,並將數據複製到輔助緩存。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "severity": "高",
+ "text": "根據您的業務和 SLO 要求選擇正確的功能託管計劃",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
+ "service": "Azure Functions",
+ "severity": "高",
+ "text": "利用區域適用的可用區(不適用於消耗層)",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
+ "service": "Azure Functions",
+ "severity": "中等",
+ "text": "考慮為關鍵工作負載制定跨區域災難恢復策略",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
+ "service": "Azure Functions",
+ "severity": "高",
+ "text": "如果部署到獨立環境,請使用或遷移到應用服務環境 (ASE) v3",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "Azure Functions",
+ "severity": "高",
+ "text": "確保為應用服務計劃上運行的所有函數應用啟用“始終開啟”",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
+ "service": "Azure Functions",
+ "severity": "中等",
+ "text": "將函數應用與其自己的存儲帳戶配對。盡量不要重用函數應用的存儲帳戶,除非它們緊密耦合",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Azure Function Review",
+ "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
+ "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
+ "service": "Azure Functions",
+ "severity": "中等",
+ "text": "利用 Azure DevOps 或 GitHub 簡化 CI/CD 並保護函數應用代碼",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ab5351f6-383a-45ed-9c5e-b143b16db40a",
+ "link": "https://learn.microsoft.com/azure/aks/use-windows-hpc",
+ "service": "AKS",
+ "severity": "低",
+ "text": "如果 AKS Windows 工作負載需要,可以使用 HostProcess 容器",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a280dcf5-90ce-465d-b8e1-3f9ccbd46926",
+ "link": "https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda",
+ "service": "AKS",
+ "severity": "低",
+ "text": "如果運行事件驅動的工作負載,請使用KEDA",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "26886d20-b66c-457b-a591-19bf8e8f5c58",
+ "link": "https://dapr.io/",
+ "service": "AKS",
+ "severity": "低",
+ "text": "使用 Dapr 簡化微服務開發",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (sku.tier=='Paid') | distinct id,compliant",
+ "guid": "71d41e36-10cc-457b-9a4b-1410d4395898",
+ "link": "https://learn.microsoft.com/azure/aks/uptime-sla",
+ "service": "AKS",
+ "severity": "高",
+ "text": "使用 SLA 支援的 AKS 產品/服務",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c1288b3c-6a57-4cfc-9444-51e1a3d3453a",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler",
+ "service": "AKS",
+ "severity": "低",
+ "text": "在容器和部署定義中使用中斷預算",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "3c763963-7a55-42d5-a15e-401955387e5c",
+ "link": "https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication",
+ "service": "ACR",
+ "severity": "高",
+ "text": "如果使用專用註冊表,請配置區域複製以將映像存儲在多個區域中",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost",
+ "service": "AKS",
+ "severity": "低",
+ "text": "使用外部應用(如 kubecost)將成本分配給不同的使用者",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "4d3dfbab-9924-4831-a68d-fdf0d72f462c",
+ "link": "https://learn.microsoft.com/azure/aks/scale-down-mode",
+ "service": "AKS",
+ "severity": "低",
+ "text": "使用縮減模式刪除/取消分配節點",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "87e651ea-bc4a-4a87-a6df-c06a4b570ebc",
+ "link": "https://learn.microsoft.com/azure/aks/gpu-multi-instance",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "需要時,請在 AKS 群集上使用多實例分組 GPU",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "2b72a08b-0410-4cd6-9093-e068a5cf27e8",
+ "link": "https://learn.microsoft.com/azure/aks/start-stop-nodepools",
+ "service": "AKS",
+ "severity": "低",
+ "text": "如果運行開發/測試群集,請使用 NodePool Start/Stop",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true) | distinct id,compliant",
+ "guid": "9ca48e4a-85e2-4223-bce8-bb12307ca5f1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "使用適用於 Kubernetes 的 Azure Policy 確保群集符合性",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant = (poolcount > 1)",
+ "guid": "6f158e3e-a3a9-42c2-be7e-2165c3a87af4",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "使用使用者/系統節點池將應用程式與控制平面分開",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a7a1f893-9bda-4477-98f2-4c116775c2ea",
+ "link": "https://learn.microsoft.com/azure/aks/use-system-pools",
+ "service": "AKS",
+ "severity": "低",
+ "text": "向系統節點池添加污點以使其專用",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "55b46a94-8008-4ae7-b7e4-b475b6c8bdbf",
+ "link": "https://learn.microsoft.com/azure/container-registry/",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "對映像使用專用註冊表,例如 ACR",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerregistry/registries",
+ "checklist": "Azure AKS Review",
+ "guid": "59bce65d-e8a0-43f9-9879-468d66a786d6",
+ "link": "https://learn.microsoft.com/azure/security-center/container-security",
+ "service": "ACR",
+ "severity": "中等",
+ "text": "掃描映像以查找漏洞",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d167dd18-2b0a-4c24-8b99-9a646f8389a7",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation",
+ "service": "AKS",
+ "severity": "高",
+ "text": "定義應用分離要求(命名空間/節點池/集群)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "5e3df584-eccc-4d97-a3b6-bcda3b50eb2e",
+ "link": "https://github.com/Azure/secrets-store-csi-driver-provider-azure",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "使用 CSI 機密存儲驅動程式將機密存儲在 Azure Key Vault 中",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "b03dda6d-58d7-4c89-8ddb-107d5769ae66",
+ "link": "https://learn.microsoft.com/azure/aks/update-credentials",
+ "service": "AKS",
+ "severity": "高",
+ "text": "如果將服務主體用於群集,請定期刷新憑據(如每季度)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "e7ba73a3-0508-4f80-806f-527db30cee96",
+ "link": "https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "如果需要,請添加金鑰管理服務 etcd 加密",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "ec8e4e42-0344-41b0-b865-9123e8956d31",
+ "link": "https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview",
+ "service": "AKS",
+ "severity": "低",
+ "text": "如果需要,請考慮使用適用於 AKS 的機密計算",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "c9e95ffe-6dd1-4a17-8c5f-110389ca9b21",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "考慮使用 Defender for Containers",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant",
+ "guid": "ed127dd1-42b0-46b2-8c69-99a646f3389a",
+ "link": "https://learn.microsoft.com/azure/aks/use-managed-identity",
+ "service": "AKS",
+ "severity": "高",
+ "text": "使用託管標識而不是服務主體",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "graph": "where type=='microsoft.containerservice/managedclusters' | extend compliant = isnotnull(properties.aadProfile) | distinct id,compliant",
+ "guid": "7e42c78e-78c0-46a6-8a21-94956e698dc4",
+ "link": "https://learn.microsoft.com/azure/aks/managed-aad",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "將身份驗證與 AAD(使用託管集成)集成",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "a2fe27b2-e287-401a-8352-beedf79b488d",
+ "link": "https://learn.microsoft.com/azure/aks/control-kubeconfig-access",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "限制對管理員 kubeconfig (get-credentials --admin) 的訪問",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "eec4962c-c3bd-421b-b77f-26e5e6b3bec3",
+ "link": "https://learn.microsoft.com/azure/aks/manage-azure-rbac",
+ "service": "AKS",
+ "severity": "中等",
+ "text": "將授權與 AAD RBAC 集成",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.containerservice/managedClusters",
+ "checklist": "Azure AKS Review",
+ "guid": "d4f3537c-1346-4dc5-9027-a71ffe1bd05d",
+ "link": "https://learn.microsoft.com/azure/aks/operator-best-practices-identity",
+ "service": "AKS",
+ "severity": "高",
+ "text": "在 Kubernetes 中使用命名空間限制 RBAC 許可權",
+ "waf": "安全"
},
{
"arm-service": "microsoft.containerservice/managedClusters",
@@ -1206,6621 +2249,7738 @@
"waf": "性能"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
+ "service": "AVS",
"severity": "高",
- "text": "使 2 個副本具有 99.9% 的讀取操作可用性",
- "waf": "可靠性"
+ "text": "確保在本機 Azure 的標識訂閱中部署了 ADDS 域控制器",
+ "waf": "安全"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "75089c20-990d-4927-b105-885576f76fc2",
+ "service": "AVS",
"severity": "中等",
- "text": "使 3 個副本具有 99.9% 的讀/寫操作可用性",
- "waf": "可靠性"
+ "text": "確保將 ADDS 網站和服務配置為將來自基於 Azure 的資源(包括 Azure VMware 解決方案)的身份驗證請求保留到 Azure 本地",
+ "waf": "安全"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
+ "service": "AVS",
"severity": "高",
- "text": "通過啟用讀取和/或寫入副本來利用可用區",
- "waf": "可靠性"
+ "text": "確保 vCenter 已連接到 ADDS,以啟用基於「指定用戶帳戶」的身份驗證",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "確保從 vCenter 到 ADDS 的連接使用安全協定 (LDAPS)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "vCenter IdP 中的 CloudAdmin 帳戶僅用作緊急帳戶 (break-glass)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保 NSX-Manager 與外部身份提供程式 (LDAPS) 集成",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "是否已創建 RBAC 模型以在 VMware vSphere 中使用",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "RBAC 許可權應授予 ADDS 組,而不是特定使用者",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
+ "service": "AVS",
+ "severity": "高",
+ "text": "Azure 中 Azure VMware 解決方案資源的 RBAC 許可權僅「鎖定」為一組有限的擁有者",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保所有自定義角色的範圍都具有 CloudAdmin 允許的授權",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
+ "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
+ "service": "AVS",
+ "severity": "高",
+ "text": "是否為手頭的客戶用例選擇了正確的 Azure VMware 解決方案連接模型",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保使用「連接監視器」監視從本地到 Azure 的 ExpressRoute 或 VPN 連接",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "確保創建從 Azure 本機資源到 Azure VMware 解決方案虛擬機的連接監視器,以監視 Azure VMware 解決方案後端 ExpressRoute 連接",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "確保創建從本地資源到 Azure VMware 解決方案虛擬機的連接監視器,以監視端到端連接",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
+ "service": "AVS",
+ "severity": "高",
+ "text": "使用路由伺服器時,請確保從路由伺服器到 ExR 閘道再到本地的路由不超過 1000 個(ARS 限制)。",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
+ "service": "AVS",
+ "severity": "高",
+ "text": "是否為在 Azure 門戶中管理 Azure VMware 解決方案資源的角色實現了 Privileged Identity Management(不允許長期許可權)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
+ "service": "AVS",
+ "severity": "高",
+ "text": "應為 Azure VMware 解決方案 PIM 角色實現 Privileged Identity Management 審核報告",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "如果使用 Privileged Identity Management,請確保使用有效的 SMTP 記錄創建啟用了 Entra ID 的有效帳戶,以便 Azure VMware 解決方案自動主機更換通知。(需要長期許可)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
+ "service": "AVS",
+ "severity": "高",
+ "text": "將 CloudAdmin 帳戶的使用限制為僅緊急訪問",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "在 vCenter 中創建自定義 RBAC 角色,以在 vCenter 中實施最小特權模型",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "是定義為定期輪換 cloudadmin (vCenter) 和管理員 (NSX) 憑據的過程",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
+ "service": "AVS",
+ "severity": "高",
+ "text": "使用集中式識別提供者用於在 Azure VMware 解決方案上運行的工作負載 (VM)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "是否在 NSX-T 中實施了東西向流量篩選",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
+ "service": "AVS",
+ "severity": "高",
+ "text": "Azure VMware 解決方案上的工作負載不會直接向 Internet 公開。流量由 Azure 應用程式閘道、Azure 防火牆或第三方解決方案進行篩選和檢查",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
+ "service": "AVS",
+ "severity": "高",
+ "text": "對 Azure VMware 解決方案和基於 Azure VMware 解決方案的工作負載的入站 Internet 請求實施審核和日誌記錄",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "對來自 Azure VMware 解決方案或基於 Azure VMware 解決方案的工作負載的出站 Internet 連接實施會話監視,以識別可疑/惡意活動",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "334fdf91-c234-4182-a652-75269440b4be",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "是否在 Azure 的 ExR/VPN 閘道子網上啟用了 DDoS 標準防護",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "使用專用特權訪問工作站 (PAW) 管理 Azure VMware 解決方案、vCenter、NSX Manager 和 HCX Manager",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "為 Azure VMware 解決方案上運行的工作負載啟用高級威脅檢測(Microsoft Defender for Cloud,又名 ASC)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "使用適用於伺服器的 Azure ARC 使用 Azure 本機技術正確管理在 Azure VMware 解決方案上運行的工作負載(適用於 Azure VMware 解決方案的 Azure ARC 尚不可用)",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
+ "service": "AVS",
+ "severity": "低",
+ "text": "確保 Azure VMware 解決方案上的工作負載在運行時使用足夠的數據加密(如來賓內磁碟加密和 SQL TDE)。(vSAN 靜態加密為預設加密)",
+ "waf": "安全"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
- "service": "Cognitive Search",
- "severity": "中等",
- "text": "對於區域冗餘,請在2個或更多區域中為搜索手動創建服務,因為它不提供跨地理區域複製搜索索引的自動方法",
- "waf": "可靠性"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
+ "service": "AVS",
+ "severity": "低",
+ "text": "使用來賓內加密時,請盡可能將加密密鑰存儲在 Azure Key Vault 中",
+ "waf": "安全"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5ac94222-3e13-4810-9230-81a941741583",
+ "service": "AVS",
"severity": "中等",
- "text": "若要跨多個服務同步數據,請使用索引器更新多個服務上的內容,或使用 REST API 推送多個服務上的內容更新",
- "waf": "可靠性"
+ "text": "請考慮對 Azure VMware 解決方案上運行的工作負載使用擴展的安全更新支援(Azure VMware 解決方案符合 ESU 條件)",
+ "waf": "安全"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
- "service": "Cognitive Search",
- "severity": "中等",
- "text": "使用 Azure 流量管理器協調請求",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保使用適當的 vSAN 資料冗餘方法(RAID 規範)",
"waf": "可靠性"
},
{
- "checklist": "Cognitive Search Review Checklist",
- "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
- "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
- "service": "Cognitive Search",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d88408f3-7273-44c8-96ba-280214590146",
+ "service": "AVS",
"severity": "高",
- "text": "備份和還原 Azure 認知搜索索引。使用此範例代碼將索引定義和快照備份到一系列 Json 檔",
+ "text": "確保允許失敗策略已到位,以滿足您的 vSAN 儲存需求",
"waf": "可靠性"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure 事件中心提供靜態數據加密。如果使用自己的金鑰,則仍使用 Microsoft 管理的金鑰對數據進行加密,但此外,Microsoft 管理的金鑰將使用客戶管理的密鑰進行加密。",
- "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
- "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
- "service": "Event Hubs",
- "severity": "低",
- "text": "需要時,在靜態數據加密中使用客戶管理的金鑰選項",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保已請求足夠的配額,確保已考慮增長和災難恢復要求",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure 事件中心命名空間允許用戶端使用 TLS 1.0 及更高版本發送和接收數據。若要強制實施更嚴格的安全措施,可以將事件中心命名空間配置為要求用戶端使用較新版本的 TLS 發送和接收數據。如果事件中心命名空間需要最低版本的 TLS,則使用舊版本發出的任何請求都將失敗。",
- "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
- "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
+ "service": "AVS",
"severity": "中等",
- "text": "對請求強制實施傳輸層安全性 (TLS) 的最低要求版本",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "安全"
+ "text": "確保瞭解對 ESXi 的訪問限制,其中存在可能影響第三方解決方案的訪問限制。",
+ "waf": "操作"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "創建事件中心命名空間時,會自動為命名空間創建名為 RootManageSharedAccessKey 的策略規則。此策略具有整個命名空間的管理許可權。建議您將此規則視為管理根帳戶,不要在應用程式中使用它。建議將 AAD 用作 RBAC 的身份驗證提供程式。",
- "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
+ "service": "AVS",
"severity": "中等",
- "text": "避免在不必要的情況下使用root帳戶",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
- "waf": "安全"
+ "text": "確保您制定了有關ESXi主機密度和效率的策略,並牢記請求新節點的提前期",
+ "waf": "操作"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure 資源的託管標識可以使用 Azure AD 憑據從 Azure 虛擬機 (VM)、函數應用、虛擬機規模集和其他服務中運行的應用程式授權訪問事件中心資源。通過將 Azure 資源的託管標識與 Azure AD 身份驗證結合使用,可以避免將憑據存儲在雲中運行的應用程式中。",
- "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
- "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
+ "service": "AVS",
"severity": "中等",
- "text": "如果可能,應用程式應使用託管標識向 Azure 事件中心進行身份驗證。如果沒有,請考慮在 Azure Key Vault 或等效服務中擁有存儲憑據(SAS、服務主體憑據)",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "安全"
+ "text": "確保 Azure VMware 解決方案的良好成本管理流程已到位 - 可以使用 Azure 成本管理",
+ "waf": "成本"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "創建許可權時,請對用戶端對 Azure 事件中心的訪問提供精細控制。Azure 事件中心中的許可權可以而且應該限定為單個資源級別,例如消費者組、事件中心實體、事件中心命名空間等。",
- "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
- "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
- "service": "Event Hubs",
- "severity": "高",
- "text": "使用最低特權數據平面 RBAC",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
+ "service": "AVS",
+ "severity": "低",
+ "text": "Azure 預留實例是否用於優化使用 Azure VMware 解決方案的成本",
+ "waf": "成本"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "Azure 事件中心資源日誌包括操作日誌、虛擬網路和 Kafka 日誌。運行時審核日誌捕獲事件中心中所有數據平面訪問操作(例如發送或接收事件)的聚合診斷資訊。",
- "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
- "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
+ "service": "AVS",
"severity": "中等",
- "text": "啟用記錄以進行安全調查。使用 Azure Monitor 捕獲指標和日誌,例如資源日誌、運行時審核日誌和 Kafka 紀錄",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "text": "使用其他 Azure 本機服務時,請考慮使用 Azure 專用連結",
"waf": "安全"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "默認情況下,Azure 事件中心具有公共IP位址,並且可通過Internet訪問。專用終結點允許虛擬網路和 Azure 事件中心之間的流量遍歷 Microsoft 主幹網路。除此之外,如果未使用公共終結點,則應禁用這些終結點。",
- "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
- "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
- "service": "Event Hubs",
- "severity": "中等",
- "text": "請考慮使用專用終結點訪問 Azure 事件中心,並在適用時禁用公用網路訪問。",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保所有必需的資源都駐留在同一個 Azure 可用性區域中",
+ "waf": "性能"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "使用IP防火牆,可以將公共終結點進一步限製為僅一組IPv4位址或 CIDR(無類別域間路由)表示法的IPv4位址範圍。",
- "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
+ "service": "AVS",
"severity": "中等",
- "text": "請考慮僅允許從特定IP位址或範圍訪問 Azure 事件中心命名空間",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "text": "為 Azure VMware 解決方案來賓 VM 工作負載啟用 Microsoft Defender for Cloud",
"waf": "安全"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
+ "service": "AVS",
"severity": "中等",
- "text": "利用 FTA 彈性手冊",
- "waf": "可靠性"
+ "text": "使用已啟用 Azure Arc 的伺服器管理 Azure VMware 解決方案來賓 VM 工作負載",
+ "waf": "安全"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "對於從門戶創建的新 EH 命名空間,在啟用區域的區域中具有高級、專用或標準 SKU,將自動啟用此功能。EH 元數據和事件數據本身都是跨區域複製的",
- "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
+ "service": "AVS",
"severity": "高",
- "text": "利用可用區(如果區域適用)",
- "waf": "可靠性"
+ "text": "在 Azure VMware 解決方案上啟用診斷和指標日誌記錄",
+ "waf": "操作"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
- "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
+ "service": "AVS",
"severity": "中等",
- "text": "使用高級或專用 SKU 實現可預測的性能",
- "waf": "可靠性"
+ "text": "將Log Analytics代理部署到 Azure VMware 解決方案來賓 VM 工作負載",
+ "waf": "操作"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "啟用內置異地災難恢復功能后,可確保命名空間的整個配置(事件中心、消費者組和設置)從主命名空間持續複製到輔助命名空間,並允許隨時從主命名空間向輔助命名空間進行一次故障轉移。主動/被動功能旨在更輕鬆地從失敗的 Azure 區域中恢復和放棄,而無需更改應用程式配置",
- "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
- "service": "Event Hubs",
- "severity": "高",
- "text": "使用主動被動配置規劃異地災難恢復",
- "waf": "可靠性"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "確保已針對 Azure VMware 解決方案 VM 工作負載記錄並實施了備份策略和解決方案",
+ "waf": "操作"
},
{
- "checklist": "Azure Event Hub Review",
- "description": "應用於無法容忍關閉區域中事件數據中斷或丟失的DR配置。對於這些情況,請遵循複製指南,不要使用內置的異地災難恢復功能(主動/被動)。使用「主動/主動」時,在不同區域和命名空間中維護多個事件中心,事件將在中心之間複製",
- "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
- "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
+ "service": "AVS",
"severity": "中等",
- "text": "對於業務關鍵型應用程式,請使用 Active Active 配置",
- "waf": "可靠性"
+ "text": "使用 Microsoft Defender for Cloud 對 Azure VMware 解決方案上運行的工作負載進行合規性監視",
+ "waf": "安全"
},
{
- "checklist": "Azure Event Hub Review",
- "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
- "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
- "service": "Event Hubs",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
+ "service": "AVS",
"severity": "中等",
- "text": "設計可復原的事件中心",
- "waf": "可靠性"
+ "text": "是否將適用的合規性基線添加到 Microsoft Defender for Cloud",
+ "waf": "安全"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "65285269-440b-44be-9d3e-0844276d4bdc",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy",
- "service": "Redis",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
+ "service": "AVS",
"severity": "高",
- "text": "為 Azure Cache for Redis 啟用區域冗餘。Azure Cache for Redis 支持高級層和企業層中的區域冗餘配置。區域冗餘緩存可以將其節點放置在同一區域的不同 Azure 可用性區域中。它消除了作為單點故障的數據中心或可用區中斷,並提高了緩存的整體可用性。",
- "waf": "可靠性"
- },
- {
- "checklist": "Redis Resiliency checklist",
- "guid": "bc178bdc-5a06-4ca7-8443-51e19dd34429",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence",
- "service": "Redis",
- "severity": "中等",
- "text": "為 Azure Cache for Redis 實例配置數據持久性。由於緩存數據存儲在記憶體中,因此多個節點的罕見和計劃外故障可能會導致所有數據被丟棄。為了避免完全丟失數據,Redis 持久性允許您定期拍攝記憶體中數據的快照,並將其存儲到存儲帳戶中。",
- "waf": "可靠性"
+ "text": "在選擇要用於 Azure VMware 解決方案部署的 Azure 區域時是否評估了數據駐留",
+ "waf": "安全"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "eb722823-7a15-41c5-ab4e-4f1814387e5c",
- "link": "https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence",
- "service": "Redis",
- "severity": "中等",
- "text": "使用異地冗餘存儲帳戶保留 Azure Cache for Redis 數據,或在異地冗餘不可用的情況下使用區域冗餘",
- "waf": "可靠性"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
+ "service": "AVS",
+ "severity": "高",
+ "text": "數據處理影響(服務提供者/服務消費者模型)是否清晰且有據可查",
+ "waf": "安全"
},
{
- "checklist": "Redis Resiliency checklist",
- "guid": "a8c26c9b-32ab-45bd-bc69-98a135e33789",
- "link": "https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication",
- "service": "Redis",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "547c1747-dc56-4068-a714-435cd19dd244",
+ "service": "AVS",
"severity": "中等",
- "text": "為高級 Azure Cache for Redis 實例配置被動異地複製。異地複製是一種用於連結兩個或多個 Azure Cache for Redis 實例的機制,通常跨越兩個 Azure 區域。異地複製主要用於跨區域災難恢復。兩個高級層緩存實例通過異地複製進行連接,從而提供對主緩存的讀取和寫入,並將數據複製到輔助緩存。",
- "waf": "可靠性"
+ "text": "僅當出於合規性原因需要時,才考慮將CMK(客戶管理的密鑰)用於 vSAN。",
+ "waf": "安全"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
- "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
+ "service": "AVS",
"severity": "高",
- "text": "根據業務和 SLO 要求選擇正確的邏輯應用託管計劃",
- "waf": "可靠性"
+ "text": "創建儀錶板以啟用核心 Azure VMware 解決方案監視見解",
+ "waf": "操作"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
- "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
+ "service": "AVS",
"severity": "高",
- "text": "使用區域冗餘和可用性區域保護邏輯應用免受區域故障的影響",
- "waf": "可靠性"
+ "text": "針對 Azure VMware 解決方案性能(CPU >80%、平均記憶體 >80%、vSAN >70%)自動警報的關鍵閾值創建警告警報",
+ "waf": "操作"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
- "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
+ "service": "AVS",
"severity": "高",
- "text": "考慮為關鍵工作負載制定跨區域災難恢復策略",
- "waf": "可靠性"
+ "text": "確保創建嚴重警示以監控 vSAN 消耗量是否低於 75%,因為這是 VMware 的支援閾值",
+ "waf": "操作"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
- "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
+ "service": "AVS",
"severity": "高",
- "text": "如果部署到獨立環境,請使用或遷移到應用服務環境 (ASE) v3",
- "waf": "可靠性"
+ "text": "確保為 Azure 服務運行狀況警報和通知配置警報",
+ "waf": "操作"
},
{
- "checklist": "Logic Apps checklist",
- "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
- "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
- "service": "Logic Apps",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
+ "service": "AVS",
"severity": "中等",
- "text": "利用 Azure DevOps 或 GitHub 簡化 CI/CD 並保護邏輯應用代碼",
+ "text": "將 Azure VMware 解決方案記錄設定為發送到 Azure 儲存帳戶或 Azure EventHub 進行處理",
"waf": "操作"
},
{
- "checklist": "Azure Bot Service",
- "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
- "service": "Bot service",
- "severity": "中等",
- "text": "遵循 Azure 機器人服務中的可靠性支持建議",
- "waf": "可靠性"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
+ "service": "AVS",
+ "severity": "低",
+ "text": "如果需要深入瞭解 VMware vSphere:解決方案中是否使用了 vRealize Operations 和/或 vRealize Network Insights?",
+ "waf": "操作"
},
{
- "checklist": "Azure Bot Service",
- "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
- "service": "Bot service",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
+ "service": "AVS",
+ "severity": "高",
+ "text": "確保虛擬機的 vSAN 儲存策略不是預設存儲策略,因為此策略應用厚置備",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
+ "service": "AVS",
"severity": "中等",
- "text": "部署具有本地數據駐留和區域合規性的機器人",
- "waf": "可靠性"
+ "text": "確保未將 vSphere 內容庫放置在 vSAN 上,因為 vSAN 是有限的資源",
+ "waf": "操作"
},
{
- "checklist": "Azure Bot Service",
- "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
- "service": "Bot service",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
+ "service": "AVS",
"severity": "中等",
- "text": "Azure 機器人服務在全域和區域服務的主動-主動模式下運行。發生中斷時,無需檢測錯誤或管理服務。Azure 機器人服務在多區域地理體系結構中自動執行自動故障轉移和自動恢復。對於歐盟機器人區域服務,Azure 機器人服務在歐洲境內提供兩個完整區域,並提供主動/主動複製,以確保冗餘。對於全球機器人服務,所有可用的區域/地理位置都可以作為全球足跡。",
- "waf": "可靠性"
+ "text": "確保備份解決方案的數據存儲庫存儲在 vSAN 儲存之外。在 Azure 本機或磁碟池支持的數據存儲中",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
+ "service": "AVS",
"severity": "中等",
- "text": "如果將客戶管理的 TLS 證書用於 Azure Front Door,請使用“最新”證書版本。降低手動續訂證書導致的中斷風險",
+ "text": "確保使用 Azure Arc for Servers 進行混合管理,確保在 Azure VMware 解決方案上運行的工作負載(Arc for Azure VMware 解決方案處於預覽狀態)",
"waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgateways' | project id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant",
- "guid": "553585a6-abe0-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
+ "service": "AVS",
"severity": "中等",
- "text": "確保使用應用程式閘道 v2 SKU",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
+ "text": "確保使用 Azure Log Analytics 和 Azure Monitor 監視在 Azure VMware 解決方案上運行的工作負載",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name) == 'standard')",
- "guid": "4e35fbf5-0ae2-48b2-97ce-753353edbd1a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Load Balancer",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
+ "service": "AVS",
"severity": "中等",
- "text": "確保將標準 SKU 用於 Azure 負載均衡器",
- "waf": "安全"
+ "text": "在現有更新管理工具或 Azure 更新管理中包括在 Azure VMware 解決方案上運行的工作負載",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "9432621a-8397-4654-a882-5bc856b7ef83",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones",
- "service": "Load Balancer",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
+ "service": "AVS",
"severity": "中等",
- "text": "確保負載均衡器前端IP位址是區域冗餘的(除非需要區域性前端)。",
- "waf": "安全"
+ "text": "使用 Azure Policy 在 Azure 管理、監視和安全解決方案中加入 Azure VMware 解決方案工作負載",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/applicationgateways' | extend subnetId = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix, prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix, '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength == 64) | distinct id,compliant",
- "guid": "dfc50f87-3800-424c-937b-ed5f186e7c15",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
+ "service": "AVS",
"severity": "中等",
- "text": "應用程式閘道 v2 應部署在IP前綴等於或大於 /24 的子網中",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "確保在 Azure VMware 解決方案上運行的工作負載已載入 Microsoft Defender for Cloud",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "description": "一般而言,反向代理的管理,特別是 WAF 的管理更接近應用程式而不是網路,因此它們與應用程式屬於同一訂閱。如果應用程式閘道和 WAF 由單個團隊管理,則在連接訂閱中集中應用程式閘道和 WAF 可能是可以的。",
- "guid": "48b662d6-d15f-4512-a654-98f6dfe237de",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
+ "service": "AVS",
"severity": "中等",
- "text": "部署 Azure 應用程式閘道 v2 或合作夥伴 NVA,用於在登陸區域虛擬網路中代理入站 HTTP(S) 連接,並使用它們所保護的應用。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "安全"
+ "text": "確保備份不存儲在 vSAN 上,因為 vSAN 是有限的資源",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f109e1f3-c79b-4f14-82de-6b5c22314d08",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
+ "service": "AVS",
"severity": "中等",
- "text": "對應用程式登陸區域中的所有公共IP位址使用 DDoS 網路或IP保護計畫。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "是否考慮了所有災難恢復解決方案,並決定了最適合您業務的解決方案?[SRM/JetStream/Zerto/Veeam/...]",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity >= 2) | distinct id,compliant",
- "guid": "135bf4ac-f9db-461f-b76b-2ee9e30b12c0",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
+ "service": "AVS",
"severity": "中等",
- "text": "使用至少兩個實例數配置自動縮放。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "當災難恢復技術是本機 Azure IaaS 時,請使用 Azure Site Recovery",
"waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type =~ 'microsoft.network/applicationGateways' | extend compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant",
- "guid": "060c6964-52b5-48db-af8b-83e4b2d85349",
- "link": "https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
+ "service": "AVS",
+ "severity": "高",
+ "text": "將自動恢復計劃與任一災難解決方案結合使用,盡可能避免手動任務",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "8255461e-2aee-4345-9aec-8339248b262d",
+ "service": "AVS",
"severity": "中等",
- "text": "跨可用性區域部署應用程式閘道",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "text": "使用地緣政治區域對作為輔助災難恢復環境",
"waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
+ "service": "AVS",
+ "severity": "高",
+ "text": "在區域之間使用 2 個不同的地址空間,例如:10.0.0.0/16 和 192.168.0.0/16 用於不同的區域",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
+ "service": "AVS",
"severity": "中等",
- "text": "將 Azure Front Door 與 WAF 策略配合使用,以交付和幫助保護跨多個 Azure 區域的全域 HTTP/S 應用。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "ExpressRoute Global Reach 是用於主 Azure VMware 解決方案私有雲和輔助 Azure VMware 解決方案私有雲之間的連接,還是通過網路虛擬設備完成路由?",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
+ "service": "AVS",
"severity": "中等",
- "text": "使用 Front Door 和應用程式閘道幫助保護 HTTP/S 應用時,請在 Front Door 中使用 WAF 策略。鎖定應用程式閘道以僅接收來自 Front Door 的流量。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "是否考慮了所有備份解決方案,並決定了最適合您業務的解決方案?[ MABS/CommVault/Metallic.io/Veeam/ .",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/trafficManagerProfiles",
- "checklist": "Azure Application Delivery Networking",
- "guid": "cd4cd21b-0881-437f-9e6c-4cfd3e504547",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "Traffic Manager",
- "severity": "高",
- "text": "使用流量管理器提供跨 HTTP/S 以外的協定的全域應用。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "將備份解決方案部署在與 Azure VMware 解決方案私有雲相同的區域中",
"waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3b4b3e88-a459-4ed5-a22f-644dfbc58204",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "在 vSan 外部的 Azure 本機組件上部署備份解決方案",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
+ "service": "AVS",
"severity": "低",
- "text": "如果使用者只需要訪問內部應用程式,是否考慮將 Microsoft Entra ID 應用程式代理作為 Azure 虛擬桌面 (AVD) 的替代方法?",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "安全"
+ "text": "是否已制定請求還原由 Azure 平臺管理的 VMware 元件的流程?",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "01ca7cf1-5754-442d-babb-8ba6772e5c30",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "Entra",
- "severity": "中等",
- "text": "若要減少為網路中的傳入連接打開的防火牆埠數,請考慮使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對內部應用程式的安全且經過身份驗證的訪問。",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
+ "service": "AVS",
+ "severity": "低",
+ "text": "對於手動部署,必須記錄所有配置和部署",
+ "waf": "操作"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "Front Door",
- "severity": "高",
- "text": "在「預防」模式下部署 Front Door 的 WAF 策略。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
+ "service": "AVS",
+ "severity": "低",
+ "text": "對於手動部署,請考慮實施資源鎖,以防止對 Azure VMware 解決方案私有雲執行意外操作",
+ "waf": "操作"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "Front Door",
- "severity": "高",
- "text": "避免將 Azure 流量管理器和 Azure Front Door 結合使用。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
+ "service": "AVS",
+ "severity": "低",
+ "text": "對於自動化部署,請部署最小的私有雲並根據需要進行擴展",
+ "waf": "操作"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "Front Door",
- "severity": "高",
- "text": "在 Azure Front Door 和源上使用相同的功能變數名稱。主機名不匹配可能會導致細微的錯誤。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
+ "service": "AVS",
+ "severity": "低",
+ "text": "對於自動部署,請在開始部署之前請求或預留配額",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
- "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
+ "service": "AVS",
"severity": "低",
- "text": "當 Azure Front Door 源組中只有一個源時,禁用運行狀況探測。",
- "waf": "性能"
+ "text": "對於自動部署,請確保通過自動化或 Azure Policy 創建相關資源鎖,以便進行適當的治理",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "Front Door",
- "severity": "中等",
- "text": "為 Azure Front Door 選擇良好的運行狀況探測終結點。請考慮構建運行狀況終結點,以檢查應用程式的所有依賴項。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
+ "service": "AVS",
+ "severity": "低",
+ "text": "為 ExR 授權金鑰實現人類可理解的名稱,以便輕鬆識別密鑰的目的/用途",
+ "waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
- "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "255461e2-aee3-4553-afc8-339248b262d6",
+ "service": "AVS",
"severity": "低",
- "text": "將 HEAD 運行狀況探測與 Azure Front Door 配合使用,以減少 Front Door 發送到應用程式的流量。",
- "waf": "性能"
+ "text": "當使用單獨的服務原則部署 Azure VMware 解決方案和 ExpressRoute 時,請使用 Key Vault 儲存機密和授權密鑰",
+ "waf": "操作"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules) | extend compliant = (countOutRules == 0) | distinct id,compliant",
- "guid": "97a2fd46-64b0-1dfa-b72d-9c8869496d75",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "Load Balancer",
- "severity": "高",
- "text": "使用 Azure NAT 閘道而不是負載均衡器出站規則,以獲得更好的 SNAT 可伸縮性",
- "waf": "可靠性"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
+ "service": "AVS",
+ "severity": "低",
+ "text": "當需要在 Azure VMware 解決方案中/上部署許多資源時,定義用於在 IaC 中序列化操作的資源依賴項,因為 Azure VMware 解決方案僅支援有限數量的並行操作。",
+ "waf": "操作"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
- "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "Front Door",
- "severity": "高",
- "text": "將託管 TLS 證書與 Azure Front Door 配合使用。降低運營成本和因證書續訂而導致的中斷風險。",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
+ "service": "AVS",
+ "severity": "低",
+ "text": "使用單個 Tier-1 閘道執行 NSX-T 分段的自動配置時,請使用 Azure 門戶 API 而不是 NSX-Manager API",
"waf": "操作"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
+ "service": "AVS",
"severity": "中等",
- "text": "將 Azure Front Door WAF 配置定義為代碼。通過使用代碼,您可以更輕鬆地採用新的規則集版本並獲得額外的保護。",
- "waf": "操作"
+ "text": "打算使用自動橫向擴展時,請務必為運行 Azure VMware 解決方案的訂閱申請足夠的 Azure VMware 解決方案配額",
+ "waf": "性能"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
- "service": "Front Door",
- "severity": "高",
- "text": "將端到端 TLS 與 Azure Front Door 配合使用。使用 TLS 進行從用戶端到 Front Door 的連接,以及從 Front Door 到源的連接。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "打算使用自動縮減時,請務必在執行此操作之前考慮存儲策略要求",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
+ "service": "AVS",
"severity": "中等",
- "text": "將 HTTP 到 HTTPS 重定向與 Azure Front Door 配合使用。通過自動將較舊的用戶端重定向到 HTTPS 請求來支援它們。",
- "waf": "安全"
+ "text": "擴展操作始終需要在單個 SDDC 中序列化,因為一次只能執行一個擴展操作(即使使用多個集群也是如此)",
+ "waf": "性能"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
- "service": "Front Door",
- "severity": "高",
- "text": "啟用 Azure Front Door WAF。保護您的應用程式免受一系列攻擊。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "考慮並驗證體系結構中使用的第三方解決方案的縮放操作(支援與否)",
+ "waf": "性能"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
- "service": "Front Door",
- "severity": "高",
- "text": "針對工作負載優化 Azure Front Door WAF。減少誤報檢測。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "在自動化中為環境定義和強制實施橫向擴展/橫向擴展最大限制",
+ "waf": "性能"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "Front Door",
- "severity": "高",
- "text": "啟用在 Azure Front Door WAF 策略中啟用的請求正文檢查功能。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "實施監控規則以監控自動擴展操作,並監控成功和失敗,以啟用適當的(自動化)回應",
+ "waf": "操作"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "高",
- "text": "啟用 Azure Front Door WAF 預設規則集。默認規則集檢測並阻止常見攻擊。",
- "waf": "安全"
+ "text": "使用 MON 時,請注意同時配置的 VM 的限制(HCX 的 MON 限制 [400 - 標準,1000 - 大型設備])",
+ "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
+ "service": "AVS",
"severity": "高",
- "text": "啟用 Azure Front Door WAF 機器人保護規則集。機器人規則檢測好的和壞的機器人。",
- "waf": "安全"
+ "text": "使用 MON 時,不能在超過 100 個網路分機上啟用 MON",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
+ "service": "AVS",
"severity": "中等",
- "text": "使用最新的 Azure Front Door WAF 規則集版本。規則集更新會定期更新,以考慮當前的威脅形勢。",
- "waf": "安全"
+ "text": "如果使用 VPN 連接進行遷移,請相應地調整 MTU 大小。",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e614658d-d457-4e92-9139-b821102cad6e",
+ "service": "AVS",
"severity": "中等",
- "text": "向 Azure Front Door WAF 添加速率限制。速率限制會阻止客戶端在短時間內意外或有意發送大量流量。",
- "waf": "安全"
+ "text": "對於連接到 Azure(500Mbps 或更低)的低連接區域,請考慮部署 HCX WAN 優化設備",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
+ "service": "AVS",
"severity": "中等",
- "text": "對 Azure Front Door WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎結構不堪重負的大量請求提供保護。",
- "waf": "安全"
+ "text": "確保從本地裝置啟動遷移,而不是從雲端裝置啟動遷移(不要執行反向遷移)",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
- "service": "Front Door",
- "severity": "低",
- "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選器來阻止來自非預期國家/地區的流量。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "使用 Azure Netapp Files 擴展 Azure VMware 解決方案的儲存時,請考慮將其用作 VMware 資料儲存庫,而不是直接附加到 VM 。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
- "service": "Front Door",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "AVS",
"severity": "中等",
- "text": "使用 Azure Front Door WAF 對流量進行地理篩選時,請指定未知 (ZZ) 位置。避免在IP位址無法進行地理匹配時意外阻止合法請求。",
- "waf": "安全"
+ "text": "確保將專用 ExpressRoute 閘道用於外部資料儲存解決方案",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies' | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant = max(compliant1) by id",
- "guid": "2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection",
- "service": "App Gateway",
- "severity": "高",
- "text": "啟用 Azure 應用程式閘道 WAF 機器人保護規則集 機器人規則可檢測好機器人和壞機器人。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "AVS",
+ "severity": "中等",
+ "text": "確保在用於外部數據存儲解決方案的 ExpressRoute 閘道上啟用了 FastPath",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "8ea8e0d4-84e8-4b33-aeab-493f6391b4d6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "AVS",
"severity": "高",
- "text": "啟用 Azure 應用程式閘道 WAF 策略中啟用的請求正文檢查功能。",
- "waf": "安全"
+ "text": "如果使用延伸群集,請確保供應商支援所選的災難恢復解決方案",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "guid": "a4dd86d3-5ffa-408c-b660-cce073d085b8",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "AVS",
"severity": "高",
- "text": "針對工作負載優化 Azure 應用程式閘道 WAF。減少誤報檢測。",
- "waf": "安全"
+ "text": "如果使用延伸群集,請確保提供的 SLA 符合您的要求",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "checklist": "Azure Application Delivery Networking",
- "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
- "guid": "baf8e317-2397-4d49-b3d1-0dcc16d8778d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "App Gateway",
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "AVS",
"severity": "高",
- "text": "在「防護」模式下部署應用程式閘道的 WAF 策略。",
- "waf": "安全"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "43fae595-8a32-4299-a69e-0f32c454dcc9",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview",
- "service": "App Gateway",
- "severity": "中等",
- "text": "向 Azure 應用程式閘道 WAF 添加速率限制。速率限制會阻止客戶端在短時間內意外或有意發送大量流量。",
- "waf": "安全"
+ "text": "如果使用延伸群集,請確保兩條 ExpressRoute 線路都連接到連接中心。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "041e0ad8-7b12-4694-a0b7-a0e25ee2470f",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details",
- "service": "App Gateway",
- "severity": "中等",
- "text": "對 Azure 應用程式閘道 WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎結構不堪重負的大量請求提供保護。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
+ "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
+ "service": "AVS",
+ "severity": "高",
+ "text": "如果使用延伸群集,請確保兩條 ExpressRoute 線路都啟用了 GlobalReach。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "99937189-ff78-492a-b9ca-18d828d82b37",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices",
- "service": "App Gateway",
- "severity": "低",
- "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選器來阻止來自非預期國家/地區的流量。",
- "waf": "安全"
+ "arm-service": "Microsoft.AVS/privateClouds",
+ "checklist": "Azure VMware Solution Design Review",
+ "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "AVS",
+ "severity": "高",
+ "text": "是否正確考慮了網站容災設置,並在需要時為您的業務進行了更改。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "349a15c1-52f4-4319-9078-3895d95ecafd",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules",
- "service": "App Gateway",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
+ "service": "Azure MySQL",
"severity": "中等",
- "text": "使用 Azure 應用程式閘道 WAF 對流量進行地理篩選時,請指定未知 (ZZ) 位置。避免在IP位址無法進行地理匹配時意外阻止合法請求。",
- "waf": "安全"
+ "text": "利用靈活伺服器",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "6c19dfd5-a61c-436c-9001-491b9b3d0228",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions",
- "service": "App Gateway",
- "severity": "中等",
- "text": "使用最新的 Azure 應用程式閘道 WAF 規則集版本。規則集更新會定期更新,以考慮當前的威脅形勢。",
- "waf": "安全"
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
+ "service": "Azure MySQL",
+ "severity": "高",
+ "text": "利用區域適用的可用區",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f84106a2-2e9e-42ac-add6-d3416ecfed53",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "App Gateway",
+ "arm-service": "Microsoft.DBforMySQL/servers",
+ "checklist": "MySQL Review Checklist",
+ "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
+ "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
+ "service": "Azure MySQL",
"severity": "中等",
- "text": "添加診斷設置以保存 Azure 應用程式閘道 WAF 紀錄。",
- "waf": "操作"
+ "text": "將數據傳入複製用於跨區域災難恢復方案",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "Front Door",
- "severity": "中等",
- "text": "添加診斷設置以保存 Azure Front Door WAF 紀錄。",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a85b86ad-884f-48e3-9273-4b875ba18f10",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-additional-safety-and-behavioral-guardrails",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "遵循 Metaprompting 護欄,實現 realible AI",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "92664c60-47e3-4591-8b1b-8d557656e686",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel",
- "service": "App Gateway",
- "severity": "中等",
- "text": "將 Azure 應用程式閘道 WAF 紀錄發送到 Microsoft Sentinel。",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d4391898-cd28-48be-b6b1-7cb8245451e1",
+ "link": "https://github.com/Azure-Samples/AI-Gateway",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "考慮使用APIM或 AI central 等解決方案的閘道模式,以實現更好的速率限制、負載均衡、身份驗證和日誌記錄",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "Front Door",
- "severity": "中等",
- "text": "將 Azure Front Door WAF 日誌發送到 Microsoft Sentinel。",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aed3453a-ec72-4392-97a1-52d6cc5e4029",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-openai-insights-monitoring-ai-with-confidence/ba-p/4026850",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "為您的 AOAI 實例啟用監控",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ba0e9b26-6e0d-4ec8-8541-023c00afd5b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code",
- "service": "App Gateway",
- "severity": "中等",
- "text": "將 Azure 應用程式閘道 WAF 設定定義為代碼。通過使用代碼,您可以更輕鬆地採用新的規則集版本並獲得額外的保護。",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "697cb391-ed16-4b2d-886f-0a0241addde6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring#set-up-alerts",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "建立警報以通知團隊有關事件的通知,例如由對資源執行的操作(例如重新生成其訂閱金閜)創建的活動日誌中的條目或指標閾值(例如一小時內超過 10 的錯誤數)",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f17ec301-8470-4afd-aabc-c1fdfe47dcc0",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview",
- "service": "App Gateway",
- "severity": "中等",
- "text": "使用 WAF 策略而不是舊版 WAF 配置。",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8a477cde-b486-41bc-9bc1-0ae66e25d4d5",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "監控令牌使用方式,防止由於容量導致服務中斷",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "d4eb8667-f8cb-4cdd-94e6-2f967ba98f88",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a3aec2c4-e243-46b0-936c-b45e17960eee",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/monitoring",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "篩選後端中的入站流量,以便它們僅接受來自應用程式閘道子網的連接,例如使用NSG。",
- "waf": "安全"
+ "text": "觀察已處理的推理令牌、生成的完成令牌等指標,監視速率限制",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "7d3df025-59a3-447d-ac25-3f5750d35de1",
- "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions",
- "service": "Front Door",
- "severity": "中等",
- "text": "確保源僅從 Azure Front Door 實例獲取流量。",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "fbdf4cc2-eec4-4d76-8c31-d25ffbb46a39",
+ "link": "https://techcommunity.microsoft.com/t5/apps-on-azure-blog/build-an-enterprise-ready-azure-openai-solution-with-azure-api/ba-p/3907562",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "text": "如果診斷對你來說還不夠,請考慮在 Azure OpenAI 前面使用閘道(例如 Azure API 管理)來記錄傳入提示和傳出回應(如果允許)",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "a66f0fd8-2ca4-422e-8df3-235148127ca2",
- "link": "https://learn.microsoft.com/azure/application-gateway/ssl-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3af30ed3-2947-498b-8178-a2c5a46ceb54",
+ "link": "https://github.com/Azure-Samples/openai-enterprise-iac",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "您應該對發往後端伺服器的流量進行加密。",
- "waf": "安全"
+ "text": "使用基礎結構即代碼部署 Azure OpenAI 服務、模型部署和所有相關資源",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "3dba65cb-834d-44d8-a3ca-a6aa2f1587be",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4350d092-d234-4292-a752-8537a551c5bf",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "您應該使用 Web 應用程式防火牆。",
- "waf": "安全"
- },
- {
- "checklist": "Azure Application Delivery Networking",
- "guid": "0158fcb6-0bc1-4687-832f-cc7c359c22d2",
- "link": "https://learn.microsoft.com/azure/application-gateway/redirect-overview",
- "service": "App Gateway",
- "severity": "中等",
- "text": "將 HTTP 重定向到 HTTPS",
+ "text": "將 Microsoft Entra 身份驗證與託管標識(而不是 API 金鑰)配合使用",
"waf": "安全"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "bb697864-1b4c-43af-8667-90cc69aaed5f",
- "link": "https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request",
- "service": "App Gateway",
- "severity": "中等",
- "text": "使用閘道管理的 Cookie 將流量從使用者工作階段定向到同一伺服器進行處理",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4e4f1854-287d-45cd-a126-cc031af5b1fc",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "使用已知的黃金數據集評估系統的性能/準確性,該數據集具有輸入和正確答案。利用 PromptFlow 中的功能進行評估。",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "ff353ad8-15fb-4ae8-9fc5-a85a36d36a35",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-http-settings",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "68889535-e327-4897-b31b-67d67be5962a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---performance-efficiency",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "在計劃的服務更新期間啟用連接耗盡,以防止與後端池的現有 membr 的連接丟失",
- "waf": "安全"
+ "text": "評估預配輸送量模型的使用方式",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "c8741f03-45a4-4183-a6b8-139e0773b8b5",
- "link": "https://learn.microsoft.com/azure/application-gateway/custom-error",
- "service": "App Gateway",
- "severity": "低",
- "text": "創建自訂錯誤頁面以顯示個人化的用戶體驗",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "cd288bed-6b17-4cb8-8454-51e1aed3453a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/overview",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "查看和實施 Azure AI 內容安全性",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "f850d46f-f5d7-4b17-b48c-a780741402e1",
- "link": "https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url",
- "service": "App Gateway",
- "severity": "中等",
- "text": "編輯 HTTP 請求和回應標頭,以便更輕鬆地在用戶端和伺服器之間進行路由和資訊交換",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1193846d-697c-4b39-8ed1-6b2d186f0a02",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#system-level-throughput",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "根據令牌數和每分鐘的回應來定義和評估系統的輸送量,並符合要求",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "eadc3164-4a0f-461c-85f1-1a372c04dfd1",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "41addde6-8a47-47cd-bb48-61bc3bc10ae6",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#improve-performance",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "配置 Front Door,通過快速全域故障轉移優化全球 Web 流量路由和頂級最終使用者性能和可靠性",
+ "text": "通過限制令牌大小、流式處理選項來改善系統的延遲",
"waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "29dcc19f-a8fa-4c35-8281-290577538793",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6e25d4d5-a3ae-4c2c-9e24-36b0336cb45e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用傳輸層負載平衡",
+ "text": "估計彈性需求,以根據優先順序確定同步和批量請求分離。對於高優先順序,使用同步方法,對於低優先順序,首選使用佇列的異步批處理",
"waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "276898c1-af5e-4819-9e8e-049c7801ab9d",
- "link": "https://learn.microsoft.com/azure/application-gateway/multiple-site-overview",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5bda4332-4f24-4811-9331-82ba51752694",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "根據消費者的估計需求對代幣消費要求進行基準測試。如果使用的是預設輸送量單元部署,請考慮使用 Azure OpenAI 基準測試工具來幫助驗證輸送量",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4008ae7d-7e47-4432-96d8-bdcf55bce619",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "根據主機名或域名為單個閘道上的多個 Web 應用程式配置路由",
- "waf": "安全"
+ "text": "如果您使用的是預設輸送量單位 (PTU),請考慮為溢出請求部署每分鐘令牌 (TPM) 部署。當達到 PTU 限制時,使用閘道將請求路由到 TPM 部署。",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "5fe365b6-58e8-47ed-a8cf-5163850380a2",
- "link": "https://learn.microsoft.com/azure/application-gateway/create-ssl-portal",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e8a13f98-8794-424d-9267-86d60b96c97b",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/models",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "為正確的任務選擇正確的模型。選擇在速度、回應質量和輸出複雜性之間做出正確權衡的模型",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e9951904-8384-45c9-a6cb-2912156a1147",
+ "link": "https://github.com/Azure/azure-openai-benchmark/",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "集中管理 SSL 證書,以減少後端伺服器場的加密和解密開銷",
- "waf": "安全"
+ "text": "有一個性能基線,而不進行微調,以瞭解微調是否提高了模型性能",
+ "waf": "性能"
},
{
- "checklist": "Azure Application Delivery Networking",
- "guid": "fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9",
- "link": "https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket",
- "service": "App Gateway",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5e39f541-accc-4d97-a376-bcdb3750ab2a",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
"severity": "低",
- "text": "使用應用程式閘道對 WebSocket 和 HTTP/2 協定提供本機支援",
- "waf": "安全"
+ "text": "跨區域部署多個 OAI 實例",
+ "waf": "可靠性"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b039da6d-55d7-4c89-8adb-107d5325af62",
+ "link": "https://learn.microsoft.com/azure/architecture/ai-ml/architecture/baseline-openai-e2e-chat#azure-openai---reliability",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "使用閘道模式(如 APIM)實現重試和運行狀況檢查",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "5ca44e46-85e2-4223-ace8-bb12308ca5f1",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#introduction-to-quota",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "在全域級別實施錯誤處理策略",
- "waf": "操作"
+ "text": "確保為工作負載提供足夠的 TPM 和 RPM 配額",
+ "waf": "可靠性"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
- "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ec723923-7a15-42d6-ac5e-402925387e5c",
+ "link": "https://www.microsoft.com/research/project/guidelines-for-human-ai-interaction/",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "確保所有 API 策略都包含一個元素。",
- "waf": "操作"
+ "text": "查看 HAI 工具包指南中的注意事項,並將這些交互實踐應用於 slution",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
- "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f154e3a-a369-4282-ae7e-316183687a04",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用策略片段可避免在多個 API 中重複相同的策略定義",
- "waf": "操作"
+ "text": "如果採用微調,則跨區域部署單獨的微調模型",
+ "waf": "可靠性"
},
{
- "checklist": "Azure API Management Review",
- "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
- "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77a1f893-5bda-4433-84f2-4811633182ba",
+ "link": "https://learn.microsoft.com/azure/backup/backup-overview",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "如果您計劃通過 API 獲利,請查看“獲利支援”一文,瞭解最佳做法",
- "waf": "操作"
+ "text": "定期備份和複製關鍵數據,以確保數據丟失或系統故障時的數據可用性和可恢復性。利用 Azure 的備份和災難恢復服務來保護數據。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure API Management Review",
- "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "95b96ad8-844c-4e3b-8b38-b876ba2cf204",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "啟用診斷設置以將日誌導出到 Azure Monitor",
- "waf": "操作"
+ "text": "應選擇 Azure AI 搜索服務層級以具有 SLA",
+ "waf": "可靠性"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
- "service": "APIM",
- "severity": "中等",
- "text": "啟用 Application Insights 以獲取更詳細的遙測數據",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "99013a5d-3ce4-474d-acbd-8682a6abca2a",
+ "link": "https://learn.microsoft.com/purview/purview",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "text": "對數據和敏感度進行分類,在生成嵌入之前使用 Microsoft Purview 進行標記,並確保以相同的敏感度和分類處理生成的嵌入",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "4fda1dbf-3dd9-45d4-ac7c-891dca1f6d56",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/use-your-data-securely",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "針對最關鍵的指標配置警報",
- "waf": "操作"
+ "text": "使用 SSE/磁碟加密和可選的 BYOK 加密來加密用於 RAG 的數據",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "59ae558b-937d-4498-9e11-12dbd7ba012f",
+ "link": "https://learn.microsoft.com/azure/search/search-security-overview",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "確保自定義 SSL 證書儲存在 Azure Key Vault 中,以便可以安全地訪問和更新它們",
+ "text": "確保對跨數據源傳輸的數據實施 TLS,用於檢索增強生成 (RAG) 和 LLM 通信的 AI 搜索",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7b94ef6e-047d-42ea-8992-b1cd6e2054b2",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "使用 Azure AD 保護對 API(數據平面)的傳入請求",
+ "text": "使用 RBAC 管理對 Azure OpenAI 服務的訪問。為使用者分配適當的許可權,並根據其角色和職責限制訪問許可權",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9769e4a6-91e8-4838-ac93-6667e13c0056",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/data-encryption-best-practices",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用 Microsoft Entra ID 在開發人員門戶中對用戶進行身份驗證",
+ "text": "實施數據加密、遮罩或編輯技術,以在非生產環境中或出於測試或故障排除目的共用數據時隱藏敏感數據或將其替換為混淆值",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
- "service": "APIM",
- "severity": "中等",
- "text": "創建適當的組來控制產品的可見性",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "74b1e945-b459-4837-be7a-d6c6d3b375a5",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-cloud-introduction",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "利用 Azure Defender 來檢測和回應安全威脅,並設置監視和警報機制來識別可疑活動或違規行為。利用 Azure Sentinel 進行高級威脅檢測和回應",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "06862505-2d9a-4874-9491-2837b00a3475",
- "link": "https://learn.microsoft.com/azure/api-management/backends",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c7acbe48-abe5-44cd-99f2-e87768468c55",
+ "link": "https://techcommunity.microsoft.com/t5/azure-storage-blog/managing-long-term-log-retention-or-any-business-data/ba-p/2494791",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用後端功能消除冗餘 API 後端配置",
- "waf": "操作"
+ "text": "制定數據保留和處置策略,以遵守合規性法規。對不再需要的數據實施安全刪除方法,並維護數據保留和處置活動的審計跟蹤",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a9c27d9c-42bb-46bd-8c69-99a246f3389a",
+ "link": "https://learn.microsoft.com/azure/ai-services/content-safety/concepts/jailbreak-detection",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "使用 Content Safety 實施 Prompt shields 和接地檢測",
+ "waf": "卓越運營"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a775c6ee-95b9-46ad-a844-ce3b2b38b876",
+ "link": "https://learn.microsoft.com/azure/compliance/",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "通過實施隱私控制並獲得數據處理活動所需的同意或許可,確保遵守相關的數據保護法規,例如GDPR或HIPAA。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ba2cf204-9901-43a5-b3ce-474dccbd8682",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用命名值存儲可在策略中使用的通用值",
- "waf": "操作"
+ "text": "對員工進行有關數據安全最佳實踐、安全處理數據的重要性以及與數據洩露相關的潛在風險的教育。鼓勵他們勤奮地遵循數據安全協定。",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "eae01e6e-842e-452f-9721-d928c1b1cd52",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "將生產數據與開發和測試數據分開。僅在生產中使用真實的敏感數據,並在開發和測試環境中使用匿名或合成數據。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1e54a29a-9de3-499c-bd7b-28dc93555620",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "對於DR,利用高級層,跨兩個或多個區域擴展部署,實現99.99%的SLA",
- "waf": "可靠性"
+ "text": "如果您具有不同級別的數據敏感度,請考慮為每個級別創建單獨的索引。例如,您可以有一個用於常規數據的索引,另一個用於敏感數據的索引,每個索引都由不同的訪問協定管理",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
- "link": "https://learn.microsoft.com/azure/api-management/high-availability",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2bfe4564-b0d8-434a-948b-263e6dd60512",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "在兩個或多個可用區中部署至少一台設備,SLA 提高 99.99%",
- "waf": "可靠性"
+ "text": "通過將敏感數據集放置在服務的不同實例中,進一步實現隔離。每個實例都可以使用其自己的特定 RBAC 策略集進行控制",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "a36498f6-dbad-438e-ad53-cc7ce1d7aaab",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "確保有一個自動備份例程",
- "waf": "可靠性"
+ "text": "認識到從敏感資訊生成的嵌入和向量本身就是敏感的。這些數據應得到與源材料相同的保護措施",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
- "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
- "service": "APIM",
- "severity": "中等",
- "text": "使用策略添加故障轉移後端 URL 和緩存,以減少失敗的調用。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3571449a-b805-43d8-af89-dc7b33be2a1a",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "將 RBAC 應用於具有嵌入和向量的數據存儲,並根據角色的訪問要求確定存取範圍",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
- "service": "APIM",
- "severity": "低",
- "text": "如果需要以高性能級別進行日誌記錄,請考慮事件中心策略",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "27f7b9e9-1be1-4f38-aef3-9812bd463cbb",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "為 AI 服務配置專用終結點,以限制網路內的服務訪問",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
- "service": "APIM",
- "severity": "中等",
- "text": "應用限制策略來控制每秒的請求數",
- "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
- "waf": "性能"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "ac8ac199-ebb9-41a3-9d90-cae2cc881370",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "使用 Azure 防火牆和 UDR 強制實施嚴格的入站和出站流量控制,並限制外部集成點",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6f7c0cba-fe51-4464-add4-57e927138b82",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "實施網路分段和訪問控制,將 LLM 應用程式的存取限製為僅授權使用者和系統,並防止橫向行動",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "7f42c78e-78cb-46a2-8ad1-90916e6a8d8f",
+ "link": "https://www.microsoft.com/research/blog/llmlingua-innovating-llm-efficiency-with-prompt-compression/",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "配置自動縮放以在負載增加時橫向擴展實例數",
- "waf": "性能"
+ "text": "使用提示壓縮工具,如 LLMLingua 或 gprtrim",
+ "waf": "成本優化"
},
{
- "checklist": "Azure API Management Review",
- "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1102cac6-eae0-41e6-b842-e52f4721d928",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "確保 LLM 應用程式使用的 API 和端點使用身份驗證和授權機制(例如託管標識、API 金鑰或 OAuth)得到適當保護,以防止未經授權的訪問。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "c1b1cd52-1e54-4a29-a9de-399cfd7b28dc",
+ "link": "https://techcommunity.microsoft.com/t5/azure-architecture-blog/security-best-practices-for-genai-applications-openai-in-azure/ba-p/4027885",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "在 Azure 沒有靠近後端 API 的區域的地方部署自承載閘道。",
- "waf": "性能"
+ "text": "實施強大的最終使用者身份驗證機制,例如多因素身份驗證,以防止對 LLM 應用程式和相關網路資源的未經授權的訪問",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
- "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "93555620-2bfe-4456-9b0d-834a348b263e",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "將高級層用於生產工作負載。",
- "waf": "可靠性"
+ "text": "實施網路監控工具,以檢測和分析網路流量中的任何可疑或惡意活動。啟用日誌記錄以捕獲網路事件,並在發生安全事件時促進取證分析",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6dd60512-a364-498f-9dba-d38ead53cc7c",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "在多區域模型中,使用策略根據可用性或延遲將請求路由到區域後端。",
- "waf": "可靠性"
+ "text": "進行安全審計和滲透測試,以識別和解決LLM應用程式的網路基礎設施中的任何網路安全弱點或漏洞",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
- "service": "APIM",
- "severity": "高",
- "text": "注意APIM的局限性",
- "waf": "可靠性"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e1d7aaab-3571-4449-ab80-53d89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources?tabs=json",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "text": "Azure AI 服務已正確標記,以便更好地管理",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
- "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations",
+ "service": "Azure OpenAI",
+ "severity": "低",
+ "text": "Azure AI 服務帳戶遵循組織命名約定",
+ "waf": "卓越運營"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://learn.microsoft.com/azure/ai-services/diagnostic-logging",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "確保自承載閘道部署具有復原能力。",
- "waf": "可靠性"
+ "text": "應啟用 Azure AI 服務資源中的診斷日誌",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "7519e385-a88b-4d34-966b-6269d686e890",
- "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
- "service": "APIM",
- "severity": "中等",
- "text": "在APIM前面使用 Azure Front Door 進行多區域部署",
- "waf": "性能"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/ai-services/authentication",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "為了安全起見,建議禁用密鑰訪問(本地身份驗證)。 禁用基於密鑰的訪問后,Microsoft Entra ID 將成為唯一的訪問方法,該方法允許保持最小許可權原則和精細控制。",
+ "waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
- "service": "APIM",
- "severity": "中等",
- "text": "在虛擬網络 (VNet) 中部署服務Deploy the service within a Virtual Network (VNet)",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "6b57cfc6-5546-41e1-a3e3-453a3c863964",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "使用 Azure Key Vault 安全地存儲和管理密鑰。避免在 LLM 應用程式的代碼中硬編碼或嵌入敏感密鑰,並使用託管標識從 Azure Key Vault 中安全地檢索它們",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
- "service": "APIM",
- "severity": "中等",
- "text": "將網路安全組 (NSG) 部署到子網,以限制或監視進出APIM的流量。",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "8b652d6c-15f5-4129-9539-8e6ded227dd1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "定期輪換和過期存儲在 Azure Key Vault 中的密鑰,以最大程度地降低未經授權訪問的風險。",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
- "service": "APIM",
- "severity": "中等",
- "text": "部署專用終結點以在未將APIM部署到 VNet 時篩選傳入流量。",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "adfe27be-e297-401a-a352-baaab79b088d",
+ "link": "https://github.com/openai/tiktoken",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "使用 tiktoken 了解對話模式下令牌優化的令牌大小",
+ "waf": "成本優化"
+ },
+ {
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "42b06c21-d799-49a6-96f4-389a7f42c78e",
+ "link": "https://learn.microsoft.com/azure/security/develop/secure-dev-overview",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "遵循安全編碼做法,以防止常見漏洞,例如注入攻擊、跨網站腳本 (XSS) 或安全配置錯誤",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "78c06a73-a22a-4495-9e6a-8dc4a20e27c3",
+ "link": "https://learn.microsoft.com/azure/devops/repos/security/github-advanced-security-dependency-scanning?view=azure-devops",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "禁用公網訪問",
+ "text": "設置一個流程來定期更新和修補 LLM 庫和其他系統元件",
"waf": "安全"
},
{
- "checklist": "Azure API Management Review",
- "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
- "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
- "service": "APIM",
- "severity": "中等",
- "text": "使用 PowerShell 自動化腳本簡化管理",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e29711b1-352b-4eee-879b-588defc4972c",
+ "link": "https://learn.microsoft.com/legal/cognitive-services/openai/code-of-conduct",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "遵守 Azure OpenAI 或其他 LLM 的使用條款、策略和指南以及允許的用例",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d3cd21bf-7703-46e5-b6b4-bed3d503547c",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs#base-series-and-codex-series-fine-tuned-models",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "通過基礎架構即代碼配置APIM。查看 Cloud Adaption Framework 中的 DevOps 最佳實踐 APIM 登陸區域加速器",
- "waf": "操作"
+ "text": "了解基礎模型和微調模型的成本差異以及令牌步長",
+ "waf": "成本優化"
},
{
- "checklist": "Azure API Management Review",
- "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
- "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
- "service": "APIM",
- "severity": "中等",
- "text": "促進 Visual Studio Code APIM 擴展的使用,以加快 API 開發速度",
- "waf": "操作"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "1347dc56-028a-471f-be1c-e15dd3f0d5e7",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/latency#batching",
+ "service": "Azure OpenAI",
+ "severity": "高",
+ "text": "在可能的情況下,批量請求,以最大程度地減少每次調用的開銷,從而降低總體成本。確保優化批量大小",
+ "waf": "成本優化"
},
{
- "checklist": "Azure API Management Review",
- "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
- "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "72d41e36-11cc-457b-9a4b-1410d43958a8",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/manage-costs",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "在工作流中實施DevOps和 CI/CD",
- "waf": "操作"
+ "text": "設置成本跟蹤系統,用於監視模型使用方式,並使用該資訊來説明通知模型選擇和提示大小",
+ "waf": "成本優化"
},
{
- "checklist": "Azure API Management Review",
- "guid": "b6439493-426a-45f3-9697-cf65baee208d",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "166cd072-af9b-4141-a898-a535e737897e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/quota?tabs=rest#understanding-rate-limits",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用用戶端證書身份驗證保護 API",
- "waf": "安全"
+ "text": "為每個模型回應的令牌數設置最大限制。優化大小以確保其足夠大以實現有效的回應",
+ "waf": "成本優化"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2a67d143-1033-4c0a-8732-680896478f08",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "71ca7da8-cfa9-462a-8594-946da97dc3a2",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用用戶端證書身份驗證保護後端服務",
- "waf": "安全"
+ "text": "查看提供的有關設置 AI 搜索以實現可靠性的指南",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
- "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3266b225-86f4-4a16-92bd-ddea8a487cde",
+ "link": "https://learn.microsoft.com/azure/search/vector-search-index-size?tabs=portal-vector-quota",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "查看“緩解 OWASP API 安全前 10 大威脅的建議”一文,並查看適用於您的 API 的內容",
- "waf": "安全"
+ "text": "規劃和管理 AI 搜索向量存儲",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
- "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "b4861bc3-bc14-4aeb-9e66-e8d9a3aec218",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-end-to-end-llmops-with-prompt-flow?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用授權功能簡化後端 API 的 OAuth 2.0 令牌管理",
- "waf": "安全"
+ "text": "應用 LLMOps 實踐來自動化 GenAI 應用程式的生命週期管理",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
- "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "aa80932c-8ec9-4d1b-a770-26e5e6beba9e",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/how-to/provisioned-throughput-onboarding#understanding-the-provisioned-throughput-purchase-model",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "加密傳輸中的資訊時,請使用最新的 TLS 版本。盡可能禁用過時和不必要的協議和密碼。",
- "waf": "安全"
+ "text": "評估計費模型的使用方式 - PAYG 與 PTU",
+ "waf": "成本優化"
},
{
- "checklist": "Azure API Management Review",
- "guid": "f8af3d94-1d2b-4070-846f-849197524258",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
- "service": "APIM",
- "severity": "高",
- "text": "確保機密(命名值)存儲在 Azure Key Vault 中,以便可以安全地訪問和更新它們",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e6436b07-36db-455f-9796-03334bdf9cc2",
+ "link": "https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/how-to-control-azure-openai-models/ba-p/4146793",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "text": "在模型版本之間切換時評估提示和應用程式的品質",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "791abd8b-7706-4e31-9569-afefde724be3",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
- "service": "APIM",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "3418db61-2712-4650-9bb4-7a393a080327",
+ "link": "https://learn.microsoft.com/azure/machine-learning/prompt-flow/concept-model-monitoring-generative-ai-evaluation-metrics?view=azureml-api-2",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "盡可能使用託管標識向其他 Azure 資源進行身份驗證",
- "waf": "安全"
+ "text": "評估、監控和優化您的 GenAI 應用程式的特性,如接地氣、相關性、準確性、連貫性、流暢性、",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure API Management Review",
- "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
- "service": "APIM",
- "severity": "高",
- "text": "使用 APIM 前面部署應用程式閘道來使用 Web 應用程式防火牆 (WAF)",
- "waf": "安全"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "294798b1-578b-4219-a46c-eb5443513592",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "text": "根據不同的搜索參數評估 Azure AI 搜尋結果",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
- "service": "App Services",
- "severity": "低",
- "text": "有關最佳實踐,請參閱基線高可用性區域冗餘 Web 應用程式體系結構",
- "waf": "可靠性"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "2744293b-b628-4537-a551-19b08e8f5854",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "text": "只有在嘗試了其他基本方法(如提示工程和RAG處理數據)時,才將微調模型視為提高準確性的方法",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
- "service": "App Services",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "287d9cec-166c-4d07-8af9-b141a898a535",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "使用高級層和標準層。這些層支援暫存槽和自動備份。",
- "waf": "可靠性"
+ "text": "使用提示工程技術來提高 LLM 回應的準確性",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
- "service": "App Services",
- "severity": "高",
- "text": "利用區域適用的可用性區域(需要高級 v2 或 v3 層)",
- "waf": "可靠性"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "e737897e-71ca-47da-acfa-962a1594946d",
+ "link": "https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "text": "紅隊您的 GenAI 應用程式",
+ "waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "edb117e6-76aa-4f66-aca4-8e5a95f2223e",
+ "link": "https://www.microsoft.com/haxtoolkit/guideline/encourage-granular-feedback/",
+ "service": "Azure OpenAI",
"severity": "中等",
- "text": "實施健康檢查",
- "waf": "可靠性"
+ "text": "為最終使用者提供 LLM 回應的評分選項並跟蹤這些分數。",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure App Service Review",
- "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
- "service": "App Services",
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "d5f3547c-c346-4d81-9028-a71ffe1b9b5d",
+ "link": "https://techcommunity.microsoft.com/t5/fasttrack-for-azure/optimizing-azure-openai-a-guide-to-limits-quotas-and-best/ba-p/4076268",
+ "service": "Azure OpenAI",
"severity": "高",
- "text": "請參閱 Azure 應用服務的備份和還原最佳做法",
- "waf": "可靠性"
+ "text": "考慮配額管理做法",
+ "waf": "成本優化"
},
{
- "checklist": "Azure App Service Review",
- "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
- "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
- "service": "App Services",
- "severity": "高",
- "text": "實現 Azure 應用服務可靠性最佳做法",
- "waf": "可靠性"
+ "arm-service": "Microsoft.CognitiveServices/accounts",
+ "checklist": "Azure OpenAI Review",
+ "guid": "9de0d5d7-31d4-41e3-911c-817bfafbc410",
+ "link": "https://github.com/Azure/aoai-apim/blob/main/README.md",
+ "service": "Azure OpenAI",
+ "severity": "中等",
+ "text": "使用負載均衡器解決方案(如基於APIM的閘道)在服務和區域之間平衡負載和容量",
+ "waf": "卓越運營"
},
{
- "checklist": "Azure App Service Review",
- "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
- "service": "App Services",
- "severity": "低",
- "text": "熟悉如何在災難期間將應用服務應用移動到另一個區域",
- "waf": "可靠性"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.Cdn/profiles/secrets' | extend frontDoorId = substring(id, 0, indexof(id, '/secrets')) | where properties.parameters.type =~ 'CustomerCertificate' | extend compliant = properties.parameters.useLatestVersion == true | project compliant, id=frontDoorId, certificateName = name | distinct id, certificateName, compliant",
+ "guid": "f00a69de-7076-4734-a734-6e4552cad9e1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "如果將客戶管理的 TLS 證書與 Azure Front Door 一起使用,請使用“最新”證書版本。降低手動證書續訂導致中斷的風險。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
- "service": "App Services",
- "severity": "高",
- "text": "熟悉 Azure 應用服務中的可靠性支援",
- "waf": "可靠性"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.cdn/profiles' and sku has 'AzureFrontDoor' | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name) | join kind= fullouter ( cdnresources | where type == 'microsoft.cdn/profiles/securitypolicies' | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id']) | extend splitid=split(id, '/') | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), '/')) | project secpolname=name, cdnprofileid, wafpolicyid ) on cdnprofileid | project name, cdnprofileid, secpolname, wafpolicyid,skuname | join kind = fullouter ( resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | extend managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != '[]', true, false), enabledState = tostring(properties.policySettings.enabledState) | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags) ) on wafpolicyid | where name != '' | summarize associatedsecuritypolicies=countif(secpolname != ''), wafswithmanagedrules=countif(managedrulesenabled == 1) by name, id=cdnprofileid, tags,skuname | extend compliant = (associatedsecuritypolicies > 0 and wafswithmanagedrules > 0) | project id, compliant",
+ "guid": "e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "將 Azure Front Door 與 WAF 策略結合使用,以交付和幫助保護跨多個 Azure 區域的全球 HTTP/S 應用程式。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3f29812b-2363-4cef-b179-b599de0d5973",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=application-gateway&pivots=front-door-standard-premium#example-configuration",
+ "service": "Front Door",
"severity": "中等",
- "text": "確保為在應用服務計劃上運行的函數應用啟用“Always On”",
- "waf": "可靠性"
+ "text": "使用 Front Door 和應用程式閘道幫助保護 HTTP/S 應用時,請在 Front Door 中使用 WAF 策略。鎖定應用程式閘道以僅接收來自 Front Door 的流量。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
- "service": "App Services",
- "severity": "中等",
- "text": "使用運行狀況檢查監視應用服務實例",
- "waf": "可靠性"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies' | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks, enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy, '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3), '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')), enabledState, mode",
+ "guid": "ae248989-b306-4591-9186-de482e3f0f0e",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
+ "service": "Front Door",
+ "severity": "高",
+ "text": "在「防護」模式下部署 Front Door 的 WAF 策略,以便 Web 應用程式防火牆採取適當的措施來允許或拒絕流量。",
+ "waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
- "service": "App Services",
- "severity": "中等",
- "text": "使用 Application Insights 可用性測試監視 Web 應用或網站的可用性和回應能力",
- "waf": "可靠性"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend compliant = properties['hostName'] !endswith '.trafficmanager.net' | project compliant, id=frontDoorId",
+ "guid": "062d5839-4d36-402f-bfa4-02811eb936e9",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
+ "service": "Front Door",
+ "severity": "高",
+ "text": "避免將 Traffic Manager 放在 Front Door 後面。",
+ "waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
- "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origins')) | extend compliant = isempty(properties.originHostHeader) or (tostring(properties.hostName) =~ tostring(properties.originHostHeader)) | project id=frontDoorId, originName = name, compliant",
+ "guid": "5efeb96a-003f-4b18-8fcd-b4d84459c2b2",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
+ "service": "Front Door",
+ "severity": "高",
+ "text": "在 Azure Front Door 和源上使用相同的功能變數名稱。不匹配的主機名可能會導致細微的錯誤。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId, subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant",
+ "guid": "0b5a380c-4bfb-47bc-b1d7-dcfef363a61b",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
"severity": "低",
- "text": "使用 Application Insights 標準測試監視 Web 應用或網站的可用性和回應能力",
+ "text": "當 Azure Front Door 源組中只有一個源時,禁用運行狀況探測。",
+ "waf": "性能"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "5567048e-e5d7-4206-9c55-b5ed45d2cc0c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "為 Azure Front Door 選擇良好的運行狀況探測終結點。考慮構建運行狀況終端節點來檢查應用程式的所有依賴項。",
"waf": "可靠性"
},
{
- "checklist": "Azure App Service Review",
- "description": "使用 Azure Key Vault 儲存應用程式所需的任何機密。 Key Vault 為儲存機密提供安全且經過審核的環境,並通過 Key Vault SDK 或應用服務 Key Vault 引用與應用服務很好地集成。",
- "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
- "severity": "高",
- "text": "使用 Key Vault 儲存機密",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType']) == 'HEAD') | project compliant, id=frontDoorId",
+ "guid": "a13f72f3-8f5c-4864-95e5-75bf37fbbeb1",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
+ "service": "Front Door",
+ "severity": "低",
+ "text": "將 HEAD 運行狀況探測與 Azure Front Door 配合使用,以減少 Front Door 發送到應用程式的流量。",
+ "waf": "性能"
},
{
- "checklist": "Azure App Service Review",
- "description": "使用託管標識通過 Key Vault SDK 或透過應用服務 Key Vault 引用連接到 Key Vault。",
- "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType']) =~ 'customercertificate') | project compliant, id = frontDoorId",
+ "guid": "af95c92d-d723-4f4a-98d7-8722324efd4d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
+ "service": "Front Door",
"severity": "高",
- "text": "使用託管標識連接到 Key VaultUse Managed Identity to connect to Key Vault",
- "waf": "安全"
+ "text": "將託管 TLS 證書與 Azure Front Door 配合使用。降低運營成本和因證書續訂而導致的中斷風險。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "description": "將應用服務 TLS 證書存儲在 Key Vault 中。",
- "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
- "service": "App Services",
- "severity": "高",
- "text": "使用 Key Vault 儲存 TLS 證書。",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "189ea962-3969-4863-8f5a-5ad808c2cf4b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "將 Azure Front Door WAF 配置定義為代碼。通過使用代碼,您可以更輕鬆地採用新的規則集版本並獲得額外的保護。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "description": "處理敏感信息的系統應隔離。 為此,請使用單獨的應用服務計劃或應用服務環境,並考慮使用不同的訂閱或管理組。",
- "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
- "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
- "service": "App Services",
- "severity": "中等",
- "text": "隔離處理敏感信息的系統",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = forwardingProtocol =~ 'httpsonly' and (supportedProtocols has 'https' or httpsRedirect =~ 'enabled') | project id = frontDoorId, compliant",
+ "guid": "2e30abab-5478-417c-81bf-bf1ad4ed1ed4",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls",
+ "service": "Front Door",
+ "severity": "高",
+ "text": "將端到端 TLS 與 Azure Front Door 配合使用。將 TLS 用於從用戶端到 Front Door 以及從 Front Door 到源的連接。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "應用服務上的本地磁碟未加密,敏感數據不應存儲在這些磁碟上。 (例如:D:\\\\Local 和 %TMP%)。",
- "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
- "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type == 'microsoft.cdn/profiles/afdendpoints/routes' | extend frontDoorId = substring(id, 0, indexof(id, '/afdendpoints')) | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols,httpsRedirect=properties.httpsRedirect | extend compliant = httpsRedirect =~ 'enabled' | project id = frontDoorId, compliant",
+ "guid": "10aa45af-166f-44c4-9f36-b6d592dac2ca",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection",
+ "service": "Front Door",
"severity": "中等",
- "text": "不要將敏感數據存儲在本地磁碟上",
+ "text": "將 HTTP 到 HTTPS 重定向與 Azure Front Door 配合使用。通過自動將較舊的用戶端重定向到 HTTPS 請求來支援這些用戶端。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "對於經過身份驗證的 Web 應用程式,請使用成熟的標識提供者,例如 Azure AD 或 Azure AD B2C。 利用所選的應用程式框架與此提供程式整合,或使用應用服務身份驗證/授權功能。",
- "guid": "919ca0b2-c121-459e-814b-933df574eccc",
- "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
- "service": "App Services",
- "severity": "中等",
- "text": "使用已建立的身份提供程式進行身份驗證",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "28b9ee82-b2c7-45aa-bc98-6de6f59a095d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf",
+ "service": "Front Door",
+ "severity": "高",
+ "text": "啟用 Azure Front Door WAF。保護您的應用程式免受各種攻擊。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "將代碼從受控且受信任的環境(例如管理良好且安全的 DevOps 部署管道)部署到應用服務。這樣可以避免未經版本控制和驗證從惡意主機部署的代碼。",
- "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "2902d8cc-1b0c-4495-afad-624ab70f7bd6",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf",
+ "service": "Front Door",
"severity": "高",
- "text": "從受信任的環境部署",
+ "text": "通過在檢測模式下配置 WAF 來減少和修復誤報檢測,從而針對工作負載優化 Azure Front Door WAF。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "禁用 FTP/FTPS 和 WebDeploy/SCM 的基本身份驗證。 這將禁止訪問這些服務,並強制使用 Azure AD 安全終結點進行部署。 請注意,還可以使用 Azure AD 憑據打開 SCM 網站。",
- "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
- "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17ba124b-127d-42b6-9322-388d5b2bbcfc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection",
+ "service": "Front Door",
"severity": "高",
- "text": "禁用基本身份驗證",
+ "text": "在 Azure Front Door WAF 策略中啟用請求正文檢查功能。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "如果可能,請使用託管標識連接到 Azure AD 受保護的資源。 如果無法做到這一點,請將機密存儲在 Key Vault 中,並改用託管標識連接到 Key Vault。",
- "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
- "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "49a98f2b-ec22-4a87-9415-6a10b00d6555",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets",
+ "service": "Front Door",
"severity": "高",
- "text": "使用託管標識連接到資源",
+ "text": "啟用 Azure Front Door WAF 預設規則集。默認規則集檢測和阻止常見攻擊。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "如果使用 Azure 容器註冊表中儲存的映像,請使用託管標識拉取這些映像。",
- "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "147a13d4-2a2f-4824-a524-f5855b52b946",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules",
+ "service": "Front Door",
"severity": "高",
- "text": "使用託管標識拉取容器",
+ "text": "啟用 Azure Front Door WAF 機器人保護規則集。機器人規則檢測好的機器人和壞的機器人。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "通過配置應用服務的診斷設置,可以將所有遙測數據發送到Log Analytics,作為日誌記錄和監視的中心目標。這允許你監視應用服務的運行時活動,例如 HTTP 日誌、應用程式日誌、平臺日誌等。",
- "guid": "47768314-c115-4775-a2ea-55b46ad48408",
- "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "d7dcdcb9-0d99-44b9-baab-ac7570ede79a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions",
+ "service": "Front Door",
"severity": "中等",
- "text": "將應用服務運行時日誌發送到Log Analytics",
+ "text": "使用最新的 Azure Front Door WAF 規則集版本。規則集更新會定期更新,以考慮當前的威脅形勢。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "設置診斷設置,將活動日誌發送到Log Analytics,作為日誌記錄和監視的中心目標。這樣,你就可以監視應用服務資源本身上的控制平面活動。",
- "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
- "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "b9620385-1cde-418f-914b-a84a06982ffc",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting",
+ "service": "Front Door",
"severity": "中等",
- "text": "將應用服務活動日誌發送到Log Analytics",
+ "text": "向 Azure Front Door WAF 添加速率限制。Rate limit 會阻止客戶端在短時間內意外或故意發送大量流量。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "使用區域 VNet 集成、網路安全組和 UDR 的組合來控制出站網路訪問。 流量應路由到 NVA,例如 Azure 防火牆。 確保監控防火牆的日誌。",
- "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
- "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "6dc36c52-0124-4ffe-9eaf-23ec1282dedb",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits",
+ "service": "Front Door",
"severity": "中等",
- "text": "應控制出站網路訪問",
+ "text": "對 Azure Front Door WAF 速率限制使用高閾值。高速率限制閾值可避免阻止合法流量,同時仍可針對可能使基礎設施不堪重負的極大量請求提供保護。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "可以使用 VNet 集成並使用 VNet NAT 閘道或 NVA(如 Azure 防火牆)來提供穩定的出站 IP。 這允許接收方根據需要根據IP列出允許清單。 請注意,對於與 Azure 服務的通信,通常不需要依賴於 IP 位址,應改用服務終結點等機制。 (此外,在接收端使用專用終結點可避免發生 SNAT,並提供穩定的出站 IP 範圍。",
- "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
- "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "388a3d0e-0a43-4367-90b2-3dd2aeece5ee",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic",
+ "service": "Front Door",
"severity": "低",
- "text": "確保與互聯網位址的出站通信具有穩定的IP",
+ "text": "如果您不希望收到來自所有地理區域的流量,請使用地理篩選條件來阻止來自非預期國家/地區的流量。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "使用應用服務訪問限制、服務終結點或專用終結點的組合來控制入站網路訪問。對於 Web 應用本身和 SCM 網站,可能需要和配置不同的訪問限制。",
- "guid": "0725769e-e669-41a4-a34a-c932223ece80",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "高",
- "text": "應控制入站網路訪問",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "00acd8a9-6975-414f-8491-2be6309893b8",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "在使用 Azure Front Door WAF 對流量進行異地篩選時,指定未知 (ZZ) 位置。避免在IP位址無法進行異地匹配時意外阻止合法請求。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "使用 Web 應用程式防火牆(如應用程式閘道或 Azure Front Door)防範惡意入站流量。 請務必監控 WAF 的日誌。",
- "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
- "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
- "service": "App Services",
- "severity": "高",
- "text": "在應用服務前面使用 WAF",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "4cea4050-7946-4a7c-89e6-b021b73c352d",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "通過打開 Diagnostic Settings (診斷設置) 來捕獲日誌和指標。包括資源活動日誌、訪問日誌、運行狀況探測日誌和 WAF 日誌。設置警報。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "description": "確保僅鎖定對 WAF 的訪問,從而無法繞過 WAF。 結合使用訪問限制、服務終結點和專用終結點。",
- "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
- "service": "App Services",
- "severity": "高",
- "text": "避免繞過 WAF",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "845f5f91-9c21-4674-a725-5ce890850e20",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "將 Azure Front Door WAF 日誌發送到 Microsoft Sentinel。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "description": "在應用服務配置中將最低 TLS 策略設置為 1.2。",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
- "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "3bb0a854-ea3d-4212-bd8e-3f0cb7792b02",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods",
+ "service": "Front Door",
"severity": "中等",
- "text": "將最低 TLS 策略設置為 1.2",
- "waf": "安全"
+ "text": "選擇支援您的部署策略的路由方法。加權方法根據配置的權重係數分配流量,支持主動-主動模型。一個基於優先順序的值,將主區域配置為接收所有流量並將流量作為備份發送到輔助區域,支援主動-被動模型。將上述方法與延遲相結合,以便延遲最低的源接收流量。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure App Service Review",
- "description": "將應用服務配置為僅使用 HTTPS。 這會導致應用服務從 HTTP 重定向到 HTTPS。 強烈建議在代碼或 WAF 中使用 HTTP 嚴格傳輸安全性 (HSTS),這會通知瀏覽器只能使用 HTTPS 訪問網站。",
- "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
- "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
- "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 | project id = frontDoorId, compliant",
+ "guid": "c3a769e4-cc78-40a9-b36a-f9bcab19ec2d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/quickstart-create-front-door",
+ "service": "Front Door",
"severity": "高",
- "text": "僅使用 HTTPS",
- "waf": "安全"
+ "text": "通過在一個或多個後端池中擁有多個源來支援冗餘。始終具有應用程式的冗餘實例,並確保每個實例都公開一個終端節點或源。可以將這些源放置在一個或多個後端池中。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure App Service Review",
- "description": "不要在 CORS 配置中使用通配符,因為這允許所有源訪問服務(從而破壞 CORS 的目的)。具體而言,僅允許您希望能夠訪問服務的源。",
- "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
- "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
- "service": "App Services",
- "severity": "高",
- "text": "不得將通配符用於 CORS",
- "waf": "安全"
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "999852be-2137-4179-8fc3-30d1df6fed1d",
+ "link": "https://learn.microsoft.com/azure/frontdoor/troubleshoot-issues#troubleshooting-steps",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "設置將請求轉發到後端的超時。根據終端節點的需要調整超時設置。否則,Azure Front Door 可能會在源發送回應之前關閉連接。如果所有源的超時時間較短,還可以降低 Azure Front Door 的預設超時。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure App Service Review",
- "description": "不得在生產環境中啟用遠端調試,因為這會在服務上打開其他埠,從而增加攻擊面。請注意,該服務會在 48 小時後自動轉為遠端調試。",
- "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
- "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
- "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
- "service": "App Services",
- "severity": "高",
- "text": "關閉遠端調試",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "17bf6351-3e5e-41f1-87bb-d5ad0b4e3de6",
+ "link": "https://learn.microsoft.com/azure/frontdoor/routing-methods#23session-affinity",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "確定您的應用程式是否需要會話關聯。如果您對可靠性要求較高,建議您關閉會話關聯。",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "425bfb31-94c4-4007-b9ae-46da9fe57cc7",
+ "link": "https://learn.microsoft.com/azure/frontdoor/origin?pivots=front-door-standard-premium#origin-host-header",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "將主機標頭髮送到後端。後端服務應該知道主機名,以便它們可以創建規則以僅接受來自該主機的流量。",
"waf": "安全"
},
{
- "checklist": "Azure App Service Review",
- "description": "啟用 Defender for App Service。 這(除其他威脅外)檢測與已知惡意IP位址的通信。 在操作過程中查看 Defender for App Service 中的建議。",
- "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "81a5398a-2414-450f-9fc3-e048bc65784c",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
+ "severity": "中等",
+ "text": "對支援快取的終端節點使用緩存。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend healthprobe=tostring(properties.healthProbeSettings) | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe, frontDoorId | join ( cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/Origins' | extend origingroupname = tostring(properties.originGroupName) ) on origingroupname | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != '') by origingroupname, id, tostring(tags), resourceGroup, subscriptionId, frontDoorId | extend compliant = origincount > 1 or (origincount == 1 and enabledhealthprobecount == 0) | project id = frontDoorId, compliant",
+ "guid": "34069d73-e4de-46c5-a36f-625f87575a56",
+ "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
+ "service": "Front Door",
+ "severity": "低",
+ "text": "在單個後端池中禁用運行狀況檢查。如果在 Azure Front Door 源組中只配置了一個源,則這些調用是不必要的。僅當終端節點中不能有多個源時,才建議這樣做。",
+ "waf": "成本"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c92d6786-cdd1-444d-9cad-934a192a276a",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-reports",
+ "service": "Front Door",
"severity": "中等",
- "text": "啟用 Defender for Cloud - Defender for App Service",
- "waf": "安全"
+ "text": "我們建議使用高級層來利用安全報告,而標準 Azure Front Door 配置檔僅在內置分析/報告下提供流量報告。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "description": "Azure 在其網路上提供 DDoS 基本保護,可以通過智慧 DDoS 標準功能進行改進,該功能可以瞭解正常的流量模式並檢測異常行為。DDoS 標準適用於虛擬網路,因此必須為應用前面的網路資源(例如應用程式閘道或 NVA)配置它。",
- "guid": "223ece80-b123-4071-a541-6415833ea3ad",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "440cf7de-30a1-4550-ab50-c9f6eac140cd",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-wildcard-domain",
+ "service": "Front Door",
"severity": "中等",
- "text": "在 WAF VNet 上啟用 DDOS 保護標準",
- "waf": "安全"
+ "text": "盡可能使用通配符 TLS 證書。",
+ "waf": "操作"
},
{
- "checklist": "Azure App Service Review",
- "description": "如果使用 Azure 容器註冊表中儲存的映像,請使用其專用終結點和應用設置“WEBSITE_PULL_IMAGE_OVER_VNET”通過虛擬網络從 Azure 容器註冊表拉取這些映射。",
- "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
- "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "556e2733-6ca9-4edd-9cc7-26de66d46c2e",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-caching",
+ "service": "Front Door",
"severity": "中等",
- "text": "通過虛擬網路拉取容器",
- "waf": "安全"
+ "text": "優化應用程式查詢字串以進行緩存。對於純靜態內容,請忽略查詢字串以最大限度地利用緩存。如果您的應用程式使用查詢字串,請考慮將它們包含在緩存鍵中。在緩存鍵中包含查詢字串可讓 Azure Front Door 根據您的配置提供緩存的回應或其他回應。",
+ "waf": "性能"
},
{
- "checklist": "Azure App Service Review",
- "description": "按照參與的滲透測試規則對 Web 應用程式進行滲透測試。",
- "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "c0b7e55e-fcab-4e66-bdae-bd0290f6aece",
+ "link": "https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-compression",
+ "service": "Front Door",
"severity": "中等",
- "text": "進行滲透測試",
- "waf": "安全"
+ "text": "在訪問可下載內容時使用檔壓縮。",
+ "waf": "性能"
},
{
- "checklist": "Azure App Service Review",
- "description": "部署根據 DevSecOps 實踐驗證和掃描漏洞的受信任代碼。",
- "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
- "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "graph": "resources | where type =~ 'microsoft.network/frontdoors' and properties['resourceState'] !~ 'migrated' | extend compliant = false | project id, compliant",
+ "guid": "cb8eb8c0-aa73-4a26-a495-6eba8dc4a243",
+ "link": "https://learn.microsoft.com/azure/cdn/tier-migration",
+ "service": "Front Door",
+ "severity": "高",
+ "text": "如果目前使用的是經典 Azure Front Door,請考慮遷移到標準或高級 SKU,因為經典 Azure Front Door 將於 2027 年 3 月棄用。",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "67c33697-15b1-4752-aeee-0b9b588defc4",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/networking/global-web-applications/mission-critical-content-delivery",
+ "service": "Front Door",
"severity": "中等",
- "text": "部署經過驗證的代碼",
- "waf": "安全"
+ "text": "考慮將流量管理器負載均衡 Azure Front Door 和第三方 CDN 供應商 CDN 配置檔用於任務關鍵型高可用性方案。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure App Service Review",
- "description": "使用最新版本的受支援平臺、程式設計語言、協定和框架。",
- "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
- "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
- "service": "App Services",
+ "arm-service": "microsoft.network/frontdoors",
+ "checklist": "Azure Application Delivery Networking",
+ "guid": "972cd4cd-25b0-4b70-96e9-eab4bfd32907",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions?tabs=azurecli#restrict-access-to-a-specific-azure-front-door-instance",
+ "service": "Front Door",
"severity": "高",
- "text": "使用最新的平臺、語言、協定和框架",
+ "text": "將源作為應用服務的 Front Door 一起使用時,請考慮使用訪問限制僅通過 Azure Front Door 鎖定到應用服務的流量。",
"waf": "安全"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "388c3e25-e800-4ad2-9df3-f3d6ae1050b7",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview",
- "service": "Azure MySQL",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
+ "service": "Azure Data Factory",
"severity": "中等",
- "text": "利用靈活伺服器",
+ "text": "利用 Azure 數據工廠的 FTA 復原能力手冊",
"waf": "可靠性"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "de3aad1e-8c38-4ec9-9666-7313c005674b",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones",
- "service": "Azure MySQL",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"severity": "高",
- "text": "利用區域適用的可用區",
+ "text": "在支援可用區的區域中使用區域冗餘管道",
"waf": "可靠性"
},
{
- "checklist": "MySQL Review Checklist",
- "guid": "1e944a45-9c37-43e7-bd61-623b365a917e",
- "link": "https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication",
- "service": "Azure MySQL",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
+ "link": "https://learn.microsoft.com/azure/data-factory/source-control",
+ "service": "Azure Data Factory",
"severity": "中等",
- "text": "將數據傳入複製用於跨區域災難恢復方案",
+ "text": "使用 DevOps 透過 Github/Azure DevOps 集成備份 ARM 範本",
"waf": "可靠性"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
- "service": "Entra",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
"severity": "中等",
- "text": "使用一個 Entra 租戶來管理 Azure 資源,除非你對多租戶有明確的法規或業務要求。",
- "waf": "操作"
+ "text": "請確保在另一個區域中複製自承載集成運行時 VM",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Entra",
- "severity": "低",
- "text": "確保採用多租戶自動化方法來管理 Microsoft Entra ID 租戶",
- "waf": "操作"
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
+ "service": "Azure Data Factory",
+ "severity": "中等",
+ "text": "請確保在姊妹區域中複製或複製您的網路。必須在另一個區域創建 Vnet 的副本",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "Entra",
+ "arm-service": "Microsoft.DataFactory/datafactories",
+ "checklist": "Azure Data Factory Review Checklist",
+ "description": "如果ADF管道使用Key Vault,則無需執行任何操作即可複製Key Vault。Key Vault 是一項託管服務,Microsoft 會為你處理它",
+ "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "Azure Data Factory",
"severity": "低",
- "text": "利用 Azure Lighthouse 進行多租戶管理",
- "waf": "操作"
+ "text": "如果使用 Keyvault 集成,請使用 Keyvault 的 SLA 來瞭解可用性",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "應用與存儲相關的 Microsoft 雲安全基準中的指導",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "確保合作夥伴使用 Azure Lighthouse 管理租戶",
- "waf": "成本"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "348ef254-c27d-442e-abba-c7571559ab91",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
- "service": "Entra",
- "severity": "高",
- "text": "強制實施與雲運營模型一致的 RBAC 模型。跨管理組和訂閱的範圍和分配。",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "text": "請考慮「存儲的 Azure 安全基線”",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "默認情況下,Azure 儲存具有公共IP位址,並且可通過Internet訪問。專用終結點允許僅向需要訪問的 Azure 計算資源安全地公開 Azure 存儲,從而消除對公共 Internet 的暴露",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"severity": "高",
- "text": "僅對所有帳戶類型使用身份驗證類型「工作或學校帳戶」。避免使用 Microsoft 帳戶",
- "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "text": "考慮將專用終結點用於 Azure 存儲",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "新創建的存儲帳戶是使用ARM部署模型創建的,因此 RBAC、審核等都已啟用。確保訂閱中沒有具有經典部署模型的舊存儲帳戶",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "僅使用組來分配許可權。如果組管理系統已到位,則將本地組添加到僅 Entra ID 組。",
- "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
- "waf": "安全"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
- "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
- "service": "Entra",
- "severity": "低",
- "text": "對任何有權訪問 Azure 環境的用戶強制實施 Microsoft Entra ID 條件訪問策略",
- "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "text": "確保較舊的存儲帳戶未使用“經典部署模型”",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
- "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "利用 Microsoft Defender 瞭解可疑活動和錯誤配置。",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
"severity": "高",
- "text": "對有權訪問 Azure 環境的任何使用者強制實施多重身份驗證",
- "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
- "waf": "安全"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "Entra",
- "severity": "中等",
- "text": "強制實施 Microsoft Entra ID 特權身份管理 (PIM) 以建立零長期訪問許可權和最低許可權",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "text": "為所有存儲帳戶啟用 Microsoft DefenderEnable Defender for all of your storage accounts",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "軟刪除機制允許恢復意外刪除的 Blob。",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "如果計劃從 Active Directory 域服務切換到 Entra 域服務,請評估所有工作負載的相容性",
- "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "text": "為 blob 啟用“軟刪除”",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "請考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "將 Microsoft Entra ID 日誌與平臺中心 Azure Monitor 集成。Azure Monitor 允許圍繞 Azure 中的日誌和監視數據提供單一事實源,從而為組織提供雲原生選項,以滿足有關日誌收集和保留的要求。",
+ "text": "禁用 blob 的“軟刪除”",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
- "service": "Entra",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "容器的軟刪除使你能夠在刪除容器后恢復容器,例如從意外刪除操作中恢復。",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
"severity": "高",
- "text": "實施緊急訪問或打破玻璃帳戶,以防止租戶範圍的帳戶鎖定",
- "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
- "waf": "安全"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "35037e68-9349-4c15-b371-228514f4cdff",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "Entra",
- "severity": "中等",
- "text": "避免將本地同步帳戶用於 Microsoft Entra ID 角色分配。",
- "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
- "waf": "安全"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Entra",
- "severity": "中等",
- "text": "如果需要,請使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對內部應用程式(託管在雲中或本地)的安全和經過身份驗證的訪問。",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "text": "為容器啟用“軟刪除”",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "請考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "利用基於傳統中心輻射型網路拓撲的網路設計,滿足需要最大靈活性的網路方案。",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "text": "禁用容器的“軟刪除”",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "通過強制使用者在刪除之前先刪除刪除鎖,防止意外刪除存儲帳戶",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
"severity": "高",
- "text": "確保共用網路服務(包括 ExpressRoute 閘道、VPN 閘道和 Azure 防火牆或合作夥伴 NVA)位於中心虛擬網路中。如有必要,還可以部署 DNS 伺服器。",
- "waf": "成本"
+ "text": "在存儲帳戶上啟用資源鎖",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "VNet",
- "severity": "中等",
- "text": "對應用程式登陸區域中的所有公共IP位址使用 DDoS 網路或IP防護計畫。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "請考慮對 blob 使用“合法保留”或“基于時間的保留”策略,這樣就無法刪除 blob、容器或存儲帳戶。請注意,「不可能」實際上意味著「不可能」;存儲帳戶包含不可變 blob 後,「擺脫」該存儲帳戶的唯一方法是取消 Azure 訂閱。",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "考慮不可變的 blob",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
- "service": "NVA",
- "severity": "中等",
- "text": "部署合作夥伴網路技術或 NVA 時,請遵循合作夥伴供應商的指導",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "請考慮禁用對存儲帳戶的未受保護的 HTTP/80 訪問,以便對所有數據傳輸進行加密、完整性保護,並對伺服器進行身份驗證。",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "需要 HTTPS,即在儲存帳戶上禁用埠 80",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
- "service": "ExpressRoute",
- "severity": "低",
- "text": "如果需要在中心輻射型方案中的 ExpressRoute 和 VPN 閘道之間傳輸,請使用 Azure 路由伺服器。",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "在儲存帳戶上配置自定義域(主機名)時,請檢查是否需要 TLS/HTTPS;如果是這樣,可能需要將 Azure CDN 放在存儲帳戶的前面。",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "強制實施 HTTPS(禁用 HTTP)時,請檢查是否未對儲存帳戶使用自定義域 (CNAME)。",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
- "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
- "service": "ARS",
- "severity": "低",
- "text": "如果使用 Route Server,請對 Route Server 子網使用 /27 前置綴。",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "當用戶端使用SAS令牌訪問 blob 資料時,要求使用 HTTPS 有助於將憑據丟失的風險降至最低。",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "將共享訪問簽名 (SAS) 令牌限製為僅 HTTPS 連接",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
- "service": "VNet",
- "severity": "中等",
- "text": "對於跨 Azure 區域具有多個中心輻射型拓撲的網路體系結構,請使用中心 VNet 之間的全域虛擬網路對等互連將區域相互連接。",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
- "waf": "性能"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "在可能的情況下,AAD 令牌應優先於共用訪問簽名",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "使用 Azure Active Directory (Azure AD) 令牌進行 blob 訪問",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
- "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "將角色分配給使用者、組或應用程式時,請僅向該安全主體授予他們執行任務所需的許可權。限制對資源的訪問有助於防止無意和惡意濫用數據。",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用用於網路的 Azure Monitor 監視 Azure 上網路的端到端狀態。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
- "waf": "操作"
+ "text": "IaM 許可權中的最低特權",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
- "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
- "severity": "中等",
- "text": "將分支虛擬網路連接到中央中心虛擬網路時,請考慮 VNet 對等互連限制 (500),即可通過 ExpressRoute 播發的最大前綴數 (1000)",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "使用者委派 SAS 使用 Azure Active Directory (Azure AD) 憑據以及為 SAS 指定的許可權進行保護。使用者委派 SAS 在範圍和功能方面類似於服務 SAS,但比服務 SAS 具有安全優勢。",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "使用 SAS 時,首選「使用者委派 SAS」,而不是基於存儲帳戶密鑰的 SAS。",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
- "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
- "service": "VNet",
- "severity": "中等",
- "text": "考慮每個路由表的路由限制 (400)。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "存儲帳戶金鑰(“共用金鑰”)幾乎沒有審核功能。雖然可以監控誰/何時獲取密鑰副本,但一旦密鑰掌握在多個人手中,就不可能將使用方式歸因於特定使用者。僅依靠 AAD 身份驗證可以更輕鬆地將存儲存取許可權綁定到使用者。",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "請考慮禁用存儲帳戶密鑰,以便僅支援 AAD 訪問(和使用者委派 SAS)。",
+ "waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
- "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "使用活動日誌數據來標識查看或更改存儲帳戶安全性的“時間”、“人員”、“內容”和“方式”(即存儲帳戶密鑰、訪問策略等)。",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
"severity": "高",
- "text": "配置 VNet 對等互連時,使用「允許流量流向遠端虛擬網路」設置",
- "waf": "可靠性"
+ "text": "請考慮使用 Azure Monitor 審核存儲帳戶上的控制平面操作",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "通過金鑰過期策略,您可以設置帳戶訪問金鑰輪換的提醒。如果指定的時間間隔已過且鍵尚未旋轉,則會顯示提醒。",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用 ExpressRoute Direct 時,請配置 MACsec,以便加密組織路由器和 MSEE 之間的第二層級別的流量。該圖顯示了流中的此加密。",
+ "text": "使用存儲帳戶密鑰時,請考慮啟用“金鑰過期策略”",
"waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
- "severity": "低",
- "text": "對於無法使用MACsec的方案(例如,不使用ExpressRoute Direct),請使用 VPN 閘道通過 ExpressRoute 專用對等互連建立 IPsec 隧道。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS 過期策略指定 SAS 有效的建議時間間隔。SAS 過期策略適用於服務 SAS 或帳戶 SAS。當使用者生成的服務 SAS 或帳戶 SAS 的有效期間隔大於建議的時間間隔時,他們會看到警告。",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "考慮配置 SAS 過期策略",
"waf": "安全"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "ExpressRoute",
- "severity": "高",
- "text": "確保在 Azure 區域和本地位置之間不使用重疊的 IP 位址空間",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "存儲存取策略提供了撤銷服務 SAS 許可權的選項,而無需重新生成儲存帳戶密鑰。",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "考慮將 SAS 連結到儲存存取策略",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
- "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
- "severity": "低",
- "text": "使用專用 Internet 位址分配範圍 (RFC 1918) 中的 IP 位址。",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "請考慮配置應用程式的原始程式碼儲存庫,以檢測簽入的連接字串和存儲帳戶密鑰。",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
- "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "理想情況下,應用程式應使用託管標識向 Azure 儲存進行身份驗證。如果無法做到這一點,請考慮在 Azure KeyVault 或等效服務中使用存儲憑據(連接字串、存儲帳戶密鑰、SAS、服務主體憑據)。",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
"severity": "高",
- "text": "確保IP位址空間不被浪費,不要創建不必要的大型虛擬網路(例如 /16)Ensure that that IP address space is not disdised, don't create un不必要的大型虛擬網路(例如 /16)Ensure that that IP address space is not waste, don't create un不必要的大型虛擬網络(例如 /16)Ensure that that IP address space is",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "性能"
+ "text": "請考慮將連接字串儲存在 Azure KeyVault 中(在無法實現託管標識的情況下)",
+ "waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
- "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "在臨時 SAS 服務 SAS 或帳戶 SAS 上使用近期過期時間。這樣,即使 SAS 遭到入侵,它也只能在很短的時間內有效。如果無法引用存儲訪問策略,則此做法尤為重要。近期過期時間還通過限制可上傳到 blob 的時間來限制可寫入 blob 的數據量。",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "高",
- "text": "避免對生產網站和DR網站使用重疊的IP位址範圍。",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "可靠性"
+ "text": "爭取縮短臨時 SAS 的有效期",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "創建 SAS 時,請盡可能具體和嚴格。首選單個資源和操作的 SAS,而不是提供更廣泛訪問許可權的 SAS。",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "對於只需要在 Azure 中進行名稱解析的環境,請使用 Azure 專用 DNS 進行解析,並使用委派區域進行名稱解析(例如“azure.contoso.com”)。",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "操作"
+ "text": "將窄範圍應用於SAS",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
- "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
- "service": "DNS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS 可以包含用戶端 IP 位址或位址範圍有權使用 SAS 請求資源的參數。",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "對於需要跨 Azure 和本地進行名稱解析的環境,請考慮使用 Azure DNS 專用解析程式。",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "text": "盡可能考慮將SAS的範圍限定為特定的用戶端IP位址",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
- "service": "DNS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "SAS 無法限制用戶端上傳的數據量;考慮到存儲量隨時間變化的定價模型,驗證用戶端是否惡意上傳了大量內容可能是有意義的。",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
"severity": "低",
- "text": "需要並部署自己的 DNS(例如 Red Hat OpenShift)的特殊工作負載應使用其首選的 DNS 解決方案。",
- "waf": "操作"
+ "text": "請考慮在用戶端使用SAS上傳檔后檢查上傳的數據。",
+ "waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "614658d3-558f-4d77-849b-821112df27ee",
- "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
- "service": "DNS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "使用「本地使用者帳戶」通過 SFTP 訪問 Blob 儲存時,“通常”RBAC 控制不適用。通過 NFS 或 REST 進行的 Blob 訪問可能比 SFTP 訪問更嚴格。遺憾的是,截至 2023 年初,本地使用者是 SFTP 端點當前支援的唯一身份管理形式",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
"severity": "高",
- "text": "啟用 Azure DNS 的自動註冊,以自動管理虛擬網路中部署的虛擬機的 DNS 記錄的生命週期。",
- "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
- "waf": "操作"
+ "text": "SFTP:限制 SFTP 訪問的「本地使用者」數量,並審核一段時間內是否需要訪問。",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
- "service": "Bastion",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "請考慮使用 Azure Bastion 安全地連接到網路。",
+ "text": "SFTP:SFTP 端點不支持類似 POSIX 的 ACL。",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
- "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
- "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
- "service": "Bastion",
- "severity": "中等",
- "text": "在子網 /26 或更大範圍內使用 Azure Bastion。",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "存儲支援 CORS(跨域資源分享),即一種 HTTP 功能,使來自不同域的 Web 應用程式能夠放寬同源策略。啟用 CORS 時,請將 CorsRules 保留為最低許可權。",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "避免過於寬泛的 CORS 策略",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "WAF",
- "severity": "中等",
- "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為與登陸區域的入站 HTTP/S 連接提供全域保護。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "靜態數據始終在伺服器端加密,此外也可能在用戶端加密。伺服器端加密可能使用平臺管理的金鑰(預設)或客戶管理的金鑰進行。用戶端加密可以通過讓用戶端按 blob 向 Azure 儲存提供加密/解密金鑰,或者完全在用戶端處理加密來實現。因此,完全不依賴 Azure 存儲來保證機密性。",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "確定應如何加密靜態數據。了解數據的線程模型。",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
- "severity": "低",
- "text": "使用 Azure Front Door 和 Azure 應用程式閘道幫助保護 HTTP/S 應用時,請使用 Azure Front Door 中的 WAF 策略。鎖定 Azure 應用程式閘道,以便僅接收來自 Azure Front Door 的流量。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "確定應使用哪種/是否應使用平臺加密。",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "WAF",
- "severity": "高",
- "text": "部署 WAF 和其他反向代理是入站 HTTP/S 連接所必需的,將它們部署在登陸區域虛擬網路中,並與它們保護並公開給 Internet 的應用一起部署。",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "確定應使用哪種/是否應使用用戶端加密。",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Blob Storage Review",
+ "description": "利用 Resource Graph 資源管理器(資源 | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true)查找允許匿名 blob 訪問的存儲帳戶。",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
"severity": "高",
- "text": "使用 Azure DDoS 網路或 IP 保護計劃來幫助保護虛擬網路中的公共 IP 位址終結點。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "考慮是否需要公共 blob 訪問,或者是否可以對某些存儲帳戶禁用公共 blob 訪問。",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
- "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
- "service": "VNet",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "41faa1ed-b7f0-447d-8cba-4a4905e5bb83",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
"severity": "高",
- "text": "在即將到來的重大更改之前,評估和審查網路出站流量配置和策略。2025 年 9 月 30 日,新部署的預設出站訪問將停用,僅允許顯式訪問配置",
+ "text": "使 2 個副本具有 99.9% 的讀取操作可用性",
"waf": "可靠性"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
- "service": "VNet",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7d956fd9-788a-4845-9b9f-c0340972d810",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#high-availability",
+ "service": "Cognitive Search",
+ "severity": "中等",
+ "text": "使 3 個副本具有 99.9% 的讀/寫操作可用性",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support",
+ "service": "Cognitive Search",
"severity": "高",
- "text": "添加診斷設置以保存所有受保護的公共IP位址(DDoS IP或網路保護)的 DDoS 相關日誌。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "安全"
+ "text": "通過啟用讀取和/或寫入副本來利用可用區",
+ "waf": "可靠性"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions",
+ "service": "Cognitive Search",
"severity": "中等",
- "text": "確保已調查使用 ExpressRoute 作為與 Azure 的主要連接的可能性。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "性能"
+ "text": "對於區域冗餘,請在2個或更多區域中為搜索手動創建服務,因為它不提供跨地理區域複製搜索索引的自動方法",
+ "waf": "可靠性"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "description": "可以使用 AS 路徑前置和連接權重來影響從 Azure 到本地的流量,並使用自己的路由器中的全部 BGP 屬性來影響從本地到 Azure 的流量。",
- "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "3c964882-aec9-4d44-9f68-4b5f2efbbdb6",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services",
+ "service": "Cognitive Search",
"severity": "中等",
- "text": "使用多條 ExpressRoute 線路或多個本地位置時,請確保使用 BGP 屬性優化路由(如果首選某些路徑)。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "若要跨多個服務同步數據,請使用索引器更新多個服務上的內容,或使用 REST API 推送多個服務上的內容更新",
"waf": "可靠性"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
- "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "85ee93c9-f53c-4803-be51-e6e4aa37ff4e",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests",
+ "service": "Cognitive Search",
"severity": "中等",
- "text": "確保根據頻寬和性能要求為 ExpressRoute/VPN 閘道使用正確的 SKU。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "性能"
+ "text": "使用 Azure 流量管理器協調請求",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
- "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
- "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
- "service": "ExpressRoute",
+ "arm-service": "Microsoft.Search/searchServices",
+ "checklist": "Cognitive Search Review Checklist",
+ "guid": "7be10278-57c1-4a61-8ee3-895aebfec5aa",
+ "link": "https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives",
+ "service": "Cognitive Search",
"severity": "高",
- "text": "確保僅當達到證明其成本合理的頻寬時,才使用無限數據的ExpressRoute線路。",
- "waf": "成本"
+ "text": "備份和還原 Azure 認知搜索索引。使用此範例代碼將索引定義和快照備份到一系列 Json 檔",
+ "waf": "可靠性"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
- "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
- "service": "ExpressRoute",
- "severity": "高",
- "text": "如果線路的對等互連位置支援本地 SKU 的 Azure 區域,則利用 ExpressRoute 的本地 SKU 來降低線路的成本。",
- "waf": "成本"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b32e1aa1-4813-4602-88fe-27ca2891f421",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations",
+ "service": "App Services",
+ "severity": "低",
+ "text": "有關最佳實踐,請參閱基線高可用性區域冗餘 Web 應用程式體系結構",
+ "waf": "可靠性"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
- "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "中等",
- "text": "在受支援的 Azure 區域中部署區域冗餘 ExpressRoute 閘道。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "text": "使用高級層和標準層。這些層支援暫存槽和自動備份。",
"waf": "可靠性"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a7e2e6c2-491f-4fa4-a82b-521d0bc3b202",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service",
+ "service": "App Services",
+ "severity": "高",
+ "text": "利用區域適用的可用性區域(需要高級 v2 或 v3 層)",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "中等",
- "text": "對於需要高於 10 Gbps 的頻寬或專用 10/100 Gbps 埠的方案,請使用 ExpressRoute Direct。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "性能"
+ "text": "實施健康檢查",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-backup",
+ "service": "App Services",
+ "severity": "高",
+ "text": "請參閱 Azure 應用服務的備份和還原最佳做法",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2",
+ "link": "https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability",
+ "service": "App Services",
+ "severity": "高",
+ "text": "實現 Azure 應用服務可靠性最佳做法",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "bd2a865c-0835-4418-bb58-4df91a5a9b3f",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only",
+ "service": "App Services",
+ "severity": "低",
+ "text": "熟悉如何在災難期間將應用服務應用移動到另一個區域",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service",
+ "service": "App Services",
+ "severity": "高",
+ "text": "熟悉 Azure 應用服務中的可靠性支援",
+ "waf": "可靠性"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
- "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
+ "service": "App Services",
"severity": "中等",
- "text": "如果需要低延遲,或者從本地到 Azure 的輸送量必須大於 10 Gbps,請啟用 FastPath 以繞過數據路徑的 ExpressRoute 閘道。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "性能"
+ "text": "確保為在應用服務計劃上運行的函數應用啟用“Always On”",
+ "waf": "可靠性"
},
{
- "arm-service": "microsoft.network/vpnGateways",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
- "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
- "service": "VPN",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab",
+ "link": "https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check",
+ "service": "App Services",
"severity": "中等",
- "text": "使用區域冗餘 VPN 閘道將分支或遠端位置連接到 Azure(如果可用)。",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "text": "使用運行狀況檢查監視應用服務實例",
"waf": "可靠性"
},
{
- "arm-service": "microsoft.network/vpnGateways",
- "checklist": "Azure Landing Zone Review",
- "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
- "service": "VPN",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "c7d3e5f9-a19c-4833-8ca6-1dcb0128e129",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview",
+ "service": "App Services",
"severity": "中等",
- "text": "在本地使用冗餘 VPN 設備(主動/主動或主動/被動)。",
- "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "text": "使用 Application Insights 可用性測試監視 Web 應用或網站的可用性和回應能力",
"waf": "可靠性"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "guid": "b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests",
+ "service": "App Services",
+ "severity": "低",
+ "text": "使用 Application Insights 標準測試監視 Web 應用或網站的可用性和回應能力",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "使用 Azure Key Vault 儲存應用程式所需的任何機密。 Key Vault 為儲存機密提供安全且經過審核的環境,並通過 Key Vault SDK 或應用服務 Key Vault 引用與應用服務很好地集成。",
+ "guid": "834ac932-223e-4ce8-8b12-3071a5416415",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
"severity": "高",
- "text": "如果使用 ExpressRoute Direct,請考慮使用本地 Azure 區域的 ExpressRoute 本地線路來節省成本",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "成本"
+ "text": "使用 Key Vault 儲存機密",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
- "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
- "service": "ExpressRoute",
- "severity": "中等",
- "text": "當需要流量隔離或專用頻寬時(例如,用於分離生產環境和非生產環境),請使用不同的 ExpressRoute 線路。它將幫助您確保隔離的路由域並減輕干擾鄰居風險。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "使用託管標識通過 Key Vault SDK 或透過應用服務 Key Vault 引用連接到 Key Vault。",
+ "guid": "833ea3ad-2c2d-4e73-8165-c3acbef4abe1",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-key-vault-references",
+ "service": "App Services",
+ "severity": "高",
+ "text": "使用託管標識連接到 Key VaultUse Managed Identity to connect to Key Vault",
"waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
- "service": "ExpressRoute",
- "severity": "中等",
- "text": "使用內置的 Express Route Insights 監視 ExpressRoute 的可用性和利用率。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "操作"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "將應用服務 TLS 證書存儲在 Key Vault 中。",
+ "guid": "f8d39fda-4776-4831-9c11-5775c2ea55b4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-certificate",
+ "service": "App Services",
+ "severity": "高",
+ "text": "使用 Key Vault 儲存 TLS 證書。",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
- "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "處理敏感信息的系統應隔離。 為此,請使用單獨的應用服務計劃或應用服務環境,並考慮使用不同的訂閱或管理組。",
+ "guid": "6ad48408-ee72-4734-a475-ba18fdbf590c",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-hosting-plans",
+ "service": "App Services",
"severity": "中等",
- "text": "使用連接監視器進行跨網路的連接監視,尤其是在本地和 Azure 之間。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "操作"
+ "text": "隔離處理敏感信息的系統",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
- "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "應用服務上的本地磁碟未加密,敏感數據不應存儲在這些磁碟上。 (例如:D:\\\\Local 和 %TMP%)。",
+ "guid": "e65de8e0-3f9b-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access",
+ "service": "App Services",
"severity": "中等",
- "text": "使用來自不同對等互連位置的 ExpressRoute 線路實現冗餘。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "可靠性"
+ "text": "不要將敏感數據存儲在本地磁碟上",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "對於經過身份驗證的 Web 應用程式,請使用成熟的標識提供者,例如 Azure AD 或 Azure AD B2C。 利用所選的應用程式框架與此提供程式整合,或使用應用服務身份驗證/授權功能。",
+ "guid": "919ca0b2-c121-459e-814b-933df574eccc",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-authentication-authorization",
+ "service": "App Services",
"severity": "中等",
- "text": "使用網站到網站 VPN 作為 ExpressRoute 的故障轉移,尤其是在僅使用單個 ExpressRoute 線路時。",
- "waf": "可靠性"
+ "text": "使用已建立的身份提供程式進行身份驗證",
+ "waf": "安全"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
- "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "將代碼從受控且受信任的環境(例如管理良好且安全的 DevOps 部署管道)部署到應用服務。這樣可以避免未經版本控制和驗證從惡意主機部署的代碼。",
+ "guid": "3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-best-practices",
+ "service": "App Services",
"severity": "高",
- "text": "如果在 GatewaySubnet 中使用路由表,請確保傳播閘道路由。",
- "waf": "可靠性"
+ "text": "從受信任的環境部署",
+ "waf": "安全"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "d581a947-69a2-4783-942e-9df3664324c8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "禁用 FTP/FTPS 和 WebDeploy/SCM 的基本身份驗證。 這將禁止訪問這些服務,並強制使用 Azure AD 安全終結點進行部署。 請注意,還可以使用 Azure AD 憑據打開 SCM 網站。",
+ "guid": "5d04c2c3-919c-4a0b-8c12-159e114b933d",
+ "link": "https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication",
+ "service": "App Services",
"severity": "高",
- "text": "如果使用 ExpressRoute,則本地路由應是動態的:如果連接失敗,它應收斂到線路的剩餘連接。理想情況下,負載應在兩個連接之間共用為主動/主動,但也支持主動/被動。",
- "waf": "可靠性"
- },
- {
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
- "service": "ExpressRoute",
- "severity": "中等",
- "text": "確保 ExpressRoute 線路的兩個物理連結連接到網路中的兩個不同的邊緣設備。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "可靠性"
+ "text": "禁用基本身份驗證",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
- "service": "ExpressRoute",
- "severity": "中等",
- "text": "確保在客戶或供應商邊緣路由設備上啟用並配置雙向轉發檢測 (BFD)。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "可靠性"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "如果可能,請使用託管標識連接到 Azure AD 受保護的資源。 如果無法做到這一點,請將機密存儲在 Key Vault 中,並改用託管標識連接到 Key Vault。",
+ "guid": "f574eccc-d9bd-43ba-bcda-3b54eb2eb03d",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp",
+ "service": "App Services",
+ "severity": "高",
+ "text": "使用託管標識連接到資源",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "如果使用 Azure 容器註冊表中儲存的映像,請使用託管標識拉取這些映像。",
+ "guid": "d9a25827-18d2-4ddb-8072-5769ee6691a4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry",
+ "service": "App Services",
"severity": "高",
- "text": "將 ExpressRoute 閘道連接到來自不同對等互連位置的兩條或多條線路,以提高復原能力。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "可靠性"
+ "text": "使用託管標識拉取容器",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
- "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "通過配置應用服務的診斷設置,可以將所有遙測數據發送到Log Analytics,作為日誌記錄和監視的中心目標。這允許你監視應用服務的運行時活動,例如 HTTP 日誌、應用程式日誌、平臺日誌等。",
+ "guid": "47768314-c115-4775-a2ea-55b46ad48408",
+ "link": "https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs",
+ "service": "App Services",
"severity": "中等",
- "text": "為 ExpressRoute 虛擬網路閘道配置診斷日誌和警報。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "操作"
+ "text": "將應用服務運行時日誌發送到Log Analytics",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
- "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
- "service": "ExpressRoute",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "設置診斷設置,將活動日誌發送到Log Analytics,作為日誌記錄和監視的中心目標。這樣,你就可以監視應用服務資源本身上的控制平面活動。",
+ "guid": "ee72734b-475b-4a18-bdbf-590ce65de8e0",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log",
+ "service": "App Services",
"severity": "中等",
- "text": "避免使用 ExpressRoute 線路進行 VNet 到 VNet 通信。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "性能"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
- "severity": "高",
- "text": "使用 Azure 防火牆管理發往 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "將應用服務活動日誌發送到Log Analytics",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "使用區域 VNet 集成、網路安全組和 UDR 的組合來控制出站網路訪問。 流量應路由到 NVA,例如 Azure 防火牆。 確保監控防火牆的日誌。",
+ "guid": "c12159e1-14b9-433d-b574-ecccd9bd3baf",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-vnet-integration",
+ "service": "App Services",
"severity": "中等",
- "text": "創建全域 Azure 防火牆策略以管理全球網路環境中的安全狀況,並將其分配給所有 Azure 防火牆實例。通過 Azure 基於角色的訪問控制將增量防火牆策略委託給本地安全團隊,允許精細策略滿足特定區域的要求。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "應控制出站網路訪問",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
- "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "可以使用 VNet 集成並使用 VNet NAT 閘道或 NVA(如 Azure 防火牆)來提供穩定的出站 IP。 這允許接收方根據需要根據IP列出允許清單。 請注意,對於與 Azure 服務的通信,通常不需要依賴於 IP 位址,應改用服務終結點等機制。 (此外,在接收端使用專用終結點可避免發生 SNAT,並提供穩定的出站 IP 範圍。",
+ "guid": "cda3b54e-b2eb-403d-b9a2-582718d2ddb1",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration",
+ "service": "App Services",
"severity": "低",
- "text": "如果組織希望使用此類解決方案來幫助保護出站連接,請在 Firewall Manager 中配置受支援的合作夥伴 SaaS 安全提供者。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "確保與互聯網位址的出站通信具有穩定的IP",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
- "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
- "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "使用應用服務訪問限制、服務終結點或專用終結點的組合來控制入站網路訪問。對於 Web 應用本身和 SCM 網站,可能需要和配置不同的訪問限制。",
+ "guid": "0725769e-e669-41a4-a34a-c932223ece80",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"severity": "高",
- "text": "使用基於 FQDN 的網路規則和具有 DNS 代理的 Azure 防火牆,通過應用程式規則不支援的協定篩選到 Internet 的出口流量。",
+ "text": "應控制入站網路訪問",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
- "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "使用 Web 應用程式防火牆(如應用程式閘道或 Azure Front Door)防範惡意入站流量。 請務必監控 WAF 的日誌。",
+ "guid": "b123071a-5416-4415-a33e-a3ad2c2de732",
+ "link": "https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints",
+ "service": "App Services",
"severity": "高",
- "text": "使用 Azure 防火牆高級版提供額外的安全性和保護。",
+ "text": "在應用服務前面使用 WAF",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
- "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "確保僅鎖定對 WAF 的訪問,從而無法繞過 WAF。 結合使用訪問限制、服務終結點和專用終結點。",
+ "guid": "165c3acb-ef4a-4be1-b8d3-9fda47768314",
+ "link": "https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions",
+ "service": "App Services",
"severity": "高",
- "text": "將 Azure 防火牆威脅情報模式配置為「警報」和「拒絕」,以獲得額外保護。",
+ "text": "避免繞過 WAF",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
- "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
- "service": "Firewall",
- "severity": "高",
- "text": "將 Azure 防火牆 IDPS 模式配置為「拒絕」 ,以獲得額外的保護。",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "在應用服務配置中將最低 TLS 策略設置為 1.2。",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.MinTlsVersion>=1.2) | distinct id,compliant",
+ "guid": "c115775c-2ea5-45b4-9ad4-8408ee72734b",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+ "service": "App Services",
+ "severity": "中等",
+ "text": "將最低 TLS 策略設置為 1.2",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
- "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "將應用服務配置為僅使用 HTTPS。 這會導致應用服務從 HTTP 重定向到 HTTPS。 強烈建議在代碼或 WAF 中使用 HTTP 嚴格傳輸安全性 (HSTS),這會通知瀏覽器只能使用 HTTPS 訪問網站。",
+ "graph": "where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux' )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant",
+ "guid": "475ba18f-dbf5-490c-b65d-e8e03f9bcbd4",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https",
+ "service": "App Services",
"severity": "高",
- "text": "對於未連接到虛擬 WAN 的 VNet 中的子網,請附加路由表,以便將 Internet 流量重定向到 Azure 防火牆或網路虛擬設備",
+ "text": "僅使用 HTTPS",
"waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
- "service": "Firewall",
- "severity": "中等",
- "text": "添加診斷設置,以使用「特定於資源」的目標表保存所有 Azure 防火牆部署的日誌。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "操作"
- },
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
- "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
- "service": "Firewall",
- "severity": "重要",
- "text": "從 Azure 防火牆經典規則(如果存在)遷移到防火牆策略。",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "操作"
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "不要在 CORS 配置中使用通配符,因為這允許所有源訪問服務(從而破壞 CORS 的目的)。具體而言,僅允許您希望能夠訪問服務的源。",
+ "guid": "68266abc-a264-4f9a-89ae-d9c55d04c2c3",
+ "link": "https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api",
+ "service": "App Services",
+ "severity": "高",
+ "text": "不得將通配符用於 CORS",
+ "waf": "安全"
},
{
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
- "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "不得在生產環境中啟用遠端調試,因為這會在服務上打開其他埠,從而增加攻擊面。請注意,該服務會在 48 小時後自動轉為遠端調試。",
+ "graph": "appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant",
+ "guid": "d9bd3baf-cda3-4b54-bb2e-b03dd9a25827",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings",
+ "service": "App Services",
"severity": "高",
- "text": "對 Azure 防火牆子網使用 /26 前置綴。",
+ "text": "關閉遠端調試",
"waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
- "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "啟用 Defender for App Service。 這(除其他威脅外)檢測與已知惡意IP位址的通信。 在操作過程中查看 Defender for App Service 中的建議。",
+ "guid": "18d2ddb1-0725-4769-be66-91a4834ac932",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction",
+ "service": "App Services",
"severity": "中等",
- "text": "將防火牆策略中的規則排列到規則集合組和規則集合中,並根據它們的使用頻率",
- "waf": "性能"
+ "text": "啟用 Defender for Cloud - Defender for App Service",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
- "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "Azure 在其網路上提供 DDoS 基本保護,可以通過智慧 DDoS 標準功能進行改進,該功能可以瞭解正常的流量模式並檢測異常行為。DDoS 標準適用於虛擬網路,因此必須為應用前面的網路資源(例如應用程式閘道或 NVA)配置它。",
+ "guid": "223ece80-b123-4071-a541-6415833ea3ad",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "App Services",
"severity": "中等",
- "text": "使用IP組或IP前置綴來減少IP表規則的數量",
- "waf": "性能"
+ "text": "在 WAF VNet 上啟用 DDOS 保護標準",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
- "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "如果使用 Azure 容器註冊表中儲存的映像,請使用其專用終結點和應用設置“WEBSITE_PULL_IMAGE_OVER_VNET”通過虛擬網络從 Azure 容器註冊表拉取這些映射。",
+ "guid": "2c2de732-165c-43ac-aef4-abe1f8d39fda",
+ "link": "https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry",
+ "service": "App Services",
"severity": "中等",
- "text": "避免將通配符作為DNATS的源IP,例如*或任何通配符,您應該為傳入的DNAT指定源IP",
- "waf": "性能"
+ "text": "通過虛擬網路拉取容器",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
- "link": "https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "按照參與的滲透測試規則對 Web 應用程式進行滲透測試。",
+ "guid": "eb2eb03d-d9a2-4582-918d-2ddb10725769",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/pen-testing",
+ "service": "App Services",
"severity": "中等",
- "text": "通過監控 SNAT 埠使用方式、評估 NAT 閘道設置和確保無縫故障轉移來防止 SNAT 埠耗盡。如果埠計數接近限制,則表明 SNAT 耗盡可能迫在眉睫。",
- "waf": "性能"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "346840b8-1064-496e-8396-4b1340172d52",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
- "service": "Firewall",
- "severity": "高",
- "text": "啟用 TLS 檢查",
- "waf": "性能"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
- "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
- "service": "Firewall",
- "severity": "低",
- "text": "使用 Web 類別允許或拒絕對特定主題的出站訪問。",
- "waf": "性能"
+ "text": "進行滲透測試",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
- "service": "Firewall",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "部署根據 DevSecOps 實踐驗證和掃描漏洞的受信任代碼。",
+ "guid": "19aed9c5-5d04-4c2c-9919-ca0b2c12159e",
+ "link": "https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure",
+ "service": "App Services",
"severity": "中等",
- "text": "作為 TLS 檢查的一部分,請計劃從 Azure 應用閘道接收流量以進行檢查。",
- "waf": "性能"
+ "text": "部署經過驗證的代碼",
+ "waf": "安全"
},
{
- "checklist": "Azure Landing Zone Review",
- "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
- "link": "https://learn.microsoft.com/azure/firewall/dns-details",
- "service": "Firewall",
- "severity": "中等",
- "text": "啟用 Azure 防火牆 DNS 代理配置",
+ "arm-service": "microsoft.web/sites",
+ "checklist": "Azure App Service Review",
+ "description": "使用最新版本的受支援平臺、程式設計語言、協定和框架。",
+ "guid": "114b933d-f574-4ecc-ad9b-d3bafcda3b54",
+ "link": "https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime",
+ "service": "App Services",
+ "severity": "高",
+ "text": "使用最新的平臺、語言、協定和框架",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
- "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
- "service": "Firewall",
+ "guid": "7bc1c396-2461-4698-b57f-30ca69525252",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/regions",
+ "service": "VNet",
"severity": "中等",
- "text": "確保有策略分配來拒絕直接綁定到虛擬機的公共IP位址",
- "waf": "安全"
+ "text": "在多個區域中部署 Azure 登陸區域連接資源,以便可以快速支援多區域應用程式登陸區域和災難恢復方案。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "可靠性"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
- "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
- "service": "Firewall",
- "severity": "低",
- "text": "將 Azure 防火牆與 Azure Monitor 集成,並啟用診斷日誌記錄來存儲和分析防火牆日誌。",
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations",
+ "service": "Entra",
+ "severity": "中等",
+ "text": "使用一個 Entra 租戶來管理 Azure 資源,除非對多租戶有明確的法規或業務要求。",
+ "training": "https://learn.microsoft.com/training/modules/deploy-resources-scopes-bicep/2-understand-deployment-scopes",
"waf": "操作"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
- "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
- "service": "Firewall",
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
+ "service": "Entra",
"severity": "低",
- "text": "為防火牆規則實施備份",
+ "text": "使用多租戶自動化方法管理您的 Microsoft Entra ID 租戶。",
+ "training": "https://learn.microsoft.com/entra/architecture/multi-tenant-user-management-introduction/",
"waf": "操作"
},
- {
- "ammp": true,
- "checklist": "Azure Landing Zone Review",
- "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "App Gateway",
- "severity": "高",
- "text": "確保注入虛擬網路的 Azure PaaS 服務的控制平面通信不會中斷,例如,使用 0.0.0.0/0 路由或阻止控制平面流量的 NSG 規則。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "安全"
- },
- {
- "arm-service": "microsoft.network/expressRouteCircuits",
- "checklist": "Azure Landing Zone Review",
- "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "ExpressRoute",
- "severity": "中等",
- "text": "通過專用終結點和 ExpressRoute 專用對等互連從本地訪問 Azure PaaS 服務。此方法可避免通過公共 Internet 進行傳輸。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
- "waf": "安全"
- },
- {
- "checklist": "Azure Landing Zone Review",
- "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
- "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "VNet",
- "severity": "中等",
- "text": "默認情況下,不要在所有子網上啟用虛擬網路服務終結點。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "安全"
- },
{
"checklist": "Azure Landing Zone Review",
- "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
- "link": "https://learn.microsoft.com/azure/app-service/networking-features",
- "service": "Firewall",
- "severity": "中等",
- "text": "使用 FQDN 而不是 Azure 防火牆或 NVA 中的 IP 位址篩選到 Azure PaaS 服務的出口流量,以防止數據外洩。如果使用專用連結,則可以阻止所有 FQDN,否則僅允許所需的 PaaS 服務。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
- "waf": "安全"
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
+ "service": "Entra",
+ "severity": "高",
+ "text": "使用具有相同 ID 的 Azure Lighthouse 進行多租戶管理。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/concepts/cross-tenant-management-experience",
+ "waf": "操作"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
- "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
- "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
- "service": "ExpressRoute",
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
+ "service": "Entra",
+ "severity": "高",
+ "text": "如果向合作夥伴授予管理租戶的許可權,請使用 Azure Lighthouse。",
+ "training": "https://learn.microsoft.com/azure/lighthouse/how-to/onboard-customer",
+ "waf": "成本"
+ },
+ {
+ "checklist": "Azure Landing Zone Review",
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/overview",
+ "service": "Entra",
"severity": "高",
- "text": "至少對閘道子網使用 /27 前置綴",
+ "text": "實施與您的雲操作模型相一致的 RBAC 模型。跨管理組和訂閱確定範圍和分配。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
- "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
- "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
- "service": "NSG",
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts",
+ "service": "Entra",
"severity": "中等",
- "text": "不要依賴使用 VirtualNetwork 服務標記的 NSG 入站預設規則來限制連接。",
+ "text": "僅對所有帳戶類型使用身份驗證類型 Work or school account。避免使用 Microsoft 帳戶",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
- "service": "NSG",
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
+ "service": "Entra",
"severity": "中等",
- "text": "使用 NSG 説明保護跨子網的流量,以及跨平台的東/西流量(登陸區域之間的流量)。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "text": "僅使用組來分配許可權。如果組管理系統已就位,請將本地組添加到僅 Entra ID 組。",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
- "graph": "Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)",
- "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
- "service": "NSG",
- "severity": "中等",
- "text": "應用程式團隊應使用子網級別 NSG 的應用程式安全組來幫助保護登陸區域內的多層 VM。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "link": "https://learn.microsoft.com/azure/active-directory/conditional-access/overview",
+ "service": "Entra",
+ "severity": "高",
+ "text": "對 Azure 環境具有許可權的任何使用者強制實施 Microsoft Entra ID 條件訪問策略。",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
- "severity": "中等",
- "text": "使用 NSG 和應用程式安全組對登陸區域內的流量進行微分段,並避免使用中央 NVA 篩選流量。",
- "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "link": "https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks",
+ "service": "Entra",
+ "severity": "高",
+ "text": "對有權訪問 Azure 環境的任何使用者強制實施多重身份驗證。",
+ "training": "https://learn.microsoft.com/entra/identity/authentication/concept-mandatory-multifactor-authentication",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "NSG",
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
+ "service": "Entra",
"severity": "中等",
- "text": "啟用 VNet 流日誌並將其饋送到流量分析中,以深入了解內部和外部流量流。",
- "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "text": "強制實施 Microsoft Entra ID Privileged Identity Management (PIM) 以建立零長期訪問和最低許可權。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
"waf": "安全"
},
{
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
- "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "NSG",
+ "guid": "8b9fe5c4-1049-4d40-9a92-3c3474d00018",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"severity": "中等",
- "text": "考慮每個 NSG 的 NSG 規則限制 (1000)。",
- "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "waf": "可靠性"
+ "text": "如果計劃從 Active Directory 域服務切換到 Entra 域服務,請評估所有工作負載的相容性。",
+ "training": "https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
- "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
- "service": "VWAN",
+ "graph": "resources | where type == 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "0dd4e625-9c4b-4a56-b54a-4357bac12761",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/overview",
+ "service": "Entra",
"severity": "中等",
- "text": "請考慮使用虛擬 WAN 簡化 Azure 網路管理,並確保在虛擬 WAN 路由設計清單中明確描述你的方案",
- "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
- "waf": "操作"
+ "text": "使用 Microsoft Entra 域服務時,請使用副本集。副本集將提高託管域的復原能力,並允許您部署到其他區域。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-active-directory/6-examine-azure-domain-services",
+ "waf": "可靠性"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor",
+ "service": "Entra",
"severity": "中等",
- "text": "使用每個 Azure 區域的虛擬 WAN 中心,通過通用的全域 Azure 虛擬 WAN 跨 Azure 區域將多個登陸區域連接在一起。",
- "waf": "性能"
+ "text": "將 Microsoft Entra ID 紀錄與平臺中心的 Azure Monitor 集成。Azure Monitor 允許 Azure 中日誌和監視數據的單一事實來源,為組織提供雲原生選項來滿足日誌收集和保留的要求。",
+ "training": "https://learn.microsoft.com/entra/identity/monitoring-health/howto-integrate-activity-logs-with-azure-monitor-logs",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
+ "ammp": true,
"checklist": "Azure Landing Zone Review",
- "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
- "severity": "低",
- "text": "遵循“Azure 中的流量保留在 Azure 中”原則,以便通過 Microsoft 主幹網络在 Azure 中跨資源進行通信",
- "waf": "性能"
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access",
+ "service": "Entra",
+ "severity": "高",
+ "text": "實施緊急訪問或不受限帳戶,以防止租戶範圍的帳戶鎖定。默認情況下,MFA 將於 2024 年 10 月為所有用戶開啟。我們建議更新這些帳戶以使用密鑰 (FIDO2) 或為 MFA 配置基於證書的身份驗證。",
+ "training": "https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access#exclude-at-least-one-account-from-conditional-access-policies",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
- "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "service": "VWAN",
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
+ "service": "Entra",
"severity": "中等",
- "text": "對於出站 Internet 流量保護和篩選,請在安全中心部署 Azure 防火牆",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "text": "請勿將本地同步帳戶用於 Microsoft Entra ID 角色分配,除非你的方案特別需要它。",
+ "training": "https://learn.microsoft.com/learn/modules/design-identity-security-strategy/",
"waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
"checklist": "Azure Landing Zone Review",
- "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "service": "VWAN",
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
+ "service": "Entra",
"severity": "中等",
- "text": "確保網路體系結構在 Azure 虛擬 WAN 限制範圍內。",
- "waf": "可靠性"
+ "text": "使用 Microsoft Entra ID 應用程式代理為遠端使用者提供對應用程式的訪問許可權時,請將其作為平臺資源進行管理,因為每個租戶只能有一個實例。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
- "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
- "service": "VWAN",
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity",
+ "service": "VNet",
"severity": "中等",
- "text": "使用適用於虛擬 WAN 的 Azure Monitor 見解監視虛擬 WAN 的端到端拓撲、狀態和關鍵指標。",
- "waf": "操作"
+ "text": "對於需要最大靈活性的網路方案,請使用中心輻射型網路拓撲。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
- "service": "VWAN",
- "severity": "中等",
- "text": "請確保 IaC 部署不會在虛擬 WAN 中禁用分支到分支通信,除非應顯式阻止這些流。",
- "waf": "可靠性"
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/traditional-azure-networking-topology",
+ "service": "VNet",
+ "severity": "高",
+ "text": "在中心虛擬網路中部署共用網路服務,包括 ExpressRoute 閘道、VPN 閘道和 Azure 防火牆或合作夥伴 NVA。如有必要,還要部署 DNS 服務。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "成本"
},
{
- "arm-service": "microsoft.network/virtualWans",
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
- "service": "VWAN",
- "severity": "中等",
- "text": "使用 AS-Path 作為中心路由首選項,因為它比 ExpressRoute 或 VPN 更靈活。",
- "waf": "可靠性"
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
+ "service": "VNet",
+ "severity": "高",
+ "text": "對應用程式登陸區域中的所有公共IP位址使用 DDoS 網路或IP保護計畫。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.network/virtualWans",
+ "arm-service": "Microsoft.Compute/virtualMachines",
"checklist": "Azure Landing Zone Review",
- "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
- "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
- "service": "VWAN",
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha",
+ "service": "NVA",
"severity": "中等",
- "text": "請確保 IaC 部署在虛擬 WAN 中配置基於標籤的傳播,否則虛擬中心之間的連接將受到損害。",
+ "text": "部署合作夥伴網路技術或 NVA 時,請遵循合作夥伴供應商的指導。",
"waf": "可靠性"
},
{
- "ammp": true,
- "arm-service": "microsoft.network/virtualWans",
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "9c75dfef-573c-461c-a698-68598595581a",
- "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
- "service": "VWAN",
- "severity": "高",
- "text": "為虛擬中心分配足夠的IP空間,最好是 /23前置綴。",
- "waf": "可靠性"
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn",
+ "service": "ExpressRoute",
+ "severity": "低",
+ "text": "如果需要在中心輻射型方案中在 ExpressRoute 和 VPN 閘道之間傳輸,請使用 Azure 路由伺服器。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
+ "waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualHubs",
"checklist": "Azure Landing Zone Review",
- "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "高",
- "text": "戰略性地利用 Azure Policy,為環境定義控制,使用策略計劃對相關策略進行分組。",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "link": "https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1",
+ "service": "ARS",
+ "severity": "低",
+ "text": "如果使用路由伺服器,請對路由伺服器子網使用 /27 前置綴。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-route-server/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region",
+ "service": "VNet",
"severity": "中等",
- "text": "將法規和合規性要求映射到 Azure Policy 定義和 Azure 角色分配。",
- "waf": "安全"
+ "text": "對於跨 Azure 區域具有多個中心輻射型拓撲的網路體系結構,請在中心 VNet 之間使用全域虛擬網路對等互連將區域相互連接。",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/",
+ "waf": "性能"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview",
+ "service": "VNet",
"severity": "中等",
- "text": "在中間根管理組建立 Azure Policy 定義,以便可以在繼承的範圍內分配這些定義",
- "waf": "安全"
+ "text": "使用適用於網路的 Azure Monitor 監視 Azure 上網路的端到端狀態。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
+ "waf": "操作"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | summarize peeringcount = count() by id | extend compliant = (peeringcount < 450) | distinct id,compliant",
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
"severity": "中等",
- "text": "如果需要,在最高適當級別管理策略分配,在最低級別管理排除項。",
- "waf": "安全"
+ "text": "如果一個區域中的分支網路超過 400 個,請部署一個額外的中心以繞過 VNet 對等互連限制 (500) 和可通過 ExpressRoute 播發的最大前綴數 (1000)。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "43334f24-9116-4341-a2ba-527526944008",
- "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
- "service": "Policy",
- "severity": "低",
- "text": "使用 Azure Policy 控制使用者可以在訂閱/管理組級別預配哪些服務",
- "waf": "安全"
+ "graph": "resources | where type=='microsoft.network/routetables' | mvexpand properties.routes | summarize routeCount = count() by id | extend compliant = (routeCount < 360) | distinct id,compliant",
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits",
+ "service": "VNet",
+ "severity": "中等",
+ "text": "將每個路由表的路由數限制為 400。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "中等",
- "text": "盡可能使用內置策略,以最大程度地減少操作開銷。",
- "waf": "安全"
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)",
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering",
+ "service": "VNet",
+ "severity": "高",
+ "text": "配置 VNet 對等互連時,請使用「允許流量流向遠端虛擬網路」設置。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/",
+ "waf": "可靠性"
},
{
"checklist": "Azure Landing Zone Review",
- "description": "通過將「資源策略參與者」角色分配給特定範圍,可以將策略管理委派給相關團隊。例如,中央IT團隊可以監督管理組級別的策略,而應用程式團隊則處理其訂閱的策略,從而在遵守組織標準的情況下實現分散式治理。",
- "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
- "service": "Policy",
- "severity": "中等",
- "text": "在特定範圍內分配內置的「資源策略參與者」角色,以啟用應用程式級治理。",
- "waf": "安全"
+ "graph": "resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id), PrivateIPZones = feIPconfigs.zones, PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PrivateSubnetId) | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2 | project name, feConfigName, id | union (resources | where type == 'microsoft.network/loadbalancers' | where tolower(sku.name) != 'basic' | mv-expand feIPconfigs = properties.frontendIPConfigurations | extend feConfigName = (feIPconfigs.name), PIPid = toupper(feIPconfigs.properties.publicIPAddress.id), JoinID = toupper(id) | where isnotempty(PIPid) | join kind=innerunique ( resources | where type == 'microsoft.network/publicipaddresses' | where isnull(zones) or array_length(zones) < 2 | extend LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))), InnerID = toupper(id) ) on $left.PIPid == $right.InnerID) | project name, id, tags, param1='Zones: No Zone or Zonal', param2=strcat('Frontend IP Configuration:', ' ', feConfigName)",
+ "guid": "9dcd6250-9c4a-4382-aa9b-5b84c64fc1fe",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高",
+ "text": "將標準負載均衡器 SKU 與區域冗餘部署配合使用,選擇標準 SKU 負載均衡器可通過可用性區域和區域復原能力增強可靠性,確保部署能夠承受區域和區域故障。與 Basic 不同,它支援全域負載平衡並提供 SLA。",
+ "waf": "可靠性"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "19048384-5c98-46cb-8913-156a12476e49",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Policy",
- "severity": "中等",
- "text": "限制在根管理組範圍內進行的 Azure Policy 分配數,以避免在繼承範圍內通過排除項進行管理。",
- "waf": "安全"
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools == 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name == 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "48682fb1-1e86-4458-a686-518ebd47393d",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-load-balancer?tabs=graph#zone-redundant",
+ "service": "Load Balancers",
+ "severity": "高",
+ "text": "確保負載均衡器後端池至少包含兩個實例,在後端部署至少包含兩個實例的 Azure 負載均衡器可以防止單點故障並支援可伸縮性。",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
- "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
- "service": "Policy",
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "如果存在任何數據主權要求,可以部署 Azure 策略來強制實施這些要求",
- "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
+ "text": "使用 ExpressRoute Direct 時,請配置 MACsec,以便在組織路由器和 MSEE 之間的第二層加密流量。該圖顯示了這種加密流程。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
- "service": "Policy",
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "對於主權登陸區,主權政策基線的政策計劃將在正確的 MG 級別部署和分配。",
+ "text": "對於無法使用MACsec的情況(例如,不使用ExpressRoute Direct),請使用 VPN 閘道通過 ExpressRoute 專用對等互連建立 IPsec 隧道。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
- "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
- "service": "Policy",
- "severity": "中等",
- "text": "對於主權登陸區,記錄了“主權控制目標”到策略映射“。",
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "ExpressRoute",
+ "severity": "高",
+ "text": "確保 Azure 區域和本地位置之間沒有使用重疊的 IP 位址空間。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
- "service": "Policy",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\\\.|172\\\\.(1[6-9]|2[0-9]|3[01])\\\\.|192\\\\.168\\\\.)') | project id, compliant, cidr",
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
"severity": "中等",
- "text": "對於主權登陸區,CRUD的“主權控制目標到政策映射”的流程已經到位。",
+ "text": "使用私有互聯網的位址分配範圍 (RFC 1918) 中的IP位址。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
"waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
- "severity": "中等",
- "text": "使用單個監視器日誌工作區集中管理平臺,但 Azure 基於角色的訪問控制 (Azure RBAC)、數據主權要求或數據保留策略要求使用單獨的工作區的情況除外。",
- "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "waf": "操作"
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1] | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup, addressPrefix, compliant",
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
+ "service": "VNet",
+ "severity": "高",
+ "text": "確保IP位址空間不會浪費,不要創建不必要的大型虛擬網路(例如/16)。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "性能"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Monitor",
- "severity": "中等",
- "text": "如果日誌保留要求超過 12 年,請將日誌匯出到 Azure 存儲。將不可變存儲與一次寫入、多次讀取策略結合使用,使數據在使用者指定的時間間隔內不可擦除和不可修改。",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "操作"
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "link": "https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses",
+ "service": "VNet",
+ "severity": "高",
+ "text": "不要對生產和災難恢復網站使用重疊的IP位址範圍。",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "可靠性"
},
{
"checklist": "Azure Landing Zone Review",
- "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
- "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
- "service": "VM",
- "severity": "中等",
- "text": "使用 Azure Policy 監視 OS 等級的虛擬機 (VM) 配置偏移。通過策略啟用 Azure Automanage 計算機配置審核功能可幫助應用程式團隊工作負載輕鬆立即使用功能。",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "操作"
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "0c47f486-656d-4699-8c30-edef5b8a93c4",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#availability-zone",
+ "service": "Public IP Addresses",
+ "severity": "高",
+ "text": "使用標準 SKU 和區域冗餘 IP(如果適用),Azure 中的公共 IP 位址可以是標準 SKU,以非區域、區域或區域冗餘的形式提供。區域冗餘IP可跨所有區域訪問,可抵禦任何單個區域故障,從而提供更高的彈性。",
+ "training": "https://learn.microsoft.com/en-gb/training/modules/configure-virtual-networks/6-create-public-ip-addressing",
+ "waf": "可靠性"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
- "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-getstarted-portal",
+ "service": "DNS",
"severity": "中等",
- "text": "使用 Azure 更新管理員作為 Azure 中 Windows 和 Linux VM 的修補機制。",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
+ "text": "對於只需要在 Azure 中進行名稱解析的環境,請使用 Azure 專用 DNS 進行解析,並使用委託區域進行名稱解析(例如“azure.contoso.com”)。",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "操作"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
- "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
- "service": "VM",
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "link": "https://learn.microsoft.com/azure/dns/dns-private-resolver-overview",
+ "service": "DNS",
"severity": "中等",
- "text": "使用 Azure Arc 將 Azure Update Manager 用作 Azure 外部 Windows 和 Linux VM 的修補機制。",
- "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
- "waf": "操作"
+ "text": "對於需要跨 Azure 和本地進行名稱解析且沒有 Active Directory 等現有企業 DNS 服務的環境,請使用 Azure DNS 專用解析程式將 DNS 請求路由到 Azure 或本地 DNS 伺服器。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
- "guid": "90483845-c986-4cb2-a131-56a12476e49f",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Network Watcher",
- "severity": "中等",
- "text": "使用網路觀察程序主動監視流量",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances",
+ "service": "DNS",
+ "severity": "低",
+ "text": "需要並部署自己的 DNS 的特殊工作負載(例如 Red Hat OpenShift)應使用其首選的 DNS 解決方案。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00",
"waf": "操作"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
- "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Monitor",
- "severity": "中等",
- "text": "使用 Azure Monitor 紀錄獲取見解和報告。",
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "link": "https://learn.microsoft.com/azure/dns/private-dns-autoregistration",
+ "service": "DNS",
+ "severity": "高",
+ "text": "為 Azure DNS 啟用自動註冊,以自動管理虛擬網路中部署的虛擬機的 DNS 記錄的生命週期。",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
"waf": "操作"
},
{
+ "arm-service": "Microsoft.Network/dnsZones",
"checklist": "Azure Landing Zone Review",
- "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
- "service": "Monitor",
+ "guid": "18c80eb0-582a-4198-bf5c-d8800b2d263b",
+ "link": "https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale#private-link-and-dns-integration-in-hub-and-spoke-network-architectures",
+ "service": "DNS",
"severity": "中等",
- "text": "使用 Azure Monitor 警報生成操作警報。",
- "waf": "操作"
+ "text": "實施一個計劃,用於管理多個 Azure 區域之間的 DNS 解析以及服務故障轉移到另一個區域時",
+ "training": "https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/bastionHosts",
"checklist": "Azure Landing Zone Review",
- "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "Monitor",
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-overview",
+ "service": "Bastion",
"severity": "中等",
- "text": "通過 Azure 自動化帳戶使用更改和清單跟蹤時,請確保已選擇支援的區域來將 Log Analytics 工作區和自動化帳戶連結在一起。",
- "waf": "操作"
+ "text": "使用 Azure Bastion 安全地連接到您的網路。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
+ "waf": "安全"
},
{
+ "arm-service": "microsoft.network/bastionHosts",
"checklist": "Azure Landing Zone Review",
- "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
- "service": "Backup",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct id, compliant",
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "link": "https://learn.microsoft.com/azure/bastion/bastion-faq#subnet",
+ "service": "Bastion",
"severity": "中等",
- "text": "使用 Azure 備份時,請考慮不同的備份類型(GRS、ZRS 和 LRS),因為預設設置為 GRS",
- "waf": "可靠性"
+ "text": "在子網 /26 或更大的子網中使用 Azure Bastion。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-bastion/",
+ "waf": "安全"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "VM",
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
+ "service": "WAF",
"severity": "中等",
- "text": "使用 Azure 策略通過 VM 擴展自動部署軟體配置,並強制實施符合標準的基線 VM 配置。",
+ "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為到登陸區域的入站 HTTP/S 連接提供全域保護。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
- "description": "Azure Policy 的來賓配置功能可以審核和修正計算機設置(例如,操作系統、應用程式、環境),以確保資源與預期配置一致,更新管理可以對 VM 強制實施修補程式管理。",
- "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "VM",
- "severity": "中等",
- "text": "通過 Azure Policy 監視 VM 安全配置偏移。",
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
+ "severity": "低",
+ "text": "使用 Azure Front Door 和 Azure 應用程式閘道幫助保護 HTTP/S 應用時,請使用 Azure Front Door 中的 WAF 策略。鎖定 Azure 應用程式閘道以僅接收來自 Azure Front Door 的流量。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "VM",
- "severity": "中等",
- "text": "將 Azure Site Recovery 用於 Azure 到 Azure 虛擬機的災難恢復方案。這使您能夠跨區域複製工作負載。",
- "waf": "操作"
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
+ "service": "WAF",
+ "severity": "高",
+ "text": "當入站 HTTP/S 連接需要 WAF 和其他反向代理時,請將它們部署在登陸區虛擬網路中,並與它們保護並公開給 Internet 的應用程式一起部署。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "Backup",
- "severity": "中等",
- "text": "使用 Azure 本機備份功能或與 Azure 相容的第三方備份解決方案。",
- "waf": "操作"
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
+ "severity": "高",
+ "text": "使用 Azure DDoS 網路或 IP 保護計劃來幫助保護虛擬網路中的公共 IP 位址終結點。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "VM",
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "link": "https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access",
+ "service": "VNet",
"severity": "高",
- "text": "在支援可用性區域的區域中對 VM 利用可用性區域。",
+ "text": "規劃如何在即將到來的重大更改之前管理您的網路出站流量配置和策略。2025 年 9 月 30 日,新部署的預設出站訪問將停用,僅允許顯式訪問配置。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-networks/",
"waf": "可靠性"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/virtualNetworks",
"checklist": "Azure Landing Zone Review",
- "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "VM",
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures",
+ "service": "VNet",
"severity": "高",
- "text": "避免在單個 VM 上運行生產工作負載。",
- "waf": "可靠性"
+ "text": "添加診斷設置以保存所有受保護的公有IP位址(DDoS IP或網路保護)的 DDoS 相關日誌。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
"checklist": "Azure Landing Zone Review",
- "guid": "84101f59-1941-4195-a270-e28034290e3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "severity": "中等",
- "text": "Azure 負載均衡器和應用程式閘道在多個資源之間分配傳入的網路流量。",
- "waf": "可靠性"
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "link": "https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp",
+ "service": "Policy",
+ "severity": "高",
+ "text": "確保有一個策略分配來拒絕直接連接到虛擬機的公有IP位址。 如果特定 VM 上需要公共 IP,請使用排除項。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
- "service": "WAF",
- "severity": "高",
- "text": "添加診斷設置以保存來自 Azure Front Door 和 Azure 應用程式閘道等應用程式交付服務的 WAF 紀錄。定期查看日誌,以檢查攻擊和誤報檢測。",
- "waf": "操作"
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
+ "severity": "中等",
+ "text": "使用 ExpressRoute 作為與 Azure 的主要連接。 使用 VPN 作為備份連接的源。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "性能"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "WAF",
+ "description": "您可以使用 AS 路徑預置和連接權重來影響從 Azure 到本地的流量,並使用您自己的路由器中的所有 BGP 屬性來影響從本地到 Azure 的流量。",
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-routing",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "將 WAF 日誌從應用程式交付服務(如 Azure Front Door 和 Azure 應用程式閘道)發送到 Microsoft Sentinel。檢測攻擊並將 WAF 遙測集成到整個 Azure 環境中。",
- "waf": "操作"
+ "text": "使用多個 ExpressRoute 線路或多個本地位置時,請使用 BGP 屬性來優化路由。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "5017f154-e3ab-4369-9829-e7e316183687",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "Key Vault",
- "severity": "高",
- "text": "使用 Azure Key Vault 儲存機密和憑據",
- "waf": "安全"
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId, resourceGroup, compliant",
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways?source=recommendations#gwsku",
+ "service": "ExpressRoute",
+ "severity": "中等",
+ "text": "根據頻寬和性能要求為 ExpressRoute/VPN 閘道選擇正確的 SKU。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "性能"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
- "guid": "a0477a20-9945-4bda-9333-4f2491163418",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
- "service": "Key Vault",
- "severity": "中等",
- "text": "對不同的應用程式和區域使用不同的 Azure Key Vault,以避免事務規模限制並限制對機密的訪問。",
- "waf": "安全"
+ "graph": "resources | where type=='microsoft.network/expressroutecircuits' | extend compliant = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct id,compliant",
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "link": "https://learn.microsoft.com/azure/expressroute/plan-manage-cost",
+ "service": "ExpressRoute",
+ "severity": "高",
+ "text": "確保僅在達到與成本相稱的頻寬時才使用無限數據 ExpressRoute 線路。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "成本"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "中等",
- "text": "預配啟用軟刪除和清除策略的 Azure Key Vault,以允許對已刪除物件進行保留保護。",
- "waf": "安全"
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id), circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant) by id",
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local",
+ "service": "ExpressRoute",
+ "severity": "高",
+ "text": "如果你的線路對等互連位置支援本地 SKU 的 Azure 區域,請利用 ExpressRoute 的本地 SKU 來降低線路的成本。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "成本"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "graph": "resources| where type == 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "通過將永久刪除密鑰、機密和證書的授權限制為專用的自定義 Microsoft Entra ID 角色,遵循最低特權模型。",
- "waf": "安全"
+ "text": "在支援的 Azure 區域中部署區域冗餘 ExpressRoute 閘道。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "使用公共證書頒發機構自動執行證書管理和續訂過程,以簡化管理。",
- "waf": "安全"
+ "text": "對於需要高於 10 Gbps 的頻寬或專用 10/100 Gbps 埠的方案,請使用 ExpressRoute Direct。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "性能"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "913156a1-2476-4e49-b541-acdce979377b",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "link": "https://learn.microsoft.com/azure/expressroute/about-fastpath",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "建立金鑰和證書輪換的自動化流程。",
- "waf": "安全"
+ "text": "當需要低延遲,或者從本地到 Azure 的輸送量必須大於 10 Gbps 時,請啟用 FastPath 以從數據路徑繞過 ExpressRoute 閘道。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "性能"
},
{
+ "arm-service": "microsoft.network/virtualNetworkGateways",
"checklist": "Azure Landing Zone Review",
- "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "graph": "resources | where type=='microsoft.network/virtualnetworkgateways' | where properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name) contains 'az') | distinct id, compliant",
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway",
+ "service": "VPN",
"severity": "中等",
- "text": "在保管庫上啟用防火牆和虛擬網路服務終結點或專用終結點,以控制對密鑰保管庫的訪問。",
- "waf": "安全"
+ "text": "使用區域冗餘 VPN 閘道將分支或遠端位置連接到 Azure(如果可用)。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/virtualNetworkGateways",
"checklist": "Azure Landing Zone Review",
- "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
- "service": "Key Vault",
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable",
+ "service": "VPN",
"severity": "中等",
- "text": "使用平臺中心 Azure Monitor Log Analytics 工作區審核每個 Key Vault 實例中的金鑰、證書和機密使用方式。",
- "waf": "安全"
+ "text": "在本地使用冗餘 VPN 設備(主動/主動或主動/被動)。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
- "severity": "中等",
- "text": "委託 Key Vault 實例化和特權訪問,並使用 Azure Policy 強制實施一致的合規配置。",
- "waf": "安全"
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about",
+ "service": "ExpressRoute",
+ "severity": "高",
+ "text": "如果使用 ExpressRoute Direct,請考慮使用連接到本地 Azure 區域的 ExpressRoute 本地線路以節省成本。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "成本"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "對每個應用程式、每個環境、每個區域使用 Azure Key Vault。",
+ "text": "當需要流量隔離或專用頻寬時(例如用於分離生產和非生產環境),請使用不同的 ExpressRoute 線路。它將幫助您確保隔離的路由域並減輕嘈雜的鄰居風險。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
- "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
- "service": "Key Vault",
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "如果要自帶密鑰,則並非所有考慮的服務都支援此功能。實施相關的緩解措施,以免不一致阻礙預期結果。選擇適當的區域對和災難恢復區域,以最大程度地減少延遲。",
- "waf": "安全"
+ "text": "使用內置的 Express Route Insights 監控 ExpressRoute 的可用性和利用率。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "操作"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
- "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
- "service": "Key Vault",
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "link": "https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "對於主權登陸區域,請使用 Azure Key Vault 託管的 HSM 來儲存機密和憑據。",
- "waf": "安全"
+ "text": "使用連接監視器進行跨網路的連接監控,尤其是本地和 Azure 之間的連接。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "操作"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
- "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
- "service": "Entra",
+ "graph": "resources | where type=='microsoft.network/connections' | where properties.connectionType == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id), circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits' | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation)) on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count() by id=gwId | extend compliant = (countErLocations >= 2)",
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#need-for-redundant-connectivity-solution",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "使用 Microsoft Entra ID 報告功能生成訪問控制審核報告。",
- "waf": "安全"
+ "text": "使用來自不同對等互連位置的 ExpressRoute 線路以實現冗餘。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "09945bda-4333-44f2-9911-634182ba5275",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
- "service": "Defender",
- "severity": "高",
- "text": "為所有訂閱啟用Defender雲安全態勢管理。",
- "waf": "安全"
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager",
+ "service": "ExpressRoute",
+ "severity": "中等",
+ "text": "如果僅使用單個 ExpressRoute 線路,請使用網站到網站 VPN 作為 ExpressRoute 的故障轉移。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
- "service": "Defender",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id) | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id, disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))",
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub",
+ "service": "ExpressRoute",
"severity": "高",
- "text": "在所有訂閱上為伺服器啟用Defender雲工作負載保護計劃。",
- "waf": "安全"
+ "text": "如果您在 GatewaySubnet 中使用路由表,請確保傳播閘道路由。",
+ "waf": "可靠性"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
- "service": "Defender",
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections",
+ "service": "ExpressRoute",
"severity": "高",
- "text": "在所有訂閱上為 Azure 資源啟用 Defender 雲工作負載保護計劃。",
- "waf": "安全"
+ "text": "如果使用 ExpressRoute,則本地路由應該是動態的:如果連接失敗,它應收斂到線路的剩餘連接。理想情況下,負載應在兩個連接之間共用,即主動/主動,但也支持主動/被動。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
- "ammp": true,
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
- "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
- "service": "VM",
- "severity": "高",
- "text": "在 IaaS 伺服器上啟用 Endpoint Protection。",
- "waf": "安全"
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute",
+ "service": "ExpressRoute",
+ "severity": "中等",
+ "text": "確保 ExpressRoute 線路的兩個物理連結連接到網路中的兩個不同的邊緣設備。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
- "link": "https://learn.microsoft.com/azure/security-center/",
- "service": "VM",
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-bfd",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "通過 Azure Monitor 紀錄和 Defender for Cloud 監視基本作業系統修補偏移。",
- "waf": "安全"
+ "text": "確保在客戶或供應商邊緣路由設備上啟用和配置雙向轉發檢測 (BFD)。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Monitor",
- "severity": "中等",
- "text": "將預設資源配置連接到集中式 Azure Monitor Log Analytics 工作區。",
- "waf": "安全"
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "ExpressRoute",
+ "severity": "高",
+ "text": "將 ExpressRoute 閘道連接到來自不同對等互連位置的兩條或多條線路,以獲得更高的復原能力。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "可靠性"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
- "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
- "service": "Entra",
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "link": "https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "對於主權登陸區域,在 Entra ID 租戶上啟用透明日誌。",
- "waf": "安全"
+ "text": "為 ExpressRoute 虛擬網路閘道配置診斷日誌和警報。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "操作"
},
{
+ "arm-service": "microsoft.network/expressRouteCircuits",
"checklist": "Azure Landing Zone Review",
- "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
- "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
- "service": "Entra",
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "link": "https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance",
+ "service": "ExpressRoute",
"severity": "中等",
- "text": "對於 Sovereign Landing Zone,在 Entra ID 租戶上啟用了客戶密碼箱。",
- "waf": "安全"
+ "text": "不要使用 ExpressRoute 線路進行 VNet 到 VNet 通信。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
+ "waf": "性能"
},
{
- "ammp": true,
"checklist": "Azure Landing Zone Review",
- "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Storage",
- "severity": "高",
- "text": "應啟用安全傳輸到存儲帳戶",
- "waf": "安全"
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "service": "N/A",
+ "severity": "低",
+ "text": "不要將 Azure 流量發送到混合位置進行檢查。 相反,請遵循“Azure 中的流量保留在 Azure 中”的原則,以便通過 Microsoft 主幹網络進行 Azure 中資源的通信。",
+ "waf": "性能"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
- "service": "Storage",
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "link": "https://learn.microsoft.com/azure/firewall/overview",
+ "service": "Firewall",
"severity": "高",
- "text": "為存儲帳戶啟用容器軟刪除,以恢復已刪除的容器及其內容。",
+ "text": "使用 Azure 防火牆來管理到 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "ammp": true,
+ "arm-service": "Microsoft.Network/azureFirewalls",
"checklist": "Azure Landing Zone Review",
- "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
- "service": "Key Vault",
- "severity": "高",
- "text": "使用 Key Vault 機密可避免對敏感資訊(如憑據(虛擬機器用戶密碼)、證書或密鑰)進行硬編碼。",
- "waf": "操作"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "32e42e36-11c8-418b-8a0b-c510e43a18a9",
- "service": "AVS",
- "severity": "高",
- "text": "確保在本機 Azure 的標識訂閱中部署了 ADDS 域控制器",
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/policy-overview",
+ "service": "Firewall",
+ "severity": "中等",
+ "text": "創建全域 Azure 防火牆策略以管理全球網路環境中的安全狀況,並將其分配給所有 Azure 防火牆實例。通過 Azure 基於角色的訪問控制將增量防火牆策略委派給本地安全團隊,從而允許精細策略以滿足特定區域的要求。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "75089c20-990d-4927-b105-885576f76fc2",
- "service": "AVS",
- "severity": "中等",
- "text": "確保將 ADDS 網站和服務配置為將來自基於 Azure 的資源(包括 Azure VMware 解決方案)的身份驗證請求保留到 Azure 本地",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner",
+ "service": "Firewall",
+ "severity": "低",
+ "text": "如果組織希望使用此類解決方案來幫助保護出站連接,請在 Firewall Manager 中配置受支援的合作夥伴 SaaS 安全提供者。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "de3aad1e-7c28-4ec9-9666-b7570449aa80",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.dnsSettings.enableProxy == true) | distinct id,compliant",
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "link": "https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules",
+ "service": "Firewall",
"severity": "高",
- "text": "確保 vCenter 已連接到 ADDS,以啟用基於「指定用戶帳戶」的身份驗證",
+ "text": "使用應用程式規則篩選目標主機名上的出站流量,以瞭解支持的協定。 使用基於 FQDN 的網路規則和帶有 DNS 代理的 Azure 防火牆,通過其他協議篩選到 Internet 的出口流量。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cd289ced-6b17-4db8-8554-61e2aee3553a",
- "service": "AVS",
- "severity": "中等",
- "text": "確保從 vCenter 到 ADDS 的連接使用安全協定 (LDAPS)",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.sku.tier == 'Premium') | distinct id,compliant",
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features",
+ "service": "Firewall",
+ "severity": "高",
+ "text": "使用 Azure 防火牆高級版啟用其他安全功能。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b9d37dac-43bc-46cd-8d79-a9b24604489a",
- "service": "AVS",
- "severity": "中等",
- "text": "vCenter IdP 中的 CloudAdmin 帳戶僅用作緊急帳戶 (break-glass)",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.threatIntelMode == 'Deny') | distinct id,compliant",
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps-signature-rules",
+ "service": "Firewall",
+ "severity": "高",
+ "text": "將 Azure 防火牆威脅情報模式配置為 Alert 和 Deny 以獲得額外的保護。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "53d88e89-d17b-473b-82a5-a67e7a9ed5b3",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/firewallpolicies' | extend compliant = (properties.intrusionDetection.mode == 'Deny') | project id, compliant",
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#idps",
+ "service": "Firewall",
"severity": "高",
- "text": "確保 NSX-Manager 與外部身份提供程式 (LDAPS) 集成",
+ "text": "將 Azure 防火牆 IDPS 模式配置為 Deny 以獲得額外保護。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae0e37ce-e297-411b-b352-caaab79b198d",
- "service": "AVS",
- "severity": "中等",
- "text": "是否已創建 RBAC 模型以在 VMware vSphere 中使用",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet', 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT, subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name, '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name) | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1), subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant",
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview",
+ "service": "Firewall",
+ "severity": "高",
+ "text": "對於 VNet 中未連接到虛擬 WAN 的子網,請附加路由表,以便將 Internet 流量重定向到 Azure 防火牆或網路虛擬設備。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-structured-logs",
+ "service": "Firewall",
"severity": "中等",
- "text": "RBAC 許可權應授予 ADDS 組,而不是特定使用者",
- "waf": "安全"
+ "text": "添加診斷設置,以使用特定於資源的目標表保存所有 Azure 防火牆部署的日誌。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d503547c-c447-4e82-9128-a71f0f1cac6d",
- "service": "AVS",
- "severity": "高",
- "text": "Azure 中 Azure VMware 解決方案資源的 RBAC 許可權僅「鎖定」為一組有限的擁有者",
- "waf": "安全"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy",
+ "service": "Firewall",
+ "severity": "重要",
+ "text": "從 Azure 防火牆經典規則(如果存在)遷移到防火牆策略。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "fd9f0df4-68dc-4976-b9a9-e6a79f7682c5",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct id, compliant",
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size",
+ "service": "Firewall",
"severity": "高",
- "text": "確保所有自定義角色的範圍都具有 CloudAdmin 允許的授權",
+ "text": "對 Azure 防火牆子網使用 /26 前置綴。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-firewall/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ef1d5e8-32e4-42e3-911c-818b0a0bc510",
- "link": "https://github.com/Azure/AzureCAT-AVS/tree/main/networking",
- "service": "AVS",
- "severity": "高",
- "text": "是否為手頭的客戶用例選擇了正確的 Azure VMware 解決方案連接模型",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "link": "https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy",
+ "service": "Firewall",
+ "severity": "中等",
+ "text": "根據規則的使用頻率,將防火牆策略中的規則排列到規則集合組和規則集合中。",
+ "training": "https://learn.microsoft.com/training/modules/intro-to-azure-firewall-manager/",
"waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eb710a37-cbc1-4055-8dd5-a936a8bb7cf5",
- "service": "AVS",
- "severity": "高",
- "text": "確保使用「連接監視器」監視從本地到 Azure 的 ExpressRoute 或 VPN 連接",
- "waf": "操作"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "link": "https://learn.microsoft.com/azure/firewall/ip-groups",
+ "service": "Firewall",
+ "severity": "中等",
+ "text": "使用IP組或IP前置綴來減少IP表規則的數量。",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "976e24f2-a7f8-426c-9253-2a92a2a7ed99",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "link": "https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat",
+ "service": "Firewall",
"severity": "中等",
- "text": "確保創建從 Azure 本機資源到 Azure VMware 解決方案虛擬機的連接監視器,以監視 Azure VMware 解決方案後端 ExpressRoute 連接",
- "waf": "操作"
+ "text": "請勿使用通配符作為DNAT的源IP,例如*或任何,您應該為傳入的DNAT指定源IP。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f41ce6a0-64f3-4805-bc65-3ab50df01265",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "link": "https://learn.microsoft.com/azure/firewall/integrate-with-nat-gateway",
+ "service": "Firewall",
"severity": "中等",
- "text": "確保創建從本地資源到 Azure VMware 解決方案虛擬機的連接監視器,以監視端到端連接",
- "waf": "操作"
+ "text": "通過監控 SNAT 埠使用方式、評估 NAT 閘道設置並確保無縫故障轉移,防止 SNAT 埠耗盡。如果埠計數接近限制,則表明 SNAT 耗儘可能即將耗盡。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-to-azure-virtual-networks/",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "563b4dc7-4a74-48b6-933a-d1a0916a6649",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection",
+ "service": "Firewall",
"severity": "高",
- "text": "使用路由伺服器時,請確保從路由伺服器到 ExR 閘道再到本地的路由不超過 1000 個(ARS 限制)。",
- "waf": "操作"
+ "text": "如果使用的是 Azure 防火牆高級版,請啟用 TLS 檢查。",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3",
- "service": "AVS",
- "severity": "高",
- "text": "是否為在 Azure 門戶中管理 Azure VMware 解決方案資源的角色實現了 Privileged Identity Management(不允許長期許可權)",
- "waf": "安全"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "link": "https://learn.microsoft.com/azure/firewall/premium-features#web-categories",
+ "service": "Firewall",
+ "severity": "低",
+ "text": "使用 Web 類別允許或拒絕對特定主題的出站訪問。",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c4e2436b-b336-4d71-9f17-960eee0b9b5c",
- "service": "AVS",
- "severity": "高",
- "text": "應為 Azure VMware 解決方案 PIM 角色實現 Privileged Identity Management 審核報告",
- "waf": "安全"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "link": "https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall",
+ "service": "Firewall",
+ "severity": "中等",
+ "text": "作為 TLS 檢查的一部分,請規劃從 Azure 應用程式閘道接收流量進行檢查。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-application-gateway/",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "78c447a8-26b2-4863-af0f-1cac599ef1d5",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/firewallPolicies' | where array_length(properties.firewalls) > 0 | extend compliant = (properties.dnsSettings.enableProxy =~ 'true') | distinct id, compliant",
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "link": "https://learn.microsoft.com/azure/firewall/dns-details",
+ "service": "Firewall",
"severity": "中等",
- "text": "如果使用 Privileged Identity Management,請確保使用有效的 SMTP 記錄創建啟用了 Entra ID 的有效帳戶,以便 Azure VMware 解決方案自動主機更換通知。(需要長期許可)",
+ "text": "啟用 Azure 防火牆 DNS 代理配置。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8defc4d7-21d3-41d2-90fb-707ae9eab40e",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "link": "https://learn.microsoft.com/azure/firewall/firewall-diagnostics",
+ "service": "Firewall",
"severity": "高",
- "text": "將 CloudAdmin 帳戶的使用限制為僅緊急訪問",
- "waf": "安全"
+ "text": "將 Azure 防火牆與 Azure Monitor 集成,並啟用診斷日誌記錄來存儲和分析防火牆日誌和指標。",
+ "training": "https://learn.microsoft.com/training/courses/az-700t00/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d329f798-bc17-48bd-a5a0-6ca7144351d1",
- "service": "AVS",
- "severity": "中等",
- "text": "在 vCenter 中創建自定義 RBAC 角色,以在 vCenter 中實施最小特權模型",
- "waf": "安全"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "link": "https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall",
+ "service": "Firewall",
+ "severity": "低",
+ "text": "為防火牆規則實施備份",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9dd24429-eb72-4281-97a1-51c5bb4e4f18",
- "service": "AVS",
- "severity": "中等",
- "text": "是定義為定期輪換 cloudadmin (vCenter) 和管理員 (NSX) 憑據的過程",
- "waf": "安全"
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/azurefirewalls' | where array_length(zones) <= 1 or isnull(zones) | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | project name, id, tags, param1='multipleZones:false'",
+ "guid": "d38ad60c-bc9e-4d49-b699-97e5d4dcf707",
+ "link": "https://learn.microsoft.com/azure/firewall/deploy-availability-zone-powershell",
+ "service": "Firewall",
+ "severity": "高",
+ "text": "跨多個可用性區域部署 Azure 防火牆。Azure 防火牆根據其部署提供不同的 SLA;在單個可用區或跨多個可用區,從而可能提高可靠性和性能。",
+ "training": "https://learn.microsoft.com/training/courses/az-104t00/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "586cb291-ec16-4a1d-876e-f9f141acdce5",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/azureFirewalls' | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id) | mv-expand ipConfig = properties.ipConfigurations | project name, firewallId = id, tags, vNetName = split(ipConfig.properties.subnet.id, '/', 8)[0], vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, /subnet'))) | join kind=fullouter ( resources | where type =~ 'Microsoft.Network/ddosProtectionPlans' | mv-expand vNet = properties.virtualNetworks | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id) ) on vNetId | where isempty(ddosProtectionPlanId) | , name, id = firewallId, tags, param1 = strcat('vNet: ', vNetName), param2 = 'ddosProtection: Disabled'",
+ "guid": "e8143efa-0301-4d62-be54-ca7b5ce566dc",
+ "link": "https://learn.microsoft.com/en-gb/azure/ddos-protection/ddos-protection-overview",
+ "service": "Firewall",
"severity": "高",
- "text": "使用集中式識別提供者用於在 Azure VMware 解決方案上運行的工作負載 (VM)",
- "waf": "安全"
+ "text": "在 Azure 防火牆 VNet 上配置 DDoS 防護,將 DDoS 防護計劃與託管 Azure 防火牆的虛擬網路相關聯,以提供針對 DDoS 攻擊的增強緩解。Azure 防火牆管理器集成了防火牆基礎結構和 DDoS 防護計劃的創建。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "79377bcd-b375-41ab-8ab0-ead66e15d3d4",
- "service": "AVS",
- "severity": "中等",
- "text": "是否在 NSX-T 中實施了東西向流量篩選",
+ "arm-service": "microsoft.network/applicationGateways",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
+ "service": "App Gateway",
+ "severity": "高",
+ "text": "不要中斷注入虛擬網路的 Azure PaaS 服務的控制平面通信,例如使用 0.0.0.0/0 路由或阻止控制平面流量的 NSG 規則。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a2adb1c3-d232-46af-825c-a44e1695fddd",
- "service": "AVS",
- "severity": "高",
- "text": "Azure VMware 解決方案上的工作負載不會直接向 Internet 公開。流量由 Azure 應用程式閘道、Azure 防火牆或第三方解決方案進行篩選和檢查",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "link": "https://learn.microsoft.com/azure/private-link/private-endpoint-overview",
+ "service": "ExpressRoute",
+ "severity": "中等",
+ "text": "通過專用終結點和 ExpressRoute 專用對等互連從本地訪問 Azure PaaS 服務。此方法可避免通過公共 Internet 傳輸。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "eace4cb1-deb4-4c65-8c3f-c14eeab36938",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/virtualNetworks",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup, VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints) == 0) | order by compliant asc",
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-service-endpoints-overview",
+ "service": "VNet",
"severity": "高",
- "text": "對 Azure VMware 解決方案和基於 Azure VMware 解決方案的工作負載的入站 Internet 請求實施審核和日誌記錄",
+ "text": "默認情況下,不要在所有子網上啟用虛擬網路服務終端節點。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "29e3eec2-1836-487a-8077-a2b5945bda43",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/azureFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "link": "azure/private-link/inspect-traffic-with-azure-firewall",
+ "service": "Firewall",
"severity": "中等",
- "text": "對來自 Azure VMware 解決方案或基於 Azure VMware 解決方案的工作負載的出站 Internet 連接實施會話監視,以識別可疑/惡意活動",
+ "text": "使用 FQDN 而不是 Azure 防火牆或 NVA 中的 IP 位址篩選到 Azure PaaS 服務的出口流量,以防止數據外洩。如果使用專用連結,則可以阻止所有 FQDN,否則僅允許所需的 PaaS 服務。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "334fdf91-c234-4182-a652-75269440b4be",
- "service": "AVS",
- "severity": "中等",
- "text": "是否在 Azure 的 ExR/VPN 閘道子網上啟用了 DDoS 標準防護",
+ "arm-service": "microsoft.network/expressRouteCircuits",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName == 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id, compliant",
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "link": "https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway",
+ "service": "ExpressRoute",
+ "severity": "高",
+ "text": "至少為您的閘道子網使用 /27 前置綴。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3d3e0843-276d-44bd-a015-bcf219e4a1eb",
- "service": "AVS",
- "severity": "中等",
- "text": "使用專用特權訪問工作站 (PAW) 管理 Azure VMware 解決方案、vCenter、NSX Manager 和 HCX Manager",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/networksecuritygroups' | mvexpand properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*' and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0 | extend compliant=false | project id,compliant)",
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "link": "https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags",
+ "service": "NSG",
+ "severity": "高",
+ "text": "不要依賴使用 VirtualNetwork 服務標記的 NSG 入站預設規則來限制連接。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9ccbd869-266a-4cca-874f-aa19bf39d95d",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/virtualnetworks' | mv-expand subnet = properties.subnets | where subnet.name !in~ ('GatewaySubnet', 'AzureFirewallSubnet', 'AzureFirewallManagementSubnet', 'RouteServerSubnet') | extend compliant = iff(isnotnull(subnet.properties.networkSecurityGroup.id), true, false) | project id, subnetName = subnet.name, vnetName = name, NSG = subnet.properties.networkSecurityGroup.id, compliant",
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation",
+ "service": "NSG",
"severity": "中等",
- "text": "為 Azure VMware 解決方案上運行的工作負載啟用高級威脅檢測(Microsoft Defender for Cloud,又名 ASC)",
+ "text": "使用 NSG 説明保護跨子網的流量,以及跨平台的東西向流量(登陸區域之間的流量)。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "44c7c891-9ca1-4f6d-9315-ae524ba34d45",
- "service": "AVS",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "NSG",
"severity": "中等",
- "text": "使用適用於伺服器的 Azure ARC 使用 Azure 本機技術正確管理在 Azure VMware 解決方案上運行的工作負載(適用於 Azure VMware 解決方案的 Azure ARC 尚不可用)",
+ "text": "使用 NSG 和應用程式安全組對登陸區域內的流量進行微分段,並避免使用中央 NVA 來篩選流量。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-network-security/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "85e12139-bd7b-4b01-8f7b-95ef6e043e2a",
- "service": "AVS",
- "severity": "低",
- "text": "確保 Azure VMware 解決方案上的工作負載在運行時使用足夠的數據加密(如來賓內磁碟加密和 SQL TDE)。(vSAN 靜態加密為預設加密)",
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'Microsoft.Network/virtualnetworks' | project subscriptionId, lowerCaseVNetId = tolower(id) | join kind = leftouter ( resources | where type =~ 'microsoft.network/networkwatchers/flowlogs' and properties.enabled == true and properties.provisioningState =~ 'succeeded' | where properties.targetResourceId contains '/Microsoft.Network/virtualNetworks/' | project flowlogId = id, trafficAnalyticsEnabled = properties.flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled, lowerCaseTargetVNetId = tolower(properties.targetResourceId) ) on $left.lowerCaseVNetId == $right.lowerCaseTargetVNetId | extend compliant = iff(isnotempty(lowerCaseTargetVNetId), true, false) | project id = lowerCaseVNetId, flowlogId, trafficAnalyticsEnabled, compliant",
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "link": "https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview",
+ "service": "NSG",
+ "severity": "中等",
+ "text": "啟用 VNet 流日誌並將其饋送到流量分析中,以深入了解內部和外部流量流。",
+ "training": "https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a3592718-e6e2-4051-9267-6ae46691e883",
- "service": "AVS",
- "severity": "低",
- "text": "使用來賓內加密時,請盡可能將加密密鑰存儲在 Azure Key Vault 中",
- "waf": "安全"
+ "arm-service": "Microsoft.Network/networkSecurityGroups",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type == 'microsoft.network/networksecuritygroups' | project id, rules = array_length(properties.securityRules) | project id, compliant = (rules < 900)",
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "service": "NSG",
+ "severity": "中等",
+ "text": "由於規則數限制為 1000 個,因此每個 NSG 實施的 NSG 規則不要超過 900 個。",
+ "training": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5ac94222-3e13-4810-9230-81a941741583",
- "service": "AVS",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any",
+ "service": "VWAN",
"severity": "中等",
- "text": "請考慮對 Azure VMware 解決方案上運行的工作負載使用擴展的安全更新支援(Azure VMware 解決方案符合 ESU 條件)",
- "waf": "安全"
+ "text": "如果您的方案在虛擬 WAN 路由設計清單中明確描述,請使用虛擬 WAN。",
+ "training": "https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3ef7ad7c-6d37-4331-95c7-acbe44bbe609",
- "service": "AVS",
- "severity": "高",
- "text": "確保使用適當的 vSAN 資料冗餘方法(RAID 規範)",
- "waf": "可靠性"
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/virtual-wan-network-topology#virtual-wan-network-design-recommendationst",
+ "service": "VWAN",
+ "severity": "中等",
+ "text": "使用每個 Azure 區域的虛擬 WAN 中心,透過通用的全球 Azure 虛擬 WAN 跨 Azure 區域將多個登陸區域連接在一起。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "性能"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d88408f3-7273-44c8-96ba-280214590146",
- "service": "AVS",
- "severity": "高",
- "text": "確保允許失敗策略已到位,以滿足您的 vSAN 儲存需求",
- "waf": "可靠性"
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type=='microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/howto-firewall",
+ "service": "VWAN",
+ "severity": "中等",
+ "text": "對於出站 Internet 流量保護和篩選,請在安全中心部署 Azure 防火牆。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d89f2e87-7784-424d-9167-85c6fa95b96a",
- "service": "AVS",
- "severity": "高",
- "text": "確保已請求足夠的配額,確保已考慮增長和災難恢復要求",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/migrate-from-hub-spoke-topology",
+ "service": "VWAN",
+ "severity": "中等",
+ "text": "確保您的虛擬 WAN 網路架構與已確定的架構方案保持一致。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5d38e53f-9ccb-4d86-a266-acca274faa19",
- "service": "AVS",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights",
+ "service": "VWAN",
"severity": "中等",
- "text": "確保瞭解對 ESXi 的訪問限制,其中存在可能影響第三方解決方案的訪問限制。",
+ "text": "使用適用於虛擬 WAN 的 Azure Monitor Insights 來監視虛擬 WAN 的端到端拓撲、狀態和關鍵指標。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf39d95d-44c7-4c89-89ca-1f6d5315ae52",
- "service": "AVS",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic == 'true') | distinct id,compliant",
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan",
+ "service": "VWAN",
"severity": "中等",
- "text": "確保您制定了有關ESXi主機密度和效率的策略,並牢記請求新節點的提前期",
- "waf": "操作"
+ "text": "不要在虛擬 WAN 中禁用分支到分支流量,除非應明確阻止這些流。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ba34d45-85e1-4213-abd7-bb012f7b95ef",
- "service": "AVS",
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs'| extend compliant= (properties.hubRoutingPreference =~ 'ASPath') | distinct id,compliant",
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference",
+ "service": "VWAN",
"severity": "中等",
- "text": "確保 Azure VMware 解決方案的良好成本管理流程已到位 - 可以使用 Azure 成本管理",
- "waf": "成本"
+ "text": "使用 AS-Path 作為中心路由首選項,因為它比 ExpressRoute 或 VPN 更靈活。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6e043e2a-a359-4271-ae6e-205172676ae4",
- "service": "AVS",
- "severity": "低",
- "text": "Azure 預留實例是否用於優化使用 Azure VMware 解決方案的成本",
- "waf": "成本"
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels",
+ "service": "VWAN",
+ "severity": "中等",
+ "text": "在虛擬 WAN 中配置基於標籤的傳播,否則虛擬中心之間的連接將受到影響。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6691e883-5ac9-4422-83e1-3810523081a9",
- "service": "AVS",
- "severity": "中等",
- "text": "使用其他 Azure 本機服務時,請考慮使用 Azure 專用連結",
- "waf": "安全"
+ "arm-service": "microsoft.network/virtualWans",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources | where type =~ 'microsoft.network/virtualhubs' | extend addressSpace = properties.addressPrefix | extend compliant= (toint(substring(addressSpace, indexof(addressSpace, '/') + 1)) < 23) | distinct name, id, compliant",
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "link": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation",
+ "service": "VWAN",
+ "severity": "高",
+ "text": "為虛擬中心分配至少 /23 前置綴,以確保有足夠的IP空間可用。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "db611712-6904-40b4-aa3d-3e0803276d4b",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "高",
- "text": "確保所有必需的資源都駐留在同一個 Azure 可用性區域中",
- "waf": "性能"
+ "text": "戰略性地利用 Azure Policy,使用策略計劃對相關策略進行分組,為您的環境定義控制措施。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "48b262d6-cc5f-4512-a253-98e6db9d37da",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "中等",
- "text": "為 Azure VMware 解決方案來賓 VM 工作負載啟用 Microsoft Defender for Cloud",
+ "text": "將法規和合規性要求映射到 Azure Policy 定義和 Azure 角色分配。",
+ "training": "https://learn.microsoft.com/training/modules/governance-security/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "41741583-3ef7-4ad7-a6d3-733165c7acbe",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "中等",
- "text": "使用已啟用 Azure Arc 的伺服器管理 Azure VMware 解決方案來賓 VM 工作負載",
+ "text": "在中間根管理組建立 Azure Policy 定義,以便可以在繼承的範圍內分配這些定義。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "88f03a4d-2cd4-463c-abbc-868295abc91a",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "高",
- "text": "在 Azure VMware 解決方案上啟用診斷和指標日誌記錄",
- "waf": "操作"
+ "text": "如果需要,在最高適當的級別管理策略分配,並在最低級別管理排除項。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4ed90dae-2cc8-44c4-9b6b-781cbafe6c46",
- "service": "AVS",
- "severity": "中等",
- "text": "將Log Analytics代理部署到 Azure VMware 解決方案來賓 VM 工作負載",
- "waf": "操作"
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services",
+ "service": "Policy",
+ "severity": "低",
+ "text": "使用 Azure Policy 控制使用者可以在訂閱/管理組級別預配哪些服務。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "589d457a-927c-4397-9d11-02cad6aae11e",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
+ "severity": "高",
+ "text": "盡可能使用內置策略,以最大程度地減少運營開銷。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "description": "通過將 Resource Policy Contributor 角色分配給特定範圍,您可以將策略管理委派給相關團隊。例如,中央IT團隊可以監督管理組級別的策略,而應用程式團隊則處理其訂閱的策略,從而在遵守組織標準的情況下實現分散式治理。",
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy",
+ "service": "Policy",
"severity": "中等",
- "text": "確保已針對 Azure VMware 解決方案 VM 工作負載記錄並實施了備份策略和解決方案",
- "waf": "操作"
+ "text": "在特定範圍內分配內置的 Resource Policy Contributor 角色,以啟用應用程式級監管。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ee29711b-d352-4caa-ab79-b198dab81932",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "link": "https://learn.microsoft.com/azure/governance/policy/overview",
+ "service": "Policy",
"severity": "中等",
- "text": "使用 Microsoft Defender for Cloud 對 Azure VMware 解決方案上運行的工作負載進行合規性監視",
+ "text": "限制在根管理組範圍內進行的 Azure Policy 分配的數量,以避免通過繼承範圍內的排除項進行管理。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-policy/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c9fc9d1b-b780-436f-9e6b-fbb9ed503547",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "link": "https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline",
+ "service": "Policy",
"severity": "中等",
- "text": "是否將適用的合規性基線添加到 Microsoft Defender for Cloud",
+ "text": "如果存在任何數據主權要求,則應部署 Azure 策略來強制實施這些要求。",
+ "training": "https://learn.microsoft.com/learn/paths/secure-your-cloud-data/",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc447e82-6128-4a71-b0f1-cac6d9ef1d5e",
- "service": "AVS",
- "severity": "高",
- "text": "在選擇要用於 Azure VMware 解決方案部署的 Azure 區域時是否評估了數據駐留",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone",
+ "service": "Policy",
+ "severity": "中等",
+ "text": "對於 Sovereign Landing Zone,請部署主權策略基線並在正確的管理組級別進行分配。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "832e42e3-611c-4818-a0a0-bc510e43a18a",
- "service": "AVS",
- "severity": "高",
- "text": "數據處理影響(服務提供者/服務消費者模型)是否清晰且有據可查",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline",
+ "service": "Policy",
+ "severity": "中等",
+ "text": "對於 Sovereign Landing Zone,將 Sovereign Control 目標記錄到策略映射。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "547c1747-dc56-4068-a714-435cd19dd244",
- "service": "AVS",
+ "arm-service": "Microsoft.Authorization/policyDefinitions",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "link": "https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline#sovereignty-baseline-policy-initiatives",
+ "service": "Policy",
"severity": "中等",
- "text": "僅當出於合規性原因需要時,才考慮將CMK(客戶管理的密鑰)用於 vSAN。",
+ "text": "對於 Sovereign Landing Zone,請確保已制定管理“主權控制目標到策略映射”的流程。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e43a18a9-cd28-49ce-b6b1-7db8255461e2",
- "service": "AVS",
- "severity": "高",
- "text": "創建儀錶板以啟用核心 Azure VMware 解決方案監視見解",
- "waf": "操作"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2",
- "service": "AVS",
- "severity": "高",
- "text": "針對 Azure VMware 解決方案性能(CPU >80%、平均記憶體 >80%、vSAN >70%)自動警報的關鍵閾值創建警告警報",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "link": "https://learn.microsoft.com/en-us/azure/azure-monitor/logs/workspace-design#azure-regions",
+ "service": "Monitor",
+ "severity": "中等",
+ "text": "使用單個監視器日誌工作區集中管理平臺,除非 Azure 基於角色的訪問控制 (Azure RBAC)、數據主權要求或數據保留策略要求單獨的工作區。",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9659e396-80e7-4828-ac93-5657d02bff45",
- "service": "AVS",
- "severity": "高",
- "text": "確保創建嚴重警示以監控 vSAN 消耗量是否低於 75%,因為這是 VMware 的支援閾值",
- "waf": "操作"
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7418ada9-4199-4c28-8286-d15e9433e8f3",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
+ "severity": "中等",
+ "text": "決定是對所有區域使用單個 Azure Monitor 日誌工作區,還是創建多個工作區以涵蓋不同的地理區域。每種方法都有優點和缺點,包括潛在的跨區域網路費用",
+ "training": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "64b0d934-a348-4726-be79-d6b5c3a36495",
- "service": "AVS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
+ "service": "Monitor",
"severity": "高",
- "text": "確保為 Azure 服務運行狀況警報和通知配置警報",
+ "text": "如果您的日誌保留要求超過 12 年,請將日誌匯出到 Azure 存儲。將不可變存儲與一次寫入、多次讀取策略結合使用,使數據在使用者指定的時間間隔內不可擦除且不可修改。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b6abad38-aad5-43cc-99e1-d86667357c54",
- "service": "AVS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "link": "https://learn.microsoft.com/azure/governance/machine-configuration/overview",
+ "service": "VM",
"severity": "中等",
- "text": "將 Azure VMware 解決方案記錄設定為發送到 Azure 儲存帳戶或 Azure EventHub 進行處理",
- "waf": "操作"
- },
- {
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9674c5ed-85b8-459c-9733-be2b1a27b775",
- "service": "AVS",
- "severity": "低",
- "text": "如果需要深入瞭解 VMware vSphere:解決方案中是否使用了 vRealize Operations 和/或 vRealize Network Insights?",
+ "text": "使用 Azure Policy 監視 OS 等級的虛擬機 (VM) 配置偏移。通過策略啟用 Azure Automanage 計算機配置審核功能可幫助應用程式團隊工作負載輕鬆立即使用功能。",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "a91be1f3-88f0-43a4-b2cd-463cbbbc8682",
- "service": "AVS",
- "severity": "高",
- "text": "確保虛擬機的 vSAN 儲存策略不是預設存儲策略,因為此策略應用厚置備",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations",
+ "service": "VM",
+ "severity": "中等",
+ "text": "使用 Azure 更新管理員作為 Azure 中 Windows 和 Linux VM 的修補機制。",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d9ef1d5e-832d-442e-9611-c818b0afbc51",
- "service": "AVS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations ",
+ "service": "VM",
"severity": "中等",
- "text": "確保未將 vSphere 內容庫放置在 vSAN 上,因為 vSAN 是有限的資源",
+ "text": "使用 Azure Update Manager 作為使用 Azure Arc 的 Azure 外部 Windows 和 Linux VM 的修補機制。",
+ "training": "https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0e43a18a-9cd2-489b-bd6b-17db8255461e",
- "service": "AVS",
+ "arm-service": "microsoft.network/networkWatchers",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
+ "service": "Network Watcher",
"severity": "中等",
- "text": "確保備份解決方案的數據存儲庫存儲在 vSAN 儲存之外。在 Azure 本機或磁碟池支持的數據存儲中",
+ "text": "使用網路觀察程序主動監控流量。",
+ "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "2aee3453-aec8-4339-848b-262d6cc5f512",
- "service": "AVS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
+ "service": "Monitor",
"severity": "中等",
- "text": "確保使用 Azure Arc for Servers 進行混合管理,確保在 Azure VMware 解決方案上運行的工作負載(Arc for Azure VMware 解決方案處於預覽狀態)",
+ "text": "使用 Azure Monitor 紀錄獲取見解和報告。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-monitor/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "925398e6-da9d-437d-ac43-bc6cd1d79a9b",
- "service": "AVS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview",
+ "service": "Monitor",
"severity": "中等",
- "text": "確保使用 Azure Log Analytics 和 Azure Monitor 監視在 Azure VMware 解決方案上運行的工作負載",
+ "text": "使用 Azure Monitor 警報生成操作警報。",
+ "training": "https://learn.microsoft.com/training/modules/incident-response-with-alerting-on-azure/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "24604489-a8f4-42d7-ae78-cb6a33bd2a09",
- "service": "AVS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
+ "service": "Monitor",
"severity": "中等",
- "text": "在現有更新管理工具或 Azure 更新管理中包括在 Azure VMware 解決方案上運行的工作負載",
+ "text": "通過 Azure 自動化帳戶使用更改和清單跟蹤時,請確保已選擇受支持的區域,以便將 Log Analytics 工作區和自動化帳戶連結在一起。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-automation-devops/",
"waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "17e7a8d9-0ae0-4e27-aee2-9711bd352caa",
- "service": "AVS",
- "severity": "中等",
- "text": "使用 Azure Policy 在 Azure 管理、監視和安全解決方案中加入 Azure VMware 解決方案工作負載",
- "waf": "操作"
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Backup",
+ "severity": "低",
+ "text": "使用Azure備份時,請使用正確的備份類型(GRS,ZRS和LRS)進行備份,因為預設設置是GRS。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "aee3553a-fc83-4392-98b2-62d6cc5f5129",
- "service": "AVS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
+ "service": "VM",
"severity": "中等",
- "text": "確保在 Azure VMware 解決方案上運行的工作負載已載入 Microsoft Defender for Cloud",
+ "text": "使用 Azure 來賓策略通過 VM 擴展自動部署軟體配置,並強制實施合規的基線 VM 配置。",
"waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "25398e6d-b9d3-47da-a43b-c6cd1d79a9b2",
- "service": "AVS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "description": "使用 Azure Policy 的來賓配置功能來審核和修正電腦設置(例如,操作系統、應用程式、環境),以確保資源與預期配置保持一致,並且更新管理可以對 VM 強制實施修補程式管理。",
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
+ "service": "VM",
"severity": "中等",
- "text": "確保備份不存儲在 vSAN 上,因為 vSAN 是有限的資源",
- "waf": "可靠性"
+ "text": "通過 Azure Policy 監視 VM 安全配置偏移。",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "5e6bfbb9-ed50-4354-9cc4-47e826028a71",
- "service": "AVS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
+ "service": "VM",
"severity": "中等",
- "text": "是否考慮了所有災難恢復解決方案,並決定了最適合您業務的解決方案?[SRM/JetStream/Zerto/Veeam/...]",
- "waf": "可靠性"
+ "text": "將 Azure Site Recovery 用於 Azure 到 Azure 虛擬機的災難恢復方案。這使您能夠跨區域複製工作負載。",
+ "training": "https://learn.microsoft.com/training/modules/protect-infrastructure-with-site-recovery/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "f0f1cac6-d9ef-41d5-b832-d42e3611c818",
- "service": "AVS",
+ "arm-service": "Microsoft.RecoveryServices/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
+ "service": "Backup",
"severity": "中等",
- "text": "當災難恢復技術是本機 Azure IaaS 時,請使用 Azure Site Recovery",
- "waf": "可靠性"
+ "text": "使用 Azure 原生備份功能或與 Azure 相容的第三方備份解決方案。",
+ "training": "https://learn.microsoft.com/training/modules/design-solution-for-backup-disaster-recovery/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b0afbc51-0e43-4a18-a9cd-289bed6b17db",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs",
+ "service": "WAF",
"severity": "高",
- "text": "將自動恢復計劃與任一災難解決方案結合使用,盡可能避免手動任務",
- "waf": "可靠性"
+ "text": "添加診斷設置以保存來自應用程式交付服務(如 Azure Front Door 和 Azure 應用程式閘道)的 WAF 日誌。定期查看日誌以檢查是否存在攻擊和誤報檢測。",
+ "training": "https://learn.microsoft.com/training/modules/capture-application-logs-app-service/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "8255461e-2aee-4345-9aec-8339248b262d",
- "service": "AVS",
+ "arm-service": "microsoft.network/frontdoorwebApplicationFirewalls",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
+ "service": "WAF",
"severity": "中等",
- "text": "使用地緣政治區域對作為輔助災難恢復環境",
- "waf": "可靠性"
+ "text": "將 WAF 日誌從應用程式交付服務(如 Azure Front Door 和 Azure 應用程式閘道)發送到 Microsoft Sentinel。檢測攻擊並將 WAF 遙測集成到整個 Azure 環境中。",
+ "training": "https://learn.microsoft.com/training/paths/sc-200-connect-logs-to-azure-sentinel/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "6cc5f512-9253-498e-9da9-d37dac43bc6c",
- "service": "AVS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
+ "service": "Key Vault",
"severity": "高",
- "text": "在區域之間使用 2 個不同的地址空間,例如:10.0.0.0/16 和 192.168.0.0/16 用於不同的區域",
- "waf": "可靠性"
+ "text": "使用 Azure Key Vault 儲存機密和憑據。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d1d79a9b-2460-4448-aa8f-42d78e78cb6a",
- "service": "AVS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "graph": "ResourceContainers | where type=='microsoft.resources/subscriptions'| parse id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'| project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources| where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)",
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview-throttling",
+ "service": "Key Vault",
"severity": "中等",
- "text": "ExpressRoute Global Reach 是用於主 Azure VMware 解決方案私有雲和輔助 Azure VMware 解決方案私有雲之間的連接,還是通過網路虛擬設備完成路由?",
- "waf": "可靠性"
+ "text": "對不同的應用程式和區域使用不同的 Azure Key Vault,以避免事務規模限制並限制對機密的訪問。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "33bd2a09-17e7-4a8d-a0ae-0e27cee29711",
- "service": "AVS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "中等",
- "text": "是否考慮了所有備份解決方案,並決定了最適合您業務的解決方案?[ MABS/CommVault/Metallic.io/Veeam/ .",
- "waf": "可靠性"
+ "text": "預配 Azure Key Vault 並啟用軟刪除和清除策略,以允許對已刪除的物件進行保留保護。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bd352caa-ab79-4b18-adab-81932c9fc9d1",
- "service": "AVS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "中等",
- "text": "將備份解決方案部署在與 Azure VMware 解決方案私有雲相同的區域中",
- "waf": "可靠性"
+ "text": "通過將永久刪除密鑰、機密和證書的授權限制為專門的自定義 Microsoft Entra ID 角色,遵循最低許可權模型。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bb77036f-5e6b-4fbb-aed5-03547cc447e8",
- "service": "AVS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "與公共證書頒發機構一起自動執行證書管理和續訂流程,以簡化管理。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "建立金鑰和證書輪換的自動化流程。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
"severity": "中等",
- "text": "在 vSan 外部的 Azure 本機組件上部署備份解決方案",
- "waf": "可靠性"
+ "text": "在保管庫上啟用防火牆和虛擬網路服務終結點或專用終結點,以控制對密鑰保管庫的訪問。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "26028a71-f0f1-4cac-9d9e-f1d5e832d42e",
- "service": "AVS",
- "severity": "低",
- "text": "是否已制定請求還原由 Azure 平臺管理的 VMware 元件的流程?",
- "waf": "可靠性"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "使用平臺中心的 Azure Monitor Log Analytics 工作區來審核 Key Vault 的每個實例中的密鑰、證書和機密使用方式。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4604489a-8f42-4d78-b78c-b7a33bd2a0a1",
- "service": "AVS",
- "severity": "低",
- "text": "對於手動部署,必須記錄所有配置和部署",
- "waf": "操作"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "委託 Key Vault 實例化和特權訪問,並使用 Azure Policy 強制實施一致的合規配置。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-key-vault-networking-settings/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "7e7a8d90-ae0e-437c-be29-711bd352caaa",
- "service": "AVS",
- "severity": "低",
- "text": "對於手動部署,請考慮實施資源鎖,以防止對 Azure VMware 解決方案私有雲執行意外操作",
- "waf": "操作"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "每個區域每個環境的每個應用程式使用 Azure Key Vault。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b79b198d-ab81-4932-a9fc-9d1bb78036f5",
- "service": "AVS",
- "severity": "低",
- "text": "對於自動化部署,請部署最小的私有雲並根據需要進行擴展",
- "waf": "操作"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/best-practices",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "如果您想使用自己的金鑰,則可能並非所有考慮的服務都支援此功能。實施相關的緩解措施,以便不一致不會妨礙預期的結果。選擇適當的區域對和災難恢復區域,以最大限度地減少延遲。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e6bfbb9e-d503-4547-ac44-7e826128a71f",
- "service": "AVS",
- "severity": "低",
- "text": "對於自動部署,請在開始部署之前請求或預留配額",
- "waf": "操作"
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "link": "https://learn.microsoft.com/industry/sovereignty/key-management",
+ "service": "Key Vault",
+ "severity": "中等",
+ "text": "對於主權登陸區域,請使用 Azure Key Vault 託管 HSM 來儲存機密和憑據。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "0f1cac6d-9ef1-4d5e-a32e-42e3611c818b",
- "service": "AVS",
- "severity": "低",
- "text": "對於自動部署,請確保通過自動化或 Azure Policy 創建相關資源鎖,以便進行適當的治理",
- "waf": "操作"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "link": "https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports",
+ "service": "Entra",
+ "severity": "中等",
+ "text": "使用 Microsoft Entra ID 報告功能生成訪問控制審核報告。",
+ "training": "https://learn.microsoft.com/training/modules/monitor-report-aad-security-events/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e2cc95d4-8c6b-4791-bca0-f6c56589e558",
- "service": "AVS",
- "severity": "低",
- "text": "為 ExR 授權金鑰實現人類可理解的名稱,以便輕鬆識別密鑰的目的/用途",
- "waf": "操作"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management",
+ "service": "Defender",
+ "severity": "高",
+ "text": "為所有訂閱啟用Defender Cloud安全態勢管理。",
+ "training": "https://learn.microsoft.com/training/modules/microsoft-defender-cloud-security-posture/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "255461e2-aee3-4553-afc8-339248b262d6",
- "service": "AVS",
- "severity": "低",
- "text": "當使用單獨的服務原則部署 Azure VMware 解決方案和 ExpressRoute 時,請使用 Key Vault 儲存機密和授權密鑰",
- "waf": "操作"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan",
+ "service": "Defender",
+ "severity": "高",
+ "text": "為所有訂閱上的伺服器啟用Defender雲工作負載保護計劃。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "cc5f5129-2539-48e6-bb9d-37dac43bc6cd",
- "service": "AVS",
- "severity": "低",
- "text": "當需要在 Azure VMware 解決方案中/上部署許多資源時,定義用於在 IaC 中序列化操作的資源依賴項,因為 Azure VMware 解決方案僅支援有限數量的並行操作。",
- "waf": "操作"
+ "checklist": "Azure Landing Zone Review",
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription",
+ "service": "Defender",
+ "severity": "高",
+ "text": "在所有訂閱上為 Azure 資源啟用 Defender Cloud 工作負載保護計劃。",
+ "training": "https://learn.microsoft.com/training/modules/understand-azure-defender-cloud-workload-protection/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1d79a9b2-4604-4489-a8f4-2d78e78cb7a3",
- "service": "AVS",
- "severity": "低",
- "text": "使用單個 Tier-1 閘道執行 NSX-T 分段的自動配置時,請使用 Azure 門戶 API 而不是 NSX-Manager API",
- "waf": "操作"
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "link": "https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection",
+ "service": "VM",
+ "severity": "高",
+ "text": "在 IaaS 伺服器上啟用 Endpoint Protection。",
+ "training": "https://learn.microsoft.com/training/modules/design-solutions-securing-server-client-endpoints/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b",
- "service": "AVS",
+ "arm-service": "Microsoft.Compute/virtualMachines",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "link": "https://learn.microsoft.com/azure/security-center/",
+ "service": "VM",
"severity": "中等",
- "text": "打算使用自動橫向擴展時,請務必為運行 Azure VMware 解決方案的訂閱申請足夠的 Azure VMware 解決方案配額",
- "waf": "性能"
+ "text": "通過 Azure Monitor 紀錄和 Defender for Cloud 監視基本作業系統修補偏差。",
+ "training": "https://learn.microsoft.com/training/modules/create-log-analytics-workspace-microsoft-defender-cloud/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d352caaa-b79b-4198-bab8-1932c9fc9d1b",
- "service": "AVS",
+ "arm-service": "Microsoft.Insights/components",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "Monitor",
"severity": "中等",
- "text": "打算使用自動縮減時,請務必在執行此操作之前考慮存儲策略要求",
- "waf": "性能"
+ "text": "將預設資源配置連接到集中式 Azure Monitor Log Analytics 工作區。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-infrastructure-with-azure-monitor-logs/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "b78036f5-e6bf-4bb9-bd50-3547cc447e82",
- "service": "AVS",
- "severity": "中等",
- "text": "擴展操作始終需要在單個 SDDC 中序列化,因為一次只能執行一個擴展操作(即使使用多個集群也是如此)",
- "waf": "性能"
+ "checklist": "Azure Landing Zone Review",
+ "graph": "resources| where type == 'microsoft.operationalinsights/workspaces'| extend wsid = properties.customerId| project workspaceResourceId = tolower(id), name, wsid| join (resources| where type == 'microsoft.operationsmanagement/solutions'| where name has 'SecurityInsights'| extend workspaceResourceId = tostring(tolower(properties.workspaceResourceId))| project workspaceResourceId | summarize ResourceCount = count() by workspaceResourceId) on workspaceResourceId| extend RCount = iff(isnull(ResourceCount), 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 0)",
+ "guid": "a56888b2-7e83-4404-bd31-b886528502d1",
+ "link": "https://learn.microsoft.com/en-us/azure/well-architected/security/monitor-threats#centralized-threat-detection-with-correlated-logs",
+ "service": "Entra",
+ "severity": "高",
+ "text": "使用關聯日誌進行集中威脅檢測 - 將安全數據整合到一個中心位置,以便通過SIEM(安全資訊和事件管理)在各種服務之間關聯數據",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bf15bce2-19e4-4a0e-a588-79424d226786",
- "service": "AVS",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "link": "https://learn.microsoft.com/industry/sovereignty/transparency-logs",
+ "service": "Entra",
"severity": "中等",
- "text": "考慮並驗證體系結構中使用的第三方解決方案的縮放操作(支援與否)",
- "waf": "性能"
+ "text": "對於 Sovereign Landing Zone,請在 Entra ID 租戶上啟用透明度日誌。",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "d20b56c5-7be5-4851-a0f8-3835c586cb29",
- "service": "AVS",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "link": "https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview",
+ "service": "Entra",
"severity": "中等",
- "text": "在自動化中為環境定義和強制實施橫向擴展/橫向擴展最大限制",
- "waf": "性能"
+ "text": "對於 Sovereign Landing Zone,請在 Entra ID 租戶上啟用客戶密碼箱。",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "1dc15a1c-075e-4e9f-841a-cccd579376bc",
- "service": "AVS",
- "severity": "中等",
- "text": "實施監控規則以監控自動擴展操作,並監控成功和失敗,以啟用適當的(自動化)回應",
- "waf": "操作"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Storage",
+ "severity": "高",
+ "text": "啟用到存儲帳戶的安全傳輸。",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-storage-account/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection",
+ "service": "Storage",
"severity": "高",
- "text": "使用 MON 時,請注意同時配置的 VM 的限制(HCX 的 MON 限制 [400 - 標準,1000 - 大型設備])",
- "training": "https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/",
- "waf": "可靠性"
+ "text": "為存儲帳戶啟用容器軟刪除,以恢復已刪除的容器及其內容。",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "be1f38cf-03a8-422b-b463-cbbbc8ac299e",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works",
- "service": "AVS",
+ "arm-service": "Microsoft.KeyVault/vaults",
+ "checklist": "Azure Landing Zone Review",
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds",
+ "service": "Key Vault",
"severity": "高",
- "text": "使用 MON 時,不能在超過 100 個網路分機上啟用 MON",
- "training": "https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/",
- "waf": "可靠性"
+ "text": "使用 Key Vault 機密來避免對敏感資訊進行硬編碼,例如憑據(虛擬機用戶密碼)、證書或密鑰。",
+ "training": "https://learn.microsoft.com/en-us/training/modules/implement-azure-key-vault/",
+ "waf": "操作"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bc91a43d-90da-4e2c-a881-4706f7c1cbaf",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure 事件中心提供靜態數據加密。如果使用自己的金鑰,則仍使用 Microsoft 管理的金鑰對數據進行加密,但此外,Microsoft 管理的金鑰將使用客戶管理的密鑰進行加密。",
+ "guid": "7aaf12e7-b94e-4f6e-847d-2d92981b1cd6",
+ "link": "https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key",
+ "service": "Event Hubs",
+ "severity": "低",
+ "text": "需要時,在靜態數據加密中使用客戶管理的金鑰選項",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure 事件中心命名空間允許用戶端使用 TLS 1.0 及更高版本發送和接收數據。若要強制實施更嚴格的安全措施,可以將事件中心命名空間配置為要求用戶端使用較新版本的 TLS 發送和接收數據。如果事件中心命名空間需要最低版本的 TLS,則使用舊版本發出的任何請求都將失敗。",
+ "guid": "d2f54b29-769e-43a6-a0e7-828ac936657e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "如果使用 VPN 連接進行遷移,請相應地調整 MTU 大小。",
- "waf": "性能"
+ "text": "對請求強制實施傳輸層安全性 (TLS) 的最低要求版本",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e614658d-d457-4e92-9139-b821102cad6e",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "創建事件中心命名空間時,會自動為命名空間創建名為 RootManageSharedAccessKey 的策略規則。此策略具有整個命名空間的管理許可權。建議您將此規則視為管理根帳戶,不要在應用程式中使用它。建議將 AAD 用作 RBAC 的身份驗證提供程式。",
+ "guid": "13b0f566-4b1e-4944-a459-837ee79d6c6d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "對於連接到 Azure(500Mbps 或更低)的低連接區域,請考慮部署 HCX WAN 優化設備",
- "waf": "性能"
+ "text": "避免在不必要的情況下使用root帳戶",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "ae01e6e8-43e5-42f4-922d-928c1b1cd521",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure 資源的託管標識可以使用 Azure AD 憑據從 Azure 虛擬機 (VM)、函數應用、虛擬機規模集和其他服務中運行的應用程式授權訪問事件中心資源。通過將 Azure 資源的託管標識與 Azure AD 身份驗證結合使用,可以避免將憑據存儲在雲中運行的應用程式中。",
+ "guid": "3a365a5c-7acb-4e48-abd5-4cd79f2e8776",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "確保從本地裝置啟動遷移,而不是從雲端裝置啟動遷移(不要執行反向遷移)",
- "waf": "可靠性"
+ "text": "如果可能,應用程式應使用託管標識向 Azure 事件中心進行身份驗證。如果沒有,請考慮在 Azure Key Vault 或等效服務中擁有存儲憑據(SAS、服務主體憑據)",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "e54a29a9-de39-4ac0-b7c2-8dc935657202",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings",
- "service": "AVS",
- "severity": "中等",
- "text": "使用 Azure Netapp Files 擴展 Azure VMware 解決方案的儲存時,請考慮將其用作 VMware 資料儲存庫,而不是直接附加到 VM 。",
- "waf": "可靠性"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "創建許可權時,請對用戶端對 Azure 事件中心的訪問提供精細控制。Azure 事件中心中的許可權可以而且應該限定為單個資源級別,例如消費者組、事件中心實體、事件中心命名空間等。",
+ "guid": "8357c559-675c-45ee-a5b8-6ad8844ce3b2",
+ "link": "https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs",
+ "service": "Event Hubs",
+ "severity": "高",
+ "text": "使用最低特權數據平面 RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "bff4564b-0d93-44a3-98b2-63e7dd60513a",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "Azure 事件中心資源日誌包括操作日誌、虛擬網路和 Kafka 日誌。運行時審核日誌捕獲事件中心中所有數據平面訪問操作(例如發送或接收事件)的聚合診斷資訊。",
+ "guid": "b38b875b-a1cf-4104-a900-3a4d3ce474db",
+ "link": "https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "確保將專用 ExpressRoute 閘道用於外部資料儲存解決方案",
- "waf": "可靠性"
+ "text": "啟用記錄以進行安全調查。使用 Azure Monitor 捕獲指標和日誌,例如資源日誌、運行時審核日誌和 Kafka 紀錄",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "3649906e-bad3-48ea-b53c-c7de1d8aaab3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "默認情況下,Azure 事件中心具有公共IP位址,並且可通過Internet訪問。專用終結點允許虛擬網路和 Azure 事件中心之間的流量遍歷 Microsoft 主幹網路。除此之外,如果未使用公共終結點,則應禁用這些終結點。",
+ "guid": "5abca2a4-eda1-4dae-8cc9-5d48c6b791dc",
+ "link": "https://learn.microsoft.com/azure/event-hubs/private-link-service",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "確保在用於外部數據存儲解決方案的 ExpressRoute 閘道上啟用了 FastPath",
- "waf": "可靠性"
+ "text": "請考慮使用專用終結點訪問 Azure 事件中心,並在適用時禁用公用網路訪問。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "571549ab-8153-4d89-b89d-c7b33be2b1a2",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group",
- "service": "AVS",
- "severity": "高",
- "text": "如果使用延伸群集,請確保供應商支援所選的災難恢復解決方案",
- "waf": "可靠性"
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "使用IP防火牆,可以將公共終結點進一步限製為僅一組IPv4位址或 CIDR(無類別域間路由)表示法的IPv4位址範圍。",
+ "guid": "a0e6c465-89e5-458b-a37d-3974d1112dbd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering",
+ "service": "Event Hubs",
+ "severity": "中等",
+ "text": "請考慮僅允許從特定IP位址或範圍訪問 Azure 事件中心命名空間",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "4c486b6d-8bdc-4059-acf7-5ee8a1309888",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints",
- "service": "AVS",
- "severity": "高",
- "text": "如果使用延伸群集,請確保提供的 SLA 符合您的要求",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "31d41e36-11c8-417b-8afb-c410d4391898",
+ "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx",
+ "service": "Event Hubs",
+ "severity": "中等",
+ "text": "利用 FTA 彈性手冊",
"waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "9579d66b-896d-471f-a6ca-7be9955d04c3",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "對於從門戶創建的新 EH 命名空間,在啟用區域的區域中具有高級、專用或標準 SKU,將自動啟用此功能。EH 元數據和事件數據本身都是跨區域複製的",
+ "guid": "f15bce21-9e4a-40eb-9787-9424d226786d",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones",
+ "service": "Event Hubs",
"severity": "高",
- "text": "如果使用延伸群集,請確保兩條 ExpressRoute 線路都連接到連接中心。",
+ "text": "利用可用區(如果區域適用)",
"waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "c49d987c-b3d1-4325-aa12-4b6e4d0685ed",
- "link": "https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity",
- "service": "AVS",
- "severity": "高",
- "text": "如果使用延伸群集,請確保兩條 ExpressRoute 線路都啟用了 GlobalReach。",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "20b56c56-ad58-4519-8f82-735c586bb281",
+ "link": "https://learn.microsoft.com/azure/event-hubs/compare-tiers",
+ "service": "Event Hubs",
+ "severity": "中等",
+ "text": "使用高級或專用 SKU 實現可預測的性能",
"waf": "可靠性"
},
{
- "checklist": "Azure VMware Solution Design Review",
- "guid": "dce9793b-7bcd-4b3b-91eb-2ec14eea6e59",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates",
- "service": "AVS",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "啟用內置異地災難恢復功能后,可確保命名空間的整個配置(事件中心、消費者組和設置)從主命名空間持續複製到輔助命名空間,並允許隨時從主命名空間向輔助命名空間進行一次故障轉移。主動/被動功能旨在更輕鬆地從失敗的 Azure 區域中恢復和放棄,而無需更改應用程式配置",
+ "guid": "dc15a1c0-75ee-49f1-90ac-ccd579376bcd",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal",
+ "service": "Event Hubs",
"severity": "高",
- "text": "是否正確考慮了網站容災設置,並在需要時為您的業務進行了更改。",
+ "text": "使用主動被動配置規劃異地災難恢復",
"waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "應用與存儲相關的 Microsoft 雲安全基準中的指導",
- "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
- "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "description": "應用於無法容忍關閉區域中事件數據中斷或丟失的DR配置。對於這些情況,請遵循複製指南,不要使用內置的異地災難恢復功能(主動/被動)。使用「主動/主動」時,在不同區域和命名空間中維護多個事件中心,事件將在中心之間複製",
+ "guid": "6e31b67d-67ba-4591-89c0-9e805d597c7e",
+ "link": "https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "請考慮「存儲的 Azure 安全基線”",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "默認情況下,Azure 儲存具有公共IP位址,並且可通過Internet訪問。專用終結點允許僅向需要訪問的 Azure 計算資源安全地公開 Azure 存儲,從而消除對公共 Internet 的暴露",
- "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
- "service": "Azure Storage",
- "severity": "高",
- "text": "考慮將專用終結點用於 Azure 存儲",
- "waf": "安全"
+ "text": "對於業務關鍵型應用程式,請使用 Active Active 配置",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "新創建的存儲帳戶是使用ARM部署模型創建的,因此 RBAC、審核等都已啟用。確保訂閱中沒有具有經典部署模型的舊存儲帳戶",
- "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
- "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
- "service": "Azure Storage",
+ "arm-service": "microsoft.eventhub/namespaces",
+ "checklist": "Azure Event Hub Review",
+ "guid": "9ced16ad-d186-4f0a-a241-a999a68af77c",
+ "link": "https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design",
+ "service": "Event Hubs",
"severity": "中等",
- "text": "確保較舊的存儲帳戶未使用“經典部署模型”",
- "waf": "安全"
+ "text": "設計可復原的事件中心",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "利用 Microsoft Defender 瞭解可疑活動和錯誤配置。",
- "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
- "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones",
+ "service": "IoT",
"severity": "高",
- "text": "為所有存儲帳戶啟用 Microsoft DefenderEnable Defender for all of your storage accounts",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "軟刪除機制允許恢復意外刪除的 Blob。",
- "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "為 blob 啟用“軟刪除”",
- "waf": "安全"
+ "text": "利用可用區(如果區域適用)(這是自動啟用的)",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "請考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
- "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "35f651e8-0124-4ef7-8c57-658e38609e6e",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"severity": "中等",
- "text": "禁用 blob 的“軟刪除”",
- "waf": "安全"
+ "text": "請注意 Microsoft 發起的故障轉移。Microsoft 在極少數情況下會執行這些操作,以將所有IoT中心從受影響的區域故障轉移到相應的異地配對區域。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "容器的軟刪除使你能夠在刪除容器后恢復容器,例如從意外刪除操作中恢復。",
- "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "4ed3e490-dc06-4a1e-b467-5d0239d85540",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr",
+ "service": "IoT",
"severity": "高",
- "text": "為容器啟用“軟刪除”",
- "waf": "安全"
- },
- {
- "checklist": "Azure Blob Storage Review",
- "description": "請考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
- "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
- "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "禁用容器的“軟刪除”",
- "waf": "安全"
+ "text": "考慮為關鍵工作負載制定跨區域災難恢復策略",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "通過強制使用者在刪除之前先刪除刪除鎖,防止意外刪除存儲帳戶",
- "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
- "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "a11ecab0-db47-46f7-9aa7-17764e7e45a1",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover",
+ "service": "IoT",
"severity": "高",
- "text": "在存儲帳戶上啟用資源鎖",
- "waf": "安全"
+ "text": "瞭解如何觸發手動故障轉移。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "請考慮對 blob 使用“合法保留”或“基于時間的保留”策略,這樣就無法刪除 blob、容器或存儲帳戶。請注意,「不可能」實際上意味著「不可能」;存儲帳戶包含不可變 blob 後,「擺脫」該存儲帳戶的唯一方法是取消 Azure 訂閱。",
- "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
- "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
- "service": "Azure Storage",
+ "arm-service": "Microsoft.Devices/IotHubs",
+ "checklist": "IoT Hub Review",
+ "guid": "f9db8dfb-1194-460b-aedd-34dd6a69db22",
+ "link": "https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback",
+ "service": "IoT",
"severity": "高",
- "text": "考慮不可變的 blob",
- "waf": "安全"
+ "text": "瞭解如何在故障轉移後進行故障回復。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "請考慮禁用對存儲帳戶的未受保護的 HTTP/80 訪問,以便對所有數據傳輸進行加密、完整性保護,並對伺服器進行身份驗證。",
- "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
- "service": "Azure Storage",
- "severity": "高",
- "text": "需要 HTTPS,即在儲存帳戶上禁用埠 80",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
+ "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "Azure SAP 解決方案 中心 (ACSS) 是一種 Azure 產品/服務,它使 SAP 成為 Azure 上的頂級工作負載。ACSS 是一種端到端解決方案,使你能夠在 Azure 上將 SAP 系統作為統一工作負載創建和運行,併為創新提供更無縫的基礎。您可以利用新的和現有的基於 Azure 的 SAP 系統的管理功能。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "在儲存帳戶上配置自定義域(主機名)時,請檢查是否需要 TLS/HTTPS;如果是這樣,可能需要將 Azure CDN 放在存儲帳戶的前面。",
- "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
- "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
- "service": "Azure Storage",
- "severity": "高",
- "text": "強制實施 HTTPS(禁用 HTTP)時,請檢查是否未對儲存帳戶使用自定義域 (CNAME)。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "Azure 支援在Linux和 Windows 中自動執行 SAP 部署。SAP Deployment Automation Framework 是一種開源編排工具,可以部署、安裝和維護 SAP 環境。",
+ "training": "https://github.com/Azure/sap-automation",
+ "waf": "操作"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "當用戶端使用SAS令牌訪問 blob 資料時,要求使用 HTTPS 有助於將憑據丟失的風險降至最低。",
- "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "service": "SAP",
"severity": "中等",
- "text": "將共享訪問簽名 (SAS) 令牌限製為僅 HTTPS 連接",
- "waf": "安全"
+ "text": "在滿足 RTO 的任何時間和時間範圍內對生產資料庫執行時間點恢復;時間點恢復通常包括操作員錯誤地刪除 DBMS 層或透過 SAP 刪除數據",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "在可能的情況下,AAD 令牌應優先於共用訪問簽名",
- "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
- "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "測試備份和恢復時間,以驗證它們是否滿足在災難發生后同時還原所有系統的 RTO 要求。",
+ "waf": "可靠性"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "b651423c-8552-42db-a545-5cb50c05527a",
+ "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "service": "SAP",
"severity": "高",
- "text": "使用 Azure Active Directory (Azure AD) 令牌進行 blob 訪問",
- "waf": "安全"
+ "text": "您可以在配對區域之間複製標準存儲,但不能使用標準存儲來存儲資料庫或虛擬硬碟。您只能在您使用的配對區域之間複製備份。對於所有其他數據,請使用 SQL Server Always On 或 SAP HANA 系統複製等本機 DBMS 功能運行複製。將 Site Recovery、rsync 或 robocopy 以及其他第三方軟體組合用於 SAP 應用程式層。",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "將角色分配給使用者、組或應用程式時,請僅向該安全主體授予他們執行任務所需的許可權。限制對資源的訪問有助於防止無意和惡意濫用數據。",
- "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
"severity": "中等",
- "text": "IaM 許可權中的最低特權",
- "waf": "安全"
+ "text": "使用 Azure 可用性區域實現高可用性時,必須考慮 SAP 應用程式伺服器和資料庫伺服器之間的延遲。對於具有高延遲的區域,需要制定操作過程,以確保 SAP 應用程式伺服器和資料庫伺服器始終在同一區域中運行。",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "使用者委派 SAS 使用 Azure Active Directory (Azure AD) 憑據以及為 SAS 指定的許可權進行保護。使用者委派 SAS 在範圍和功能方面類似於服務 SAS,但比服務 SAS 具有安全優勢。",
- "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources| where type =~ 'microsoft.network/virtualnetworkgateways'| where properties.gatewayType =~ 'vpn' or properties.gatewayType =~ 'ExpressRoute'| extend SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType| extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup, Type, compliant",
+ "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
+ "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "service": "SAP",
"severity": "高",
- "text": "使用 SAS 時,首選「使用者委派 SAS」,而不是基於存儲帳戶密鑰的 SAS。",
- "waf": "安全"
+ "text": "設置從本地到主要和輔助 Azure 災難恢復區域的 ExpressRoute 連接。此外,作為使用 ExpressRoute 的替代方法,請考慮設置從本地到主要和輔助 Azure 災難恢復區域的 VPN 連接。",
+ "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "存儲帳戶金鑰(“共用金鑰”)幾乎沒有審核功能。雖然可以監控誰/何時獲取密鑰副本,但一旦密鑰掌握在多個人手中,就不可能將使用方式歸因於特定使用者。僅依靠 AAD 身份驗證可以更輕鬆地將存儲存取許可權綁定到使用者。",
- "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
- "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
- "service": "Azure Storage",
- "severity": "高",
- "text": "請考慮禁用存儲帳戶密鑰,以便僅支援 AAD 訪問(和使用者委派 SAS)。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "service": "SAP",
+ "severity": "低",
+ "text": "跨區域複製金鑰保管庫內容(如證書、機密或金鑰),以便可以在DR區域中解密資料。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "使用活動日誌數據來標識查看或更改存儲帳戶安全性的“時間”、“人員”、“內容”和“方式”(即存儲帳戶密鑰、訪問策略等)。",
- "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
- "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
- "service": "Azure Storage",
- "severity": "高",
- "text": "請考慮使用 Azure Monitor 審核存儲帳戶上的控制平面操作",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "將主虛擬網路和災難恢復虛擬網路對等互連。例如,對於 HANA 系統複製,SAP HANA DB 虛擬網路需要與災難恢復網站的 SAP HANA DB 虛擬網路對等互連。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "通過金鑰過期策略,您可以設置帳戶訪問金鑰輪換的提醒。如果指定的時間間隔已過且鍵尚未旋轉,則會顯示提醒。",
- "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "使用存儲帳戶密鑰時,請考慮啟用“金鑰過期策略”",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "service": "SAP",
+ "severity": "低",
+ "text": "如果將 Azure NetApp Files 儲存用於 SAP 部署,則至少在兩個區域中的高級層中創建兩個 Azure NetApp Files 帳戶。",
+ "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS 過期策略指定 SAS 有效的建議時間間隔。SAS 過期策略適用於服務 SAS 或帳戶 SAS。當使用者生成的服務 SAS 或帳戶 SAS 的有效期間隔大於建議的時間間隔時,他們會看到警告。",
- "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
- "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "考慮配置 SAS 過期策略",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "高",
+ "text": "應使用本機資料庫複製技術來同步HA對中的資料庫。",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "存儲存取策略提供了撤銷服務 SAS 許可權的選項,而無需重新生成儲存帳戶密鑰。",
- "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
- "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "考慮將 SAS 連結到儲存存取策略",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | extend addressSpace = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes) | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location, resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project id, compliant, cidr",
+ "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
+ "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "service": "SAP",
+ "severity": "高",
+ "text": "主虛擬網路 (VNet) 的 CIDR 不應與DR網站的 VNet 的 CIDR 衝突或重疊",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
- "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "請考慮配置應用程式的原始程式碼儲存庫,以檢測簽入的連接字串和存儲帳戶密鑰。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "service": "SAP",
+ "severity": "高",
+ "text": "使用 Site Recovery 將應用程式伺服器複製到 DR 網站。Site Recovery 還可以説明將中心服務群集 VM 複製到DR網站。調用DR時,您需要在DR網站上重新配置Linux Pacemaker集群(例如,替換VIP或SBD、運行 corosync.conf 等)。",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "理想情況下,應用程式應使用託管標識向 Azure 儲存進行身份驗證。如果無法做到這一點,請考慮在 Azure KeyVault 或等效服務中使用存儲憑據(連接字串、存儲帳戶密鑰、SAS、服務主體憑據)。",
- "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
- "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"severity": "高",
- "text": "請考慮將連接字串儲存在 Azure KeyVault 中(在無法實現託管標識的情況下)",
- "waf": "安全"
+ "text": "考慮 SAP 軟體的可用性,防止單點故障。這包括應用程式中的單點故障,例如 SAP NetWeaver 和 SAP S/4HANA 架構中使用的 DBMS、SAP ABAP 和 ASCS + SCS。此外,還可以使用其他工具,例如 SAP Web Dispatcher。",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "在臨時 SAS 服務 SAS 或帳戶 SAS 上使用近期過期時間。這樣,即使 SAS 遭到入侵,它也只能在很短的時間內有效。如果無法引用存儲訪問策略,則此做法尤為重要。近期過期時間還通過限制可上傳到 blob 的時間來限制可寫入 blob 的數據量。",
- "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "service": "SAP",
"severity": "高",
- "text": "爭取縮短臨時 SAS 的有效期",
- "waf": "安全"
+ "text": "對於 SAP 和 SAP 資料庫,請考慮實現自動故障轉移群集。在 Windows 中,Windows Server 故障轉移群集支援故障轉移。在Linux中,Linux Pacemaker或SIOS Protection Suite 和 Veritas InfoScale 等第三方工具支援故障轉移。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "創建 SAS 時,請盡可能具體和嚴格。首選單個資源和操作的 SAS,而不是提供更廣泛訪問許可權的 SAS。",
- "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
- "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "將窄範圍應用於SAS",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "service": "SAP",
+ "severity": "高",
+ "text": "Azure 不支援主 VM 和輔助 VM 共用 DBMS 數據存儲的體系結構。對於 DBMS 層,常見的架構模式是同時複製資料庫,並且使用與主 VM 和輔助 VM 使用的儲存堆疊不同的儲存堆疊。",
+ "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS 可以包含用戶端 IP 位址或位址範圍有權使用 SAS 請求資源的參數。",
- "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
- "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "盡可能考慮將SAS的範圍限定為特定的用戶端IP位址",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "service": "SAP",
+ "severity": "高",
+ "text": "DBMS 數據和事務/重做日誌檔存儲在 Azure 支援的塊存儲或 Azure NetApp 檔中。不支援將 Azure 檔案儲存或 Azure 高級檔儲存作為 SAP 工作負載的 DBMS 資料和/或重做日誌檔的存儲。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "SAS 無法限制用戶端上傳的數據量;考慮到存儲量隨時間變化的定價模型,驗證用戶端是否惡意上傳了大量內容可能是有意義的。",
- "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
- "service": "Azure Storage",
- "severity": "低",
- "text": "請考慮在用戶端使用SAS上傳檔后檢查上傳的數據。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "service": "SAP",
+ "severity": "高",
+ "text": "您可以在 Windows 中使用 Azure 共用磁碟,以實現 ASCS + SCS 元件和特定的高可用性方案。分別為 SAP 應用程式層元件和 DBMS 層設置故障轉移集群。Azure 目前不支援將 SAP 應用程式層元件和 DBMS 層合併到一個故障轉移群集中的高可用性體系結構。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "使用「本地使用者帳戶」通過 SFTP 訪問 Blob 儲存時,“通常”RBAC 控制不適用。通過 NFS 或 REST 進行的 Blob 訪問可能比 SFTP 訪問更嚴格。遺憾的是,截至 2023 年初,本地使用者是 SFTP 端點當前支援的唯一身份管理形式",
- "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'Microsoft.Network/loadBalancers' | extend bep = properties.backendAddressPools | extend BackEndPools = array_length(bep) | where BackEndPools =~ 0 | project name, id, Param1='backendPools', Param2=toint(0), tags | union (resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Standard' | extend bep = properties.backendAddressPools | extend BackEndPools = toint(array_length(bep)) | mv-expand bip = properties.backendAddressPools | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses) | where toint(BackendAddresses) <= 1 | project name, id, tags, Param1='backendAddresses', Param2=toint(BackendAddresses)) | union ( resources | where type =~ 'Microsoft.Network/loadBalancers' | where sku.name =~ 'Basic' | mv-expand properties.backendAddressPools | extend backendPoolId = properties_backendAddressPools.id | project id, name, tags, tostring(backendPoolId), Param1='BackEndPools' | join kind = leftouter ( resources | where type =~ 'Microsoft.Network/networkInterfaces' | mv-expand properties.ipConfigurations | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id) | summarize poolMembers = count() by backendPoolId | project tostring(backendPoolId), poolMembers ) on backendPoolId | where toint(poolMembers) <= 1 | extend BackendAddresses = poolMembers | project id, name, tags, Param1='backendAddresses', Param2=toint(BackendAddresses))",
+ "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "service": "SAP",
"severity": "高",
- "text": "SFTP:限制 SFTP 訪問的「本地使用者」數量,並審核一段時間內是否需要訪問。",
- "waf": "安全"
+ "text": "SAP 應用程式層元件 (ASCS) 和 DBMS 層的大多數故障轉移群集都需要故障轉移群集的虛擬 IP 位址。 Azure 負載均衡器應處理所有其他情況下的虛擬IP位址。一種設計原則是每個集群配置使用一個負載均衡器。我們建議您使用標準版本的負載均衡器 (Standard Load Balancer SKU)。",
+ "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "SFTP:SFTP 端點不支持類似 POSIX 的 ACL。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "service": "SAP",
+ "severity": "高",
+ "text": "確保在負載均衡器上啟用了浮動IP",
+ "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "存儲支援 CORS(跨域資源分享),即一種 HTTP 功能,使來自不同域的 Web 應用程式能夠放寬同源策略。啟用 CORS 時,請將 CorsRules 保留為最低許可權。",
- "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
- "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "service": "SAP",
"severity": "高",
- "text": "避免過於寬泛的 CORS 策略",
- "waf": "安全"
+ "text": "在部署高可用性基礎結構之前,根據您選擇的區域,確定是使用 Azure 可用性集還是可用性區域進行部署。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "靜態數據始終在伺服器端加密,此外也可能在用戶端加密。伺服器端加密可能使用平臺管理的金鑰(預設)或客戶管理的金鑰進行。用戶端加密可以通過讓用戶端按 blob 向 Azure 儲存提供加密/解密金鑰,或者完全在用戶端處理加密來實現。因此,完全不依賴 Azure 存儲來保證機密性。",
- "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
+ "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "service": "SAP",
"severity": "高",
- "text": "確定應如何加密靜態數據。了解數據的線程模型。",
- "waf": "安全"
+ "text": "如果要滿足 SAP 元件(中央服務、應用程式伺服器和資料庫)的應用程式的基礎設施 SLA,則必須為所有元件選擇相同的高可用性選項(VM、可用性集、可用區)。",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
- "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
- "service": "Azure Storage",
- "severity": "中等",
- "text": "確定應使用哪種/是否應使用平臺加密。",
- "waf": "安全"
+ "checklist": "SAP Checklist",
+ "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
+ "severity": "高",
+ "text": "不要在同一可用性集中混合使用不同角色的伺服器。將中心服務 VM、資料庫 VM、應用程式 VM 保留在其自己的可用性集中",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
- "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "service": "SAP",
"severity": "中等",
- "text": "確定應使用哪種/是否應使用用戶端加密。",
- "waf": "安全"
+ "text": "除非使用鄰近放置組,否則無法在 Azure 可用性區域中部署 Azure 可用性集。",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Blob Storage Review",
- "description": "利用 Resource Graph 資源管理器(資源 | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true)查找允許匿名 blob 訪問的存儲帳戶。",
- "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
- "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
- "service": "Azure Storage",
+ "checklist": "SAP Checklist",
+ "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "service": "SAP",
"severity": "高",
- "text": "考慮是否需要公共 blob 訪問,或者是否可以對某些存儲帳戶禁用公共 blob 訪問。",
- "waf": "安全"
+ "text": "創建可用性集時,請使用可用的容錯域和更新域的最大數量。例如,如果您在一個可用性集中部署兩個以上的 VM,除了 Azure 計劃內維護之外,還請使用最大數量的容錯域 (三個) 和足夠的更新域,以限制潛在物理硬體故障、網路中斷或電源中斷的影響。容錯域的預設數量為 2,以後無法在線更改。",
+ "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e",
- "link": "https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx",
- "service": "Azure Data Factory",
- "severity": "中等",
- "text": "利用 Azure 數據工廠的 FTA 復原能力手冊",
+ "checklist": "SAP Checklist",
+ "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
+ "severity": "高",
+ "text": "在可用性集部署中使用 Azure 鄰近放置組時,所有三個 SAP 元件(中央服務、應用程式伺服器和資料庫)都應位於同一鄰近放置組中。",
"waf": "可靠性"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e503547c-d447-4e82-9138-a7200f1cac6d",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "checklist": "SAP Checklist",
+ "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "service": "SAP",
"severity": "高",
- "text": "在支援可用區的區域中使用區域冗餘管道",
+ "text": "每個 SAP SID 使用一個鄰近放置組。組不跨可用性區域或 Azure 區域",
"waf": "可靠性"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "9ef1d6e8-32e5-42e3-911c-818b1a0bc511",
- "link": "https://learn.microsoft.com/azure/data-factory/source-control",
- "service": "Azure Data Factory",
- "severity": "中等",
- "text": "使用 DevOps 透過 Github/Azure DevOps 集成備份 ARM 範本",
+ "checklist": "SAP Checklist",
+ "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
+ "severity": "高",
+ "text": "使用以下服務之一運行 SAP Central Services 集群,具體取決於操作系統。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "e43a18a9-cd29-49cf-b7b1-7db8255562f2",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "checklist": "SAP Checklist",
+ "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "service": "SAP",
"severity": "中等",
- "text": "請確保在另一個區域中複製自承載集成運行時 VM",
+ "text": "Azure 目前不支援在同一個 Linux Pacemaker 群集中組合 ASCS 和 DB HA;將它們分成單獨的集群。但是,您最多可以將5個多個中央服務集群組合成一對VM。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "guid": "aee4563a-fd83-4393-98b2-62d6dc5f512a",
- "link": "https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery",
- "service": "Azure Data Factory",
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where sku.name in~ ('Standard_LRS', 'Premium_LRS') | project name, id, tags, param1 = strcat('sku: ', sku.name)",
+ "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "service": "SAP",
"severity": "中等",
- "text": "請確保在姊妹區域中複製或複製您的網路。必須在另一個區域創建 Vnet 的副本",
+ "text": "將高可用性對中的兩個 VM 部署在可用性集或可用性區域中。這些 VM 的大小應相同,並且具有相同的存儲配置。",
"waf": "可靠性"
},
{
- "checklist": "Azure Data Factory Review Checklist",
- "description": "如果ADF管道使用Key Vault,則無需執行任何操作即可複製Key Vault。Key Vault 是一項託管服務,Microsoft 會為你處理它",
- "guid": "25498f6d-bad3-47da-a43b-c6ce1d7aa9b2",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
- "service": "Azure Data Factory",
- "severity": "低",
- "text": "如果使用 Keyvault 集成,請使用 Keyvault 的 SLA 來瞭解可用性",
+ "checklist": "SAP Checklist",
+ "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "Azure 支援在 Red Hat Enterprise Linux (RHEL) 上運行的同一高可用性群集上安裝和配置 SAP HANA 以及 ASCS/SCS 和 ERS 實例。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
"waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a95b86ad-8840-48e3-9273-4b875ba18f20",
- "link": "https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models",
- "service": "Azure Monitor",
- "text": "Azure Monitor 中的數據收集規則 -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "成本"
- },
- {
- "checklist": "Cost Optimization Checklist",
- "guid": "45901365-d38e-443f-abcb-d868266abca2",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation",
- "service": "Azure Backup",
- "text": "檢查未找到底層數據源的備份實例",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "高",
+ "text": "在高級託管 SSD 上運行所有生產系統,並使用 Azure NetApp Files 或超級磁碟存儲。至少OS磁碟應位於高級層上,以便您可以獲得更好的性能和最佳SLA。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "64f9a19a-f29c-495d-94c6-c7919ca0f6c5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse",
- "service": "VM",
- "text": "刪除或存檔未關聯的服務(磁碟、網卡、IP 位址等)",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "service": "SAP",
+ "severity": "高",
+ "text": "應僅在 SAP 認證的存儲類型上運行 Azure 上的 SAP HANA。請注意,某些卷必須在某些磁碟配置上運行(如果適用)。這些配置包括啟用 Write Accelerator 和使用高級存儲。您還需要確保在儲存上運行的檔案系統與計算機上運行的 DBMS 相容。",
+ "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "69bad37a-ad53-4cc7-ae1d-76667357c449",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations",
- "service": "Azure Backup",
- "text": "考慮在網站恢復存儲和非任務關鍵型應用程式的備份之間取得良好的平衡",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "service": "SAP",
+ "severity": "高",
+ "text": "考慮根據您用於 SAP 工作負載的儲存類型配置高可用性。Azure Site Recovery 不支援 Azure 中提供的某些存儲服務,因此高可用性配置可能會有所不同。",
+ "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "674b5ed8-5a85-49c7-933b-e2a1a27b765a",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts",
- "service": "Azure Monitor",
- "text": "檢查 40 個不同 Log Analytics 工作區之間的支出和節省機會 - 對非生產工作區使用不同的保留和數據收集 - 創建每日上限以實現意識和層大小調整 - 如果確實設置了每日上限,除了在達到上限時創建警報外,請確保還創建警報規則,以便在達到某個百分比(例如 90%)時收到通知。- 如果可能,考慮工作空間改造 - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
+ "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "severity": "高",
+ "text": "不同的本機 Azure 儲存服務(如 Azure 檔、Azure NetApp 檔、Azure 共用磁碟)可能並非在所有區域都可用。因此,要在故障轉移后在DR區域上進行類似的SAP設置,請確保在DR網站中提供相應的存儲服務。",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "91be1f38-8ef3-494c-8bd4-63cbbac75819",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Azure Monitor",
- "text": "強制執行清除日誌策略和自動化(如果需要,可以將記錄移至冷存儲)",
- "training": "https://www.youtube.com/watch?v=nHQYcYGKuyw",
+ "checklist": "SAP Checklist",
+ "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "自動化 SAP System Start-Stop 以管理成本。",
"waf": "成本"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6aae01e6-a84d-4e5d-b36d-1d92881a1bd5",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "VM",
- "text": "檢查磁碟是否確實需要,如果不是:刪除。如果需要,請尋找較低的儲存層或使用備份 -",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation",
+ "checklist": "SAP Checklist",
+ "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "低",
+ "text": "如果將 Azure 高級存儲與 SAP HANA 配合使用,則可以使用 Azure 標準 SSD 儲存來選擇注重成本的儲存解決方案。但是,請注意,選擇標準 SSD 或標準 HDD Azure 儲存將影響單個 VM 的 SLA。此外,對於 I/O 輸送量較低且延遲較低的系統(如非生產環境),可以使用較低系列的 VM。",
"waf": "成本"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d1e44a19-659d-4395-afd7-7289b835556d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations",
- "service": "Storage",
- "text": "考慮使用自定義規則將未使用的存儲移動到較低層 - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "checklist": "SAP Checklist",
+ "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "service": "SAP",
+ "severity": "低",
+ "text": "作為成本較低的替代配置(多用途),您可以為非生產 HANA 資料庫伺服器 VM 選擇低性能 SKU。但是,請務必注意,某些 VM 類型(如 E 系列)未經過 HANA 認證(SAP HANA 硬體目錄),或者無法實現小於 1 毫秒的存儲延遲。",
"waf": "成本"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d0102cac-6aae-401e-9a84-de5de36d1d92",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "VM",
- "text": "確保 advisor 配置為適合 VM 大小調整",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "graph": "resources | where type =~ 'microsoft.aad/domainservices' | extend replicaSets = properties.replicaSets | where array_length(replicaSets) < 2 | project name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)",
+ "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
+ "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "service": "SAP",
+ "severity": "高",
+ "text": "對管理組、訂閱、資源組和資源強制實施 RBAC 模型",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "description": "通過在成本分析系統中搜索計量類別許可證進行檢查",
- "guid": "59ae568b-a38d-4498-9e22-13dbd7bb012f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations",
- "service": "VM",
- "text": "在所有 Windows VM 上運行腳本 https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server - 如果頻繁創建 Windows VM,請考慮實施策略",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "45911475-e39e-4530-accc-d979366bcda2",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "強制實施主體傳播,以便透過雲連接器將身份從 SAP 雲應用程式轉發到 SAP 本地(包括 IaaS)",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7b95e06e-158e-42ea-9992-c2de6e2065b3",
- "link": "https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure",
- "service": "VM",
- "text": "如果您已經擁有許可證,也可以將其置於 AHUB https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
+ "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 SAML 通過 Azure AD 實現對 SAP SaaS 應用程式(如 SAP Analytics Cloud、SAP Cloud Platform、Business by design、SAP Qualtrics 和 SAP C4C)的 SSO。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "75c1e945-b459-4837-bf7a-e7c6d3b475a5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal",
- "service": "VM",
- "text": "使用靈活性選項(不超過 4-5 個系列)整合保留的 VM 系列",
- "training": "https://learn.microsoft.com/azure/automation/automation-solution-vm-management",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 SAML 對基於 SAP NetWeaver 的 Web 應用程式(如 SAP Fiori 和 SAP Web GUI)實施 SSO。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c7acbe49-bbe6-44dd-a9f2-e87778468d55",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations",
- "service": "VM",
- "text": "利用 Azure 預留實例:此功能允許將 VM 預留 1 年或 3 年,與 PAYG 價格相比,可顯著節省成本。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 SAML 對基於 SAP NetWeaver 的 Web 應用程式(如 SAP Fiori 和 SAP Web GUI)實施 SSO。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a6bcca2b-4fea-41db-b3dd-95d48c7c891d",
- "link": "https://learn.microsoft.com/azure/active-directory-domain-services/overview",
- "service": "VM",
- "text": "只能保留較大的磁碟 => 1 TiB -",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "您可以使用 SAP NetWeaver SSO 或合作夥伴解決方案實現對 SAP GUI 的 SSO。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cb1f7d57-59ae-4568-aa38-d4985e2213db",
- "link": "https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain",
- "service": "VM",
- "text": "調整大小優化后",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "對於 SAP GUI 和 Web 瀏覽器訪問的 SSO,實施 SNC / Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮使用 SAP Secure Login Server,它是 SAP SSO 解決方案的一個元件。",
+ "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d7bb012f-7b95-4e06-b158-e2ea3992c2de",
- "link": "https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy",
- "service": "Azure SQL",
- "text": "檢查是否適用並強制執行策略/更改 https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
+ "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "對於 SAP GUI 和 Web 瀏覽器訪問的 SSO,實施 SNC / Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮使用 SAP Secure Login Server,它是 SAP SSO 解決方案的一個元件。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6e2065b3-a76a-4f4a-991e-8839ada46667",
- "link": "https://learn.microsoft.com/azure/active-directory/roles/best-practices",
- "service": "VM",
- "text": "虛擬機 + 許可證部分折扣 (ahub + 3YRI) 約為 70% 的折扣",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "16785d6f-a96c-496a-b885-18f482734c88",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "通過使用 SAP NetWeaver 的 OAuth 實施 SSO,以允許第三方或自定義應用程式訪問 SAP NetWeaver OData 服務。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel",
- "service": "VM",
- "text": "考慮使用 VMSS 來滿足需求,而不是按比例調整",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "實施SAP HANA的 SSO",
+ "waf": "安全"
},
{
- "arm-service": "microsoft.containerservice/managedClusters",
- "checklist": "Cost Optimization Checklist",
- "guid": "c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
- "service": "AKS",
- "text": "使用 AKS 自動縮放程式符合群集使用方式(確保 Pod 要求與縮放程式符合)",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "將 Azure AD 視為 RISE 上託管的 SAP 系統的標識提供者。有關詳細資訊,請參閱將服務與 Azure AD 集成。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "44be3b1a-27f8-4b9e-a1be-1f38df03a822",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work",
- "service": "Azure Backup",
- "text": "將恢復點移至保管庫存檔(如果適用)(驗證)",
- "training": "https://azure.microsoft.com/pricing/reservations/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
+ "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "對於訪問 SAP 的應用程式,您可能希望使用主體傳播來建立 SSO。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cd463cbb-bc8a-4c29-aebc-91a43da1dae2",
- "link": "https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination",
- "service": "Databricks",
- "text": "請考慮盡可能使用帶回退功能的現成 VM。考慮群集的自動終止。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "如果使用需要 SAP 身份驗證服務 (IAS) 的 SAP BTP 服務或 SaaS 解決方案,請考慮在 SAP Cloud Identity Authentication 服務和 Azure AD 之間實現 SSO 以存取這些 SAP 服務。此集成允許 SAP IAS 充當代理標識提供者,並將身份驗證請求轉發到作為中央使用者存儲和標識提供者的 Azure AD。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "cc881470-607c-41cc-a0e6-14658dd458e9",
- "link": "https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create",
- "service": "Azure Functions",
- "text": "功能 - 重用連接",
- "training": "https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "實施 SSO 到 SAP BTP",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "27139b82-1102-4dbd-9eaf-11e6f843e52f",
- "link": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "service": "Azure Functions",
- "text": "函數 - 本地快取資料",
- "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
+ "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "如果使用的是 SAP SuccessFactors,請考慮使用 Azure AD 自動使用者預配。通過此整合,當您將新員工添加到 SAP SuccessFactors 時,您可以在 Azure AD 中自動建立其用戶帳戶。(可選)您可以在 Microsoft 365 或 Azure AD 支援的其他 SaaS 應用程式中創建用戶帳戶。",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "4722d928-c1b1-4cd5-81e5-4a29b9de39ac",
- "link": "https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview",
- "service": "Azure Functions",
- "text": "函數 - 冷啟動 - 使用“從包運行”功能。這樣,代碼將下載為單個 zip 檔。例如,這可以顯著改進具有大量節點模組的 Javascript 函數。使用特定於語言的工具來減小包大小,例如,搖樹 Javascript 應用程式。",
- "training": "https://learn.microsoft.com/learn/modules/configure-network-watcher/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "description": "保持管理組層次結構合理平坦,不超過 4 個。",
+ "graph": "resourcecontainers| where type =~ 'microsoft.resources/subscriptions'| extend ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain| extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) > 1)",
+ "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "對 SAP 訂閱實施現有管理組策略",
+ "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "0e7c28dc-9366-4572-82bf-f4564b0d934a",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "Azure Functions",
- "text": "功能 - 保持功能溫暖",
- "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | summarize count()",
+ "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "高",
+ "text": "將緊密耦合的應用程式集成到同一 SAP 訂閱中,以避免額外的路由和管理複雜性",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "359c363e-7dd6-4162-9a36-4a907ebae38e",
- "link": "https://learn.microsoft.com/azure/governance/policy/overview",
- "service": "Azure Functions",
- "text": "使用具有不同功能的自動縮放時,可能會有一個資源驅動所有資源的所有自動縮放 - 請考慮將其移動到單獨的消耗計劃(並考慮更高的 CPU 計劃)",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "service": "SAP",
+ "severity": "高",
+ "text": "利用 Subscription 作為縮放單元並擴展我們的資源,考慮為每個環境部署 Subscription,例如。沙箱、非生產、生產",
+ "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ad53cc7d-e2e8-4aaa-a357-1549ab9153d8",
- "link": "https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal",
- "service": "Azure Functions",
- "text": "給定計劃中的函數應用都縮放在一起,因此縮放的任何問題都可能影響計劃中的所有應用。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "graph": "QuotaResources | where type =~ 'microsoft.compute/locations/usages' | where subscriptionId in~ ('','') | mv-expand json = properties.value limit 400 | extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue) | extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit) |where quotaName =~ 'Total Regional vCPUs' or quotaName =~ 'Total Regional Low-priority vCPUs' |project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,['json'] | order by ['usagePercent'] desc",
+ "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
+ "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "service": "SAP",
+ "severity": "高",
+ "text": "確保在訂閱預配過程中增加配額(例如,訂閱中的可用 VM 核心總數)",
+ "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "9f89dc7b-44be-43b1-a27f-8b9e91be1f38",
- "link": "https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups",
- "service": "Azure Functions",
- "text": "我需要為「等待時間」付費嗎?這個問題通常是在執行異步操作並等待結果的 C# 函數的上下文中提出的,例如 await Task.Delay(1000) 或 await client。GetAsync('http://google.com')。答案是肯定的 - GB 秒計算基於函數的開始和結束時間以及該時間段內的記憶體使用方式。在這段時間內實際發生的CPU活動未計入計算。此規則的一個例外是,如果使用的是持久函數。您無需為在業務流程協調程式函數中等待所花費的時間付費。在可能的情況下應用需求塑造技術(開發環境?)https://github.com/Azure-Samples/functions-csharp-premium-scaler",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
+ "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
+ "service": "SAP",
+ "severity": "低",
+ "text": "配額 API 是一個 REST API,可用於查看和管理 Azure 服務的配額。如有必要,請考慮使用它。",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "3da1dae2-cc88-4147-8607-c1cca0e61465",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "Front Door",
- "text": "Frontdoor - 關閉預設主頁在應用的應用程式設置中,將 AzureWebJobsDisableHomepage 設置為 true。這將向PoP返回204(無內容),因此僅返回標頭數據。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
+ "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "service": "SAP",
+ "severity": "高",
+ "text": "如果部署到可用區,請確保在配額獲得批准后,VM 的區域部署可用。提交支援請求,其中包含所需的訂閱、VM 系列、CPU 數量和可用區。",
+ "waf": "操作"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
+ "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "service": "SAP",
+ "severity": "高",
+ "text": "確保所需的服務和功能在選定的部署區域內可用,例如。ANF 、 Zone 等",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "8dd458e9-2713-49b8-8110-2dbd6eaf11e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor",
- "service": "Front Door",
- "text": "Frontdoor - 路由到不返回任何內容的內容。設置函數、函數代理,或在 WebApp 中添加返回 200 (OK) 且不發送內容或發送最少內容的路由。這樣做的好處是您可以在調用時註銷。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "利用 Azure 資源標籤進行成本分類和資源組(:BillTo、部門(或營業單位)、環境(生產、階段、開發)、層(Web 層、應用程式層)、應用程式擁有者、ProjectName)",
+ "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "7e31c67d-68cf-46a6-8a11-94956d697dc3",
- "link": "https://learn.microsoft.com/azure/architecture/best-practices/monitoring",
- "service": "Storage",
- "text": "考慮為使用較少的數據存檔層",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "service": "SAP",
+ "severity": "高",
+ "text": "使用 Azure 備份服務幫助保護 HANA 資料庫。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "a2ed27b2-d186-4f1a-8252-bddde68a487c",
- "link": "https://learn.microsoft.com/azure/automation/how-to/region-mappings",
- "service": "VM",
- "text": "檢查大小與層不匹配的磁碟大小(即 513 GiB 磁碟將支付 P30 (1TiB) 並考慮調整大小",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "如果您為 HANA、Oracle 或 DB2 資料庫部署 Azure NetApp 檔,請使用 Azure 應用程式一致性快照工具 (AzAcSnap) 拍攝應用程式一致性快照。AzAcSnap 還支援 Oracle 資料庫。考慮在中央 VM 上使用 AzAcSnap ,而不是在單個 VM 上使用。",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "dec4861b-c3bc-410a-b77e-26e4d5a3bec2",
- "link": "https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration",
- "service": "Storage",
- "text": "盡可能考慮使用標準 SSD,而不是 Premium 或 Ultra",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "service": "SAP",
+ "severity": "高",
+ "text": "確保操作系統和 SAP 系統之間的時區匹配。",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c4e2436b-1336-4db5-9f17-960eee0bdf5c",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift",
- "service": "Storage",
- "text": "對於存儲帳戶,請確保所選層不會增加事務費用(移動到下一層可能會更便宜)",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "不要將不同的應用程式服務分組到同一個集群中。例如,不要將DRBD和中央服務集群合併到同一個集群上。但是,您可以使用同一個 Pacemaker 集群來管理大約五個不同的中央服務(多 SID 集群)。",
+ "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "c2efc5d7-61d4-41d2-900b-b47a393a040f",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-overview",
- "service": "Site Recovery",
- "text": "對於 ASR,如果 RPO/RTO 和複製輸送量允許,請考慮使用標準 SSD 磁碟",
+ "checklist": "SAP Checklist",
+ "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
+ "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "service": "SAP",
+ "severity": "低",
+ "text": "考慮在推遲模型中運行開發/測試系統,以節省和優化 Azure 運行成本。",
"waf": "成本"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d3294798-b118-48b2-a5a4-6ceb544451e1",
- "link": "https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery",
- "service": "Storage",
- "text": "存儲帳戶:檢查熱層和/或 GRS 必填",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
+ "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "如果你通過管理客戶的 SAP 資產來與客戶合作,請考慮使用 Azure Lighthouse。Azure Lighthouse 允許託管服務提供者使用 Azure 原生標識服務對客戶的環境進行身份驗證。它將控制權交到客戶手中,因為他們可以隨時撤銷訪問許可權並審核服務提供者的行為。",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "92d34429-3c76-4286-97a5-51c5b04e4f18",
- "link": "https://learn.microsoft.com/azure/backup/backup-center-overview",
- "service": "VM",
- "text": "磁碟 - 驗證高級 SSD 磁碟在任何地方的使用方式:例如,非生產磁碟可以交換到標準 SSD 或按需高級 SSD",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
+ "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 Azure Update Manager 檢查單個 VM 或多個 VM 的可用更新的狀態,並考慮計劃定期修補。",
+ "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "54387e5c-ed12-46cd-832a-f5b2fc6998a5",
- "link": "https://learn.microsoft.com/azure/reliability/availability-zones-overview",
- "service": "Synapse",
- "text": "創建預算以管理成本並創建警報,自動通知利益相關者支出異常和超支風險。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "service": "SAP",
+ "severity": "低",
+ "text": "使用 SAP Landscape Management (LaMa) 優化和管理 SAP Basis 運營。使用適用於 Azure 的 SAP LaMa 連接器來重新定位、複製、克隆和刷新 SAP 系統。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "35e33789-7e31-4c67-b68c-f6a62a119495",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
- "service": "Synapse",
- "text": "將成本數據匯出到存儲帳戶以進行其他數據分析。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用適用於 SAP 解決方案的 Azure Monitor 監視 Azure 上的 SAP 工作負載(SAP HANA、高可用性 SUSE 群集和 SQL 系統)。請考慮使用 SAP 解決方案管理器補充適用於 SAP 解決方案的 Azure Monitor。",
+ "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "6d697dc3-a2ed-427b-8d18-6f1a1252bddd",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "Synapse",
- "text": "通過在不使用資源時暫停資源來控制專用 SQL 池的成本。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
+ "service": "SAP",
+ "severity": "高",
+ "text": "運行 VM Extension for SAP 檢查。適用於 SAP 的 VM 擴展使用虛擬機 (VM) 的分配託管標識來訪問 VM 監視和配置數據。該檢查可確保 SAP 應用程式中的所有性能指標都來自適用於 SAP 的基礎 Azure 擴展。",
+ "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "e68a487c-dec4-4861-ac3b-c10ae77e26e4",
- "link": "https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview",
- "service": "Synapse",
- "text": "啟用無伺服器 Apache Spark 自動暫停功能,並相應地設置超時值。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
+ "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 Azure Policy 進行訪問控制和合規性報告。Azure Policy 提供了強制實施組織範圍設置的功能,以確保一致的策略遵守和快速的違規檢測。",
+ "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "d5a3bec2-c4e2-4436-a133-6db55f17960e",
- "link": "https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates",
- "service": "Synapse",
- "text": "創建多個不同大小的 Apache Spark 池定義。",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
+ "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 Azure 網路觀察程式中的連接監視器來監視 SAP 資料庫和應用程式伺服器的延遲指標。或者使用 Azure Monitor 收集和顯示網路延遲測量值。",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator",
- "service": "Synapse",
- "text": "使用預購計劃購買為期一年的 Azure Synapse 提交單元 (SCU),以節省 Azure Synapse Analytics 成本。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "73686af4-6791-4f89-95ad-a43324e13811",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "在預配的 Azure 基礎結構上對 SAP HANA 執行質量檢查,以驗證預配的 VM 是否符合 Azure 上的 SAP HANA 最佳做法。",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "393a040f-d329-4479-ab11-88b2c5a46ceb",
- "link": "https://learn.microsoft.com/azure/application-gateway/overview-v2",
- "service": "VM",
- "text": "將現成 VM 用於可中斷作業:這些 VM 可以以折扣價競標和購買,為非關鍵工作負載提供經濟高效的解決方案。",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "service": "SAP",
+ "severity": "高",
+ "text": "對於每個 Azure 訂閱,在區域部署之前,請在 Azure 可用性區域上運行延遲測試,以選擇低延遲區域以在 Azure 上部署 SAP。",
+ "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
+ "waf": "性能"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "544451e1-92d3-4442-a3c7-628637a551c5",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-overview",
- "service": "VM",
- "text": "合理調整所有 VM 的大小",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
+ "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "運行彈性報告,確保整個預配的 Azure 基礎結構(計算、資料庫、網路、存儲、Site Recovery)的配置符合 Cloud Adaption Framework for Azure 定義的配置。",
+ "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
+ "waf": "可靠性"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "b04e4f18-5438-47e5-aed1-26cd032af5b2",
- "link": "https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet",
- "service": "VM",
- "text": "將 VM 大小與規範化大小和最新大小交換",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
+ "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用適用於 SAP 的 Microsoft Sentinel 解決方案實現威脅防護。使用此解決方案可監控您的 SAP 系統並檢測整個業務邏輯和應用程式層的複雜威脅。",
+ "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
+ "waf": "安全"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "fc6998a5-35e3-4378-a7e3-1c67d68cf6a6",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "調整 VM 大小 - 從低於 5% 的監視使用率開始,然後工作到 40%",
- "training": "https://learn.microsoft.com/learn/paths/secure-application-delivery/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "graph": "resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId, resourceGroup, tags, compliant",
+ "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
+ "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "可以利用 Azure 標記對資源進行邏輯分組和跟蹤、自動化部署,最重要的是,提供對所產生成本的可見性。",
+ "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
+ "waf": "操作"
},
{
- "checklist": "Cost Optimization Checklist",
- "guid": "2a119495-6d69-47dc-9a2e-d27b2d186f1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "VM",
- "text": "容器化應用程式可以提高 VM 密度並節省擴展成本",
- "training": "https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/",
- "waf": "成本"
+ "checklist": "SAP Checklist",
+ "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
+ "service": "SAP",
+ "severity": "低",
+ "text": "對延遲敏感型應用程式使用虛擬機間延遲監控。",
+ "waf": "性能"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "使用 Azure Site Recovery 監視來維護 SAP 應用程式伺服器的災難恢復服務的運行狀況。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
+ "waf": "可靠性"
},
{
"checklist": "SAP Checklist",
- "guid": "4620dc87-e948-4ce8-8426-f3e6e5d7bd85",
- "link": "https://learn.microsoft.com/azure/sap/center-sap-solutions/overview",
+ "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
"service": "SAP",
"severity": "中等",
- "text": "Azure SAP 解決方案中心 (ACSS) 是一項 Azure 產品/服務,可使 SAP 成為 Azure 上的頂級工作負載。ACSS 是一種端到端解決方案,使你能夠在 Azure 上創建和運行 SAP 系統作為統一的工作負載,並為創新提供更無縫的基礎。可以利用新的和現有的基於 Azure 的 SAP 系統的管理功能。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations",
- "waf": "操作"
+ "text": "從防病毒掃描中排除所有資料庫檔系統和可執行程式。包含它們可能會導致性能問題。請與資料庫供應商聯繫,瞭解有關排除清單的規範性詳細資訊。例如,Oracle 建議從防病毒掃描中排除 /oracle//sapdata。",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "5d75e99d-624d-4afe-91d9-e17adc580790",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops",
+ "guid": "c027f893-f404-41a9-b33d-39d625a14964",
+ "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
"service": "SAP",
- "severity": "中等",
- "text": "Azure 支援在Linux和 Windows 中自動執行 SAP 部署。SAP 部署自動化框架是一種開源編排工具,可以部署、安裝和維護 SAP 環境。",
- "training": "https://github.com/Azure/sap-automation",
- "waf": "操作"
+ "severity": "低",
+ "text": "考慮在遷移後收集非 HANA 資料庫的完整資料庫統計資訊。例如,實施SAP註釋 1020260 - Oracle 統計資訊的交付。",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "d17f6f39-a377-48a2-931f-5ead3ebe33a8",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform",
+ "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
"service": "SAP",
"severity": "中等",
- "text": "在符合 RTO 要求的任何時間點和時間範圍內對生產資料庫執行時間點恢復;時間點恢復通常包括操作員在DBMS層上或通過SAP刪除數據時出現的錯誤",
- "waf": "可靠性"
+ "text": "請考慮將 Oracle Automatic Storage Management (ASM) 用於使用 Azure 上的 SAP 的所有 Oracle 部署。",
+ "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "c4b8e117-930b-4dbd-ae50-7bc5faf6f91a",
+ "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
"service": "SAP",
"severity": "中等",
- "text": "測試備份和恢復時間,以驗證它們是否滿足在災難發生后同時還原所有系統的 RTO 要求。",
- "waf": "可靠性"
+ "text": "對於運行 Oracle 的 Azure 上的 SAP,一組 SQL 腳本可以説明你診斷性能問題。 Automatic Workload Repository (AWR) 報告包含用於診斷 Oracle 系統中問題的寶貴資訊。我們建議您在多個工作階段期間運行 AWR 報告,並為其選擇高峰時間,以確保分析的廣泛覆蓋範圍。",
+ "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "b651423c-8552-42db-a545-5cb50c05527a",
- "link": "https://learn.microsoft.com/azure/reliability/cross-region-replication-azure",
+ "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
"service": "SAP",
"severity": "高",
- "text": "可以在配對區域之間複製標準存儲,但不能使用標準存儲來存儲資料庫或虛擬硬碟。您只能在使用的配對區域之間複製備份。對於所有其他數據,請使用本機 DBMS 功能(如 SQL Server Always On 或 SAP HANA 系統複製)運行複製。將 Site Recovery、rsync 或 robocopy 以及其他第三方軟體組合用於 SAP 應用程式層。",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "可靠性"
+ "text": "使用 Azure Site Recovery 監視來維護 SAP 應用程式伺服器的災難恢復服務的運行狀況。",
+ "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "aa208dca-784f-46c6-9014-cc919c542dc9",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
+ "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
+ "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
"service": "SAP",
"severity": "中等",
- "text": "使用 Azure 可用性區域實現高可用性時,必須考慮 SAP 應用程式伺服器和資料庫伺服器之間的延遲。對於具有高延遲的區域,需要制定操作過程,以確保 SAP 應用程式伺服器和資料庫伺服器始終在同一區域中運行。",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "可靠性"
+ "text": "為了安全交付 HTTP/S 應用程式,請使用應用程式閘道 v2 並確保啟用 WAF 保護和策略。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "ba07c007-1f90-43e9-aa4f-601346b80352",
- "link": "https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering",
+ "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
- "severity": "高",
- "text": "設置從本地到主要和次要 Azure 災難恢復區域的 ExpressRoute 連接。此外,作為使用 ExpressRoute 的替代方法,請考慮設置從本地到主要和輔助 Azure 災難恢復區域的 VPN 連接。",
- "training": "https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "如果在遷移到 Azure 期間未更改虛擬機器的 DNS 或虛擬名稱,則後台 DNS 和虛擬名稱將連接 SAP 環境中的許多系統介面,並且客戶有時只會知道開發人員隨時間定義的介面。遷移后,當虛擬或 DNS 名稱發生變化時,各種系統之間會出現連接挑戰,建議保留 DNS 別名以防止出現這些類型的困難。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "d2b30195-b11d-4a8f-a672-28b2b4169a7c",
- "link": "https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance",
+ "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
"service": "SAP",
- "severity": "低",
- "text": "跨區域複製證書、機密或密鑰等金鑰保管庫內容,以便解密DR區域中的數據。",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "使用不同的 DNS 區域來區分每個環境(沙箱、開發、預生產和生產)。具有自己的 VNet 的 SAP 部署除外;在這裡,私有 DNS 區域可能不是必需的。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "05f1101d-250f-40e7-b2a1-b674ab50edbd",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana",
+ "description": "配置 VNet 對等互連時,請使用允許流量流向遠端虛擬網路設置。",
+ "graph": "resources | where type =~ 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings | project id, peeringName=properties_virtualNetworkPeerings.name, compliant = (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess =~ True)",
+ "guid": "a3592829-e6e2-4061-9368-6af46791f893",
+ "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
"service": "SAP",
"severity": "中等",
- "text": "對等連接主虛擬網路和災難恢復虛擬網路。例如,對於 HANA 系統複製,需要將 SAP HANA DB 虛擬網路對等互連到災難恢復網站的 SAP HANA DB 虛擬網路。",
+ "text": "本地和全域 VNet 對等互連提供連接,是確保跨多個 Azure 區域進行 SAP 部署的登陸區域之間建立連接的首選方法",
+ "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
"waf": "可靠性"
},
{
"checklist": "SAP Checklist",
- "guid": "d3351bf7-628a-46de-917d-dfc11d3b6b40",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels",
+ "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
"service": "SAP",
- "severity": "低",
- "text": "如果將 Azure NetApp 檔案儲存用於 SAP 部署,則至少要在兩個區域的高級層中創建兩個 Azure NetApp 檔帳戶。",
- "training": "https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria",
- "waf": "可靠性"
+ "severity": "高",
+ "text": "不支援在 SAP 應用程式和 SAP 資料庫伺服器之間部署任何 NVA",
+ "training": "https://me.sap.com/notes/2731110",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "726a1d3e-5508-4a06-9d54-93f4b50040c1",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "graph": "resources| where type =~ 'microsoft.network/virtualwans' | extend compliant= (properties.allowBranchToBranchTraffic =~ 'true') | distinct id,compliant",
+ "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
+ "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
"service": "SAP",
- "severity": "高",
- "text": "應使用本機資料庫複製技術來同步HA對中的資料庫。",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "在需要跨 Azure 區域和本地位置建立全球傳輸連接的新網路、大型網路或全球網路中,使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動為 Azure 網路設置可傳遞路由,並且可以遵循 Azure 上的 SAP 部署標準。",
+ "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "6561f847-3db5-4ff8-9200-5ad3c3b436ad",
- "link": "https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq",
+ "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
"service": "SAP",
- "severity": "高",
- "text": "主虛擬網路 (VNet) 的 CIDR 不應與DR網站的 VNet 的 CIDR 衝突或重疊",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "僅當使用合作夥伴 NVA 時,才考慮在區域之間部署網路虛擬設備 (NVA)。如果存在本機 NVA,則不需要區域或 VNet 之間的 NVA。部署合作夥伴網路技術和 NVA 時,請按照供應商的指南驗證與 Azure 網路的衝突配置。",
+ "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "0258ed30-fe42-434f-87b9-58f91f908e0a",
+ "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
+ "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
"service": "SAP",
- "severity": "高",
- "text": "使用 Site Recovery 將應用程式伺服器複製到 DR 網站。Site Recovery 還可以説明將中心服務群集 VM 複製到DR網站。調用DR時,需要在DR網站上重新配置Linux Pacemaker群集(例如,替換VIP或SBD、運行 corosync.conf 等)。",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "虛擬 WAN 管理基於虛擬 WAN 的拓撲的分支 VNet 之間的連接(無需設置使用者定義的路由 [UDR] 或 NVA),同一虛擬中心中 VNet 到 VNet 流量的最大網路輸送量為每秒 50 Gb。如有必要,SAP 登陸區域可以使用 VNet 對等互連連接到其他登陸區域並克服此頻寬限制。",
+ "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "8300cb30-766b-4084-b126-0dd8fb1269a1",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "graph": "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' and sku.tier =~ 'Regional' | where isempty(zones) or array_length(zones) <= 1 | extend az = case(isempty(zones), 'Non-zonal', array_length(zones) <= 1, strcat('Zonal (', strcat_array(zones, ','), ')'), zones) | project name, id, tags, param1 = strcat('sku: ', sku.name), param2 = strcat('availabilityZone: ', az)",
+ "guid": "82734c88-6ba2-4802-8459-11475e39e530",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "高",
- "text": "考慮 SAP 軟體針對單點故障的可用性。這包括應用程式中的單點故障,例如 SAP NetWeaver 和 SAP S/4HANA 架構中使用的 DBMS、SAP ABAP 和 ASCS + SCS。此外,還有其他工具,例如 SAP Web Dispatcher。",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations",
- "waf": "可靠性"
+ "text": "不建議將公共IP分配給運行SAP工作負載的 VM。",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "56402f11-ccbe-42c3-a2f6-c6f6f38ab579",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations",
+ "graph": "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId",
+ "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
+ "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
"service": "SAP",
"severity": "高",
- "text": "對於 SAP 和 SAP 資料庫,請考慮實現自動故障轉移群集。在 Windows 中,Windows Server 故障轉移群集支援故障轉移。在 Linux 中,Linux Pacemaker 或第三方工具(如 SIOS Protection Suite 和 Veritas InfoScale)支援故障轉移。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "可靠性"
+ "text": "配置 ASR 時,請考慮在 DR 端保留 IP 位址",
+ "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "afae6bec-2671-49ae-bc69-140b8ec8d320",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows",
+ "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
"service": "SAP",
"severity": "高",
- "text": "Azure 不支援主 VM 和輔助 VM 共用 DBMS 數據存儲的體系結構。對於 DBMS 層,常見的體系結構模式是同時複製資料庫,並使用與主虛擬機和輔助虛擬機使用的存儲堆疊不同的存儲堆疊。",
- "training": "https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations",
- "waf": "可靠性"
+ "text": "避免對生產和DR網站使用重疊的IP位址範圍。",
+ "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "ac614e95-6767-4bc3-b8a4-9953533da6ba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general",
+ "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
+ "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
"service": "SAP",
- "severity": "高",
- "text": "DBMS 數據和事務/重做日誌檔存儲在 Azure 支援的塊存儲或 Azure NetApp 檔中。不支援將 Azure 檔案儲存或 Azure 高級檔儲存作為 DBMS 資料和/或使用 SAP 工作負載重做日誌檔的存儲。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "雖然 Azure 確實可以説明您在 VNet 中創建多個委託子網,但 Azure NetApp 檔的 VNet 中只能存在一個委託子網。如果為 Azure NetApp Files 使用多個委託子網,則嘗試創建新卷將失敗。",
+ "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "1f737179-8e7f-4e1a-a30c-e5a649a3092b",
- "link": "https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk",
+ "graph": "resources | where type=~'microsoft.network/virtualhubs' | extend compliant = isnotnull(properties.azureFirewall.id) | project id, compliant",
+ "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
+ "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
"service": "SAP",
- "severity": "高",
- "text": "可以在 Windows 中將 Azure 共用磁碟用於 ASCS + SCS 元件和特定的高可用性方案。為 SAP 應用程式層元件和 DBMS 層單獨設置故障轉移群集。Azure 目前不支援將 SAP 應用程式層元件和 DBMS 層合併到一個故障轉移群集中的高可用性體系結構。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "使用 Azure 防火牆來管理到 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)",
+ "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "a78b3d31-3170-44f2-b5d7-651a29f4ccf5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections",
+ "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
"service": "SAP",
- "severity": "高",
- "text": "SAP 應用程式層元件 (ASCS) 和 DBMS 層的大多數故障轉移群集都需要故障轉移群集的虛擬 IP 位址。 Azure 負載均衡器應處理所有其他情況的虛擬IP位址。一個設計原則是每個集群配置使用一個負載均衡器。建議使用標準版本的負載均衡器(標準負載均衡器 SKU)。",
- "training": "https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "當應用程式閘道充當 SAP Web 應用的反向代理時,應用程式閘道和 Web 應用程式防火牆存在限制,如應用程式閘道、SAP Web 調度程式和其他第三方服務之間的比較所示。",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "1a541741-5833-4fb4-ae3c-2df743165c3a",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations",
+ "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
- "severity": "高",
- "text": "確保在負載均衡器上啟用了浮動IP",
- "training": "https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為到登陸區域的入站 HTTP/S 連接提供全域保護。",
+ "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "c47cc4f3-f105-452c-845e-9b307b3856c1",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability",
+ "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
"service": "SAP",
- "severity": "高",
- "text": "在部署高可用性基礎結構之前,請根據所選的區域確定是使用 Azure 可用性集還是可用性區域進行部署。",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "使用 Azure Front Door 和應用程式閘道保護 HTTP/S 應用程式時,請利用 Azure Front Door 中的 Web 應用程式防火牆策略。鎖定應用程式閘道以僅接收來自 Azure Front Door 的流量。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "844f69c3-07e5-4ec1-bff7-4be27bcf5fea",
- "link": "https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1",
+ "guid": "5ada4332-4e13-4811-9231-81aa41742694",
+ "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
"service": "SAP",
- "severity": "高",
- "text": "如果要滿足 SAP 元件(中央服務、應用程式伺服器和資料庫)應用程式的基礎結構 SLA,則必須為所有元件選擇相同的高可用性選項(VM、可用性集、可用性區域)。",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "使用 Web 應用程式防火牆在流量暴露於 Internet 時對其進行掃描。另一種選擇是將它與負載均衡器或具有內置防火牆功能的資源(如應用程式閘道或第三方解決方案)一起使用。",
+ "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "cbe05bbe-209d-4490-ba47-778424d11678",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
+ "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
"service": "SAP",
- "severity": "高",
- "text": "不要在同一可用性集中混合使用不同角色的伺服器。將中央服務 VM、資料庫 VM、應用程式 VM 保留在自己的可用性集中",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "在需要跨 Azure 區域和本地位置建立全球傳輸連接的新網路、大型網路或全球網路中,使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動為 Azure 網路設置可傳遞路由,並且可以遵循 Azure 上的 SAP 部署標準。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "f2201000-d045-40a6-a79a-d7cdc01b4d86",
- "link": "https://learn.microsoft.com/azure/virtual-machines/co-location",
+ "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
+ "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
"service": "SAP",
"severity": "中等",
- "text": "除非使用鄰近放置組,否則無法在 Azure 可用性區域內部署 Azure 可用性集。",
- "training": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "waf": "可靠性"
+ "text": "為了防止數據洩露,請使用 Azure 專用連結安全地訪問平臺即服務資源,例如 Azure Blob 存儲、Azure 檔存儲、Azure Data Lake Storage Gen2、Azure 數據工廠等。Azure 專用終結點還可以幫助保護 VNet 與 Azure 存儲、Azure 備份等服務之間的流量。VNet 與啟用了專用終結點的服務之間的流量通過 Microsoft 全球網路傳輸,從而防止其暴露在公共 Internet 上。",
+ "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "9674e7c7-7796-4181-8920-09f4429543ba",
- "link": "https://learn.microsoft.com/azure/virtual-machines/availability-set-overview",
+ "graph": "Resources | where type =~ 'Microsoft.Network/NetworkInterfaces' | where properties.enableAcceleratedNetworking =~ 'false' | project name, subscriptionId, properties.enableAcceleratedNetworking",
+ "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
+ "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
"service": "SAP",
"severity": "高",
- "text": "創建可用性集時,請使用最大數量的容錯域和更新可用的域。例如,如果在一個可用性集中部署兩個以上的 VM,請使用最大數量的容錯域(三個)和足夠的更新域來限制潛在的物理硬體故障、網路中斷或電源中斷的影響,以及 Azure 計劃內維護。默認的容錯域數為 2,以後無法連線更改。",
- "training": "https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations",
- "waf": "可靠性"
+ "text": "確保在 SAP 應用程式和 DBMS 層中使用的 VM 上啟用了 Azure 加速網路。",
+ "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
+ "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
"service": "SAP",
- "severity": "高",
- "text": "在可用性集部署中使用 Azure 鄰近放置組時,所有三個 SAP 元件(中央服務、應用程式伺服器和資料庫)都應位於同一鄰近放置組中。",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "確保將 Azure 負載均衡器的內部部署設置為使用直接伺服器返回 (DSR)。當內部負載均衡器配置用於 DBMS 層上的高可用性配置時,此設置 (Enabling Floating IP) 將減少延遲。",
+ "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "5d2fa56c-56ad-4484-88fe-72734c486ba2",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
+ "graph": "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc",
+ "guid": "6791f893-5ada-4433-84e1-3811523181aa",
+ "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
+ "service": "SAP",
+ "severity": "中等",
+ "text": "您可以使用應用程式安全組 (ASG) 和 NSG 規則來定義 SAP 應用程式和 DBMS 層之間的網路安全存取控制清單。ASG 對虛擬機進行分組以説明管理其安全性。",
+ "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
+ "waf": "安全"
+ },
+ {
+ "checklist": "SAP Checklist",
+ "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
+ "link": "https://me.sap.com/notes/2015553",
"service": "SAP",
"severity": "高",
- "text": "每個 SAP SID 使用一個鄰近放置組。組不跨可用性區域或 Azure 區域",
- "waf": "可靠性"
+ "text": "不支援將 SAP 應用程式層和 SAP DBMS 放置在未對等互連的不同 Azure VNet 中。",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
"service": "SAP",
- "severity": "高",
- "text": "根據操作系統的不同,使用以下服務之一來運行 SAP 中心服務群集。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "為了實現 SAP 應用程式的最佳網路延遲,請考慮使用 Azure 鄰近放置組。",
+ "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "ed46b937-913e-4018-9c62-8393ab037e53",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid",
+ "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
+ "link": "https://me.sap.com/notes/2015553",
"service": "SAP",
- "severity": "中等",
- "text": "Azure 目前不支援將 ASCS 和 DB HA 組合在同一 Linux Pacemaker 群集中;將它們分成單獨的集群。但是,最多可以將五個多個中心服務群集合併到一對 VM 中。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "可靠性"
+ "severity": "高",
+ "text": "根本不支援在本地和 Azure 之間運行 SAP Application Server 層和 DBMS 層。這兩個層都需要完全駐留在本地或 Azure 中。",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "f656e745-0cfb-453e-8008-0528fa21c933",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery",
+ "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
+ "link": "https://me.sap.com/notes/2015553",
"service": "SAP",
- "severity": "中等",
- "text": "在可用性集或可用性區域中的高可用性對中部署兩個 VM。這些 VM 的大小應相同,並具有相同的存儲配置。",
- "waf": "可靠性"
+ "severity": "高",
+ "text": "建議不要將 SAP 系統的資料庫管理系統 (DBMS) 和應用程式層託管在不同的 VNet 中,並將它們與 VNet 對等互連連接,因為層之間過多的網路流量可能會產生大量成本。建議使用 Azure 虛擬網路中的子網來分隔 SAP 應用程式層和 DBMS 層。",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
+ "waf": "成本"
},
{
"checklist": "SAP Checklist",
- "guid": "7f684ebc-95da-425e-b329-e782dbed050f",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance",
+ "guid": "402a9846-d515-4061-aff8-cd30088693fa",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
"service": "SAP",
- "severity": "中等",
- "text": "Azure 支援在 Red Hat Enterprise Linux (RHEL) 上運行的同一高可用性群集上安裝和配置 SAP HANA 和 ASCS/SCS 和 ERS 實例。",
+ "severity": "高",
+ "text": "如果將負載均衡器與 Linux 客戶機作業系統一起使用,請檢查 Linux 網路參數 net.ipv4.tcp_timestamps 是否設置為 0。",
"training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "可靠性"
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "07991f7d-6598-4d90-9431-45c62605d3a5",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
+ "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
+ "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
"service": "SAP",
- "severity": "高",
- "text": "在高級託管 SSD 上運行所有生產系統,並使用 Azure NetApp 檔或超級磁碟存儲。至少OS磁碟應位於高級層,以便您可以獲得更好的性能和最佳SLA。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "對於 SAP RISE/ECS 部署,虛擬對等互連是與客戶的現有 Azure 環境建立連接的首選方式。SAP VNet 和客戶 VNet 都受到網路安全組 (NSG) 的保護,從而通過 VNet 對等互連在 SAP 和資料庫埠上進行通信",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "73cdaecc-7d74-48d8-a040-88416eebc98c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage",
+ "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
+ "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
"service": "SAP",
"severity": "高",
- "text": "應僅在 SAP 認證的存儲類型上運行 Azure 上的 SAP HANA。請注意,某些卷必須在某些磁碟配置(如果適用)上運行。這些配置包括啟用寫入加速器和使用高級存儲。您還需要確保在儲存上運行的檔案系統與在電腦上運行的 DBMS 相容。",
- "training": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations",
- "waf": "可靠性"
+ "text": "查看 Azure VM 的 SAP HANA 資料庫備份。",
+ "waf": "成本"
},
{
"checklist": "SAP Checklist",
- "guid": "51904867-a70e-4fa0-b4ff-3e6292846d7c",
- "link": "https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage",
+ "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
+ "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
"service": "SAP",
- "severity": "高",
- "text": "請考慮根據用於 SAP 工作負載的儲存類型配置高可用性。Azure Site Recovery 不支援 Azure 中提供的某些存儲服務,因此高可用性配置可能會有所不同。",
- "training": "https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads",
- "waf": "可靠性"
+ "severity": "中等",
+ "text": "查看用於 SAP 的 Site Recovery 內置監視。",
+ "waf": "成本"
},
{
"checklist": "SAP Checklist",
- "guid": "1ac2d928-c9b7-42c6-ba18-23b1aea78693",
- "link": "https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/",
+ "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
+ "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
"service": "SAP",
"severity": "高",
- "text": "不同的本機 Azure 儲存服務(如 Azure 檔存儲、Azure NetApp 檔、Azure 共用磁碟)可能並非在所有區域都可用。因此,若要在故障轉移后在DR區域上設置類似的SAP,請確保在DR網站中提供相應的存儲服務。",
- "waf": "可靠性"
+ "text": "查看監控 SAP HANA 系統環境指南。",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "925d1f8c-01f3-4a67-948e-aabf0a1fad60",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675",
+ "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
"service": "SAP",
"severity": "中等",
- "text": "自動執行 SAP System Start-Stop 以管理成本。",
- "waf": "成本"
+ "text": "查看 Azure Linux VM 中的 Oracle Database 備份策略。",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "71dc00cd-4392-4262-8949-20c05e6c0333",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
+ "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
"service": "SAP",
- "severity": "低",
- "text": "如果將 Azure 高級存儲與 SAP HANA 配合使用,則可以使用 Azure 標準 SSD 儲存來選擇成本敏感的儲存解決方案。但是,請注意,選擇“標準 SSD”或“標準 HDD Azure”存儲將影響各個 VM 的 SLA。此外,對於具有較低 I/O 輸送量和低延遲的系統(例如非生產環境),可以使用較低系列的 VM。",
- "waf": "成本"
+ "severity": "中等",
+ "text": "查看 Azure Blob Storage 與 SQL Server 2016 的使用方式。",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "9877f353-2591-4e8b-8381-e9043fed1010",
- "link": "https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1",
+ "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
+ "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
"service": "SAP",
- "severity": "低",
- "text": "作為成本較低的替代配置(多用途),可以為非生產 HANA 資料庫伺服器 VM 選擇低性能 SKU。但是,請務必注意,某些 VM 類型(如 E 系列)未經 HANA 認證(SAP HANA 硬體目錄),或者無法實現小於 1 毫秒的存儲延遲。",
- "waf": "成本"
+ "severity": "中等",
+ "text": "查看 Azure VM 的自動備份 v2 的使用方式。",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "fda1dbf3-dc95-4d48-a7c7-91dca0f6c565",
- "link": "https://learn.microsoft.com/azure/well-architected/sap/design-areas/security",
+ "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
"service": "SAP",
"severity": "高",
- "text": "對管理組、訂閱、資源組和資源強制實施 RBAC 模型",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "安全"
+ "text": "使用進階磁碟時為 M 系列開啟寫入加速器 (V1)",
+ "waf": "操作"
},
{
"checklist": "SAP Checklist",
- "guid": "45911475-e39e-4530-accc-d979366bcda2",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
+ "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
"service": "SAP",
"severity": "中等",
- "text": "強制實施主體傳播,以便透過雲連接器將身份從 SAP 雲應用程式轉發到 SAP 本地(包括 IaaS)",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control",
- "waf": "安全"
+ "text": "測試可用區延遲。",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "750ab1ab-039d-495d-94c7-c8929cb107d5",
- "link": "https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration",
+ "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
+ "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
"service": "SAP",
"severity": "中等",
- "text": "使用 SAML 通過 Azure AD 實現 SAP SaaS 應用程式(如 SAP Analytics Cloud、SAP Cloud Platform、Business by Design、SAP Qualtrics 和 SAP C4C)的 SSO。",
- "waf": "安全"
+ "text": "為所有 SAP 元件啟動 SAP EarlyWatch Alert。",
+ "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "325ae525-ba34-4d46-a5e2-213ace7bb122",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
+ "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
"service": "SAP",
"severity": "中等",
- "text": "使用 SAML 對基於 SAP NetWeaver 的 Web 應用程式(如 SAP Fiori 和 SAP Web GUI)實施 SSO。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "安全"
+ "text": "使用 SAP ABAPMeter 報告 /SSA/CAT 查看 SAP 應用程式伺服器到資料庫伺服器的延遲。",
+ "training": "https://me.sap.com/notes/0002879613",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "9eb54dad-7861-4e1c-973a-f3bb003fc9c1",
+ "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
"service": "SAP",
"severity": "中等",
- "text": "使用 SAML 對基於 SAP NetWeaver 的 Web 應用程式(如 SAP Fiori 和 SAP Web GUI)實施 SSO。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori",
- "waf": "安全"
+ "text": "查看使用 CCMS 的 SQL Server 性能監控。",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "f29676ef-0c9c-4c4d-ab21-a55504c0c829",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial",
+ "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
+ "link": "https://me.sap.com/notes/500235",
"service": "SAP",
"severity": "中等",
- "text": "可以使用SAP NetWeaver SSO 或合作夥伴解決方案將 SSO 實現到 SAP GUI。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver",
- "waf": "安全"
+ "text": "測試 SAP 應用層 VM 和 DBMS VM 之間的網路延遲 (NIPING)。",
+ "training": "https://me.sap.com/notes/1100926/E",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "23181aa4-1742-4694-9ff8-ae7d7d474317",
+ "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
+ "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
"service": "SAP",
"severity": "中等",
- "text": "對於 SAP GUI 和 Web 瀏覽器存取的 SSO,請實施 SNC/Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮 SAP 安全登錄伺服器,它是 SAP SSO 解決方案的一個元件。",
- "training": "https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on",
- "waf": "安全"
+ "text": "查看 SAP HANA Studio 警報。",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "6c8bcbf4-5bbe-4609-b8a0-3e97778424d6",
- "link": "https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/",
+ "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
+ "link": "https://me.sap.com/notes/1969700",
"service": "SAP",
"severity": "中等",
- "text": "對於 SAP GUI 和 Web 瀏覽器存取的 SSO,請實施 SNC/Kerberos/SPNEGO(簡單且受保護的 GSSAPI 協商機制),因為它易於配置和維護。對於使用 X.509 用戶端證書的 SSO,請考慮 SAP 安全登錄伺服器,它是 SAP SSO 解決方案的一個元件。",
- "waf": "安全"
+ "text": "使用 HANA_Configuration_Minichecks 執行 SAP HANA 執行狀況檢查。",
+ "waf": "性能"
},
{
"checklist": "SAP Checklist",
- "guid": "16785d6f-a96c-496a-b885-18f482734c88",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth",
+ "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "中等",
- "text": "使用 OAuth for SAP NetWeaver 實現 SSO,以允許第三方或自定義應用程式訪問 SAP NetWeaver OData 服務。",
+ "text": "如果您在 Azure、本地或其他雲環境中運行 Windows 和 Linux VM,則可以使用 Azure 自動化中的更新管理中心來管理操作系統更新,包括安全補丁。",
+ "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "a747c350-8d4c-449c-93af-393dbca77c48",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial",
+ "guid": "08951710-79a2-492a-adbc-06d7a401545b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
"service": "SAP",
"severity": "中等",
- "text": "實現 SSO 到 SAP HANA",
+ "text": "定期查看 SAP 安全 OSS 說明,因為 SAP 發佈了高度關鍵的安全補丁或熱修復程式,需要立即採取措施保護您的 SAP 系統。",
+ "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "c7bae5bf-daf9-4761-9c56-f92891890aa4",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise",
+ "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
- "severity": "中等",
- "text": "將 Azure AD 視為 RISE 上託管的 SAP 系統的標識提供者。有關詳細資訊,請參閱將服務與 Azure AD 集成。",
+ "severity": "低",
+ "text": "對於 SQL Server 上的 SAP,您可以禁用 SQL Server 系統管理員帳戶,因為 SQL Server 上的 SAP 系統不使用該帳戶。在禁用原始系統管理員帳戶之前,請確保具有系統管理員許可權的其他使用者可以訪問伺服器。",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "e4e48226-ce54-44b6-bb6b-bfa15bd8f753",
- "link": "https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md",
+ "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"service": "SAP",
- "severity": "中等",
- "text": "對於訪問 SAP 的應用程式,可能需要使用主體傳播來建立 SSO。",
+ "severity": "高",
+ "text": "禁用 xp_cmdshell。SQL Server 功能xp_cmdshell啟用 SQL Server 內部作業系統命令 shell。這是安全審計中的潛在風險。",
+ "training": "https://me.sap.com/notes/3019299/E",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "59921095-4980-4fc1-a5b6-524a5a560c79",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial",
+ "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
- "severity": "中等",
- "text": "如果使用的是需要 SAP Identity Authentication Service (IAS) 的 SAP BTP 服務或 SaaS 解決方案,請考慮在 SAP Cloud Identity Authentication Services 和 Azure AD 之間實現 SSO 以存取這些 SAP 服務。此集成允許 SAP IAS 充當代理標識提供者,並將身份驗證請求轉發到 Azure AD,作為中央使用者存儲和標識提供者。",
+ "severity": "高",
+ "text": "在 Azure 上加密 SAP HANA 資料庫伺服器使用 SAP HANA 本機加密技術。此外,如果使用 Azure 上的 SQL Server,請使用透明數據加密 (TDE) 來保護數據和日誌檔,並確保備份也已加密。",
+ "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "a709c664-317e-41e4-9e34-67d9016a86f4",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial",
+ "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
"service": "SAP",
"severity": "中等",
- "text": "實現 SSO 到 SAP BTP",
+ "text": "Azure 儲存加密已為所有 Azure Resource Manager 和經典存儲帳戶啟用,並且無法禁用。由於數據預設加密,因此無需修改代碼或應用程式即可使用 Azure 儲存加密。",
+ "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "01f11b7f-38df-4251-9c76-4dec19abd3e8",
- "link": "https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
"service": "SAP",
- "severity": "中等",
- "text": "如果使用的是 SAP SuccessFactors,請考慮使用 Azure AD 自動使用者預配。通過此整合,當你向 SAP SuccessFactors 添加新員工時,可以在 Azure AD 中自動建立使用者帳戶。 (可選)可以在 Microsoft 365 或 Azure AD 支援的其他 SaaS 應用程式中建立使用者帳戶。 使用將電子郵件地址寫回 SAP SuccessFactors。",
+ "severity": "高",
+ "text": "使用 Azure Key Vault 儲存機密和憑據",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
"waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "6ba28021-4591-4147-9e39-e5309cccd979",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups",
+ "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
"service": "SAP",
"severity": "中等",
- "text": "對 SAP 訂閱強制實施現有管理組策略",
- "training": "https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization",
- "waf": "操作"
+ "text": "建議在成功部署后鎖定 Azure 資源,以防止未經授權的更改。您還可以使用自定義的 Azure 策略(自定義角色)按訂閱強制實施 LOCK 約束和規則。",
+ "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "366bcda2-750a-4b1a-a039-d95d54c7c892",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
+ "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
"service": "SAP",
- "severity": "高",
- "text": "將緊密耦合的應用程式集成到同一個 SAP 訂閱中,以避免額外的路由和管理複雜性",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions",
- "waf": "操作"
+ "severity": "中等",
+ "text": "預配 Azure Key Vault 並啟用軟刪除和清除策略,以允許對已刪除的物件進行保留保護。",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "9cb107d5-325a-4e52-9ba3-4d4685e2213a",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
+ "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
"service": "SAP",
"severity": "高",
- "text": "利用訂閱作為縮放單元並擴展我們的資源,請考慮按環境部署訂閱,例如。沙箱、非生產、生產",
- "training": "https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations",
- "waf": "操作"
+ "text": "根據現有要求、法規和合規性控制(內部/外部)- 確定需要哪些 Azure 策略和 Azure RBAC 角色",
+ "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "ce7bb122-f7c9-45f0-9e15-4e3aa3592829",
- "link": "https://learn.microsoft.com/azure/quotas/quotas-overview",
+ "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "高",
- "text": "確保在訂閱預配過程中增加配額(例如,訂閱中可用的 VM 核心總數)",
- "training": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits",
- "waf": "操作"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "ce4fab2f-433a-4d59-a5a9-3d1032e03ebc",
- "link": "https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity",
- "service": "SAP",
- "severity": "低",
- "text": "配額 API 是一個 REST API,可用於查看和管理 Azure 服務的配額。如有必要,請考慮使用它。",
- "waf": "操作"
+ "text": "在 SAP 環境中啟用 Microsoft Defender for Endpoint 時,建議排除 DBMS 伺服器上的數據和日誌檔,而不是以所有伺服器為目標。排除目標檔時,請遵循 DBMS 供應商的建議。",
+ "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "cbfad17b-f240-42bf-a1d8-f4f4cee661c8",
- "link": "https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal",
+ "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
+ "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
"service": "SAP",
"severity": "高",
- "text": "如果部署到可用性區域,請確保在配額獲得批准后,VM 的區域部署可用。提交支援請求,其中包含所需的訂閱、VM 系列、CPU 數量和可用性區域。",
- "waf": "操作"
+ "text": "委派 SAP 管理員自定義角色,使其具有 Microsoft Defender for Cloud 的即時訪問許可權。",
+ "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "e6e20617-3686-4af4-9791-f8935ada4332",
- "link": "https://azure.microsoft.com/explore/global-infrastructure/products-by-region/",
+ "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
- "severity": "高",
- "text": "確保所需的服務和功能在所選部署區域內可用,例如。ANF、區域等",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations",
- "waf": "操作"
+ "severity": "低",
+ "text": "通過將第三方安全產品與適用於 DIAG (SAP GUI)、RFC 和 SPNEGO for HTTPS 的安全網路通信 (SNC) 集成,對傳輸中的數據進行加密",
+ "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "4e138115-2318-41aa-9174-26943ff8ae7d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization",
+ "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
"service": "SAP",
"severity": "中等",
- "text": "利用 Azure 資源標記進行成本分類和資源分組(:BillTo、部門(或營業單位)、環境(生產、階段、開發)、層(Web 層、應用層)、應用程式擁有者、ProjectName)",
- "training": "https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/",
- "waf": "操作"
+ "text": "預設使用 Microsoft 管理的金鑰來實現主體加密功能,並在需要時使用客戶管理的金鑰。",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "2f7c95f0-6e15-44e3-aa35-92829e6e2061",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
+ "graph": "Resources | join kind=leftouter (ResourceContainers | where type=~'microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type =~ 'microsoft.keyvault/vaults' | project type, name, SubName",
+ "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
+ "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
"service": "SAP",
"severity": "高",
- "text": "使用 Azure 備份服務幫助保護 HANA 資料庫。",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "可靠性"
+ "text": "每個區域每個環境的每個應用程式使用 Azure Key Vault。",
+ "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "302a2fbf-3745-4a5f-a365-c9d1a16ca22c",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction",
+ "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
+ "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
"service": "SAP",
- "severity": "中等",
- "text": "如果為 HANA、Oracle 或 DB2 資料庫部署 Azure NetApp 檔,請使用 Azure 應用程式一致性快照工具( AzAcSnap )來創建應用程式一致性快照。AzAcSnap 還支援 Oracle 資料庫。請考慮在中央 VM 上使用 AzAcSnap,而不是在單個 VM 上使用 AzAcSnap。",
- "waf": "可靠性"
+ "severity": "高",
+ "text": "要控制和管理非 HANA Windows 和非 Windows 作業系統的磁碟加密密鑰和機密,請使用 Azure Key Vault。Azure Key Vault 不支援 SAP HANA,因此必須使用 SAP ABAP 或 SSH 密鑰等替代方法。",
+ "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "42d37218-a3a7-45df-bff6-1173e7f249ea",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
+ "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
+ "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
"service": "SAP",
"severity": "高",
- "text": "確保操作系統和 SAP 系統之間的時區匹配。",
- "waf": "操作"
+ "text": "為 Azure 上的 SAP 分支訂閱自定義基於角色的訪問控制 (RBAC) 角色,以避免意外的與網路相關的更改",
+ "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "c3c7abc0-716c-4486-893c-40e181d65539",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid",
+ "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
+ "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
"service": "SAP",
- "severity": "中等",
- "text": "不要將不同的應用程式服務分組到同一個集群中。例如,不要將DRBD和中央服務集群組合在同一集群上。但是,可以使用同一個 Pacemaker 群集來管理大約五個不同的中心服務(多 SID 群集)。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "可靠性"
+ "severity": "高",
+ "text": "將 DMZ 和 NVA 與 SAP 資產的其餘部分隔離開來,配置 Azure 專用連結,並安全地管理和控制 Azure 上的 SAP 資源",
+ "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "a491dfc4-9353-4213-9217-eef0949f9467",
- "link": "https://azure.microsoft.com/pricing/offers/dev-test/",
+ "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
+ "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
"service": "SAP",
"severity": "低",
- "text": "請考慮在暫停模型中運行開發/測試系統,以節省和優化 Azure 運行成本。",
- "waf": "成本"
+ "text": "考慮在 Azure 上使用 Microsoft 反惡意軟體來保護虛擬機免受惡意文件、廣告軟體和其他威脅的侵害。",
+ "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "b7056168-6199-4732-a514-cdbb2d5c9c54",
- "link": "https://learn.microsoft.com/azure/lighthouse/overview",
+ "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
+ "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
"service": "SAP",
- "severity": "中等",
- "text": "如果通過管理客戶的 SAP 資產與客戶合作,請考慮使用 Azure Lighthouse。Azure Lighthouse 允許託管服務提供者使用 Azure 本機標識服務對客戶的環境進行身份驗證。它將控制權交到客戶手中,因為他們可以隨時撤銷訪問許可權並審核服務提供者的行為。",
- "waf": "操作"
+ "severity": "低",
+ "text": "要獲得更強大的保護,請考慮使用 Microsoft Defender for Endpoint。",
+ "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "4d116785-d2fa-456c-96ad-48408fe72734",
- "link": "https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview",
+ "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
+ "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
"service": "SAP",
- "severity": "中等",
- "text": "使用 Azure Update Manager 檢查單個 VM 或多個 VM 的可用更新狀態,並考慮計劃定期修補。",
- "training": "https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations",
- "waf": "操作"
+ "severity": "高",
+ "text": "通過中心虛擬網路傳遞所有流量,將 SAP 應用程式和資料庫伺服器與 Internet 或本地網路隔離開來,該虛擬網路通過虛擬網路對等互連連接到輻射網路。對等互連的虛擬網路保證 Azure 上的 SAP 解決方案與公共 Internet 隔離。",
+ "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "76c8bcbf-45bb-4e60-ad8a-03e97778424d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/lama-installation",
+ "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
"service": "SAP",
"severity": "低",
- "text": "使用 SAP Landscape Management (LaMa) 優化和管理 SAP Basis 運營。使用適用於 Azure 的 SAP LaMa 連接器重新置放、複製、克隆和刷新 SAP 系統。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations",
- "waf": "操作"
+ "text": "對於面向 Internet 的應用程式(如 SAP Fiori),請確保根據應用程式要求分配負載,同時保持安全級別。對於第 7 層安全性,您可以使用 Azure Marketplace 中提供的第三方 Web 應用程式防火牆 (WAF)。",
+ "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "waf": "安全"
},
{
"checklist": "SAP Checklist",
- "guid": "14591147-5e39-4e53-89cc-cd979366bcda",
- "link": "https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions",
+ "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
+ "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
"service": "SAP",
"severity": "中等",
- "text": "使用用於 SAP 解決方案的 Azure Monitor 監視 Azure 上的 SAP 工作負載(SAP HANA、高可用性 SUSE 群集和 SQL 系統)。請考慮使用 SAP 解決方案管理器補充用於 SAP 解決方案的 Azure Monitor。",
+ "text": "若要在適用於 SAP 解決方案的 Azure Monitor 中啟用安全通信,可以選擇使用根證書或伺服器證書。我們強烈建議您使用根證書。",
"training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
- "waf": "操作"
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "2750ab1a-b039-4d95-b54c-7c8929cb107d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3b7a56de-5020-4642-b3cb-c976e80b6d6d",
+ "link": "https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare",
+ "service": "Logic Apps",
"severity": "高",
- "text": "運行適用於 SAP 的 VM 擴展檢查。適用於 SAP 的 VM 擴展使用虛擬機 (VM) 的分配託管標識來訪問 VM 監視和配置數據。該檢查可確保 SAP 應用程式中的所有性能指標都來自適用於 SAP 的基礎 Azure 擴展。",
- "training": "https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations",
- "waf": "操作"
+ "text": "根據業務和 SLO 要求選擇正確的邏輯應用託管計劃",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "5325ae52-5ba3-44d4-985e-2213ace7bb12",
- "link": "https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment",
- "service": "SAP",
- "severity": "中等",
- "text": "使用 Azure Policy 進行訪問控制和合規性報告。Azure Policy 提供了強制實施組織範圍設置的功能,以確保一致的策略遵守和快速違規檢測。",
- "training": "https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/",
- "waf": "操作"
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a",
+ "link": "https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps",
+ "service": "Logic Apps",
+ "severity": "高",
+ "text": "使用區域冗餘和可用性區域保護邏輯應用免受區域故障的影響",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "523181aa-4174-4269-93ff-8ae7d7d47431",
- "link": "https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "1cda768f-a206-445d-8234-56f6a6e7286e",
+ "link": "https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json",
+ "service": "Logic Apps",
+ "severity": "高",
+ "text": "考慮為關鍵工作負載制定跨區域災難恢復策略",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "82118ec5-ed6f-4c68-9471-eb0da98a1b34",
+ "link": "https://learn.microsoft.com/azure/app-service/environment/intro",
+ "service": "Logic Apps",
+ "severity": "高",
+ "text": "如果部署到獨立環境,請使用或遷移到應用服務環境 (ASE) v3",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Web/sites",
+ "checklist": "Logic Apps checklist",
+ "guid": "74275fa5-9e08-4c7e-b096-13b538fe1501",
+ "link": "https://learn.microsoft.com/training/modules/deploy-azure-functions/",
+ "service": "Logic Apps",
"severity": "中等",
- "text": "使用 Azure 網路觀察程式中的連接監視器監視 SAP 資料庫和應用程式伺服器的延遲指標。或者使用 Azure Monitor 收集和顯示網路延遲度量。",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979",
+ "text": "利用 Azure DevOps 或 GitHub 簡化 CI/CD 並保護邏輯應用代碼",
"waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "73686af4-6791-4f89-95ad-a43324e13811",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "應用與存儲相關的 Microsoft 雲安全基準中的指導",
+ "guid": "d237de14-3b16-4c21-b7aa-9b64604489a8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "在預配的 Azure 基礎結構上對 SAP HANA 執行質量檢查,以驗證預配的 VM 是否符合 Azure 上的 SAP HANA 最佳做法。",
- "waf": "操作"
+ "text": "請考慮「存儲的 Azure 安全基線”",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "616785d6-fa96-4c96-ad88-518f482734c8",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-zones",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "默認情況下,Azure 儲存具有公共IP位址,並且可通過Internet訪問。專用終結點允許僅向需要訪問的 Azure 計算資源安全地公開 Azure 存儲,從而消除對公共 Internet 的暴露",
+ "guid": "f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-private-endpoints",
+ "service": "Azure Storage",
"severity": "高",
- "text": "對於每個 Azure 訂閱,請在區域部署之前對 Azure 可用性區域運行延遲測試,以選擇用於在 Azure 上部署 SAP 的低延遲區域。",
- "training": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "waf": "性能"
+ "text": "考慮將專用終結點用於 Azure 存儲",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "410adcba-db46-424f-a6c4-05ecde75c52e",
- "link": "https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "新創建的存儲帳戶是使用ARM部署模型創建的,因此 RBAC、審核等都已啟用。確保訂閱中沒有具有經典部署模型的舊存儲帳戶",
+ "guid": "30e37c3e-2971-41b2-963c-eee079b598de",
+ "link": "https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "運行復原報告,確保整個預配的 Azure 基礎結構(計算、資料庫、網路、存儲、Site Recovery)的配置符合適用於 Azure 的 Cloud Adaption Framework 定義的配置。",
- "training": "https://learn.microsoft.com/training/paths/azure-well-architected-framework/",
- "waf": "可靠性"
+ "text": "確保較舊的存儲帳戶未使用“經典部署模型”",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "86ba2802-1459-4114-95e3-9e5309cccd97",
- "link": "https://learn.microsoft.com/azure/sentinel/sap/deployment-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "利用 Microsoft Defender 瞭解可疑活動和錯誤配置。",
+ "guid": "fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d",
+ "link": "https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "為所有存儲帳戶啟用 Microsoft Defender",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "軟刪除機制允許恢復意外刪除的 blob。",
+ "guid": "503547c1-447e-4c66-828a-7100f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用適用於 SAP 的 Microsoft Sentinel 解決方案實施威脅防護。使用此解決方案監視 SAP 系統,並檢測整個業務邏輯和應用程式層的複雜威脅。",
- "training": "https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations",
+ "text": "為 blob 啟用“軟刪除”",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "579266bc-ca27-45fa-a1ab-fe9d55d04c3c",
- "link": "https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
+ "guid": "3f1d5e87-2e52-4e36-81cc-58b4a4b1510e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "Azure 標記可用於對資源進行邏輯分組和跟蹤,自動執行其部署,最重要的是,提供對所發生成本的可見性。",
- "training": "https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations",
- "waf": "操作"
+ "text": "禁用 blob 的“軟刪除”",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "04b8e5e5-13cb-4b22-af62-5a8ecfcf0337",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows",
- "service": "SAP",
- "severity": "低",
- "text": "對延遲敏感型應用程式使用虛擬機間延遲監視。",
- "waf": "性能"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "容器的軟刪除使您能夠在刪除容器后恢復容器,例如從意外刪除操作中恢復。",
+ "guid": "43a58a9c-2289-4c3d-9b57-d0c655462f2a",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "為容器啟用“軟刪除”",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "07e5ed53-3d96-43d8-87ea-631b77da5aba",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "考慮有選擇地禁用某些 blob 容器的「軟刪除」 例如,如果應用程式必須確保立即刪除已刪除的資訊,例如出於機密性、隱私或合規性原因。",
+ "guid": "3e3453a3-c863-4964-ab65-2d6c15f51296",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用 Azure Site Recovery 監視來維護 SAP 應用程式伺服器的災難恢復服務的運行狀況。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations",
- "waf": "可靠性"
+ "text": "禁用容器的“軟刪除”",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "通過強制使用者先刪除刪除鎖,然後再刪除存儲帳戶,防止意外刪除存儲帳戶",
+ "guid": "5398e6de-d227-4dd1-92b0-6c21d7999a64",
+ "link": "https://learn.microsoft.com/azure/storage/common/lock-account-resource",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "在存儲帳戶上啟用資源鎖定",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "請考慮對 blob 使用“合法保留”或“基于時間的保留”策略,以便無法刪除 blob、容器或存儲帳戶。請注意,「不可能」實際上意味著「不可能」;一旦存儲帳戶包含不可變的 blob,「擺脫」該存儲帳戶的唯一方法是取消 Azure 訂閱。",
+ "guid": "6f4389a8-f42c-478e-98c0-6a73a22a4956",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "考慮不可變的 blob",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "請考慮禁用對存儲帳戶的未受保護的 HTTP/80 訪問,以便對所有數據傳輸進行加密、完整性保護,並且對伺服器進行身份驗證。",
+ "guid": "e7a8dc4a-20e2-47c3-b297-11b1352beee0",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "需要 HTTPS,即在儲存帳戶上禁用埠 80",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "在儲存帳戶上配置自定義域(主機名)時,請檢查是否需要 TLS/HTTPS;如果是這樣,可能需要將 Azure CDN 放在存儲帳戶的前面。",
+ "guid": "79b588de-fc49-472c-b3cd-21bf77036e5e",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "強制執行 HTTPS(禁用 HTTP)時,請檢查是否不要對儲存帳戶使用自定義域 (CNAME)。",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "abb6af9c-982c-4cf1-83fb-329fafd1ee56",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "當用戶端使用SAS令牌訪問 blob 資料時,要求使用 HTTPS 有助於最大程度地降低憑據丟失的風險。",
+ "guid": "6b4bed3d-5035-447c-8347-dc56028a71ff",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "從防病毒掃描中排除所有資料庫檔系統和可執行程式。包含它們可能會導致性能問題。請與資料庫供應商聯繫,瞭解排除清單中的規範性詳細資訊。例如,Oracle 建議從防病毒掃描中排除 /oracle}sapdata。",
- "waf": "性能"
+ "text": "將共享訪問簽名 (SAS) 令牌限製為僅 HTTPS 連接",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "c027f893-f404-41a9-b33d-39d625a14964",
- "link": "https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login",
- "service": "SAP",
- "severity": "低",
- "text": "請考慮在遷移後收集非 HANA 資料庫的完整資料庫統計資訊。例如,實施SAP 註釋1020260 - 交付 Oracle 統計資訊。",
- "waf": "性能"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": ".強制執行最新的 TLS 版本將拒絕來自使用舊版本的用戶端的請求。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (isnull(properties.minimumTlsVersion) == false and properties.minimumTlsVersion in ('TLS1_2', 'TLS1_3')) | distinct id, compliant",
+ "guid": "e12be569-a18f-4562-8d5d-ce151b9e7d55",
+ "link": "https://learn.microsoft.com/azure/storage/common/transport-layer-security-configure-minimum-version",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "強制實施存儲帳戶的最新 TLS 版本",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "fdafb1f5-3eee-4354-a8c9-deb8127ebc2e",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm",
- "service": "SAP",
- "severity": "中等",
- "text": "請考慮將 Oracle 自動儲存管理 (ASM) 用於使用 Azure 上的 SAP 的所有 Oracle 部署。",
- "training": "https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations",
- "waf": "性能"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "在可能的情況下,應優先使用 Microsoft Entra ID 令牌,而不是共用訪問簽名",
+ "guid": "e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4",
+ "link": "https://learn.microsoft.com/azure/storage/common/authorize-data-access",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "使用 Microsoft Entra ID 令牌進行 blob 訪問",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "33c5d5bf-daf3-4f0d-bd50-6010fdcec22e",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "為使用者、組或應用程式分配角色時,請僅授予該安全主體執行任務所需的許可權。限制對資源的訪問有助於防止無意和惡意濫用數據。",
+ "guid": "a4b1410d-4395-48a8-a228-9b3d6b57cfc6",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "對於運行 Oracle 的 Azure 上的 SAP,SQL 腳本集合可説明你診斷性能問題。 自動工作負載存儲庫 (AWR) 報告包含用於診斷 Oracle 系統中問題的寶貴資訊。我們建議您在多個工作階段期間運行 AWR 報告,並為其選擇高峰時間,以確保分析的廣泛覆蓋範圍。",
- "training": "https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency",
- "waf": "性能"
+ "text": "IaM 許可權中的最小特權",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "d89fd98d-23e4-4b40-a92e-32db9365522c",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "使用者委派 SAS 使用 Azure Active Directory (Azure AD) 憑據以及為 SAS 指定的許可權進行保護。使用者委派 SAS 在範圍和功能方面類似於服務 SAS,但與服務 SAS 相比,它提供了安全優勢。",
+ "guid": "55461e1a-3e34-453a-9c86-39648b652d6c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas",
+ "service": "Azure Storage",
"severity": "高",
- "text": "使用 Azure Site Recovery 監視來維護 SAP 應用程式伺服器的災難恢復服務的運行狀況。",
- "training": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "waf": "操作"
+ "text": "使用 SAS 時,首選「使用者委派 SAS」,而不是基於存儲帳戶密鑰的 SAS。",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ba34d46-85e2-4213-ace7-bb122f7c95f0",
- "link": "https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "存儲帳戶金鑰(“共用金鑰”)幾乎沒有審核功能。雖然可以監控誰/何時獲取了密鑰的副本,但一旦密鑰掌握在多人手中,就不可能將使用方式歸因於特定使用者。僅依賴 Entra ID 身份驗證可以更輕鬆地將存儲訪問許可權與用戶綁定。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend allowSharedKeyAccess = tostring(properties.allowSharedKeyAccess) | extend compliant = (isnotempty(allowSharedKeyAccess) and allowSharedKeyAccess == 'false') | distinct id, compliant",
+ "guid": "15f51296-5398-4e6d-bd22-7dd142b06c21",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "請考慮禁用存儲帳戶密鑰,以便僅支援 Microsoft Entra ID 訪問(和使用者委派 SAS)。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "使用活動日誌數據來確定查看或更改存儲帳戶安全性的“時間”、“人員”、“內容”和“方式”(即存儲帳戶密鑰、訪問策略等)。",
+ "guid": "d7999a64-6f43-489a-af42-c78e78c06a73",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "請考慮使用 Azure Monitor 審核存儲帳戶上的控制平面操作",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "通過金鑰過期策略,您可以設置帳戶訪問金鑰輪換的提醒。如果已過指定的時間間隔且尚未旋轉鍵,則會顯示提醒。",
+ "guid": "a22a4956-e7a8-4dc4-a20e-27c3e29711b1",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "若要安全交付 HTTP/S 應用,請使用應用程式閘道 v2 並確保啟用 WAF 保護和策略。",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/",
+ "text": "使用存儲帳戶密鑰時,請考慮啟用“金鑰過期策略”",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS 過期策略指定了 SAS 的有效時間間隔。SAS 過期策略適用於服務 SAS 或帳戶 SAS。當使用者生成的服務 SAS 或帳戶 SAS 的有效期間隔大於建議的時間間隔時,他們將看到警告。",
+ "guid": "352beee0-79b5-488d-bfc4-972cd3cd21bf",
+ "link": "https://learn.microsoft.com/azure/storage/common/sas-expiration-policy",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "如果在遷移到 Azure 期間未更改虛擬機器的 DNS 或虛擬名稱,則後台 DNS 和虛擬名稱將連接 SAP 環境中的許多系統介面,並且客戶有時只會知道開發人員隨時間推移定義的介面。遷移后,當虛擬或 DNS 名稱更改時,各種系統之間會出現連接挑戰,建議保留 DNS 別名以防止出現此類困難。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "操作"
+ "text": "考慮配置 SAS 過期策略",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "a2858f78-105b-4f52-b7a9-5b0f4439743b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "通過存儲訪問策略,可以選擇撤銷服務 SAS 的許可權,而無需重新生成存儲帳戶密鑰。",
+ "guid": "77036e5e-6b4b-4ed3-b503-547c1347dc56",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用不同的 DNS 區域來區分每個環境(沙箱、開發、預生產和生產)。具有自己的 VNet 的 SAP 部署除外;在這裡,私有 DNS 區域可能不是必需的。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution",
- "waf": "操作"
+ "text": "考慮將 SAS 連結到儲存存取策略",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "a3592829-e6e2-4061-9368-6af46791f893",
- "link": "https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "028a71ff-e1ce-415d-b3f0-d5e772d41e36",
+ "link": "https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "本地和全域 VNet 對等互連提供連接,是確保跨多個 Azure 區域的 SAP 部署的登陸區域之間的連接的首選方法",
- "training": "https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations",
- "waf": "可靠性"
+ "text": "請考慮配置應用程式的原始程式碼儲存庫,以檢測簽入的連接字串和存儲帳戶密鑰。",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "41742694-3ff8-4ae7-b7d4-743176c8bcbf",
- "link": "https://learn.microsoft.com/azure/sap/workloads/planning-guide",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "理想情況下,應用程式應使用託管標識向 Azure 儲存進行身份驗證。如果無法做到這一點,請考慮在 Azure KeyVault 或等效服務中擁有存儲憑據(連接字串、存儲帳戶密鑰、SAS、服務主體憑據)。",
+ "guid": "11cc57b4-a4b1-4410-b439-58a8c2289b3d",
+ "link": "https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys",
+ "service": "Azure Storage",
"severity": "高",
- "text": "不支援在 SAP 應用程式和 SAP 資料庫伺服器之間部署任何 NVA",
- "training": "https://me.sap.com/notes/2731110",
- "waf": "性能"
+ "text": "請考慮在 Azure KeyVault 中儲存連接字串(在無法使用託管標識的情況下)",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3",
- "link": "https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations",
- "service": "SAP",
- "severity": "中等",
- "text": "在需要跨 Azure 區域和本地位置的全域傳輸連接的新網路、大型網路或全球網路中使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動設置 Azure 網路的可傳遞路由,並且可以遵循 Azure 部署上的 SAP 標準。",
- "training": "https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about",
- "waf": "操作"
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "在臨時 SAS 服務 SAS 或帳戶 SAS 上使用近期過期時間。這樣,即使 SAS 遭到入侵,它也只會在短時間內有效。如果無法引用存儲訪問策略,則這種做法尤為重要。近期過期時間還通過限制可用於上傳到 blob 的時間來限制可以寫入 blob 的數據量。",
+ "guid": "27138b82-1102-4cac-9eae-01e6e842e52f",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "爭取縮短臨時 SAS 的有效期",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "0cedb1f6-ae6c-492b-8b17-8061f50b16d3",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "創建 SAS 時,請盡可能具體且具有限制性。首選單一資源和操作的 SAS,而不是提供更廣泛訪問許可權的 SAS。",
+ "guid": "4721d928-c1b1-4cd5-81e5-4a29a9de399c",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "僅當使用合作夥伴 NVA 時,才考慮在區域之間部署網路虛擬設備 (NVA)。如果存在本機 NVA,則不需要區域或 VNet 之間的 NVA。部署合作夥伴網路技術和 NVA 時,請按照供應商的指南驗證與 Azure 網路衝突的配置。",
- "training": "https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations",
- "waf": "操作"
+ "text": "對SAS應用窄範圍",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "facc08c6-ea95-4641-91cd-fa09e573adbd",
- "link": "https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS 可以包含用戶端 IP 位址或位址範圍有權使用 SAS 請求資源的參數。",
+ "guid": "fd7b28dc-9355-4562-82bf-e4564b0d834a",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/create-account-sas",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "虛擬 WAN 管理基於虛擬 WAN 的拓撲的分支 VNet 之間的連接(無需設置使用者定義的路由 [UDR] 或 NVA),同一虛擬中心中 VNet 到 VNet 流量的最大網路輸送量為每秒 50 G。如有必要,SAP 登陸區域可以使用 VNet 對等互連連接到其他登陸區域並克服此頻寬限制。",
- "training": "https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations",
- "waf": "操作"
+ "text": "盡可能考慮將SAS的範圍限定為特定的用戶端IP位址",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "82734c88-6ba2-4802-8459-11475e39e530",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "SAS無法限制用戶端上傳的數據量;考慮到存儲量隨時間變化的定價模型,驗證用戶端是否惡意上傳了大量內容可能很有意義。",
+ "guid": "348b263e-6dd6-4051-8a36-498f6dbad38e",
+ "service": "Azure Storage",
+ "severity": "低",
+ "text": "在用戶端使用SAS上傳檔后,請考慮檢查上傳的數據。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "使用「本地使用者帳戶」通過 SFTP 訪問 blob 儲存時,“通常”的 RBAC 控制不適用。通過 NFS 或 REST 進行的 Blob 訪問可能比 SFTP 訪問更具限制性。遺憾的是,截至 2023 年初,本地使用者是 SFTP 端點目前支援的唯一身份管理形式",
+ "guid": "ad53cc7c-e1d7-4aaa-a357-1449ab8053d8",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model",
+ "service": "Azure Storage",
"severity": "高",
- "text": "不建議將公共IP分配給運行SAP工作負載的 VM。",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
+ "text": "SFTP:限制 SFTP 訪問的「本地使用者」數量,並審核隨著時間的推移是否需要訪問。",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "9cccd979-366b-4cda-8750-ab1ab039d95d",
- "link": "https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "9f89dc7b-33be-42a1-a27f-7b9e91be1f38",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization",
+ "service": "Azure Storage",
+ "severity": "中等",
+ "text": "SFTP:SFTP 端點不支持類似 POSIX 的 ACL。",
+ "waf": "安全"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "存儲支援 CORS(跨源資源分享),即一種 HTTP 功能,使來自不同域的 Web 應用程式能夠放鬆同源策略。啟用 CORS 時,請將 CorsRules 保留為最低許可權。",
+ "guid": "cef39812-bd46-43cb-aac8-ac199ebb91a3",
+ "link": "https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services",
+ "service": "Azure Storage",
"severity": "高",
- "text": "配置 ASR 時,請考慮在 DR 端保留 IP 位址",
- "training": "https://learn.microsoft.com/learn/paths/architect-network-infrastructure/",
- "waf": "操作"
+ "text": "避免過於寬泛的 CORS 策略",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "54c7c892-9cb1-407d-9325-ae525ba34d46",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "靜態數據始終在伺服器端加密,此外也可能在用戶端加密。伺服器端加密可能使用平臺管理的金鑰(預設)或客戶管理的金鑰進行。用戶端加密可以通過讓用戶端按 blob 向 Azure 儲存提供加密/解密金鑰,或者完全在用戶端處理加密來實現。因此,完全不依賴 Azure 存儲來保證機密性。",
+ "guid": "3d90cae2-cc88-4137-86f7-c0cbafe61464",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
+ "service": "Azure Storage",
"severity": "高",
- "text": "避免對生產網站和DR網站使用重疊的IP位址範圍。",
- "training": "https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations",
- "waf": "操作"
+ "text": "確定應如何加密靜態數據。了解數據的線程模型。",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "6e154e3a-a359-4282-ae6e-206173686af4",
- "link": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "8dd457e9-2713-48b8-8110-2cac6eae01e6",
+ "link": "https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "雖然 Azure 確實可以説明您在 VNet 中創建多個委派子網,但 Azure NetApp 檔的 VNet 中只能存在一個委派子網。如果對 Azure NetApp 檔使用多個委託子網,則嘗試創建新卷將失敗。",
- "training": "https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations",
- "waf": "操作"
+ "text": "確定應使用哪種/是否應使用平臺加密。",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "d8a03e97-7784-424d-9167-85d6fa96c96a",
- "link": "https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e842e52f-4721-4d92-ac1b-1cd521e54a29",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用 Azure 防火牆管理發往 Internet 的 Azure 出站流量、非 HTTP/S 入站連接和東西向流量篩選(如果組織需要)",
- "training": "https://learn.microsoft.com/training/paths/secure-networking-infrastructure/",
+ "text": "確定應使用哪種/是否應使用用戶端加密。",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "91a65e40-be90-45b3-9f73-f3edbf8dc324",
- "link": "https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure",
- "service": "SAP",
- "severity": "中等",
- "text": "當應用程式閘道充當 SAP Web 應用的反向代理時,應用程式閘道和 Web 應用程式防火牆存在限制,如應用程式閘道、SAP Web 調度程式和其他第三方服務之間的比較所示。",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "description": "利用 Resource Graph 資源管理器 (resources | where type == 'microsoft.storage/storageaccounts' | where properties['allowBlobPublicAccess'] == true) 查找允許匿名 blob 訪問的存儲帳戶。",
+ "graph": "resources | where type == 'microsoft.storage/storageaccounts' | extend compliant = (properties.allowBlobPublicAccess == 'false') | distinct id, compliant",
+ "guid": "659ae558-b937-4d49-a5e1-112dbd7ba012",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "考慮是否需要公共 blob 匿名訪問,或者是否可以對某些存儲帳戶禁用公共 blob 匿名訪問。",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "5e39e530-9ccc-4d97-a366-bcda2750ab1a",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "利用 storagev2 帳戶類型獲得更好的性能和可靠性",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "e05bbe20-9d49-4fda-9777-8424d116785c",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-redundancy",
+ "service": "Azure Storage",
+ "severity": "高",
+ "text": "利用 GRS、ZRS 或 GZRS 儲存實現最高可用性",
+ "waf": "可靠性"
+ },
+ {
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "2fa56c56-ad48-4408-be72-734c486ba280",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用 Azure Front Door 和 WAF 策略跨 Azure 區域為與登陸區域的入站 HTTP/S 連接提供全域保護。",
- "training": "https://learn.microsoft.com/training/paths/secure-application-delivery/",
- "waf": "安全"
+ "text": "對於故障轉移后的寫入操作,請使用客戶管理的故障轉移",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "b039d95d-54c7-4c89-89cb-107d5325ae52",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "dc0590cf-65de-48e1-909c-cbd579266bcc",
+ "link": "https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用 Azure Front Door 和應用程式閘道保護 HTTP/S 應用程式時,請利用 Azure Front Door 中的 Web 應用程式防火牆策略。鎖定應用程式閘道以僅接收來自 Azure Front Door 的流量。",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "安全"
+ "text": "瞭解 Microsoft 託管的故障轉移詳細資訊",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "5ada4332-4e13-4811-9231-81aa41742694",
- "link": "https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.Storage/storageAccounts",
+ "checklist": "Azure Storage Review Checklist",
+ "guid": "a274faa1-abfe-49d5-9d04-c3c4919cb1b3",
+ "link": "https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+ "service": "Azure Storage",
"severity": "中等",
- "text": "使用 Web 應用程式防火牆在流量暴露於 Internet 時對其進行掃描。另一種選擇是將其與負載均衡器或具有內置防火牆功能(如應用程式閘道或第三方解決方案)的資源一起使用。",
- "training": "https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations",
- "waf": "安全"
+ "text": "啟用軟刪除",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "e73de7d5-6f36-4217-a526-e1a621ecddde",
- "link": "https://learn.microsoft.com/azure/frontdoor/front-door-overview",
- "service": "SAP",
+ "checklist": "Identity Review Checklist",
+ "guid": "bb235c70-5e17-496f-bedf-a8a4c8cdec4c",
+ "link": "https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens",
+ "service": "Entra",
"severity": "中等",
- "text": "在需要跨 Azure 區域和本地位置的全域傳輸連接的新網路、大型網路或全球網路中使用虛擬 WAN 進行 Azure 部署。使用此方法,無需手動設置 Azure 網路的可傳遞路由,並且可以遵循 Azure 部署上的 SAP 標準。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door",
- "waf": "性能"
+ "text": "使用長期可撤銷令牌,緩存令牌並使用 Microsoft 標識庫以靜默方式獲取令牌",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "3c536a3e-1b6b-4e87-95ca-15edb47251c0",
- "link": "https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services",
- "service": "SAP",
+ "checklist": "Identity Review Checklist",
+ "guid": "503547c1-447e-4c66-828a-71f0f1ce16dd",
+ "link": "https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops",
+ "service": "AAD B2C",
"severity": "中等",
- "text": "若要防止數據洩露,請使用 Azure 專用連結安全地訪問平臺即服務資源,例如 Azure Blob 存儲、Azure 檔存儲、Azure Data Lake Storage Gen2、Azure 數據工廠等。Azure 專用終結點還有助於保護 VNet 與 Azure 存儲、Azure 備份等服務之間的流量。VNet 與啟用專用終結點的服務之間的流量通過 Microsoft 全球網路傳輸,從而防止其暴露在公共 Internet 上。",
- "training": "https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations",
- "waf": "安全"
+ "text": "請確保登錄使用者流已備份並具有復原能力。請確保用於登錄使用者的代碼已備份且可恢復。與外部進程的彈性介面",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "85e2213a-ce7b-4b12-8f7c-95f06e154e3a",
- "link": "https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat",
- "service": "SAP",
- "severity": "高",
- "text": "請確保在 SAP 應用程式和 DBMS 層中使用的 VM 上啟用了 Azure 加速網路。",
- "training": "https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations",
+ "checklist": "Identity Review Checklist",
+ "guid": "3e3553a4-c873-4964-ab66-2d6c15f51296",
+ "link": "https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network",
+ "service": "AAD B2C",
+ "severity": "中等",
+ "text": "自訂品牌資產應託管在CDN上",
"waf": "性能"
},
{
- "checklist": "SAP Checklist",
- "guid": "3ff8ae7d-7d47-4431-96c8-bcbf45bbe609",
- "link": "https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview",
- "service": "SAP",
- "severity": "中等",
- "text": "請確保將 Azure 負載均衡器的內部部署設置為使用直接伺服器返回 (DSR)。此設置(啟用浮動IP)將減少內部負載均衡器配置用於 DBMS 層上的高可用性配置時的延遲。",
- "training": "https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations",
- "waf": "安全"
+ "checklist": "Identity Review Checklist",
+ "guid": "5398e6df-d237-4de1-93b1-6c21d79a9b64",
+ "link": "https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance",
+ "service": "AAD B2C",
+ "severity": "低",
+ "text": "擁有多個標識提供者(即使用您的 Microsoft、Google、Facebook 帳戶登錄)",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "6791f893-5ada-4433-84e1-3811523181aa",
- "link": "https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works",
- "service": "SAP",
+ "checklist": "Identity Review Checklist",
+ "guid": "604489a8-f42d-478e-98c0-7a73b22a4a57",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "中等",
- "text": "可以使用應用程式安全組 (ASG) 和 NSG 規則在 SAP 應用程式層和 DBMS 層之間定義網路安全存取控制清單。ASG 對虛擬機進行分組,以説明管理其安全性。",
- "training": "https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations",
- "waf": "安全"
- },
- {
- "checklist": "SAP Checklist",
- "guid": "45bbe609-d8a0-43e9-9778-424d616785d6",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "高",
- "text": "不支援將 SAP 應用程式層和 SAP DBMS 放置在未對等互連的不同 Azure VNet 中。",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "性能"
+ "text": "遵循 VM 規則,實現 VM 級別的高可用性(高級磁碟,一個區域中的兩個或更多磁碟,位於不同的可用性區域)",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "fa96c96a-d885-418f-9827-34c886ba2802",
- "link": "https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios",
- "service": "SAP",
+ "checklist": "Identity Review Checklist",
+ "guid": "e7a8dd4a-30e3-47c3-b297-11b2362ceee0",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
"severity": "中等",
- "text": "若要優化 SAP 應用程式的網路延遲,請考慮使用 Azure 鄰近放置組。",
- "training": "https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups",
- "waf": "性能"
+ "text": "不要複製!複製可能會產生目錄同步問題",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "18c8b61c-855a-4405-b6ed-266455e4f4ce",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "高",
- "text": "根本不支援在本地和 Azure 之間運行 SAP Application Server 層和 DBMS 層拆分。這兩個層都需要完全駐留在本地或 Azure 中。",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "性能"
+ "checklist": "Identity Review Checklist",
+ "guid": "79b598de-fc59-472c-b4cd-21b078036f5e",
+ "link": "https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/",
+ "service": "Windows AD",
+ "severity": "中等",
+ "text": "對多區域具有主動-主動",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "b65c878b-4b14-4f4e-92d8-d873936493f2",
- "link": "https://me.sap.com/notes/2015553",
- "service": "SAP",
- "severity": "高",
- "text": "不建議將資料庫管理系統 (DBMS) 和 SAP 系統的應用程式層託管在不同的 VNet 中,並將它們與 VNet 對等互連連接,因為層之間的過多網路流量可能會產生大量成本。建議使用 Azure 虛擬網路中的子網來分隔 SAP 應用程式層和 DBMS 層。",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity",
- "waf": "成本"
+ "checklist": "Identity Review Checklist",
+ "guid": "6b4bfd3d-5035-447c-8447-ec66128a71f0",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "中等",
+ "text": "將 Azure AD 域服務標記添加到其他區域和位置",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "402a9846-d515-4061-aff8-cd30088693fa",
- "link": "https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel",
- "service": "SAP",
- "severity": "高",
- "text": "如果將負載均衡器與Linux客戶機作業系統配合使用,請檢查Linux網路參數 net.ipv4.tcp_timestamps是否設置為0。",
- "training": "https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations",
- "waf": "性能"
+ "checklist": "Identity Review Checklist",
+ "guid": "f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4",
+ "link": "https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill",
+ "service": "Entra",
+ "severity": "中等",
+ "text": "將副本集用於DR",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "87585797-5551-4d53-bb7d-a94ee415734d",
- "link": "https://learn.microsoft.com/azure/sap/workloads/rise-integration",
- "service": "SAP",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "6ad48408-ee72-4734-a476-ba28fdcf590c",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot",
+ "service": "Bot service",
"severity": "中等",
- "text": "對於 SAP RISE/ECS 部署,虛擬對等互連是與客戶現有 Azure 環境建立連接的首選方式。SAP vnet 和客戶 vnet 都受網路安全組 (NSG) 保護,從而通過 VNet 對等互連在 SAP 和資料庫埠上進行通信",
- "waf": "安全"
+ "text": "遵循 Azure 機器人服務中的可靠性支持建議",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "ff5136bd-dcf1-4d2b-ae52-39333efdf45a",
- "link": "https://learn.microsoft.com/azure/backup/sap-hana-database-about",
- "service": "SAP",
- "severity": "高",
- "text": "查看 Azure VM 的 SAP HANA 資料庫備份。",
- "waf": "成本"
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "e65de8e1-3f9c-4cbd-9682-66abca264f9a",
+ "link": "https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization",
+ "service": "Bot service",
+ "severity": "中等",
+ "text": "部署具有本地數據駐留和區域合規性的機器人",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "cafde29d-a0af-4bcd-87c0-0f299d63f0e8",
- "link": "https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot",
- "service": "SAP",
+ "arm-service": "Microsoft.BotService/botServices",
+ "checklist": "Azure Bot Service",
+ "guid": "19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae",
+ "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography",
+ "service": "Bot service",
"severity": "中等",
- "text": "查看用於 SAP 的 Site Recovery 內置監視。",
- "waf": "成本"
+ "text": "Azure 機器人服務在全域和區域服務的主動-主動模式下運行。發生中斷時,無需檢測錯誤或管理服務。Azure 機器人服務在多區域地理體系結構中自動執行自動故障轉移和自動恢復。對於歐盟機器人區域服務,Azure 機器人服務在歐洲境內提供兩個完整區域,並提供主動/主動複製,以確保冗餘。對於全球機器人服務,所有可用的區域/地理位置都可以作為全球足跡。",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "82d7b8de-d3f1-44a0-830b-38e200e82acf",
- "link": "https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US",
- "service": "SAP",
- "severity": "高",
- "text": "查看監視 SAP HANA 系統環境指南。",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d7941d4a-7b6f-458f-8714-2f8f8c059ad4",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "在全域級別實施錯誤處理策略",
"waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "c823873a-2bec-4c2a-b684-a1ce8ae80efd",
- "link": "https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0b0c0765-ff37-4369-90bd-3eb23ce71b08",
+ "link": "https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order",
+ "service": "APIM",
"severity": "中等",
- "text": "查看 Azure Linux VM 中的 Oracle 資料庫備份策略。",
+ "text": "確保所有 API 策略都包含一個元素。",
"waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "2943b6d8-1d31-4e19-ade7-78e6b26d1962",
- "link": "https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a5c45b03-93b6-42fe-b16b-8fccb6a79902",
+ "link": "https://learn.microsoft.com/azure/api-management/policy-fragments",
+ "service": "APIM",
"severity": "中等",
- "text": "查看 Azure Blob 儲存與 SQL Server 2016 的配合。",
+ "text": "使用策略片段可避免在多個 API 中重複相同的策略定義",
"waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "b82e650f-676d-417d-994d-fc33ca54ec14",
- "link": "https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c3818a95-6ff3-4474-88dc-e809b46dad6a",
+ "link": "https://learn.microsoft.com/azure/api-management/monetization-support",
+ "service": "APIM",
"severity": "中等",
- "text": "查看 Azure VM 自動備份 v2 的使用方式。",
+ "text": "如果您計劃通過 API 獲利,請查看“獲利支援”一文,瞭解最佳做法",
"waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "347c2dcc-e6eb-4b04-80c5-628b171aa62d",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "a7d0840a-c8c4-4e83-adec-5ca578eb4049",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs",
+ "service": "APIM",
"severity": "高",
- "text": "使用進階磁碟時開啟M系列的寫入加速器(V1)",
+ "text": "啟用診斷設置以將日誌導出到 Azure Monitor",
"waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "b96512cf-996f-4b17-b9b8-6b16db1a2a94",
- "link": "https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8691fa38-45ed-4299-a247-fecd98d35deb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights",
+ "service": "APIM",
"severity": "中等",
- "text": "測試可用性區域延遲。",
- "waf": "性能"
+ "text": "啟用 Application Insights 以獲取更詳細的遙測數據",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fd7ffd4-da11-49f6-a374-8d03e94c511d",
- "link": "https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html",
- "service": "SAP",
- "severity": "中等",
- "text": "為所有 SAP 元件啟動 SAP EarlyWatch Alert。",
- "training": "https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html",
- "waf": "性能"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "55fd27bb-76ac-4a91-bc37-049e885be6b7",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor",
+ "service": "APIM",
+ "severity": "高",
+ "text": "針對最關鍵的指標配置警報",
+ "waf": "操作"
+ },
+ {
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "39460bdb-156f-4dc2-a87f-1e8c11ab0998",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault",
+ "service": "APIM",
+ "severity": "高",
+ "text": "確保自定義 SSL 證書儲存在 Azure Key Vault 中,以便可以安全地訪問和更新它們",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "b9b140cf-413a-483d-aad2-8802c4e3c017",
- "link": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456",
- "service": "SAP",
- "severity": "中等",
- "text": "使用 SAP ABAPMeter 報表 /SSA/CAT 查看 SAP 應用程式伺服器到資料庫伺服器的延遲。",
- "training": "https://me.sap.com/notes/0002879613",
- "waf": "性能"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "e9217997-5f6c-479d-8576-8f2adf706ec8",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access",
+ "service": "APIM",
+ "severity": "高",
+ "text": "使用 Azure AD 保護對 API(數據平面)的傳入請求",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "62fbf0f8-51db-49e1-a961-bb5df7a35f80",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5e5f64ba-c90e-480e-8888-398d96cf0bfb",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-aad",
+ "service": "APIM",
"severity": "中等",
- "text": "查看使用 CCMS 的 SQL Server 性能監視。",
- "waf": "性能"
+ "text": "使用 Microsoft Entra ID 在開發人員門戶中對用戶進行身份驗證",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "35709da7-fc7d-4efe-bb20-2e91547b7390",
- "link": "https://me.sap.com/notes/500235",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8e574ce-280f-49c8-b2ef-68279b081cf3",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups",
+ "service": "APIM",
"severity": "中等",
- "text": "測試 SAP 應用程式層 VM 和 DBMS VM (NIPING) 之間的網路延遲。",
- "training": "https://me.sap.com/notes/1100926/E",
- "waf": "性能"
+ "text": "創建適當的組來控制產品的可見性",
+ "waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43",
- "link": "https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "06862505-2d9a-4874-9491-2837b00a3475",
+ "link": "https://learn.microsoft.com/azure/api-management/backends",
+ "service": "APIM",
"severity": "中等",
- "text": "查看 SAP HANA Studio 警報。",
- "waf": "性能"
+ "text": "使用後端功能消除冗餘 API 後端配置",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "f1a92ab5-9509-4b57-86ff-b0ade361b694",
- "link": "https://me.sap.com/notes/1969700",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "03b125d5-b69b-4739-b7fd-84b86da4933e",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal",
+ "service": "APIM",
"severity": "中等",
- "text": "使用 HANA_Configuration_Minichecks 執行 SAP HANA 執行狀況檢查。",
- "waf": "性能"
+ "text": "使用命名值存儲可在策略中使用的通用值",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "18dffcf3-248c-4039-a67c-dec8e3a5f804",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "beae759e-4ddb-4326-bf26-47f87d3454b6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region",
+ "service": "APIM",
"severity": "中等",
- "text": "如果在 Azure、本地或其他雲環境中運行 Windows 和 Linux VM,則可以使用 Azure 自動化中的更新管理中心來管理作業系統更新,包括安全修補程式。",
- "training": "https://learn.microsoft.com/azure/automation/update-management/overview",
- "waf": "安全"
+ "text": "對於DR,利用高級層,跨兩個或多個區域擴展部署,實現99.99%的SLA",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "08951710-79a2-492a-adbc-06d7a401545b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "9c8d1664-dd9a-49d4-bd83-950af0af4044",
+ "link": "https://learn.microsoft.com/azure/api-management/high-availability",
+ "service": "APIM",
"severity": "中等",
- "text": "定期查看 SAP 安全 OSS 說明,因為 SAP 會發佈高度關鍵的安全補丁或熱修復程式,需要立即採取行動來保護 SAP 系統。",
- "training": "https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html",
- "waf": "安全"
+ "text": "在兩個或多個可用區中部署至少一台設備,SLA 提高 99.99%",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "1b8b394e-ae64-4a74-8933-357b523ea0a0",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "低",
- "text": "對於 SQL Server 上的 SAP,可以禁用 SQL Server 系統管理員帳戶,因為 SQL Server 上的 SAP 系統不使用該帳戶。在禁用原始系統管理員帳戶之前,請確保具有系統管理員許可權的其他使用者可以訪問伺服器。",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8d2db6e8-85c6-4118-a52c-ae76a4f27934",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability",
+ "service": "APIM",
+ "severity": "高",
+ "text": "確保有一個自動備份例程",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "5a76a033-ced9-4eef-9a43-5e4f96634c8e",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "service": "SAP",
- "severity": "高",
- "text": "禁用xp_cmdshell。SQL Server 功能xp_cmdshell啟用 SQL Server 內部作業系統命令行介面。這是安全審計中的潛在風險。",
- "training": "https://me.sap.com/notes/3019299/E",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "43e60b94-7bca-43a2-aadf-efb04d63a485",
+ "link": "https://learn.microsoft.com/azure/api-management/retry-policy",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "使用策略添加故障轉移後端 URL 和緩存,以減少失敗的調用。",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "cf65de8e-1309-4ccc-b579-266bcca275fa",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "高",
- "text": "加密 Azure 上的 SAP HANA 資料庫伺服器使用 SAP HANA 本機加密技術。此外,如果在 Azure 上使用 SQL Server,請使用透明數據加密 (TDE) 來保護數據和日誌檔,並確保備份也已加密。",
- "training": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "8210699f-8d43-45c2-8f19-57e54134bd8f",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs",
+ "service": "APIM",
+ "severity": "低",
+ "text": "如果需要以高性能級別進行日誌記錄,請考慮事件中心策略",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "a1abfe9d-55d0-44c3-a491-9cb1b3d1325a",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-service-encryption",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "121bfc39-fa7b-4096-b93b-ab56c1bc0bed",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling",
+ "service": "APIM",
"severity": "中等",
- "text": "為所有 Azure 資源管理器和經典記憶體啟用了 Azure 儲存加密,並且無法禁用。由於預設情況下數據是加密的,因此無需修改代碼或應用程式即可使用 Azure 儲存加密。",
- "training": "https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations",
- "waf": "安全"
+ "text": "應用限制策略來控制每秒的請求數",
+ "training": "https://learn.microsoft.com/training/modules/protect-apis-on-api-management/",
+ "waf": "性能"
},
{
- "checklist": "SAP Checklist",
- "guid": "ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592",
- "link": "https://learn.microsoft.com/azure/key-vault/general/overview",
- "service": "SAP",
- "severity": "高",
- "text": "使用 Azure Key Vault 儲存機密和憑據",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "bb5f356b-3daf-47a2-a9ee-867a8100bbd5",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "配置自動縮放以在負載增加時橫向擴展實例數",
+ "waf": "性能"
},
{
- "checklist": "SAP Checklist",
- "guid": "829e2edb-2173-4676-aff6-691b4935ada4",
- "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "84b94abb-59b6-4b9d-8587-3413669468e8",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway",
+ "service": "APIM",
"severity": "中等",
- "text": "建議在成功部署后鎖定 Azure 資源,以防止未經授權的更改。還可以使用自定義的 Azure 策略(自定義角色)在每個訂閱的基礎上強制實施 LOCK 約束和規則。",
- "training": "https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations",
- "waf": "安全"
+ "text": "在 Azure 沒有靠近後端 API 的區域的地方部署自承載閘道。",
+ "waf": "性能"
},
{
- "checklist": "SAP Checklist",
- "guid": "2223ece8-1b12-4318-8a54-17415833fb4a",
- "link": "https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1fe8db45-a017-4888-8c4d-4422583cfae0",
+ "link": "https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale",
+ "service": "APIM",
"severity": "中等",
- "text": "預配啟用軟刪除和清除策略的 Azure Key Vault,以允許對已刪除物件進行保留保護。",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
- "waf": "安全"
+ "text": "將高級層用於生產工作負載。",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "e3c2df74-3165-4c3a-abe0-5bbe209d490d",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy",
- "service": "SAP",
- "severity": "高",
- "text": "根據現有要求、法規和合規性控制(內部/外部) - 確定所需的 Azure 策略和 Azure RBAC 角色",
- "training": "https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "1b8d68a4-66cd-44d5-ba94-3ee94440e8d6",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "在多區域模型中,使用策略根據可用性或延遲將請求路由到區域後端。",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "a4777842-4d11-4678-9d2f-a56c56ad4840",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "46f07d33-ef9a-44e8-8f98-67c097c5d8cd",
+ "link": "https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits",
+ "service": "APIM",
"severity": "高",
- "text": "在 SAP 環境中啟用 Microsoft Defender for Endpoint 時,建議排除 DBMS 伺服器上的數據和日誌檔,而不是面向所有伺服器。排除目標檔時,請遵循 DBMS 供應商的建議。",
- "training": "https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268",
- "waf": "安全"
+ "text": "注意APIM的局限性",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "8fe72734-c486-4ba2-a0dc-0591cf65de8e",
- "link": "https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "10f58602-f0f9-4d77-972a-956f6e0f2600",
+ "link": "https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview",
+ "service": "APIM",
"severity": "高",
- "text": "委派具有 Microsoft Defender for Cloud 實時訪問許可權的 SAP 管理員自定義角色。",
- "training": "https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "waf": "安全"
+ "text": "確保自承載閘道部署具有復原能力。",
+ "waf": "可靠性"
},
{
- "checklist": "SAP Checklist",
- "guid": "1309cccd-5792-466b-aca2-75faa1abfe9d",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "低",
- "text": "通過將第三方安全產品與 DIAG (SAP GUI)、RFC 和 SPNEGO for HTTPS 的安全網路通信 (SNC) 集成,對傳輸中的數據進行加密",
- "training": "https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "7519e385-a88b-4d34-966b-6269d686e890",
+ "link": "https://learn.microsoft.com/azure/api-management/front-door-api-management",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "在APIM前面使用 Azure Front Door 進行多區域部署",
+ "waf": "性能"
},
{
- "checklist": "SAP Checklist",
- "guid": "eeaa3592-829e-42ed-a217-3676aff6691b",
- "link": "https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "cd45c90e-7690-4753-930b-bf290c69c074",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration",
+ "service": "APIM",
"severity": "中等",
- "text": "對於主體加密功能,預設使用 Microsoft 管理的金鑰,並在需要時使用客戶管理的密鑰。",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "text": "在虛擬網络 (VNet) 中部署服務Deploy the service within a Virtual Network (VNet)",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "4935ada4-2223-4ece-a1b1-23181a541741",
- "link": "https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices",
- "service": "SAP",
- "severity": "高",
- "text": "對每個應用程式、每個環境、每個區域使用 Azure Key Vault。",
- "training": "https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "02661582-b3d1-48d1-9d7b-c6a918a0ca33",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "將網路安全組 (NSG) 部署到子網,以限制或監視進出APIM的流量。",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "abc9634d-c44d-41e9-a530-e8444e16aa3c",
- "link": "https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios",
- "service": "SAP",
- "severity": "高",
- "text": "若要控制和管理非 HANA Windows 和非 Windows 作業系統的磁碟加密密鑰和機密,請使用 Azure Key Vault。Azure Key Vault 不支援 SAP HANA,因此必須使用 SAP ABAP 或 SSH 密鑰等替代方法。",
- "training": "https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "67437a28-2721-4a2c-becd-caa54c8237a5",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "部署專用終結點以在未將APIM部署到 VNet 時篩選傳入流量。",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "209d490d-a477-4784-84d1-16785d2fa56c",
- "link": "https://learn.microsoft.com/azure/role-based-access-control/built-in-roles",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "d698adbd-3288-44cb-b10a-9b572da395ae",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access",
+ "service": "APIM",
"severity": "高",
- "text": "為 Azure 上的 SAP 分支訂閱自定義基於角色的訪問控制 (RBAC) 角色,以避免與網路相關的意外更改",
- "training": "https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations",
+ "text": "禁用公網訪問",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "56ad4840-8fe7-4273-9c48-6ba280dc0591",
- "link": "https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/",
- "service": "SAP",
- "severity": "高",
- "text": "將 DMZ 和 NVA 與 SAP 資產的其餘部分隔離,配置 Azure 專用連結,並安全地管理和控制 Azure 上的 SAP 資源",
- "training": "https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "0674d750-0c6f-4ac0-8717-ceec04d0bdbd",
+ "link": "https://learn.microsoft.com/azure/api-management/automation-manage-api-management",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "使用 PowerShell 自動化腳本簡化管理",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "e124ba34-df68-45ed-bce9-bd3bb0cdb3b5",
- "link": "https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations",
- "service": "SAP",
- "severity": "低",
- "text": "請考慮在 Azure 上使用 Microsoft 反惡意軟體來保護虛擬機免受惡意檔、廣告軟體和其他威脅的侵害。",
- "training": "https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "c385bfcd-49fd-4786-81ba-cedbb4c57345",
+ "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "通過基礎架構即代碼配置APIM。查看 Cloud Adaption Framework 中的 DevOps 最佳實踐 APIM 登陸區域加速器",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "5eb2ec14-eeaa-4359-8829-e2edb2173676",
- "link": "https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide",
- "service": "SAP",
- "severity": "低",
- "text": "若要獲得更強大的保護,請考慮使用 Microsoft Defender for Endpoint。",
- "training": "https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "6c3a27c0-197f-426c-9ffa-86fed51d9ab6",
+ "link": "https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "促進 Visual Studio Code APIM 擴展的使用,以加快 API 開發速度",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "87a924c4-25c2-419f-a2f0-96c7c4fe4525",
- "link": "https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape",
- "service": "SAP",
- "severity": "高",
- "text": "通過中心虛擬網路傳遞所有流量,將 SAP 應用程式和資料庫伺服器與 Internet 或本地網路隔離開來,該中心虛擬網路通過虛擬網路對等互連連接到分支網路。對等互連虛擬網路保證 Azure 上的 SAP 解決方案與公共 Internet 隔離。",
- "training": "https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations",
- "waf": "安全"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "354f1c03-8112-4965-85ad-c0074bddf231",
+ "link": "https://learn.microsoft.com/azure/api-management/devops-api-development-templates",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "在工作流中實施DevOps和 CI/CD",
+ "waf": "操作"
},
{
- "checklist": "SAP Checklist",
- "guid": "491ca1c4-3d40-42c0-9d85-b8933999590b",
- "link": "https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance",
- "service": "SAP",
- "severity": "低",
- "text": "對於面向 Internet 的應用程式(如 SAP Fiori),請確保根據應用程式要求分配負載,同時保持安全級別。對於第 7 層安全性,可以使用 Azure 市場中提供的第三方 Web 應用程式防火牆 (WAF)。",
- "training": "https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "b6439493-426a-45f3-9697-cf65baee208d",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "使用用戶端證書身份驗證保護 API",
"waf": "安全"
},
{
- "checklist": "SAP Checklist",
- "guid": "9fc945b9-0527-47af-8200-9d652fe02fcc",
- "link": "https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions",
- "service": "SAP",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2a67d143-1033-4c0a-8732-680896478f08",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates",
+ "service": "APIM",
"severity": "中等",
- "text": "若要在用於 SAP 解決方案的 Azure Monitor 中啟用安全通信,可以選擇使用根證書或伺服器證書。我們強烈建議您使用根證書。",
- "training": "https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations",
+ "text": "使用用戶端證書身份驗證保護後端服務",
"waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "4238f409-2ea0-43be-a06b-2a993c98aa7b",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "severity": "高",
- "text": "根據您的業務和 SLO 要求選擇正確的功能託管計劃",
- "waf": "可靠性"
- },
- {
- "checklist": "Azure Function Review",
- "guid": "a9808100-d640-4f77-ac56-1ec0600f6752",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans",
- "service": "Azure Functions",
- "severity": "高",
- "text": "利用區域適用的可用區(不適用於消耗層)",
- "waf": "可靠性"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "074435f5-4a46-41ac-b521-d6114cb5d845",
+ "link": "https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats",
+ "service": "APIM",
+ "severity": "中等",
+ "text": "查看“緩解 OWASP API 安全前 10 大威脅的建議”一文,並查看適用於您的 API 的內容",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "5969d03e-eacf-4042-b127-73c55e3575fa",
- "link": "https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "5507c4b8-a7f8-41d6-9661-418c987100c9",
+ "link": "https://learn.microsoft.com/azure/api-management/authorizations-overview",
+ "service": "APIM",
"severity": "中等",
- "text": "考慮為關鍵工作負載制定跨區域災難恢復策略",
- "waf": "可靠性"
+ "text": "使用授權功能簡化後端 API 的 OAuth 2.0 令牌管理",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "47a0aae0-d8a0-43b1-9791-e934dee3754c",
- "link": "https://learn.microsoft.com/en-us/azure/app-service/environment/intro",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "2deee033-b906-4bc2-9f26-c8d3699fe091",
+ "link": "https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers",
+ "service": "APIM",
"severity": "高",
- "text": "如果部署到獨立環境,請使用或遷移到應用服務環境 (ASE) v3",
- "waf": "可靠性"
+ "text": "加密傳輸中的資訊時,請使用最新的 TLS 版本。盡可能禁用過時和不必要的協議和密碼。",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "17232891-f89f-4eaa-90f1-3b34bf798ed5",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "f8af3d94-1d2b-4070-846f-849197524258",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets",
+ "service": "APIM",
"severity": "高",
- "text": "確保為應用服務計劃上運行的所有函數應用啟用“始終開啟”",
- "waf": "可靠性"
+ "text": "確保機密(命名值)存儲在 Azure Key Vault 中,以便可以安全地訪問和更新它們",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "40a325c2-7c0e-49e6-86d8-c273b4dc21ba",
- "link": "https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts",
- "service": "Azure Functions",
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "791abd8b-7706-4e31-9569-afefde724be3",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities",
+ "service": "APIM",
"severity": "中等",
- "text": "將函數應用與其自己的存儲帳戶配對。盡量不要重用函數應用的存儲帳戶,除非它們緊密耦合",
- "waf": "可靠性"
+ "text": "盡可能使用託管標識向其他 Azure 資源進行身份驗證",
+ "waf": "安全"
},
{
- "checklist": "Azure Function Review",
- "guid": "bb42650c-257d-4cb0-822a-131138b8e6f0",
- "link": "https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/",
- "service": "Azure Functions",
- "severity": "中等",
- "text": "利用 Azure DevOps 或 GitHub 簡化 CI/CD 並保護函數應用代碼",
- "waf": "操作"
+ "arm-service": "Microsoft.ApiManagement/service",
+ "checklist": "Azure API Management Review",
+ "guid": "220c4ca6-6688-476b-b2b5-425a78e6fb87",
+ "link": "https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall",
+ "service": "APIM",
+ "severity": "高",
+ "text": "使用 APIM 前面部署應用程式閘道來使用 Web 應用程式防火牆 (WAF)",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "6d8e32a8-3892-479d-a40b-10f6b4f6f298",
- "link": "https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies",
- "service": "Spring Apps",
- "severity": "中等",
- "text": "Azure Spring Apps 允許對每個應用進行兩次部署,其中只有一個部署接收生產流量。您可以使用藍綠部署策略實現零停機時間。藍綠部署僅在標準層和企業層中可用。可以使用 CI/CD 和 ADO/GitHub 操作自動執行部署",
- "waf": "可靠性"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure 服務總線高級版提供靜態數據加密。如果您使用自己的金鑰,則數據仍使用 Microsoft 管理的金鑰進行加密,但此外,Microsoft 管理的金鑰將使用客戶管理的密鑰進行加密。",
+ "guid": "87af4a79-1f89-439b-ba47-768e14c11567",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key",
+ "service": "Service Bus",
+ "severity": "低",
+ "text": "需要時,在靜態數據加密中使用客戶管理的金鑰選項",
+ "training": "https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "fbcb40ac-9480-4a6d-bcf4-8081252a6716",
- "link": "https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "用戶端應用程式與 Azure 服務總線命名空間之間的通信使用傳輸層安全性 (TLS) 進行加密。Azure 服務總線命名空間允許用戶端使用 TLS 1.0 及更高版本發送和接收數據。若要強制實施更嚴格的安全措施,可以將服務總線命名空間配置為要求用戶端使用較新版本的 TLS 發送和接收數據。",
+ "guid": "5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version",
+ "service": "Service Bus",
"severity": "中等",
- "text": "可以在多個區域中為應用程式創建 Azure Spring Apps 實例,並且流量管理器/Front Door 可以路由流量。",
- "waf": "可靠性"
+ "text": "對請求強制實施最低要求的傳輸層安全性 (TLS) 版本",
+ "training": "https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef",
- "link": "https://learn.microsoft.com/azure/reliability/reliability-spring-apps",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "創建服務總線命名空間時,會自動為命名空間創建名為 RootManageSharedAccessKey 的 SAS 規則。此策略具有整個命名空間的 Manage 許可權。建議您將此規則視為管理根帳戶,不要在應用程式中使用它。 建議使用 AAD 作為 RBAC 的身份驗證提供程式。",
+ "guid": "8bcbf59b-ce65-4de8-a03f-97879468d66a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies",
+ "service": "Service Bus",
"severity": "中等",
- "text": "在支持的區域中,Azure Spring Apps 可以部署為區域冗餘,這意味著實例會自動分佈在可用性區域之間。此功能僅在標準層和企業層中可用。",
- "waf": "可靠性"
+ "text": "避免在不需要時使用 root 帳戶",
+ "training": "https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "ffc735ad-fbb1-4802-b43f-ad6387c4c066",
- "link": "https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "在 Azure 應用服務應用程式內或在啟用了 Azure 資源支援的託管實體的虛擬機中運行的服務總線用戶端應用不需要處理 SAS 規則和密鑰或任何其他存取權杖。用戶端應用程式只需要 Service Bus Messaging 命名空間的終結點位址。",
+ "guid": "786d60f9-6c96-4ad8-a55d-04c2b39c986b",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity",
+ "service": "Service Bus",
"severity": "中等",
- "text": "對應用使用1個以上的應用實例",
- "waf": "可靠性"
+ "text": "如果可能,應用程式應使用託管標識向 Azure 服務總線進行身份驗證。如果沒有,請考慮在 Azure Key Vault 或等效服務中使用存儲憑據(SAS、服務主體憑據)",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "7504c230-6035-4183-95a5-85762acc6075",
- "link": "https://learn.microsoft.com/azure/spring-apps/diagnostic-services",
- "service": "Spring Apps",
- "severity": "中等",
- "text": "使用日誌、指標和跟蹤監視 Azure Spring Apps。將 ASA 與應用程式見解集成,並跟蹤故障並創建工作簿。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "創建許可權時,請對用戶端對 Azure 服務總線的訪問提供精細控制。Azure 服務總線中的許可權可以而且應該限定為單個資源級別,例如佇列、主題或訂閱。",
+ "guid": "f615658d-e558-4f93-9249-b831112dbd7e",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus",
+ "service": "Service Bus",
+ "severity": "高",
+ "text": "使用最低許可權數據平面 RBAC",
+ "training": "https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "Azure 服務總線資源日誌包括操作日誌、虛擬網路和IP篩選日誌。運行時審核日誌捕獲服務總線中各種數據平面訪問操作(例如發送或接收消息)的聚合診斷資訊。",
+ "guid": "af12e7f9-43f6-4304-922d-929c2b1cd622",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference",
+ "service": "Service Bus",
"severity": "中等",
- "text": "在 Spring Cloud Gateway 中設置自動縮放",
- "waf": "可靠性"
+ "text": "啟用記錄以進行安全調查。使用 Azure Monitor 追蹤資源紀錄和執行時審核紀錄(目前僅在進階層中可用 )",
+ "training": "https://learn.microsoft.com/learn/paths/manage-identity-and-access/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "97411607-b6fd-4335-99d1-9885faf4e392",
- "link": "https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale",
- "service": "Spring Apps",
- "severity": "低",
- "text": "為具有標準使用量和專用計劃的應用啟用自動縮放。",
- "waf": "可靠性"
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "默認情況下,Azure 服務總線具有公共IP位址,並且可通過Internet訪問。專用終結點允許虛擬網路與 Azure 服務總線之間的流量遍歷 Microsoft 主幹網路。除此之外,如果未使用公有終端節點,則應禁用這些終端節點。",
+ "guid": "9ae669ca-48e4-4a85-b222-3ece8bb12307",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/private-link-service",
+ "service": "Service Bus",
+ "severity": "中等",
+ "text": "請考慮使用專用終結點訪問 Azure 服務總線,並在適用時禁用公用網路訪問。",
+ "training": "https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/",
+ "waf": "安全"
},
{
- "checklist": "Azure Spring Apps Review",
- "guid": "dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3",
- "link": "https://learn.microsoft.com/azure/spring-apps/overview",
- "service": "Spring Apps",
+ "arm-service": "Microsoft.ServiceBus/namespaces",
+ "checklist": "Service Bus Review Checklist",
+ "description": "使用IP防火牆,您可以將公有終端節點進一步限製為僅一組 IPv4 位址或 CIDR(無類域間路由)表示法的 IPv4 位址範圍。",
+ "guid": "ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a",
+ "link": "https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering",
+ "service": "Service Bus",
"severity": "中等",
- "text": "使用企業計劃為關鍵任務應用提供 Spring Boot 的商業支援。使用其他層,您可以獲得 OSS 支援。",
- "waf": "可靠性"
+ "text": "請考慮僅允許從特定IP位址或範圍訪問 Azure 服務總線命名空間",
+ "training": "https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/",
+ "waf": "安全"
}
],
"metadata": {
"name": "WAF checklist",
- "timestamp": "June 24, 2024"
+ "timestamp": "October 02, 2024"
},
"severities": [
{
@@ -7839,7 +9999,7 @@
"name": "未驗證"
},
{
- "description": "有一個與此檢查關聯的操作項",
+ "description": "有一個與此檢查關聯的措施項",
"name": "打開"
},
{
@@ -7847,7 +10007,7 @@
"name": "實現"
},
{
- "description": "建議已理解,但當前需求不需要",
+ "description": "建議已理解,但當前要求不需要",
"name": "不需要"
},
{
diff --git a/scripts/cl.py b/scripts/cl.py
new file mode 100644
index 000000000..69e9a8232
--- /dev/null
+++ b/scripts/cl.py
@@ -0,0 +1,768 @@
+#################################################################################
+#
+# This is the checklists CLI. It is a command-line interface that allows users to
+# perform various operations on checklists.
+#
+# Supported commands:
+# - analyze-v1: Analyze a checklist
+# - analyze-v2: Analyze a folder structure containing v2 recommendations
+# - list-recos: List recommendations from a folder structure containing v2 recommendations
+# - show-reco: Show a specific recommendation
+# - v1tov2: Convert a v1 checklist to v2
+# - run-arg: Run Azure Resource Graph queries stored in v2 recommendations
+#
+# Usage examples for v1-to-v2 conversion (use the --max-items parameter to limit the number of items to convert):
+# python3 ./scripts/cl.py v1tov2 --input-file ./checklists/aks_checklist.en.json --service-dictionary ./scripts/service_dictionary.json --output-folder ./v2/recos --text-analytics-endpoint $text_endpoint --text-analytics-key $text_key --overwrite --source-type revcl --verbose
+# python3 ./scripts/cl.py v1tov2 --input-file ./checklists/alz_checklist.en.json --service-dictionary ./scripts/service_dictionary.json --output-folder ./v2/recos --output-format yaml --text-analytics-endpoint $text_endpoint --text-analytics-key $text_key --overwrite --source-type revcl --verbose
+# python3 ./scripts/cl.py v1tov2 --input-file ./checklists/waf_checklist.en.json --service-dictionary ./scripts/service_dictionary.json --output-folder ./v2/recos --output-format yaml --text-analytics-endpoint $text_endpoint --text-analytics-key $text_key --overwrite --source-type revcl --verbose
+# python3 ./scripts/cl.py v1tov2 --input-file ./checklists-ext/aprl_checklist.en.json --service-dictionary ./scripts/service_dictionary.json --output-folder ./v2/recos --text-analytics-endpoint $text_endpoint --text-analytics-key $text_key --overwrite --source-type aprl --verbose
+# python3 ./scripts/cl.py v1tov2 --input-file ./checklists-ext/wafsg_checklist.en.json --service-dictionary ./scripts/service_dictionary.json --output-folder ./v2/recos --text-analytics-endpoint $text_endpoint --text-analytics-key $text_key --overwrite --source-type wafsg --verbose
+#
+# Usage examples for v2 analysis:
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --format yaml
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --format yaml --show-sources
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --format yaml --show-sources --source-selector revcl
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --format yaml --delete-assistant
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --format yaml --show-resource-types
+#
+# Usage examples for specific reco inspection:
+# python3 ./scripts/cl.py show-reco --input-folder ./v2/recos --guid 1b1b1b1b-1b1b-1b1b-1b1b-1b1b1b1b1b1b
+# python3 ./scripts/cl.py show-reco --input-folder ./v2/recos --name revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService
+# python3 ./scripts/cl.py open-reco --input-folder ./v2/recos --guid 1b1b1b1b-1b1b-1b1b-1b1b-1b1b1b1b1b1b
+# python3 ./scripts/cl.py open-reco --input-folder ./v2/recos --name revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService
+#
+# Validate reco files
+# python3 ./scripts/cl.py validate-recos --input-folder ./v2/recos --schema ./v2/schema/recommendation.schema.json --verbose --max-items 10
+# python3 ./scripts/cl.py validate-recos --input-folder ./v2/recos --schema ./v2/schema/recommendation.schema.json --verbose --max-findings 1
+# python3 ./scripts/cl.py validate-recos --input-folder ./v2/recos --schema ./v2/schema/recommendation.schema.json --verbose
+#
+# Validate checklist files
+# python3 ./scripts/cl.py validate-checklists --input-folder ./v2/checklists --schema ./v2/schema/checklist.schema.json --verbose
+#
+# Disambiguate names
+# python3 ./scripts/cl.py disambiguate-names --input-folder ./v2/recos --verbose
+#
+# Usage examples for v2 reco listing:
+# python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --format yaml --label-selector '{"checklist": "alz"}' --show-labels
+# python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --format yaml --source-selector 'aprl'
+# python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --format yaml --with-arg
+# python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --verbose
+# python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --only-filenames
+#
+# Usage examples for renaming:
+# python3 ./scripts/cl.py rename-reco --input-folder ./v2/recos --guid 1b1b1b1b-1b1b-1b1b-1b1b-1b1b1b1b1b1b
+#
+# Usage examples for updating recos:
+# python3 ./scripts/cl.py update-recos --input-folder ./v2/recos --reviewed --verbose
+# python3 ./scripts/cl.py update-recos --input-folder ./v2/recos --default-severity 1 --verbose
+#
+# Create a v2 checklist file out of a v1 checklist file:
+# python3 ./scripts/cl.py checklist-to-v2 --checklist-file .\checklists\alz_checklist.en.json --output-file .\v2\checklists\alz.yaml --input-folder .\v2\recos --verbose
+#
+# Usage examples for analysis of checklist files:
+# Analyze a single checklist file:
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --verbose
+# python3 ./scripts/cl.py analyze-v2 --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --show-areas --verbose
+# python3 ./scripts/cl.py list-recos --input-folder ./v2/recos --checklist-file ./v2/checklists/alz.yaml --verbose
+#
+# Export v2 checklist to v1 JSON format:
+# python3 ./scripts/cl.py export-checklist --input-folder ./v2/recos --service-dictionary ./scripts/service_dictionary.json --checklist-file ./v2/checklists/alz.yaml --output-file ./v2/checklists/alz.json
+# python3 ./scripts/cl.py export-checklist --input-folder ./v2/recos --service-dictionary ./scripts/service_dictionary.json --checklist-file ./v2/checklists/app_delivery.yaml --output-file ./v2/checklists/app_delivery.json
+#
+# Appendix: importing latest rules from APRL and WAF service guides (maybe useful before using v1-to-v2):
+# python3 ./.github/actions/get_aprl/entrypoint.py './checklists-ext/aprl_checklist.en.json' 'true'
+# python3 ./.github/actions/get_service_guides/entrypoint.py 'Azure Kubernetes Service, Azure Firewall, Azure ExpressRoute, Azure Application Gateway, Azure Front Door, App Service Web Apps, Azure Blob Storage, Azure Cosmos DB, Azure Files, Azure Machine Learning, Azure OpenAI, Virtual Machines' './checklists-ext' 'true'
+# Last updated: July 2024
+#
+#################################################################################
+
+import json
+import yaml
+import argparse
+import sys
+import glob
+import os
+import jsonschema
+from modules import cl_analyze_v1
+from modules import cl_v1tov2
+from modules import cl_analyze_v2
+from modules import cl_arg
+from modules import cl_v2tov1
+
+# Get input arguments
+parser = argparse.ArgumentParser(description='Checklists CLI', prog='checklists')
+subparsers = parser.add_subparsers(dest='command', help='Command help')
+# Define common shared arguments
+base_subparser = argparse.ArgumentParser(add_help=False)
+base_subparser.add_argument('--verbose', dest='verbose', action='store_true',
+ default=False,
+ help='run in verbose mode (default: False)')
+# Create the 'analyze-v1' command
+analyze_parser = subparsers.add_parser('analyze-v1', help='Analyze a v1 checklist', parents=[base_subparser])
+analyze_parser.add_argument('--input-file', dest='analyze_input_file', metavar= 'INPUT_FILE', action='store',
+ help='name of the JSON file with the checklist to be analyzed')
+analyze_parser.add_argument('--compare-file', dest='analyze_compare_file', metavar='COMPARE_FILE', action='store',
+ help='you can optionally supply the name of the JSON file with a second checklist to be compared against the first one')
+analyze_parser.add_argument('--input-folder', dest='analyze_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='if no input file has been specified, input folder where the checklists to verify are stored')
+# Create the 'analyze-v2' command
+analyzev2_parser = subparsers.add_parser('analyze-v2', help='Analyze a folder structure containing v2 recos', parents=[base_subparser])
+analyzev2_parser.add_argument('--input-folder', dest='analyzev2_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='folder where the recommendations to verify are stored')
+analyzev2_parser.add_argument('--format', dest='analyzev2_format', metavar='FORMAT', action='store',
+ default='yaml',
+ help='format of the v2 checklist items (default: yaml)')
+analyzev2_parser.add_argument('--show-labels', dest='analyzev2_show_labels', action='store_true',
+ default=False,
+ help='show all labels and its number of items (default: False)')
+analyzev2_parser.add_argument('--show-services', dest='analyzev2_show_services', action='store_true',
+ default=False,
+ help='show all services and its number of items (default: False)')
+analyzev2_parser.add_argument('--show-waf', dest='analyzev2_show_waf', action='store_true',
+ default=False,
+ help='show all services and its number of items (default: False)')
+analyzev2_parser.add_argument('--show-sources', dest='analyzev2_show_sources', action='store_true',
+ default=False,
+ help='show all source types and its number of items (default: False)')
+analyzev2_parser.add_argument('--show-severities', dest='analyzev2_show_severities', action='store_true',
+ default=False,
+ help='show all severities and its number of items (default: False)')
+analyzev2_parser.add_argument('--show-resource-types', dest='analyzev2_show_resourceTypes', action='store_true',
+ default=False,
+ help='show all resource types and its number of items (default: False)')
+analyzev2_parser.add_argument('--show-areas', dest='analyzev2_show_areas', action='store_true',
+ default=False,
+ help='show areas and subareas and its number of items (default: False)')
+analyzev2_parser.add_argument('--label-selector', dest='analyzev2_labels', metavar='LABELS', action='store',
+ help='label selector for the items to analyze, for example {"mykey1": "myvalue1", "mykey2": "myvalue2"}')
+analyzev2_parser.add_argument('--service-selector', dest='analyzev2_services', metavar='SERVICES', action='store',
+ help='comma-separated services for the items to analyze, for example "AKS,firewall"')
+analyzev2_parser.add_argument('--waf-selector', dest='analyzev2_waf_pillars', metavar='WAF_PILLARS', action='store',
+ help='comma-separated WAF pillars for the items to analyze, for example "cost,reliability"')
+analyzev2_parser.add_argument('--source-selector', dest='analyzev2_sources', metavar='SOURCE', action='store',
+ help='comma-separated source types for the items to analyze, for example "aprl,internal,wafsg"')
+analyzev2_parser.add_argument('--checklist-file', dest='analyzev2_checklist_file', metavar='CHECKLIST_FILE', action='store',
+ help='YAML file with a checklist definition that can include label-selectors, service-selectors and WAF-selectors as well as other metadata')
+analyzev2_parser.add_argument('--delete-assistant', dest='analyzev2_delete_assistant', action='store_true',
+ default=False,
+ help='run delete assistant to delete duplicate recos (default: False)')
+# Create the 'list-recos' command
+getrecos_parser = subparsers.add_parser('list-recos', help='List recommendations from a folder structure containing v2 recos', parents=[base_subparser])
+getrecos_parser.add_argument('--input-folder', dest='getrecos_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='folder where the recommendations to verify are stored')
+getrecos_parser.add_argument('--format', dest='getrecos_format', metavar='FORMAT', action='store',
+ default='yaml',
+ help='format of the v2 checklist items (default: yaml)')
+getrecos_parser.add_argument('--label-selector', dest='getrecos_labels', metavar='LABELS', action='store',
+ help='label selector for the items to retrieve, for example {"mykey1": "myvalue1", "mykey2": "myvalue2"}')
+getrecos_parser.add_argument('--service-selector', dest='getrecos_services', metavar='SERVICES', action='store',
+ help='comma-separated services for the items to retrieve, for example "AKS,firewall"')
+getrecos_parser.add_argument('--waf-selector', dest='getrecos_waf_pillars', metavar='WAF_PILLARS', action='store',
+ help='comma-separated WAF pillars for the items to retrieve, for example "cost,reliability"')
+getrecos_parser.add_argument('--source-selector', dest='getrecos_sources', metavar='SOURCE', action='store',
+ help='comma-separated source types for the items to retrieve, for example "aprl,internal,wafsg"')
+getrecos_parser.add_argument('--show-labels', dest='getrecos_show_labels', action='store_true',
+ default=False, help='show labels (default: False)')
+getrecos_parser.add_argument('--show-arg', dest='getrecos_show_arg', action='store_true',
+ default=False, help='show Azure Resource Graph queries (default: False)')
+getrecos_parser.add_argument('--with-arg', dest='getrecos_arg', action='store_true',
+ default=False, help='only return queries with ARG queries (default: False)')
+getrecos_parser.add_argument('--checklist-file', dest='getrecos_checklist_file', metavar='CHECKLIST_FILE', action='store',
+ help='YAML file with a checklist definition that can include label-selectors, service-selectors and WAF-selectors as well as other metadata')
+getrecos_parser.add_argument('--only-filenames', dest='getrecos_only_filenames', action='store_true',
+ default=False, help='only show the reco filenames (default: False)')
+# Create the 'update-recos' command
+updaterecos_parser = subparsers.add_parser('update-recos', help='Update recommendations from a folder structure containing v2 recos', parents=[base_subparser])
+updaterecos_parser.add_argument('--input-folder', dest='updaterecos_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='folder where the recommendations to update are stored')
+updaterecos_parser.add_argument('--service-dictionary', dest='updaterecos_service_dictionary', metavar='SERVICE_DICTIONARY', action='store',
+ help='JSON file with dictionary to map services to standard names and to ARM services')
+updaterecos_parser.add_argument('--format', dest='updaterecos_format', metavar='FORMAT', action='store',
+ default='yaml',
+ help='format of the v2 checklist items (default: yaml)')
+updaterecos_parser.add_argument('--reviewed', dest='updaterecos_reviewed', action='store_true',
+ default=False, help='Set the reviewed field to the current date (default: False)')
+updaterecos_parser.add_argument('--default-severity', dest='updaterecos_default_severity', metavar='DEFAULT_SEVERITY', action='store',
+ default='yaml', type=int,
+ help='Set any missing severity to the default value (default: None)')
+# Create the 'validate-recos' command
+validaterecos_parser = subparsers.add_parser('validate-recos', help='Validate recommendations to the reco schema', parents=[base_subparser])
+validaterecos_parser.add_argument('--input-folder', dest='validaterecos_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='folder where the recommendations to update are stored')
+validaterecos_parser.add_argument('--schema', dest='validaterecos_schema_file', metavar='SCHEMA_FILE', action='store',
+ help='file with validation schema')
+validaterecos_parser.add_argument('--max-items', dest='validaterecos_max_items', metavar='MAX_ITEMS', action='store',
+ default=0, type=int,
+ help='Maximum number of items to validate, default is 0 (all items)')
+validaterecos_parser.add_argument('--max-findings', dest='validaterecos_max_findings', metavar='MAX_FINDINGS', action='store',
+ default=0, type=int,
+ help='Maximum number of non-compliances to find, default is 0 (all non-compliances)')
+# Create the 'validate-checklists' command
+validatechecklists_parser = subparsers.add_parser('validate-checklists', help='Validate checklists to the reco schema', parents=[base_subparser])
+validatechecklists_parser.add_argument('--input-folder', dest='validatechecklists_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='folder where the recommendations to update are stored')
+validatechecklists_parser.add_argument('--schema', dest='validatechecklists_schema_file', metavar='SCHEMA_FILE', action='store',
+ help='file with validation schema')
+validatechecklists_parser.add_argument('--max-items', dest='validatechecklists_max_items', metavar='MAX_ITEMS', action='store',
+ default=0, type=int,
+ help='Maximum number of items to validate, default is 0 (all items)')
+validatechecklists_parser.add_argument('--max-findings', dest='validatechecklists_max_findings', metavar='MAX_FINDINGS', action='store',
+ default=0, type=int,
+ help='Maximum number of non-compliances to find, default is 0 (all non-compliances)')
+# Create the 'show-reco' command
+showreco_parser = subparsers.add_parser('show-reco', help='Show a specific recommendation', parents=[base_subparser])
+showreco_parser.add_argument('--input-folder', dest='showreco_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the recommendations to show are stored')
+showreco_parser.add_argument('--guid', dest='showreco_guid', metavar='GUID', action='store',
+ help='GUID of the recommendation to show')
+showreco_parser.add_argument('--name', dest='showreco_name', metavar='NAME', action='store',
+ help='Name of the recommendation to show')
+# Create the 'rename-reco' command
+showreco_parser = subparsers.add_parser('rename-reco', help='Show a specific recommendation', parents=[base_subparser])
+showreco_parser.add_argument('--input-folder', dest='renamereco_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the recommendations to rename are stored')
+showreco_parser.add_argument('--guid', dest='renamereco_guid', metavar='GUID', action='store',
+ help='GUID of the recommendation to rename')
+showreco_parser.add_argument('--new-name', dest='renamereco_newname', metavar='NEW_NAME', action='store',
+ help='new name for the recommendation. If not specified, you need to specify text analytics endpoint and key')
+showreco_parser.add_argument('--text-analytics-endpoint', dest='renamereco_endpoint', metavar='ENDPOINT', action='store',
+ help='Text analytics endpoint to use for renaming')
+showreco_parser.add_argument('--text-analytics-key', dest='renamereco_key', metavar='KEY', action='store',
+ help='Text analytics key to use for renaming')
+# Create the 'open-reco' command
+openreco_parser = subparsers.add_parser('open-reco', help='Open with a text editor a specific recommendation', parents=[base_subparser])
+openreco_parser.add_argument('--input-folder', dest='openreco_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the recommendations to verify are stored')
+openreco_parser.add_argument('--guid', dest='openreco_guid', metavar='GUID', action='store',
+ help='GUID of the recommendation to open')
+openreco_parser.add_argument('--name', dest='openreco_name', metavar='NAME', action='store',
+ help='NAME of the recommendation to open')
+openreco_parser.add_argument('--text-editor', dest='openreco_editor', metavar='GUID', action='store',
+ help='Text editor to use, for example "code" or "notepad"')
+# Create the 'v1tov2' command
+v12_parser = subparsers.add_parser('v1tov2', help='Convert v1 to v2', parents=[base_subparser])
+v12_parser.add_argument('--input-file', dest='v12_input_file', metavar='INPUT_FILE', action='store',
+ help='name of the JSON file with the v1 checklist to be converted to v2'),
+v12_parser.add_argument('--service-dictionary', dest='v12_service_dictionary', metavar='SERVICE_DICTIONARY', action='store',
+ help='JSON file with dictionary to map services to standard names and to ARM services')
+v12_parser.add_argument('--output-folder', dest='v12_output_folder', metavar='OUTPUT_FOLDER', action='store',
+ help='output folder where the v2 checklist items will be stored')
+v12_parser.add_argument('--output-format', dest='v12_output_format', metavar='OUTPUT_FORMAT', action='store',
+ default='yaml',
+ help='output format of the v12 checklist items (default: yaml)')
+v12_parser.add_argument('--source-type', dest='v12_source_type', metavar='SOURCE_TYPE', action='store',
+ default=None,
+ help='Override source type with a specific value (default: None, possible options: revcl, wafsg, aprl)')
+v12_parser.add_argument('--labels', dest='v12_labels', metavar='LABELS', action='store',
+ help='additional labels to add to the items, for example {"mykey1": "myvalue1", "mykey2": "myvalue2"}')
+v12_parser.add_argument('--id-label', dest='v12_id_label', metavar='ID_LABEL', action='store',
+ help='label to use for the checklist ID, for example "alzId".')
+v12_parser.add_argument('--category-label', dest='v12_cat_label', metavar='CATEGORY_LABEL', action='store',
+ help='label to use for the checklist categories, for example "alzArea".')
+v12_parser.add_argument('--subcategory-label', dest='v12_subcat_label', metavar='SUBCATEGORY_LABEL', action='store',
+ help='label to use for the checklist subcategories, for example "alzSubarea".')
+v12_parser.add_argument('--text-analytics-endpoint', dest='v12_text_endpoint', metavar='TEXT_ANALYTICS_ENDPOINT', action='store',
+ help='Text analytics endpoint to use for deriving missing reco names')
+v12_parser.add_argument('--text-analytics-key', dest='v12_text_key', metavar='TEXT_ANALYTICS_KEY', action='store',
+ help='Text analytics key to use for deriving missing reco names')
+v12_parser.add_argument('--overwrite', dest='v12_overwrite', action='store_true',
+ default=False,
+ help='overwrite existing reco files with the same GUID (default: False)')
+v12_parser.add_argument('--max-items', dest='v12_max_items', metavar='SCHEMA_FILE', action='store',
+ default=0, type=int,
+ help='Maximum number of v1 recos to convert to v2, default is 0 (all items)')
+# Create the 'run-arg' command
+runarg_parser = subparsers.add_parser('run-arg', help='Run Azure Resource Graph queries stored in v2 recommendations', parents=[base_subparser])
+runarg_parser.add_argument('--input-folder', dest='runarg_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the checks to run are stored')
+runarg_parser.add_argument('--format', dest='runarg_format', metavar='FORMAT', action='store',
+ default='yaml',
+ help='format of the v2 checklist items (default: yaml)')
+runarg_parser.add_argument('--label-selector', dest='runarg_labels', metavar='LABELS', action='store',
+ help='label selector for the items to run the queries from, for example {"mykey1": "myvalue1", "mykey2": "myvalue2"}')
+runarg_parser.add_argument('--service-selector', dest='runarg_services', metavar='SERVICES', action='store',
+ help='comma-separated services for the items to run the queries from, for example "AKS,firewall"')
+runarg_parser.add_argument('--waf-selector', dest='runarg_waf_pillars', metavar='WAF_PILLARS', action='store',
+ help='comma-separated WAF pillars for the items to run the queries from, for example "cost,reliability"')
+runarg_parser.add_argument('--guid', dest='runarg_guid', metavar='GUID', action='store',
+ help='GUID of the recommendation to run the queries from')
+runarg_parser.add_argument('--subscription-id', dest='runarg_subscription_id', metavar='SUBSCRIPTION_ID', action='store',
+ help='Azure subscription ID where to run the queries')
+# Create the 'export-checklist' command
+export_parser = subparsers.add_parser('export-checklist', help='Exports a v2 checklist file (YAML) to a v1 format (JSON)', parents=[base_subparser])
+export_parser.add_argument('--checklist-file', dest='export_checklist_file', metavar='CHECKLIST_FILE', action='store',
+ help='YAML file with a checklist definition that can include label-selectors, service-selectors and WAF-selectors as well as other metadata')
+export_parser.add_argument('--input-folder', dest='export_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the recommendations are stored')
+export_parser.add_argument('--output-file', dest='export_output_file', metavar='OUTPUT_FILE', action='store',
+ help='output file where the v1 checklist will be stored')
+export_parser.add_argument('--service-dictionary', dest='export_service_dictionary', metavar='SERVICE_DICTIONARY', action='store',
+ help='JSON file with dictionary to map services to standard names and to ARM services')
+# Create the 'checklist-v1tov2' command
+checklist_v12_parser = subparsers.add_parser('checklist-to-v2', help='Exports a v1 checklist file (JSON) to a checklist v2 format (YAML) including the required areas and selectors', parents=[base_subparser])
+checklist_v12_parser.add_argument('--checklist-file', dest='checklist_v12_checklist_file', metavar='CHECKLIST_FILE', action='store',
+ help='JSON file with a v1 checklist definition')
+checklist_v12_parser.add_argument('--output-file', dest='checklist_v12_output_file', metavar='OUTPUT_FILE', action='store',
+ help='output file where the v2 checklist will be stored')
+checklist_v12_parser.add_argument('--use-names', dest='checklist_v12_use_names', action='store_true',
+ default=True,
+ help='use names instead of GUIDs (default: True)')
+checklist_v12_parser.add_argument('--input-folder', dest='checklist_v12_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the recommendations are stored. This parameter is required if using names instead of GUIDs.')
+# Create the 'disambiguate-names' command
+disambiguate_names_parser = subparsers.add_parser('disambiguate-names', help='Exports a v1 checklist file (JSON) to a checklist v2 format (YAML) including the required areas and selectors', parents=[base_subparser])
+disambiguate_names_parser.add_argument('--input-folder', dest='disambiguate_names_input_folder', metavar='INPUT_FOLDER', action='store',
+ help='input folder where the recommendations are stored.')
+
+# Parse the command-line arguments
+args = parser.parse_args()
+
+# Handle the parsed arguments based on the command and sub-command
+if args.command == 'analyze-v1':
+ guids = []
+ # We need an input file or an input folder
+ if args.analyze_input_file:
+ file_stats, guids = cl_analyze_v1.verify_file(args.analyze_input_file, guids=[], verbose=args.verbose)
+ if args.analyze_compare_file:
+ compare_stats, guids = cl_analyze_v1.verify_file(args.analyze_compare_file, guids=[], verbose=args.verbose)
+ # Print the differences between the two checklists stats in a table format
+ print("INFO: Comparing the two checklists...")
+ print("INFO: {0: <40} {1: <40} {2: <40}".format("Item", os.path.basename(args.analyze_input_file), os.path.basename(args.analyze_compare_file)))
+ print("INFO: {0: <40} {1: <40} {2: <40}".format("----", "-" * len(os.path.basename(args.analyze_input_file)), "-" * len(os.path.basename(args.analyze_compare_file))))
+ print("INFO: {0: <40} {1: <40} {2: <40}".format("Total items", file_stats['item_count'], compare_stats['item_count']))
+ for key in file_stats['inconsistencies']:
+ print("INFO: {0: <40} {1: <40} {2: <40}".format(key, file_stats['inconsistencies'][key], compare_stats['inconsistencies'][key]))
+ # Otherwise, there should be an input folder
+ elif args.analyze_input_folder:
+ language = "en" # This could be changed to a parameter
+ if args.verbose:
+ print("DEBUG: looking for JSON files in folder", args.analyze_input_folder, "with pattern *.", language + ".json...")
+ checklist_files = glob.glob(args.analyze_input_folder + "/*." + language + ".json")
+ if len(checklist_files) > 0:
+ if args.verbose:
+ print("DEBUG: found", len(checklist_files), "JSON files, analyzing correctness...")
+ for file in checklist_files:
+ if file:
+ file_stats, guids = cl_analyze_v1.verify_file(file, guids=[], verbose=args.verbose)
+ else:
+ print("ERROR: no input file found, not doing anything")
+ # If no input file or folder has been specified, show an error message
+ else:
+ print("ERROR: you need to use the parameters `--input-file` or `--input-folder` to specify the file or folder to analyze")
+elif args.command == 'v1tov2':
+ # We need an input file and an output folder
+ if args.v12_input_file and args.v12_output_folder:
+ # Load service dictionary if provided
+ if args.v12_service_dictionary:
+ try:
+ if args.verbose: print("DEBUG: Loading service dictionary from", args.v12_service_dictionary)
+ with open(args.v12_service_dictionary) as f:
+ service_dictionary = json.load(f)
+ if args.verbose: print("DEBUG: service dictionary loaded successfully with {0} elements".format(len(service_dictionary)))
+ except Exception as e:
+ service_dictionary = None
+ print("ERROR: Error when loading service dictionary from", args.v12_service_dictionary, "-", str(e))
+ else:
+ service_dictionary = None
+ # Convert labels argument to object if specified
+ if args.v12_labels:
+ try:
+ labels = json.loads(args.v12_labels)
+ if isinstance(labels, dict):
+ if args.verbose: print("DEBUG: Loaded {0} labels".format(len(labels)))
+ else:
+ print("ERROR: Labels should be a dictionary, not a", type(labels))
+ labels = None
+ except Exception as e:
+ print("ERROR: Error when loading labels from", args.v12_labels, "-", str(e))
+ labels = None
+ else:
+ labels = None
+ # Create an array with the existing recos in the output folder
+ existing_v2recos = cl_analyze_v2.load_v2_files(args.v12_output_folder, import_filepaths=True, verbose=False)
+ if args.verbose: print("DEBUG: Found {0} existing v2 objects in folder {1}".format(len(existing_v2recos), args.v12_output_folder))
+ # Generate v2 objects and store them in the output folder
+ new_v2recos = cl_v1tov2.generate_v2(args.v12_input_file, service_dictionary=service_dictionary,
+ text_analytics_endpoint=args.v12_text_endpoint, text_analytics_key=args.v12_text_key,
+ labels=labels, id_label=args.v12_id_label, cat_label=args.v12_cat_label, subcat_label=args.v12_subcat_label,
+ source_type=args.v12_source_type,
+ existing_v2recos=existing_v2recos, max_items=args.v12_max_items,
+ verbose=args.verbose)
+ if new_v2recos:
+ if args.verbose: print("DEBUG: Storing {0} v2 objects in folder {1}...".format(len(new_v2recos), args.v12_output_folder))
+ cl_v1tov2.store_v2(args.v12_output_folder, new_v2recos, existing_v2recos=existing_v2recos, output_format=args.v12_output_format, overwrite=args.v12_overwrite, verbose=args.verbose)
+ else:
+ print("ERROR: No v2 objects generated, not storing anything.")
+ else:
+ print("ERROR: you need to use the parameters `--input-file` and `--output-folder` to specify the file to convert and the output folder")
+elif args.command == 'analyze-v2':
+ # We need an input folder
+ if args.analyzev2_input_folder:
+ # If a checklist file is specified, load the selectors from it
+ if args.analyzev2_checklist_file:
+ if (not (args.analyzev2_labels or args.analyzev2_services or args.analyzev2_waf_pillars)):
+ v2_stats = cl_analyze_v2.v2_stats_from_checklist(args.analyzev2_checklist_file, args.analyzev2_input_folder, format=args.analyzev2_format, verbose=args.verbose)
+ else:
+ print("ERROR: You should either specify a checklist file or individual selectors, but not both.")
+ sys.exit(1)
+ else:
+ # Convert label selectors argument to an object if specified
+ if args.analyzev2_labels:
+ try:
+ labels = json.loads(args.analyzev2_labels)
+ except Exception as e:
+ print("ERROR: Error when loading labels from", args.analyzev2_labels, "-", str(e))
+ labels = None
+ else:
+ labels = None
+ if args.analyzev2_services:
+ services = args.analyzev2_services.lower().split(",")
+ else:
+ services = None
+ if args.analyzev2_waf_pillars:
+ waf_pillars = args.analyzev2_waf_pillars.lower().split(",")
+ else:
+ waf_pillars = None
+ if args.analyzev2_sources:
+ sources = args.analyzev2_sources.lower().split(",")
+ else:
+ sources = None
+ # Retrieve stats (with verbosity disabled)
+ v2_stats = cl_analyze_v2.v2_stats_from_folder(args.analyzev2_input_folder, format=args.analyzev2_format,
+ labels=labels, services=services, waf_pillars=waf_pillars, sources=sources,
+ verbose=False)
+ if v2_stats:
+ # Print stats
+ print("INFO: Total items found =", v2_stats['total_items'])
+ print("INFO: Duplicate GUIDs =", str(v2_stats['duplicate_guids']))
+ print("INFO: Duplicate Names =", str(v2_stats['duplicate_names']))
+ print("INFO: Recos with ARG queries =", str(v2_stats['arg']))
+ if args.analyzev2_show_severities:
+ print("INFO: Items per severity:")
+ for key in v2_stats['severity']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['severity'][key]))
+ if args.analyzev2_show_labels:
+ print("INFO: Items per label:")
+ for key in v2_stats['labels']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['labels'][key]))
+ if args.analyzev2_show_services:
+ print("INFO: Items per service:")
+ for key in v2_stats['services']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['services'][key]))
+ if args.analyzev2_show_waf:
+ print("INFO: Items per WAF pillar:")
+ for key in v2_stats['waf']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['waf'][key]))
+ if args.analyzev2_show_sources:
+ print("INFO: Items per source:")
+ for key in v2_stats['sources']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['sources'][key]))
+ if args.analyzev2_show_resourceTypes:
+ print("INFO: Items per resource type:")
+ for key in v2_stats['resourceTypes']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['resourceTypes'][key]))
+ if args.analyzev2_show_areas:
+ print("INFO: Items per area | subarea:")
+ for key in v2_stats['areas']:
+ print("INFO: - {0} = {1}".format(key, v2_stats['areas'][key]))
+ else:
+ print("ERROR: No v2 objects found.")
+ if args.analyzev2_delete_assistant:
+ print('WARNING: WIP!!')
+ if args.verbose: print("DEBUG: Running delete assistant and loading up recos...")
+ v2_recos = cl_analyze_v2.load_v2_files(args.analyzev2_input_folder, import_filepaths=True, verbose=False)
+ for reco_name in v2_stats['duplicate_names']:
+ recos = [x for x in v2_recos if x['name'].lower() == reco_name.lower()]
+ if len(recos) > 1:
+ print("INFO: Found", len(recos), "duplicates for reco {0}:".format(reco_name))
+ for reco in recos:
+ print(json.dumps(reco, indent=2))
+ print("QUESTION: which reco do you want to delete? (0-{0}/none) ".format(len(recos)-1), end='')
+ answer = input()
+ if answer.isnumeric():
+ reco_to_delete = recos[int(answer)]
+ print("INFO: Deleting reco {0} in file {1}...".format(reco_to_delete['name'], reco_to_delete['filepath']))
+ try:
+ os.remove(reco_to_delete['filepath'])
+ except Exception as e:
+ print("ERROR: Error deleting file", reco_to_delete['filepath'], "-", str(e))
+ else:
+ print("ERROR: you need to use the parameter `--input-folder` to specify the folder to analyze")
+elif args.command == 'list-recos':
+ # We need an input folder
+ if args.getrecos_input_folder:
+ if args.getrecos_checklist_file:
+ # Get recos from the checklist file
+ v2recos = cl_analyze_v2.get_recos_from_checklist( args.getrecos_checklist_file, args.getrecos_input_folder, verbose=args.verbose, import_filepaths=True)
+ else:
+ # Convert label selectors argument to an object if specified
+ if args.getrecos_labels:
+ try:
+ labels = json.loads(args.getrecos_labels)
+ except Exception as e:
+ print("ERROR: Error when loading labels from", args.getrecos_labels, "-", str(e))
+ labels = None
+ else:
+ labels = None
+ if args.getrecos_services:
+ services = args.getrecos_services.lower().split(",")
+ else:
+ services = None
+ if args.getrecos_waf_pillars:
+ waf_pillars = args.getrecos_waf_pillars.lower().split(",")
+ else:
+ waf_pillars = None
+ if args.getrecos_sources:
+ sources = args.getrecos_sources.lower().split(",")
+ else:
+ sources = None
+ # Retrieve recos
+ v2recos = cl_analyze_v2.get_recos(args.getrecos_input_folder,
+ labels=labels, services=services, waf_pillars=waf_pillars, sources=sources, format=args.getrecos_format,
+ arg=args.getrecos_arg, verbose=args.verbose)
+ # Print recos
+ if v2recos:
+ if args.getrecos_only_filenames:
+ for reco in v2recos:
+ print(reco['filepath'])
+ else:
+ cl_analyze_v2.print_recos(v2recos, show_labels=args.getrecos_show_labels, show_arg=args.getrecos_show_arg)
+ else:
+ print("ERROR: No v2 objects found satisfying the criteria.")
+ else:
+ print("ERROR: you need to use the parameter `--input-folder` to specify the folder to analyze")
+elif args.command == 'update-recos':
+ # We need an input folder
+ if args.updaterecos_input_folder:
+ # Retrieve recos
+ if args.verbose: print("DEBUG: Retrieving recos from", args.updaterecos_input_folder)
+ v2recos = cl_analyze_v2.get_recos(args.updaterecos_input_folder, format=args.updaterecos_format, import_filepaths=True, verbose=False)
+ if v2recos and len(v2recos) > 0:
+ updated_v2recos = []
+ if args.updaterecos_reviewed:
+ answer = input("\nDo you want to refresh the reviewed field in {0} recommendations? (Y/n) ".format(len(v2recos)))
+ if (answer == "") or (answer.lower() == "y"):
+ updated_v2recos = cl_analyze_v2.refresh_reviewed(v2recos, verbose=args.verbose)
+ if args.updaterecos_default_severity:
+ for reco in v2recos:
+ if 'severity' not in reco:
+ if args.verbose: print("DEBUG: Setting default severity to {0} for reco {1}".format(args.updaterecos_default_severity, reco['name']))
+ reco['severity'] = args.updaterecos_default_severity
+ updated_v2recos.append(reco)
+ if updated_v2recos and len(updated_v2recos) > 0:
+ if args.verbose: print("DEBUG: Storing {0} updated v2 objects in folder {1}...".format(len(updated_v2recos), args.updaterecos_input_folder))
+ cl_v1tov2.store_v2(args.updaterecos_input_folder, updated_v2recos, existing_v2recos=v2recos, overwrite=True, output_format=args.updaterecos_format, verbose=args.verbose)
+ else:
+ print("INFO: No v2 objects updated.")
+ else:
+ print("ERROR: No v2 objects found.")
+ else:
+ print("ERROR: you need to use the parameter `--input-folder` to specify the folder to analyze")
+elif args.command == 'validate-recos':
+ # We need an input folder and a schema file
+ if args.validaterecos_input_folder and args.validaterecos_schema_file:
+ # Retrieve recos and schema
+ if args.verbose: print("DEBUG: Loading schema from", args.validaterecos_schema_file)
+ with open(args.validaterecos_schema_file, 'r') as stream:
+ try:
+ reco_schema = json.load(stream)
+ except:
+ print("ERROR: Error loading JSON schema from", args.validaterecos_schema_file)
+ sys.exit(1)
+ # To Do: validate that the schema is valid
+ if reco_schema:
+ if args.verbose: print("DEBUG: Retrieving recos from", args.validaterecos_input_folder)
+ v2recos = cl_analyze_v2.get_recos(args.validaterecos_input_folder, verbose=False)
+ if args.verbose: print("DEBUG: Starting validation with schema {0}...".format(args.validaterecos_schema_file))
+ reco_counter = 0
+ finding_counter = 0
+ for reco in v2recos:
+ reco_counter +=1
+ if (args.validaterecos_max_items == 0) or (reco_counter <= args.validaterecos_max_items):
+ try:
+ jsonschema.validate(reco, reco_schema)
+ if args.verbose: print("INFO: Reco", reco['name'], "validates correctly against the schema.")
+ except jsonschema.exceptions.ValidationError as e:
+ print("ERROR: Reco", reco['name'], "does not validate against the schema.")
+ if args.verbose: print("DEBUG: -", str(e))
+ finding_counter += 1
+ if (args.validaterecos_max_findings > 0) and (finding_counter >= args.validaterecos_max_findings):
+ print("INFO: Maximum number of non-compliances reached, stopping validation.")
+ break
+ except jsonschema.exceptions.SchemaError as e:
+ print("ERROR: Schema", args.validaterecos_schema_file, "does not seem to be valid.")
+ if args.verbose: print("DEBUG: -", str(e))
+ sys.exit(1)
+ except Exception as e:
+ print("ERROR: Unknown error validating reco", reco['name'], "against the schema", args.validaterecos_schema_file, "-", str(e))
+ print("INFO: {0} recos validated, {1} non-compliances found.".format(reco_counter, finding_counter))
+ else:
+ print("ERROR: Schema could not be loaded.")
+ else:
+ print("ERROR: you need to use the parameters `--input-folder` and `--schema` to specify the recos folder and their schema")
+elif args.command == 'validate-checklists':
+ # We need an input folder and a schema file
+ if args.validatechecklists_input_folder and args.validatechecklists_schema_file:
+ # Retrieve checklists schema
+ if args.verbose: print("DEBUG: Loading schema from", args.validatechecklists_schema_file)
+ with open(args.validatechecklists_schema_file, 'r') as stream:
+ try:
+ cl_schema = json.load(stream)
+ except:
+ print("ERROR: Error loading JSON schema from", args.validatechecklists_schema_file)
+ sys.exit(1)
+ # Load checklists (every yaml in the folder)
+ if cl_schema:
+ if args.verbose: print("DEBUG: Retrieving checklists from", args.validatechecklists_input_folder)
+ v2cls = cl_analyze_v2.get_checklists(args.validatechecklists_input_folder, verbose=False)
+ if args.verbose: print("DEBUG: Starting validation with schema {0}...".format(args.validatechecklists_schema_file))
+ cl_counter = 0
+ finding_counter = 0
+ for cl in v2cls:
+ cl_counter +=1
+ if (args.validatechecklists_max_items == 0) or (cl_counter <= args.validatechecklists_max_items):
+ try:
+ jsonschema.validate(cl, cl_schema)
+ if args.verbose: print("INFO: Checklist {0} validates correctly against the schema.".format(cl['name']))
+ except jsonschema.exceptions.ValidationError as e:
+ print("ERROR: Checklist '{0}' does not validate against the schema.".format(cl['name']))
+ if args.verbose: print("DEBUG: -", str(e))
+ finding_counter += 1
+ if (args.validatechecklists_max_findings > 0) and (finding_counter >= args.validatechecklists_max_findings):
+ print("INFO: Maximum number of non-compliances reached, stopping validation.")
+ break
+ except jsonschema.exceptions.SchemaError as e:
+ print("ERROR: Schema", args.validatechecklists_schema_file, "does not seem to be valid.")
+ if args.verbose: print("DEBUG: -", str(e))
+ sys.exit(1)
+ except Exception as e:
+ print("ERROR: Unknown error validating checklist '{0}' against the schema {1}: {2}".format(cl['name'], args.validatechecklists_schema_file,str(e)))
+ print("INFO: {0} recos validated, {1} non-compliances found.".format(cl_counter, finding_counter))
+ else:
+ print("ERROR: Schema could not be loaded.")
+ else:
+ print("ERROR: you need to use the parameters `--input-folder` and `--schema` to specify the recos folder and their schema")
+elif args.command == 'show-reco':
+ # We need an input folder and a GUID or a name
+ if args.showreco_input_folder and args.showreco_guid:
+ recos = cl_analyze_v2.get_reco_from_guid(args.showreco_input_folder, args.showreco_guid, verbose=args.verbose)
+ elif args.showreco_input_folder and args.showreco_name:
+ recos = cl_analyze_v2.get_reco_from_name(args.showreco_input_folder, args.showreco_name, verbose=args.verbose)
+ else:
+ print("ERROR: you need to use the parameters `--input-folder` and `--guid` or `--name` to specify the folder and GUID/name to retrieve")
+ if recos:
+ if len(recos) > 1:
+ print("WARNING: {0} recos found".format(len(recos)))
+ for reco in recos:
+ cl_analyze_v2.print_reco(reco)
+ print("---")
+ else:
+ print("ERROR: No reco found with GUID", args.showreco_guid)
+elif args.command == 'rename-reco':
+ # We need an input folder and a GUID
+ if args.renamereco_input_folder and args.renamereco_guid:
+ recos = cl_analyze_v2.get_reco(args.renamereco_input_folder, args.renamereco_guid, verbose=args.verbose)
+ if recos:
+ if len(recos) > 1:
+ print("ERROR: {0} recos found with GUID {1}".format(len(recos), args.showreco_guid))
+ else:
+ for reco in recos:
+ if args.renamereco_newname:
+ # WIP!!!
+ new_name = args.renamereco_newname
+ else:
+ new_name = cl_v1tov2.guess_reco_name(reco, cognitive_services_endpoint=args.renamereco_endpoint, cognitive_services_key=args.renamereco_key , verbose=args.verbose)
+ reco['name'] = new_name
+ cl_v1tov2.store_v2(args.renamereco_input_folder, [reco], output_format='yaml', verbose=args.verbose)
+ print("---")
+ else:
+ print("ERROR: No reco found with GUID", args.showreco_guid)
+ else:
+ print("ERROR: you need to use the parameters `--input-folder` and `--guid` to specify the folder and GUID to analyze")
+elif args.command == 'open-reco':
+ # We need an input folder and a GUID
+ if args.openreco_input_folder and args.openreco_guid:
+ cl_analyze_v2.load_v2_files(args.openreco_input_folder, guids=[ args.openreco_guid ], open_editor=True, text_editor=args.openreco_editor, verbose=args.verbose)
+ elif args.openreco_input_folder and args.openreco_name:
+ cl_analyze_v2.load_v2_files(args.openreco_input_folder, names=[ args.openreco_name ], open_editor=True, text_editor=args.openreco_editor, verbose=args.verbose)
+ else:
+ print("ERROR: you need to use the parameters `--input-folder` and `--guid` to specify the folder and GUID to open")
+elif args.command == 'run-arg':
+ if args.runarg_input_folder:
+ # Convert label selectors argument to an object if specified
+ if args.runarg_labels:
+ try:
+ labels = json.loads(args.runarg_labels)
+ except Exception as e:
+ print("ERROR: Error when loading labels from", args.runarg_labels, "-", str(e))
+ labels = None
+ else:
+ labels = None
+ if args.runarg_services:
+ services = args.runarg_services.lower().split(",")
+ else:
+ services = None
+ if args.runarg_waf_pillars:
+ waf_pillars = args.runarg_waf_pillars.lower().split(",")
+ else:
+ waf_pillars = None
+ v2recos = cl_analyze_v2.get_recos(args.runarg_input_folder, labels=labels, services=services, waf_pillars=waf_pillars, guid=args.runarg_guid, format=args.runarg_format, verbose=args.verbose)
+ if v2recos:
+ arg_results = cl_arg.run_arg_queries(v2recos, subscription_id=args.runarg_subscription_id, verbose=args.verbose)
+ for result in arg_results:
+ print("INFO: ARG query result for reco with GUID", result['guid'])
+ print("INFO: - {0}".format(result['argResult']))
+ else:
+ print("ERROR: No v2 objects found.")
+elif args.command == "export-checklist":
+ if args.export_checklist_file and args.export_input_folder:
+ if args.export_service_dictionary:
+ try:
+ if args.verbose: print("DEBUG: Loading service dictionary from", args.export_service_dictionary)
+ with open(args.export_service_dictionary) as f:
+ service_dictionary = json.load(f)
+ if args.verbose: print("DEBUG: service dictionary loaded successfully with {0} elements".format(len(service_dictionary)))
+ except Exception as e:
+ service_dictionary = None
+ print("ERROR: Error when loading service dictionary from", args.export_service_dictionary, "-", str(e))
+ sys.exit(1)
+ else:
+ print("WARNING: you may want to use the parameter `--service-dictionary` to extract human-readable service names from ARM resource types.")
+ service_dictionary = None
+ cl_v2tov1.generate_v1(args.export_checklist_file, args.export_input_folder, args.export_output_file, service_dictionary=service_dictionary, verbose=args.verbose)
+ else:
+ print("ERROR: you need to use the parameters `--checklist-file` and `--input-folder` to specify the checklist file and the input folder")
+elif args.command == "checklist-to-v2":
+ if args.checklist_v12_checklist_file and args.checklist_v12_output_file:
+ cl_v1tov2.checklist_v1_to_v2(args.checklist_v12_checklist_file, args.checklist_v12_output_file,
+ use_names=args.checklist_v12_use_names, v2recos_folder=args.checklist_v12_input_folder,
+ verbose=args.verbose)
+ else:
+ print("ERROR: you need to use the parameters `--checklist-file` and `--output-file` to specify the v1 checklist file and the v2 output file")
+elif args.command == 'disambiguate-names':
+ # We need an input folder
+ if args.disambiguate_names_input_folder:
+ if args.verbose: print("DEBUG: loading up recos from folder", args.disambiguate_names_input_folder)
+ v2_recos = cl_analyze_v2.get_recos(args.disambiguate_names_input_folder, verbose=False)
+ if args.verbose: print("DEBUG: getting statistics", args.disambiguate_names_input_folder)
+ v2_stats = cl_analyze_v2.v2_stats_from_object(v2_recos, verbose=args.verbose)
+ if 'duplicate_names' in v2_stats:
+ if args.verbose: print("DEBUG: Disambiguating {0} duplicate names".format(len(v2_stats['duplicate_names'])))
+ print("INFO: Found {0} duplicate names".format(len(v2_stats['duplicate_names'])))
+ for name in v2_stats['duplicate_names']:
+ matching_recos = [reco for reco in v2_recos if reco['name'] == name]
+ suffix = 1
+ if len(matching_recos) > 1:
+ if args.verbose: print("DEBUG: Found {0} recos with name {1}".format(len(matching_recos), name))
+ for reco in matching_recos:
+ reco['name'] = name + "-" + str(suffix)
+ suffix += 1
+ # Store new recos
+ cl_v1tov2.store_v2(args.disambiguate_names_input_folder, matching_recos, overwrite=True, output_format='yaml', verbose=args.verbose)
+ else:
+ print("ERROR: Found only {0} reco with name {1}".format(len(matching_recos), name))
+ else:
+ print("ERROR: You need to specify an input folder.")
+ sys.exit(1)
+else:
+ print("ERROR: unknown command, please verify the command syntax with {0} --help".format(sys.argv[0]))
diff --git a/scripts/modules/__pycache__/cl_analyze.cpython-311.pyc b/scripts/modules/__pycache__/cl_analyze.cpython-311.pyc
new file mode 100644
index 000000000..9588f077a
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze.cpython-311.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze.cpython-312.pyc b/scripts/modules/__pycache__/cl_analyze.cpython-312.pyc
new file mode 100644
index 000000000..def3db6e6
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze.cpython-312.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze.cpython-38.pyc b/scripts/modules/__pycache__/cl_analyze.cpython-38.pyc
new file mode 100644
index 000000000..7fea57fe8
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze.cpython-38.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze_v1.cpython-311.pyc b/scripts/modules/__pycache__/cl_analyze_v1.cpython-311.pyc
new file mode 100644
index 000000000..737482ae2
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze_v1.cpython-311.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze_v1.cpython-312.pyc b/scripts/modules/__pycache__/cl_analyze_v1.cpython-312.pyc
new file mode 100644
index 000000000..35066bfcc
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze_v1.cpython-312.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze_v2.cpython-311.pyc b/scripts/modules/__pycache__/cl_analyze_v2.cpython-311.pyc
new file mode 100644
index 000000000..3db875396
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze_v2.cpython-311.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze_v2.cpython-312.pyc b/scripts/modules/__pycache__/cl_analyze_v2.cpython-312.pyc
new file mode 100644
index 000000000..ab5ec5fb3
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze_v2.cpython-312.pyc differ
diff --git a/scripts/modules/__pycache__/cl_analyze_v2.cpython-38.pyc b/scripts/modules/__pycache__/cl_analyze_v2.cpython-38.pyc
new file mode 100644
index 000000000..702ef1f8b
Binary files /dev/null and b/scripts/modules/__pycache__/cl_analyze_v2.cpython-38.pyc differ
diff --git a/scripts/modules/__pycache__/cl_arg.cpython-311.pyc b/scripts/modules/__pycache__/cl_arg.cpython-311.pyc
new file mode 100644
index 000000000..e83429988
Binary files /dev/null and b/scripts/modules/__pycache__/cl_arg.cpython-311.pyc differ
diff --git a/scripts/modules/__pycache__/cl_arg.cpython-312.pyc b/scripts/modules/__pycache__/cl_arg.cpython-312.pyc
new file mode 100644
index 000000000..5c758000c
Binary files /dev/null and b/scripts/modules/__pycache__/cl_arg.cpython-312.pyc differ
diff --git a/scripts/modules/__pycache__/cl_arg.cpython-38.pyc b/scripts/modules/__pycache__/cl_arg.cpython-38.pyc
new file mode 100644
index 000000000..6072ad14b
Binary files /dev/null and b/scripts/modules/__pycache__/cl_arg.cpython-38.pyc differ
diff --git a/scripts/modules/__pycache__/cl_v1tov2.cpython-311.pyc b/scripts/modules/__pycache__/cl_v1tov2.cpython-311.pyc
new file mode 100644
index 000000000..346cb42fd
Binary files /dev/null and b/scripts/modules/__pycache__/cl_v1tov2.cpython-311.pyc differ
diff --git a/scripts/modules/__pycache__/cl_v1tov2.cpython-312.pyc b/scripts/modules/__pycache__/cl_v1tov2.cpython-312.pyc
new file mode 100644
index 000000000..ed072a1de
Binary files /dev/null and b/scripts/modules/__pycache__/cl_v1tov2.cpython-312.pyc differ
diff --git a/scripts/modules/__pycache__/cl_v1tov2.cpython-38.pyc b/scripts/modules/__pycache__/cl_v1tov2.cpython-38.pyc
new file mode 100644
index 000000000..ae4ce533a
Binary files /dev/null and b/scripts/modules/__pycache__/cl_v1tov2.cpython-38.pyc differ
diff --git a/scripts/modules/__pycache__/cl_v2tov1.cpython-311.pyc b/scripts/modules/__pycache__/cl_v2tov1.cpython-311.pyc
new file mode 100644
index 000000000..cf4329146
Binary files /dev/null and b/scripts/modules/__pycache__/cl_v2tov1.cpython-311.pyc differ
diff --git a/scripts/modules/__pycache__/cl_v2tov1.cpython-312.pyc b/scripts/modules/__pycache__/cl_v2tov1.cpython-312.pyc
new file mode 100644
index 000000000..2a30c6dc5
Binary files /dev/null and b/scripts/modules/__pycache__/cl_v2tov1.cpython-312.pyc differ
diff --git a/scripts/modules/cl_analyze_v1.py b/scripts/modules/cl_analyze_v1.py
new file mode 100644
index 000000000..e69987bae
--- /dev/null
+++ b/scripts/modules/cl_analyze_v1.py
@@ -0,0 +1,150 @@
+#######################################
+#
+# Module to analyze checklist files
+#
+#######################################
+
+# Dependencies
+import sys
+import json
+import os
+
+# Function that verifies the correctness of a single checklist
+def verify_file(input_file, guids=[], verbose=False):
+ # Banner
+ if verbose:
+ print("DEBUG: ======================================================================")
+ print("DEBUG: Verifying file", input_file)
+ # Look for non-unicode characters in the file
+ if verbose:
+ print("DEBUG: Verifying all characters are Unicode-8...")
+ f1 = open (input_file, "r")
+ text = f1.read()
+ for line in text:
+ for character in line:
+ if ord(character) > 127:
+ print("ERROR: Non-unicode character found in file", input_file, ":", character)
+ sys.exit(1)
+ # if verbose:
+ # print("DEBUG: All characters are Unicode-8")
+
+ # Reading into JSON
+ if verbose:
+ print("DEBUG: Verifying JSON can be loaded up...")
+ try:
+ with open(input_file) as f:
+ checklist = json.load(f)
+ if 'items' in checklist:
+ if verbose:
+ print("DEBUG: {0} items found in JSON file {1}".format(len(checklist['items']), input_file))
+ except Exception as e:
+ print("ERROR: Error when processing JSON file, nothing changed", input_file, ":", str(e))
+ sys.exit(1)
+ # if verbose:
+ # print("DEBUG: JSON can be loaded up correctly")
+
+ # Verify the required keys are present
+ if verbose:
+ print("DEBUG: Verifying the required keys are present...")
+ required_keys = ['items', 'metadata', 'categories', 'status', 'severities', 'yesno']
+ for key in required_keys:
+ if key not in checklist:
+ print("ERROR: Required key missing from JSON file", input_file, ":", key)
+
+ # Verify the metadata keys are present
+ if 'metadata' in checklist:
+ if verbose:
+ print("DEBUG: Verifying the metadata keys are present...")
+ required_keys = ['name', 'timestamp', 'state', 'waf']
+ for key in required_keys:
+ if key not in checklist['metadata']:
+ print("ERROR: Required key missing from metadata in JSON file", input_file, ":", key)
+ else:
+ if verbose:
+ print("WARNING: skipping metadata verification, no metadata in JSON file", input_file)
+
+ # Verify the metadata waf key has a valid value
+ if 'metadata' in checklist:
+ if 'waf' in checklist['metadata']:
+ if checklist['metadata']['waf'].lower() not in ['none', 'all', 'reliability', 'security', 'performance', 'cost', 'operations']:
+ print("ERROR: Invalid WAF value in metadata in JSON file", input_file, ":", checklist['metadata']['waf'])
+
+ # Verify the items have all required keys
+ if verbose:
+ print("DEBUG: Verifying the items have all required keys...")
+ # Counter dictionary for inconsistencies
+ item_count = 0
+ inconsistencies = {
+ 'missing_graph': 0,
+ 'missing_description': 0,
+ 'wrong_cat': 0,
+ 'missing_cat': 0,
+ 'missing_subcat': 0,
+ 'missing_waf': 0,
+ 'wrong_waf': 0,
+ 'missing_svc': 0,
+ 'missing_link': 0,
+ 'missing_sev': 0,
+ 'missing_guid': 0,
+ 'localized_link': 0
+ }
+ # Load categories to verify whether the items have the correct category
+ if 'categories' in checklist:
+ categories = [x['name'] for x in checklist['categories']]
+ if verbose:
+ print("DEBUG: Categories found in JSON file", input_file, ":", str(categories))
+ else:
+ categories = []
+ if 'items' in checklist:
+ for item in checklist['items']:
+ item_count += 1
+ if 'category' not in item:
+ inconsistencies['missing_cat'] += 1
+ elif item['category'] not in categories:
+ inconsistencies['wrong_cat'] += 1
+ if 'subcategory' not in item:
+ inconsistencies['missing_subcat'] += 1
+ if 'waf' not in item:
+ inconsistencies['missing_waf'] += 1
+ elif item['waf'].lower() not in ['reliability', 'security', 'performance', 'cost', 'operations']:
+ inconsistencies['wrong_waf'] += 1
+ if 'service' not in item:
+ inconsistencies['missing_svc'] += 1
+ if 'guid' not in item:
+ inconsistencies['missing_guid'] += 1
+ elif item['guid'] in guids:
+ print("ERROR: Duplicated GUID in JSON file", input_file, ":", item['guid'])
+ else:
+ guids.append(item['guid'])
+ if 'link' not in item:
+ inconsistencies['missing_link'] += 1
+ elif 'en-us' in item['link']:
+ inconsistencies['localized_link'] += 1
+ if 'severity' not in item:
+ inconsistencies['missing_sev'] += 1
+ if 'graph' not in item:
+ inconsistencies['missing_graph'] += 1
+ if 'description' not in item:
+ inconsistencies['missing_description'] += 1
+ if inconsistencies['missing_cat'] > 0:
+ print("ERROR: Items with missing category in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_cat'], round(inconsistencies['missing_cat'] / item_count * 100, 2)))
+ if inconsistencies['wrong_cat'] > 0:
+ print("WARNING: Items with wrong category in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['wrong_cat'], round(inconsistencies['wrong_cat'] / item_count * 100, 2)))
+ if inconsistencies['missing_subcat'] > 0:
+ print("ERROR: Items with missing subcategory in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_subcat'], round(inconsistencies['missing_subcat'] / item_count * 100, 2)))
+ if inconsistencies['missing_waf'] > 0:
+ print("WARNING: Items with missing WAF in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_waf'], round(inconsistencies['missing_waf'] / item_count * 100, 2)))
+ if inconsistencies['wrong_waf'] > 0:
+ print("ERROR: Items with wrong WAF in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['wrong_waf'], round(inconsistencies['wrong_waf'] / item_count * 100, 2)))
+ if inconsistencies['missing_svc'] > 0:
+ print("WARNING: Items with missing service in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_svc'], round(inconsistencies['missing_svc'] / item_count * 100, 2)))
+ if inconsistencies['missing_link'] > 0:
+ print("WARNING: Items with missing link in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_link'], round(inconsistencies['missing_link'] / item_count * 100, 2)))
+ if inconsistencies['missing_sev'] > 0:
+ print("ERROR: Items with missing severity in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_sev'], round(inconsistencies['missing_sev'] / item_count * 100, 2)))
+ if inconsistencies['localized_link'] > 0:
+ print("WARNING: Items with localized link in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['localized_link'], round(inconsistencies['localized_link'] / item_count * 100, 2)))
+ return {
+ 'item_count': item_count,
+ 'inconsistencies': inconsistencies
+ }, guids
diff --git a/scripts/modules/cl_analyze_v2.py b/scripts/modules/cl_analyze_v2.py
new file mode 100644
index 000000000..265bcf6f5
--- /dev/null
+++ b/scripts/modules/cl_analyze_v2.py
@@ -0,0 +1,639 @@
+#######################################
+#
+# Module to analyze v2 checklist
+# folder structures.
+#
+#######################################
+
+# Dependencies
+import sys
+import yaml
+import json
+import os
+import datetime
+from pathlib import Path
+from collections import Counter
+
+# Function that returns true if a given reco matches the criteria specified by a label selector, a service selector and a WAF selector
+def reco_matches_criteria(reco, labels=None, services=None, resource_types=None, waf_pillars=None, sources=None, guids=None, names=None, arg=False):
+ # Check if the reco fulfills the criteria
+ # GUID
+ if guids:
+ guid_match = False
+ guids_lower = [x.lower() for x in guids]
+ if 'guid' in reco:
+ if reco['guid'].lower() in guids_lower:
+ return True
+ elif 'labels' in reco and 'guid' in reco['labels']:
+ if reco['labels']['guid'].lower() in guids_lower:
+ return True
+ else:
+ guid_match = True
+ # Names
+ if names:
+ name_match = False
+ names_lower = [x.lower() for x in names]
+ if 'name' in reco:
+ if reco['name'].lower() in names_lower:
+ return True
+ else:
+ name_match = True
+ # Labels
+ if labels:
+ label_match = False
+ if 'labels' in reco:
+ for key in labels.keys():
+ if key in reco['labels']:
+ if labels[key] == reco['labels'][key]:
+ label_match = True
+ else:
+ label_match = True
+ # Services
+ if services:
+ service_match = False
+ services = [x.lower() for x in services] # Transform to lower case for case-insensitive comparison
+ if 'none' in services:
+ service_match = ('services' not in reco)
+ if 'services' in reco:
+ for reco_service in reco['services']:
+ if reco_service.lower() in services:
+ service_match = True
+ else:
+ service_match = True
+ # Resource Types
+ if resource_types:
+ resource_type_match = False
+ resource_types = [x.lower() for x in resource_types] # Transform to lower case for case-insensitive comparison
+ if 'none' in resource_types:
+ resource_type_match = ('resourceTypes' not in reco)
+ if 'resourceTypes' in reco:
+ for reco_resource_type in reco['resourceTypes']:
+ if reco_resource_type.lower() in resource_types:
+ resource_type_match = True
+ else:
+ resource_type_match = True
+ # WAF
+ if waf_pillars:
+ waf_match = False
+ if 'none' in waf_pillars:
+ waf_match = ('waf' not in reco)
+ if 'waf' in reco:
+ if reco['waf'].lower() in waf_pillars:
+ waf_match = True
+ else:
+ waf_match = True
+ # Sources
+ if sources:
+ src_match = False
+ if 'none' in sources:
+ src_match = ('source' not in reco)
+ if 'source' in reco:
+ if 'type' in reco['source']:
+ if reco['source']['type'].lower() in sources:
+ src_match = True
+ else:
+ src_match = True
+ arg_match = ((not arg) or ('queries' in reco and 'arg' in reco['queries']))
+ # If no selector was provided, add all recos to the list
+ return (guid_match and name_match and label_match and service_match and resource_type_match and waf_match and arg_match and src_match)
+
+# Extracts certain recos based on include and optionally exclude selectors
+def filter_v2_recos(input_recos, include=None, exclude=None):
+ # The include/exclude parameters are dictionaries provided by the function get_object_selectors
+ if include:
+ waf_pillars = include['waf']
+ services = include['service']
+ resource_types = include['resourceType']
+ guids = include['guid']
+ names = include['name']
+ labels = include['label']
+ sources = include['source']
+ output_recos_include = [x for x in input_recos if reco_matches_criteria(x, waf_pillars=waf_pillars, services=services, resource_types=resource_types, guids=guids, names=names, sources=sources, labels=labels)]
+ # There might be exclude selectors too
+ if exclude:
+ waf_pillars = exclude['waf']
+ services = exclude['service']
+ resource_types = exclude['resourceType']
+ guids = exclude['guid']
+ names = include['name']
+ labels = exclude['label']
+ sources = exclude['source']
+ output_recos = [x for x in output_recos_include if not reco_matches_criteria(x, waf_pillars=waf_pillars, services=services, resource_types=resource_types, guids=guids, names=names, sources=sources, labels=labels)]
+ else:
+ output_recos = output_recos_include
+ return output_recos
+ else:
+ # If no include selectors specified, return nothing
+ return None
+
+# Opens a file with a text editor
+def open_file_with_editor(file, text_editor=None, verbose=False):
+ if text_editor:
+ if verbose: print("DEBUG: Opening file", file.resolve(), "with text editor", text_editor)
+ os.system(text_editor + ' ' + str(file.resolve()))
+ else:
+ if os.name == 'nt':
+ if verbose: print("DEBUG: Opening file", file.resolve(), "with default Windows text editor")
+ os.system(str(file.resolve()))
+ elif os.name == 'posix':
+ if os.getenv('EDITOR'):
+ if verbose: print("DEBUG: Opening file", file, "with default Linux text editor")
+ os.system('%s %s' % (os.getenv('EDITOR'), str(file.resolve())))
+ else:
+ print("ERROR: No text editor found in the EDITOR environment variable")
+ else:
+ print("ERROR: Unsupported OS", os.name)
+
+# Function that loads all of the found v2 YAML/JSON files into a single object
+# labels, services and waf_pillars are selectors with object structure
+# import_filepaths adds a new key to each reco with the file where it was found
+def load_v2_files(input_folder, format='yaml', labels=None, services=None, waf_pillars=None, sources=None, guids=None, names=None, arg=False, open_editor=False, text_editor=None, import_filepaths=False, verbose=False):
+ # Banner
+ if verbose: print("DEBUG: Loading v2 files from folder", input_folder)
+ # Look for files in the input folder
+ v2recos = []
+ # If the input folder exists
+ if os.path.exists(input_folder):
+ files = list(Path(input_folder).rglob( '*.*' ))
+ for file in files:
+ # JSON
+ if format == 'json':
+ if file.suffix == '.json':
+ # if verbose: print("DEBUG: Loading file", file)
+ try:
+ with open(file.resolve()) as f:
+ v2reco = json.safe_load(f)
+ except Exception as e:
+ print("ERROR: Error when loading JSON reco file {0} - {1}". format(file, str(e)))
+ if import_filepaths:
+ v2reco['filepath'] = str(file.resolve())
+ if reco_matches_criteria(v2reco, labels=labels, services=services, waf_pillars=waf_pillars, sources=sources, guids=guids, names=names, arg=arg):
+ if verbose: print("DEBUG: reco in file", file, "matches criteria.")
+ v2recos.append(v2reco)
+ if open_editor:
+ open_file_with_editor(file, text_editor=text_editor, verbose=verbose)
+ # YAML
+ if format == 'yaml' or format == 'yml':
+ if (file.suffix == '.yaml') or (file.suffix == '.yml'):
+ # if verbose: print("DEBUG: Loading file", file)
+ try:
+ with open(file.resolve()) as f:
+ v2reco = yaml.safe_load(f)
+ except Exception as e:
+ print("ERROR: Error when loading YAML reco file {0} - {1}". format(file, str(e)))
+ if import_filepaths:
+ v2reco['filepath'] = str(file.resolve())
+ if reco_matches_criteria(v2reco, labels=labels, services=services, waf_pillars=waf_pillars, sources=sources, guids=guids, names=names, arg=arg):
+ if verbose: print("DEBUG: reco in file", file, "matches criteria.")
+ v2recos.append(v2reco)
+ if open_editor:
+ open_file_with_editor(file, text_editor=text_editor, verbose=verbose)
+ # Return the object with all the v2 objects
+ return v2recos
+ else:
+ print("ERROR: Input folder", input_folder, "does not exist.")
+ return None
+
+# Return an object with some statistics about the v2 objects
+def v2_stats_from_object(v2recos, verbose=False):
+ # Banner
+ if verbose: print("DEBUG: Analyzing v2 objects...")
+ # Create a dictionary with the stats
+ stats = {}
+ if v2recos:
+ stats['total_items'] = len(v2recos)
+ else:
+ stats['total_items'] = 0
+ stats['severity'] = {}
+ stats['labels'] = {}
+ stats['services'] = {}
+ stats['waf'] = {}
+ stats['sources'] = {}
+ stats['resourceTypes'] = {}
+ stats['areas'] = {}
+
+ if v2recos:
+ # Find GUID and name duplicates
+ guid_list = [reco['labels']['guid'] for reco in v2recos if 'labels' in reco and 'guid' in reco['labels']]
+ guid_counts = Counter(guid_list)
+ stats['duplicate_guids'] = [item for item, count in guid_counts.items() if count > 1]
+ name_list = [reco['name'] for reco in v2recos if 'name' in reco]
+ name_counts = Counter(name_list)
+ stats['duplicate_names'] = [item for item, count in name_counts.items() if count > 1]
+ stats['arg'] = len([x for x in v2recos if 'queries' in x and 'arg' in x['queries']])
+ for reco in v2recos:
+ # Count the number of items per severity
+ if 'severity' in reco:
+ if reco['severity'] in stats['severity']:
+ stats['severity'][reco['severity']] += 1
+ else:
+ stats['severity'][reco['severity']] = 1
+ else:
+ if 'undefined' in stats['severity']:
+ stats['severity']['undefined'] += 1
+ else:
+ stats['severity']['undefined'] = 1
+ # Count the number of items per area
+ if 'labels' in reco:
+ for thislabelkey in reco['labels'].keys():
+ labeltext = thislabelkey + ":" + reco['labels'][thislabelkey]
+ if labeltext in stats['labels']:
+ stats['labels'][labeltext] += 1
+ else:
+ stats['labels'][labeltext] = 1
+ # Count the number of items per service
+ if 'services' in reco:
+ for service in reco['services']:
+ if service in stats['services']:
+ stats['services'][service] += 1
+ else:
+ stats['services'][service] = 1
+ else:
+ if 'undefined' in stats['services']:
+ stats['services']['undefined'] += 1
+ else:
+ stats['services']['undefined'] = 1
+ # Count the number of items per WAF pillar
+ if 'waf' in reco:
+ if reco['waf'] in stats['waf']:
+ stats['waf'][reco['waf']] += 1
+ else:
+ stats['waf'][reco['waf']] = 1
+ else:
+ if 'undefined' in stats['waf']:
+ stats['waf']['undefined'] += 1
+ else:
+ stats['waf']['undefined'] = 1
+ # Count the number of items per source
+ if 'source' in reco:
+ if 'type' in reco['source']:
+ if reco['source']['type'] in stats['sources']:
+ stats['sources'][reco['source']['type']] += 1
+ else:
+ stats['sources'][reco['source']['type']] = 1
+ # Resource types
+ if 'resourceTypes' in reco:
+ for resourceType in reco['resourceTypes']:
+ if resourceType in stats['resourceTypes']:
+ stats['resourceTypes'][resourceType] += 1
+ else:
+ stats['resourceTypes'][resourceType] = 1
+ # Areas / subareas
+ if 'area' in reco:
+ if 'subarea' in reco:
+ if reco['area'] + ' | ' + reco['subarea'] in stats['areas']:
+ stats['areas'][reco['area'] + ' | ' + reco['subarea']] += 1
+ else:
+ stats['areas'][reco['area'] + ' | ' + reco['subarea']] = 1
+ else:
+ if reco['area'] in stats['areas']:
+ stats['areas'][reco['area']] += 1
+ else:
+ stats['areas'][reco['area']] = 1
+ else:
+ if 'undefined' in stats['areas']:
+ stats['areas']['undefined'] += 1
+ else:
+ stats['areas']['undefined'] = 1
+ # Return the stats object
+ return stats
+ else:
+ print("ERROR: no recos to analyze for statistics.")
+ return stats
+
+# Return an object with some statistics about the v2 objects in a checklist
+def v2_stats_from_checklist(checklist_file, input_folder, format='yaml', verbose=False):
+ # Load the v2 objects from the checklist
+ v2recos = get_recos_from_checklist(checklist_file, input_folder, verbose)
+ if v2recos:
+ if verbose: print("DEBUG: {0} v2 objects extracted, calculating stats...".format(len(v2recos)))
+ # Get the stats from the v2 objects
+ stats = v2_stats_from_object(v2recos, verbose=verbose)
+ # Return the stats object
+ return stats
+ else:
+ print("ERROR: no recos could be loaded from checklist", checklist_file)
+ return None
+
+# Return an object with some statistics about the v2 objects in a folder
+def v2_stats_from_folder(input_folder, format='yaml', labels=None, services=None, waf_pillars=None, sources=None, verbose=False):
+ # Load the v2 objects from the folder
+ v2recos = load_v2_files(input_folder, format=format, labels=labels, services=services, waf_pillars=waf_pillars, sources=sources, verbose=verbose)
+ # Get the stats from the v2 objects
+ stats = v2_stats_from_object(v2recos, verbose=verbose)
+ # Return the stats object
+ return stats
+
+# Return an object with the recos fulfilling the specified criteria
+# ToDo: the parameter guid should be an array, to support a list of guids
+def get_recos(input_folder, labels=None, services=None, waf_pillars=None, sources=None, guids=None, names=None, arg=False, format='yaml', import_filepaths=False, verbose=False):
+ # Load the v2 objects from the folder
+ v2recos = load_v2_files(input_folder, format=format, import_filepaths=import_filepaths, verbose=verbose)
+ if v2recos:
+ # Create a list of recos that fulfill the criteria
+ recos = []
+ for reco in v2recos:
+ if reco_matches_criteria(reco, labels=labels, services=services, waf_pillars=waf_pillars, sources=sources, guids=guids, names=names, arg=arg):
+ recos.append(reco)
+ # Return the recos object
+ return recos
+ else:
+ print("ERROR: no recos could be loaded from folder", input_folder)
+
+def get_checklists(input_folder, verbose=False):
+ # Banner
+ if verbose: print("DEBUG: Loading v2 checklist files from folder", input_folder)
+ # Look for files in the input folder
+ v2cls = []
+ # If the input folder exists
+ if os.path.exists(input_folder):
+ files = list(Path(input_folder).rglob( '*.*' ))
+ for file in files:
+ if (file.suffix == '.yaml') or (file.suffix == '.yml'):
+ if verbose: print("DEBUG: Loading file", file)
+ try:
+ with open(file.resolve()) as f:
+ v2cl = yaml.safe_load(f)
+ except Exception as e:
+ print("ERROR: Error when loading YAML checklist file {0} - {1}". format(file, str(e)))
+ v2cls.append(v2cl)
+ # Return the object with all the v2 objects
+ return v2cls
+ else:
+ print("ERROR: Input folder", input_folder, "does not exist.")
+ return None
+
+# Return a single reco per GUID from a list of recos. The file can be identified by the file name
+# We could look for a file with the GUID in the name, but Linux file systems are case sensitive, plus
+# errors where the file name is incorrect would be hard to debug
+def get_reco_from_guid(input_folder, guid, verbose=False):
+ # Load the v2 objects from the folder
+ v2recos = load_v2_files(input_folder, guids=[guid], format='yaml', import_filepaths=True, verbose=verbose)
+ if v2recos:
+ # Return the reco object
+ return v2recos
+ else:
+ print("ERROR: no reco could be loaded from folder", input_folder)
+ return None
+
+# Return a single reco per GUID from a list of recos. The file can be identified by the file name
+# We could look for a file with the GUID in the name, but Linux file systems are case sensitive, plus
+# errors where the file name is incorrect would be hard to debug
+def get_reco_from_name(input_folder, reco_name, verbose=False):
+ # Load the v2 objects from the folder
+ v2recos = load_v2_files(input_folder, names=[reco_name], format='yaml', import_filepaths=True, verbose=verbose)
+ if v2recos:
+ # Return the reco object
+ return v2recos
+ else:
+ print("ERROR: no reco could be loaded from folder", input_folder)
+ return None
+
+
+# Update recommendations refreshing the reviewed date to the current date
+# Only updates recommendations with source type 'revcl'
+def refresh_reviewed(recos, verbose=False):
+ for reco in recos:
+ if 'source' in reco:
+ if 'type' in reco['source']:
+ if reco['source']['type'] == 'revcl':
+ if verbose: print("DEBUG: Refreshing reviewed date for reco", reco['guid'], "to current date", datetime.date.today().strftime("%B %d, %Y"))
+ reco['reviewed'] = datetime.date.today().strftime("%B %d, %Y")
+ return recos
+
+# Function to modify yaml.dump for multiline strings, see https://github.com/yaml/pyyaml/issues/240
+def str_presenter(dumper, data):
+ if data.count('\n') > 0:
+ data = "\n".join([line.rstrip() for line in data.splitlines()]) # Remove any trailing spaces, then put it back together again
+ return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
+ return dumper.represent_scalar('tag:yaml.org,2002:str', data)
+
+# Print in screen a single v2 recommendation
+def print_reco(reco):
+ # Add representer to yaml for multiline strings, see https://github.com/yaml/pyyaml/issues/240
+ yaml.add_representer(str, str_presenter)
+ yaml.representer.SafeRepresenter.add_representer(str, str_presenter) # to use with safe_dum
+ print(yaml.safe_dump(reco, default_flow_style=False, sort_keys=False))
+
+# Print in screen a v2 recommendation in one line with fixed width columns
+def print_recos(recos, show_labels=False, show_arg=False):
+ print("{0:<37} {1:<80} {2:<30} {3:<15}".format('NAME', 'TITLE', 'RESOURCE TYPE', 'WAF'), end="")
+ if show_labels:
+ print("{0:<40}".format("LABELS"), end="")
+ if show_arg:
+ print("{0:<40}".format("AZURE RESOURCE GRAPH QUERY"), end="")
+ print()
+ print("{0:<37} {1:<80} {2:<30} {3:<15}".format('====', '=====', '=============', '==='), end="")
+ if show_labels:
+ print("{0:<40}".format("======"), end="")
+ if show_arg:
+ print("{0:<40}".format("=========================="), end="")
+ print()
+ for reco in recos:
+ name=reco['name'] if 'name' in reco else ''
+ title=reco['title'] if 'title' in reco else ''
+ resource_type=reco['resourceTypes'][0] if 'resourceTypes' in reco and len(reco['resourceTypes']) > 0 else ''
+ waf=reco['waf'] if 'waf' in reco else ''
+ print("{0:<37} {1:<80} {2:<30} {3:<15}".format(name[:37], title[:79], resource_type[:29], waf), end="")
+ if show_labels:
+ if 'labels' in reco:
+ print("{0:<40}".format(str(reco['labels'])), end="")
+ if show_arg:
+ if 'queries' in reco and 'arg' in reco['queries']:
+ print("{0:<40}".format(reco['queries']['arg'][:39]), end="")
+ print()
+ print(" {0} recommendations listed".format(len(recos)))
+
+# Get selectors from a checklist file in YAML format
+# Returns the label, service and WAF selectors, and the variables, in this order
+def get_object_selectors(checklist_object, verbose=False):
+ # Label
+ if 'labelSelector' in checklist_object:
+ labelSelector = checklist_object['labelSelector']
+ for key in labelSelector.keys():
+ if verbose: print ("DEBUG: Label selector found:", key + ":" + labelSelector[key])
+ else:
+ labelSelector = None
+ # Service
+ if 'serviceSelector' in checklist_object:
+ serviceSelector = checklist_object['serviceSelector']
+ for service in serviceSelector:
+ if verbose: print ("DEBUG: Service selector found:", service)
+ else:
+ serviceSelector = None
+ # ResourceType
+ if 'resourceTypeSelector' in checklist_object:
+ resourceTypeSelector = checklist_object['resourceTypeSelector']
+ for resourceType in resourceTypeSelector:
+ if verbose: print ("DEBUG: resourceType selector found:", resourceType)
+ else:
+ resourceTypeSelector = None
+ # WAF
+ if 'wafSelector' in checklist_object:
+ wafSelector = checklist_object['wafSelector']
+ for waf in wafSelector:
+ if verbose: print ("DEBUG: WAF selector found:", waf)
+ else:
+ wafSelector = None
+ # GUID
+ if 'guidSelector' in checklist_object:
+ guidSelector = checklist_object['guidSelector']
+ for guid in guidSelector:
+ if verbose: print ("DEBUG: GUID selector found:", guid)
+ else:
+ guidSelector = None
+ # Names
+ if 'nameSelector' in checklist_object:
+ nameSelector = checklist_object['nameSelector']
+ for name in nameSelector:
+ if verbose: print ("DEBUG: name selector found:", name)
+ else:
+ nameSelector = None
+ # Source
+ if 'sourceSelector' in checklist_object:
+ sourceSelector = checklist_object['sourceSelector']
+ for source in sourceSelector:
+ if verbose: print ("DEBUG: source selector found:", source)
+ else:
+ sourceSelector = None
+ # Return the selectors
+ return {
+ 'label': labelSelector,
+ 'source': sourceSelector,
+ 'service': serviceSelector,
+ 'waf': wafSelector,
+ 'resourceType': resourceTypeSelector,
+ 'guid': guidSelector,
+ 'name': nameSelector
+ }
+
+# Loads a checklist file in YAML format
+def get_checklist_object(checklist_file, verbose=False):
+ # Load the checklist file
+ try:
+ if verbose: print("DEBUG: Loading checklist file", checklist_file)
+ with open(checklist_file) as f:
+ checklist = yaml.safe_load(f)
+ return checklist
+ except Exception as e:
+ print("ERROR: Error when loading checklist file {0} - {1}". format(checklist_file, str(e)))
+ return None
+
+# Return v2 recos that match the selectors included in a checklist file
+def get_recos_from_checklist(checklist_file, input_folder, import_filepaths=False, verbose=False):
+ # Get checklist object and full reco list
+ checklist_v2 = get_checklist_object(checklist_file, verbose)
+ if not checklist_v2:
+ print("ERROR: Checklist file could not be loaded.")
+ return None
+ if verbose: print("DEBUG: Loading recos from folder", input_folder)
+ recos_v2_full = get_recos(input_folder, import_filepaths=import_filepaths, verbose=False) # Loading all recos, verbose not needed
+ recos_v2 = []
+ # Selectors can be at the checklist root, in an area, or a subarea
+ if 'include' in checklist_v2:
+ root_include_selectors = get_object_selectors(checklist_v2['include'])
+ if 'exclude' in checklist_v2:
+ root_exclude_selectors = get_object_selectors(checklist_v2['exclude'])
+ else:
+ root_exclude_selectors = None
+ # Filter all recos according to the selectors
+ root_recos_v2 = filter_v2_recos(recos_v2_full, include=root_include_selectors, exclude=root_exclude_selectors)
+ recos_v2 += root_recos_v2
+ if verbose: print("DEBUG: {0} recos extracted at root level, reco list at {1} elements".format(len(root_recos_v2), len(recos_v2)))
+ if 'areas' in checklist_v2:
+ for area in checklist_v2['areas']:
+ if 'name' in area:
+ if 'include' in area:
+ area_include_selectors = get_object_selectors(area['include'])
+ if 'exclude' in area:
+ area_exclude_selectors = get_object_selectors(area['exclude'])
+ else:
+ area_exclude_selectors = None
+ # Filter all recos according to the selectors
+ area_recos_v2 = filter_v2_recos(recos_v2_full, include=area_include_selectors, exclude=area_exclude_selectors)
+ recos_v2 += [x | {'area': area['name']} for x in area_recos_v2]
+ if verbose: print("DEBUG: {0} recos extracted at area {1}, reco list at {2} elements".format(len(area_recos_v2), area['name'], len(recos_v2)))
+ if 'subareas' in area:
+ for subarea in area['subareas']:
+ if 'name' in subarea:
+ if 'include' in subarea:
+ subarea_include_selectors = get_object_selectors(subarea['include'])
+ if 'exclude' in subarea:
+ subarea_exclude_selectors = get_object_selectors(subarea['exclude'])
+ else:
+ subarea_exclude_selectors = None
+ # Filter all recos according to the selectors
+ subarea_recos_v2 = filter_v2_recos(recos_v2_full, include=subarea_include_selectors, exclude=subarea_exclude_selectors)
+ recos_v2 += [x | {'area': area['name'], 'subarea': subarea['name']} for x in subarea_recos_v2]
+ if verbose: print("DEBUG: {0} recos extracted at area '{1}', subarea '{2}', reco list at {3} elements".format(len(subarea_recos_v2), area['name'], subarea['name'], len(recos_v2)))
+ else:
+ if verbose: print("WARNING: skipping subarea '{0}' in area '{1}, no include specified.".format(subarea['name'], area['name']))
+ else:
+ if verbose: print("WARNING: Skipping subarea in area {0}, no name specified.".format(area['name']))
+ else:
+ if verbose: print("WARNING: Skipping area, no name specified.")
+ # Return the recos object
+ return recos_v2
+
+# Function that finds the file with a specific name and deletes it
+def delete_v2_reco(input_folder, reco_name, format='yaml', verbose=False):
+ # Whether the reco was found
+ reco_found = False
+ # If the input folder exists
+ if os.path.exists(input_folder):
+ files = list(Path(input_folder).rglob( '*.*' ))
+ for file in files:
+ # JSON
+ if format == 'json':
+ if file.suffix == '.json':
+ # if verbose: print("DEBUG: Loading file", file)
+ try:
+ with open(file.resolve()) as f:
+ v2reco = json.safe_load(f)
+ f.close()
+ if 'name' in v2reco:
+ if v2reco['name'].lower() == reco_name.lower():
+ if verbose: print('DEBUG: Deleting reco', reco_name, 'in file', file)
+ os.remove(file)
+ reco_found = True
+ except Exception as e:
+ print("ERROR: Error when loading reco file {0} - {1}". format(file, str(e)))
+ # YAML
+ if format == 'yaml' or format == 'yml':
+ if (file.suffix == '.yaml') or (file.suffix == '.yml'):
+ # if verbose: print("DEBUG: Loading file", file)
+ try:
+ with open(file.resolve()) as f:
+ v2reco = yaml.safe_load(f)
+ f.close()
+ if 'name' in v2reco:
+ if v2reco['name'].lower() == reco_name.lower():
+ if verbose: print('DEBUG: deleting reco', reco_name, 'in file', file)
+ os.remove(file)
+ reco_found = True
+ except Exception as e:
+ print("ERROR: Error when loading reco file {0} - {1}". format(file, str(e)))
+ # Return the object with all the v2 objects
+ return reco_found
+
+# Function that finds the file with a specific name and deletes it
+def delete_file(file_name, verbose=False):
+ if os.path.exists(file_name):
+ if verbose: print("DEBUG: Deleting file", file_name)
+ try:
+ os.remove(file_name)
+ except Exception as e:
+ print("ERROR: Error when deleting file {0} - {1}". format(file_name, str(e)))
+ else:
+ print("ERROR: File", file_name, "does not exist.")
+
+# Function that returns a reco name provided its GUID. It takes as argument an object with the full list of recos
+def get_reco_name_from_guid(recos, guid):
+ for reco in recos:
+ if 'labels' in reco and 'guid' in reco['labels']:
+ if reco['labels']['guid'].lower() == guid.lower():
+ if 'name' in reco:
+ return reco['name']
+ else:
+ return None
+ return None
diff --git a/scripts/modules/cl_arg.py b/scripts/modules/cl_arg.py
new file mode 100644
index 000000000..606905a06
--- /dev/null
+++ b/scripts/modules/cl_arg.py
@@ -0,0 +1,50 @@
+#######################################
+#
+# Module to run ARG queries
+#
+#######################################
+
+# Dependencies
+import os
+from azure.identity import DefaultAzureCredential
+from azure.mgmt.resourcegraph import ResourceGraphClient
+from azure.mgmt.resource import ResourceManagementClient
+from azure.mgmt.resourcegraph.models import *
+
+
+# Function that takes an array of recos as argument and runs the ARG query specified in each of the elements (if existing)
+# Code from https://github.com/Azure-Samples/azure-samples-python-management/blob/main/samples/resourcegraph/resources_query.py
+# ToDo: add mgmt group support
+def run_arg_queries(reco_array, subscription_id=None, verbose=False):
+ # Initialize the ARG client
+ if not subscription_id:
+ subscription_id = os.environ.get("SUBSCRIPTION_ID", None)
+ # Create client. For other authentication approaches, please see: https://pypi.org/project/azure-identity/
+ if verbose: print("DEBUG: Running ARG queries for subscription {0}".format(subscription_id))
+ arg_client = ResourceGraphClient(
+ credential=DefaultAzureCredential(),
+ subscription_id=subscription_id
+ )
+ # Initialize the list of results
+ results = []
+ # Iterate over all recos
+ for reco in reco_array:
+ # If the reco has a query, run it
+ if 'queries' in reco:
+ if 'arg' in reco['queries']:
+ # Run the query
+ if verbose:
+ print("DEBUG: Running ARG query for reco {0}: {1}".format(reco['guid'], reco['queries']['arg']))
+ query = QueryRequest(
+ query=reco['queries']['arg'],
+ subscriptions=[subscription_id],
+ options=QueryRequestOptions(
+ result_format=ResultFormat.object_array
+ )
+ )
+ result = arg_client.resources(query)
+ # Append the result to the list
+ if 'data' in result:
+ results.append({"guid": reco['guid'], "title": reco['title'], "argResult": result['data']})
+ # Return the list of results
+ return results
\ No newline at end of file
diff --git a/scripts/modules/cl_v1tov2.py b/scripts/modules/cl_v1tov2.py
new file mode 100644
index 000000000..510623792
--- /dev/null
+++ b/scripts/modules/cl_v1tov2.py
@@ -0,0 +1,469 @@
+#######################################
+#
+# Module to convert v1 checklist files
+# to v2.
+#
+#######################################
+
+# Dependencies
+import sys
+import yaml
+import json
+import os
+from pathlib import Path
+from . import cl_analyze_v2
+
+# Get the standard service name from the service dictionary
+def get_standard_service_name(service_name, service_dictionary=None):
+ svc_match_found = False
+ if service_dictionary:
+ for svc in service_dictionary:
+ if 'names' in svc and len(svc['names']) > 0:
+ svc_names = [x.lower() for x in svc['names']] # Case insensitive comparison
+ if service_name.lower() in svc_names:
+ svc_match_found = True
+ return svc['service']
+ else:
+ print("WARNING: service dictionary entry without names field:", str(svc))
+ if not svc_match_found:
+ return service_name
+ else:
+ return service_name
+
+# Get the resource type from the service dictionary
+# Return None if no match
+def get_resource_type_name(service_name, service_dictionary=None):
+ svc_match_found = False
+ if service_dictionary:
+ for svc in service_dictionary:
+ if service_name in svc['names']:
+ svc_match_found = True
+ if 'arm' in svc:
+ return svc['arm']
+ if not svc_match_found:
+ return None
+ else:
+ return None
+
+# Function to modify yaml.dump for multiline strings, see https://github.com/yaml/pyyaml/issues/240
+def str_presenter(dumper, data):
+ if data.count('\n') > 0:
+ data = "\n".join([line.rstrip() for line in data.splitlines()]) # Remove any trailing spaces, then put it back together again
+ return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
+ return dumper.represent_scalar('tag:yaml.org,2002:str', data)
+
+# Function that returns a data structure with the objects in v2 format
+def generate_v2(input_file, text_analytics_endpoint=None, text_analytics_key=None, service_dictionary=None, source_type=None, labels=None, id_label=None, cat_label=None, subcat_label=None, existing_v2recos=None, max_items=0, default_severity=1, verbose=False):
+ if verbose: print("DEBUG: Converting file", input_file)
+ if verbose and not service_dictionary: print("DEBUG: unless a service dictionary is supplied, no service or resource type mappings will be done.")
+ # Default values for non-mandatory labels
+ if not id_label: id_label = 'id'
+ if not cat_label: cat_label = 'area'
+ if not subcat_label: subcat_label = 'subarea'
+ # If existing v2 reco folder specified, load them up (will be used to prevent duplicate names)
+ if not existing_v2recos:
+ print("WARNING: No existing v2 recos provided, duplicate reco names might be generated.")
+ # Load v1 recos
+ try:
+ with open(input_file) as f:
+ checklist = json.load(f)
+ except Exception as e:
+ print("ERROR: Error when processing JSON file, nothing changed", input_file, ":", str(e))
+ return None
+ # Process the v1 recos
+ if 'items' in checklist:
+ if verbose: print("DEBUG: {0} items found in JSON file {1}".format(len(checklist['items']), input_file))
+ # Create a list of objects in v2 format
+ v2recos = []
+ reco_counter = 0
+ for item in checklist['items']:
+ # Check if we reached the maximum number of items
+ reco_counter += 1
+ if max_items > 0 and reco_counter > max_items:
+ if verbose: print("DEBUG: Maximum number of items reached, stopping.")
+ break
+ # Note that the order in which items are added to the dictionary is important, since yaml.dump is configured to not sort the keys
+ v2reco = {}
+ # Source (subfields file, type and timestamp). First we add the information to the original v1 reco, later we will add it to the new v2 reco
+ if 'source' in item:
+ if item['source'].lower() == 'aprl' or item['source'].lower() == 'wafsg':
+ item['source'] = {'type': item['source'].lower()}
+ elif '.yaml' in item['source']: # If it was imported from YAML it is coming from APRL
+ item['source'] = {'type': 'aprl'}
+ elif '.md' in item['source']: # If it was imported from Markdown it is coming from a WAF service guide
+ item['source'] = {'type': 'wafsg'}
+ elif 'sourceType' in item:
+ item['source'] = {'type': item['sourceType'].lower()}
+ if 'sourceFile' in item:
+ item['source']['file'] = item['sourceFile']
+ else:
+ item['source'] = {'type': 'revcl', 'file': input_file}
+ # If the source type was specified as a parameter, use it
+ if source_type:
+ item['source']['type'] = source_type
+ # Timestamp
+ if 'timestamp' in item:
+ item['source']['timestamp'] = item['timestamp']
+ # If text analytics endpoint and key were supplied, try to guess a reco name
+ if text_analytics_endpoint and text_analytics_key:
+ v2reco['name'] = guess_reco_name(item, text_analytics_endpoint, text_analytics_key, version=1, key_phrase_no=2, verbose=verbose)
+ else:
+ v2reco['name'] = ''
+ # If we have existing v2 recos, append an integer identifier until the name is unique
+ if v2reco['name'] and existing_v2recos:
+ i = 0
+ while True:
+ # We look for recos with the same name and different GUID
+ existing_v2recos_same_name = [x['name'].lower() for x in existing_v2recos if ((x['name'].lower() == v2reco['name'].lower()) and (('labels' in x) and ('guid' in x['labels']) and ('guid' in item) and (x['labels']['guid'] != item['guid'])))]
+ if len(existing_v2recos_same_name) > 0:
+ i += 1
+ v2reco['name'] = v2reco['name'] + '-' + str(i)
+ else:
+ break
+ # Title/description
+ if 'text' in item:
+ v2reco['title'] = item['text']
+ if 'description' in item:
+ v2reco['description'] = item['description']
+ # Source
+ v2reco['source'] = item['source']
+ # Services
+ # if 'service' in item:
+ # v2reco['services'] = []
+ # v2reco['services'].append(get_standard_service_name(item['service'], service_dictionary=service_dictionary))
+ # Resource types
+ v2reco['resourceTypes'] = []
+ if 'recommendationResourceType' in item:
+ v2reco['resourceTypes'].append(item['recommendationResourceType'])
+ else: # Else try to get the resourceType from the service dictionary
+ if 'service' in item:
+ resource_type = get_resource_type_name(item['service'], service_dictionary=service_dictionary)
+ if resource_type:
+ v2reco['resourceTypes'].append(resource_type.lower())
+ if verbose: print("DEBUG: resource type {0} identified for service {1}.".format(resource_type, item['service']))
+ else:
+ if verbose: print("WARNING: not able to get resource type from service", item['service'])
+ # WAF
+ if 'waf' in item:
+ # Normalize WAF
+ if 'operation' in item['waf'].lower():
+ v2reco['waf'] = 'Operations'
+ elif 'reliability' in item['waf'].lower() or 'resiliency' in item['waf'].lower():
+ v2reco['waf'] = 'Reliability'
+ elif 'cost' in item['waf'].lower():
+ v2reco['waf'] = 'Cost'
+ elif 'performance' in item['waf'].lower():
+ v2reco['waf'] = 'Performance'
+ elif 'security' in item['waf'].lower():
+ v2reco['waf'] = 'Security'
+ else:
+ if verbose: print("DEBUG: WAF value {0} in file {1} unknown".format(input_file, item['waf']))
+ # Severity
+ if 'severity' in item:
+ if item['severity'].lower() == 'high':
+ v2reco['severity'] = 0
+ elif item['severity'].lower() == 'medium':
+ v2reco['severity'] = 1
+ elif item['severity'].lower() == 'low':
+ v2reco['severity'] = 2
+ else:
+ v2reco['severity'] = default_severity
+ # Labels
+ v2reco['labels'] = {}
+ # GUID (we put it in a label)
+ if 'guid' in item:
+ v2reco['labels']['guid'] = item['guid']
+ # else:
+ # print("ERROR: No GUID found for reco in file", input_file)
+ # continue
+ # Categories, Subcategories, IDs
+ if 'category' in item:
+ v2reco['labels'][cat_label] = item['category']
+ if 'subcategory' in item:
+ v2reco['labels'][subcat_label] = item['subcategory']
+ if 'id' in item:
+ v2reco['labels'][id_label] = item['id']
+ # Links
+ v2reco['links'] = []
+ if 'link' in item:
+ v2reco['links'].append({'type': 'docs', 'url': item['link']})
+ if 'training' in item:
+ v2reco['links'].append({'type': 'docs', 'url': item['training']})
+ # If additional labels were specified as parameter, add them to the object
+ if labels:
+ for key in labels.keys():
+ v2reco['labels'][key] = labels[key]
+ # Queries
+ v2reco['queries'] = {}
+ if 'graph' in item:
+ v2reco['queries'] = {}
+ v2reco['queries']['arg'] = item['graph']
+ # Add to the list of v2 objects
+ v2recos.append(v2reco)
+ existing_v2recos.append(v2reco) # Add to the list of existing v2 recos to prevent duplicate names
+ return v2recos
+ else:
+ print("ERROR: No items found in JSON file", input_file)
+ return None
+
+# Function that removes empty directories
+def remove_empty_dirs(path):
+ for root, dirnames, filenames in os.walk(path, topdown=False):
+ for dirname in dirnames:
+ remove_empty_dirs(os.path.realpath(os.path.join(root, dirname)))
+
+# Function that stores an object generated by generate_v2 in files in the output folder
+def store_v2(output_folder, checklist, output_format='yaml', existing_v2recos=None, overwrite=False, verbose=False):
+ # If parameter existing_v2recos is not provided, show warning
+ if not existing_v2recos:
+ print("WARNING: No existing v2 recos provided, duplicate reco names might be generated.")
+ # Folder fo the services-related recos (set to None for no subfolder)
+ services_folder = 'Services'
+ if verbose: print("DEBUG: Storing v2 objects in folder", output_folder)
+ # Create the output folder if it doesn't exist
+ if not os.path.exists(output_folder):
+ os.makedirs(output_folder)
+ # Add representer to yaml for multiline strings, see https://github.com/yaml/pyyaml/issues/240
+ yaml.add_representer(str, str_presenter)
+ yaml.representer.SafeRepresenter.add_representer(str, str_presenter) # to use with safe_dum
+ # Store each object in a separate YAML file
+ item_count = 0
+ for item in checklist:
+ # Use the reco's name as the file name, otherwise the guid
+ item_count += 1
+ if 'name' in item:
+ file_name = item['name']
+ elif 'guid' in item:
+ file_name = item['guid']
+ elif 'labels' in item and 'guid' in item['labels']:
+ file_name = item['labels']['guid']
+ else:
+ file_name = None
+ if file_name:
+ # Append resource type (pick the first one) and WAF pillar to output folder if available
+ this_output_folder = output_folder
+ if 'resourceTypes' in item:
+ if len(item['resourceTypes']) > 0:
+ service_folder_name = item['resourceTypes'][0].replace(" ", "")
+ service_folder_name = service_folder_name.replace(".", "")
+ service_folder_name = service_folder_name.replace('"', "")
+ service_folder_name = service_folder_name.replace("'", "")
+ service_folder_name = service_folder_name.replace("/", "-")
+ if services_folder:
+ this_output_folder = os.path.join(output_folder, services_folder, service_folder_name)
+ else:
+ this_output_folder = os.path.join(output_folder, service_folder_name)
+ else:
+ this_output_folder = os.path.join(output_folder, "Practices")
+ if verbose: print("DEBUG: No services found for reco", item['name'])
+ else:
+ this_output_folder = os.path.join(output_folder, "Practices")
+ if verbose: print("DEBUG: 'resourceTypes' field missing from reco", item['name'])
+ if 'waf' in item:
+ this_output_folder = os.path.join(this_output_folder, item['waf'].replace(" ", ""))
+ # Create the output folder if it doesn't exist
+ if not os.path.exists(this_output_folder):
+ os.makedirs(this_output_folder)
+ # Delete any existing file with the same GUID (if we have a GUID)
+ if existing_v2recos and 'labels' in item and 'guid' in item['labels']:
+ recos_with_same_guid = [x for x in existing_v2recos if 'filepath' in x and 'labels' in x and 'guid' in x['labels'] and x['labels']['guid'] == item['labels']['guid']]
+ if verbose:
+ print("DEBUG: Deleting {0} existing recos with GUID {1}".format(len(recos_with_same_guid), item['labels']['guid']))
+ for existing_reco in recos_with_same_guid:
+ # Delete filename specified in the filepath attribute
+ if 'filepath' in existing_reco:
+ if os.path.exists(existing_reco['filepath']):
+ if verbose:
+ print("DEBUG: Deleting existing reco at", existing_reco['filepath'])
+ os.remove(existing_reco['filepath'])
+ else:
+ print("WARNING: reco not found at", existing_reco['filepath'])
+ # Delete any existing file for the same name (it might be in a different folder)
+ # We can do this because the name is unique
+ if overwrite and existing_v2recos and 'name' in item:
+ # cl_analyze_v2.delete_v2_reco(output_folder, item['name'], output_format, verbose=verbose)
+ recos_with_same_name = [x for x in existing_v2recos if x['name'] == item['name'] and 'filepath' in x]
+ if verbose:
+ print("DEBUG: Deleting {0} existing recos with name {1}".format(len(recos_with_same_name), item['name']))
+ for existing_reco in recos_with_same_name:
+ # Delete filename specified in the filepath attribute
+ if 'filepath' in existing_reco:
+ if os.path.exists(existing_reco['filepath']):
+ if verbose:
+ print("DEBUG: Deleting existing reco at", existing_reco['filepath'])
+ os.remove(existing_reco['filepath'])
+ # Export JSON or YAML, depending on the output format
+ if output_format in ['yaml', 'yml']:
+ output_file = os.path.join(this_output_folder, file_name + ".yaml")
+ # If the new file exists, append a number to the name
+ i = 1
+ while os.path.exists(output_file):
+ output_file = os.path.join(this_output_folder, file_name + "-" + str(i) + ".yaml")
+ i += 1
+ # Create the new file
+ try:
+ with open(output_file, 'w') as f:
+ yaml.dump(item, f, sort_keys=False)
+ if verbose: print("DEBUG: Stored YAML recommendation {0}/{1} in file {2}.".format(item_count, len(checklist), output_file))
+ except Exception as e:
+ print("ERROR: Error when writing YAML file", output_file, ":", str(e))
+ # JSON not finished (not using JSON for now)
+ elif output_format == 'json':
+ output_file = os.path.join(this_output_folder, file_name + ".json")
+ # If the new file exists, append a number to the name
+ i = 1
+ while os.path.exists(output_file):
+ output_file = os.path.join(this_output_folder, file_name + "-" + str(i) + ".json")
+ i += 1
+ # Create the new file
+ with open(output_file, 'w') as f:
+ json.dump(item, f, sort_keys=False)
+ else:
+ print("ERROR: Unsupported output format", output_format)
+ sys.exit(1)
+ else:
+ print("ERROR: No file name could be derived for recommendation '{0}' (missing name and GUID), skipping. Full reco object: '{1}'".format(item['title'], str(item)))
+ continue
+ # Clean up all empty folders that might exist in the output folder, recursively
+ if overwrite:
+ try:
+ if verbose: print("DEBUG: Removing empty directories in output folder", output_folder)
+ [os.removedirs(p) for p in Path(output_folder).glob('**/*') if p.is_dir() and len(list(p.iterdir())) == 0]
+ except Exception as e:
+ print("ERROR: Error when removing empty directories in output folder", output_folder, ":", str(e))
+
+# Function that guesses a reco name from a reco v2 object by querying Azure Cognitive Services for key phrases
+# The guessed name will be a concatenation of key phrases. The parameter key_phrase_no specifies how many key phrases to use (default is 1)
+def guess_reco_name(reco, cognitive_services_endpoint, cognitive_services_key, key_phrase_no=1, version=2, verbose=False):
+ # Dependencies
+ from azure.ai.textanalytics import TextAnalyticsClient
+ from azure.core.credentials import AzureKeyCredential
+ # Put the reco's GUID in a variable
+ if 'guid' in reco:
+ reco_guid = reco['guid']
+ elif 'labels' in reco and 'guid' in reco['labels']:
+ reco_guid = reco['labels']['guid']
+ else:
+ reco_guid = None
+ # Authenticate
+ ta_credential = AzureKeyCredential(cognitive_services_key)
+ text_analytics_client = TextAnalyticsClient(
+ endpoint=cognitive_services_endpoint,
+ credential=ta_credential)
+ # Prepare the document (either the title, the description or both), depending on the version being used (the field names vary)
+ if version == 1:
+ if 'text' in reco and 'description' in reco:
+ documents = [reco['text'] + '. ' + reco['description']]
+ elif 'text' in reco:
+ documents = [reco['text']]
+ elif 'description' in reco:
+ documents = [reco['description']]
+ else:
+ if verbose: print("ERROR: No title or description found for reco {0} that can be used to derive name".format(reco_guid))
+ return ''
+ elif version == 2:
+ if 'title' in reco and 'description' in reco:
+ documents = [reco['title'] + '. ' + reco['description']]
+ elif 'title' in reco:
+ documents = [reco['title']]
+ elif 'description' in reco:
+ documents = [reco['description']]
+ else:
+ if verbose: print("ERROR: No title or description found for reco {0} that can be used to derive name".format(reco_guid))
+ return ''
+ else:
+ print("ERROR: Unsupported version for name guessing", version)
+ # Extract key phrases
+ if verbose: print("DEBUG: Guessing recommendation name for reco '{0}'. Using endpoint {2} and string '{1}'...".format(reco_guid, documents[0], cognitive_services_endpoint))
+ try:
+ response = text_analytics_client.extract_key_phrases(documents = documents)[0]
+ except Exception as err:
+ print("Encountered exception. {}".format(err))
+ return None
+ # Return first key phrase(s) as the guessed name formated without blanks
+ if not response.is_error:
+ # Concatenate the first n key phrases
+ i = 0
+ guessed_name = ''
+ while i < key_phrase_no and i < len(response.key_phrases):
+ guessed_name += response.key_phrases[i].title()
+ i += 1
+ # Remove non alphanumeric characters
+ guessed_name = ''.join(c for c in guessed_name if c.isalpha())
+ # Remove non-ASCII characters
+ guessed_name = ''.join(c for c in guessed_name if c.isascii())
+ # The source is used as prefix, if there is one
+ if 'source' in reco and 'type' in reco['source']:
+ guessed_name = reco['source']['type'].lower() + '-' + guessed_name
+ else:
+ if verbose:
+ print("WARNING: No source type found for reco", reco_guid)
+ if verbose:
+ print("DEBUG: Key Phrases for reco:", str(response.key_phrases), '- Guessed name:', guessed_name)
+ return guessed_name
+ else:
+ print(response.id, response.error)
+ return None
+
+# Load a v1 checklist and generate a v2 checklist YAML file
+# If use_names = True, it will add a name selector instead of a GUID selector. Recos folder needs to be specified
+# Try to match the subarea sections with services if possible, if not use a guid selector
+def checklist_v1_to_v2(input_file, output_file, use_names=False, v2recos_folder=None, verbose=None):
+ # Load the v1 checklist
+ try:
+ if verbose: print("DEBUG: Loading v1 checklist from file", input_file)
+ with open(input_file) as f:
+ checklist_v1 = json.load(f)
+ except Exception as e:
+ print("ERROR: Error when processing JSON file", input_file, ":", str(e))
+ return None
+ # If use_names is True, load the v2 recos
+ if use_names:
+ if not v2recos_folder:
+ print("ERROR: Recos folder needs to be specified when using names")
+ return None
+ if verbose: print("DEBUG: Loading v2 recos from folder {0}, since using names...".format(v2recos_folder))
+ v2recos = cl_analyze_v2.load_v2_files(v2recos_folder, verbose=False)
+ if verbose: print("DEBUG: {0} v2 recos loaded.".format(len(v2recos)))
+ # Create the v2 checklist
+ checklist_v2 = {}
+ # Add the metadata
+ if 'metadata' in checklist_v1:
+ if 'name' in checklist_v1['metadata']:
+ checklist_v2['name'] = checklist_v1['metadata']['name']
+ else:
+ checklist_v2['name'] = 'Name missing from checklist YAML file'
+ else:
+ checklist_v2['name'] = 'Name missing from checklist YAML file'
+ # Create a dictionary with areas/subareas
+ area_list = list(set([x['category'] for x in checklist_v1['items'] if 'category' in x]))
+ if verbose: print("DEBUG: {0} areas found in v1 checklist.".format(len(area_list)))
+ area_dict = {}
+ for area in area_list:
+ area_dict[area] = list(set([x['subcategory'] for x in checklist_v1['items'] if ('subcategory' in x) and ('category' in x) and (x['category'] == area)]))
+ if verbose: print("DEBUG: {0} subareas found in area {1}.".format(len(area_dict[area]), area))
+ # For each area/subarea, add a guid selector
+ checklist_v2['areas'] = []
+ for area in area_dict.keys():
+ checklist_v2_area_object = {'name': area, 'subareas': []}
+ for subarea in area_dict[area]:
+ guids = [x['guid'] for x in checklist_v1['items'] if ('guid' in x) and ('category' in x) and (x['category'] == area) and ('subcategory' in x) and (x['subcategory'] == subarea)]
+ if verbose: print("DEBUG: {0} GUIDs found in area {1} and subarea {2}.".format(len(guids), area, subarea))
+ if use_names:
+ names = [cl_analyze_v2.get_reco_name_from_guid(v2recos, x) for x in guids]
+ names = [x for x in names if x] # Remove empty names
+ if verbose: print("DEBUG: {0} names found in area {1} and subarea {2}.".format(len(names), area, subarea))
+ if names and len(names) > 0:
+ checklist_v2_subarea_object = {'name': subarea, 'include': {'nameSelector': names}}
+ checklist_v2_area_object['subareas'].append(checklist_v2_subarea_object)
+ else:
+ if guids and len(guids) > 0:
+ checklist_v2_subarea_object = {'name': subarea, 'include': {'guidSelector': guids}}
+ checklist_v2_area_object['subareas'].append(checklist_v2_subarea_object)
+ checklist_v2['areas'].append(checklist_v2_area_object)
+ # Write the output file
+ if verbose: print("DEBUG: Writing v2 checklist to file", output_file)
+ with open(output_file, 'w') as f:
+ yaml.dump(checklist_v2, f, indent=4, sort_keys=False)
+ return checklist_v2
+
diff --git a/scripts/modules/cl_v2tov1.py b/scripts/modules/cl_v2tov1.py
new file mode 100644
index 000000000..78a193eb2
--- /dev/null
+++ b/scripts/modules/cl_v2tov1.py
@@ -0,0 +1,144 @@
+#######################################
+#
+# Module to generate v1-formatted checklists
+# from v2-formatted recommendations.
+#
+#######################################
+
+# Dependencies
+import sys
+import yaml
+import json
+import os
+from pathlib import Path
+from . import cl_analyze_v2
+from . import cl_v1tov2
+import datetime
+
+
+# Function that returns a data structure with the objects in v1 format
+def generate_v1(checklist_file, input_folder, output_file, service_dictionary=None, verbose=False):
+ # Get checklist object and full reco list
+ checklist_v2 = cl_analyze_v2.get_checklist_object(checklist_file)
+ recos_v2_full = cl_analyze_v2.get_recos(input_folder, verbose=False)
+ recos_v1 = []
+ area_index = 0
+ subarea_index = 0
+ reco_index = 0
+ # Selectors can be at the checklist root, in an area, or a subarea
+ if 'include' in checklist_v2:
+ root_include_selectors = cl_analyze_v2.get_object_selectors(checklist_v2['include'])
+ if 'exclude' in checklist_v2:
+ root_exclude_selectors = cl_analyze_v2.get_object_selectors(checklist_v2['exclude'])
+ else:
+ root_exclude_selectors = None
+ # Filter all recos according to the selectors
+ root_recos_v2 = cl_analyze_v2.filter_v2_recos(recos_v2_full, include=root_include_selectors, exclude=root_exclude_selectors)
+ if verbose: print("{0} recos extracted at root level".format(len(root_recos_v2)))
+ recos_v1 += [get_v1_from_v2(x, service_dictionary=service_dictionary) | {'id': i+1} for i, x in enumerate(root_recos_v2)]
+ if 'areas' in checklist_v2:
+ for area in checklist_v2['areas']:
+ if 'name' in area:
+ area_index += 1
+ subarea_index = 0
+ if 'include' in area:
+ area_include_selectors = cl_analyze_v2.get_object_selectors(area['include'])
+ if 'exclude' in area:
+ area_exclude_selectors = cl_analyze_v2.get_object_selectors(area['exclude'])
+ else:
+ area_exclude_selectors = None
+ # Filter all recos according to the selectors
+ area_recos_v2 = cl_analyze_v2.filter_v2_recos(recos_v2_full, include=area_include_selectors, exclude=area_exclude_selectors)
+ if verbose: print("{0} recos extracted at area {1}".format(len(area_recos_v2), area['name']))
+ recos_v1 += [get_v1_from_v2(x, service_dictionary=service_dictionary) | {'category': area['name'], 'id': get_reco_id(i+1, subarea_index=None, area_index=area_index)} for i, x in enumerate(area_recos_v2)]
+ else:
+ if verbose: print("WARNING: skipping area '{0}', no include specified.".format(area['name']))
+ if 'subareas' in area:
+ for subarea in area['subareas']:
+ if 'name' in subarea:
+ subarea_index += 1
+ if 'include' in subarea:
+ subarea_include_selectors = cl_analyze_v2.get_object_selectors(subarea['include'])
+ if 'exclude' in subarea:
+ subarea_exclude_selectors = cl_analyze_v2.get_object_selectors(subarea['exclude'])
+ else:
+ subarea_exclude_selectors = None
+ # Filter all recos according to the selectors
+ subarea_recos_v2 = cl_analyze_v2.filter_v2_recos(recos_v2_full, include=subarea_include_selectors, exclude=subarea_exclude_selectors)
+ if verbose: print("{0} recos extracted at area '{1}', subarea '{2}'".format(len(subarea_recos_v2), area['name'], subarea['name']))
+ recos_v1 += [get_v1_from_v2(x, service_dictionary=service_dictionary) | {'category': area['name'], 'subcategory': subarea['name'], 'id': get_reco_id(i+1, subarea_index=subarea_index, area_index=area_index)} for i, x in enumerate(subarea_recos_v2)]
+ else:
+ if verbose: print("WARNING: skipping subarea '{0}' in area '{1}, no include specified.".format(subarea['name'], area['name']))
+ else:
+ if verbose: print("WARNING: Skipping subarea in area {0}, no name specified.".format(area['name']))
+ else:
+ if verbose: print("WARNING: Skipping area, no name specified.")
+ # Build the rest of the checklist structure
+ categories = list(set([x['category'] for x in recos_v1 if 'category' in x]))
+ cat_object = [{'name': x.title()} for x in categories]
+ waf_pillars = list(set([x['waf'] for x in recos_v1 if 'waf' in x]))
+ waf_pillars_object = [{'name': x} for x in waf_pillars]
+ checklist_v1 = {
+ 'items': recos_v1,
+ 'yesno': ({'name': 'Yes'}, {'name': 'No'}),
+ 'waf': waf_pillars_object,
+ 'categories': cat_object,
+ 'metadata': {'timestamp': datetime.date.today().strftime("%B %d, %Y")}
+ }
+ if 'name' in checklist_v2:
+ checklist_v1['metadata']['name'] = checklist_v2['name']
+ else:
+ checklist_v1['metadata']['name'] = 'Name missing from checklist YAML file'
+ # Write the output file
+ if verbose: print("DEBUG: Dumping v1 checklist to file", output_file)
+ if output_file:
+ try:
+ with open(output_file, 'w') as f:
+ json.dump(checklist_v1, f, indent=4)
+ except Exception as e:
+ print("ERROR: Error writing output file {0} - {1}".format(output_file, str(e)))
+ sys.exit(1)
+
+# Function that returns a string ID for a reco of the format A01.01
+# Area and subarea are optional, but the reco_index is mandatory
+def get_reco_id (reco_index, subarea_index=None, area_index=None):
+ if reco_index:
+ reco_id = str(reco_index).zfill(2)
+ if subarea_index:
+ reco_id = str(subarea_index).zfill(2) + '.' + reco_id
+ if area_index:
+ reco_id = chr(area_index + 64) + reco_id
+ return reco_id
+ else:
+ return None
+
+# Function that returns a single v1 reco out of a single v2 reco:
+def get_v1_from_v2(reco_v2, service_dictionary=None):
+ reco_v1 = {}
+ # GUID (not mandatory in v2)
+ if 'guid' in reco_v2:
+ reco_v1['guid'] = reco_v2['guid']
+ elif 'labels' in reco_v2 and 'guid' in reco_v2['labels']:
+ reco_v1['guid'] = reco_v2['labels']['guid']
+ # Mandatory fields
+ if 'title' in reco_v2:
+ reco_v1['text'] = reco_v2['title']
+ elif 'text' in reco_v2: # Legacy
+ reco_v1['text'] = reco_v2['text']
+ if 'description' in reco_v2:
+ reco_v1['description'] = reco_v2['description']
+ if 'severity' in reco_v2:
+ if reco_v2['severity'] == 0:
+ reco_v1['severity'] = 'High'
+ elif reco_v2['severity'] == 1:
+ reco_v1['severity'] = 'Medium'
+ elif reco_v2['severity'] == 2:
+ reco_v1['severity'] = 'Low'
+ # Services not there in v2
+ if 'services' in reco_v2:
+ reco_v1['service'] = reco_v2['service'][0]
+ elif 'resourceTypes' in reco_v2 and len(reco_v2['resourceTypes']) > 0:
+ reco_v1['service'] = cl_v1tov2.get_standard_service_name(reco_v2['resourceTypes'][0], service_dictionary=service_dictionary)
+ if 'waf' in reco_v2:
+ reco_v1['waf'] = reco_v2['waf']
+ return reco_v1
\ No newline at end of file
diff --git a/scripts/requirements.txt b/scripts/requirements.txt
new file mode 100644
index 000000000..f78ba5b80
--- /dev/null
+++ b/scripts/requirements.txt
@@ -0,0 +1,7 @@
+pyyaml
+requests
+azure-identity
+azure-mgmt-resource
+azure-mgmt-resourcegraph
+azure-ai-textanalytics
+jsonschema
\ No newline at end of file
diff --git a/scripts/service_dictionary.json b/scripts/service_dictionary.json
index a8f87dab4..568fc6f26 100644
--- a/scripts/service_dictionary.json
+++ b/scripts/service_dictionary.json
@@ -15,7 +15,7 @@
"service": "ExpressRoute Traffic Collector"
},
{
- "names": ["VPN Gateway", "Azure VPN Gateway", "VPN", "microsoft.network/vpnGateways", "microsoft.network/virtualNetworkGateways", "Microsoft.Network/virtualNetworkGateways"],
+ "names": ["VPN Gateway", "Azure VPN Gateway", "VPN", "microsoft.network/vpnGateways", "microsoft.network/virtualNetworkGateways", "Microsoft.Network/virtualNetworkGateways", "Microsoft.Network/connections"],
"arm": "microsoft.network/virtualNetworkGateways",
"service": "VPN"
},
@@ -95,7 +95,7 @@
"service": "Backup"
},
{
- "names": ["Azure Monitor", "Monitor", "Microsoft.Insights/components"],
+ "names": ["Azure Monitor", "Monitor", "Microsoft.Insights/components", "Microsoft.Insights/activityLogAlerts", "Microsoft.OperationalInsights/workspaces"],
"arm": "Microsoft.Insights/components",
"service": "Monitor"
},
@@ -155,7 +155,7 @@
"service": "VNet"
},
{
- "names": ["Virtual Machines", "Azure Virtual Machine", "VM", "Microsoft.Compute/virtualMachines", "Microsoft.VirtualMachineImages/imageTemplates"],
+ "names": ["Virtual Machines", "Azure Virtual Machine", "VM", "Microsoft.Compute/virtualMachines", "Microsoft.VirtualMachineImages/imageTemplates", "Microsoft.Compute/galleries"],
"arm": "Microsoft.Compute/virtualMachines",
"service": "VM"
},
@@ -180,7 +180,7 @@
"service": "ACR"
},
{
- "names": ["Redis Cache", "Azure Redis Cache", "Redis"],
+ "names": ["Redis Cache", "Azure Redis Cache", "Redis", "Microsoft.Cache/Redis", "Microsoft.Cache/redis"],
"arm": "microsoft.cache/redis",
"service": "Redis"
},
@@ -305,8 +305,48 @@
"service": "Policy"
},
{
- "names": ["Azure Virtual Desktop", "AVD", "Microsoft.DesktopVirtualization/hostPools"],
+ "names": ["Azure Virtual Desktop", "AVD", "Microsoft.DesktopVirtualization/hostPools", "Microsoft.DesktopVirtualization/scalingPlans"],
"arm": "Microsoft.DesktopVirtualization/hostPools",
"service": "AVD"
+ },
+ {
+ "names": ["Microsoft.Batch/batchAccounts", "Batch", "Azure Batch"],
+ "arm": "Microsoft.Batch/batchAccounts",
+ "service": "Batch"
+ },
+ {
+ "names": ["Microsoft.AAD/domainServices", "Entra", "AADDS", "Azure Active Directory Domain Services"],
+ "arm": "Microsoft.AAD/domainServices",
+ "service": "Entra"
+ },
+ {
+ "names": ["Microsoft.Resources/resourceGroups"],
+ "arm": "Microsoft.Resources/resourceGroups",
+ "service": "Resource Group"
+ },
+ {
+ "names": ["Microsoft.Subscription/Subscriptions"],
+ "arm": "Microsoft.Subscription/Subscriptions",
+ "service": "Subscription"
+ },
+ {
+ "names": ["Microsoft.App/managedenvironments"],
+ "arm": "Microsoft.App/managedenvironments",
+ "service": "Container Apps"
+ },
+ {
+ "names": ["Microsoft.AppConfiguration/configurationStores"],
+ "arm": "Microsoft.AppConfiguration/configurationStores",
+ "service": "App Configuration"
+ },
+ {
+ "names": ["Microsoft.Automation/automationAccounts"],
+ "arm": "Microsoft.Automation/automationAccounts",
+ "service": "Automation"
+ },
+ {
+ "names": ["Microsoft.SignalRService/SignalR"],
+ "arm": "Microsoft.SignalRService/SignalR",
+ "service": "SignalR"
}
]
\ No newline at end of file
diff --git a/scripts/sync_folder.py b/scripts/sync_folder.py
new file mode 100644
index 000000000..c432cf581
--- /dev/null
+++ b/scripts/sync_folder.py
@@ -0,0 +1,92 @@
+# This script gets the latest files from the main branch of the repo
+# and copies them in the local folders. It can be used to sync the
+# local files with the latest version of the repo.
+
+import requests
+import argparse
+import os
+import urllib.request
+
+
+# Parameters
+parser = argparse.ArgumentParser(description='Copy files from the remote branch of a GitHub repo to a local folder')
+parser.add_argument('--branch', dest='github_branch', action='store',
+ default='main',
+ help='GitHub branch to copy files from (default: main)')
+parser.add_argument('--folder', dest='github_folder', action='store',
+ default='checklists',
+ help='GitHub folder to copy files from (default: checklists)')
+parser.add_argument('--dry-run', dest='dryrun', action='store_true',
+ default=False,
+ help='run in dry-run mode, no files are actually copied (default: False)')
+parser.add_argument('--verbose', dest='verbose', action='store_true',
+ default=False,
+ help='run in verbose mode (default: False)')
+args = parser.parse_args()
+
+# Variables (could be parametrised)
+github_org = 'Azure'
+github_repo = 'review-checklists'
+github_file_extension = '.json'
+output_folder = os.path.join('.', args.github_folder)
+
+# Function to copy files from a remote URL into a local folder
+# Using global variables for the folders, but could be passed as parameters
+def get_files():
+ # Variables
+ max_files = 0 # Maximum number of files to process. Set to 0 to process all files.
+ retrieved_recos = []
+ # Get last commit
+ r = requests.get(f'https://api.github.com/repos/{github_org}/{github_repo}/commits')
+ if (r.status_code == 200):
+ commits = r.json()
+ git_tree_id = commits[0]['commit']['tree']['sha']
+ if (args.verbose): print("DEBUG: Git tree ID is", git_tree_id)
+ r = requests.get(f'https://api.github.com/repos/{github_org}/{github_repo}/git/trees/{git_tree_id}?recursive=true')
+ if r.status_code == 200:
+ files_processed = 0
+ for path in r.json()['tree']:
+ file_path = path['path']
+ # Only process files in the containing folder with the right extension
+ # The folder check is by far not water tight, but it should work for the current use case
+ if (args.github_folder + "/" in file_path) and (github_file_extension in file_path):
+ files_processed += 1
+ if (max_files > 0) and (files_processed > max_files):
+ print("INFO: Maximum number of files processed reached: {0}".format(max_files))
+ break
+ file_url = f'https://raw.githubusercontent.com/{github_org}/{github_repo}/{args.github_branch}/' + file_path
+ if (args.verbose): print("DEBUG: Found file '{0}'".format(file_path))
+ # Download the file to the output folder
+ file_name = file_path.split('/')[-1]
+ output_path = os.path.join(output_folder, file_name)
+ if args.dryrun:
+ print("INFO: Would copy file {0} to {1}".format(file_url, output_path))
+ else:
+ # r = requests.get(file_url)
+ # if r.status_code == 200:
+ # with open(output_path, 'w') as f:
+ # f.write(r.text)
+ # files_success += 1
+ # else:
+ # print("ERROR: Unable to download file {0} from GitHub API: {1}. Message: {2}".format(file_path, r.status_code, r.text))
+ # files_errors += 1
+ if args.verbose:
+ print("INFO: Downloading file #{3} {0} to {1}".format(file_url, output_path, files_processed))
+ urllib.request.urlretrieve(file_url, output_path)
+ if args.verbose:
+ print("DEBUG: {0} files processed, {1} errors, {2} success".format(files_processed, files_errors, files_success))
+ return files_processed
+ else:
+ print("ERROR: Unable to retrieve list of files from GitHub API")
+ return None
+ else:
+ print("ERROR: Unable to retrieve list of commits from GitHub API: {0}. Message: {1}".format(r.status_code, r.text))
+ return None
+
+#######################
+# Main #
+#######################
+
+# Get remote files
+copied_files = get_files()
+print("INFO: {0} files synced from branch {1} of {2}/{3} to output folder {4}".format(copied_files, args.github_branch, github_org, github_repo, output_folder))
diff --git a/scripts/verify_checklist.py b/scripts/verify_checklist.py
index e577edced..56d93a9df 100644
--- a/scripts/verify_checklist.py
+++ b/scripts/verify_checklist.py
@@ -11,6 +11,7 @@
import sys
import glob
import os
+from scripts.modules import cl_analyze_v1
# Get input arguments
parser = argparse.ArgumentParser(description='Verify a JSON checklist for correctness')
@@ -25,154 +26,12 @@
help='run in verbose mode (default: False)')
args = parser.parse_args()
-# Global variables
-guids = []
-
-# Function that verifies the correctness of a single checklist
-def verify_file(input_file):
- # Banner
- if args.verbose:
- print("DEBUG: ======================================================================")
- print("DEBUG: Verifying file", input_file)
- # Look for non-unicode characters in the file
- if args.verbose:
- print("DEBUG: Verifying all characters are Unicode-8...")
- f1 = open (input_file, "r")
- text = f1.read()
- for line in text:
- for character in line:
- if ord(character) > 127:
- print("ERROR: Non-unicode character found in file", input_file, ":", character)
- sys.exit(1)
- # if args.verbose:
- # print("DEBUG: All characters are Unicode-8")
-
- # Reading into JSON
- if args.verbose:
- print("DEBUG: Verifying JSON can be loaded up...")
- try:
- with open(input_file) as f:
- checklist = json.load(f)
- if 'items' in checklist:
- if args.verbose:
- print("DEBUG: {0} items found in JSON file {1}".format(len(checklist['items']), input_file))
- except Exception as e:
- print("ERROR: Error when processing JSON file, nothing changed", input_file, ":", str(e))
- sys.exit(1)
- # if args.verbose:
- # print("DEBUG: JSON can be loaded up correctly")
-
- # Verify the required keys are present
- if args.verbose:
- print("DEBUG: Verifying the required keys are present...")
- required_keys = ['items', 'metadata', 'categories', 'status', 'severities', 'yesno']
- for key in required_keys:
- if key not in checklist:
- print("ERROR: Required key missing from JSON file", input_file, ":", key)
-
- # Verify the metadata keys are present
- if 'metadata' in checklist:
- if args.verbose:
- print("DEBUG: Verifying the metadata keys are present...")
- required_keys = ['name', 'timestamp', 'state', 'waf']
- for key in required_keys:
- if key not in checklist['metadata']:
- print("ERROR: Required key missing from metadata in JSON file", input_file, ":", key)
- else:
- if args.verbose:
- print("WARNING: skipping metadata verification, no metadata in JSON file", input_file)
-
- # Verify the metadata waf key has a valid value
- if 'metadata' in checklist:
- if 'waf' in checklist['metadata']:
- if checklist['metadata']['waf'].lower() not in ['none', 'all', 'reliability', 'security', 'performance', 'cost', 'operations']:
- print("ERROR: Invalid WAF value in metadata in JSON file", input_file, ":", checklist['metadata']['waf'])
-
- # Verify the items have all required keys
- if args.verbose:
- print("DEBUG: Verifying the items have all required keys...")
- # Counter dictionary for inconsistencies
- item_count = 0
- inconsistencies = {
- 'missing_graph': 0,
- 'missing_description': 0,
- 'wrong_cat': 0,
- 'missing_cat': 0,
- 'missing_subcat': 0,
- 'missing_waf': 0,
- 'wrong_waf': 0,
- 'missing_svc': 0,
- 'missing_link': 0,
- 'missing_sev': 0,
- 'missing_guid': 0,
- 'localized_link': 0
- }
- # Load categories to verify whether the items have the correct category
- if 'categories' in checklist:
- categories = [x['name'] for x in checklist['categories']]
- if args.verbose:
- print("DEBUG: Categories found in JSON file", input_file, ":", str(categories))
- else:
- categories = []
- if 'items' in checklist:
- for item in checklist['items']:
- item_count += 1
- if 'category' not in item:
- inconsistencies['missing_cat'] += 1
- elif item['category'] not in categories:
- inconsistencies['wrong_cat'] += 1
- if 'subcategory' not in item:
- inconsistencies['missing_subcat'] += 1
- if 'waf' not in item:
- inconsistencies['missing_waf'] += 1
- elif item['waf'].lower() not in ['reliability', 'security', 'performance', 'cost', 'operations']:
- inconsistencies['wrong_waf'] += 1
- if 'service' not in item:
- inconsistencies['missing_svc'] += 1
- if 'guid' not in item:
- inconsistencies['missing_guid'] += 1
- elif item['guid'] in guids:
- print("ERROR: Duplicated GUID in JSON file", input_file, ":", item['guid'])
- else:
- guids.append(item['guid'])
- if 'link' not in item:
- inconsistencies['missing_link'] += 1
- elif 'en-us' in item['link']:
- inconsistencies['localized_link'] += 1
- if 'severity' not in item:
- inconsistencies['missing_sev'] += 1
- if 'graph' not in item:
- inconsistencies['missing_graph'] += 1
- if 'description' not in item:
- inconsistencies['missing_description'] += 1
- if inconsistencies['missing_cat'] > 0:
- print("ERROR: Items with missing category in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_cat'], round(inconsistencies['missing_cat'] / item_count * 100, 2)))
- if inconsistencies['wrong_cat'] > 0:
- print("WARNING: Items with wrong category in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['wrong_cat'], round(inconsistencies['wrong_cat'] / item_count * 100, 2)))
- if inconsistencies['missing_subcat'] > 0:
- print("ERROR: Items with missing subcategory in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_subcat'], round(inconsistencies['missing_subcat'] / item_count * 100, 2)))
- if inconsistencies['missing_waf'] > 0:
- print("WARNING: Items with missing WAF in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_waf'], round(inconsistencies['missing_waf'] / item_count * 100, 2)))
- if inconsistencies['wrong_waf'] > 0:
- print("ERROR: Items with wrong WAF in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['wrong_waf'], round(inconsistencies['wrong_waf'] / item_count * 100, 2)))
- if inconsistencies['missing_svc'] > 0:
- print("WARNING: Items with missing service in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_svc'], round(inconsistencies['missing_svc'] / item_count * 100, 2)))
- if inconsistencies['missing_link'] > 0:
- print("WARNING: Items with missing link in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_link'], round(inconsistencies['missing_link'] / item_count * 100, 2)))
- if inconsistencies['missing_sev'] > 0:
- print("ERROR: Items with missing severity in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['missing_sev'], round(inconsistencies['missing_sev'] / item_count * 100, 2)))
- if inconsistencies['localized_link'] > 0:
- print("WARNING: Items with localized link in JSON file {0}: {1} ({2}%)".format(input_file, inconsistencies['localized_link'], round(inconsistencies['localized_link'] / item_count * 100, 2)))
- return {
- 'item_count': item_count,
- 'inconsistencies': inconsistencies
- }
-
# We need an input file
if args.input_file:
- file_stats = verify_file(args.input_file)
+ guids = []
+ file_stats, guids = cl_analyze_v1.verify_file(args.input_file, guids=guids, verbose=args.verbose)
if args.compare_file:
- compare_stats = verify_file(args.compare_file)
+ compare_stats, guids = cl_analyze_v1.verify_file(args.compare_file, guids=guids, verbose=args.verbose)
# Print the differences between the two checklists stats in a table format
print("INFO: Comparing the two checklists...")
print("INFO: {0: <40} {1: <40} {2: <40}".format("Item", os.path.basename(args.input_file), os.path.basename(args.compare_file)))
@@ -182,6 +41,7 @@ def verify_file(input_file):
print("INFO: {0: <40} {1: <40} {2: <40}".format(key, file_stats['inconsistencies'][key], compare_stats['inconsistencies'][key]))
else:
if args.input_folder:
+ guids = []
language = "en" # This could be changed to a parameter
if args.verbose:
print("DEBUG: looking for JSON files in folder", args.input_folder, "with pattern *.", language + ".json...")
@@ -191,7 +51,7 @@ def verify_file(input_file):
print("DEBUG: found", len(checklist_files), "JSON files, analyzing correctness...")
for file in checklist_files:
if file:
- file_stats = verify_file(file)
+ file_stats, guids = cl_analyze_v1.verify_file(file, guids=guids, verbose=args.verbose)
else:
print("ERROR: no input file found, not doing anything")
else:
diff --git a/v2/checklists/all_recos.yaml b/v2/checklists/all_recos.yaml
new file mode 100644
index 000000000..abfdc872c
--- /dev/null
+++ b/v2/checklists/all_recos.yaml
@@ -0,0 +1,6 @@
+name: 'All recommendations'
+include:
+ sourceSelector:
+ - aprl
+ - revcl
+ - wafsg
\ No newline at end of file
diff --git a/v2/checklists/alz.json b/v2/checklists/alz.json
new file mode 100644
index 000000000..af0df6f4c
--- /dev/null
+++ b/v2/checklists/alz.json
@@ -0,0 +1,2348 @@
+{
+ "items": [
+ {
+ "guid": "8bbac757-1559-4ab9-853e-8908ae28c84c",
+ "text": "Enforce a dedicated connectivity subscription in the Connectivity management group to host an Azure Virtual WAN hub, private Domain Name System (DNS), ExpressRoute circuit, and other networking resources.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.01"
+ },
+ {
+ "guid": "6cc0ea22-42bb-441e-a345-804ab0a09666",
+ "text": "For Sovereign Landing Zone, have a 'confidential corp' and 'confidential online' management group directly under the 'landing zones' MG.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.02"
+ },
+ {
+ "guid": "ae28c84c-33b6-4b78-88b9-fe5c41049d40",
+ "text": "Enforce a process for cost management",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.03"
+ },
+ {
+ "guid": "5de32c19-9248-4160-9d5d-1e4e614658d3",
+ "text": "Ensure tags are used for billing and cost management",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.04"
+ },
+ {
+ "guid": "3a923c34-74d0-4001-aac6-a9e01e6a83de",
+ "text": "If servers will be used for Identity services, like domain controllers, establish a dedicated identity subscription in the identity management group, to host these services. Make sure that resources are set to use the domain controllers available in their region.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.05"
+ },
+ {
+ "guid": "2df27ee4-12e7-4f98-9f63-04722dd69c5b",
+ "text": "Enforce reasonably flat management group hierarchy with no more than four levels.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.06"
+ },
+ {
+ "guid": "2dd69c5b-5c26-422f-94b6-9bad33aad5e8",
+ "text": "Ensure that all subscription owners and IT core team are aware of subscription quotas and the impact they have on provision resources for a given subscription.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.07"
+ },
+ {
+ "guid": "74d00018-ac6a-49e0-8e6a-83de5de32c19",
+ "text": "Enforce that only privileged users can operate management groups in the tenant by enabling Azure RBAC authorization in the management group hierarchy settings",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.08"
+ },
+ {
+ "guid": "61623a76-5a91-47e1-b348-ef254c27d42e",
+ "text": "Enforce a platform management group under the root management group to support common platform policy and Azure role assignment",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.09"
+ },
+ {
+ "guid": "c68e1d76-6673-413b-9f56-64b5e984a859",
+ "text": "Use Reserved Instances where appropriate to optimize cost and ensure available capacity in target regions. Enforce the use of purchased Reserved Instance VM SKUs via Azure Policy.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.10"
+ },
+ {
+ "guid": "49b82111-2df2-47ee-912e-7f983f630472",
+ "text": "Enforce a process to make resource owners aware of their roles and responsibilities, access review, budget review, policy compliance and remediate when necessary.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.11"
+ },
+ {
+ "guid": "92481607-d5d1-4e4e-9146-58d3558fd772",
+ "text": "Enforce management groups under the root-level management group to represent the types of workloads, based on their security, compliance, connectivity, and feature needs.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.12"
+ },
+ {
+ "guid": "33b6b780-8b9f-4e5c-9104-9d403a923c34",
+ "text": "Enforce no subscriptions are placed under the root management group",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.13"
+ },
+ {
+ "guid": "667313b4-f566-44b5-b984-a859c773e7d2",
+ "text": "Enforce a sandbox management group to allow users to immediately experiment with Azure",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.14"
+ },
+ {
+ "guid": "c773e7d2-6162-43a7-95a9-17e1f348ef25",
+ "text": "Establish dashboards and/or visualizations to monitor compute and storage capacity metrics. (i.e. CPU, memory, disk space)",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Subscriptions",
+ "id": "A01.15"
+ },
+ {
+ "guid": "19ca3f89-397d-44b1-b5b6-5e18661372ac",
+ "text": "Consider a multi-region deployment. Depending on customer size, locations, and users presence, operating in multiple regions can be a common choice to deliver services and run applications closer to them. Using a multi-region deployment is also important to provide geo disaster recovery capabilities, to eliminate the dependency from a single region capacity and diminish the risk of a temporary and localized resource capacity constraint",
+ "severity": "Medium",
+ "waf": "Reliability",
+ "category": "Resource Organization",
+ "subcategory": "Regions",
+ "id": "A02.01"
+ },
+ {
+ "guid": "250d81ce-8bbe-4f85-9051-6a18a8221e50",
+ "text": "Select the right Azure region/s for your deployment. Azure is a global-scale cloud platform that provide global coverage through many regions and geographies. Different Azure regions have different characteristics, access and availability models, costs, capacity, and services offered, then it is important to consider all criteria and requirements",
+ "severity": "High",
+ "waf": "Reliability",
+ "category": "Resource Organization",
+ "subcategory": "Regions",
+ "id": "A02.02"
+ },
+ {
+ "guid": "4c27d42e-8bba-4c75-9155-9ab9153e8908",
+ "text": "Ensure required services and features are available within the chosen deployment regions",
+ "severity": "Medium",
+ "waf": "Reliability",
+ "category": "Resource Organization",
+ "subcategory": "Regions",
+ "id": "A02.03"
+ },
+ {
+ "guid": "cacf55bc-e4e4-46be-96bc-57a5f23a269a",
+ "text": "It is recommended to follow Microsoft Best Practice Naming Standards",
+ "description": "Consider using the Azure naming tool available at https://aka.ms/azurenamingtool",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Resource Organization",
+ "subcategory": "Naming and tagging",
+ "id": "A03.01"
+ },
+ {
+ "guid": "29fd366b-a180-452b-9bd7-954b7700c667",
+ "text": "Configure 'Actual' and 'Forecasted' Budget Alerts.",
+ "severity": "Medium",
+ "waf": "Cost",
+ "category": "Governance",
+ "subcategory": "Optimize your cloud investment",
+ "id": "B01.01"
+ },
+ {
+ "guid": "d8a2adb1-17d6-4326-af62-5ca44e5695f2",
+ "text": "Map regulatory and compliance requirements to Azure Policy definitions and Azure role assignments.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.01"
+ },
+ {
+ "guid": "5a917e1f-348e-4f25-9c27-d42e8bbac757",
+ "text": "If any data sovereignty requirements exist, Azure Policies can be deployed to enforce them",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.02"
+ },
+ {
+ "guid": "3829e7e3-1618-4368-9a04-77a209945bda",
+ "text": "Manage policy assignments at the highest appropriate level with exclusions at bottom levels, if required.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.03"
+ },
+ {
+ "guid": "223ace8c-b123-408c-a501-7f154e3ab369",
+ "text": "Establish Azure Policy definitions at the intermediate root management group so that they can be assigned at inherited scopes",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.04"
+ },
+ {
+ "guid": "5c986cb2-9131-456a-8247-6e49f541acdc",
+ "text": "Leverage Azure Policy strategically, define controls for your environment, using Policy Initiatives to group related policies.",
+ "severity": "High",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.05"
+ },
+ {
+ "guid": "be7d7e48-4327-46d8-adc0-55bcf619e8a1",
+ "text": "Use built-in policies where possible to minimize operational overhead.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.06"
+ },
+ {
+ "guid": "3f988795-25d6-4268-a6d7-0ba6c97be995",
+ "text": "Assign the built-in Resource Policy Contributor role at a particular scope to enable application-level governance.",
+ "description": "Assigning the Resource Policy Contributor role to specific scopes allows you to delegate policy management to relevant teams. For instance, a central IT team may oversee management group-level policies, while application teams handle policies for their subscriptions, enabling distributed governance with adherence to organizational standards.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.07"
+ },
+ {
+ "guid": "19048384-5c98-46cb-8913-156a12476e49",
+ "text": "Limit the number of Azure Policy assignments made at the root management group scope to avoid managing through exclusions at inherited scopes.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.08"
+ },
+ {
+ "guid": "9b461617-db7b-4399-8ac6-d4eb7153893a",
+ "text": "For Sovereign Landing Zone, process is in place for CRUD of 'Sovereign Control objectives to policy mapping'.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.09"
+ },
+ {
+ "guid": "caeea0e9-1024-41df-a52e-d99c3f22a6f4",
+ "text": "For Sovereign Landing Zone, sovereign Control objectives to policy mapping' is documented.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.10"
+ },
+ {
+ "guid": "78b22132-b41c-460b-a4d3-df8f73a67dc2",
+ "text": "For Sovereign Landing Zone, sovereignty policy baseline' policy initiative is deployed and and assigned at correct MG level.",
+ "severity": "Medium",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.11"
+ },
+ {
+ "guid": "43334f24-9116-4341-a2ba-527526944008",
+ "text": "Use Azure Policy to control which services users can provision at the subscription/management group level",
+ "severity": "Low",
+ "service": "Policy",
+ "waf": "Security",
+ "category": "Governance",
+ "subcategory": "Governance",
+ "id": "B02.12"
+ },
+ {
+ "guid": "cc87a3bc-c572-4ad2-92ed-8cabab66160f",
+ "text": "Integrate security into the already combined process of development and operations in DevOps to mitigate risks in the innovation process.",
+ "severity": "High",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "Security",
+ "id": "C01.01"
+ },
+ {
+ "guid": "2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73",
+ "text": "Leverage Declarative Infrastructure as Code Tools such as Azure Bicep, ARM Templates or Terraform to build and maintain your Azure Landing Zone architecture. Both from a Platform and Application workload perspective.",
+ "severity": "High",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "Development Strategy",
+ "id": "C02.01"
+ },
+ {
+ "guid": "634146bf-7085-4419-a7b5-f96d2726f6da",
+ "text": "Aim to define functions for Azure Landing Zone Platform team.",
+ "severity": "Low",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.01"
+ },
+ {
+ "guid": "165eb5e9-b434-448a-9e24-178632186212",
+ "text": "Use a CI/CD pipeline to deploy IaC artifacts and ensure the quality of your deployment and Azure environments.",
+ "severity": "High",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.02"
+ },
+ {
+ "guid": "e85f4226-bf06-4e35-8a8b-7aee4d2d633a",
+ "text": "Ensure you have a cross functional DevOps Platform Team to build, manage and maintain your Azure Landing Zone architecture.",
+ "severity": "High",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.03"
+ },
+ {
+ "guid": "a9e65070-c59e-4112-8bf6-c11364d4a2a5",
+ "text": "Aim to define functions for application workload teams to be self-sufficient and not require DevOps Platform Team support. Achieve this through the use of custom RBAC role.",
+ "severity": "Low",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.04"
+ },
+ {
+ "guid": "a52e0c98-76b9-4a09-a1c9-6b2babf22ac4",
+ "text": "Implement automation for new landing zone for applications and workloads through subscription vending",
+ "severity": "Low",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.05"
+ },
+ {
+ "guid": "0cadb8c7-8fa5-4fbf-8f39-d1fadb3b0460",
+ "text": "Include unit tests for IaC and application code as part of your build process.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.06"
+ },
+ {
+ "guid": "108d5099-a11d-4445-bd8b-e12a5e95412e",
+ "text": "Use Key Vault secrets to avoid hard-coding sensitive information such as credentials (virtual machines user passwords), certificates or keys.",
+ "severity": "High",
+ "service": "Key Vault",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "DevOps Team Topologies",
+ "id": "C03.07"
+ },
+ {
+ "guid": "c7245dd4-af8a-403a-8bb7-890c1a7cfa9d",
+ "text": "Follow a branching strategy to allow teams to collaborate better and efficiently manage version control of IaC and application Code. Review options such as Github Flow.",
+ "severity": "Low",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "Development Lifecycle",
+ "id": "C04.01"
+ },
+ {
+ "guid": "12aeea20-9165-4b3e-bdf2-6795fcd3cdbe",
+ "text": "Adopt a pull request strategy to help keep control of code changes merged into branches.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "Development Lifecycle",
+ "id": "C04.02"
+ },
+ {
+ "guid": "2676ae46-65ca-444e-8695-fdddeace4cb1",
+ "text": "Establish a process for using code to implement quick fixes. Always register quick fixes in your team's backlog so each fix can be reworked at a later point, and you can limit technical debt.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "Development Lifecycle",
+ "id": "C04.03"
+ },
+ {
+ "guid": "cfe363b5-f579-4284-bc56-a42153e4c10b",
+ "text": "Ensure a version control system is used for source code of applications and IaC developed. Microsoft recommends Git.",
+ "severity": "High",
+ "waf": "Operations",
+ "category": "Platform Automation and DevOps",
+ "subcategory": "Development Lifecycle",
+ "id": "C04.04"
+ },
+ {
+ "guid": "859c3900-4514-41eb-b010-475d695abd74",
+ "text": "Ensure that monitoring requirements have been assessed and that appropriate data collection and alerting configurations are applied",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.01"
+ },
+ {
+ "guid": "619e8a13-f988-4795-85d6-26886d70ba6c",
+ "text": "When necessary, use shared storage accounts within the landing zone for Azure diagnostic extension log storage.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.02"
+ },
+ {
+ "guid": "a6e55d7d-8a2a-4db1-87d6-326af625ca44",
+ "text": "Use deny policies to supplement Azure role assignments. The combination of deny policies and Azure role assignments ensures the appropriate guardrails are in place to enforce who can deploy and configure resources and what resources they can deploy and configure.",
+ "severity": "Low",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.03"
+ },
+ {
+ "guid": "d5f345bf-97ab-41a7-819c-6104baa7d48c",
+ "text": "Include alerts and action groups as part of the Azure Service Health platform to ensure that alerts or issues can be actioned",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.04"
+ },
+ {
+ "guid": "541acdce-9793-477b-adb3-751ab2ab13ad",
+ "text": "Use resource locks to prevent accidental deletion of critical shared services.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.05"
+ },
+ {
+ "guid": "e5695f22-23ac-4e8c-a123-08ca5017f154",
+ "text": "Include service and resource health events as part of the overall platform monitoring solution. Tracking service and resource health from the platform perspective is an important component of resource management in Azure.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.06"
+ },
+ {
+ "guid": "aa45be6a-8f2d-4896-b0e3-775e6e94e610",
+ "text": "Establish monitoring for platform components of your landing zone, AMBA is a framework solution that is available and provides an easy way to scale alerting by using Azure Policy",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.07"
+ },
+ {
+ "guid": "e3ab3693-829e-47e3-8618-3687a0477a20",
+ "text": "Don't send raw log entries back to on-premises monitoring systems. Instead, adopt a principle that data born in Azure stays in Azure. If on-premises SIEM integration is required, then send critical alerts instead of logs.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.08"
+ },
+ {
+ "guid": "e7d7e484-3276-4d8b-bc05-5bcf619e8a13",
+ "text": "Monitor OS level virtual machine (VM) configuration drift using Azure Policy. Enabling Azure Automanage Machine Configuration audit capabilities through policy helps application team workloads to immediately consume feature capabilities with little effort.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.09"
+ },
+ {
+ "guid": "97be9951-9048-4384-9c98-6cb2913156a1",
+ "text": "Use Azure Monitor alerts for the generation of operational alerts.",
+ "severity": "Medium",
+ "service": "Monitor",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.10"
+ },
+ {
+ "guid": "6944008b-e7d7-4e48-9327-6d8bdc055bcf",
+ "text": "Use Azure Monitor Logs for insights and reporting.",
+ "severity": "Medium",
+ "service": "Monitor",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.11"
+ },
+ {
+ "guid": "fed3c55f-a67e-4875-aadd-3aba3f9fde31",
+ "text": "When using Change and Inventory Tracking via Azure Automation Accounts, ensure that you have selected supported regions for linking your Log Analytics workspace and automation accounts together.",
+ "severity": "Medium",
+ "service": "Monitor",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.12"
+ },
+ {
+ "guid": "5e6c4cfd-3e50-4454-9c24-47ec66138a72",
+ "text": "Export logs to Azure Storage if your log retention requirements exceed twelve years. Use immutable storage with a write-once, read-many policy to make data non-erasable and non-modifiable for a user-specified interval.",
+ "severity": "Medium",
+ "service": "Monitor",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.13"
+ },
+ {
+ "guid": "67e7a8ed-4b30-4e38-a3f2-9812b2363cef",
+ "text": "Use a single monitor logs workspace to manage platforms centrally except where Azure role-based access control (Azure RBAC), data sovereignty requirements, or data retention policies mandate separate workspaces.",
+ "severity": "Medium",
+ "service": "Monitor",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.14"
+ },
+ {
+ "guid": "90483845-c986-4cb2-a131-56a12476e49f",
+ "text": "Use Network Watcher to proactively monitor traffic flows",
+ "severity": "Medium",
+ "service": "Network Watcher",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Monitoring",
+ "id": "D01.15"
+ },
+ {
+ "guid": "84101f59-1941-4195-a270-e28034290e3a",
+ "text": "Azure Load Balancer and Application Gateway distribute incoming network traffic across multiple resources.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Reliability",
+ "category": "Management",
+ "subcategory": "Fault Tolerance",
+ "id": "D02.01"
+ },
+ {
+ "guid": "826c5c45-bb79-4951-a812-e3bfbfd7326b",
+ "text": "Leverage Availability Zones for your VMs in regions where they are supported.",
+ "severity": "High",
+ "service": "VM",
+ "waf": "Reliability",
+ "category": "Management",
+ "subcategory": "Fault Tolerance",
+ "id": "D02.02"
+ },
+ {
+ "guid": "7ccb7c06-5511-42df-8177-d97f08d0337d",
+ "text": "Avoid running a production workload on a single VM.",
+ "severity": "High",
+ "service": "VM",
+ "waf": "Reliability",
+ "category": "Management",
+ "subcategory": "Fault Tolerance",
+ "id": "D02.03"
+ },
+ {
+ "guid": "7ea02e1c-7166-45a3-bdf5-098891367fcb",
+ "text": "Consider cross-region replication in Azure for BCDR with paired regions",
+ "severity": "Medium",
+ "waf": "Reliability",
+ "category": "Management",
+ "subcategory": "Data Protection",
+ "id": "D03.01"
+ },
+ {
+ "guid": "eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5",
+ "text": "When using Azure Backup, consider the different backup types (GRS, ZRS & LRS) as the default setting is GRS",
+ "severity": "Medium",
+ "service": "Site Recovery",
+ "waf": "Reliability",
+ "category": "Management",
+ "subcategory": "Data Protection",
+ "id": "D03.02"
+ },
+ {
+ "guid": "7f408960-c626-44cb-a018-347c8d790cdf",
+ "text": "Send WAF logs from your application delivery services like Azure Front Door and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate WAF telemetry into your overall Azure environment.",
+ "severity": "Medium",
+ "service": "microsoft.network/frontdoorwebapplicationfirewalls",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "App delivery",
+ "id": "D04.01"
+ },
+ {
+ "guid": "89cc5e11-aa4d-4c3b-893d-feb99215266a",
+ "text": "Add diagnostic settings to save WAF logs from application delivery services like Azure Front Door and Azure Application Gateway. Regularly review the logs to check for attacks and for false positive detections.",
+ "severity": "High",
+ "service": "microsoft.network/frontdoorwebapplicationfirewalls",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "App delivery",
+ "id": "D04.02"
+ },
+ {
+ "guid": "c806c048-26b7-4ddf-b4c2-b4f0c476925d",
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs outside of Azure using Azure Arc.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Operational compliance",
+ "id": "D05.01"
+ },
+ {
+ "guid": "f9887952-5d62-4688-9d70-ba6c97be9951",
+ "text": "Use Azure Update Manager as a patching mechanism for Windows and Linux VMs in Azure.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Operational compliance",
+ "id": "D05.02"
+ },
+ {
+ "guid": "f541acdc-e979-4377-acdb-3751ab2ab13a",
+ "text": "Use Azure policies to automatically deploy software configurations through VM extensions and enforce a compliant baseline VM configuration.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Security",
+ "category": "Management",
+ "subcategory": "Operational compliance",
+ "id": "D05.03"
+ },
+ {
+ "guid": "da6e55d7-d8a2-4adb-817d-6326af625ca4",
+ "text": "Monitor VM security configuration drift via Azure Policy.",
+ "description": "Azure Policy's guest configuration features can audit and remediate machine settings (e.g., OS, application, environment) to ensure resources align with expected configurations, and Update Management can enforce patch management for VMs.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Security",
+ "category": "Management",
+ "subcategory": "Operational compliance",
+ "id": "D05.04"
+ },
+ {
+ "guid": "b2ab13ad-a6e5-45d7-b8a2-adb117d6326a",
+ "text": "Ensure to use and test native PaaS service disaster recovery capabilities.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Protect and Recover",
+ "id": "D06.01"
+ },
+ {
+ "guid": "2476e49f-541a-4cdc-b979-377bcdb3751a",
+ "text": "Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery scenarios. This enables you to replicate workloads across regions.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Protect and Recover",
+ "id": "D06.02"
+ },
+ {
+ "guid": "f625ca44-e569-45f2-823a-ce8cb12308ca",
+ "text": "Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup solution.",
+ "severity": "Medium",
+ "service": "Site Recovery",
+ "waf": "Operations",
+ "category": "Management",
+ "subcategory": "Protect and Recover",
+ "id": "D06.03"
+ },
+ {
+ "guid": "9a19bf39-c95d-444c-9c89-19ca1f6d5215",
+ "text": "Plan how new azure services will be implemented",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Service enablement framework",
+ "id": "E01.01"
+ },
+ {
+ "guid": "ae514b93-3d45-485e-8112-9bd7ba012f7b",
+ "text": "Plan how service request will be fulfilled for Azure services",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Service enablement framework",
+ "id": "E01.02"
+ },
+ {
+ "guid": "4e3ab369-3829-4e7e-9161-83687a0477a2",
+ "text": "Export Azure activity logs to Azure Monitor Logs for long-term data retention. Export to Azure Storage for long-term storage beyond two years, if necessary.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.01"
+ },
+ {
+ "guid": "874a748b-662d-46d1-9051-2a66498f6dfe",
+ "text": "Use an Azure Event Grid-based solution for log-oriented, real-time alerts",
+ "severity": "Low",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.02"
+ },
+ {
+ "guid": "09945bda-4333-44f2-9911-634182ba5275",
+ "text": "Enable Defender Cloud Security Posture Management for all subscriptions.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.03"
+ },
+ {
+ "guid": "77425f48-ecba-43a0-aeac-a3ac733ccc6a",
+ "text": "Enable Defender Cloud Workload Protection Plans for Azure Resources on all subscriptions.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.04"
+ },
+ {
+ "guid": "36a72a48-fffe-4c40-9747-0ab5064355ba",
+ "text": "Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.05"
+ },
+ {
+ "guid": "4e5695f2-223a-4ce8-ab12-308ca5017f15",
+ "text": "Use Microsoft Entra ID reporting capabilities to generate access control audit reports.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.06"
+ },
+ {
+ "guid": "d21a922d-5ca7-427a-82a6-35f7b21f1bfc",
+ "text": "For Sovereign Landing Zone, customer Lockbox is enabled on the Entra ID tenant.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.07"
+ },
+ {
+ "guid": "1761e147-f65e-4d09-bbc2-f464f23e2eba",
+ "text": "For Sovereign Landing Zone, transparancy logs is enabled on the Entra ID tenant.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.08"
+ },
+ {
+ "guid": "15833ee7-ad6c-46d3-9331-65c7acbe44ab",
+ "text": "Monitor base operating system patching drift via Azure Monitor Logs and Defender for Cloud.",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.09"
+ },
+ {
+ "guid": "24d96b30-61ee-4436-a1cc-d6ef08bc574b",
+ "text": "Enable Endpoint Protection on IaaS Servers.",
+ "severity": "High",
+ "service": "VM",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.10"
+ },
+ {
+ "guid": "e5f8d79f-2e87-4768-924c-516775c6ea95",
+ "text": "Connect default resource configurations to a centralized Azure Monitor Log Analytics workspace.",
+ "severity": "Medium",
+ "service": "Monitor",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Operations",
+ "id": "E02.11"
+ },
+ {
+ "guid": "6f704104-85c1-441f-96d3-c9819911645e",
+ "text": "Separate privileged admin accounts for Azure administrative tasks.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Secure privileged access",
+ "id": "E03.01"
+ },
+ {
+ "guid": "b86ad884-08e3-4727-94b8-75ba18f20459",
+ "text": "Determine the incident response plan for Azure services before allowing it into production.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Access control",
+ "id": "E04.01"
+ },
+ {
+ "guid": "01365d38-e43f-49cc-ad86-8266abca264f",
+ "text": "Implement a zero-trust approach for access to the Azure platform, where appropriate.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Access control",
+ "id": "E04.02"
+ },
+ {
+ "guid": "16183687-a047-47a2-8994-5bda43334f24",
+ "text": "Default to Microsoft-managed keys for principal encryption functionality and use customer-managed keys when required.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.01"
+ },
+ {
+ "guid": "25d62688-6d70-4ba6-a97b-e99519048384",
+ "text": "If you want to bring your own keys, this might not be supported across all considered services. Implement relevant mitigation so that inconsistencies don't hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions that minimize latency.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.02"
+ },
+ {
+ "guid": "913156a1-2476-4e49-b541-acdce979377b",
+ "text": "Establish an automated process for key and certificate rotation.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.03"
+ },
+ {
+ "guid": "91163418-2ba5-4275-8694-4008be7d7e48",
+ "text": "Use an Azure Key Vault per application per environment per region.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.04"
+ },
+ {
+ "guid": "5017f154-e3ab-4369-9829-e7e316183687",
+ "text": "Use Azure Key Vault to store your secrets and credentials",
+ "severity": "High",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.05"
+ },
+ {
+ "guid": "2ba52752-6944-4008-ae7d-7e4843276d8b",
+ "text": "Provision Azure Key Vault with the soft delete and purge policies enabled to allow retention protection for deleted objects.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.06"
+ },
+ {
+ "guid": "dc055bcf-619e-48a1-9f98-879525d62688",
+ "text": "Follow a least privilege model by limiting authorization to permanently delete keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.07"
+ },
+ {
+ "guid": "b12308ca-5017-4f15-9e3a-b3693829e7e3",
+ "text": "Delegate Key Vault instantiation and privileged access and use Azure Policy to enforce a consistent compliant configuration.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.08"
+ },
+ {
+ "guid": "a0477a20-9945-4bda-9333-4f2491163418",
+ "text": "Use different Azure Key Vaults for different applications and regions to avoid transaction scale limits and restrict access to secrets.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.09"
+ },
+ {
+ "guid": "17d6326a-f625-4ca4-9e56-95f2223ace8c",
+ "text": "Use the platform-central Azure Monitor Log Analytics workspace to audit key, certificate, and secret usage within each instance of Key Vault.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.10"
+ },
+ {
+ "guid": "6d70ba6c-97be-4995-8904-83845c986cb2",
+ "text": "Automate the certificate management and renewal process with public certificate authorities to ease administration.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.11"
+ },
+ {
+ "guid": "4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb",
+ "text": "For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets and credentials.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.12"
+ },
+ {
+ "guid": "cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1",
+ "text": "Enable firewall and virtual network service endpoint or private endpoint on the vault to control access to the key vault.",
+ "severity": "Medium",
+ "service": "Key Vault",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Encryption and keys",
+ "id": "E05.13"
+ },
+ {
+ "guid": "159aac9f-863f-4f48-82cf-00c28fa97a0e",
+ "text": "Enable container soft delete for the storage account to recover a deleted container and its contents.",
+ "severity": "High",
+ "service": "Storage",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Overview",
+ "id": "E06.01"
+ },
+ {
+ "guid": "b03ed428-4617-4067-a787-85468b9ccf3f",
+ "text": "Secure transfer to storage accounts should be enabled",
+ "severity": "High",
+ "service": "Storage",
+ "waf": "Security",
+ "category": "Security",
+ "subcategory": "Overview",
+ "id": "E06.02"
+ },
+ {
+ "guid": "ae757485-92a4-482a-8bc9-eefe6f5b5ec3",
+ "text": "Periodically audit the agreement billing RBAC role assignments to review who has access to your MCA billing account",
+ "severity": "Medium",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Customer Agreement",
+ "id": "F01.01"
+ },
+ {
+ "guid": "6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c",
+ "text": "Configure Agreement billing account notification contact email",
+ "severity": "Low",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Customer Agreement",
+ "id": "F01.02"
+ },
+ {
+ "guid": "90e87802-602f-4dfb-acea-67c60689f1d7",
+ "text": "Use Billing Profiles and Invoice sections to structure your agreements billing for effective cost management",
+ "severity": "Low",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Customer Agreement",
+ "id": "F01.03"
+ },
+ {
+ "guid": "e81a73f0-84c4-4641-b406-14db3b4d1f50",
+ "text": "Make use of Microsoft Azure plan for dev/test offer to reduce costs for non-production workloads",
+ "severity": "Low",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Customer Agreement",
+ "id": "F01.04"
+ },
+ {
+ "guid": "78e11934-499a-45ed-8ef7-aae5578f0ecf",
+ "text": "Leverage Azure Lighthouse for Multi-Tenant Management",
+ "severity": "Low",
+ "service": "Entra",
+ "waf": "Operations",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Entra ID Tenants",
+ "id": "F02.01"
+ },
+ {
+ "guid": "6309957b-821a-43d1-b9d9-7fcf1802b747",
+ "text": "Ensure you have a Multi-Tenant Automation approach to managing your Microsoft Entra ID Tenants",
+ "severity": "Low",
+ "service": "Entra",
+ "waf": "Operations",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Entra ID Tenants",
+ "id": "F02.02"
+ },
+ {
+ "guid": "70c15989-c726-42c7-b0d3-24b7375b9201",
+ "text": "Use one Entra tenant for managing your Azure resources, unless you have a clear regulatory or business requirement for multi-tenants.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Operations",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Microsoft Entra ID Tenants",
+ "id": "F02.03"
+ },
+ {
+ "guid": "32952499-58c8-4e6f-ada5-972e67893d55",
+ "text": "Setup Cost Reporting and Views with Azure Cost Management",
+ "severity": "Medium",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Cloud Solution Provider",
+ "id": "F03.01"
+ },
+ {
+ "guid": "a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01",
+ "text": "Discuss support request and escalation process with CSP partner",
+ "severity": "Low",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Cloud Solution Provider",
+ "id": "F03.02"
+ },
+ {
+ "guid": "5d82e6df-6f61-42f2-82e2-3132d293be3d",
+ "text": "Ensure that Azure Lighthouse is used for administering the tenant by partner",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Cloud Solution Provider",
+ "id": "F03.03"
+ },
+ {
+ "guid": "12cd499f-96e2-4e41-a243-231fb3245a1c",
+ "text": "Use departments and accounts to map your organization's structure to your enrollment hierarchy which can help with separating billing.",
+ "severity": "Low",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Enterprise Agreement",
+ "id": "F04.01"
+ },
+ {
+ "guid": "5cf9f485-2784-49b3-9824-75d9b8bdb57b",
+ "text": "Make use of Enterprise Dev/Test Subscriptions to reduce costs for non-production workloads",
+ "severity": "Low",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Enterprise Agreement",
+ "id": "F04.02"
+ },
+ {
+ "guid": "685cb4f2-ac9c-4b19-9167-993ed0b32415",
+ "text": "Configure Notification Contacts to a group mailbox",
+ "severity": "Medium",
+ "waf": "Cost",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Enterprise Agreement",
+ "id": "F04.03"
+ },
+ {
+ "guid": "ca0fe401-12ad-46fc-8a7e-86293866a9f6",
+ "text": "Enable both DA View Charges and AO View Charges on your EA Enrollments to allow users with the correct perms review Cost and Billing Data.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Azure Billing and Microsoft Entra ID Tenants",
+ "subcategory": "Enterprise Agreement",
+ "id": "F04.04"
+ },
+ {
+ "guid": "614658d3-558f-4d77-849b-821112df27ee",
+ "text": "Enable auto-registration for Azure DNS to automatically manage the lifecycle of the DNS records for the virtual machines deployed within a virtual network.",
+ "severity": "High",
+ "service": "DNS",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.01"
+ },
+ {
+ "guid": "153e8908-ae28-4c84-a33b-6b7808b9fe5c",
+ "text": "For environments where name resolution in Azure is all that's required, use Azure Private DNS for resolution with a delegated zone for name resolution (such as 'azure.contoso.com').",
+ "severity": "Medium",
+ "service": "DNS",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.02"
+ },
+ {
+ "guid": "1e6a83de-5de3-42c1-a924-81607d5d1e4e",
+ "text": "Special workloads that require and deploy their own DNS (such as Red Hat OpenShift) should use their preferred DNS solution.",
+ "severity": "Low",
+ "service": "DNS",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.03"
+ },
+ {
+ "guid": "41049d40-3a92-43c3-974d-00018ac6a9e0",
+ "text": "For environments where name resolution across Azure and on-premises is required, consider using Azure DNS Private Resolver.",
+ "severity": "Medium",
+ "service": "DNS",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.04"
+ },
+ {
+ "guid": "558fd772-49b8-4211-82df-27ee412e7f98",
+ "text": "Ensure no overlapping IP address spaces across Azure regions and on-premises locations are used",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.05"
+ },
+ {
+ "guid": "33aad5e8-c68e-41d7-9667-313b4f5664b5",
+ "text": "Ensure that IP address space isn't wasted, don't create unnecessarily large virtual networks (for example /16)",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.06"
+ },
+ {
+ "guid": "f348ef25-4c27-4d42-b8bb-ac7571559ab9",
+ "text": "Avoid using overlapping IP address ranges for production and DR sites.",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.07"
+ },
+ {
+ "guid": "3f630472-2dd6-49c5-a5c2-622f54b69bad",
+ "text": "Use IP addresses from the address allocation ranges for private internets (RFC 1918).",
+ "severity": "Low",
+ "service": "VNet",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "IP plan",
+ "id": "G01.08"
+ },
+ {
+ "guid": "373f482f-3e39-4d39-8aa4-7e566f6082b6",
+ "text": "Develop a plan for securing the delivery application content from your Workload spokes using Application Gateway and Azure Front door. You can use the Application Delivery checklist to for recommendations.",
+ "severity": "Medium",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "App delivery",
+ "id": "G02.01"
+ },
+ {
+ "guid": "6138a720-0f1c-4e16-bd30-1d6e872e52e3",
+ "text": "Perform app delivery within landing zones for both internal-facing (corp) and external-facing apps (online).",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "App delivery",
+ "id": "G02.02"
+ },
+ {
+ "guid": "143b16c3-1d7a-4a9b-9470-4489a8042d88",
+ "text": "Use a DDoS Network or IP protection plans for all Public IP addresses in application landing zones.",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "App delivery",
+ "id": "G02.03"
+ },
+ {
+ "guid": "c2447ec6-6138-4a72-80f1-ce16ed301d6e",
+ "text": "Delegate subnet creation to the landing zone owner.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.01"
+ },
+ {
+ "guid": "22d6419e-b627-4d95-9e7d-019fa759387f",
+ "text": "Use a /26 prefix for your Azure Firewall subnets.",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.02"
+ },
+ {
+ "guid": "f2aad7e3-bb03-4adc-8606-4123d342a917",
+ "text": "Use at least a /27 prefix for your Gateway subnets",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.03"
+ },
+ {
+ "guid": "0390417d-53dc-44d9-b3f4-c8832f359b41",
+ "text": "Consider the limit of NSG rules per NSG (1000).",
+ "severity": "Medium",
+ "service": "NSG",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.04"
+ },
+ {
+ "guid": "9c2299c4-d7b5-47d0-a655-562f2b3e4563",
+ "text": "The application team should use application security groups at the subnet-level NSGs to help protect multi-tier VMs within the landing zone.",
+ "severity": "Medium",
+ "service": "NSG",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.05"
+ },
+ {
+ "guid": "a4d87397-48b6-462d-9d15-f512a65498f6",
+ "text": "Use NSGs and application security groups to micro-segment traffic within the landing zone and avoid using a central NVA to filter traffic flows.",
+ "severity": "Medium",
+ "service": "NSG",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.06"
+ },
+ {
+ "guid": "872e52e3-611c-4c58-a5a4-b1511e43a58a",
+ "text": "Use NSGs to help protect traffic across subnets, as well as east/west traffic across the platform (traffic between landing zones).",
+ "severity": "Medium",
+ "service": "NSG",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.07"
+ },
+ {
+ "guid": "11deb39d-8299-4e47-bbe0-0fb5a36318a8",
+ "text": "Don't rely on the NSG inbound default rules using the VirtualNetwork service tag to limit connectivity.",
+ "severity": "Medium",
+ "service": "NSG",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.08"
+ },
+ {
+ "guid": "dfe237de-143b-416c-91d7-aa9b64704489",
+ "text": "Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights into internal and external traffic flows.",
+ "severity": "Medium",
+ "service": "NSG",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Segmentation",
+ "id": "G03.09"
+ },
+ {
+ "guid": "de0d5973-cd4c-4d21-a088-137f5e6c4cfd",
+ "text": "When you're using ExpressRoute Direct, configure MACsec in order to encrypt traffic at the layer-two level between the organization's routers and MSEE. The diagram shows this encryption in flow.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Encryption",
+ "id": "G04.01"
+ },
+ {
+ "guid": "ed301d6e-872e-452e-9611-cc58b5a4b151",
+ "text": "For scenarios where MACsec isn't an option (for example, not using ExpressRoute Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private peering.",
+ "severity": "Low",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Encryption",
+ "id": "G04.02"
+ },
+ {
+ "guid": "ee1ac551-c4d5-46cf-b035-d0a3c50d87ad",
+ "text": "Consider using Azure Bastion to securely connect to your network.",
+ "severity": "Medium",
+ "service": "microsoft.network/bastionhosts",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.01"
+ },
+ {
+ "guid": "6eab9eb6-762b-485e-8ea8-15aa5dba0bd0",
+ "text": "Use Azure Bastion in a subnet /26 or larger.",
+ "severity": "Medium",
+ "service": "microsoft.network/bastionhosts",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.02"
+ },
+ {
+ "guid": "3b22a5a6-7e7a-48ed-9b30-e38c3f29812b",
+ "text": "When using Azure Front Door and Azure Application Gateway to help protect HTTP/S apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway to receive traffic only from Azure Front Door.",
+ "severity": "Low",
+ "service": "microsoft.network/frontdoorwebapplicationfirewalls",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.03"
+ },
+ {
+ "guid": "1d7aa9b6-4704-4489-a804-2d88e79d17b7",
+ "text": "Use Azure Front Door and WAF policies to provide global protection across Azure regions for inbound HTTP/S connections to a landing zone.",
+ "severity": "Medium",
+ "service": "microsoft.network/frontdoorwebapplicationfirewalls",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.04"
+ },
+ {
+ "guid": "2363cefe-179b-4599-be0d-5973cd4cd21b",
+ "text": "Deploy WAFs and other reverse proxies are required for inbound HTTP/S connections, deploy them within a landing-zone virtual network and together with the apps that they're protecting and exposing to the internet.",
+ "severity": "High",
+ "service": "microsoft.network/frontdoorwebapplicationfirewalls",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.05"
+ },
+ {
+ "guid": "b034c01e-110b-463a-b36e-e3346e57f225",
+ "text": "Assess and review network outbound traffic configuration and strategy before the upcoming breaking change. On September 30, 2025, default outbound access for new deployments will be retired and only explicit access configurations will be allowed",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.06"
+ },
+ {
+ "guid": "b1c82a3f-2320-4dfa-8972-7ae4823c8930",
+ "text": "Add diagnostic settings to save DDoS related logs for all the protected public IP addresses (DDoS IP or Network Protection).",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.07"
+ },
+ {
+ "guid": "088137f5-e6c4-4cfd-9e50-4547c2447ec6",
+ "text": "Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses endpoints within the virtual networks.",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Internet",
+ "id": "G05.08"
+ },
+ {
+ "guid": "e43a58a9-c229-49c4-b7b5-7d0c655562f2",
+ "text": "Use Private Link, where available, for shared Azure PaaS services.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "PaaS",
+ "id": "G06.01"
+ },
+ {
+ "guid": "d301d6e8-72e5-42e3-911c-c58b5a4b1511",
+ "text": "Ensure that control-plane communication for Azure PaaS services injected into a virtual network is not broken, for example with a 0.0.0.0/0 route or an NSG rule that blocks control plane traffic.",
+ "severity": "High",
+ "service": "AppGW",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "PaaS",
+ "id": "G06.02"
+ },
+ {
+ "guid": "7e7a8ed4-b30e-438c-9f29-812b2363cefe",
+ "text": "Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link you can block all FQDNs, otherwise allow only the required PaaS services.",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "PaaS",
+ "id": "G06.03"
+ },
+ {
+ "guid": "b3e4563a-4d87-4397-98b6-62d6d15f512a",
+ "text": "Access Azure PaaS services from on-premises via private endpoints and ExpressRoute private peering. This method avoids transiting over the public internet.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "PaaS",
+ "id": "G06.04"
+ },
+ {
+ "guid": "4704489a-8042-4d88-b79d-17b73b22a5a6",
+ "text": "Don't enable virtual network service endpoints by default on all subnets.",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "PaaS",
+ "id": "G06.05"
+ },
+ {
+ "guid": "1dc04554-dece-4ffb-a49e-5c683e09f8da",
+ "text": "Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to store and analyze firewall logs.",
+ "severity": "Low",
+ "service": "Firewall",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.01"
+ },
+ {
+ "guid": "e960fc6b-4ab2-4db6-9609-3745135f9ffa",
+ "text": "Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.02"
+ },
+ {
+ "guid": "64e7000e-3c06-485e-b455-ced7f454cba3",
+ "text": "Implement backups for your firewall rules",
+ "severity": "Low",
+ "service": "Firewall",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.03"
+ },
+ {
+ "guid": "715d833d-4708-4527-90ac-1b142c7045ba",
+ "text": "Add diagnostic settings to save logs, using the Resource Specific destination table, for all Azure Firewall deployments.",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.04"
+ },
+ {
+ "guid": "6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a",
+ "text": "As part of your TLS inspection, plan for receiving traffic from Azure App Gateways for inspection.",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.05"
+ },
+ {
+ "guid": "0da83bb1-2f39-49af-b5c9-835fc455e3d1",
+ "text": "Use IP Groups or IP prefixes to reduce number of IP table rules",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.06"
+ },
+ {
+ "guid": "7371dc21-251a-47a3-af14-6e01b9da4757",
+ "text": "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT Gateway settings, and ensuring seamless failover. If the port count approaches the limit, it\u00e2\u20ac\u2122s a sign that SNAT exhaustion might be imminent.",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.07"
+ },
+ {
+ "guid": "828cec2e-af6c-40c2-8fa2-1b681ee63eb7",
+ "text": "Arrange rules within the firewall policy into Rule Collection Groups and Rule Collections and based on their frequency of use",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.08"
+ },
+ {
+ "guid": "c44c6f0e-1642-4a61-a17b-0922f835c93a",
+ "text": "Avoid wildcards as a source IP for DNATS, such as * or any, you should specify source IPs for incoming DNATs",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.09"
+ },
+ {
+ "guid": "346840b8-1064-496e-8396-4b1340172d52",
+ "text": "Enable TLS Inspection",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.10"
+ },
+ {
+ "guid": "39990a13-915c-45f9-a2d3-562d7d6c4b7c",
+ "text": "Use web categories to allow or deny outbound access to specific topics.",
+ "severity": "Low",
+ "service": "Firewall",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.11"
+ },
+ {
+ "guid": "94f3eede-9aa3-4088-92a3-bb9a56509fad",
+ "text": "Enable Azure Firewall DNS proxy configuration ",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.12"
+ },
+ {
+ "guid": "b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c",
+ "text": "Configure Azure Firewall IDPS mode to Deny for additional protection.",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.13"
+ },
+ {
+ "guid": "c10d51ef-f999-455d-bba0-5c90ece07447",
+ "text": "Use Azure Firewall Premium for additional security and protection.",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.14"
+ },
+ {
+ "guid": "e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3",
+ "text": "Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional protection.",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.15"
+ },
+ {
+ "guid": "5a4b1511-e43a-458a-ac22-99c4d7b57d0c",
+ "text": "Create a global Azure Firewall policy to govern security posture across the global network environment and assign it to all Azure Firewall instances. Allow for granular policies to meet requirements of specific regions by delegating incremental firewall policies to local security teams via Azure role-based access control.",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.16"
+ },
+ {
+ "guid": "14d99880-2f88-47e8-a134-62a7d85c94af",
+ "text": "Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress traffic to the Internet over protocols not supported by application rules.",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.17"
+ },
+ {
+ "guid": "e6c4cfd3-e504-4547-a244-7ec66138a720",
+ "text": "Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S inbound connections, and East/West traffic filtering (if the organization requires it)",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.18"
+ },
+ {
+ "guid": "a3784907-9836-4271-aafc-93535f8ec08b",
+ "text": "For subnets in VNets not connected to Virtual WAN, attach a route table so that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance",
+ "severity": "High",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.19"
+ },
+ {
+ "guid": "3c5a808d-c695-4c14-a63c-c7ab7a510e41",
+ "text": "Ensure there is a policy assignment to deny Public IP addresses\u00c2\u00a0directly tied to Virtual Machines",
+ "severity": "Medium",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.20"
+ },
+ {
+ "guid": "655562f2-b3e4-4563-a4d8-739748b662d6",
+ "text": "Configure supported partner SaaS security providers within Firewall Manager if the organization wants to use such solutions to help protect outbound connections.",
+ "severity": "Low",
+ "service": "Firewall",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Firewall",
+ "id": "G07.21"
+ },
+ {
+ "guid": "f4e7926a-ec35-476e-a412-5dd17136bd62",
+ "text": "Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits, if your circuits' peering location supports your Azure regions for the Local SKU.",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Cost",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.01"
+ },
+ {
+ "guid": "718cb437-b060-2589-8856-2e93a5c6633b",
+ "text": "If using ExpressRoute Direct, consider using ExpressRoute Local circuits to the local Azure regions to save costs",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Cost",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.02"
+ },
+ {
+ "guid": "7025b442-f6e9-4af6-b11f-c9574916016f",
+ "text": "Ensure that you're using unlimited-data ExpressRoute circuits only if you reach the bandwidth that justifies their cost.",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Cost",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.03"
+ },
+ {
+ "guid": "5bf68dc9-325e-4873-bf88-f8214ef2e5d2",
+ "text": "Use Connection Monitor for connectivity monitoring across the network, especially between on-premises and Azure.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.04"
+ },
+ {
+ "guid": "b30e38c3-f298-412b-8363-cefe179b599d",
+ "text": "Monitor ExpressRoute availability and utilization using built-in Express Route Insights.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.05"
+ },
+ {
+ "guid": "3f79ed00-203b-4c95-9efd-691505f5a1f9",
+ "text": "Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.06"
+ },
+ {
+ "guid": "5234c93f-b651-41dd-80c1-234177b91ced",
+ "text": "Avoid using ExpressRoute circuits for VNet-to-VNet communication.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.07"
+ },
+ {
+ "guid": "72e52e36-11cc-458b-9a4b-1511e43a58a9",
+ "text": "For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps ports, use ExpressRoute Direct.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.08"
+ },
+ {
+ "guid": "c2299c4d-7b57-4d0c-9555-62f2b3e4563a",
+ "text": "When low latency is required, or throughput from on-premises to Azure must be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from the data path.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.09"
+ },
+ {
+ "guid": "359c373e-7dd6-4162-9a36-4a907ecae48e",
+ "text": "Ensure that you have investigated the possibility to use ExpressRoute as primary connection to Azure.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.10"
+ },
+ {
+ "guid": "d4cd21b0-8813-47f5-b6c4-cfd3e504547c",
+ "text": "Ensure that you're using the right SKU for the ExpressRoute/VPN gateways based on bandwidth and performance requirements.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.11"
+ },
+ {
+ "guid": "fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb",
+ "text": "Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on customer or provider edge routing devices.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.12"
+ },
+ {
+ "guid": "e0d5973c-d4cd-421b-8881-37f5e6c4cfd3",
+ "text": "Use ExpressRoute circuits from different peering locations for redundancy.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.13"
+ },
+ {
+ "guid": "669b215a-ce43-4371-8f6f-11047f6490f1",
+ "text": "Connect the ExpressRoute Gateway to two or more circuits from different peering locations for higher resiliency.",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.14"
+ },
+ {
+ "guid": "f29812b2-363c-4efe-879b-599de0d5973c",
+ "text": "When you use multiple ExpressRoute circuits, or multiple on-prem locations, make sure to optimize routing with BGP attributes, if certain paths are preferred.",
+ "description": "You can use AS-path prepending and connection weights to influence traffic from Azure to on-premises, and the full range of BGP attributes in your own routers to influence traffic from on-premises to Azure.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.15"
+ },
+ {
+ "guid": "d581a947-69a2-4783-942e-9df3664324c8",
+ "text": "If using ExpressRoute, your on-premises routing should be dynamic: in the event of a connection failure it should converge to the remaining connection of the circuit. Load should be shared across both connections ideally as active/active, although active/passive is supported too.",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.16"
+ },
+ {
+ "guid": "72105cc8-aaea-4ee1-8c7a-ad25977afcaf",
+ "text": "If you are using a route table in the GatewaySubnet, make sure that gateway routes are propagated.",
+ "severity": "High",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.17"
+ },
+ {
+ "guid": "cf3fe65c-fec0-495a-8edc-9675200f2add",
+ "text": "Use site-to-site VPN as failover of ExpressRoute, especially if only using a single ExpressRoute circuit.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.18"
+ },
+ {
+ "guid": "b258f058-b9f6-46cd-b28d-990106f0c3f8",
+ "text": "Ensure the two physical links of your ExpressRoute circuit are connected to two distinct edge devices in your network.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.19"
+ },
+ {
+ "guid": "2447ec66-138a-4720-8f1c-e16ed301d6e8",
+ "text": "Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.20"
+ },
+ {
+ "guid": "8042d88e-79d1-47b7-9b22-a5a67e7a8ed4",
+ "text": "When traffic isolation or dedicated bandwidth is required, such as for separating production and nonproduction environments, use different ExpressRoute circuits. It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.",
+ "severity": "Medium",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.21"
+ },
+ {
+ "guid": "45866df8-cf85-4ca9-bbe2-65ec1478919e",
+ "text": "Use redundant VPN appliances on-premises (active/active or active/passive).",
+ "severity": "Medium",
+ "service": "VPN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.22"
+ },
+ {
+ "guid": "4d873974-8b66-42d6-b15f-512a65498f6d",
+ "text": "Use zone-redundant VPN gateways to connect branches or remote locations to Azure (where available).",
+ "severity": "Medium",
+ "service": "VPN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hybrid",
+ "id": "G08.23"
+ },
+ {
+ "guid": "e2e8abac-3571-4559-ab91-53e89f89dc7b",
+ "text": "When deploying partner networking technologies or NVAs, follow the partner vendor's guidance",
+ "severity": "Medium",
+ "service": "VM",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.01"
+ },
+ {
+ "guid": "ce463dbb-bc8a-4c2a-aebc-92a43da1dae2",
+ "text": "If you need transit between ExpressRoute and VPN gateways in hub and spoke scenarios, use Azure Route Server.",
+ "severity": "Low",
+ "service": "ExpressRoute",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.02"
+ },
+ {
+ "guid": "91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc",
+ "text": "If using Route Server, use a /27 prefix for the Route Server subnet.",
+ "severity": "Low",
+ "service": "microsoft.network/virtualhubs",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.03"
+ },
+ {
+ "guid": "7dd61623-a364-4a90-9eca-e48ebd54cd7d",
+ "text": "Ensure that shared networking services, including ExpressRoute gateways, VPN gateways, and Azure Firewall or partner NVAs in the central-hub virtual network. If necessary, also deploy DNS servers.",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Cost",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.04"
+ },
+ {
+ "guid": "4722d929-c1b1-4cd6-81f5-4b29bade39ad",
+ "text": "Use Azure Monitor for Networks to monitor the end-to-end state of the networks on Azure.",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.05"
+ },
+ {
+ "guid": "cc881471-607c-41cc-a0e6-14658dd558f9",
+ "text": "For network architectures with multiple hub-and-spoke topologies across Azure regions, use global virtual network peerings between the hub VNets to connect the regions to each other.",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.06"
+ },
+ {
+ "guid": "0e7c28ec-9366-4572-83b0-f4664b1d944a",
+ "text": "When connecting spoke virtual networks to the central hub virtual network, consider VNet peering limits (500), the maximum number of prefixes that can be advertised via ExpressRoute (1000)",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.07"
+ },
+ {
+ "guid": "c76cb5a2-abe2-11ed-afa1-0242ac120002",
+ "text": "Use the setting 'Allow traffic to remote virtual network' when configuring VNet peerings",
+ "severity": "High",
+ "service": "VNet",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.08"
+ },
+ {
+ "guid": "3d457936-e9b7-41eb-bdff-314b26450b12",
+ "text": "Consider the limit of routes per route table (400).",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.09"
+ },
+ {
+ "guid": "e8bbac75-7155-49ab-a153-e8908ae28c84",
+ "text": "Leverage a network design based on the traditional hub-and-spoke network topology for network scenarios that require maximum flexibility.",
+ "severity": "Medium",
+ "service": "VNet",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Hub and spoke",
+ "id": "G09.10"
+ },
+ {
+ "guid": "261623a7-65a9-417e-8f34-8ef254c27d42",
+ "text": "Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology of the Virtual WAN, status, and key metrics.",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.01"
+ },
+ {
+ "guid": "412e7f98-3f63-4047-82dd-69c5b5c2622f",
+ "text": "Consider Virtual WAN for simplified Azure networking management, and make sure your scenario is explicitly described in the list of Virtual WAN routing designs",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Operations",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.02"
+ },
+ {
+ "guid": "54b69bad-33aa-4d5e-ac68-e1d76667313b",
+ "text": "Use a Virtual WAN hub per Azure region to connect multiple landing zones together across Azure regions via a common global Azure Virtual WAN.",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.03"
+ },
+ {
+ "guid": "8ac6a9e0-1e6a-483d-b5de-32c199248160",
+ "text": "Follow the principle 'traffic in Azure stays in Azure' so that communication across resources in Azure occurs via the Microsoft backbone network",
+ "severity": "Low",
+ "service": "VWAN",
+ "waf": "Performance",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.04"
+ },
+ {
+ "guid": "6667313b-4f56-464b-9e98-4a859c773e7d",
+ "text": "Ensure that the network architecture is within the Azure Virtual WAN limits.",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.05"
+ },
+ {
+ "guid": "9c75dfef-573c-461c-a698-68598595581a",
+ "text": "Assign enough IP space to virtual hubs, ideally a /23 prefix.",
+ "severity": "High",
+ "service": "VWAN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.06"
+ },
+ {
+ "guid": "d49ac006-6670-4bc9-9948-d3e0a3a94f4d",
+ "text": "Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute or VPN.",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.07"
+ },
+ {
+ "guid": "2586b854-237e-47f1-84a1-d45d4cd2310d",
+ "text": "Make sure that your IaC deployments are configuring label-based propagation in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.08"
+ },
+ {
+ "guid": "727c77e1-b9aa-4a37-a024-129d042422c1",
+ "text": "Make sure that your IaC deployments does not disable branch-to-branch traffic in Virtual WAN, unless these flows should be explicitly blocked.",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Reliability",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.09"
+ },
+ {
+ "guid": "7d5d1e4e-6146-458d-9558-fd77249b8211",
+ "text": "For outbound Internet traffic protection and filtering, deploy Azure Firewall in secured hubs",
+ "severity": "Medium",
+ "service": "VWAN",
+ "waf": "Security",
+ "category": "Network Topology and Connectivity",
+ "subcategory": "Virtual WAN",
+ "id": "G10.10"
+ },
+ {
+ "guid": "cd163e39-84a5-4b39-97b7-6973abd70d94",
+ "text": "When deploying Microsoft Entra Connect, leverage a staging sever for high availability / Disaster recovery",
+ "severity": "Medium",
+ "waf": "Reliability",
+ "category": "Identity and Access Management",
+ "subcategory": "Microsoft Entra ID",
+ "id": "H01.01"
+ },
+ {
+ "guid": "4348bf81-7573-4512-8f46-9061cc198fea",
+ "text": "Use managed identities instead of service principals for authentication to Azure services. You can check for existing service principals via Entra ID > Sign in Logs > Service principal logins.",
+ "severity": "High",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Microsoft Entra ID and Hybrid Identity",
+ "id": "H02.01"
+ },
+ {
+ "guid": "1559ab91-53e8-4908-ae28-c84c33b6b780",
+ "text": "When deploying Active Directory on Windows Server, use a location with Availability Zones and deploy at least two VMs across these zones. If not available, deploy in an Availability Set",
+ "severity": "Medium",
+ "waf": "Reliability",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.01"
+ },
+ {
+ "guid": "f5664b5e-984a-4859-a773-e7d261623a76",
+ "text": "Use Azure custom RBAC roles for the following key roles to provide fine-grain access across your ALZ: Azure platform owner, network management, security operations, subscription owner, application owner. Align these roles to teams and responsibilities within your business.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.02"
+ },
+ {
+ "guid": "e6a83de5-de32-4c19-a248-1607d5d1e4e6",
+ "text": "Enforce centralized and delegated responsibilities to manage resources deployed inside the landing zone, based on role and security requirements",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.03"
+ },
+ {
+ "guid": "12e7f983-f630-4472-8dd6-9c5b5c2622f5",
+ "text": "Only use the authentication type Work or school account for all account types. Avoid using the Microsoft account",
+ "severity": "High",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.04"
+ },
+ {
+ "guid": "348ef254-c27d-442e-abba-c7571559ab91",
+ "text": "Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign across Management Groups and Subscriptions.",
+ "severity": "High",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.05"
+ },
+ {
+ "guid": "4b69bad3-3aad-45e8-a68e-1d76667313b4",
+ "text": "Only use groups to assign permissions. Add on-premises groups to the Entra ID only group if a group management system is already in place.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.06"
+ },
+ {
+ "guid": "d5d1e4e6-1465-48d3-958f-d77249b82111",
+ "text": "Where required, use Microsoft Entra ID Application Proxy to give remote users secure and authenticated access to internal applications (hosted in the cloud or on-premises).",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.07"
+ },
+ {
+ "guid": "53e8908a-e28c-484c-93b6-b7808b9fe5c4",
+ "text": "Enforce Microsoft Entra ID conditional-access policies for any user with rights to Azure environments",
+ "severity": "Low",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.08"
+ },
+ {
+ "guid": "1cf0b8da-70bd-44d0-94af-8d99cfc89ae1",
+ "text": "Integrate Microsoft Entra ID logs with the platform-central Azure Monitor. Azure Monitor allows for a single source of truth around log and monitoring data in Azure, giving organizations a cloud native options to meet requirements around log collection and retention.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.09"
+ },
+ {
+ "guid": "14658d35-58fd-4772-99b8-21112df27ee4",
+ "text": "Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish zero standing access and least privilege",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.10"
+ },
+ {
+ "guid": "35037e68-9349-4c15-b371-228514f4cdff",
+ "text": "Avoid using on-premises synced accounts for Microsoft Entra ID role assignments.",
+ "severity": "Medium",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.11"
+ },
+ {
+ "guid": "1049d403-a923-4c34-94d0-0018ac6a9e01",
+ "text": "Enforce multi-factor authentication for any user with rights to the Azure environments",
+ "severity": "High",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.12"
+ },
+ {
+ "guid": "984a859c-773e-47d2-9162-3a765a917e1f",
+ "text": "Implement an emergency access or break-glass accounts to prevent tenant-wide account lockout",
+ "severity": "High",
+ "service": "Entra",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Identity",
+ "id": "H03.13"
+ },
+ {
+ "guid": "9cf5418b-1520-4b7b-add7-88eb28f833e8",
+ "text": "Configure Identity network segmentation through the use of a virtual Network and peer back to the hub. Providing authentication inside application landing zone (legacy).",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Landing zones",
+ "id": "H04.01"
+ },
+ {
+ "guid": "d4d1ad54-1abc-4919-b267-3f342d3b49e4",
+ "text": "Use Azure RBAC to manage data plane access to resources, if possible. E.g. Data Operations across Key Vault, Storage Account and Database Services.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Landing zones",
+ "id": "H04.02"
+ },
+ {
+ "guid": "d505ebcb-79b1-4274-9c0d-a27c8bea489c",
+ "text": "Use Microsoft Entra ID PIM access reviews to periodically validate resource entitlements.",
+ "severity": "Medium",
+ "waf": "Security",
+ "category": "Identity and Access Management",
+ "subcategory": "Landing zones",
+ "id": "H04.03"
+ }
+ ],
+ "yesno": [
+ {
+ "name": "Yes"
+ },
+ {
+ "name": "No"
+ }
+ ],
+ "waf": [
+ {
+ "name": "Operations"
+ },
+ {
+ "name": "Reliability"
+ },
+ {
+ "name": "Performance"
+ },
+ {
+ "name": "Cost"
+ },
+ {
+ "name": "Security"
+ }
+ ],
+ "categories": [
+ {
+ "name": "Platform Automation And Devops"
+ },
+ {
+ "name": "Network Topology And Connectivity"
+ },
+ {
+ "name": "Azure Billing And Microsoft Entra Id Tenants"
+ },
+ {
+ "name": "Resource Organization"
+ },
+ {
+ "name": "Governance"
+ },
+ {
+ "name": "Management"
+ },
+ {
+ "name": "Identity And Access Management"
+ },
+ {
+ "name": "Security"
+ }
+ ],
+ "metadata": {
+ "timestamp": "September 26, 2024",
+ "name": "Azure Landing Zone Review"
+ }
+}
\ No newline at end of file
diff --git a/v2/checklists/alz.yaml b/v2/checklists/alz.yaml
new file mode 100644
index 000000000..c16cf942c
--- /dev/null
+++ b/v2/checklists/alz.yaml
@@ -0,0 +1,371 @@
+name: Azure Landing Zone Review
+areas:
+- name: Resource Organization
+ subareas:
+ - name: Subscriptions
+ include:
+ nameSelector:
+ - revcl-FlatManagementGroupHierarchyFourLevels
+ - revcl-SandboxManagementGroupUsers
+ - revcl-PlatformManagementGroupRootManagementGroup
+ - revcl-AzureVirtualWanHubPrivateDomainNameSystem
+ - revcl-RootManagementGroupSubscriptions
+ - revcl-ManagementGroupHierarchySettingsManagementGroups
+ - revcl-RootLevelManagementGroupManagementGroups
+ - revcl-ResourceOwnersAccessReview
+ - revcl-ItCoreTeamProvisionResources
+ - revcl-ReservedInstanceVmSkusReservedInstances
+ - revcl-StorageCapacityMetricsDiskSpace
+ - revcl-CostManagementProcess
+ - revcl-DedicatedIdentitySubscriptionIdentityManagementGroup
+ - revcl-CostManagementTags
+ - revcl-ConfidentialOnlineManagementGroupSovereignLandingZone
+ - name: Regions
+ include:
+ nameSelector:
+ - revcl-GlobalScaleCloudPlatformRightAzureRegionS
+ - revcl-GeoDisasterRecoveryCapabilitiesLocalizedResourceCapacityConstraint
+ - revcl-RequiredServicesDeploymentRegions-1
+ - name: Naming and tagging
+ include:
+ nameSelector:
+ - revcl-MicrosoftBestPracticeNamingStandardsAzureNamingTool
+- name: Governance
+ subareas:
+ - name: Optimize your cloud investment
+ include:
+ nameSelector:
+ - revcl-ForecastedBudgetAlertsActual
+ - name: Governance
+ include:
+ nameSelector:
+ - revcl-LeverageAzurePolicyPolicyInitiatives
+ - revcl-AzurePolicyDefinitionsAzureRoleAssignments
+ - revcl-IntermediateRootManagementGroupAzurePolicyDefinitions
+ - revcl-HighestAppropriateLevelPolicyAssignments
+ - revcl-SubscriptionManagementGroupLevelAzurePolicy
+ - revcl-OperationalOverheadPolicies
+ - revcl-ResourcePolicyContributorRoleCentralItTeam
+ - revcl-RootManagementGroupScopeAzurePolicyAssignments
+ - revcl-DataSovereigntyRequirementsAzurePolicies
+ - revcl-SovereigntyPolicyBaselinePolicyInitiativeSovereignLandingZone
+ - revcl-SovereignLandingZoneSovereignControlObjectives
+ - revcl-SovereignLandingZoneSovereignControlObjectives-1
+- name: Platform Automation and DevOps
+ subareas:
+ - name: Security
+ include:
+ nameSelector:
+ - revcl-CombinedProcessInnovationProcess
+ - name: Development Strategy
+ include:
+ nameSelector:
+ - revcl-AzureLandingZoneArchitectureLeverageDeclarativeInfrastructure
+ - name: DevOps Team Topologies
+ include:
+ nameSelector:
+ - revcl-CrossFunctionalDevopsPlatformTeamAzureLandingZoneArchitecture
+ - revcl-AzureLandingZonePlatformTeamFunctions
+ - revcl-DevopsPlatformTeamSupportApplicationWorkloadTeams
+ - revcl-CiCdPipelineIacArtifacts
+ - revcl-UnitTestsApplicationCode
+ - revcl-VirtualMachinesUserPasswordsKeyVaultSecrets
+ - revcl-NewLandingZoneSubscriptionVending
+ - name: Development Lifecycle
+ include:
+ nameSelector:
+ - revcl-VersionControlSystemSourceCode
+ - revcl-BranchingStrategyVersionControl
+ - revcl-PullRequestStrategyCodeChanges
+ - revcl-QuickFixesTechnicalDebt
+- name: Management
+ subareas:
+ - name: Monitoring
+ include:
+ nameSelector:
+ - revcl-SingleMonitorLogsWorkspaceAzureRoleBasedAccessControl
+ - revcl-LogRetentionRequirementsAzureStorage
+ - revcl-AzureAutomanageMachineConfigurationAuditCapabilitiesOsLevelVirtualMachine
+ - revcl-NetworkWatcherTrafficFlows
+ - revcl-CriticalSharedServicesResourceLocks
+ - revcl-AzureRoleAssignmentsDenyPolicies
+ - revcl-OverallPlatformMonitoringSolutionResourceHealthEvents
+ - revcl-AzureServiceHealthPlatformActionGroups
+ - revcl-RawLogEntriesPremisesMonitoringSystems
+ - revcl-AzureMonitorLogsInsights
+ - revcl-AzureDiagnosticExtensionLogStorageSharedStorageAccounts
+ - revcl-AzureMonitorAlertsOperationalAlerts
+ - revcl-AppropriateDataCollectionMonitoringRequirements
+ - revcl-LogAnalyticsWorkspaceAzureAutomationAccounts
+ - revcl-PlatformComponentsLandingZone
+ - name: Fault Tolerance
+ include:
+ nameSelector:
+ - revcl-LeverageAvailabilityZonesVms
+ - revcl-ProductionWorkloadSingleVm
+ - revcl-AzureLoadBalancerIncomingNetworkTraffic
+ - name: Data Protection
+ include:
+ nameSelector:
+ - revcl-CrossRegionReplicationAzure
+ - revcl-DifferentBackupTypesAzureBackup
+ - name: App delivery
+ include:
+ nameSelector:
+ - revcl-ApplicationDeliveryServicesAzureFrontDoor
+ - revcl-ApplicationDeliveryServicesAzureFrontDoor-1
+ - name: Operational compliance
+ include:
+ nameSelector:
+ - revcl-AzureUpdateManagerPatchingMechanism
+ - revcl-AzureUpdateManagerPatchingMechanism-1
+ - revcl-CompliantBaselineVmConfigurationVmExtensions
+ - revcl-VmSecurityConfigurationDriftGuestConfigurationFeatures
+ - name: Protect and Recover
+ include:
+ nameSelector:
+ - revcl-AzureVirtualMachinesDisasterRecoveryScenariosAzureSiteRecovery
+ - revcl-NativePaasServiceDisasterRecoveryCapabilities
+ - revcl-AzureCompatibleRdPartyBackupSolutionAzureNativeBackupCapabilities
+- name: Security
+ subareas:
+ - name: Service enablement framework
+ include:
+ nameSelector:
+ - revcl-NewAzureServices
+ - revcl-ServiceRequestAzureServices
+ - name: Operations
+ include:
+ nameSelector:
+ - revcl-MicrosoftEntraIdReportingCapabilitiesAccessControlAuditReports
+ - revcl-AzureActivityLogsAzureMonitorLogs
+ - revcl-DefenderCloudSecurityPostureManagementSubscriptions
+ - revcl-DefenderCloudWorkloadProtectionPlanServers
+ - revcl-DefenderCloudWorkloadProtectionPlansAzureResources
+ - revcl-EndpointProtectionIaasServers
+ - revcl-BaseOperatingSystemPatchingAzureMonitorLogs
+ - revcl-CentralizedAzureMonitorLogAnalyticsWorkspaceDefaultResourceConfigurations
+ - revcl-SovereignLandingZoneEntraIdTenant
+ - revcl-SovereignLandingZoneEntraIdTenant-1
+ - revcl-AzureEventGridBasedSolutionLogOrientedRealTimeAlerts
+ - name: Secure privileged access
+ include:
+ nameSelector:
+ - revcl-SeparatePrivilegedAdminAccountsAzureAdministrativeTasks
+ - name: Access control
+ include:
+ nameSelector:
+ - revcl-IncidentResponsePlanAzureServices
+ - revcl-ZeroTrustApproachAzurePlatform
+ - name: Encryption and keys
+ include:
+ nameSelector:
+ - revcl-AzureKeyVaultSecrets
+ - revcl-DifferentAzureKeyVaultsTransactionScaleLimits
+ - revcl-AzureKeyVaultSoftDelete
+ - revcl-CustomMicrosoftEntraIdRolesPrivilegeModel
+ - revcl-PublicCertificateAuthoritiesCertificateManagement
+ - revcl-AutomatedProcessCertificateRotation
+ - revcl-VirtualNetworkServiceEndpointPrivateEndpoint
+ - revcl-PlatformCentralAzureMonitorLogAnalyticsWorkspaceSecretUsage
+ - revcl-DelegateKeyVaultInstantiationPrivilegedAccess
+ - revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys-1
+ - revcl-AzureKeyVaultApplication
+ - revcl-AppropriateRegionPairsDisasterRecoveryRegions
+ - revcl-SovereignLandingZoneAzureKeyVault
+ - name: Overview
+ include:
+ nameSelector:
+ - revcl-SecureTransferStorageAccounts
+ - revcl-ContainerSoftDeleteStorageAccount
+- name: Azure Billing and Microsoft Entra ID Tenants
+ subareas:
+ - name: Microsoft Customer Agreement
+ include:
+ nameSelector:
+ - revcl-BillingAccountNotificationConfigureAgreement
+ - revcl-EffectiveCostManagementInvoiceSections
+ - revcl-MicrosoftAzurePlanDevTestOffer
+ - revcl-AgreementBillingRbacRoleAssignmentsMcaBillingAccount
+ - name: Microsoft Entra ID Tenants
+ include:
+ nameSelector:
+ - revcl-OneEntraTenantAzureResources
+ - revcl-MicrosoftEntraIdTenantsMultiTenantAutomationApproach
+ - revcl-LeverageAzureLighthouseMultiTenantManagement
+ - name: Cloud Solution Provider
+ include:
+ nameSelector:
+ - revcl-AzureLighthouseTenant
+ - revcl-SupportRequestEscalationProcess
+ - revcl-SetupCostReportingAzureCostManagement
+ - name: Enterprise Agreement
+ include:
+ nameSelector:
+ - revcl-NotificationContactsGroupMailbox
+ - revcl-EnrollmentHierarchyDepartments
+ - revcl-DaViewChargesAoViewCharges
+ - revcl-EnterpriseDevTestSubscriptionsNonProductionWorkloads
+- name: Network Topology and Connectivity
+ subareas:
+ - name: IP plan
+ include:
+ nameSelector:
+ - revcl-OverlappingIpAddressSpacesAzureRegions
+ - revcl-AddressAllocationRangesIpAddresses
+ - revcl-IpAddressSpaceLargeVirtualNetworks
+ - revcl-OverlappingIpAddressRangesDrSites
+ - revcl-AzurePrivateDnsDelegatedZone
+ - revcl-AzureDnsPrivateResolverNameResolution
+ - revcl-RedHatOpenshiftPreferredDnsSolution
+ - revcl-AzureDnsDnsRecords
+ - name: App delivery
+ include:
+ nameSelector:
+ - revcl-AzureFrontDoorDeliveryApplicationContent
+ - revcl-AppDeliveryLandingZones
+ - revcl-IpProtectionPlansPublicIpAddresses
+ - name: Segmentation
+ include:
+ nameSelector:
+ - revcl-AzureFirewallSubnets
+ - revcl-GatewaySubnets
+ - revcl-NsgInboundDefaultRulesVirtualnetworkServiceTag
+ - revcl-DelegateSubnetCreationLandingZoneOwner
+ - revcl-LandingZonesEastWestTraffic
+ - revcl-ApplicationSecurityGroupsApplicationTeam
+ - revcl-ApplicationSecurityGroupsMicroSegmentTraffic
+ - revcl-VnetFlowLogsExternalTrafficFlows
+ - revcl-NsgRulesLimit
+ - name: Encryption
+ include:
+ nameSelector:
+ - revcl-ExpressrouteDirectLayerTwoLevel
+ - revcl-ExpressroutePrivatePeeringExpressrouteDirect
+ - name: Internet
+ include:
+ nameSelector:
+ - revcl-AzureBastionNetwork
+ - revcl-AzureBastionSubnet
+ - revcl-InboundHttpSConnectionsAzureFrontDoor
+ - revcl-AzureFrontDoorAzureApplicationGateway
+ - revcl-OtherReverseProxiesLandingZoneVirtualNetwork
+ - revcl-PublicIpAddressesEndpointsIpProtectionPlans
+ - revcl-NetworkOutboundTrafficConfigurationDefaultOutboundAccess
+ - revcl-DdosRelatedLogsPublicIpAddresses
+ - name: PaaS
+ include:
+ nameSelector:
+ - revcl-AzurePaasServicesControlPlaneTraffic
+ - revcl-AzurePaasServicesPrivateLink
+ - revcl-AzurePaasServicesExpressroutePrivatePeering
+ - revcl-VirtualNetworkServiceEndpointsDefault
+ - revcl-AzurePaasServicesAzureFirewall
+ - name: Firewall
+ include:
+ nameSelector:
+ - revcl-HttpSInboundConnectionsEastWestTrafficFiltering
+ - revcl-AzureRoleBasedAccessControlGlobalAzureFirewallPolicy
+ - revcl-SupportedPartnerSaasSecurityProvidersFirewallManager
+ - revcl-FqdnBasedNetworkRulesApplicationRules
+ - revcl-AzureFirewallPremiumAdditionalSecurity
+ - revcl-AzureFirewallThreatIntelligenceModeAdditionalProtection
+ - revcl-AzureFirewallIdpsModeAdditionalProtection
+ - revcl-NetworkVirtualApplianceVirtualWan
+ - revcl-ResourceSpecificDestinationTableAzureFirewallDeployments
+ - revcl-AzureFirewallClassicRulesFirewallPolicy
+ - revcl-RuleCollectionGroupsRuleCollections
+ - revcl-IpTableRulesIpGroups
+ - revcl-SourceIpIncomingDnats
+ - revcl-NatGatewaySettingsSnatPortUsage
+ - revcl-TlsInspection
+ - revcl-WebCategoriesOutboundAccess
+ - revcl-AzureAppGatewaysTlsInspection
+ - revcl-AzureFirewallDnsProxyConfiguration
+ - revcl-PublicIpAddressesPolicyAssignment
+ - revcl-AzureFirewallAzureMonitor
+ - revcl-FirewallRulesBackups
+ - name: Hybrid
+ include:
+ nameSelector:
+ - revcl-PrimaryConnectionPossibility
+ - revcl-MultipleExpressrouteCircuitsPremLocations
+ - revcl-RightSkuExpressrouteVpnGateways
+ - revcl-UnlimitedDataExpressrouteCircuitsBandwidth
+ - revcl-CircuitsPeeringLocationLocalSku
+ - revcl-ZoneRedundantExpressrouteGatewayAzureRegions
+ - revcl-GbpsPortsExpressrouteDirect
+ - revcl-LowLatencyExpressrouteGateway
+ - revcl-ZoneRedundantVpnGatewaysRemoteLocations
+ - revcl-RedundantVpnAppliancesPremises
+ - revcl-LocalAzureRegionsExpressrouteLocalCircuits
+ - revcl-DifferentExpressrouteCircuitsIsolatedRoutingDomains
+ - revcl-ExpressRouteInsightsExpressrouteAvailability
+ - revcl-ConnectionMonitorConnectivityMonitoring
+ - revcl-DifferentPeeringLocationsExpressrouteCircuits
+ - revcl-SingleExpressrouteCircuitSite
+ - revcl-RouteTableGatewayRoutes
+ - revcl-PremisesRoutingConnectionFailure
+ - revcl-TwoDistinctEdgeDevicesTwoPhysicalLinks
+ - revcl-BidirectionalForwardingDetectionEdgeRoutingDevices
+ - revcl-DifferentPeeringLocationsExpressrouteGateway
+ - revcl-ExpressrouteVirtualNetworkGatewayDiagnosticLogs
+ - revcl-ExpressrouteCircuitsVnetCommunication
+ - name: Hub and spoke
+ include:
+ nameSelector:
+ - revcl-SpokeNetworkTopologyNetworkDesign
+ - revcl-CentralHubVirtualNetworkNetworkingServices
+ - revcl-PartnerNetworkingTechnologiesPartnerVendor
+ - revcl-AzureRouteServerVpnGateways
+ - revcl-RouteServerSubnet
+ - revcl-GlobalVirtualNetworkPeeringsNetworkArchitectures
+ - revcl-AzureMonitorEndState
+ - revcl-CentralHubVirtualNetworkVnetPeeringLimits
+ - revcl-RouteTableLimit
+ - revcl-RemoteVirtualNetworkVnetPeerings
+ - name: Virtual WAN
+ include:
+ nameSelector:
+ - revcl-SimplifiedAzureNetworkingManagementVirtualWanRoutingDesigns
+ - revcl-CommonGlobalAzureVirtualWanVirtualWanHub
+ - revcl-MicrosoftBackboneNetworkPrinciple
+ - revcl-OutboundInternetTrafficProtectionAzureFirewall
+ - revcl-AzureVirtualWanLimitsNetworkArchitecture
+ - revcl-AzureMonitorInsightsVirtualWan
+ - revcl-IacDeploymentsVirtualWan
+ - revcl-HubRoutingPreferenceAsPath
+ - revcl-IacDeploymentsLabelBasedPropagation
+ - revcl-EnoughIpSpaceVirtualHubs
+- name: Identity and Access Management
+ subareas:
+ - name: Microsoft Entra ID
+ include:
+ nameSelector:
+ - revcl-MicrosoftEntraConnectStagingSever
+ - name: Microsoft Entra ID and Hybrid Identity
+ include:
+ nameSelector:
+ - revcl-ServicePrincipalLoginsExistingServicePrincipals
+ - name: Identity
+ include:
+ nameSelector:
+ - revcl-CloudOperatingModelRbacModel
+ - revcl-AuthenticationTypeSchoolAccount
+ - revcl-GroupManagementSystemEntraId
+ - revcl-MicrosoftEntraIdConditionalAccessPoliciesAzureEnvironments
+ - revcl-MultiFactorAuthenticationAzureEnvironments
+ - revcl-DelegatedResponsibilitiesLandingZone
+ - revcl-MicrosoftEntraIdPrivilegedIdentityManagementZeroStandingAccess
+ - revcl-ActiveDirectoryWindowsServer
+ - revcl-AzureCustomRbacRolesAzurePlatformOwner
+ - revcl-MicrosoftEntraIdLogsCloudNativeOptions
+ - revcl-TenantWideAccountLockoutEmergencyAccess
+ - revcl-MicrosoftEntraIdRoleAssignmentsPremisesSyncedAccounts
+ - revcl-MicrosoftEntraIdApplicationProxyRemoteUsers
+ - name: Landing zones
+ include:
+ nameSelector:
+ - revcl-ApplicationLandingZoneIdentityNetworkSegmentation
+ - revcl-DataPlaneAccessDataOperations
+ - revcl-MicrosoftEntraIdPimAccessReviewsResourceEntitlements
diff --git a/v2/checklists/app_delivery.yaml b/v2/checklists/app_delivery.yaml
new file mode 100644
index 000000000..22cbd5d25
--- /dev/null
+++ b/v2/checklists/app_delivery.yaml
@@ -0,0 +1,11 @@
+name: Network Application Delivery
+description: |
+ Items
+include:
+ resourceTypeSelector:
+ - microsoft.network/applicationGateways
+ - Microsoft.Cdn/profiles
+ - Microsoft.Network/trafficManagerProfiles
+ - Microsoft.Network/loadBalancers
+ sourceSelector:
+ - revcl
\ No newline at end of file
diff --git a/v2/checklists/app_delivery_aprl.yaml b/v2/checklists/app_delivery_aprl.yaml
new file mode 100644
index 000000000..9b33971c3
--- /dev/null
+++ b/v2/checklists/app_delivery_aprl.yaml
@@ -0,0 +1,11 @@
+name: Network Application Delivery
+description: |
+ Items
+include:
+ resourceTypeSelector:
+ - microsoft.network/applicationGateways
+ - Microsoft.Cdn/profiles
+ - Microsoft.Network/trafficManagerProfiles
+ - Microsoft.Network/loadBalancers
+ sourceSelector:
+ - aprl
\ No newline at end of file
diff --git a/v2/checklists/aprl.yaml b/v2/checklists/aprl.yaml
new file mode 100644
index 000000000..a9fded368
--- /dev/null
+++ b/v2/checklists/aprl.yaml
@@ -0,0 +1,4 @@
+name: 'All recommendations'
+include:
+ sourceSelector:
+ - aprl
diff --git a/v2/checklists/no-service.yaml b/v2/checklists/no-service.yaml
new file mode 100644
index 000000000..229fd66bb
--- /dev/null
+++ b/v2/checklists/no-service.yaml
@@ -0,0 +1,8 @@
+name: Multi-service
+description: |
+ This checklist is for cross-service recommendations.
+include:
+ resourceTypeSelector:
+ - None
+ sourceSelector:
+ - revcl
\ No newline at end of file
diff --git a/v2/checklists/waf.yaml b/v2/checklists/waf.yaml
new file mode 100644
index 000000000..a97aa741e
--- /dev/null
+++ b/v2/checklists/waf.yaml
@@ -0,0 +1,7 @@
+name: 'Azure Review Checklists - WAF'
+include:
+ sourceSelector:
+ - revcl
+exclude:
+ resourceTypeSelector:
+ - None
\ No newline at end of file
diff --git a/v2/checklists/waf_resiliency.yaml b/v2/checklists/waf_resiliency.yaml
new file mode 100644
index 000000000..21f6a6c4b
--- /dev/null
+++ b/v2/checklists/waf_resiliency.yaml
@@ -0,0 +1,6 @@
+name: 'Azure Review Checklists - WAF Resiliency'
+include:
+ sourceSelector:
+ - revcl
+ wafSelector:
+ - Reliability
diff --git a/v2/checklists/waf_sg_security.yaml b/v2/checklists/waf_sg_security.yaml
new file mode 100644
index 000000000..ec15a1ced
--- /dev/null
+++ b/v2/checklists/waf_sg_security.yaml
@@ -0,0 +1,6 @@
+name: 'Azure Review Checklists - WAF Security'
+include:
+ sourceSelector:
+ - wafsg
+ wafSelector:
+ - Security
diff --git a/v2/recos/Practices/Cost/revcl-AgreementBillingRbacRoleAssignmentsMcaBillingAccount.yaml b/v2/recos/Practices/Cost/revcl-AgreementBillingRbacRoleAssignmentsMcaBillingAccount.yaml
new file mode 100644
index 000000000..ad18e5a08
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-AgreementBillingRbacRoleAssignmentsMcaBillingAccount.yaml
@@ -0,0 +1,18 @@
+name: revcl-AgreementBillingRbacRoleAssignmentsMcaBillingAccount
+title: Periodically audit the agreement billing RBAC role assignments to review who
+ has access to your MCA billing account
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 1
+labels:
+ guid: ae757485-92a4-482a-8bc9-eefe6f5b5ec3
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Microsoft Customer Agreement
+ id: A04.04
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-AzureRunCostsDevTestSystems.yaml b/v2/recos/Practices/Cost/revcl-AzureRunCostsDevTestSystems.yaml
new file mode 100644
index 000000000..b8473ead7
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-AzureRunCostsDevTestSystems.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureRunCostsDevTestSystems
+title: Consider running dev/test systems in a snooze model to save and optimize Azure
+ run costs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: a491dfc4-9353-4213-9217-eef0949f9467
+links:
+- type: docs
+ url: https://azure.microsoft.com/pricing/offers/dev-test/
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-BillingAccountNotificationConfigureAgreement.yaml b/v2/recos/Practices/Cost/revcl-BillingAccountNotificationConfigureAgreement.yaml
new file mode 100644
index 000000000..e8a02ddfd
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-BillingAccountNotificationConfigureAgreement.yaml
@@ -0,0 +1,17 @@
+name: revcl-BillingAccountNotificationConfigureAgreement
+title: Configure Agreement billing account notification contact email
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: 6ad5c3dd-e5ea-4ff1-81a4-7886ff87845c
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Microsoft Customer Agreement
+ id: A04.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-DatabaseManagementSystemExcessiveNetworkTraffic.yaml b/v2/recos/Practices/Cost/revcl-DatabaseManagementSystemExcessiveNetworkTraffic.yaml
new file mode 100644
index 000000000..638e8bea1
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-DatabaseManagementSystemExcessiveNetworkTraffic.yaml
@@ -0,0 +1,20 @@
+name: revcl-DatabaseManagementSystemExcessiveNetworkTraffic
+title: It isn't recommended to host the database management system (DBMS) and application
+ layers of SAP systems in different VNets and connect them with VNet peering because
+ of the substantial costs that excessive network traffic between the layers can produce.
+ Recommend using subnets within the Azure virtual network to separate the SAP application
+ layer and DBMS layer.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 0
+labels:
+ guid: b65c878b-4b14-4f4e-92d8-d873936493f2
+links:
+- type: docs
+ url: https://me.sap.com/notes/2015553
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-EffectiveCostManagementInvoiceSections.yaml b/v2/recos/Practices/Cost/revcl-EffectiveCostManagementInvoiceSections.yaml
new file mode 100644
index 000000000..4e5098f16
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-EffectiveCostManagementInvoiceSections.yaml
@@ -0,0 +1,18 @@
+name: revcl-EffectiveCostManagementInvoiceSections
+title: Use Billing Profiles and Invoice sections to structure your agreements billing
+ for effective cost management
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: 90e87802-602f-4dfb-acea-67c60689f1d7
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Microsoft Customer Agreement
+ id: A04.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/manage/mca-section-invoice
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-EnrollmentHierarchyDepartments.yaml b/v2/recos/Practices/Cost/revcl-EnrollmentHierarchyDepartments.yaml
new file mode 100644
index 000000000..ed1bd0587
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-EnrollmentHierarchyDepartments.yaml
@@ -0,0 +1,18 @@
+name: revcl-EnrollmentHierarchyDepartments
+title: Use departments and accounts to map your organization's structure to your enrollment
+ hierarchy which can help with separating billing.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: 12cd499f-96e2-4e41-a243-231fb3245a1c
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Enterprise Agreement
+ id: A03.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-EnterpriseDevTestSubscriptionsNonProductionWorkloads.yaml b/v2/recos/Practices/Cost/revcl-EnterpriseDevTestSubscriptionsNonProductionWorkloads.yaml
new file mode 100644
index 000000000..b245c3dcb
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-EnterpriseDevTestSubscriptionsNonProductionWorkloads.yaml
@@ -0,0 +1,18 @@
+name: revcl-EnterpriseDevTestSubscriptionsNonProductionWorkloads
+title: Make use of Enterprise Dev/Test Subscriptions to reduce costs for non-production
+ workloads
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: 5cf9f485-2784-49b3-9824-75d9b8bdb57b
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Enterprise Agreement
+ id: A03.05
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-ForecastedBudgetAlertsActual.yaml b/v2/recos/Practices/Cost/revcl-ForecastedBudgetAlertsActual.yaml
new file mode 100644
index 000000000..92967fb9d
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-ForecastedBudgetAlertsActual.yaml
@@ -0,0 +1,17 @@
+name: revcl-ForecastedBudgetAlertsActual
+title: Configure 'Actual' and 'Forecasted' Budget Alerts.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 1
+labels:
+ guid: 29fd366b-a180-452b-9bd7-954b7700c667
+ area: Governance
+ subarea: Optimize your cloud investment
+ id: E02.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/costs/tutorial-acm-create-budgets?bc=%2Fazure%2Fcloud-adoption-framework%2F_bread%2Ftoc.json&toc=%2Fazure%2Fcloud-adoption-framework%2Ftoc.json
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-MicrosoftAzurePlanDevTestOffer.yaml b/v2/recos/Practices/Cost/revcl-MicrosoftAzurePlanDevTestOffer.yaml
new file mode 100644
index 000000000..e3c9a1a2f
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-MicrosoftAzurePlanDevTestOffer.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftAzurePlanDevTestOffer
+title: Make use of Microsoft Azure plan for dev/test offer to reduce costs for non-production
+ workloads
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: e81a73f0-84c4-4641-b406-14db3b4d1f50
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Microsoft Customer Agreement
+ id: A04.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-NotificationContactsGroupMailbox.yaml b/v2/recos/Practices/Cost/revcl-NotificationContactsGroupMailbox.yaml
new file mode 100644
index 000000000..cede4c48c
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-NotificationContactsGroupMailbox.yaml
@@ -0,0 +1,17 @@
+name: revcl-NotificationContactsGroupMailbox
+title: Configure Notification Contacts to a group mailbox
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 1
+labels:
+ guid: 685cb4f2-ac9c-4b19-9167-993ed0b32415
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Enterprise Agreement
+ id: A03.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-ProductionHanaDatabaseServerVmsSapHanaHardwareDirectory.yaml b/v2/recos/Practices/Cost/revcl-ProductionHanaDatabaseServerVmsSapHanaHardwareDirectory.yaml
new file mode 100644
index 000000000..86e681b12
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-ProductionHanaDatabaseServerVmsSapHanaHardwareDirectory.yaml
@@ -0,0 +1,17 @@
+name: revcl-ProductionHanaDatabaseServerVmsSapHanaHardwareDirectory
+title: As a lower-cost alternative configuration (multipurpose), you can choose a
+ low-performance SKU for your non-production HANA database server VMs. However, it
+ is important to note that some VM types, such as E-series, are not HANA certified
+ (SAP HANA Hardware Directory) or cannot achieve storage latency of less than 1ms.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: 9877f353-2591-4e8b-8381-e9043fed1010
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-SapHanaDatabaseBackupsAzureVms.yaml b/v2/recos/Practices/Cost/revcl-SapHanaDatabaseBackupsAzureVms.yaml
new file mode 100644
index 000000000..39d47245a
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-SapHanaDatabaseBackupsAzureVms.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapHanaDatabaseBackupsAzureVms
+title: Review SAP HANA database backups for Azure VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 0
+labels:
+ guid: ff5136bd-dcf1-4d2b-ae52-39333efdf45a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/sap-hana-database-about
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-SapSystemStartStopCosts.yaml b/v2/recos/Practices/Cost/revcl-SapSystemStartStopCosts.yaml
new file mode 100644
index 000000000..d0015ea3d
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-SapSystemStartStopCosts.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapSystemStartStopCosts
+title: Automate SAP System Start-Stop to manage costs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 1
+labels:
+ guid: 925d1f8c-01f3-4a67-948e-aabf0a1fad60
+links:
+- type: docs
+ url: https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/optimize-your-azure-costs-by-automating-sap-system-start-stop/ba-p/2120675
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-SetupCostReportingAzureCostManagement.yaml b/v2/recos/Practices/Cost/revcl-SetupCostReportingAzureCostManagement.yaml
new file mode 100644
index 000000000..f7aa535d9
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-SetupCostReportingAzureCostManagement.yaml
@@ -0,0 +1,17 @@
+name: revcl-SetupCostReportingAzureCostManagement
+title: Setup Cost Reporting and Views with Azure Cost Management
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 1
+labels:
+ guid: 32952499-58c8-4e6f-ada5-972e67893d55
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Cloud Solution Provider
+ id: A02.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-SiteRecoveryMonitoring.yaml b/v2/recos/Practices/Cost/revcl-SiteRecoveryMonitoring.yaml
new file mode 100644
index 000000000..a6427faa8
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-SiteRecoveryMonitoring.yaml
@@ -0,0 +1,14 @@
+name: revcl-SiteRecoveryMonitoring
+title: Review Site Recovery built-in monitoring, where used for SAP.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 1
+labels:
+ guid: cafde29d-a0af-4bcd-87c0-0f299d63f0e8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-StandardHddAzureStorageAzureStandardSsdStorage.yaml b/v2/recos/Practices/Cost/revcl-StandardHddAzureStorageAzureStandardSsdStorage.yaml
new file mode 100644
index 000000000..8496ee59c
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-StandardHddAzureStorageAzureStandardSsdStorage.yaml
@@ -0,0 +1,18 @@
+name: revcl-StandardHddAzureStorageAzureStandardSsdStorage
+title: In the case of using Azure Premium Storage with SAP HANA, Azure Standard SSD
+ storage can be used to select a cost-conscious storage solution. However, please
+ note that choosing Standard SSD or Standard HDD Azure storage will affect the SLA
+ of the individual VMs. Also, for systems with lower I/O throughput and low latency,
+ such as non-production environments, lower series VMs can be used.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: 71dc00cd-4392-4262-8949-20c05e6c0333
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1
+queries: {}
diff --git a/v2/recos/Practices/Cost/revcl-SupportRequestEscalationProcess.yaml b/v2/recos/Practices/Cost/revcl-SupportRequestEscalationProcess.yaml
new file mode 100644
index 000000000..24d503560
--- /dev/null
+++ b/v2/recos/Practices/Cost/revcl-SupportRequestEscalationProcess.yaml
@@ -0,0 +1,17 @@
+name: revcl-SupportRequestEscalationProcess
+title: Discuss support request and escalation process with CSP partner
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Cost
+severity: 2
+labels:
+ guid: a24d0de3-d4b9-4dfb-8ddd-bbfaf123fa01
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Cloud Solution Provider
+ id: A02.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-cloud-solution-provider#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AppropriateDataCollectionMonitoringRequirements.yaml b/v2/recos/Practices/Operations/revcl-AppropriateDataCollectionMonitoringRequirements.yaml
new file mode 100644
index 000000000..4f686e336
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AppropriateDataCollectionMonitoringRequirements.yaml
@@ -0,0 +1,18 @@
+name: revcl-AppropriateDataCollectionMonitoringRequirements
+title: Ensure that monitoring requirements have been assessed and that appropriate
+ data collection and alerting configurations are applied
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 859c3900-4514-41eb-b010-475d695abd74
+ area: Management
+ subarea: Monitoring
+ id: F01.18
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/best-practices/monitoring
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AutomatedBackupVAzureVms.yaml b/v2/recos/Practices/Operations/revcl-AutomatedBackupVAzureVms.yaml
new file mode 100644
index 000000000..29eb78e18
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AutomatedBackupVAzureVms.yaml
@@ -0,0 +1,14 @@
+name: revcl-AutomatedBackupVAzureVms
+title: Review the use of Automated Backup v2 for Azure VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: b82e650f-676d-417d-994d-fc33ca54ec14
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-sql/virtual-machines/windows/automated-backup?view=azuresql
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AvailabilityZoneZoneDeployment.yaml b/v2/recos/Practices/Operations/revcl-AvailabilityZoneZoneDeployment.yaml
new file mode 100644
index 000000000..88bf32f27
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AvailabilityZoneZoneDeployment.yaml
@@ -0,0 +1,16 @@
+name: revcl-AvailabilityZoneZoneDeployment
+title: If deploying to an availability zone, ensure that the VM's zone deployment
+ is available once the quota has been approved. Submit a support request with the
+ subscription, VM series, number of CPUs and availability zone required.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: cbfad17b-f240-42bf-a1d8-f4f4cee661c8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/quotas/quickstart-increase-quota-portal
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureBestPracticesAzureInfrastructure.yaml b/v2/recos/Practices/Operations/revcl-AzureBestPracticesAzureInfrastructure.yaml
new file mode 100644
index 000000000..7d12ead9d
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureBestPracticesAzureInfrastructure.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureBestPracticesAzureInfrastructure
+title: Perform a quality check for SAP HANA on the provisioned Azure infrastructure
+ to verify that provisioned VMs comply with SAP HANA on Azure best practices.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 73686af4-6791-4f89-95ad-a43324e13811
+links:
+- type: docs
+ url: https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/QualityCheck
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureBlobStorageSqlServer.yaml b/v2/recos/Practices/Operations/revcl-AzureBlobStorageSqlServer.yaml
new file mode 100644
index 000000000..57209192b
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureBlobStorageSqlServer.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureBlobStorageSqlServer
+title: Review the use of Azure Blob Storage with SQL Server 2016.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 2943b6d8-1d31-4e19-ade7-78e6b26d1962
+links:
+- type: docs
+ url: https://learn.microsoft.com/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-ver16
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureDiagnosticExtensionLogStorageSharedStorageAccounts.yaml b/v2/recos/Practices/Operations/revcl-AzureDiagnosticExtensionLogStorageSharedStorageAccounts.yaml
new file mode 100644
index 000000000..c36bd305e
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureDiagnosticExtensionLogStorageSharedStorageAccounts.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureDiagnosticExtensionLogStorageSharedStorageAccounts
+title: When necessary, use shared storage accounts within the landing zone for Azure
+ diagnostic extension log storage.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 619e8a13-f988-4795-85d6-26886d70ba6c
+ area: Management
+ subarea: Monitoring
+ id: F01.16
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/agents/diagnostics-extension-overview
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureFrontDoorDeliveryApplicationContent.yaml b/v2/recos/Practices/Operations/revcl-AzureFrontDoorDeliveryApplicationContent.yaml
new file mode 100644
index 000000000..0a5a97f23
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureFrontDoorDeliveryApplicationContent.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureFrontDoorDeliveryApplicationContent
+title: Develop a plan for securing the delivery application content from your Workload
+ spokes using Application Gateway and Azure Front door. You can use the Application
+ Delivery checklist to for recommendations.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 373f482f-3e39-4d39-8aa4-7e566f6082b6
+ area: Network Topology and Connectivity
+ subarea: App delivery
+ id: D01.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-app-delivery
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureLandingZoneArchitectureLeverageDeclarativeInfrastructure.yaml b/v2/recos/Practices/Operations/revcl-AzureLandingZoneArchitectureLeverageDeclarativeInfrastructure.yaml
new file mode 100644
index 000000000..b4c5d7561
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureLandingZoneArchitectureLeverageDeclarativeInfrastructure.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureLandingZoneArchitectureLeverageDeclarativeInfrastructure
+title: Leverage Declarative Infrastructure as Code Tools such as Azure Bicep, ARM
+ Templates or Terraform to build and maintain your Azure Landing Zone architecture.
+ Both from a Platform and Application workload perspective.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 2cdc9d99-dbcc-4ad4-97f5-e7d358bdfa73
+ area: Platform Automation and DevOps
+ subarea: Development Strategy
+ id: H03.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureLandingZonePlatformTeamFunctions.yaml b/v2/recos/Practices/Operations/revcl-AzureLandingZonePlatformTeamFunctions.yaml
new file mode 100644
index 000000000..3c9708372
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureLandingZonePlatformTeamFunctions.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureLandingZonePlatformTeamFunctions
+title: Aim to define functions for Azure Landing Zone Platform team.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: 634146bf-7085-4419-a7b5-f96d2726f6da
+ area: Platform Automation and DevOps
+ subarea: DevOps Team Topologies
+ id: H01.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureLinuxVmBackupStrategiesOracleDatabase.yaml b/v2/recos/Practices/Operations/revcl-AzureLinuxVmBackupStrategiesOracleDatabase.yaml
new file mode 100644
index 000000000..47a1d1f97
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureLinuxVmBackupStrategiesOracleDatabase.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureLinuxVmBackupStrategiesOracleDatabase
+title: Review Oracle Database in Azure Linux VM backup strategies.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: c823873a-2bec-4c2a-b684-a1ce8ae80efd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/oracle-database-backup-strategies
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureNativeIdentityServicesManagedServiceProviders.yaml b/v2/recos/Practices/Operations/revcl-AzureNativeIdentityServicesManagedServiceProviders.yaml
new file mode 100644
index 000000000..ad0dfd282
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureNativeIdentityServicesManagedServiceProviders.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureNativeIdentityServicesManagedServiceProviders
+title: If you partner with customers by managing their SAP estates, consider Azure
+ Lighthouse. Azure Lighthouse allows managed service providers to use Azure native
+ identity services to authenticate to the customers' environment. It puts the control
+ in the hands of customers, because they can revoke access at any time and audit
+ service providers' actions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: b7056168-6199-4732-a514-cdbb2d5c9c54
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/lighthouse/overview
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureNetworkWatcherNetworkLatencyMeasurements.yaml b/v2/recos/Practices/Operations/revcl-AzureNetworkWatcherNetworkLatencyMeasurements.yaml
new file mode 100644
index 000000000..26121f89e
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureNetworkWatcherNetworkLatencyMeasurements.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureNetworkWatcherNetworkLatencyMeasurements
+title: Use Connection Monitor in Azure Network Watcher to monitor latency metrics
+ for SAP databases and application servers. Or collect and display network latency
+ measurements by using Azure Monitor.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 523181aa-4174-4269-93ff-8ae7d7d47431
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/network-watcher/connection-monitor-overview
+- type: docs
+ url: https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/collecting-and-displaying-niping-network-latency-measurements/ba-p/1833979
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureRoleAssignmentsDenyPolicies.yaml b/v2/recos/Practices/Operations/revcl-AzureRoleAssignmentsDenyPolicies.yaml
new file mode 100644
index 000000000..326331b20
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureRoleAssignmentsDenyPolicies.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureRoleAssignmentsDenyPolicies
+title: Use deny policies to supplement Azure role assignments. The combination of
+ deny policies and Azure role assignments ensures the appropriate guardrails are
+ in place to enforce who can deploy and configure resources and what resources they
+ can deploy and configure.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: a6e55d7d-8a2a-4db1-87d6-326af625ca44
+ area: Management
+ subarea: Monitoring
+ id: F01.10
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureServiceHealthPlatformActionGroups.yaml b/v2/recos/Practices/Operations/revcl-AzureServiceHealthPlatformActionGroups.yaml
new file mode 100644
index 000000000..0ef5afdb0
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureServiceHealthPlatformActionGroups.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureServiceHealthPlatformActionGroups
+title: Include alerts and action groups as part of the Azure Service Health platform
+ to ensure that alerts or issues can be actioned
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: d5f345bf-97ab-41a7-819c-6104baa7d48c
+ area: Management
+ subarea: Monitoring
+ id: F01.12
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService-1.yaml b/v2/recos/Practices/Operations/revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService-1.yaml
new file mode 100644
index 000000000..00c5b9c8e
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService-1
+title: Use Azure Site Recovery monitoring to maintain the health of the disaster recovery
+ service for SAP application servers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: d89fd98d-23e4-4b40-a92e-32db9365522c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/site-recovery/site-recovery-monitor-and-troubleshoot
+- type: docs
+ url: https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureTaggingResources.yaml b/v2/recos/Practices/Operations/revcl-AzureTaggingResources.yaml
new file mode 100644
index 000000000..d6e4f5e62
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureTaggingResources.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureTaggingResources
+title: Azure tagging can be leveraged to logically group and track resources, automate
+ their deployments, and most importantly, provide visibility on the incurred costs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 579266bc-ca27-45fa-a1ab-fe9d55d04c3c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance
+- type: docs
+ url: https://learn.microsoft.com/training/modules/analyze-costs-create-budgets-azure-cost-management/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-AzureUpdateManagerAvailableUpdates.yaml b/v2/recos/Practices/Operations/revcl-AzureUpdateManagerAvailableUpdates.yaml
new file mode 100644
index 000000000..9978e96f1
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-AzureUpdateManagerAvailableUpdates.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureUpdateManagerAvailableUpdates
+title: Use Azure Update Manager to check the status of available updates for a single
+ VM or multiple VMs and consider scheduling regular patching.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 4d116785-d2fa-456c-96ad-48408fe72734
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/update-manager/scheduled-patching?tabs=schedule-updates-single-machine%2Cschedule-updates-scale-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/keep-your-virtual-machines-updated/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-BranchingStrategyVersionControl.yaml b/v2/recos/Practices/Operations/revcl-BranchingStrategyVersionControl.yaml
new file mode 100644
index 000000000..cb8619a42
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-BranchingStrategyVersionControl.yaml
@@ -0,0 +1,19 @@
+name: revcl-BranchingStrategyVersionControl
+title: Follow a branching strategy to allow teams to collaborate better and efficiently
+ manage version control of IaC and application Code. Review options such as Github
+ Flow.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: c7245dd4-af8a-403a-8bb7-890c1a7cfa9d
+ area: Platform Automation and DevOps
+ subarea: Development Lifecycle
+ id: H02.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-CiCdPipelineIacArtifacts.yaml b/v2/recos/Practices/Operations/revcl-CiCdPipelineIacArtifacts.yaml
new file mode 100644
index 000000000..63fe7af05
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-CiCdPipelineIacArtifacts.yaml
@@ -0,0 +1,18 @@
+name: revcl-CiCdPipelineIacArtifacts
+title: Use a CI/CD pipeline to deploy IaC artifacts and ensure the quality of your
+ deployment and Azure environments.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 165eb5e9-b434-448a-9e24-178632186212
+ area: Platform Automation and DevOps
+ subarea: DevOps Team Topologies
+ id: H01.04
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-CombinedProcessInnovationProcess.yaml b/v2/recos/Practices/Operations/revcl-CombinedProcessInnovationProcess.yaml
new file mode 100644
index 000000000..100df8bc2
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-CombinedProcessInnovationProcess.yaml
@@ -0,0 +1,18 @@
+name: revcl-CombinedProcessInnovationProcess
+title: Integrate security into the already combined process of development and operations
+ in DevOps to mitigate risks in the innovation process.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: cc87a3bc-c572-4ad2-92ed-8cabab66160f
+ area: Platform Automation and DevOps
+ subarea: Security
+ id: H04.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/landing-zone-security#secure
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-CriticalSharedServicesResourceLocks.yaml b/v2/recos/Practices/Operations/revcl-CriticalSharedServicesResourceLocks.yaml
new file mode 100644
index 000000000..72b385358
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-CriticalSharedServicesResourceLocks.yaml
@@ -0,0 +1,19 @@
+name: revcl-CriticalSharedServicesResourceLocks
+title: Use resource locks to prevent accidental deletion of critical shared services.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 541acdce-9793-477b-adb3-751ab2ab13ad
+ area: Management
+ subarea: Monitoring
+ id: F01.09
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-CrossFunctionalDevopsPlatformTeamAzureLandingZoneArchitecture.yaml b/v2/recos/Practices/Operations/revcl-CrossFunctionalDevopsPlatformTeamAzureLandingZoneArchitecture.yaml
new file mode 100644
index 000000000..327a09751
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-CrossFunctionalDevopsPlatformTeamAzureLandingZoneArchitecture.yaml
@@ -0,0 +1,18 @@
+name: revcl-CrossFunctionalDevopsPlatformTeamAzureLandingZoneArchitecture
+title: Ensure you have a cross functional DevOps Platform Team to build, manage and
+ maintain your Azure Landing Zone architecture.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: e85f4226-bf06-4e35-8a8b-7aee4d2d633a
+ area: Platform Automation and DevOps
+ subarea: DevOps Team Topologies
+ id: H01.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/platform-automation-devops
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-DevopsPlatformTeamSupportApplicationWorkloadTeams.yaml b/v2/recos/Practices/Operations/revcl-DevopsPlatformTeamSupportApplicationWorkloadTeams.yaml
new file mode 100644
index 000000000..36cd6a5a7
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-DevopsPlatformTeamSupportApplicationWorkloadTeams.yaml
@@ -0,0 +1,19 @@
+name: revcl-DevopsPlatformTeamSupportApplicationWorkloadTeams
+title: Aim to define functions for application workload teams to be self-sufficient
+ and not require DevOps Platform Team support. Achieve this through the use of custom
+ RBAC role.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: a9e65070-c59e-4112-8bf6-c11364d4a2a5
+ area: Platform Automation and DevOps
+ subarea: DevOps Team Topologies
+ id: H01.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/devops-teams-topologies#design-recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-DifferentDnsZonesPrivateDnsZones.yaml b/v2/recos/Practices/Operations/revcl-DifferentDnsZonesPrivateDnsZones.yaml
new file mode 100644
index 000000000..728713030
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-DifferentDnsZonesPrivateDnsZones.yaml
@@ -0,0 +1,18 @@
+name: revcl-DifferentDnsZonesPrivateDnsZones
+title: Use different DNS zones to distinguish each environment (sandbox, development,
+ preproduction, and production) from each other. The exception is for SAP deployments
+ with their own VNet; here, private DNS zones might not be necessary.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: a2858f78-105b-4f52-b7a9-5b0f4439743b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-EnablingWriteAcceleratorMSeries.yaml b/v2/recos/Practices/Operations/revcl-EnablingWriteAcceleratorMSeries.yaml
new file mode 100644
index 000000000..d99a456de
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-EnablingWriteAcceleratorMSeries.yaml
@@ -0,0 +1,12 @@
+name: revcl-EnablingWriteAcceleratorMSeries
+title: Enabling Write accelerator for M series when using premium disks(V1)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 347c2dcc-e6eb-4b04-80c5-628b171aa62d
+links: []
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-ExistingAzureBasedSapSystemsSapSolutions.yaml b/v2/recos/Practices/Operations/revcl-ExistingAzureBasedSapSystemsSapSolutions.yaml
new file mode 100644
index 000000000..7df9bedbd
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-ExistingAzureBasedSapSystemsSapSolutions.yaml
@@ -0,0 +1,20 @@
+name: revcl-ExistingAzureBasedSapSystemsSapSolutions
+title: Azure Center for SAP solutions (ACSS) is an Azure offering that makes SAP a
+ top-level workload on Azure. ACSS is an end-to-end solution that enables you to
+ create and run SAP systems as a unified workload on Azure and provides a more seamless
+ foundation for innovation. You can take advantage of the management capabilities
+ for both new and existing Azure-based SAP systems.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 4620dc87-e948-4ce8-8426-f3e6e5d7bd85
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/center-sap-solutions/overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-center-sap-solutions/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-ExistingManagementGroupPoliciesSapSubscriptions.yaml b/v2/recos/Practices/Operations/revcl-ExistingManagementGroupPoliciesSapSubscriptions.yaml
new file mode 100644
index 000000000..757c9bdad
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-ExistingManagementGroupPoliciesSapSubscriptions.yaml
@@ -0,0 +1,16 @@
+name: revcl-ExistingManagementGroupPoliciesSapSubscriptions
+title: enforce existing Management Group policies to SAP Subscriptions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 6ba28021-4591-4147-9e39-e5309cccd979
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups
+- type: docs
+ url: https://learn.microsoft.com/training/modules/enterprise-scale-organization/4-management-group-subscription-organization
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-FastViolationDetectionConsistentPolicyAdherence.yaml b/v2/recos/Practices/Operations/revcl-FastViolationDetectionConsistentPolicyAdherence.yaml
new file mode 100644
index 000000000..500ed8755
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-FastViolationDetectionConsistentPolicyAdherence.yaml
@@ -0,0 +1,18 @@
+name: revcl-FastViolationDetectionConsistentPolicyAdherence
+title: 'Use Azure Policy for access control and compliance reporting. Azure Policy
+ provides the ability to enforce organization-wide settings to ensure consistent
+ policy adherence and fast violation detection. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 5325ae52-5ba3-44d4-985e-2213ace7bb12
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-GlobalTransitConnectivityGlobalNetworks.yaml b/v2/recos/Practices/Operations/revcl-GlobalTransitConnectivityGlobalNetworks.yaml
new file mode 100644
index 000000000..22cc65d64
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-GlobalTransitConnectivityGlobalNetworks.yaml
@@ -0,0 +1,19 @@
+name: revcl-GlobalTransitConnectivityGlobalNetworks
+title: Use Virtual WAN for Azure deployments in new, large, or global networks where
+ you need global transit connectivity across Azure regions and on-premises locations.
+ With this approach, you won't need to manually set up transitive routing for Azure
+ networking, and you can follow a standard for SAP on Azure deployments.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 7d4bc7d2-c34a-452e-8f1d-6ae3c8eafcc3
+links:
+- type: docs
+ url: https://learn.microsoft.com/training/modules/introduction-azure-virtual-wan/?source=recommendations
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-HighAvailabilitySuseClustersSapSolutionManager.yaml b/v2/recos/Practices/Operations/revcl-HighAvailabilitySuseClustersSapSolutionManager.yaml
new file mode 100644
index 000000000..8a29853f0
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-HighAvailabilitySuseClustersSapSolutionManager.yaml
@@ -0,0 +1,18 @@
+name: revcl-HighAvailabilitySuseClustersSapSolutionManager
+title: Use Azure Monitor for SAP solutions to monitor your SAP workloads(SAP HANA,
+ high-availability SUSE clusters, and SQL systems) on Azure. Consider supplementing
+ Azure Monitor for SAP solutions with SAP Solution Manager.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 14591147-5e39-4e53-89cc-cd979366bcda
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/monitor/about-azure-monitor-sap-solutions
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-IpAddressDrSide.yaml b/v2/recos/Practices/Operations/revcl-IpAddressDrSide.yaml
new file mode 100644
index 000000000..a8dc95f34
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-IpAddressDrSide.yaml
@@ -0,0 +1,16 @@
+name: revcl-IpAddressDrSide
+title: Consider reserving IP address on DR side when configuring ASR
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 9cccd979-366b-4cda-8750-ab1ab039d95d
+links:
+- type: docs
+ url: https://learn.microsoft.com/training/modules/protect-on-premises-infrastructure-with-azure-site-recovery/?source=recommendations
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-network-infrastructure/
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-LeverageAzureResourceTagResourceGrouping.yaml b/v2/recos/Practices/Operations/revcl-LeverageAzureResourceTagResourceGrouping.yaml
new file mode 100644
index 000000000..9f7914748
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-LeverageAzureResourceTagResourceGrouping.yaml
@@ -0,0 +1,18 @@
+name: revcl-LeverageAzureResourceTagResourceGrouping
+title: 'Leverage Azure resource tag for cost categorization and resource grouping
+ (: BillTo, Department (or Business Unit), Environment (Production, Stage, Development),
+ Tier (Web Tier, Application Tier), Application Owner, ProjectName)'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 4e138115-2318-41aa-9174-26943ff8ae7d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-resource-organization
+- type: docs
+ url: https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-ManySystemInterfacesSapLandscape.yaml b/v2/recos/Practices/Operations/revcl-ManySystemInterfacesSapLandscape.yaml
new file mode 100644
index 000000000..f4e47080c
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-ManySystemInterfacesSapLandscape.yaml
@@ -0,0 +1,21 @@
+name: revcl-ManySystemInterfacesSapLandscape
+title: If the virtual machine's DNS or virtual name is not changed during migration
+ to Azure, Background DNS and virtual names connect many system interfaces in the
+ SAP landscape, and customers are only sometimes aware of the interfaces that developers
+ define over time. Connection challenges arise between various systems when virtual
+ or DNS names change after migrations, and it's recommended to retain DNS aliases
+ to prevent these types of difficulties.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: fa9d30bc-1b82-4e4b-bfdf-6b017938b9e6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-networking/4-explore-name-resolution
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-MaximumNetworkThroughputSapLandingZones.yaml b/v2/recos/Practices/Operations/revcl-MaximumNetworkThroughputSapLandingZones.yaml
new file mode 100644
index 000000000..f32c01097
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-MaximumNetworkThroughputSapLandingZones.yaml
@@ -0,0 +1,20 @@
+name: revcl-MaximumNetworkThroughputSapLandingZones
+title: Virtual WAN manages connectivity between spoke VNets for virtual-WAN-based
+ topologies (no need to set up user-defined routing [UDR] or NVAs), and maximum network
+ throughput for VNet-to-VNet traffic in the same virtual hub is 50 gigabits per second.
+ If necessary, SAP landing zones can use VNet peering to connect to other landing
+ zones and overcome this bandwidth limitation.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: facc08c6-ea95-4641-91cd-fa09e573adbd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/networking/hub-spoke-vwan-architecture
+- type: docs
+ url: https://learn.microsoft.com/training/modules/hub-and-spoke-network-architecture/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-MultipleDelegatedSubnetsOneDelegatedSubnet.yaml b/v2/recos/Practices/Operations/revcl-MultipleDelegatedSubnetsOneDelegatedSubnet.yaml
new file mode 100644
index 000000000..f1d39a110
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-MultipleDelegatedSubnetsOneDelegatedSubnet.yaml
@@ -0,0 +1,19 @@
+name: revcl-MultipleDelegatedSubnetsOneDelegatedSubnet
+title: While Azure does help you to create multiple delegated subnets in a VNet, only
+ one delegated subnet can exist in a VNet for Azure NetApp Files. Attempts to create
+ a new volume will fail if you use more than one delegated subnet for Azure NetApp
+ Files.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 6e154e3a-a359-4282-ae6e-206173686af4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-delegate-subnet
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-network-topologies?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-NativePaasServiceDisasterRecoveryCapabilities.yaml b/v2/recos/Practices/Operations/revcl-NativePaasServiceDisasterRecoveryCapabilities.yaml
new file mode 100644
index 000000000..c281ef8d2
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-NativePaasServiceDisasterRecoveryCapabilities.yaml
@@ -0,0 +1,17 @@
+name: revcl-NativePaasServiceDisasterRecoveryCapabilities
+title: Ensure to use and test native PaaS service disaster recovery capabilities.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: b2ab13ad-a6e5-45d7-b8a2-adb117d6326a
+ area: Management
+ subarea: Protect and Recover
+ id: F04.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-NetworkVirtualAppliancesPartnerNetworkingTechnologies.yaml b/v2/recos/Practices/Operations/revcl-NetworkVirtualAppliancesPartnerNetworkingTechnologies.yaml
new file mode 100644
index 000000000..d43a69073
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-NetworkVirtualAppliancesPartnerNetworkingTechnologies.yaml
@@ -0,0 +1,19 @@
+name: revcl-NetworkVirtualAppliancesPartnerNetworkingTechnologies
+title: Consider deploying network virtual appliances (NVAs) between regions only if
+ partner NVAs are used. NVAs between regions or VNets aren't required if native NVAs
+ are present. When you're deploying partner networking technologies and NVAs, follow
+ the vendor's guidance to verify conflicting configurations with Azure networking.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 0cedb1f6-ae6c-492b-8b17-8061f50b16d3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/well-architected/services/networking/network-virtual-appliances/reliability
+- type: docs
+ url: https://learn.microsoft.com/training/modules/control-network-traffic-flow-with-routes/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-NewLandingZoneSubscriptionVending.yaml b/v2/recos/Practices/Operations/revcl-NewLandingZoneSubscriptionVending.yaml
new file mode 100644
index 000000000..b92cc5103
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-NewLandingZoneSubscriptionVending.yaml
@@ -0,0 +1,18 @@
+name: revcl-NewLandingZoneSubscriptionVending
+title: Implement automation for new landing zone for applications and workloads through
+ subscription vending
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: a52e0c98-76b9-4a09-a1c9-6b2babf22ac4
+ area: Platform Automation and DevOps
+ subarea: DevOps Team Topologies
+ id: H01.07
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/subscription-vending
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-OverallPlatformMonitoringSolutionResourceHealthEvents.yaml b/v2/recos/Practices/Operations/revcl-OverallPlatformMonitoringSolutionResourceHealthEvents.yaml
new file mode 100644
index 000000000..8089bfe43
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-OverallPlatformMonitoringSolutionResourceHealthEvents.yaml
@@ -0,0 +1,19 @@
+name: revcl-OverallPlatformMonitoringSolutionResourceHealthEvents
+title: Include service and resource health events as part of the overall platform
+ monitoring solution. Tracking service and resource health from the platform perspective
+ is an important component of resource management in Azure.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: e5695f22-23ac-4e8c-a123-08ca5017f154
+ area: Management
+ subarea: Monitoring
+ id: F01.11
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-OverlappingIpAddressRangesDrSites-1.yaml b/v2/recos/Practices/Operations/revcl-OverlappingIpAddressRangesDrSites-1.yaml
new file mode 100644
index 000000000..e892ebcdb
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-OverlappingIpAddressRangesDrSites-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-OverlappingIpAddressRangesDrSites-1
+title: Avoid using overlapping IP address ranges for production and DR sites.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 54c7c892-9cb1-407d-9325-ae525ba34d46
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing
+- type: docs
+ url: https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-PlatformComponentsLandingZone.yaml b/v2/recos/Practices/Operations/revcl-PlatformComponentsLandingZone.yaml
new file mode 100644
index 000000000..f0af0e30c
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-PlatformComponentsLandingZone.yaml
@@ -0,0 +1,21 @@
+name: revcl-PlatformComponentsLandingZone
+title: Establish monitoring for platform components of your landing zone, AMBA is
+ a framework solution that is available and provides an easy way to scale alerting
+ by using Azure Policy
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: aa45be6a-8f2d-4896-b0e3-775e6e94e610
+ area: Management
+ subarea: Monitoring
+ id: F01.19
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-monitor
+- type: docs
+ url: https://azure.github.io/azure-monitor-baseline-alerts/patterns/alz/
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-PullRequestStrategyCodeChanges.yaml b/v2/recos/Practices/Operations/revcl-PullRequestStrategyCodeChanges.yaml
new file mode 100644
index 000000000..d8d5e1a7e
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-PullRequestStrategyCodeChanges.yaml
@@ -0,0 +1,18 @@
+name: revcl-PullRequestStrategyCodeChanges
+title: Adopt a pull request strategy to help keep control of code changes merged into
+ branches.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 12aeea20-9165-4b3e-bdf2-6795fcd3cdbe
+ area: Platform Automation and DevOps
+ subarea: Development Lifecycle
+ id: H02.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-QuickFixesTechnicalDebt.yaml b/v2/recos/Practices/Operations/revcl-QuickFixesTechnicalDebt.yaml
new file mode 100644
index 000000000..2619e57ed
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-QuickFixesTechnicalDebt.yaml
@@ -0,0 +1,19 @@
+name: revcl-QuickFixesTechnicalDebt
+title: Establish a process for using code to implement quick fixes. Always register
+ quick fixes in your team's backlog so each fix can be reworked at a later point,
+ and you can limit technical debt.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 2676ae46-65ca-444e-8695-fdddeace4cb1
+ area: Platform Automation and DevOps
+ subarea: Development Lifecycle
+ id: H02.04
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-platform
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-RawLogEntriesPremisesMonitoringSystems.yaml b/v2/recos/Practices/Operations/revcl-RawLogEntriesPremisesMonitoringSystems.yaml
new file mode 100644
index 000000000..7f1ac2f13
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-RawLogEntriesPremisesMonitoringSystems.yaml
@@ -0,0 +1,19 @@
+name: revcl-RawLogEntriesPremisesMonitoringSystems
+title: Don't send raw log entries back to on-premises monitoring systems. Instead,
+ adopt a principle that data born in Azure stays in Azure. If on-premises SIEM integration
+ is required, then send critical alerts instead of logs.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: e3ab3693-829e-47e3-8618-3687a0477a20
+ area: Management
+ subarea: Monitoring
+ id: F01.13
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sentinel/quickstart-onboard
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-RequiredServicesDeploymentRegions.yaml b/v2/recos/Practices/Operations/revcl-RequiredServicesDeploymentRegions.yaml
new file mode 100644
index 000000000..773ba85cb
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-RequiredServicesDeploymentRegions.yaml
@@ -0,0 +1,17 @@
+name: revcl-RequiredServicesDeploymentRegions
+title: Ensure required services and features are available within the chosen deployment
+ regions eg. ANF , Zone etc.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: e6e20617-3686-4af4-9791-f8935ada4332
+links:
+- type: docs
+ url: https://azure.microsoft.com/explore/global-infrastructure/products-by-region/
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-SameSapSubscriptionAdditionalRouting.yaml b/v2/recos/Practices/Operations/revcl-SameSapSubscriptionAdditionalRouting.yaml
new file mode 100644
index 000000000..88532815e
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-SameSapSubscriptionAdditionalRouting.yaml
@@ -0,0 +1,17 @@
+name: revcl-SameSapSubscriptionAdditionalRouting
+title: Integrate tightly coupled applications into the same SAP subscription to avoid
+ additional routing and management complexity
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 366bcda2-750a-4b1a-a039-d95d54c7c892
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-SapBasisOperationsSapLandscapeManagement.yaml b/v2/recos/Practices/Operations/revcl-SapBasisOperationsSapLandscapeManagement.yaml
new file mode 100644
index 000000000..2a25c2046
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-SapBasisOperationsSapLandscapeManagement.yaml
@@ -0,0 +1,18 @@
+name: revcl-SapBasisOperationsSapLandscapeManagement
+title: Optimize and manage SAP Basis operations by using SAP Landscape Management
+ (LaMa). Use the SAP LaMa connector for Azure to relocate, copy, clone, and refresh
+ SAP systems.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: 76c8bcbf-45bb-4e60-ad8a-03e97778424d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/lama-installation
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-remote-management/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-SapDeploymentAutomationFrameworkOpenSourceOrchestrationTool.yaml b/v2/recos/Practices/Operations/revcl-SapDeploymentAutomationFrameworkOpenSourceOrchestrationTool.yaml
new file mode 100644
index 000000000..28c14ab92
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-SapDeploymentAutomationFrameworkOpenSourceOrchestrationTool.yaml
@@ -0,0 +1,18 @@
+name: revcl-SapDeploymentAutomationFrameworkOpenSourceOrchestrationTool
+title: Azure supports automating SAP deployments in Linux and Windows. SAP Deployment
+ Automation Framework is an open-source orchestration tool that can deploy, install,
+ and maintain SAP environments.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 5d75e99d-624d-4afe-91d9-e17adc580790
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-platform-automation-and-devops
+- type: docs
+ url: https://github.com/Azure/sap-automation
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-SapHanaSystemLandscapeGuidance.yaml b/v2/recos/Practices/Operations/revcl-SapHanaSystemLandscapeGuidance.yaml
new file mode 100644
index 000000000..52e4dcdda
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-SapHanaSystemLandscapeGuidance.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapHanaSystemLandscapeGuidance
+title: Review the Monitoring the SAP HANA System Landscape guidance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 82d7b8de-d3f1-44a0-830b-38e200e82acf
+links:
+- type: docs
+ url: https://help.sap.com/docs/SAP_HANA_PLATFORM/c4d7c773af4a4e5dbebb6548d6e2d4f4/e3111d2ebb5710149510cc120646bf3f.html?locale=en-US
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-ScaleUnitLeverageSubscription.yaml b/v2/recos/Practices/Operations/revcl-ScaleUnitLeverageSubscription.yaml
new file mode 100644
index 000000000..f8fb1545a
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-ScaleUnitLeverageSubscription.yaml
@@ -0,0 +1,17 @@
+name: revcl-ScaleUnitLeverageSubscription
+title: 'Leverage Subscription as scale unit and scaling our resources, consider deploying
+ subscription per environment eg. Sandbox, non-prod, prod '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 9cb107d5-325a-4e52-9ba3-4d4685e2213a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-subscriptions/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-TheQuotaApiRestApi.yaml b/v2/recos/Practices/Operations/revcl-TheQuotaApiRestApi.yaml
new file mode 100644
index 000000000..4dc519a26
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-TheQuotaApiRestApi.yaml
@@ -0,0 +1,15 @@
+name: revcl-TheQuotaApiRestApi
+title: The Quota API is a REST API that you can use to view and manage quotas for
+ Azure services. Consider using it if necessary.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 2
+labels:
+ guid: ce4fab2f-433a-4d59-a5a9-3d1032e03ebc
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/reserved-vm-instances/quotaapi?branch=capacity
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-TimeZoneMatchesOperatingSystem.yaml b/v2/recos/Practices/Operations/revcl-TimeZoneMatchesOperatingSystem.yaml
new file mode 100644
index 000000000..83dff99ff
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-TimeZoneMatchesOperatingSystem.yaml
@@ -0,0 +1,14 @@
+name: revcl-TimeZoneMatchesOperatingSystem
+title: Ensure time-zone matches between the operating system and the SAP system.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 42d37218-a3a7-45df-bff6-1173e7f249ea
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-TotalAvailableVmCoresQuotaIncrease.yaml b/v2/recos/Practices/Operations/revcl-TotalAvailableVmCoresQuotaIncrease.yaml
new file mode 100644
index 000000000..711d12179
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-TotalAvailableVmCoresQuotaIncrease.yaml
@@ -0,0 +1,17 @@
+name: revcl-TotalAvailableVmCoresQuotaIncrease
+title: Ensure quota increase as a part of subscription provisioning (e.g. total available
+ VM cores within a subscription)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: ce7bb122-f7c9-45f0-9e15-4e3aa3592829
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/quotas/quotas-overview
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-UnderlyingAzureExtensionVmExtension.yaml b/v2/recos/Practices/Operations/revcl-UnderlyingAzureExtensionVmExtension.yaml
new file mode 100644
index 000000000..0408d3615
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-UnderlyingAzureExtensionVmExtension.yaml
@@ -0,0 +1,19 @@
+name: revcl-UnderlyingAzureExtensionVmExtension
+title: Run a VM Extension for SAP check. VM Extension for SAP uses the assigned managed
+ identity of a virtual machine (VM) to access VM monitoring and configuration data.
+ The check ensures that all performance metrics in your SAP application come from
+ the underlying Azure Extension for SAP.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: 2750ab1a-b039-4d95-b54c-7c8929cb107d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/vm-extension-for-sap
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-azure-enhanced-monitoring-extension-for-sap/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-UnitTestsApplicationCode.yaml b/v2/recos/Practices/Operations/revcl-UnitTestsApplicationCode.yaml
new file mode 100644
index 000000000..ea84f7050
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-UnitTestsApplicationCode.yaml
@@ -0,0 +1,17 @@
+name: revcl-UnitTestsApplicationCode
+title: Include unit tests for IaC and application code as part of your build process.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 1
+labels:
+ guid: 0cadb8c7-8fa5-4fbf-8f39-d1fadb3b0460
+ area: Platform Automation and DevOps
+ subarea: DevOps Team Topologies
+ id: H01.05
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds
+queries: {}
diff --git a/v2/recos/Practices/Operations/revcl-VersionControlSystemSourceCode.yaml b/v2/recos/Practices/Operations/revcl-VersionControlSystemSourceCode.yaml
new file mode 100644
index 000000000..5423bfea7
--- /dev/null
+++ b/v2/recos/Practices/Operations/revcl-VersionControlSystemSourceCode.yaml
@@ -0,0 +1,18 @@
+name: revcl-VersionControlSystemSourceCode
+title: Ensure a version control system is used for source code of applications and
+ IaC developed. Microsoft recommends Git.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Operations
+severity: 0
+labels:
+ guid: cfe363b5-f579-4284-bc56-a42153e4c10b
+ area: Platform Automation and DevOps
+ subarea: Development Lifecycle
+ id: H02.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-AutomaticWorkloadRepositorySqlScripts.yaml b/v2/recos/Practices/Performance/revcl-AutomaticWorkloadRepositorySqlScripts.yaml
new file mode 100644
index 000000000..dfd6b532f
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-AutomaticWorkloadRepositorySqlScripts.yaml
@@ -0,0 +1,20 @@
+name: revcl-AutomaticWorkloadRepositorySqlScripts
+title: For SAP on Azure running Oracle, a collection of SQL scripts can help you diagnose
+ performance problems. Automatic Workload Repository (AWR) reports contain valuable
+ information for diagnosing problems in the Oracle system. We recommend that you
+ run an AWR report during several sessions and choose peak times for it, to ensure
+ broad coverage for the analysis.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: 33c5d5bf-daf3-4f0d-bd50-6010fdcec22e
+links:
+- type: docs
+ url: https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/announcement-sap-on-azure-oracle-performance-efficiency-scripts/ba-p/3725178
+- type: docs
+ url: https://learn.microsoft.com/ja-jp/azure/well-architected/oracle-iaas/performance-efficiency
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-AzureAcceleratedNetworkingSapApplication.yaml b/v2/recos/Practices/Performance/revcl-AzureAcceleratedNetworkingSapApplication.yaml
new file mode 100644
index 000000000..9429c30a8
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-AzureAcceleratedNetworkingSapApplication.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureAcceleratedNetworkingSapApplication
+title: Make sure that Azure accelerated networking is enabled on the VMs used in the
+ SAP application and DBMS layers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 0
+labels:
+ guid: 85e2213a-ce7b-4b12-8f7c-95f06e154e3a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview?tabs=redhat
+- type: docs
+ url: https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-AzureAvailabilityZonesLowLatencyZones.yaml b/v2/recos/Practices/Performance/revcl-AzureAvailabilityZonesLowLatencyZones.yaml
new file mode 100644
index 000000000..614b84f4d
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-AzureAvailabilityZonesLowLatencyZones.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureAvailabilityZonesLowLatencyZones
+title: For each Azure subscription, run a latency test on Azure availability zones
+ before zonal deployment to choose low-latency zones for deployment of SAP on Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 0
+labels:
+ guid: 616785d6-fa96-4c96-ad88-518f482734c8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-zones
+- type: docs
+ url: https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-AzureProximityPlacementGroupsOptimalNetworkLatency.yaml b/v2/recos/Practices/Performance/revcl-AzureProximityPlacementGroupsOptimalNetworkLatency.yaml
new file mode 100644
index 000000000..a03b2e7e3
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-AzureProximityPlacementGroupsOptimalNetworkLatency.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureProximityPlacementGroupsOptimalNetworkLatency
+title: For optimal network latency with SAP applications, consider using Azure proximity
+ placement groups.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: fa96c96a-d885-418f-9827-34c886ba2802
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/co-location#planned-maintenance-and-proximity-placement-groups
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-CustomBrandAssetsCdn.yaml b/v2/recos/Practices/Performance/revcl-CustomBrandAssetsCdn.yaml
new file mode 100644
index 000000000..6790d888b
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-CustomBrandAssetsCdn.yaml
@@ -0,0 +1,14 @@
+name: revcl-CustomBrandAssetsCdn
+title: Custom brand assets should be hosted on a CDN
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: 3e3553a4-c873-4964-ab66-2d6c15f51296
+links:
+- type: docs
+ url: https://learn.microsoft.com/entra/architecture/resilient-end-user-experience#use-a-content-delivery-network
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-DatabaseFileSystemsDatabaseVendors.yaml b/v2/recos/Practices/Performance/revcl-DatabaseFileSystemsDatabaseVendors.yaml
new file mode 100644
index 000000000..c24b89bf1
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-DatabaseFileSystemsDatabaseVendors.yaml
@@ -0,0 +1,17 @@
+name: revcl-DatabaseFileSystemsDatabaseVendors
+title: Exclude all the database file systems and executable programs from antivirus
+ scans. Including them could lead to performance problems. Check with the database
+ vendors for prescriptive details on the exclusion list. For example, Oracle recommends
+ excluding /oracle//sapdata from antivirus scans.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: abb6af9c-982c-4cf1-83fb-329fafd1ee56
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-management-and-monitoring
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-DifferentAzureVnetsSapApplicationLayer.yaml b/v2/recos/Practices/Performance/revcl-DifferentAzureVnetsSapApplicationLayer.yaml
new file mode 100644
index 000000000..1abf2d83d
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-DifferentAzureVnetsSapApplicationLayer.yaml
@@ -0,0 +1,17 @@
+name: revcl-DifferentAzureVnetsSapApplicationLayer
+title: Placing of the SAP application layer and SAP DBMS in different Azure VNets
+ that aren't peered isn't supported.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 0
+labels:
+ guid: 45bbe609-d8a0-43e9-9778-424d616785d6
+links:
+- type: docs
+ url: https://me.sap.com/notes/2015553
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-FullDatabaseStatisticsOracleStatistics.yaml b/v2/recos/Practices/Performance/revcl-FullDatabaseStatisticsOracleStatistics.yaml
new file mode 100644
index 000000000..96606b2b4
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-FullDatabaseStatisticsOracleStatistics.yaml
@@ -0,0 +1,15 @@
+name: revcl-FullDatabaseStatisticsOracleStatistics
+title: Consider collecting full database statistics for non-HANA databases after migration.
+ For example, implement SAP note 1020260 - Delivery of Oracle statistics.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 2
+labels:
+ guid: c027f893-f404-41a9-b33d-39d625a14964
+links:
+- type: docs
+ url: https://sapit-forme-prod.authentication.eu11.hana.ondemand.com/login
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-GlobalTransitConnectivityGlobalNetworks-1.yaml b/v2/recos/Practices/Performance/revcl-GlobalTransitConnectivityGlobalNetworks-1.yaml
new file mode 100644
index 000000000..c908e4b06
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-GlobalTransitConnectivityGlobalNetworks-1.yaml
@@ -0,0 +1,19 @@
+name: revcl-GlobalTransitConnectivityGlobalNetworks-1
+title: Use Virtual WAN for Azure deployments in new, large, or global networks where
+ you need global transit connectivity across Azure regions and on-premises locations.
+ With this approach, you won't need to manually set up transitive routing for Azure
+ networking, and you can follow a standard for SAP on Azure deployments.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: e73de7d5-6f36-4217-a526-e1a621ecddde
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/front-door-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-networking/10-explore-azure-front-door
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-InterVmLatencyMonitoringLatencySensitiveApplications.yaml b/v2/recos/Practices/Performance/revcl-InterVmLatencyMonitoringLatencySensitiveApplications.yaml
new file mode 100644
index 000000000..a26f7c239
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-InterVmLatencyMonitoringLatencySensitiveApplications.yaml
@@ -0,0 +1,14 @@
+name: revcl-InterVmLatencyMonitoringLatencySensitiveApplications
+title: Use inter-VM latency monitoring for latency-sensitive applications.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 2
+labels:
+ guid: 04b8e5e5-13cb-4b22-af62-5a8ecfcf0337
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-network-test-latency?tabs=windows
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-LinuxGuestOperatingSystemsLinuxNetworkParameter.yaml b/v2/recos/Practices/Performance/revcl-LinuxGuestOperatingSystemsLinuxNetworkParameter.yaml
new file mode 100644
index 000000000..7646dfa54
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-LinuxGuestOperatingSystemsLinuxNetworkParameter.yaml
@@ -0,0 +1,17 @@
+name: revcl-LinuxGuestOperatingSystemsLinuxNetworkParameter
+title: If using Load Balancer with Linux guest operating systems, check that the Linux
+ network parameter net.ipv4.tcp_timestamps is set to 0.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 0
+labels:
+ guid: 402a9846-d515-4061-aff8-cd30088693fa
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-OracleAutomaticStorageManagementOracleDeployments.yaml b/v2/recos/Practices/Performance/revcl-OracleAutomaticStorageManagementOracleDeployments.yaml
new file mode 100644
index 000000000..8afbf53ef
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-OracleAutomaticStorageManagementOracleDeployments.yaml
@@ -0,0 +1,17 @@
+name: revcl-OracleAutomaticStorageManagementOracleDeployments
+title: Consider using Oracle Automatic Storage Management (ASM) for all Oracle deployments
+ that use SAP on Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: fdafb1f5-3eee-4354-a8c9-deb8127ebc2e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/workloads/oracle/configure-oracle-asm
+- type: docs
+ url: https://learn.microsoft.com/training/paths/administer-infrastructure-resources-in-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapApplicationLayerVmsDbmsVms.yaml b/v2/recos/Practices/Performance/revcl-SapApplicationLayerVmsDbmsVms.yaml
new file mode 100644
index 000000000..11e80457c
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapApplicationLayerVmsDbmsVms.yaml
@@ -0,0 +1,16 @@
+name: revcl-SapApplicationLayerVmsDbmsVms
+title: Test network latency between SAP application layer VMs and DBMS VMs (NIPING).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: 35709da7-fc7d-4efe-bb20-2e91547b7390
+links:
+- type: docs
+ url: https://me.sap.com/notes/500235
+- type: docs
+ url: https://me.sap.com/notes/1100926/E
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapApplicationServerDatabaseServerLatency.yaml b/v2/recos/Practices/Performance/revcl-SapApplicationServerDatabaseServerLatency.yaml
new file mode 100644
index 000000000..ea9e0362d
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapApplicationServerDatabaseServerLatency.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapApplicationServerDatabaseServerLatency
+title: Review SAP application server to database server latency using SAP ABAPMeter
+ report /SSA/CAT.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: b9b140cf-413a-483d-aad2-8802c4e3c017
+links:
+- type: docs
+ url: https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/sap-on-azure-general-update-march-2019/ba-p/377456
+- type: docs
+ url: https://me.sap.com/notes/0002879613
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapApplicationServerLayerDbmsLayer.yaml b/v2/recos/Practices/Performance/revcl-SapApplicationServerLayerDbmsLayer.yaml
new file mode 100644
index 000000000..971174930
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapApplicationServerLayerDbmsLayer.yaml
@@ -0,0 +1,18 @@
+name: revcl-SapApplicationServerLayerDbmsLayer
+title: It is NOT supported at all to run an SAP Application Server layer and DBMS
+ layer split between on-premise and Azure. Both layers need to completely reside
+ either on-premise or in Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 0
+labels:
+ guid: 18c8b61c-855a-4405-b6ed-266455e4f4ce
+links:
+- type: docs
+ url: https://me.sap.com/notes/2015553
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-network-topology-and-connectivity
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapDatabaseServerSapApplication.yaml b/v2/recos/Practices/Performance/revcl-SapDatabaseServerSapApplication.yaml
new file mode 100644
index 000000000..be10ce642
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapDatabaseServerSapApplication.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapDatabaseServerSapApplication
+title: "It is not supported to deploy any NVA between SAP application and SAP Database\xC2\
+ \_server"
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 0
+labels:
+ guid: 41742694-3ff8-4ae7-b7d4-743176c8bcbf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/planning-guide
+- type: docs
+ url: https://me.sap.com/notes/2731110
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapEarlywatchAlertSapComponents.yaml b/v2/recos/Practices/Performance/revcl-SapEarlywatchAlertSapComponents.yaml
new file mode 100644
index 000000000..898ee4fb3
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapEarlywatchAlertSapComponents.yaml
@@ -0,0 +1,16 @@
+name: revcl-SapEarlywatchAlertSapComponents
+title: Activate SAP EarlyWatch Alert for all SAP components.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: 9fd7ffd4-da11-49f6-a374-8d03e94c511d
+links:
+- type: docs
+ url: https://support.sap.com/en/offerings-programs/support-services/earlywatch-alert.html
+- type: docs
+ url: https://help.sap.com/docs/SUPPORT_CONTENT/techops/3362700736.html
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapHanaHealthChecksHanaConfigurationMinichecks.yaml b/v2/recos/Practices/Performance/revcl-SapHanaHealthChecksHanaConfigurationMinichecks.yaml
new file mode 100644
index 000000000..ae19ea9e0
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapHanaHealthChecksHanaConfigurationMinichecks.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapHanaHealthChecksHanaConfigurationMinichecks
+title: Perform SAP HANA health checks using HANA_Configuration_Minichecks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: f1a92ab5-9509-4b57-86ff-b0ade361b694
+links:
+- type: docs
+ url: https://me.sap.com/notes/1969700
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SapHanaStudioAlerts.yaml b/v2/recos/Practices/Performance/revcl-SapHanaStudioAlerts.yaml
new file mode 100644
index 000000000..711bce50a
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SapHanaStudioAlerts.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapHanaStudioAlerts
+title: Review SAP HANA studio alerts.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: 9e9bb4c8-e934-4e4b-a13c-6f7c7c38eb43
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/sap/large-instances/hana-monitor-troubleshoot
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-SqlServerPerformanceMonitoringCcms.yaml b/v2/recos/Practices/Performance/revcl-SqlServerPerformanceMonitoringCcms.yaml
new file mode 100644
index 000000000..17a08595b
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-SqlServerPerformanceMonitoringCcms.yaml
@@ -0,0 +1,12 @@
+name: revcl-SqlServerPerformanceMonitoringCcms
+title: Review SQL Server performance monitoring using CCMS.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: 62fbf0f8-51db-49e1-a961-bb5df7a35f80
+links: []
+queries: {}
diff --git a/v2/recos/Practices/Performance/revcl-TestAvailabilityZoneLatency.yaml b/v2/recos/Practices/Performance/revcl-TestAvailabilityZoneLatency.yaml
new file mode 100644
index 000000000..7e9889c92
--- /dev/null
+++ b/v2/recos/Practices/Performance/revcl-TestAvailabilityZoneLatency.yaml
@@ -0,0 +1,14 @@
+name: revcl-TestAvailabilityZoneLatency
+title: Test availability zone latency.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Performance
+severity: 1
+labels:
+ guid: b96512cf-996f-4b17-b9b8-6b16db1a2a94
+links:
+- type: docs
+ url: https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/AvZone-Latency-Test
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-ActiveDirectoryWindowsServer.yaml b/v2/recos/Practices/Reliability/revcl-ActiveDirectoryWindowsServer.yaml
new file mode 100644
index 000000000..39fa706eb
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-ActiveDirectoryWindowsServer.yaml
@@ -0,0 +1,21 @@
+name: revcl-ActiveDirectoryWindowsServer
+title: When deploying Active Directory on Windows Server, use a location with Availability
+ Zones and deploy at least two VMs across these zones. If not available, deploy in
+ an Availability Set
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 1559ab91-53e8-4908-ae28-c84c33b6b780
+ area: Identity and Access Management
+ subarea: Identity
+ id: B03.09
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain#vm-recommendations
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-active-directory/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureApplicationConsistentSnapshotToolAzureNetappFiles.yaml b/v2/recos/Practices/Reliability/revcl-AzureApplicationConsistentSnapshotToolAzureNetappFiles.yaml
new file mode 100644
index 000000000..4365c8646
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureApplicationConsistentSnapshotToolAzureNetappFiles.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureApplicationConsistentSnapshotToolAzureNetappFiles
+title: If you deploy Azure NetApp Files for your HANA, Oracle, or DB2 database, use
+ the Azure Application Consistent Snapshot tool (AzAcSnap) to take application-consistent
+ snapshots. AzAcSnap also supports Oracle databases. Consider using AzAcSnap on a
+ central VM rather than on individual VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 302a2fbf-3745-4a5f-a365-c9d1a16ca22c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-netapp-files/azacsnap-introduction
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureAvailabilitySetAvailabilityZone.yaml b/v2/recos/Practices/Reliability/revcl-AzureAvailabilitySetAvailabilityZone.yaml
new file mode 100644
index 000000000..acf292322
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureAvailabilitySetAvailabilityZone.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureAvailabilitySetAvailabilityZone
+title: Before you deploy your high-availability infrastructure, and depending on the
+ region you choose, determine whether to deploy with an Azure availability set or
+ an availability zone.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: c47cc4f3-f105-452c-845e-9b307b3856c1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureAvailabilitySetsAzureAvailabilityZone.yaml b/v2/recos/Practices/Reliability/revcl-AzureAvailabilitySetsAzureAvailabilityZone.yaml
new file mode 100644
index 000000000..d3328ddcb
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureAvailabilitySetsAzureAvailabilityZone.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureAvailabilitySetsAzureAvailabilityZone
+title: You can't deploy Azure availability sets within an Azure availability zone
+ unless you use proximity placement groups.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: f2201000-d045-40a6-a79a-d7cdc01b4d86
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/co-location
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureBackupServiceHanaDatabase.yaml b/v2/recos/Practices/Reliability/revcl-AzureBackupServiceHanaDatabase.yaml
new file mode 100644
index 000000000..13c27a71d
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureBackupServiceHanaDatabase.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureBackupServiceHanaDatabase
+title: Help protect your HANA database by using the Azure Backup service.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 2f7c95f0-6e15-44e3-aa35-92829e6e2061
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/sap-hana-database-about
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-azure-backup-sap-workloads-azure-virtual-machines/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureDisasterRecoveryRegionsVpnConnections.yaml b/v2/recos/Practices/Reliability/revcl-AzureDisasterRecoveryRegionsVpnConnections.yaml
new file mode 100644
index 000000000..b854e2bbb
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureDisasterRecoveryRegionsVpnConnections.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureDisasterRecoveryRegionsVpnConnections
+title: Set up ExpressRoute connections from on-premises to the primary and secondary
+ Azure disaster recovery regions. Also, as an alternative to using ExpressRoute,
+ consider setting up VPN connections from on-premises to the primary and secondary
+ Azure disaster recovery regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: ba07c007-1f90-43e9-aa4f-601346b80352
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/use-s2s-vpn-as-backup-for-expressroute-privatepeering
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureNetappFilesPremiumManagedSsds.yaml b/v2/recos/Practices/Reliability/revcl-AzureNetappFilesPremiumManagedSsds.yaml
new file mode 100644
index 000000000..02ec7c0d9
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureNetappFilesPremiumManagedSsds.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureNetappFilesPremiumManagedSsds
+title: Run all production systems on Premium managed SSDs and use Azure NetApp Files
+ or Ultra Disk Storage. At least the OS disk should be on the Premium tier so you
+ can achieve better performance and the best SLA.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 07991f7d-6598-4d90-9431-45c62605d3a5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureProximityPlacementGroupsSameProximityPlacementGroup.yaml b/v2/recos/Practices/Reliability/revcl-AzureProximityPlacementGroupsSameProximityPlacementGroup.yaml
new file mode 100644
index 000000000..341d0c452
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureProximityPlacementGroupsSameProximityPlacementGroup.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureProximityPlacementGroupsSameProximityPlacementGroup
+title: When you use Azure proximity placement groups in an availability set deployment,
+ all three SAP components (central services, application server, and database) should
+ be in the same proximity placement group.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: ae4ecb95-b70f-428f-8b9a-4c5b7e3478a2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureSiteRecoveryHighAvailabilityConfiguration.yaml b/v2/recos/Practices/Reliability/revcl-AzureSiteRecoveryHighAvailabilityConfiguration.yaml
new file mode 100644
index 000000000..e58d1df4a
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureSiteRecoveryHighAvailabilityConfiguration.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureSiteRecoveryHighAvailabilityConfiguration
+title: Consider configuring high availability depending on the type of storage you
+ use for your SAP workloads. Some storage services available in Azure are not supported
+ by Azure Site Recovery, so your high availability configuration may differ.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 51904867-a70e-4fa0-b4ff-3e6292846d7c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-overview-guide#storage
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/2-explore-disaster-recovery-sap-workloads
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService.yaml b/v2/recos/Practices/Reliability/revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService.yaml
new file mode 100644
index 000000000..abf1087f1
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureSiteRecoveryMonitoringDisasterRecoveryService
+title: Use Azure Site Recovery monitoring to maintain the health of the disaster recovery
+ service for SAP application servers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 07e5ed53-3d96-43d8-87ea-631b77da5aba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/planning-guide-storage
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-storage/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-CentralServicesClusterVmsLinuxPacemakerCluster.yaml b/v2/recos/Practices/Reliability/revcl-CentralServicesClusterVmsLinuxPacemakerCluster.yaml
new file mode 100644
index 000000000..d88398612
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-CentralServicesClusterVmsLinuxPacemakerCluster.yaml
@@ -0,0 +1,17 @@
+name: revcl-CentralServicesClusterVmsLinuxPacemakerCluster
+title: Use Site Recovery to replicate an application server to a DR site. Site Recovery
+ can also help with replicating central-services cluster VMs to the DR site. When
+ you invoke DR, you'll need to reconfigure the Linux Pacemaker cluster on the DR
+ site (for example, replace the VIP or SBD, run corosync.conf, and more).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 0258ed30-fe42-434f-87b9-58f91f908e0a
+links:
+- type: docs
+ url: https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-CloudAdaptionFrameworkResiliencyReport.yaml b/v2/recos/Practices/Reliability/revcl-CloudAdaptionFrameworkResiliencyReport.yaml
new file mode 100644
index 000000000..5f97e3ac4
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-CloudAdaptionFrameworkResiliencyReport.yaml
@@ -0,0 +1,18 @@
+name: revcl-CloudAdaptionFrameworkResiliencyReport
+title: Run the Resiliency Report to ensure that the configuration of the entire provisioned
+ Azure infrastructure (Compute, Database, Networking, Storage, Site Recovery) complies
+ with the configuration defined by Cloud Adaption Framework for Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 410adcba-db46-424f-a6c4-05ecde75c52e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/advisor/advisor-how-to-improve-reliability
+- type: docs
+ url: https://learn.microsoft.com/training/paths/azure-well-architected-framework/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-CommonArchitecturePatternDifferentStorageStacks.yaml b/v2/recos/Practices/Reliability/revcl-CommonArchitecturePatternDifferentStorageStacks.yaml
new file mode 100644
index 000000000..1baafe91d
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-CommonArchitecturePatternDifferentStorageStacks.yaml
@@ -0,0 +1,19 @@
+name: revcl-CommonArchitecturePatternDifferentStorageStacks
+title: Azure doesn't support architectures in which the primary and secondary VMs
+ share storage for DBMS data. For the DBMS layer, the common architecture pattern
+ is to replicate databases at the same time and with different storage stacks than
+ the ones that the primary and secondary VMs use.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: afae6bec-2671-49ae-bc69-140b8ec8d320
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows
+- type: docs
+ url: https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/?source=recommendationshttps%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Ftraining%2Fpaths%2Fensure-business-continuity-implement-disaster-recovery%2F%3Fsource%3Drecommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-CrossRegionReplicationAzure.yaml b/v2/recos/Practices/Reliability/revcl-CrossRegionReplicationAzure.yaml
new file mode 100644
index 000000000..2e185379e
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-CrossRegionReplicationAzure.yaml
@@ -0,0 +1,17 @@
+name: revcl-CrossRegionReplicationAzure
+title: Consider cross-region replication in Azure for BCDR with paired regions
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 7ea02e1c-7166-45a3-bdf5-098891367fcb
+ area: Management
+ subarea: Data Protection
+ id: F02.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/cross-region-replication-azure
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-DifferentAvailabilityZonesHighAvailability.yaml b/v2/recos/Practices/Reliability/revcl-DifferentAvailabilityZonesHighAvailability.yaml
new file mode 100644
index 000000000..b1d792748
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-DifferentAvailabilityZonesHighAvailability.yaml
@@ -0,0 +1,15 @@
+name: revcl-DifferentAvailabilityZonesHighAvailability
+title: Follow VM rules for high availability on the VM level (premium disks, two or
+ more in a region, in different availability zones)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 604489a8-f42d-478e-98c0-7a73b22a4a57
+links:
+- type: docs
+ url: https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-DifferentNativeAzureStorageServicesRespectiveStorageService.yaml b/v2/recos/Practices/Reliability/revcl-DifferentNativeAzureStorageServicesRespectiveStorageService.yaml
new file mode 100644
index 000000000..9c1e8811a
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-DifferentNativeAzureStorageServicesRespectiveStorageService.yaml
@@ -0,0 +1,17 @@
+name: revcl-DifferentNativeAzureStorageServicesRespectiveStorageService
+title: Different native Azure storage services (like Azure Files, Azure NetApp Files,
+ Azure Shared Disk) may not be available in all regions. So to have similar SAP setup
+ on the DR region after failover, ensure the respective storage service is offered
+ in DR site.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 1ac2d928-c9b7-42c6-ba18-23b1aea78693
+links:
+- type: docs
+ url: https://azure.microsoft.com/ja-jp/explore/global-infrastructure/products-by-region/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-DirectorySynchronizationReplication.yaml b/v2/recos/Practices/Reliability/revcl-DirectorySynchronizationReplication.yaml
new file mode 100644
index 000000000..59b66c73a
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-DirectorySynchronizationReplication.yaml
@@ -0,0 +1,14 @@
+name: revcl-DirectorySynchronizationReplication
+title: Don't replicate! Replication can create issues with directory synchronization
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: e7a8dd4a-30e3-47c3-b297-11b2362ceee0
+links:
+- type: docs
+ url: https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-FiveDifferentCentralServicesDifferentApplicationServices.yaml b/v2/recos/Practices/Reliability/revcl-FiveDifferentCentralServicesDifferentApplicationServices.yaml
new file mode 100644
index 000000000..c02cad008
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-FiveDifferentCentralServicesDifferentApplicationServices.yaml
@@ -0,0 +1,19 @@
+name: revcl-FiveDifferentCentralServicesDifferentApplicationServices
+title: Don't group different application services in the same cluster. For example,
+ don't combine DRBD and central services clusters on the same cluster. However, you
+ can use the same Pacemaker cluster to manage approximately five different central
+ services (multi-SID cluster).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: c3c7abc0-716c-4486-893c-40e181d65539
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-multi-sid
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-FloatingIpLoadBalancer.yaml b/v2/recos/Practices/Reliability/revcl-FloatingIpLoadBalancer.yaml
new file mode 100644
index 000000000..cc40d1d2f
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-FloatingIpLoadBalancer.yaml
@@ -0,0 +1,16 @@
+name: revcl-FloatingIpLoadBalancer
+title: Make sure the Floating IP is enabled on the Load balancer
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 1a541741-5833-4fb4-ae3c-2df743165c3a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-ha-ports-overview?source=recommendations
+- type: docs
+ url: https://learn.microsoft.com/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-GeoDisasterRecoveryCapabilitiesLocalizedResourceCapacityConstraint.yaml b/v2/recos/Practices/Reliability/revcl-GeoDisasterRecoveryCapabilitiesLocalizedResourceCapacityConstraint.yaml
new file mode 100644
index 000000000..1e39b6988
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-GeoDisasterRecoveryCapabilitiesLocalizedResourceCapacityConstraint.yaml
@@ -0,0 +1,24 @@
+name: revcl-GeoDisasterRecoveryCapabilitiesLocalizedResourceCapacityConstraint
+title: Consider a multi-region deployment. Depending on customer size, locations,
+ and users presence, operating in multiple regions can be a common choice to deliver
+ services and run applications closer to them. Using a multi-region deployment is
+ also important to provide geo disaster recovery capabilities, to eliminate the dependency
+ from a single region capacity and diminish the risk of a temporary and localized
+ resource capacity constraint
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 19ca3f89-397d-44b1-b5b6-5e18661372ac
+ area: Resource Organization
+ subarea: Regions
+ id: C03.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions#operate-in-multiple-geographic-regions
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-GlobalScaleCloudPlatformRightAzureRegionS.yaml b/v2/recos/Practices/Reliability/revcl-GlobalScaleCloudPlatformRightAzureRegionS.yaml
new file mode 100644
index 000000000..18ddb7711
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-GlobalScaleCloudPlatformRightAzureRegionS.yaml
@@ -0,0 +1,23 @@
+name: revcl-GlobalScaleCloudPlatformRightAzureRegionS
+title: Select the right Azure region/s for your deployment. Azure is a global-scale
+ cloud platform that provide global coverage through many regions and geographies.
+ Different Azure regions have different characteristics, access and availability
+ models, costs, capacity, and services offered, then it is important to consider
+ all criteria and requirements
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 250d81ce-8bbe-4f85-9051-6a18a8221e50
+ area: Resource Organization
+ subarea: Regions
+ id: C03.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/regions
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-GlobalVnetPeeringMultipleAzureRegions.yaml b/v2/recos/Practices/Reliability/revcl-GlobalVnetPeeringMultipleAzureRegions.yaml
new file mode 100644
index 000000000..e0c0b9621
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-GlobalVnetPeeringMultipleAzureRegions.yaml
@@ -0,0 +1,18 @@
+name: revcl-GlobalVnetPeeringMultipleAzureRegions
+title: Local and global VNet peering provide connectivity and are the preferred approaches
+ to ensure connectivity between landing zones for SAP deployments across multiple
+ Azure regions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: a3592829-e6e2-4061-9368-6af46791f893
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-network-peering-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-vnet-peering/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-KeyVaultContentsDrRegion.yaml b/v2/recos/Practices/Reliability/revcl-KeyVaultContentsDrRegion.yaml
new file mode 100644
index 000000000..5a9441cae
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-KeyVaultContentsDrRegion.yaml
@@ -0,0 +1,15 @@
+name: revcl-KeyVaultContentsDrRegion
+title: Replicate key vault contents like certificates, secrets, or keys across regions
+ so you can decrypt data in the DR region.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 2
+labels:
+ guid: d2b30195-b11d-4a8f-a672-28b2b4169a7c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-MicrosoftEntraConnectStagingSever.yaml b/v2/recos/Practices/Reliability/revcl-MicrosoftEntraConnectStagingSever.yaml
new file mode 100644
index 000000000..55984f5f8
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-MicrosoftEntraConnectStagingSever.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftEntraConnectStagingSever
+title: When deploying Microsoft Entra Connect, leverage a staging sever for high availability
+ / Disaster recovery
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: cd163e39-84a5-4b39-97b7-6973abd70d94
+ area: Identity and Access Management
+ subarea: Microsoft Entra ID
+ id: B03.14
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/hybrid/how-to-connect-sync-staging-server
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-MultiRegions.yaml b/v2/recos/Practices/Reliability/revcl-MultiRegions.yaml
new file mode 100644
index 000000000..1bef0040d
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-MultiRegions.yaml
@@ -0,0 +1,14 @@
+name: revcl-MultiRegions
+title: Have active-active for multi-regions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 79b598de-fc59-472c-b4cd-21b078036f5e
+links:
+- type: docs
+ url: https://azure.microsoft.com/blog/setting-up-active-directory-for-a-disaster-recovery-environment-2/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-MultipleIdentiyProvidersFacebookAccounts.yaml b/v2/recos/Practices/Reliability/revcl-MultipleIdentiyProvidersFacebookAccounts.yaml
new file mode 100644
index 000000000..dbe169f5c
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-MultipleIdentiyProvidersFacebookAccounts.yaml
@@ -0,0 +1,15 @@
+name: revcl-MultipleIdentiyProvidersFacebookAccounts
+title: Have multiple identiy providers (i.e., login with your microsoft, google, facebook
+ accounts)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 2
+labels:
+ guid: 5398e6df-d237-4de1-93b1-6c21d79a9b64
+links:
+- type: docs
+ url: https://learn.microsoft.com/entra/identity/monitoring-health/reference-sla-performance
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-NativeDatabaseReplicationTechnologyHaPair.yaml b/v2/recos/Practices/Reliability/revcl-NativeDatabaseReplicationTechnologyHaPair.yaml
new file mode 100644
index 000000000..7895bc384
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-NativeDatabaseReplicationTechnologyHaPair.yaml
@@ -0,0 +1,17 @@
+name: revcl-NativeDatabaseReplicationTechnologyHaPair
+title: Native database replication technology should be used to synchronize the database
+ in a HA pair.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 726a1d3e-5508-4a06-9d54-93f4b50040c1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/disaster-recovery-sap-guide?tabs=windows
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-disaster-recovery-for-sap-workloads-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-OneProximityPlacementGroupSapSid.yaml b/v2/recos/Practices/Reliability/revcl-OneProximityPlacementGroupSapSid.yaml
new file mode 100644
index 000000000..474e70f19
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-OneProximityPlacementGroupSapSid.yaml
@@ -0,0 +1,15 @@
+name: revcl-OneProximityPlacementGroupSapSid
+title: Use one proximity placement group per SAP SID. Groups don't span across Availability
+ Zones or Azure regions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 5d2fa56c-56ad-4484-88fe-72734c486ba2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/proximity-placement-scenarios
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-PotentialPhysicalHardwareFailuresAzurePlannedMaintenance.yaml b/v2/recos/Practices/Reliability/revcl-PotentialPhysicalHardwareFailuresAzurePlannedMaintenance.yaml
new file mode 100644
index 000000000..08a55e240
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-PotentialPhysicalHardwareFailuresAzurePlannedMaintenance.yaml
@@ -0,0 +1,21 @@
+name: revcl-PotentialPhysicalHardwareFailuresAzurePlannedMaintenance
+title: When you create availability sets, use the maximum number of fault domains
+ and update domains available. For example, if you deploy more than two VMs in one
+ availability set, use the maximum number of fault domains (three) and enough update
+ domains to limit the effect of potential physical hardware failures, network outages,
+ or power interruptions, in addition to Azure planned maintenance. The default number
+ of fault domains is two, and you can't change it online later.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 9674e7c7-7796-4181-8920-09f4429543ba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability-set-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-PrimaryVirtualNetworkDrSite.yaml b/v2/recos/Practices/Reliability/revcl-PrimaryVirtualNetworkDrSite.yaml
new file mode 100644
index 000000000..db68fee8a
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-PrimaryVirtualNetworkDrSite.yaml
@@ -0,0 +1,17 @@
+name: revcl-PrimaryVirtualNetworkDrSite
+title: The CIDR for the primary virtual network (VNet) shouldn't conflict or overlap
+ with the CIDR of the DR site's VNet
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 6561f847-3db5-4ff8-9200-5ad3c3b436ad
+links:
+- type: docs
+ url: https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq
+- type: docs
+ url: https://learn.microsoft.com/training/paths/azure-fundamentals-describe-azure-architecture-services/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-RecoveryTimesRtoRequirements.yaml b/v2/recos/Practices/Reliability/revcl-RecoveryTimesRtoRequirements.yaml
new file mode 100644
index 000000000..81eef2382
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-RecoveryTimesRtoRequirements.yaml
@@ -0,0 +1,13 @@
+name: revcl-RecoveryTimesRtoRequirements
+title: Test the backup and recovery times to verify that they meet your RTO requirements
+ for restoring all systems simultaneously after a disaster.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: c4b8e117-930b-4dbd-ae50-7bc5faf6f91a
+links: []
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-RequiredServicesDeploymentRegions-1.yaml b/v2/recos/Practices/Reliability/revcl-RequiredServicesDeploymentRegions-1.yaml
new file mode 100644
index 000000000..42a0a2f7c
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-RequiredServicesDeploymentRegions-1.yaml
@@ -0,0 +1,20 @@
+name: revcl-RequiredServicesDeploymentRegions-1
+title: Ensure required services and features are available within the chosen deployment
+ regions
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 4c27d42e-8bba-4c75-9155-9ab9153e8908
+ area: Resource Organization
+ subarea: Regions
+ id: C03.03
+links:
+- type: docs
+ url: https://azure.microsoft.com/explore/global-infrastructure/products-by-region/
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SameAvailabilitySetCentralServicesVms.yaml b/v2/recos/Practices/Reliability/revcl-SameAvailabilitySetCentralServicesVms.yaml
new file mode 100644
index 000000000..36a57acd1
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SameAvailabilitySetCentralServicesVms.yaml
@@ -0,0 +1,17 @@
+name: revcl-SameAvailabilitySetCentralServicesVms
+title: Do not mix servers of different roles in the same availability set. Keep central
+ services VMs, database VMs, application VMs in their own availability sets
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: cbe05bbe-209d-4490-ba47-778424d11678
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability-set-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-virtual-machine-availability/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SameHighAvailabilityClusterRedHatEnterpriseLinux.yaml b/v2/recos/Practices/Reliability/revcl-SameHighAvailabilityClusterRedHatEnterpriseLinux.yaml
new file mode 100644
index 000000000..01471d2fb
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SameHighAvailabilityClusterRedHatEnterpriseLinux.yaml
@@ -0,0 +1,17 @@
+name: revcl-SameHighAvailabilityClusterRedHatEnterpriseLinux
+title: Azure supports installing and configuring SAP HANA and ASCS/SCS and ERS instances
+ on the same high availability cluster running on Red Hat Enterprise Linux (RHEL).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 7f684ebc-95da-425e-b329-e782dbed050f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-rhel-with-hana-ascs-ers-dialog-instance
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SameHighAvailabilityOptionsAvailabilitySets.yaml b/v2/recos/Practices/Reliability/revcl-SameHighAvailabilityOptionsAvailabilitySets.yaml
new file mode 100644
index 000000000..b000cd2fa
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SameHighAvailabilityOptionsAvailabilitySets.yaml
@@ -0,0 +1,16 @@
+name: revcl-SameHighAvailabilityOptionsAvailabilitySets
+title: If you want to meet the infrastructure SLAs for your applications for SAP components
+ (central services, application servers, and databases), you must choose the same
+ high availability options (VMs, availability sets, availability zones) for all components.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 844f69c3-07e5-4ec1-bff7-4be27bcf5fea
+links:
+- type: docs
+ url: https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SameLinuxPacemakerClusterFiveMultipleCentralServicesClusters.yaml b/v2/recos/Practices/Reliability/revcl-SameLinuxPacemakerClusterFiveMultipleCentralServicesClusters.yaml
new file mode 100644
index 000000000..674ea62ca
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SameLinuxPacemakerClusterFiveMultipleCentralServicesClusters.yaml
@@ -0,0 +1,18 @@
+name: revcl-SameLinuxPacemakerClusterFiveMultipleCentralServicesClusters
+title: Azure doesn't currently support combining ASCS and DB HA in the same Linux
+ Pacemaker cluster; separate them into individual clusters. However, you can combine
+ up to five multiple central-services clusters into a pair of VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: ed46b937-913e-4018-9c62-8393ab037e53
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-suse-multi-sid
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SameStorageConfigurationSameSize.yaml b/v2/recos/Practices/Reliability/revcl-SameStorageConfigurationSameSize.yaml
new file mode 100644
index 000000000..e1208830e
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SameStorageConfigurationSameSize.yaml
@@ -0,0 +1,16 @@
+name: revcl-SameStorageConfigurationSameSize
+title: Deploy both VMs in the high-availability pair in an availability set or in
+ availability zones. These VMs should be the same size and have the same storage
+ configuration.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: f656e745-0cfb-453e-8008-0528fa21c933
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapApplicationLayerComponentsSpecificHighAvailabilityScenarios.yaml b/v2/recos/Practices/Reliability/revcl-SapApplicationLayerComponentsSpecificHighAvailabilityScenarios.yaml
new file mode 100644
index 000000000..322ff7c7a
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapApplicationLayerComponentsSpecificHighAvailabilityScenarios.yaml
@@ -0,0 +1,20 @@
+name: revcl-SapApplicationLayerComponentsSpecificHighAvailabilityScenarios
+title: You can use Azure shared disks in Windows for ASCS + SCS components and specific
+ high-availability scenarios. Set up your failover clusters separately for SAP application
+ layer components and the DBMS layer. Azure doesn't currently support high-availability
+ architectures that combine SAP application layer components and the DBMS layer into
+ one failover cluster.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 1f737179-8e7f-4e1a-a30c-e5a649a3092b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/sap-high-availability-guide-wsfc-shared-disk
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapApplicationLayerComponentsStandardLoadBalancerSku.yaml b/v2/recos/Practices/Reliability/revcl-SapApplicationLayerComponentsStandardLoadBalancerSku.yaml
new file mode 100644
index 000000000..01ddc359b
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapApplicationLayerComponentsStandardLoadBalancerSku.yaml
@@ -0,0 +1,20 @@
+name: revcl-SapApplicationLayerComponentsStandardLoadBalancerSku
+title: Most failover clusters for SAP application layer components (ASCS) and the
+ DBMS layer require a virtual IP address for a failover cluster. Azure Load Balancer
+ should handle the virtual IP address for all other cases. One design principle is
+ to use one load balancer per cluster configuration. We recommend that you use the
+ standard version of the load balancer (Standard Load Balancer SKU).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: a78b3d31-3170-44f2-b5d7-651a29f4ccf5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-guide-standard-load-balancer-outbound-connections
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapApplicationServersAzureAvailabilityZones.yaml b/v2/recos/Practices/Reliability/revcl-SapApplicationServersAzureAvailabilityZones.yaml
new file mode 100644
index 000000000..fe70a023b
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapApplicationServersAzureAvailabilityZones.yaml
@@ -0,0 +1,19 @@
+name: revcl-SapApplicationServersAzureAvailabilityZones
+title: When using Azure Availability Zones to achieve high availability, you must
+ consider latency between SAP application servers and database servers. For zones
+ with high latencies, operational procedures need to be in place to ensure that SAP
+ application servers and database servers are running in the same zone at all times.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: aa208dca-784f-46c6-9014-cc919c542dc9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/high-availability-zones
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapCentralServicesClustersOperatingSystem.yaml b/v2/recos/Practices/Reliability/revcl-SapCentralServicesClustersOperatingSystem.yaml
new file mode 100644
index 000000000..a8cd05d73
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapCentralServicesClustersOperatingSystem.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapCentralServicesClustersOperatingSystem
+title: Use one of the following services to run SAP central services clusters, depending
+ on the operating system.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: bca3b10e-0ff5-4aec-ac16-4c4bd1a1c13f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapHanaDbVirtualNetworkDisasterRecoveryVirtualNetworks.yaml b/v2/recos/Practices/Reliability/revcl-SapHanaDbVirtualNetworkDisasterRecoveryVirtualNetworks.yaml
new file mode 100644
index 000000000..792463d9e
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapHanaDbVirtualNetworkDisasterRecoveryVirtualNetworks.yaml
@@ -0,0 +1,16 @@
+name: revcl-SapHanaDbVirtualNetworkDisasterRecoveryVirtualNetworks
+title: Peer the primary and disaster recovery virtual networks. For example, for HANA
+ System Replication, an SAP HANA DB virtual network needs to be peered to the disaster
+ recovery site's SAP HANA DB virtual network.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 05f1101d-250f-40e7-b2a1-b674ab50edbd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/guide/sap/sap-s4hana
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapHanaSystemReplicationSapApplicationLayer.yaml b/v2/recos/Practices/Reliability/revcl-SapHanaSystemReplicationSapApplicationLayer.yaml
new file mode 100644
index 000000000..c0a53dff7
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapHanaSystemReplicationSapApplicationLayer.yaml
@@ -0,0 +1,21 @@
+name: revcl-SapHanaSystemReplicationSapApplicationLayer
+title: You can replicate standard storage between paired regions, but you can't use
+ standard storage to store your databases or virtual hard disks. You can replicate
+ backups only between paired regions that you use. For all your other data, run your
+ replication by using native DBMS features like SQL Server Always On or SAP HANA
+ System Replication. Use a combination of Site Recovery, rsync or robocopy, and other
+ third-party software for the SAP application layer.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: b651423c-8552-42db-a545-5cb50c05527a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/cross-region-replication-azure
+- type: docs
+ url: https://learn.microsoft.com/training/paths/ensure-business-continuity-implement-disaster-recovery/
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-SapSHanaArchitecturesSapWebDispatcher.yaml b/v2/recos/Practices/Reliability/revcl-SapSHanaArchitecturesSapWebDispatcher.yaml
new file mode 100644
index 000000000..6af116130
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-SapSHanaArchitecturesSapWebDispatcher.yaml
@@ -0,0 +1,19 @@
+name: revcl-SapSHanaArchitecturesSapWebDispatcher
+title: Consider the availability of SAP software against single points of failure.
+ This includes single points of failure within applications such as DBMSs utilized
+ in SAP NetWeaver and SAP S/4HANA architectures, SAP ABAP and ASCS + SCS. Also, other
+ tools such as SAP Web Dispatcher.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 8300cb30-766b-4084-b126-0dd8fb1269a1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-business-continuity-and-disaster-recovery
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-high-availability-for-sap-workloads-azure/2-explore-high-availability-disaster-recovery-support-azure-for-sap-workloads?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-TimeRecoveryProductionDatabases.yaml b/v2/recos/Practices/Reliability/revcl-TimeRecoveryProductionDatabases.yaml
new file mode 100644
index 000000000..c2478bd1e
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-TimeRecoveryProductionDatabases.yaml
@@ -0,0 +1,16 @@
+name: revcl-TimeRecoveryProductionDatabases
+title: Perform a point-in-time recovery for your production databases at any point
+ and in a time frame that meets your RTO; point-in-time recovery typically includes
+ operator errors deleting data either on the DBMS layer or through SAP, incidentally
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: d17f6f39-a377-48a2-931f-5ead3ebe33a8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/well-architected/sap/design-areas/data-platform
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-TransactionRedoLogFilesAzureNetappFiles.yaml b/v2/recos/Practices/Reliability/revcl-TransactionRedoLogFilesAzureNetappFiles.yaml
new file mode 100644
index 000000000..88c15c666
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-TransactionRedoLogFilesAzureNetappFiles.yaml
@@ -0,0 +1,18 @@
+name: revcl-TransactionRedoLogFilesAzureNetappFiles
+title: The DBMS data and transaction/redo log files are stored in Azure supported
+ block storage or Azure NetApp Files. Azure Files or Azure Premium Files isn't supported
+ as storage for DBMS data and/or redo log files with SAP workload.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: ac614e95-6767-4bc3-b8a4-9953533da6ba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/dbms-guide-general
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-databases/2-explore-database-support-azure-for-sap-workloads
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-TwoAzureNetappFilesAccountsAzureNetappFilesStorage.yaml b/v2/recos/Practices/Reliability/revcl-TwoAzureNetappFilesAccountsAzureNetappFilesStorage.yaml
new file mode 100644
index 000000000..0cc3af9fd
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-TwoAzureNetappFilesAccountsAzureNetappFilesStorage.yaml
@@ -0,0 +1,17 @@
+name: revcl-TwoAzureNetappFilesAccountsAzureNetappFilesStorage
+title: If you use Azure NetApp Files storage for your SAP deployments, at a minimum,
+ create two Azure NetApp Files accounts in the Premium tier, in two regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 2
+labels:
+ guid: d3351bf7-628a-46de-917d-dfc11d3b6b40
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-service-levels
+- type: docs
+ url: https://learn.microsoft.com/training/modules/choose-service-level-azure-netapp-files-hpc-applications/2-identify-decision-criteria
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-UserFlowsResilientInterfaces.yaml b/v2/recos/Practices/Reliability/revcl-UserFlowsResilientInterfaces.yaml
new file mode 100644
index 000000000..7dd6746fe
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-UserFlowsResilientInterfaces.yaml
@@ -0,0 +1,16 @@
+name: revcl-UserFlowsResilientInterfaces
+title: Make sure that your sign-in user flows are backed up and resilient. Make sure
+ that the code that you use to sign-in your users are backed up and recoverable.
+ Resilient interfaces with external processes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 1
+labels:
+ guid: 503547c1-447e-4c66-828a-71f0f1ce16dd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory-b2c/deploy-custom-policies-devops
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-VeritasInfoscaleSupportFailoverWindowsServerFailoverClustering.yaml b/v2/recos/Practices/Reliability/revcl-VeritasInfoscaleSupportFailoverWindowsServerFailoverClustering.yaml
new file mode 100644
index 000000000..8a0a9070b
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-VeritasInfoscaleSupportFailoverWindowsServerFailoverClustering.yaml
@@ -0,0 +1,19 @@
+name: revcl-VeritasInfoscaleSupportFailoverWindowsServerFailoverClustering
+title: For SAP and SAP databases, consider implementing automatic failover clusters.
+ In Windows, Windows Server Failover Clustering supports failover. In Linux, Linux
+ Pacemaker or third-party tools like SIOS Protection Suite and Veritas InfoScale
+ support failover.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 56402f11-ccbe-42c3-a2f6-c6f6f38ab579
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/planning-supported-configurations
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-ha-sap-netweaver-anydb/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Reliability/revcl-WriteAcceleratorFileSystem.yaml b/v2/recos/Practices/Reliability/revcl-WriteAcceleratorFileSystem.yaml
new file mode 100644
index 000000000..0e0ff2f10
--- /dev/null
+++ b/v2/recos/Practices/Reliability/revcl-WriteAcceleratorFileSystem.yaml
@@ -0,0 +1,20 @@
+name: revcl-WriteAcceleratorFileSystem
+title: You should run SAP HANA on Azure only on the types of storage that are certified
+ by SAP. Note that certain volumes must be run on certain disk configurations, where
+ applicable. These configurations include enabling Write Accelerator and using Premium
+ storage. You also need to ensure that the file system that runs on storage is compatible
+ with the DBMS that runs on the machine.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Reliability
+severity: 0
+labels:
+ guid: 73cdaecc-7d74-48d8-a040-88416eebc98c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/hana-vm-operations-storage
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/hana-vm-premium-ssd-v1?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AppDeliveryLandingZones.yaml b/v2/recos/Practices/Security/revcl-AppDeliveryLandingZones.yaml
new file mode 100644
index 000000000..cb91ee3f1
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AppDeliveryLandingZones.yaml
@@ -0,0 +1,20 @@
+name: revcl-AppDeliveryLandingZones
+title: Perform app delivery within landing zones for both internal-facing (corp) and
+ external-facing apps (online).
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 6138a720-0f1c-4e16-bd30-1d6e872e52e3
+ area: Network Topology and Connectivity
+ subarea: App delivery
+ id: D01.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ApplicationLandingZoneIdentityNetworkSegmentation.yaml b/v2/recos/Practices/Security/revcl-ApplicationLandingZoneIdentityNetworkSegmentation.yaml
new file mode 100644
index 000000000..839c88fcf
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ApplicationLandingZoneIdentityNetworkSegmentation.yaml
@@ -0,0 +1,21 @@
+name: revcl-ApplicationLandingZoneIdentityNetworkSegmentation
+title: Configure Identity network segmentation through the use of a virtual Network
+ and peer back to the hub. Providing authentication inside application landing zone
+ (legacy).
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 9cf5418b-1520-4b7b-add7-88eb28f833e8
+ area: Identity and Access Management
+ subarea: Landing zones
+ id: B04.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#managed-identities
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/example-scenario/identity/adds-extend-domain
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureActivityLogsAzureMonitorLogs.yaml b/v2/recos/Practices/Security/revcl-AzureActivityLogsAzureMonitorLogs.yaml
new file mode 100644
index 000000000..268ec9b0d
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureActivityLogsAzureMonitorLogs.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureActivityLogsAzureMonitorLogs
+title: Export Azure activity logs to Azure Monitor Logs for long-term data retention.
+ Export to Azure Storage for long-term storage beyond two years, if necessary.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 4e3ab369-3829-4e7e-9161-83687a0477a2
+ area: Security
+ subarea: Operations
+ id: G03.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/logs-data-export?tabs=portal
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureAdAutomatedUserProvisioningOtherSaasApplications.yaml b/v2/recos/Practices/Security/revcl-AzureAdAutomatedUserProvisioningOtherSaasApplications.yaml
new file mode 100644
index 000000000..08fb4489e
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureAdAutomatedUserProvisioningOtherSaasApplications.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureAdAutomatedUserProvisioningOtherSaasApplications
+title: If you're using SAP SuccessFactors, consider using the Azure AD automated user
+ provisioning. With this integration, as you add new employees to SAP SuccessFactors,
+ you can automatically create their user accounts in Azure AD. Optionally, you can
+ create user accounts in Microsoft 365 or other SaaS applications that are supported
+ by Azure AD. Use write-back of the email address to SAP SuccessFactors.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 01f11b7f-38df-4251-9c76-4dec19abd3e8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureAdIdentityProvider.yaml b/v2/recos/Practices/Security/revcl-AzureAdIdentityProvider.yaml
new file mode 100644
index 000000000..ff70737c9
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureAdIdentityProvider.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureAdIdentityProvider
+title: Consider Azure AD an identity provider for SAP systems hosted on RISE. For
+ more information, see Integrating the Service with Azure AD.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: c7bae5bf-daf9-4761-9c56-f92891890aa4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/rise-integration#connectivity-with-sap-rise
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureCustomRbacRolesAzurePlatformOwner.yaml b/v2/recos/Practices/Security/revcl-AzureCustomRbacRolesAzurePlatformOwner.yaml
new file mode 100644
index 000000000..b71eae4b5
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureCustomRbacRolesAzurePlatformOwner.yaml
@@ -0,0 +1,22 @@
+name: revcl-AzureCustomRbacRolesAzurePlatformOwner
+title: 'Use Azure custom RBAC roles for the following key roles to provide fine-grain
+ access across your ALZ: Azure platform owner, network management, security operations,
+ subscription owner, application owner. Align these roles to teams and responsibilities
+ within your business.'
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: f5664b5e-984a-4859-a773-e7d261623a76
+ area: Identity and Access Management
+ subarea: Identity
+ id: B03.10
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureDataLakeStorageGenAzureBlobStorage.yaml b/v2/recos/Practices/Security/revcl-AzureDataLakeStorageGenAzureBlobStorage.yaml
new file mode 100644
index 000000000..6e8820345
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureDataLakeStorageGenAzureBlobStorage.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureDataLakeStorageGenAzureBlobStorage
+title: To prevent data leakage, use Azure Private Link to securely access platform
+ as a service resources like Azure Blob Storage, Azure Files, Azure Data Lake Storage
+ Gen2, Azure Data Factory, and more. Azure Private Endpoint can also help to secure
+ traffic between VNets and services like Azure Storage, Azure Backup, and more. Traffic
+ between your VNet and the Private Endpoint enabled service travels across the Microsoft
+ global network, which prevents its exposure to the public internet.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 3c536a3e-1b6b-4e87-95ca-15edb47251c0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services
+- type: docs
+ url: https://learn.microsoft.com/training/modules/design-implement-private-access-to-azure-services/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureEventGridBasedSolutionLogOrientedRealTimeAlerts.yaml b/v2/recos/Practices/Security/revcl-AzureEventGridBasedSolutionLogOrientedRealTimeAlerts.yaml
new file mode 100644
index 000000000..c9c3f9561
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureEventGridBasedSolutionLogOrientedRealTimeAlerts.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureEventGridBasedSolutionLogOrientedRealTimeAlerts
+title: Use an Azure Event Grid-based solution for log-oriented, real-time alerts
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 2
+labels:
+ guid: 874a748b-662d-46d1-9051-2a66498f6dfe
+ area: Security
+ subarea: Operations
+ id: G03.11
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureKeyVaultApplication-1.yaml b/v2/recos/Practices/Security/revcl-AzureKeyVaultApplication-1.yaml
new file mode 100644
index 000000000..c7ac15b40
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureKeyVaultApplication-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureKeyVaultApplication-1
+title: Use an Azure Key Vault per application per environment per region.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 4935ada4-2223-4ece-a1b1-23181a541741
+links:
+- type: docs
+ url: https://learn.microsoft.com/ja-jp/azure/key-vault/general/best-practices
+- type: docs
+ url: https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureKeyVaultDiskEncryptionKeys.yaml b/v2/recos/Practices/Security/revcl-AzureKeyVaultDiskEncryptionKeys.yaml
new file mode 100644
index 000000000..111644d25
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureKeyVaultDiskEncryptionKeys.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureKeyVaultDiskEncryptionKeys
+title: To control and manage disk encryption keys and secrets for non-HANA Windows
+ and non-Windows operating systems, use Azure Key Vault. SAP HANA isn't supported
+ with Azure Key Vault, so you must use alternate methods like SAP ABAP or SSH keys.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: abc9634d-c44d-41e9-a530-e8444e16aa3c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/certificates/certificate-scenarios
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-and-manage-azure-key-vault/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureKeyVaultSecrets-1.yaml b/v2/recos/Practices/Security/revcl-AzureKeyVaultSecrets-1.yaml
new file mode 100644
index 000000000..ff84caf4e
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureKeyVaultSecrets-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureKeyVaultSecrets-1
+title: Use Azure Key Vault to store your secrets and credentials
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: ce9bd3bb-0cdb-43b5-9eb2-ec14eeaa3592
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureKeyVaultSoftDelete-1.yaml b/v2/recos/Practices/Security/revcl-AzureKeyVaultSoftDelete-1.yaml
new file mode 100644
index 000000000..3e2b23119
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureKeyVaultSoftDelete-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureKeyVaultSoftDelete-1
+title: Provision Azure Key Vault with the soft delete and purge policies enabled to
+ allow retention protection for deleted objects.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 2223ece8-1b12-4318-8a54-17415833fb4a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzurePaasServicesPrivateLink.yaml b/v2/recos/Practices/Security/revcl-AzurePaasServicesPrivateLink.yaml
new file mode 100644
index 000000000..324102e21
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzurePaasServicesPrivateLink.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzurePaasServicesPrivateLink
+title: Use Private Link, where available, for shared Azure PaaS services.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: e43a58a9-c229-49c4-b7b5-7d0c655562f2
+ area: Network Topology and Connectivity
+ subarea: PaaS
+ id: D08.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzurePrivateLinkAzureResources.yaml b/v2/recos/Practices/Security/revcl-AzurePrivateLinkAzureResources.yaml
new file mode 100644
index 000000000..d28663259
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzurePrivateLinkAzureResources.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzurePrivateLinkAzureResources
+title: Isolate DMZs and NVAs from the rest of the SAP estate, configure Azure Private
+ Link, and securely manage and control the SAP on Azure resources
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 56ad4840-8fe7-4273-9c48-6ba280dc0591
+links:
+- type: docs
+ url: https://blogs.sap.com/2019/07/21/sap-security-operations-on-azure/
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/secure-vnet-dmz?tabs=portal
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureRbacRoleAzurePolicies.yaml b/v2/recos/Practices/Security/revcl-AzureRbacRoleAzurePolicies.yaml
new file mode 100644
index 000000000..cc1f3be6c
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureRbacRoleAzurePolicies.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureRbacRoleAzurePolicies
+title: Based on existing requirements, regulatory and compliance controls (internal/external)
+ - Determine what Azure Policies and Azure RBAC role are needed
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: e3c2df74-3165-4c3a-abe0-5bbe209d490d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/role-based-access-control/security-controls-policy
+- type: docs
+ url: https://learn.microsoft.com/training/paths/describe-azure-management-governance/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureStorageEncryptionAzureResourceManager.yaml b/v2/recos/Practices/Security/revcl-AzureStorageEncryptionAzureResourceManager.yaml
new file mode 100644
index 000000000..1e4c5b823
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureStorageEncryptionAzureResourceManager.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureStorageEncryptionAzureResourceManager
+title: Azure Storage encryption is enabled for all Azure Resource Manager and classic
+ storage accounts, and can't be disabled. Because your data is encrypted by default,
+ you don't need to modify your code or applications to use Azure Storage encryption.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: a1abfe9d-55d0-44c3-a491-9cb1b3d1325a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-service-encryption
+- type: docs
+ url: https://learn.microsoft.com/training/modules/encrypt-sector-data/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-AzureVirtualWanHubPrivateDomainNameSystem.yaml b/v2/recos/Practices/Security/revcl-AzureVirtualWanHubPrivateDomainNameSystem.yaml
new file mode 100644
index 000000000..c00819ab5
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-AzureVirtualWanHubPrivateDomainNameSystem.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureVirtualWanHubPrivateDomainNameSystem
+title: Enforce a dedicated connectivity subscription in the Connectivity management
+ group to host an Azure Virtual WAN hub, private Domain Name System (DNS), ExpressRoute
+ circuit, and other networking resources.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 8bbac757-1559-4ab9-853e-8908ae28c84c
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.04
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ConfidentialOnlineManagementGroupSovereignLandingZone.yaml b/v2/recos/Practices/Security/revcl-ConfidentialOnlineManagementGroupSovereignLandingZone.yaml
new file mode 100644
index 000000000..644af8bf5
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ConfidentialOnlineManagementGroupSovereignLandingZone.yaml
@@ -0,0 +1,18 @@
+name: revcl-ConfidentialOnlineManagementGroupSovereignLandingZone
+title: For Sovereign Landing Zone, have a 'confidential corp' and 'confidential online'
+ management group directly under the 'landing zones' MG.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 6cc0ea22-42bb-441e-a345-804ab0a09666
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.15
+links:
+- type: docs
+ url: https://github.com/Azure/sovereign-landing-zone/blob/main/docs/02-Architecture.md
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-CostManagementProcess.yaml b/v2/recos/Practices/Security/revcl-CostManagementProcess.yaml
new file mode 100644
index 000000000..b8d5277e2
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-CostManagementProcess.yaml
@@ -0,0 +1,19 @@
+name: revcl-CostManagementProcess
+title: Enforce a process for cost management
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: ae28c84c-33b6-4b78-88b9-fe5c41049d40
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.12
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/cost-management-billing-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/control-spending-manage-bills/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-CostManagementTags.yaml b/v2/recos/Practices/Security/revcl-CostManagementTags.yaml
new file mode 100644
index 000000000..9cf7e897e
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-CostManagementTags.yaml
@@ -0,0 +1,21 @@
+name: revcl-CostManagementTags
+title: Ensure tags are used for billing and cost management
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 5de32c19-9248-4160-9d5d-1e4e614658d3
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.14
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/track-costs
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries:
+ arg: resources | extend compliant = isnotnull(['tags']) | project name, id, subscriptionId,
+ resourceGroup, tags, compliant
diff --git a/v2/recos/Practices/Security/revcl-CustomizedAzurePoliciesAzureResources.yaml b/v2/recos/Practices/Security/revcl-CustomizedAzurePoliciesAzureResources.yaml
new file mode 100644
index 000000000..94f783a9d
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-CustomizedAzurePoliciesAzureResources.yaml
@@ -0,0 +1,18 @@
+name: revcl-CustomizedAzurePoliciesAzureResources
+title: It is recommended to LOCK the Azure Resources post successful deployment to
+ safeguard against unauthorized changes. You can also enforce LOCK constraints and
+ rules on your per-subscription basis using customized Azure policies(Custome role).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 829e2edb-2173-4676-aff6-691b4935ada4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json
+- type: docs
+ url: https://learn.microsoft.com/training/modules/use-azure-resource-manager/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DaViewChargesAoViewCharges.yaml b/v2/recos/Practices/Security/revcl-DaViewChargesAoViewCharges.yaml
new file mode 100644
index 000000000..5c5388927
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DaViewChargesAoViewCharges.yaml
@@ -0,0 +1,18 @@
+name: revcl-DaViewChargesAoViewCharges
+title: Enable both DA View Charges and AO View Charges on your EA Enrollments to allow
+ users with the correct perms review Cost and Billing Data.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: ca0fe401-12ad-46fc-8a7e-86293866a9f6
+ area: Azure Billing and Microsoft Entra ID Tenants
+ subarea: Enterprise Agreement
+ id: A03.04
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DataPlaneAccessDataOperations.yaml b/v2/recos/Practices/Security/revcl-DataPlaneAccessDataOperations.yaml
new file mode 100644
index 000000000..2624754c3
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DataPlaneAccessDataOperations.yaml
@@ -0,0 +1,20 @@
+name: revcl-DataPlaneAccessDataOperations
+title: Use Azure RBAC to manage data plane access to resources, if possible. E.g.
+ Data Operations across Key Vault, Storage Account and Database Services.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: d4d1ad54-1abc-4919-b267-3f342d3b49e4
+ area: Identity and Access Management
+ subarea: Landing zones
+ id: B04.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#rbac-recommendations
+- type: docs
+ url: https://learn.microsoft.com/azure/role-based-access-control/overview
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DedicatedIdentitySubscriptionIdentityManagementGroup.yaml b/v2/recos/Practices/Security/revcl-DedicatedIdentitySubscriptionIdentityManagementGroup.yaml
new file mode 100644
index 000000000..ccf2040e4
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DedicatedIdentitySubscriptionIdentityManagementGroup.yaml
@@ -0,0 +1,22 @@
+name: revcl-DedicatedIdentitySubscriptionIdentityManagementGroup
+title: If servers will be used for Identity services, like domain controllers, establish
+ a dedicated identity subscription in the identity management group, to host these
+ services. Make sure that resources are set to use the domain controllers available
+ in their region.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 3a923c34-74d0-4001-aac6-a9e01e6a83de
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.13
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/management-groups/overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DefenderCloudSecurityPostureManagementSubscriptions.yaml b/v2/recos/Practices/Security/revcl-DefenderCloudSecurityPostureManagementSubscriptions.yaml
new file mode 100644
index 000000000..c4b833768
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DefenderCloudSecurityPostureManagementSubscriptions.yaml
@@ -0,0 +1,14 @@
+name: revcl-DefenderCloudSecurityPostureManagementSubscriptions
+title: Enable Defender Cloud Security Posture Management for all subscriptions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 09945bda-4333-44f2-9911-634182ba5275
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/concept-cloud-security-posture-management
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DefenderCloudWorkloadProtectionPlanServers.yaml b/v2/recos/Practices/Security/revcl-DefenderCloudWorkloadProtectionPlanServers.yaml
new file mode 100644
index 000000000..03201698e
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DefenderCloudWorkloadProtectionPlanServers.yaml
@@ -0,0 +1,14 @@
+name: revcl-DefenderCloudWorkloadProtectionPlanServers
+title: Enable a Defender Cloud Workload Protection Plan for Servers on all subscriptions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 36a72a48-fffe-4c40-9747-0ab5064355ba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/plan-defender-for-servers-select-plan
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DefenderCloudWorkloadProtectionPlansAzureResources.yaml b/v2/recos/Practices/Security/revcl-DefenderCloudWorkloadProtectionPlansAzureResources.yaml
new file mode 100644
index 000000000..1e21c778f
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DefenderCloudWorkloadProtectionPlansAzureResources.yaml
@@ -0,0 +1,15 @@
+name: revcl-DefenderCloudWorkloadProtectionPlansAzureResources
+title: Enable Defender Cloud Workload Protection Plans for Azure Resources on all
+ subscriptions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 77425f48-ecba-43a0-aeac-a3ac733ccc6a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/connect-azure-subscription
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DelegateSubnetCreationLandingZoneOwner.yaml b/v2/recos/Practices/Security/revcl-DelegateSubnetCreationLandingZoneOwner.yaml
new file mode 100644
index 000000000..e71daca41
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DelegateSubnetCreationLandingZoneOwner.yaml
@@ -0,0 +1,19 @@
+name: revcl-DelegateSubnetCreationLandingZoneOwner
+title: Delegate subnet creation to the landing zone owner.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: c2447ec6-6138-4a72-80f1-ce16ed301d6e
+ area: Network Topology and Connectivity
+ subarea: Segmentation
+ id: D09.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-DelegatedResponsibilitiesLandingZone.yaml b/v2/recos/Practices/Security/revcl-DelegatedResponsibilitiesLandingZone.yaml
new file mode 100644
index 000000000..6dee7a8d7
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-DelegatedResponsibilitiesLandingZone.yaml
@@ -0,0 +1,20 @@
+name: revcl-DelegatedResponsibilitiesLandingZone
+title: Enforce centralized and delegated responsibilities to manage resources deployed
+ inside the landing zone, based on role and security requirements
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: e6a83de5-de32-4c19-a248-1607d5d1e4e6
+ area: Identity and Access Management
+ subarea: Identity
+ id: B03.06
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ExistingAzureEnvironmentNetworkSecurityGroups.yaml b/v2/recos/Practices/Security/revcl-ExistingAzureEnvironmentNetworkSecurityGroups.yaml
new file mode 100644
index 000000000..b73e4313e
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ExistingAzureEnvironmentNetworkSecurityGroups.yaml
@@ -0,0 +1,17 @@
+name: revcl-ExistingAzureEnvironmentNetworkSecurityGroups
+title: For SAP RISE/ECS deployments, virtual peering is the preferred way to establish
+ connectivity with customer's existing Azure environment. Both the SAP vnet and customer
+ vnet(s) are protected with network security groups (NSG), enabling communication
+ on SAP and database ports through the vnet peering
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 87585797-5551-4d53-bb7d-a94ee415734d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/rise-integration
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-FlatManagementGroupHierarchyFourLevels.yaml b/v2/recos/Practices/Security/revcl-FlatManagementGroupHierarchyFourLevels.yaml
new file mode 100644
index 000000000..bb89209c0
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-FlatManagementGroupHierarchyFourLevels.yaml
@@ -0,0 +1,23 @@
+name: revcl-FlatManagementGroupHierarchyFourLevels
+title: Enforce reasonably flat management group hierarchy with no more than four levels.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 2df27ee4-12e7-4f98-9f63-04722dd69c5b
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-architecture-fundamentals/
+queries:
+ arg: resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend
+ ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain|
+ extend compliant =( array_length(mgmtChain) <= 4 and array_length(mgmtChain) >
+ 1)
diff --git a/v2/recos/Practices/Security/revcl-HttpSInboundConnectionsEastWestTrafficFiltering-1.yaml b/v2/recos/Practices/Security/revcl-HttpSInboundConnectionsEastWestTrafficFiltering-1.yaml
new file mode 100644
index 000000000..dc13be026
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-HttpSInboundConnectionsEastWestTrafficFiltering-1.yaml
@@ -0,0 +1,18 @@
+name: revcl-HttpSInboundConnectionsEastWestTrafficFiltering-1
+title: Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S
+ inbound connections, and East/West traffic filtering (if the organization requires
+ it)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: d8a03e97-7784-424d-9167-85d6fa96c96a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/well-architected/services/networking/azure-firewall?toc=%2Fazure%2Ffirewall%2Ftoc.json&bc=%2Fazure%2Ffirewall%2Fbreadcrumb%2Ftoc.json
+- type: docs
+ url: https://learn.microsoft.com/training/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-HubVirtualNetworkVirtualNetworkPeering.yaml b/v2/recos/Practices/Security/revcl-HubVirtualNetworkVirtualNetworkPeering.yaml
new file mode 100644
index 000000000..533a6e5d3
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-HubVirtualNetworkVirtualNetworkPeering.yaml
@@ -0,0 +1,19 @@
+name: revcl-HubVirtualNetworkVirtualNetworkPeering
+title: Isolate the SAP application and database servers from the internet or from
+ the on-premises network by passing all traffic through the hub virtual network,
+ which is connected to the spoke network by virtual network peering. The peered virtual
+ networks guarantee that the SAP on Azure solution is isolated from the public internet.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 87a924c4-25c2-419f-a2f0-96c7c4fe4525
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/guide/sap/sap-whole-landscape
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-azure-networking/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-InboundHttpSConnectionsAzureFrontDoor-1.yaml b/v2/recos/Practices/Security/revcl-InboundHttpSConnectionsAzureFrontDoor-1.yaml
new file mode 100644
index 000000000..27691e95f
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-InboundHttpSConnectionsAzureFrontDoor-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-InboundHttpSConnectionsAzureFrontDoor-1
+title: Use Azure Front Door and WAF policies to provide global protection across Azure
+ regions for inbound HTTP/S connections to a landing zone.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 5e39e530-9ccc-4d97-a366-bcda2750ab1a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/training/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-IncidentResponsePlanAzureServices.yaml b/v2/recos/Practices/Security/revcl-IncidentResponsePlanAzureServices.yaml
new file mode 100644
index 000000000..222d662b5
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-IncidentResponsePlanAzureServices.yaml
@@ -0,0 +1,18 @@
+name: revcl-IncidentResponsePlanAzureServices
+title: Determine the incident response plan for Azure services before allowing it
+ into production.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: b86ad884-08e3-4727-94b8-75ba18f20459
+ area: Security
+ subarea: Access control
+ id: G01.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/security-control-incident-response
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-InternalLoadBalancerConfigurationsAzureLoadBalancer.yaml b/v2/recos/Practices/Security/revcl-InternalLoadBalancerConfigurationsAzureLoadBalancer.yaml
new file mode 100644
index 000000000..538d53595
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-InternalLoadBalancerConfigurationsAzureLoadBalancer.yaml
@@ -0,0 +1,19 @@
+name: revcl-InternalLoadBalancerConfigurationsAzureLoadBalancer
+title: Make sure that internal deployments for Azure Load Balancer are set up to use
+ Direct Server Return (DSR). This setting (Enabling Floating IP) will reduce latency
+ when internal load balancer configurations are used for high-availability configurations
+ on the DBMS layer.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 3ff8ae7d-7d47-4431-96c8-bcbf45bbe609
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-multivip-overview
+- type: docs
+ url: https://learn.microsoft.com/ja-jp/training/modules/load-balancing-non-https-traffic-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ItCoreTeamProvisionResources.yaml b/v2/recos/Practices/Security/revcl-ItCoreTeamProvisionResources.yaml
new file mode 100644
index 000000000..174d44e25
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ItCoreTeamProvisionResources.yaml
@@ -0,0 +1,18 @@
+name: revcl-ItCoreTeamProvisionResources
+title: Ensure that all subscription owners and IT core team are aware of subscription
+ quotas and the impact they have on provision resources for a given subscription.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 2dd69c5b-5c26-422f-94b6-9bad33aad5e8
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.09
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ManagementGroupHierarchySettingsManagementGroups.yaml b/v2/recos/Practices/Security/revcl-ManagementGroupHierarchySettingsManagementGroups.yaml
new file mode 100644
index 000000000..2bbe5f05f
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ManagementGroupHierarchySettingsManagementGroups.yaml
@@ -0,0 +1,18 @@
+name: revcl-ManagementGroupHierarchySettingsManagementGroups
+title: Enforce that only privileged users can operate management groups in the tenant
+ by enabling Azure RBAC authorization in the management group hierarchy settings
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 74d00018-ac6a-49e0-8e6a-83de5de32c19
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.06
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---require-authorization
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-MicrosoftAntiMalwareSoftwareVirtualMachines.yaml b/v2/recos/Practices/Security/revcl-MicrosoftAntiMalwareSoftwareVirtualMachines.yaml
new file mode 100644
index 000000000..fa54b1c23
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-MicrosoftAntiMalwareSoftwareVirtualMachines.yaml
@@ -0,0 +1,17 @@
+name: revcl-MicrosoftAntiMalwareSoftwareVirtualMachines
+title: Consider using Microsoft anti-malware software on Azure to protect your virtual
+ machines from malicious files, adware, and other threats.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 2
+labels:
+ guid: e124ba34-df68-45ed-bce9-bd3bb0cdb3b5
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/training/modules/secure-vms-with-azure-security-center/?source=recommendations
+- type: docs
+ url: https://azure.microsoft.com/blog/deploying-antimalware-solutions-on-azure-virtual-machines/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-MicrosoftBestPracticeNamingStandardsAzureNamingTool.yaml b/v2/recos/Practices/Security/revcl-MicrosoftBestPracticeNamingStandardsAzureNamingTool.yaml
new file mode 100644
index 000000000..a4b418da0
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-MicrosoftBestPracticeNamingStandardsAzureNamingTool.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftBestPracticeNamingStandardsAzureNamingTool
+title: It is recommended to follow Microsoft Best Practice Naming Standards
+description: Consider using the Azure naming tool available at https://aka.ms/azurenamingtool
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: cacf55bc-e4e4-46be-96bc-57a5f23a269a
+ area: Resource Organization
+ subarea: Naming and tagging
+ id: C01.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-MicrosoftDefenderSapEnvironment.yaml b/v2/recos/Practices/Security/revcl-MicrosoftDefenderSapEnvironment.yaml
new file mode 100644
index 000000000..de0f43c01
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-MicrosoftDefenderSapEnvironment.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftDefenderSapEnvironment
+title: When enabling Microsoft Defender for Endpoint on SAP environment, recommend
+ excluding data and log files on DBMS servers instead of targeting all servers. Follow
+ your DBMS vendor's recommendations when excluding target files.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: a4777842-4d11-4678-9d2f-a56c56ad4840
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance
+- type: docs
+ url: https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/microsoft-defender-endpoint-mde-for-sap-applications-on-windows/ba-p/3912268
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-MicrosoftEntraIdPimAccessReviewsResourceEntitlements.yaml b/v2/recos/Practices/Security/revcl-MicrosoftEntraIdPimAccessReviewsResourceEntitlements.yaml
new file mode 100644
index 000000000..f9be6e4b6
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-MicrosoftEntraIdPimAccessReviewsResourceEntitlements.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftEntraIdPimAccessReviewsResourceEntitlements
+title: Use Microsoft Entra ID PIM access reviews to periodically validate resource
+ entitlements
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: d505ebcb-79b1-4274-9c0d-a27c8bea489c
+ area: Identity and Access Management
+ subarea: Landing zones
+ id: B04.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-create-roles-and-resource-roles-review
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-MicrosoftSentinelSolutionThreatProtection.yaml b/v2/recos/Practices/Security/revcl-MicrosoftSentinelSolutionThreatProtection.yaml
new file mode 100644
index 000000000..f0b33d12e
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-MicrosoftSentinelSolutionThreatProtection.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftSentinelSolutionThreatProtection
+title: Implement threat protection by using the Microsoft Sentinel solution for SAP.
+ Use this solution to monitor your SAP systems and detect sophisticated threats throughout
+ the business logic and application layers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 86ba2802-1459-4114-95e3-9e5309cccd97
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sentinel/sap/deployment-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/plan-microsoft-sentinel-deployment-sap/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-NetworkSecurityAccessControlListsApplicationSecurityGroup.yaml b/v2/recos/Practices/Security/revcl-NetworkSecurityAccessControlListsApplicationSecurityGroup.yaml
new file mode 100644
index 000000000..61d9e14f8
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-NetworkSecurityAccessControlListsApplicationSecurityGroup.yaml
@@ -0,0 +1,18 @@
+name: revcl-NetworkSecurityAccessControlListsApplicationSecurityGroup
+title: You can use application security group (ASG) and NSG rules to define network
+ security access-control lists between the SAP application and DBMS layers. ASGs
+ group virtual machines to help manage their security.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 6791f893-5ada-4433-84e1-3811523181aa
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works
+- type: docs
+ url: https://learn.microsoft.com/training/modules/configure-network-security-groups/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-NewAzureServices.yaml b/v2/recos/Practices/Security/revcl-NewAzureServices.yaml
new file mode 100644
index 000000000..2cdf10293
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-NewAzureServices.yaml
@@ -0,0 +1,17 @@
+name: revcl-NewAzureServices
+title: Plan how new azure services will be implemented
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 9a19bf39-c95d-444c-9c89-19ca1f6d5215
+ area: Security
+ subarea: Service enablement framework
+ id: G06.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-OtherCloudEnvironmentsUpdateManagementCenter.yaml b/v2/recos/Practices/Security/revcl-OtherCloudEnvironmentsUpdateManagementCenter.yaml
new file mode 100644
index 000000000..a4e99245a
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-OtherCloudEnvironmentsUpdateManagementCenter.yaml
@@ -0,0 +1,18 @@
+name: revcl-OtherCloudEnvironmentsUpdateManagementCenter
+title: If you run Windows and Linux VMs in Azure, on-premises, or in other cloud environments,
+ you can use the Update management center in Azure Automation to manage operating
+ system updates, including security patches.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 18dffcf3-248c-4039-a67c-dec8e3a5f804
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations
+- type: docs
+ url: https://learn.microsoft.com/azure/automation/update-management/overview
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-PlatformManagementGroupRootManagementGroup.yaml b/v2/recos/Practices/Security/revcl-PlatformManagementGroupRootManagementGroup.yaml
new file mode 100644
index 000000000..da27deab1
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-PlatformManagementGroupRootManagementGroup.yaml
@@ -0,0 +1,20 @@
+name: revcl-PlatformManagementGroupRootManagementGroup
+title: Enforce a platform management group under the root management group to support
+ common platform policy and Azure role assignment
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 61623a76-5a91-47e1-b348-ef254c27d42e
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.03
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-PowerfulProtectionMicrosoftDefender.yaml b/v2/recos/Practices/Security/revcl-PowerfulProtectionMicrosoftDefender.yaml
new file mode 100644
index 000000000..5a080325d
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-PowerfulProtectionMicrosoftDefender.yaml
@@ -0,0 +1,16 @@
+name: revcl-PowerfulProtectionMicrosoftDefender
+title: For even more powerful protection, consider using Microsoft Defender for Endpoint.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 2
+labels:
+ guid: 5eb2ec14-eeaa-4359-8829-e2edb2173676
+links:
+- type: docs
+ url: https://learn.microsoft.com/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-endpoint-protection-use-microsoft-defender/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys-1.yaml b/v2/recos/Practices/Security/revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys-1.yaml
new file mode 100644
index 000000000..36dfd4cca
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys-1.yaml
@@ -0,0 +1,18 @@
+name: revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys-1
+title: Default to Microsoft-managed keys for principal encryption functionality and
+ use customer-managed keys when required.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 16183687-a047-47a2-8994-5bda43334f24
+ area: Security
+ subarea: Encryption and keys
+ id: G02.10
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/security/fundamentals/encryption-atrest
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys.yaml b/v2/recos/Practices/Security/revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys.yaml
new file mode 100644
index 000000000..2904091d0
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys.yaml
@@ -0,0 +1,17 @@
+name: revcl-PrincipalEncryptionFunctionalityMicrosoftManagedKeys
+title: Default to Microsoft-managed keys for principal encryption functionality and
+ use customer-managed keys when required.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: eeaa3592-829e-42ed-a217-3676aff6691b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-encryption-key-model-get?tabs=portal
+- type: docs
+ url: https://learn.microsoft.com/training/modules/manage-secrets-with-azure-key-vault/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-PrincipalPropagationApplications.yaml b/v2/recos/Practices/Security/revcl-PrincipalPropagationApplications.yaml
new file mode 100644
index 000000000..68f8d57c1
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-PrincipalPropagationApplications.yaml
@@ -0,0 +1,15 @@
+name: revcl-PrincipalPropagationApplications
+title: For applications that access SAP, you might want to use principal propagation
+ to establish SSO.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: e4e48226-ce54-44b6-bb6b-bfa15bd8f753
+links:
+- type: docs
+ url: https://github.com/azuredevcollege/SAP/blob/master/sap-oauth-saml-flow/README.md
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-PublicIpAssignmentSapWorkload.yaml b/v2/recos/Practices/Security/revcl-PublicIpAssignmentSapWorkload.yaml
new file mode 100644
index 000000000..ae83a7797
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-PublicIpAssignmentSapWorkload.yaml
@@ -0,0 +1,16 @@
+name: revcl-PublicIpAssignmentSapWorkload
+title: Public IP assignment to VM running SAP Workload is not recommended.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 82734c88-6ba2-4802-8459-11475e39e530
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing
+- type: docs
+ url: https://learn.microsoft.com/training/modules/design-ip-addressing-for-azure/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-RbacModelManagementGroups.yaml b/v2/recos/Practices/Security/revcl-RbacModelManagementGroups.yaml
new file mode 100644
index 000000000..b320a8d5d
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-RbacModelManagementGroups.yaml
@@ -0,0 +1,17 @@
+name: revcl-RbacModelManagementGroups
+title: Enforce a RBAC model for management groups, subscriptions, resource groups
+ and resources
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: fda1dbf3-dc95-4d48-a7c7-91dca0f6c565
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/well-architected/sap/design-areas/security
+- type: docs
+ url: https://learn.microsoft.com/training/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ReservedInstanceVmSkusReservedInstances.yaml b/v2/recos/Practices/Security/revcl-ReservedInstanceVmSkusReservedInstances.yaml
new file mode 100644
index 000000000..4fc7f79fc
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ReservedInstanceVmSkusReservedInstances.yaml
@@ -0,0 +1,21 @@
+name: revcl-ReservedInstanceVmSkusReservedInstances
+title: Use Reserved Instances where appropriate to optimize cost and ensure available
+ capacity in target regions. Enforce the use of purchased Reserved Instance VM SKUs
+ via Azure Policy.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: c68e1d76-6673-413b-9f56-64b5e984a859
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.10
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/reservations/save-compute-costs-reservations
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/improve-reliability-modern-operations/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ResourceOwnersAccessReview.yaml b/v2/recos/Practices/Security/revcl-ResourceOwnersAccessReview.yaml
new file mode 100644
index 000000000..1c5d938e4
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ResourceOwnersAccessReview.yaml
@@ -0,0 +1,18 @@
+name: revcl-ResourceOwnersAccessReview
+title: Enforce a process to make resource owners aware of their roles and responsibilities,
+ access review, budget review, policy compliance and remediate when necessary.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 49b82111-2df2-47ee-912e-7f983f630472
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.08
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/management-groups/overview
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-RoleBasedAccessControlAzureSpokeSubscriptions.yaml b/v2/recos/Practices/Security/revcl-RoleBasedAccessControlAzureSpokeSubscriptions.yaml
new file mode 100644
index 000000000..95ebde95a
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-RoleBasedAccessControlAzureSpokeSubscriptions.yaml
@@ -0,0 +1,17 @@
+name: revcl-RoleBasedAccessControlAzureSpokeSubscriptions
+title: Customize role-based access control (RBAC) roles for SAP on Azure spoke subscriptions
+ to avoid accidental network-related changes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 209d490d-a477-4784-84d1-16785d2fa56c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/role-based-access-control/built-in-roles
+- type: docs
+ url: https://learn.microsoft.com/training/modules/secure-azure-resources-with-rbac/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-RootLevelManagementGroupManagementGroups.yaml b/v2/recos/Practices/Security/revcl-RootLevelManagementGroupManagementGroups.yaml
new file mode 100644
index 000000000..67ebdbf17
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-RootLevelManagementGroupManagementGroups.yaml
@@ -0,0 +1,19 @@
+name: revcl-RootLevelManagementGroupManagementGroups
+title: Enforce management groups under the root-level management group to represent
+ the types of workloads, based on their security, compliance, connectivity, and feature
+ needs.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 92481607-d5d1-4e4e-9146-58d3558fd772
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.07
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/management-groups/overview
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-RootManagementGroupSubscriptions.yaml b/v2/recos/Practices/Security/revcl-RootManagementGroupSubscriptions.yaml
new file mode 100644
index 000000000..f68ebe1e2
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-RootManagementGroupSubscriptions.yaml
@@ -0,0 +1,20 @@
+name: revcl-RootManagementGroupSubscriptions
+title: Enforce no subscriptions are placed under the root management group
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 33b6b780-8b9f-4e5c-9104-9d403a923c34
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.05
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/management-groups/how-to/protect-resource-hierarchy#setting---default-management-group
+queries:
+ arg: resourcecontainers| where type == 'microsoft.resources/subscriptions'| extend
+ ManagementGroup = tostring(tags),mgmtChain = properties.managementGroupAncestorsChain|
+ extend compliant = (array_length(mgmtChain) > 1)
diff --git a/v2/recos/Practices/Security/revcl-SandboxManagementGroupUsers.yaml b/v2/recos/Practices/Security/revcl-SandboxManagementGroupUsers.yaml
new file mode 100644
index 000000000..b814ce9b2
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SandboxManagementGroupUsers.yaml
@@ -0,0 +1,20 @@
+name: revcl-SandboxManagementGroupUsers
+title: Enforce a sandbox management group to allow users to immediately experiment
+ with Azure
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 667313b4-f566-44b5-b984-a859c773e7d2
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-group-recommendations
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/enterprise-scale-architecture/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapAdminCustomRoleTimeAccess.yaml b/v2/recos/Practices/Security/revcl-SapAdminCustomRoleTimeAccess.yaml
new file mode 100644
index 000000000..2f6846734
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapAdminCustomRoleTimeAccess.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapAdminCustomRoleTimeAccess
+title: Delegate an SAP admin custom role with just-in-time access of Microsoft Defender
+ for Cloud.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 8fe72734-c486-4ba2-a0dc-0591cf65de8e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview?tabs=defender-for-container-arch-aks
+- type: docs
+ url: https://learn.microsoft.com/training/modules/secure-vms-with-azure-security-center/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapBtpSso.yaml b/v2/recos/Practices/Security/revcl-SapBtpSso.yaml
new file mode 100644
index 000000000..5e72cba4f
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapBtpSso.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapBtpSso
+title: Implement SSO to SAP BTP
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: a709c664-317e-41e4-9e34-67d9016a86f4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-tutorial
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapCloudApplicationCloudConnector.yaml b/v2/recos/Practices/Security/revcl-SapCloudApplicationCloudConnector.yaml
new file mode 100644
index 000000000..4b4d6e35c
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapCloudApplicationCloudConnector.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapCloudApplicationCloudConnector
+title: Enforce Principal propagation for forwarding the identity from SAP cloud application
+ to SAP on-premises (Including IaaS) through cloud connector
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 45911475-e39e-4530-accc-d979366bcda2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-identity-services/2-explore-azure-virtual-machine-auth-access-control
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapCloudIdentityAuthenticationServicesSapIdentityAuthenticationService.yaml b/v2/recos/Practices/Security/revcl-SapCloudIdentityAuthenticationServicesSapIdentityAuthenticationService.yaml
new file mode 100644
index 000000000..76196168b
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapCloudIdentityAuthenticationServicesSapIdentityAuthenticationService.yaml
@@ -0,0 +1,18 @@
+name: revcl-SapCloudIdentityAuthenticationServicesSapIdentityAuthenticationService
+title: If you're using SAP BTP services or SaaS solutions that require SAP Identity
+ Authentication Service (IAS), consider implementing SSO between SAP Cloud Identity
+ Authentication Services and Azure AD to access those SAP services. This integration
+ lets SAP IAS act as a proxy identity provider and forwards authentication requests
+ to Azure AD as the central user store and identity provider.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 59921095-4980-4fc1-a5b6-524a5a560c79
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/sap-hana-cloud-platform-identity-authentication-tutorial
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapHanaNativeEncryptionTechnologySapHanaDatabaseServers.yaml b/v2/recos/Practices/Security/revcl-SapHanaNativeEncryptionTechnologySapHanaDatabaseServers.yaml
new file mode 100644
index 000000000..51ab109e2
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapHanaNativeEncryptionTechnologySapHanaDatabaseServers.yaml
@@ -0,0 +1,19 @@
+name: revcl-SapHanaNativeEncryptionTechnologySapHanaDatabaseServers
+title: Encrypting SAP HANA database servers on Azure uses SAP HANA native encryption
+ technology. Additionally, if you are using SQL Server on Azure, use Transparent
+ Data Encryption (TDE) to protect your data and log files and ensure that your backups
+ are also encrypted.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: cf65de8e-1309-4ccc-b579-266bcca275fa
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapHanaSso.yaml b/v2/recos/Practices/Security/revcl-SapHanaSso.yaml
new file mode 100644
index 000000000..dc12d550b
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapHanaSso.yaml
@@ -0,0 +1,14 @@
+name: revcl-SapHanaSso
+title: Implement SSO to SAP HANA
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: a747c350-8d4c-449c-93af-393dbca77c48
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/saphana-tutorial
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapNetweaverBasedWebApplicationsSapWebGui-1.yaml b/v2/recos/Practices/Security/revcl-SapNetweaverBasedWebApplicationsSapWebGui-1.yaml
new file mode 100644
index 000000000..11083d7c9
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapNetweaverBasedWebApplicationsSapWebGui-1.yaml
@@ -0,0 +1,15 @@
+name: revcl-SapNetweaverBasedWebApplicationsSapWebGui-1
+title: Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP
+ Web GUI by using SAML.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 9eb54dad-7861-4e1c-973a-f3bb003fc9c1
+links:
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-identity-services/6-exercise-integrate-azure-active-directory-sap-fiori
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapNetweaverBasedWebApplicationsSapWebGui.yaml b/v2/recos/Practices/Security/revcl-SapNetweaverBasedWebApplicationsSapWebGui.yaml
new file mode 100644
index 000000000..b9a8d86bb
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapNetweaverBasedWebApplicationsSapWebGui.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapNetweaverBasedWebApplicationsSapWebGui
+title: Implement SSO to SAP NetWeaver-based web applications like SAP Fiori and SAP
+ Web GUI by using SAML.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 325ae525-ba34-4d46-a5e2-213ace7bb122
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapNetweaverOdataServicesCustomApplications.yaml b/v2/recos/Practices/Security/revcl-SapNetweaverOdataServicesCustomApplications.yaml
new file mode 100644
index 000000000..c8d8ebb30
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapNetweaverOdataServicesCustomApplications.yaml
@@ -0,0 +1,15 @@
+name: revcl-SapNetweaverOdataServicesCustomApplications
+title: Implement SSO by using OAuth for SAP NetWeaver to allow third-party or custom
+ applications to access SAP NetWeaver OData services.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 16785d6f-a96c-496a-b885-18f482734c88
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial#configure-sap-netweaver-for-oauth
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapNetweaverSsoSapGui.yaml b/v2/recos/Practices/Security/revcl-SapNetweaverSsoSapGui.yaml
new file mode 100644
index 000000000..463901c08
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapNetweaverSsoSapGui.yaml
@@ -0,0 +1,16 @@
+name: revcl-SapNetweaverSsoSapGui
+title: You can implement SSO to SAP GUI by using SAP NetWeaver SSO or a partner solution.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: f29676ef-0c9c-4c4d-ab21-a55504c0c829
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/saas-apps/sap-netweaver-tutorial
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-identity-services/8-exercise-integrate-azure-active-directory-sap-netweaver
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapSaasApplicationsSapAnalyticsCloud.yaml b/v2/recos/Practices/Security/revcl-SapSaasApplicationsSapAnalyticsCloud.yaml
new file mode 100644
index 000000000..58fbb78fc
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapSaasApplicationsSapAnalyticsCloud.yaml
@@ -0,0 +1,15 @@
+name: revcl-SapSaasApplicationsSapAnalyticsCloud
+title: Implement SSO to SAP SaaS applications like SAP Analytics Cloud, SAP Cloud
+ Platform, Business by design, SAP Qualtrics and SAP C4C with Azure AD using SAML.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 750ab1ab-039d-495d-94c7-c8929cb107d5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/fundamentals/scenario-azure-first-sap-identity-integration
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapSecureLoginServerWebBrowserAccess-1.yaml b/v2/recos/Practices/Security/revcl-SapSecureLoginServerWebBrowserAccess-1.yaml
new file mode 100644
index 000000000..7052b790a
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapSecureLoginServerWebBrowserAccess-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapSecureLoginServerWebBrowserAccess-1
+title: For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO
+ (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration
+ and maintenance. For SSO with X.509 client certificates, consider the SAP Secure
+ Login Server, which is a component of the SAP SSO solution.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 6c8bcbf4-5bbe-4609-b8a0-3e97778424d6
+links:
+- type: docs
+ url: https://blogs.sap.com/2017/07/12/sap-single-sign-on-protect-your-sap-landscape-with-x.509-certificates/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapSecureLoginServerWebBrowserAccess.yaml b/v2/recos/Practices/Security/revcl-SapSecureLoginServerWebBrowserAccess.yaml
new file mode 100644
index 000000000..af730b76b
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapSecureLoginServerWebBrowserAccess.yaml
@@ -0,0 +1,17 @@
+name: revcl-SapSecureLoginServerWebBrowserAccess
+title: For SSO for SAP GUI and web browser access, implement SNC / Kerberos/SPNEGO
+ (simple and protected GSSAPI negotiation mechanism) due to its ease of configuration
+ and maintenance. For SSO with X.509 client certificates, consider the SAP Secure
+ Login Server, which is a component of the SAP SSO solution.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 23181aa4-1742-4694-9ff8-ae7d7d474317
+links:
+- type: docs
+ url: https://learn.microsoft.com/training/modules/explore-identity-services/9-exercise-integrate-active-directory-sap-single-sign-on
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapSecurityOssNotesCriticalSecurityPatches.yaml b/v2/recos/Practices/Security/revcl-SapSecurityOssNotesCriticalSecurityPatches.yaml
new file mode 100644
index 000000000..f543a3a08
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapSecurityOssNotesCriticalSecurityPatches.yaml
@@ -0,0 +1,18 @@
+name: revcl-SapSecurityOssNotesCriticalSecurityPatches
+title: Routinely review the SAP security OSS notes because SAP releases highly critical
+ security patches, or hot fixes, that require immediate action to protect your SAP
+ systems.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 08951710-79a2-492a-adbc-06d7a401545b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-security-operations
+- type: docs
+ url: https://support.sap.com/en/my-support/knowledge-base/security-notes-news.html
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SapWebAppsSapWebDispatcher.yaml b/v2/recos/Practices/Security/revcl-SapWebAppsSapWebDispatcher.yaml
new file mode 100644
index 000000000..618f02b99
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SapWebAppsSapWebDispatcher.yaml
@@ -0,0 +1,18 @@
+name: revcl-SapWebAppsSapWebDispatcher
+title: Application Gateway and Web Application Firewall have limitations when Application
+ Gateway serves as a reverse proxy for SAP web apps, as shown in the comparison between
+ Application Gateway, SAP Web Dispatcher, and other third-party services.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 91a65e40-be90-45b3-9f73-f3edbf8dc324
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/workloads/expose-sap-process-orchestration-on-azure
+- type: docs
+ url: https://help.sap.com/docs/SUPPORT_CONTENT/si/3362959506.html
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SecureCommunicationAzureMonitor.yaml b/v2/recos/Practices/Security/revcl-SecureCommunicationAzureMonitor.yaml
new file mode 100644
index 000000000..568e7e910
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SecureCommunicationAzureMonitor.yaml
@@ -0,0 +1,18 @@
+name: revcl-SecureCommunicationAzureMonitor
+title: To enable secure communication in Azure Monitor for SAP solutions, you can
+ choose to use either a root certificate or a server certificate. We highly recommend
+ that you use root certificates.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 9fc945b9-0527-47af-8200-9d652fe02fcc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/sap/monitor/enable-tls-azure-monitor-sap-solutions
+- type: docs
+ url: https://learn.microsoft.com/training/modules/implement-azure-monitoring-sap-workloads-azure-virtual-machines/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SecureDeliveryHttpSApps.yaml b/v2/recos/Practices/Security/revcl-SecureDeliveryHttpSApps.yaml
new file mode 100644
index 000000000..e302fb323
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SecureDeliveryHttpSApps.yaml
@@ -0,0 +1,17 @@
+name: revcl-SecureDeliveryHttpSApps
+title: For secure delivery of HTTP/S apps, use Application Gateway v2 and ensure that
+ WAF protection and policies are enabled.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 5ba34d46-85e2-4213-ace7-bb122f7c95f0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SeparatePrivilegedAdminAccountsAzureAdministrativeTasks.yaml b/v2/recos/Practices/Security/revcl-SeparatePrivilegedAdminAccountsAzureAdministrativeTasks.yaml
new file mode 100644
index 000000000..00016d3cc
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SeparatePrivilegedAdminAccountsAzureAdministrativeTasks.yaml
@@ -0,0 +1,17 @@
+name: revcl-SeparatePrivilegedAdminAccountsAzureAdministrativeTasks
+title: Separate privileged admin accounts for Azure administrative tasks.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 6f704104-85c1-441f-96d3-c9819911645e
+ area: Security
+ subarea: Secure privileged access
+ id: G05.01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/roles/security-planning
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ServicePrincipalLoginsExistingServicePrincipals.yaml b/v2/recos/Practices/Security/revcl-ServicePrincipalLoginsExistingServicePrincipals.yaml
new file mode 100644
index 000000000..4890040ae
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ServicePrincipalLoginsExistingServicePrincipals.yaml
@@ -0,0 +1,21 @@
+name: revcl-ServicePrincipalLoginsExistingServicePrincipals
+title: Use managed identities instead of service principals for authentication to
+ Azure services. You can check for existing service principals via Entra ID > Sign
+ in Logs > Service principal logins.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 4348bf81-7573-4512-8f46-9061cc198fea
+ area: Identity and Access Management
+ subarea: Microsoft Entra ID and Hybrid Identity
+ id: B03.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access-landing-zones#identity-and-access-management-in-the-azure-landing-zone-accelerator
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ServiceRequestAzureServices.yaml b/v2/recos/Practices/Security/revcl-ServiceRequestAzureServices.yaml
new file mode 100644
index 000000000..26e074c3a
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ServiceRequestAzureServices.yaml
@@ -0,0 +1,17 @@
+name: revcl-ServiceRequestAzureServices
+title: Plan how service request will be fulfilled for Azure services
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: ae514b93-3d45-485e-8112-9bd7ba012f7b
+ area: Security
+ subarea: Service enablement framework
+ id: G06.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/service-enablement-framework
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SqlServerInternalOperatingSystemCommandShellTheSqlServerFeature.yaml b/v2/recos/Practices/Security/revcl-SqlServerInternalOperatingSystemCommandShellTheSqlServerFeature.yaml
new file mode 100644
index 000000000..5820ff5ef
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SqlServerInternalOperatingSystemCommandShellTheSqlServerFeature.yaml
@@ -0,0 +1,17 @@
+name: revcl-SqlServerInternalOperatingSystemCommandShellTheSqlServerFeature
+title: Disable xp_cmdshell. The SQL Server feature xp_cmdshell enables a SQL Server
+ internal operating system command shell. It's a potential risk in security audits.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 0
+labels:
+ guid: 5a76a033-ced9-4eef-9a43-5e4f96634c8e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security
+- type: docs
+ url: https://me.sap.com/notes/3019299/E
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-SqlServerSystemAdministratorAccountOriginalSystemAdministratorAccount.yaml b/v2/recos/Practices/Security/revcl-SqlServerSystemAdministratorAccountOriginalSystemAdministratorAccount.yaml
new file mode 100644
index 000000000..210f04fa5
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-SqlServerSystemAdministratorAccountOriginalSystemAdministratorAccount.yaml
@@ -0,0 +1,17 @@
+name: revcl-SqlServerSystemAdministratorAccountOriginalSystemAdministratorAccount
+title: For SAP on SQL Server, you can disable the SQL Server system administrator
+ account because the SAP systems on SQL Server don't use the account. Ensure that
+ another user with system administrator rights can access the server before disabling
+ the original system administrator account.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 2
+labels:
+ guid: 1b8b394e-ae64-4a74-8933-357b523ea0a0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/sap-lza-database-security
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-StorageCapacityMetricsDiskSpace.yaml b/v2/recos/Practices/Security/revcl-StorageCapacityMetricsDiskSpace.yaml
new file mode 100644
index 000000000..0005f772d
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-StorageCapacityMetricsDiskSpace.yaml
@@ -0,0 +1,20 @@
+name: revcl-StorageCapacityMetricsDiskSpace
+title: Establish dashboards and/or visualizations to monitor compute and storage capacity
+ metrics. (i.e. CPU, memory, disk space)
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: c773e7d2-6162-43a7-95a9-17e1f348ef25
+ area: Resource Organization
+ subarea: Subscriptions
+ id: C02.11
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-portal/azure-portal-dashboards
+- type: docs
+ url: https://learn.microsoft.com/en-gb/training/modules/visualize-data-workbooks/
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ThirdPartySecurityProductSecureNetworkCommunications.yaml b/v2/recos/Practices/Security/revcl-ThirdPartySecurityProductSecureNetworkCommunications.yaml
new file mode 100644
index 000000000..1902882aa
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ThirdPartySecurityProductSecureNetworkCommunications.yaml
@@ -0,0 +1,17 @@
+name: revcl-ThirdPartySecurityProductSecureNetworkCommunications
+title: encrypt data in transit by integrating the third-party security product with
+ secure network communications (SNC) for DIAG (SAP GUI), RFC, and SPNEGO for HTTPS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 2
+labels:
+ guid: 1309cccd-5792-466b-aca2-75faa1abfe9d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance
+- type: docs
+ url: https://learn.microsoft.com/azure/security/fundamentals/encryption-overview#encryption-of-data-in-transit
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ThirdPartyWebApplicationFirewallApplicationRequirements.yaml b/v2/recos/Practices/Security/revcl-ThirdPartyWebApplicationFirewallApplicationRequirements.yaml
new file mode 100644
index 000000000..1cb304531
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ThirdPartyWebApplicationFirewallApplicationRequirements.yaml
@@ -0,0 +1,19 @@
+name: revcl-ThirdPartyWebApplicationFirewallApplicationRequirements
+title: For internet-facing applications like SAP Fiori, make sure to distribute load
+ per application requirements while maintaining security levels. For Layer 7 security,
+ you can use a third-party Web Application Firewall (WAF) available in the Azure
+ Marketplace.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 2
+labels:
+ guid: 491ca1c4-3d40-42c0-9d85-b8933999590b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/sap/eslz-security-governance-and-compliance
+- type: docs
+ url: https://learn.microsoft.com/training/modules/simplify-cloud-procurement-governance-azure-marketplace/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-WebApplicationFirewallFirewallCapabilities.yaml b/v2/recos/Practices/Security/revcl-WebApplicationFirewallFirewallCapabilities.yaml
new file mode 100644
index 000000000..d020822c0
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-WebApplicationFirewallFirewallCapabilities.yaml
@@ -0,0 +1,19 @@
+name: revcl-WebApplicationFirewallFirewallCapabilities
+title: Use a web application firewall to scan your traffic when it's exposed to the
+ internet. Another option is to use it with your load balancer or with resources
+ that have built-in firewall capabilities like Application Gateway or third-party
+ solutions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 5ada4332-4e13-4811-9231-81aa41742694
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-WebApplicationFirewallPoliciesAzureFrontDoor.yaml b/v2/recos/Practices/Security/revcl-WebApplicationFirewallPoliciesAzureFrontDoor.yaml
new file mode 100644
index 000000000..b3b784623
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-WebApplicationFirewallPoliciesAzureFrontDoor.yaml
@@ -0,0 +1,18 @@
+name: revcl-WebApplicationFirewallPoliciesAzureFrontDoor
+title: Take advantage of Web Application Firewall policies in Azure Front Door when
+ you're using Azure Front Door and Application Gateway to protect HTTP/S applications.
+ Lock down Application Gateway to receive traffic only from Azure Front Door.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: b039d95d-54c7-4c89-89cb-107d5325ae52
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/introduction-azure-web-application-firewall/?source=recommendations
+queries: {}
diff --git a/v2/recos/Practices/Security/revcl-ZeroTrustApproachAzurePlatform.yaml b/v2/recos/Practices/Security/revcl-ZeroTrustApproachAzurePlatform.yaml
new file mode 100644
index 000000000..b663fcc5d
--- /dev/null
+++ b/v2/recos/Practices/Security/revcl-ZeroTrustApproachAzurePlatform.yaml
@@ -0,0 +1,17 @@
+name: revcl-ZeroTrustApproachAzurePlatform
+title: Implement a zero-trust approach for access to the Azure platform, where appropriate.
+source:
+ type: revcl
+ file: ./checklists/alz_checklist.en.json
+resourceTypes: []
+waf: Security
+severity: 1
+labels:
+ guid: 01365d38-e43f-49cc-ad86-8266abca264f
+ area: Security
+ subarea: Access control
+ id: G01.02
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/security-zero-trust
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Cost/revcl-AzureLighthouseTenant.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Cost/revcl-AzureLighthouseTenant.yaml
new file mode 100644
index 000000000..122e0dcd8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Cost/revcl-AzureLighthouseTenant.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureLighthouseTenant
+title: Ensure that Azure Lighthouse is used for administering the tenant by partner
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Cost
+severity: 1
+labels:
+ guid: 5d82e6df-6f61-42f2-82e2-3132d293be3d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-LeverageAzureLighthouseMultiTenantManagement.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-LeverageAzureLighthouseMultiTenantManagement.yaml
new file mode 100644
index 000000000..7051506b1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-LeverageAzureLighthouseMultiTenantManagement.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAzureLighthouseMultiTenantManagement
+title: Leverage Azure Lighthouse for Multi-Tenant Management
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Operations
+severity: 2
+labels:
+ guid: 78e11934-499a-45ed-8ef7-aae5578f0ecf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-MicrosoftEntraIdTenantsMultiTenantAutomationApproach.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-MicrosoftEntraIdTenantsMultiTenantAutomationApproach.yaml
new file mode 100644
index 000000000..4eb601c75
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-MicrosoftEntraIdTenantsMultiTenantAutomationApproach.yaml
@@ -0,0 +1,16 @@
+name: revcl-MicrosoftEntraIdTenantsMultiTenantAutomationApproach
+title: Ensure you have a Multi-Tenant Automation approach to managing your Microsoft
+ Entra ID Tenants
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Operations
+severity: 2
+labels:
+ guid: 6309957b-821a-43d1-b9d9-7fcf1802b747
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-OneEntraTenantAzureResources.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-OneEntraTenantAzureResources.yaml
new file mode 100644
index 000000000..03557bfe4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Operations/revcl-OneEntraTenantAzureResources.yaml
@@ -0,0 +1,16 @@
+name: revcl-OneEntraTenantAzureResources
+title: Use one Entra tenant for managing your Azure resources, unless you have a clear
+ regulatory or business requirement for multi-tenants.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Operations
+severity: 1
+labels:
+ guid: 70c15989-c726-42c7-b0d3-24b7375b9201
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/considerations-recommendations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-AzureAdDomainServiceStampsAdditionalRegions.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-AzureAdDomainServiceStampsAdditionalRegions.yaml
new file mode 100644
index 000000000..4f8dbd33d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-AzureAdDomainServiceStampsAdditionalRegions.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureAdDomainServiceStampsAdditionalRegions
+title: Add Azure AD Domain service stamps to additional regions and locations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Reliability
+severity: 1
+labels:
+ guid: 6b4bfd3d-5035-447c-8447-ec66128a71f0
+links:
+- type: docs
+ url: https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-MicrosoftIdentityLibraryLiveRevocableToken.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-MicrosoftIdentityLibraryLiveRevocableToken.yaml
new file mode 100644
index 000000000..5eb16f20e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-MicrosoftIdentityLibraryLiveRevocableToken.yaml
@@ -0,0 +1,16 @@
+name: revcl-MicrosoftIdentityLibraryLiveRevocableToken
+title: Use long-live revocable token, cache your token and acquire your silently using
+ Microsoft Identity Library
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Reliability
+severity: 1
+labels:
+ guid: bb235c70-5e17-496f-bedf-a8a4c8cdec4c
+links:
+- type: docs
+ url: https://learn.microsoft.com/entra/identity-platform/msal-acquire-cache-tokens
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-ReplicaSetsDr.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-ReplicaSetsDr.yaml
new file mode 100644
index 000000000..0a72a9faf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Reliability/revcl-ReplicaSetsDr.yaml
@@ -0,0 +1,15 @@
+name: revcl-ReplicaSetsDr
+title: Use Replica Sets for DR
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Reliability
+severity: 1
+labels:
+ guid: f1ce16dd-3f1d-45e8-92e4-2e3611cc58b4
+links:
+- type: docs
+ url: https://learn.microsoft.com/entra/identity/domain-services/tutorial-perform-disaster-recovery-drill
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-ActiveDirectoryDomainSerivcesEntraDomainServices.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-ActiveDirectoryDomainSerivcesEntraDomainServices.yaml
new file mode 100644
index 000000000..247a4b033
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-ActiveDirectoryDomainSerivcesEntraDomainServices.yaml
@@ -0,0 +1,18 @@
+name: revcl-ActiveDirectoryDomainSerivcesEntraDomainServices
+title: If planning to switch from Active Directory Domain Serivces to Entra domain
+ services, evaluate the compatibility of all workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 8b9fe5c4-1049-4d40-9a92-3c3474d00018
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory-domain-services/overview
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-AuthenticationTypeSchoolAccount.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-AuthenticationTypeSchoolAccount.yaml
new file mode 100644
index 000000000..cd7568260
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-AuthenticationTypeSchoolAccount.yaml
@@ -0,0 +1,18 @@
+name: revcl-AuthenticationTypeSchoolAccount
+title: Only use the authentication type Work or school account for all account types.
+ Avoid using the Microsoft account
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 0
+labels:
+ guid: 12e7f983-f630-4472-8dd6-9c5b5c2622f5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/roles/security-planning#identify-microsoft-accounts-in-administrative-roles-that-need-to-be-switched-to-work-or-school-accounts
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-CloudOperatingModelRbacModel.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-CloudOperatingModelRbacModel.yaml
new file mode 100644
index 000000000..43ea3ddf7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-CloudOperatingModelRbacModel.yaml
@@ -0,0 +1,18 @@
+name: revcl-CloudOperatingModelRbacModel
+title: Enforce a RBAC model that aligns to your cloud operating model. Scope and Assign
+ across Management Groups and Subscriptions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 0
+labels:
+ guid: 348ef254-c27d-442e-abba-c7571559ab91
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/role-based-access-control/overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-GroupManagementSystemEntraId.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-GroupManagementSystemEntraId.yaml
new file mode 100644
index 000000000..609056812
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-GroupManagementSystemEntraId.yaml
@@ -0,0 +1,18 @@
+name: revcl-GroupManagementSystemEntraId
+title: Only use groups to assign permissions. Add on-premises groups to the Entra
+ ID only group if a group management system is already in place.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 4b69bad3-3aad-45e8-a68e-1d76667313b4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/manage-identity-and-access/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyAzureVirtualDesktop.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyAzureVirtualDesktop.yaml
new file mode 100644
index 000000000..099a865c4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyAzureVirtualDesktop.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftEntraIdApplicationProxyAzureVirtualDesktop
+title: If users only need access to internal applications, has Microsoft Entra ID
+ Application Proxy been considered as an alternative to Azure Virtual Desktop (AVD)?
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 2
+labels:
+ guid: 3b4b3e88-a459-4ed5-a22f-644dfbc58204
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyFirewallPorts.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyFirewallPorts.yaml
new file mode 100644
index 000000000..913e359c0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyFirewallPorts.yaml
@@ -0,0 +1,19 @@
+name: revcl-MicrosoftEntraIdApplicationProxyFirewallPorts
+title: To reduce the number of firewall ports open for incoming connections in your
+ network, consider using Microsoft Entra ID Application Proxy to give remote users
+ secure and authenticated access to internal applications.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 01ca7cf1-5754-442d-babb-8ba6772e5c30
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyRemoteUsers.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyRemoteUsers.yaml
new file mode 100644
index 000000000..9d4e8635b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdApplicationProxyRemoteUsers.yaml
@@ -0,0 +1,19 @@
+name: revcl-MicrosoftEntraIdApplicationProxyRemoteUsers
+title: Where required, use Microsoft Entra ID Application Proxy to give remote users
+ secure and authenticated access to internal applications (hosted in the cloud or
+ on-premises).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: d5d1e4e6-1465-48d3-958f-d77249b82111
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdConditionalAccessPoliciesAzureEnvironments.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdConditionalAccessPoliciesAzureEnvironments.yaml
new file mode 100644
index 000000000..cc7df7258
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdConditionalAccessPoliciesAzureEnvironments.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftEntraIdConditionalAccessPoliciesAzureEnvironments
+title: Enforce Microsoft Entra ID conditional-access policies for any user with rights
+ to Azure environments
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 2
+labels:
+ guid: 53e8908a-e28c-484c-93b6-b7808b9fe5c4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/conditional-access/overview
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdLogsCloudNativeOptions.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdLogsCloudNativeOptions.yaml
new file mode 100644
index 000000000..4a95997d1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdLogsCloudNativeOptions.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftEntraIdLogsCloudNativeOptions
+title: Integrate Microsoft Entra ID logs with the platform-central Azure Monitor.
+ Azure Monitor allows for a single source of truth around log and monitoring data
+ in Azure, giving organizations a cloud native options to meet requirements around
+ log collection and retention.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 1cf0b8da-70bd-44d0-94af-8d99cfc89ae1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/reports-monitoring/concept-activity-logs-azure-monitor
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdPrivilegedIdentityManagementZeroStandingAccess.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdPrivilegedIdentityManagementZeroStandingAccess.yaml
new file mode 100644
index 000000000..3d0015161
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdPrivilegedIdentityManagementZeroStandingAccess.yaml
@@ -0,0 +1,18 @@
+name: revcl-MicrosoftEntraIdPrivilegedIdentityManagementZeroStandingAccess
+title: Enforce Microsoft Entra ID Privileged Identity Management (PIM) to establish
+ zero standing access and least privilege
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 14658d35-58fd-4772-99b8-21112df27ee4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdReportingCapabilitiesAccessControlAuditReports.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdReportingCapabilitiesAccessControlAuditReports.yaml
new file mode 100644
index 000000000..f752dde29
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdReportingCapabilitiesAccessControlAuditReports.yaml
@@ -0,0 +1,16 @@
+name: revcl-MicrosoftEntraIdReportingCapabilitiesAccessControlAuditReports
+title: Use Microsoft Entra ID reporting capabilities to generate access control audit
+ reports.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 4e5695f2-223a-4ce8-ab12-308ca5017f15
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/reports-monitoring/overview-reports
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdRoleAssignmentsPremisesSyncedAccounts.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdRoleAssignmentsPremisesSyncedAccounts.yaml
new file mode 100644
index 000000000..9b2bf9cf5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MicrosoftEntraIdRoleAssignmentsPremisesSyncedAccounts.yaml
@@ -0,0 +1,17 @@
+name: revcl-MicrosoftEntraIdRoleAssignmentsPremisesSyncedAccounts
+title: Avoid using on-premises synced accounts for Microsoft Entra ID role assignments.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 35037e68-9349-4c15-b371-228514f4cdff
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/roles/best-practices
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-identity-security-strategy/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MultiFactorAuthenticationAzureEnvironments.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MultiFactorAuthenticationAzureEnvironments.yaml
new file mode 100644
index 000000000..beb2febd0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-MultiFactorAuthenticationAzureEnvironments.yaml
@@ -0,0 +1,17 @@
+name: revcl-MultiFactorAuthenticationAzureEnvironments
+title: Enforce multi-factor authentication for any user with rights to the Azure environments
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 0
+labels:
+ guid: 1049d403-a923-4c34-94d0-0018ac6a9e01
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/authentication/concept-mfa-howitworks
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-SovereignLandingZoneEntraIdTenant-1.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-SovereignLandingZoneEntraIdTenant-1.yaml
new file mode 100644
index 000000000..4e06bd625
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-SovereignLandingZoneEntraIdTenant-1.yaml
@@ -0,0 +1,15 @@
+name: revcl-SovereignLandingZoneEntraIdTenant-1
+title: For Sovereign Landing Zone, customer Lockbox is enabled on the Entra ID tenant.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: d21a922d-5ca7-427a-82a6-35f7b21f1bfc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/security/fundamentals/customer-lockbox-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-SovereignLandingZoneEntraIdTenant.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-SovereignLandingZoneEntraIdTenant.yaml
new file mode 100644
index 000000000..5f3c722bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-SovereignLandingZoneEntraIdTenant.yaml
@@ -0,0 +1,15 @@
+name: revcl-SovereignLandingZoneEntraIdTenant
+title: For Sovereign Landing Zone, transparancy logs is enabled on the Entra ID tenant.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 1
+labels:
+ guid: 1761e147-f65e-4d09-bbc2-f464f23e2eba
+links:
+- type: docs
+ url: https://learn.microsoft.com/industry/sovereignty/transparency-logs
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-TenantWideAccountLockoutEmergencyAccess.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-TenantWideAccountLockoutEmergencyAccess.yaml
new file mode 100644
index 000000000..1404eedf8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/Security/revcl-TenantWideAccountLockoutEmergencyAccess.yaml
@@ -0,0 +1,18 @@
+name: revcl-TenantWideAccountLockoutEmergencyAccess
+title: Implement an emergency access or break-glass accounts to prevent tenant-wide
+ account lockout
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.aad/domainservices
+waf: Security
+severity: 0
+labels:
+ guid: 984a859c-773e-47d2-9162-3a765a917e1f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/roles/security-emergency-access
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/aprl-EnterpriseSkuManagedDomain.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/aprl-EnterpriseSkuManagedDomain.yaml
new file mode 100644
index 000000000..e9882f7e0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/aprl-EnterpriseSkuManagedDomain.yaml
@@ -0,0 +1,24 @@
+name: aprl-EnterpriseSkuManagedDomain
+title: Use at least the Enterprise SKU
+description: |-
+ You need to use a minimum of Enterprise SKU for your managed domain to support replica sets.
+source:
+ type: aprl
+ file: azure-resources/AAD/domainServices/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AAD/domainServices
+severity: 0
+labels:
+ guid: bb6deb9d-24fa-4ee8-bc23-ac3ebc7fdf8e
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Gets Entry Domain Services that are using the Standard SKU
+ resources
+ | where type == "microsoft.aad/domainservices"
+ | extend sku = properties.sku
+ | where sku =~ 'Standard'
+ | project recommendationId='bb6deb9d-24fa-4ee8-bc23-ac3ebc7fdf8e', name=name, id=id, tags=tags, param1=strcat('SKU:', sku)
diff --git a/v2/recos/Services/MicrosoftAAD-domainServices/aprl-MicrosoftEntraDomainServicesAdditionalGeographicLocations.yaml b/v2/recos/Services/MicrosoftAAD-domainServices/aprl-MicrosoftEntraDomainServicesAdditionalGeographicLocations.yaml
new file mode 100644
index 000000000..bec7a92ab
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAAD-domainServices/aprl-MicrosoftEntraDomainServicesAdditionalGeographicLocations.yaml
@@ -0,0 +1,25 @@
+name: aprl-MicrosoftEntraDomainServicesAdditionalGeographicLocations
+title: Use replica sets for resiliency or geolocation in Microsoft Entra Domain Services
+description: |-
+ To improve the resiliency of a Microsoft Entra Domain Services managed domain, or deploy to additional geographic locations close to your applications, you can use replica sets.
+ You can add a replica set to any peered virtual network in any Azure region that supports Domain Services.
+source:
+ type: aprl
+ file: azure-resources/AAD/domainServices/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AAD/domainServices
+severity: 0
+labels:
+ guid: a3058909-fcf8-4450-88b5-499f57449178
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Gets Entry Domain Services that are using only one replicaSet
+ resources
+ | where type == "microsoft.aad/domainservices"
+ | extend replicaSets = properties.replicaSets
+ | where array_length(replicaSets) < 2
+ | project recommendationId='a3058909-fcf8-4450-88b5-499f57449178', name=name, id=id, tags=tags, param1=strcat('replicaSetLocation:', replicaSets[0].location)
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Cost/revcl-AzureVmwareSolutionInstances.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Cost/revcl-AzureVmwareSolutionInstances.yaml
new file mode 100644
index 000000000..ae08aae29
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Cost/revcl-AzureVmwareSolutionInstances.yaml
@@ -0,0 +1,13 @@
+name: revcl-AzureVmwareSolutionInstances
+title: Are Azure reserved instances used to optimize cost for using Azure VMware Solution
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Cost
+severity: 2
+labels:
+ guid: 6e043e2a-a359-4271-ae6e-205172676ae4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Cost/revcl-GoodCostManagementProcessAzureCostManagement.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Cost/revcl-GoodCostManagementProcessAzureCostManagement.yaml
new file mode 100644
index 000000000..e997bc36c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Cost/revcl-GoodCostManagementProcessAzureCostManagement.yaml
@@ -0,0 +1,14 @@
+name: revcl-GoodCostManagementProcessAzureCostManagement
+title: Ensure a good cost management process is in place for Azure VMware Solution
+ - Azure Cost Management can be used
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Cost
+severity: 1
+labels:
+ guid: 4ba34d45-85e1-4213-abd7-bb012f7b95ef
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AutomatedDeploymentsReserve.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AutomatedDeploymentsReserve.yaml
new file mode 100644
index 000000000..2e33d375c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AutomatedDeploymentsReserve.yaml
@@ -0,0 +1,14 @@
+name: revcl-AutomatedDeploymentsReserve
+title: For automated deployments, request or reserve quota prior to starting the
+ deployment
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: e6bfbb9e-d503-4547-ac44-7e826128a71f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AutomatedScalingOperationsAppropriateAutomatedResponses.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AutomatedScalingOperationsAppropriateAutomatedResponses.yaml
new file mode 100644
index 000000000..f9bf31ab1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AutomatedScalingOperationsAppropriateAutomatedResponses.yaml
@@ -0,0 +1,14 @@
+name: revcl-AutomatedScalingOperationsAppropriateAutomatedResponses
+title: Implement monitoring rules to monitor automated scaling operations and monitor
+ success and failure to enable appropriate (automated) responses
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 1dc15a1c-075e-4e9f-841a-cccd579376bc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureServiceHealthAlertsNotifications.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureServiceHealthAlertsNotifications.yaml
new file mode 100644
index 000000000..bb28dbb21
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureServiceHealthAlertsNotifications.yaml
@@ -0,0 +1,13 @@
+name: revcl-AzureServiceHealthAlertsNotifications
+title: Ensure alerts are configured for Azure Service Health alerts and notifications
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: 64b0d934-a348-4726-be79-d6b5c3a36495
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureArc-1.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureArc-1.yaml
new file mode 100644
index 000000000..6eb9a133a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureArc-1.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionAzureArc-1
+title: Ensure workloads running on Azure VMware Solution are hybrid managed using
+ Azure Arc for Servers (Arc for Azure VMware Solution is in preview)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 2aee3453-aec8-4339-848b-262d6cc5f512
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureLogAnalytics.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureLogAnalytics.yaml
new file mode 100644
index 000000000..81f3406f5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureLogAnalytics.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionAzureLogAnalytics
+title: Ensure workloads running on Azure VMware Solution are monitored using Azure
+ Log Analytics and Azure Monitor
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 925398e6-da9d-437d-ac43-bc6cd1d79a9b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureStorageAccount.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureStorageAccount.yaml
new file mode 100644
index 000000000..41463cd2d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionAzureStorageAccount.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionAzureStorageAccount
+title: Configure Azure VMware Solution logging to be send to an Azure Storage account
+ or Azure EventHub for processing
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: b6abad38-aad5-43cc-99e1-d86667357c54
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionGuestVmWorkloadsLogAnalyticsAgents.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionGuestVmWorkloadsLogAnalyticsAgents.yaml
new file mode 100644
index 000000000..1206063ff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionGuestVmWorkloadsLogAnalyticsAgents.yaml
@@ -0,0 +1,13 @@
+name: revcl-AzureVmwareSolutionGuestVmWorkloadsLogAnalyticsAgents
+title: Deploy the Log Analytics Agents to Azure VMware Solution guest VM workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 4ed90dae-2cc8-44c4-9b6b-781cbafe6c46
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionMetricLogging.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionMetricLogging.yaml
new file mode 100644
index 000000000..cc9daf1ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionMetricLogging.yaml
@@ -0,0 +1,13 @@
+name: revcl-AzureVmwareSolutionMetricLogging
+title: Enable Diagnostic and metric logging on Azure VMware Solution
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: 88f03a4d-2cd4-463c-abbc-868295abc91a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionPerformanceWarningAlerts.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionPerformanceWarningAlerts.yaml
new file mode 100644
index 000000000..12565e876
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionPerformanceWarningAlerts.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionPerformanceWarningAlerts
+title: Create warning alerts for critical thresholds for automatic alerting on Azure
+ VMware Solution performance (CPU >80%, Avg Memory >80%, vSAN >70%)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: 6b84ee5d-f47d-42d9-8881-b1cd5d1e54a2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionPrivateCloudManualDeployments.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionPrivateCloudManualDeployments.yaml
new file mode 100644
index 000000000..8c0e587cb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionPrivateCloudManualDeployments.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionPrivateCloudManualDeployments
+title: For manual deployments, consider implementing resource locks to prevent accidental
+ actions on your Azure VMware Solution Private Cloud
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: 7e7a8d90-ae0e-437c-be29-711bd352caaa
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionResourceDependencies.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionResourceDependencies.yaml
new file mode 100644
index 000000000..290a791e1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionResourceDependencies.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureVmwareSolutionResourceDependencies
+title: Define resource dependencies for serializing actions in IaC when many resources
+ need to be deployed in/on Azure VMware Solution as Azure VMware Solution only supports
+ a limited number of parallel operations.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: cc5f5129-2539-48e6-bb9d-37dac43bc6cd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVirtualMachineAzureNativeResource.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVirtualMachineAzureNativeResource.yaml
new file mode 100644
index 000000000..77cd336ae
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVirtualMachineAzureNativeResource.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureVmwareSolutionVirtualMachineAzureNativeResource
+title: Ensure a connection monitor is created from an Azure native resource to an
+ Azure VMware Solution virtual machine to monitor the Azure VMware Solution back-end
+ ExpressRoute connection
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 976e24f2-a7f8-426c-9253-2a92a2a7ed99
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVirtualMachineConnectionMonitor.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVirtualMachineConnectionMonitor.yaml
new file mode 100644
index 000000000..596d49525
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVirtualMachineConnectionMonitor.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionVirtualMachineConnectionMonitor
+title: Ensure a connection monitor is created from an on-premises resource to an Azure
+ VMware Solution virtual machine to monitor end-2-end connectivity
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: f41ce6a0-64f3-4805-bc65-3ab50df01265
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVmWorkloadsBackupPolicy.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVmWorkloadsBackupPolicy.yaml
new file mode 100644
index 000000000..15737f29d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionVmWorkloadsBackupPolicy.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionVmWorkloadsBackupPolicy
+title: Ensure you have a documented and implemented backup policy and solution for
+ Azure VMware Solution VM workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 589d457a-927c-4397-9d11-02cad6aae11e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionWorkloadsAzurePolicy.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionWorkloadsAzurePolicy.yaml
new file mode 100644
index 000000000..de32be9d6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-AzureVmwareSolutionWorkloadsAzurePolicy.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionWorkloadsAzurePolicy
+title: Use Azure Policy to onboard Azure VMware Solution workloads in the Azure Management,
+ Monitoring and Security solutions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 17e7a8d9-0ae0-4e27-aee2-9711bd352caa
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-CoreAzureVmwareSolutionMonitoringInsightsDashboards.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-CoreAzureVmwareSolutionMonitoringInsightsDashboards.yaml
new file mode 100644
index 000000000..30199dddd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-CoreAzureVmwareSolutionMonitoringInsightsDashboards.yaml
@@ -0,0 +1,13 @@
+name: revcl-CoreAzureVmwareSolutionMonitoringInsightsDashboards
+title: Create dashboards to enable core Azure VMware Solution monitoring insights
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: e43a18a9-cd28-49ce-b6b1-7db8255461e2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-CriticalAlertVsanConsumption.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-CriticalAlertVsanConsumption.yaml
new file mode 100644
index 000000000..6a2a0bdaf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-CriticalAlertVsanConsumption.yaml
@@ -0,0 +1,14 @@
+name: revcl-CriticalAlertVsanConsumption
+title: Ensure critical alert is created to monitor if vSAN consumption is below 75%
+ as this is a support threshold from VMware
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: 9659e396-80e7-4828-ac93-5657d02bff45
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-DiskPoolBackedDatastoreDataRepositories.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-DiskPoolBackedDatastoreDataRepositories.yaml
new file mode 100644
index 000000000..80cdbbca4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-DiskPoolBackedDatastoreDataRepositories.yaml
@@ -0,0 +1,14 @@
+name: revcl-DiskPoolBackedDatastoreDataRepositories
+title: Ensure data repositories for the backup solution are stored outside of vSAN
+ storage. Either in Azure native or on a disk pool-backed datastore
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 0e43a18a-9cd2-489b-bd6b-17db8255461e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-EsxiHostDensityLeadTime.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-EsxiHostDensityLeadTime.yaml
new file mode 100644
index 000000000..27f49134e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-EsxiHostDensityLeadTime.yaml
@@ -0,0 +1,14 @@
+name: revcl-EsxiHostDensityLeadTime
+title: Ensure that you have a policy around ESXi host density and efficiency, keeping
+ in mind the lead time for requesting new nodes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: bf39d95d-44c7-4c89-89ca-1f6d5315ae52
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-ExistingUpdateManagementToolingAzureUpdateManagement.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-ExistingUpdateManagementToolingAzureUpdateManagement.yaml
new file mode 100644
index 000000000..f6135f58b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-ExistingUpdateManagementToolingAzureUpdateManagement.yaml
@@ -0,0 +1,14 @@
+name: revcl-ExistingUpdateManagementToolingAzureUpdateManagement
+title: Include workloads running on Azure VMware Solution in existing update management
+ tooling or in Azure Update Management
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 24604489-a8f4-42d7-ae78-cb6a33bd2a09
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-HumanUnderstandableNamesExrAuthorizationKeys.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-HumanUnderstandableNamesExrAuthorizationKeys.yaml
new file mode 100644
index 000000000..3b9b20270
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-HumanUnderstandableNamesExrAuthorizationKeys.yaml
@@ -0,0 +1,14 @@
+name: revcl-HumanUnderstandableNamesExrAuthorizationKeys
+title: Implement human understandable names for ExR authorization keys to allow for
+ easy identification of the keys purpose/use
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: e2cc95d4-8c6b-4791-bca0-f6c56589e558
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-ManualDeploymentsConfiguration.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-ManualDeploymentsConfiguration.yaml
new file mode 100644
index 000000000..6238c5786
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-ManualDeploymentsConfiguration.yaml
@@ -0,0 +1,13 @@
+name: revcl-ManualDeploymentsConfiguration
+title: For manual deployments, all configuration and deployments must be documented
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: 4604489a-8f42-4d78-b78c-b7a33bd2a0a1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-MinimalPrivateCloudAutomatedDeployments.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-MinimalPrivateCloudAutomatedDeployments.yaml
new file mode 100644
index 000000000..07fb4b027
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-MinimalPrivateCloudAutomatedDeployments.yaml
@@ -0,0 +1,13 @@
+name: revcl-MinimalPrivateCloudAutomatedDeployments
+title: For automated deployments, deploy a minimal private cloud and scale as needed
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: b79b198d-ab81-4932-a9fc-9d1bb78036f5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RdPartySolutionsAccessConstraints.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RdPartySolutionsAccessConstraints.yaml
new file mode 100644
index 000000000..b9bbb5ee0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RdPartySolutionsAccessConstraints.yaml
@@ -0,0 +1,14 @@
+name: revcl-RdPartySolutionsAccessConstraints
+title: Ensure that access constraints to ESXi are understood, there are access limits
+ which might affect 3rd party solutions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: 5d38e53f-9ccb-4d86-a266-acca274faa19
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RelevantResourceLocksAutomatedDeployment.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RelevantResourceLocksAutomatedDeployment.yaml
new file mode 100644
index 000000000..13f04e9d0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RelevantResourceLocksAutomatedDeployment.yaml
@@ -0,0 +1,14 @@
+name: revcl-RelevantResourceLocksAutomatedDeployment
+title: For automated deployment, ensure that relevant resource locks are created through
+ the automation or through Azure Policy for proper governance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: 0f1cac6d-9ef1-4d5e-a32e-42e3611c818b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RouteServerExrGateway.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RouteServerExrGateway.yaml
new file mode 100644
index 000000000..b25ddbc1d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-RouteServerExrGateway.yaml
@@ -0,0 +1,14 @@
+name: revcl-RouteServerExrGateway
+title: When route server is used, ensure no more then 1000 routes are propagated from
+ route server to ExR gateway to on-premises (ARS limit).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: 563b4dc7-4a74-48b6-933a-d1a0916a6649
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-SeparateServicePrinciplesAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-SeparateServicePrinciplesAzureVmwareSolution.yaml
new file mode 100644
index 000000000..6ee259bae
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-SeparateServicePrinciplesAzureVmwareSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-SeparateServicePrinciplesAzureVmwareSolution
+title: Use Key vault to store secrets and authorization keys when separate Service
+ Principles are used for deploying Azure VMware Solution and ExpressRoute
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: 255461e2-aee3-4553-afc8-339248b262d6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-SingleTierGatewayAzurePortalApis.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-SingleTierGatewayAzurePortalApis.yaml
new file mode 100644
index 000000000..66ef9e2d7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-SingleTierGatewayAzurePortalApis.yaml
@@ -0,0 +1,14 @@
+name: revcl-SingleTierGatewayAzurePortalApis
+title: When performing automated configuration of NSX-T segments with a single Tier-1
+ gateway, use Azure Portal APIs instead of NSX-Manager APIs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: 1d79a9b2-4604-4489-a8f4-2d78e78cb7a3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VpnConnectionsConnectionMonitor.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VpnConnectionsConnectionMonitor.yaml
new file mode 100644
index 000000000..5d39b5f68
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VpnConnectionsConnectionMonitor.yaml
@@ -0,0 +1,14 @@
+name: revcl-VpnConnectionsConnectionMonitor
+title: Ensure ExpressRoute or VPN connections from on-premises to Azure are monitored
+ using 'connection monitor'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: eb710a37-cbc1-4055-8dd5-a936a8bb7cf5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VrealizeNetworkInsightsVrealizeOperations.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VrealizeNetworkInsightsVrealizeOperations.yaml
new file mode 100644
index 000000000..9d74dcafc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VrealizeNetworkInsightsVrealizeOperations.yaml
@@ -0,0 +1,14 @@
+name: revcl-VrealizeNetworkInsightsVrealizeOperations
+title: 'If deep insight in VMware vSphere is required: Is vRealize Operations and/or
+ vRealize Network Insights used in the solution?'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 2
+labels:
+ guid: 9674c5ed-85b8-459c-9733-be2b1a27b775
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VsanStoragePolicyDefaultStoragePolicy.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VsanStoragePolicyDefaultStoragePolicy.yaml
new file mode 100644
index 000000000..b9f20abf8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VsanStoragePolicyDefaultStoragePolicy.yaml
@@ -0,0 +1,14 @@
+name: revcl-VsanStoragePolicyDefaultStoragePolicy
+title: Ensure the vSAN storage policy for VM's is NOT the default storage policy as
+ this policy applies thick provisioning
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 0
+labels:
+ guid: a91be1f3-88f0-43a4-b2cd-463cbbbc8682
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VsphereContentLibrariesFiniteResource.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VsphereContentLibrariesFiniteResource.yaml
new file mode 100644
index 000000000..d5b9d46fc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Operations/revcl-VsphereContentLibrariesFiniteResource.yaml
@@ -0,0 +1,14 @@
+name: revcl-VsphereContentLibrariesFiniteResource
+title: Ensure vSphere content libraries are not placed on vSAN as vSAN is a finite
+ resource
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Operations
+severity: 1
+labels:
+ guid: d9ef1d5e-832d-442e-9611-c818b0afbc51
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-CorrectAzureVmwareSolutionConnectivityModelCustomerUseCase.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-CorrectAzureVmwareSolutionConnectivityModelCustomerUseCase.yaml
new file mode 100644
index 000000000..9a6e76811
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-CorrectAzureVmwareSolutionConnectivityModelCustomerUseCase.yaml
@@ -0,0 +1,16 @@
+name: revcl-CorrectAzureVmwareSolutionConnectivityModelCustomerUseCase
+title: Is the correct Azure VMware Solution connectivity model selected for the customer
+ use case at hand
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 0
+labels:
+ guid: 9ef1d5e8-32e4-42e3-911c-818b0a0bc510
+links:
+- type: docs
+ url: https://github.com/Azure/AzureCAT-AVS/tree/main/networking
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-HcxWanOptimizationApplianceLowConnectivityRegions.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-HcxWanOptimizationApplianceLowConnectivityRegions.yaml
new file mode 100644
index 000000000..a789abd0c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-HcxWanOptimizationApplianceLowConnectivityRegions.yaml
@@ -0,0 +1,14 @@
+name: revcl-HcxWanOptimizationApplianceLowConnectivityRegions
+title: For low connectivity regions connecting into Azure (500Mbps or less), considering
+ deploying the HCX WAN optimization appliance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: e614658d-d457-4e92-9139-b821102cad6e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-MaximumLimitsScale.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-MaximumLimitsScale.yaml
new file mode 100644
index 000000000..0e46d8794
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-MaximumLimitsScale.yaml
@@ -0,0 +1,14 @@
+name: revcl-MaximumLimitsScale
+title: Define and enforce scale in/out maximum limits for your environment in the
+ automations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: d20b56c5-7be5-4851-a0f8-3835c586cb29
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-OneScaleOperationScalingOperations.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-OneScaleOperationScalingOperations.yaml
new file mode 100644
index 000000000..043140ce5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-OneScaleOperationScalingOperations.yaml
@@ -0,0 +1,15 @@
+name: revcl-OneScaleOperationScalingOperations
+title: Scaling operations always need to be serialized within a single SDDC as only
+ one scale operation can be performed at a time (even when multiple clusters are
+ used)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: b78036f5-e6bf-4bb9-bd50-3547cc447e82
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-RdPartySolutionsOperations.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-RdPartySolutionsOperations.yaml
new file mode 100644
index 000000000..f7e07123d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-RdPartySolutionsOperations.yaml
@@ -0,0 +1,14 @@
+name: revcl-RdPartySolutionsOperations
+title: Consider and validate scaling operations on 3rd party solutions used in the
+ architecture (supported or not)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: bf15bce2-19e4-4a0e-a588-79424d226786
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-SameAzureAvailabilityZoneRequiredResource.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-SameAzureAvailabilityZoneRequiredResource.yaml
new file mode 100644
index 000000000..74af0cc30
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-SameAzureAvailabilityZoneRequiredResource.yaml
@@ -0,0 +1,13 @@
+name: revcl-SameAzureAvailabilityZoneRequiredResource
+title: Ensure all required resource reside within the same Azure availability zone(s)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 0
+labels:
+ guid: db611712-6904-40b4-aa3d-3e0803276d4b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-StoragePolicyRequirementsAutomated.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-StoragePolicyRequirementsAutomated.yaml
new file mode 100644
index 000000000..7ad48d8f2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-StoragePolicyRequirementsAutomated.yaml
@@ -0,0 +1,14 @@
+name: revcl-StoragePolicyRequirementsAutomated
+title: When intending to use automated scale-in, be sure to take storage policy requirements
+ into account before performing such action
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: d352caaa-b79b-4198-bab8-1932c9fc9d1b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-SufficientAzureVmwareSolutionQuotaAutomatedScaleOut.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-SufficientAzureVmwareSolutionQuotaAutomatedScaleOut.yaml
new file mode 100644
index 000000000..93c392178
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-SufficientAzureVmwareSolutionQuotaAutomatedScaleOut.yaml
@@ -0,0 +1,14 @@
+name: revcl-SufficientAzureVmwareSolutionQuotaAutomatedScaleOut
+title: When intending to use automated scale-out, be sure to apply for sufficient
+ Azure VMware Solution quota for the subscriptions running Azure VMware Solution
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: 3bd2a0a1-7e7a-48d9-8ae0-e37cee29711b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-VpnConnectionMtuSize.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-VpnConnectionMtuSize.yaml
new file mode 100644
index 000000000..969c320e2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Performance/revcl-VpnConnectionMtuSize.yaml
@@ -0,0 +1,13 @@
+name: revcl-VpnConnectionMtuSize
+title: If using a VPN connection for migrations, adjust your MTU size accordingly.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Performance
+severity: 1
+labels:
+ guid: bc91a43d-90da-4e2c-a881-4706f7c1cbaf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AppropriateVsanDataRedundancyMethodRaidSpecification.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AppropriateVsanDataRedundancyMethodRaidSpecification.yaml
new file mode 100644
index 000000000..d05511559
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AppropriateVsanDataRedundancyMethodRaidSpecification.yaml
@@ -0,0 +1,13 @@
+name: revcl-AppropriateVsanDataRedundancyMethodRaidSpecification
+title: Ensure that the appropriate vSAN Data redundancy method is used (RAID specification)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: 3ef7ad7c-6d37-4331-95c7-acbe44bbe609
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AutomatedRecoveryPlansDisasterSolutions.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AutomatedRecoveryPlansDisasterSolutions.yaml
new file mode 100644
index 000000000..f63815617
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AutomatedRecoveryPlansDisasterSolutions.yaml
@@ -0,0 +1,14 @@
+name: revcl-AutomatedRecoveryPlansDisasterSolutions
+title: Use Automated recovery plans with either of the Disaster solutions, avoid manual
+ tasks as much as possible
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: b0afbc51-0e43-4a18-a9cd-289bed6b17db
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureNetappFilesAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureNetappFilesAzureVmwareSolution.yaml
new file mode 100644
index 000000000..58ddce355
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureNetappFilesAzureVmwareSolution.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureNetappFilesAzureVmwareSolution
+title: When Azure Netapp Files is used to extend storage for Azure VMware Solution,consider
+ using this as a VMware datastore instead of attaching directly to a VM.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: e54a29a9-de39-4ac0-b7c2-8dc935657202
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureVmwareSolutionPrivateCloudBackupSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureVmwareSolutionPrivateCloudBackupSolution.yaml
new file mode 100644
index 000000000..f16402b40
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureVmwareSolutionPrivateCloudBackupSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionPrivateCloudBackupSolution
+title: Deploy your backup solution in the same region as your Azure VMware Solution
+ private cloud
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: bd352caa-ab79-4b18-adab-81932c9fc9d1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureVmwareSolutionPrivateCloudsExpressrouteGlobalReach.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureVmwareSolutionPrivateCloudsExpressrouteGlobalReach.yaml
new file mode 100644
index 000000000..e9ccdbdbd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-AzureVmwareSolutionPrivateCloudsExpressrouteGlobalReach.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureVmwareSolutionPrivateCloudsExpressrouteGlobalReach
+title: Will ExpressRoute Global Reach be used for connectivity between the primary
+ and secondary Azure VMware Solution Private Clouds or is routing done through network
+ virtual appliances?
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: d1d79a9b-2460-4448-aa8f-42d78e78cb6a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-BackupSolutionNativeComponents.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-BackupSolutionNativeComponents.yaml
new file mode 100644
index 000000000..c9f678fc6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-BackupSolutionNativeComponents.yaml
@@ -0,0 +1,13 @@
+name: revcl-BackupSolutionNativeComponents
+title: Deploy your backup solution outside of vSan, on Azure native components
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: bb77036f-5e6b-4fbb-aed5-03547cc447e8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-BackupSolutionsBusiness.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-BackupSolutionsBusiness.yaml
new file mode 100644
index 000000000..0aef8bcec
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-BackupSolutionsBusiness.yaml
@@ -0,0 +1,15 @@
+name: revcl-BackupSolutionsBusiness
+title: "Have all Backup solutions been considered and a solution that is best for\
+ \ your business been decided upon? [ MABS/CommVault/Metallic.io/Veeam/\xEF\xBF\xBD\
+ . ]"
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: 33bd2a09-17e7-4a8d-a0ae-0e27cee29711
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DifferentAddressSpacesDifferentRegions.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DifferentAddressSpacesDifferentRegions.yaml
new file mode 100644
index 000000000..0d8da2feb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DifferentAddressSpacesDifferentRegions.yaml
@@ -0,0 +1,14 @@
+name: revcl-DifferentAddressSpacesDifferentRegions
+title: 'Use 2 different address spaces between the regions, for example: 10.0.0.0/16
+ and 192.168.0.0/16 for the different regions'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: 6cc5f512-9253-498e-9da9-d37dac43bc6c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoveryRequirementEnoughQuota.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoveryRequirementEnoughQuota.yaml
new file mode 100644
index 000000000..598c1880e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoveryRequirementEnoughQuota.yaml
@@ -0,0 +1,14 @@
+name: revcl-DisasterRecoveryRequirementEnoughQuota
+title: Ensure that you have requested enough quota, ensuring you have considered growth
+ and Disaster Recovery requirement
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: d89f2e87-7784-424d-9167-85c6fa95b96a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoverySolutionStretchedCluster.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoverySolutionStretchedCluster.yaml
new file mode 100644
index 000000000..37fa791b9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoverySolutionStretchedCluster.yaml
@@ -0,0 +1,16 @@
+name: revcl-DisasterRecoverySolutionStretchedCluster
+title: If using stretched cluster, ensure that your selected Disaster Recovery solution
+ is supported by the vendor
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: 571549ab-8153-4d89-b89d-c7b33be2b1a2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoveryTechnologyAzureSiteRecovery.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoveryTechnologyAzureSiteRecovery.yaml
new file mode 100644
index 000000000..3fc94e521
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DisasterRecoveryTechnologyAzureSiteRecovery.yaml
@@ -0,0 +1,14 @@
+name: revcl-DisasterRecoveryTechnologyAzureSiteRecovery
+title: Use Azure Site Recovery when the Disaster Recovery technology is native Azure
+ IaaS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: f0f1cac6-d9ef-41d5-b832-d42e3611c818
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DrSolutionsBusiness.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DrSolutionsBusiness.yaml
new file mode 100644
index 000000000..fdf7232b4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-DrSolutionsBusiness.yaml
@@ -0,0 +1,14 @@
+name: revcl-DrSolutionsBusiness
+title: Have all DR solutions been considered and a solution that is best for your
+ business been decided upon? [SRM/JetStream/Zerto/Veeam/...]
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: 5e6bfbb9-ed50-4354-9cc4-47e826028a71
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-ExternalDataStorageSolutionsDedicatedExpressrouteGateway.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-ExternalDataStorageSolutionsDedicatedExpressrouteGateway.yaml
new file mode 100644
index 000000000..ea605bed8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-ExternalDataStorageSolutionsDedicatedExpressrouteGateway.yaml
@@ -0,0 +1,16 @@
+name: revcl-ExternalDataStorageSolutionsDedicatedExpressrouteGateway
+title: Ensure that a dedicated ExpressRoute Gateway is being used for external data
+ storage solutions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: bff4564b-0d93-44a3-98b2-63e7dd60513a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-ExternalDataStorageSolutionsExpressrouteGateway.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-ExternalDataStorageSolutionsExpressrouteGateway.yaml
new file mode 100644
index 000000000..71de12b6c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-ExternalDataStorageSolutionsExpressrouteGateway.yaml
@@ -0,0 +1,16 @@
+name: revcl-ExternalDataStorageSolutionsExpressrouteGateway
+title: Ensure that FastPath is enabled on the ExpressRoute Gateway that is being used
+ for external data storage solutions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: 3649906e-bad3-48ea-b53c-c7de1d8aaab3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-FiniteResourceBackups.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-FiniteResourceBackups.yaml
new file mode 100644
index 000000000..5bd3d61f4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-FiniteResourceBackups.yaml
@@ -0,0 +1,13 @@
+name: revcl-FiniteResourceBackups
+title: Ensure backups are not stored on vSAN as vSAN is a finite resource
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: 25398e6d-b9d3-47da-a43b-c6cd1d79a9b2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-LargerApplianceMonLimit.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-LargerApplianceMonLimit.yaml
new file mode 100644
index 000000000..fb5244079
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-LargerApplianceMonLimit.yaml
@@ -0,0 +1,18 @@
+name: revcl-LargerApplianceMonLimit
+title: When using MON, be aware of the limits of simulataneously configured VMs (MON
+ Limit for HCX [400 - standard, 1000 - Larger appliance])
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: c5972cd4-cd21-4b07-9036-f5e6b4bfd3d5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/configure-azure-ad-application-proxy/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-NetworkExtensionsMon.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-NetworkExtensionsMon.yaml
new file mode 100644
index 000000000..6425a3cce
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-NetworkExtensionsMon.yaml
@@ -0,0 +1,17 @@
+name: revcl-NetworkExtensionsMon
+title: When using MON, you cannot enable MON on more than 100 Network extensions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: be1f38cf-03a8-422b-b463-cbbbc8ac299e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy#how-application-proxy-works
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-applications-external-access-azure-ad/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-PremisesApplianceCloudAppliance.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-PremisesApplianceCloudAppliance.yaml
new file mode 100644
index 000000000..4130eff53
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-PremisesApplianceCloudAppliance.yaml
@@ -0,0 +1,14 @@
+name: revcl-PremisesApplianceCloudAppliance
+title: Ensure that migrations are started from the on-premises appliance and NOT from
+ the Cloud appliance (do NOT perform a reverse migration)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: ae01e6e8-43e5-42f4-922d-928c1b1cd521
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-SecondaryDisasterRecoveryEnvironmentGeopoliticalRegionPair.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-SecondaryDisasterRecoveryEnvironmentGeopoliticalRegionPair.yaml
new file mode 100644
index 000000000..8e7c0413f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-SecondaryDisasterRecoveryEnvironmentGeopoliticalRegionPair.yaml
@@ -0,0 +1,13 @@
+name: revcl-SecondaryDisasterRecoveryEnvironmentGeopoliticalRegionPair
+title: Use the geopolitical region pair as the secondary disaster recovery environment
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 1
+labels:
+ guid: 8255461e-2aee-4345-9aec-8339248b262d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-SiteDisasterToleranceSettingsBusiness.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-SiteDisasterToleranceSettingsBusiness.yaml
new file mode 100644
index 000000000..b5da576b2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-SiteDisasterToleranceSettingsBusiness.yaml
@@ -0,0 +1,16 @@
+name: revcl-SiteDisasterToleranceSettingsBusiness
+title: Have site disaster tolerance settings been properly considered and changed
+ for your business if needed.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: dce9793b-7bcd-4b3b-91eb-2ec14eea6e59
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterExpressrouteCircuits-1.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterExpressrouteCircuits-1.yaml
new file mode 100644
index 000000000..526c51d7c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterExpressrouteCircuits-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-StretchedClusterExpressrouteCircuits-1
+title: If using stretched cluster, ensure that both ExpressRoute circuits have GlobalReach
+ enabled.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: c49d987c-b3d1-4325-aa12-4b6e4d0685ed
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterExpressrouteCircuits.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterExpressrouteCircuits.yaml
new file mode 100644
index 000000000..0b9ff8651
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterExpressrouteCircuits.yaml
@@ -0,0 +1,16 @@
+name: revcl-StretchedClusterExpressrouteCircuits
+title: If using stretched cluster, ensure that both ExpressRoute circuits are connected
+ to your connectivity hub.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: 9579d66b-896d-471f-a6ca-7be9955d04c3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterSla.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterSla.yaml
new file mode 100644
index 000000000..1121eaeaf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-StretchedClusterSla.yaml
@@ -0,0 +1,15 @@
+name: revcl-StretchedClusterSla
+title: If using stretched cluster, ensure that the SLA provided will meet your requirements
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: 4c486b6d-8bdc-4059-acf7-5ee8a1309888
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-VmwareComponentsAzurePlatform.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-VmwareComponentsAzurePlatform.yaml
new file mode 100644
index 000000000..7b98248fa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-VmwareComponentsAzurePlatform.yaml
@@ -0,0 +1,14 @@
+name: revcl-VmwareComponentsAzurePlatform
+title: Is a process in place to request a restore of the VMware components managed
+ by the Azure Platform?
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 2
+labels:
+ guid: 26028a71-f0f1-4cac-9d9e-f1d5e832d42e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-VsanStorageNeedsToleratePolicy.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-VsanStorageNeedsToleratePolicy.yaml
new file mode 100644
index 000000000..d1bbaffe0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Reliability/revcl-VsanStorageNeedsToleratePolicy.yaml
@@ -0,0 +1,14 @@
+name: revcl-VsanStorageNeedsToleratePolicy
+title: Ensure that the Failure-to-tolerate policy is in place to meet your vSAN storage
+ needs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Reliability
+severity: 0
+labels:
+ guid: d88408f3-7273-44c8-96ba-280214590146
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AddsDomainControllerSIdentitySubscription.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AddsDomainControllerSIdentitySubscription.yaml
new file mode 100644
index 000000000..eb6365240
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AddsDomainControllerSIdentitySubscription.yaml
@@ -0,0 +1,14 @@
+name: revcl-AddsDomainControllerSIdentitySubscription
+title: Ensure ADDS domain controller(s) are deployed in the identity subscription
+ in native Azure
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: 32e42e36-11c8-418b-8a0b-c510e43a18a9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AdvancedThreatDetectionAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AdvancedThreatDetectionAzureVmwareSolution.yaml
new file mode 100644
index 000000000..39c837352
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AdvancedThreatDetectionAzureVmwareSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-AdvancedThreatDetectionAzureVmwareSolution
+title: Enable Advanced Threat Detection (Microsoft Defender for Cloud aka ASC) for
+ workloads running on Azure VMware Solution
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 9ccbd869-266a-4cca-874f-aa19bf39d95d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ApplicableComplianceBaselinesMicrosoftDefender.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ApplicableComplianceBaselinesMicrosoftDefender.yaml
new file mode 100644
index 000000000..831a583ee
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ApplicableComplianceBaselinesMicrosoftDefender.yaml
@@ -0,0 +1,13 @@
+name: revcl-ApplicableComplianceBaselinesMicrosoftDefender
+title: Are the applicable compliance baselines added to Microsoft Defender for Cloud
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: c9fc9d1b-b780-436f-9e6b-fbb9ed503547
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureKeyVaultGuestEncryption.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureKeyVaultGuestEncryption.yaml
new file mode 100644
index 000000000..41305c480
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureKeyVaultGuestEncryption.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureKeyVaultGuestEncryption
+title: When in-guest encryption is used, store encryption keys in Azure Key vault
+ when possible
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 2
+labels:
+ guid: a3592718-e6e2-4051-9267-6ae46691e883
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAddsSites.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAddsSites.yaml
new file mode 100644
index 000000000..0e298aa9d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAddsSites.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionAddsSites
+title: Ensure ADDS sites and services is configured to keep authentication requests
+ from Azure-based resources (including Azure VMware Solution) local to Azure
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 75089c20-990d-4927-b105-885576f76fc2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAutomaticHostReplacementNotificationsValidEntraIdEnabledAccount.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAutomaticHostReplacementNotificationsValidEntraIdEnabledAccount.yaml
new file mode 100644
index 000000000..25054a7e6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAutomaticHostReplacementNotificationsValidEntraIdEnabledAccount.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureVmwareSolutionAutomaticHostReplacementNotificationsValidEntraIdEnabledAccount
+title: If using Privileged Identity Management is being used, ensure that a valid
+ Entra ID enabled account is created with a valid SMTP record for Azure VMware Solution
+ Automatic Host replacement notifications. (standing permissions required)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 78c447a8-26b2-4863-af0f-1cac599ef1d5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAzureArc.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAzureArc.yaml
new file mode 100644
index 000000000..6478e42b6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionAzureArc.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureVmwareSolutionAzureArc
+title: Use Azure ARC for Servers to properly govern workloads running on Azure VMware
+ Solution using Azure native technologies (Azure ARC for Azure VMware Solution is
+ not yet available)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 44c7c891-9ca1-4f6d-9315-ae524ba34d45
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionDeploymentAzureRegions.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionDeploymentAzureRegions.yaml
new file mode 100644
index 000000000..e2fdd04f9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionDeploymentAzureRegions.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionDeploymentAzureRegions
+title: Was data residency evaluated when selecting Azure regions to use for Azure
+ VMware Solution deployment
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: cc447e82-6128-4a71-b0f1-cac6d9ef1d5e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionGuestVmWorkloadsAzureArc.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionGuestVmWorkloadsAzureArc.yaml
new file mode 100644
index 000000000..d9a4c25d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionGuestVmWorkloadsAzureArc.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionGuestVmWorkloadsAzureArc
+title: Use Azure Arc enabled servers to manage your Azure VMware Solution guest VM
+ workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 41741583-3ef7-4ad7-a6d3-733165c7acbe
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionGuestVmWorkloadsMicrosoftDefender.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionGuestVmWorkloadsMicrosoftDefender.yaml
new file mode 100644
index 000000000..f58f5ced8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionGuestVmWorkloadsMicrosoftDefender.yaml
@@ -0,0 +1,13 @@
+name: revcl-AzureVmwareSolutionGuestVmWorkloadsMicrosoftDefender
+title: Enable Microsoft Defender for Cloud for Azure VMware Solution guest VM workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 48b262d6-cc5f-4512-a253-98e6db9d37da
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionMicrosoftDefender-1.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionMicrosoftDefender-1.yaml
new file mode 100644
index 000000000..ab9f48d58
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionMicrosoftDefender-1.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionMicrosoftDefender-1
+title: Ensure workloads running on Azure VMware Solution are onboarded to Microsoft
+ Defender for Cloud
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: aee3553a-fc83-4392-98b2-62d6cc5f5129
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionMicrosoftDefender.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionMicrosoftDefender.yaml
new file mode 100644
index 000000000..b8f2bc23d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionMicrosoftDefender.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionMicrosoftDefender
+title: Use Microsoft Defender for Cloud for compliance monitoring of workloads running
+ on Azure VMware Solution
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: ee29711b-d352-4caa-ab79-b198dab81932
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionResourceAzurePortal.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionResourceAzurePortal.yaml
new file mode 100644
index 000000000..97586718d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionResourceAzurePortal.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionResourceAzurePortal
+title: Is Privileged Identity Management implemented for roles managing the Azure
+ VMware Solution resource in the Azure Portal (no standing permissions allowed)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: 6128a71f-0f1c-4ac6-b9ef-1d5e832e42e3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionResourceRbacPermissions.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionResourceRbacPermissions.yaml
new file mode 100644
index 000000000..c14ddd5ef
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-AzureVmwareSolutionResourceRbacPermissions.yaml
@@ -0,0 +1,14 @@
+name: revcl-AzureVmwareSolutionResourceRbacPermissions
+title: RBAC permissions on the Azure VMware Solution resource in Azure are 'locked
+ down' to a limited set of owners only
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: d503547c-c447-4e82-9128-a71f0f1cac6d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CentralizedIdentityProviderAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CentralizedIdentityProviderAzureVmwareSolution.yaml
new file mode 100644
index 000000000..d904af750
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CentralizedIdentityProviderAzureVmwareSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-CentralizedIdentityProviderAzureVmwareSolution
+title: Use a centralized identity provider to be used for workloads (VM's) running
+ on Azure VMware Solution
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: 586cb291-ec16-4a1d-876e-f9f141acdce5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CloudadminAccountVcenterIdp.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CloudadminAccountVcenterIdp.yaml
new file mode 100644
index 000000000..16f0defd0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CloudadminAccountVcenterIdp.yaml
@@ -0,0 +1,13 @@
+name: revcl-CloudadminAccountVcenterIdp
+title: CloudAdmin account in vCenter IdP is used only as an emergency account (break-glass)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: b9d37dac-43bc-46cd-8d79-a9b24604489a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CloudadminPermittedAuthorizationsCustomRoles.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CloudadminPermittedAuthorizationsCustomRoles.yaml
new file mode 100644
index 000000000..930502477
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CloudadminPermittedAuthorizationsCustomRoles.yaml
@@ -0,0 +1,13 @@
+name: revcl-CloudadminPermittedAuthorizationsCustomRoles
+title: Ensure all custom roles are scoped with CloudAdmin permitted authorizations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: fd9f0df4-68dc-4976-b9a9-e6a79f7682c5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CustomRbacRolesPrivilegeModel.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CustomRbacRolesPrivilegeModel.yaml
new file mode 100644
index 000000000..f978165f1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CustomRbacRolesPrivilegeModel.yaml
@@ -0,0 +1,14 @@
+name: revcl-CustomRbacRolesPrivilegeModel
+title: Create custom RBAC roles in vCenter to implement a least-privilege model inside
+ vCenter
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: d329f798-bc17-48bd-a5a0-6ca7144351d1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CustomerManagedKeyComplianceReason.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CustomerManagedKeyComplianceReason.yaml
new file mode 100644
index 000000000..e27e753c1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-CustomerManagedKeyComplianceReason.yaml
@@ -0,0 +1,14 @@
+name: revcl-CustomerManagedKeyComplianceReason
+title: Consider using CMK (Customer Managed Key) for vSAN only if needed for compliance
+ reason(s).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 547c1747-dc56-4068-a714-435cd19dd244
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DataProcessingImplicationsServiceConsumerModel.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DataProcessingImplicationsServiceConsumerModel.yaml
new file mode 100644
index 000000000..4e81829d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DataProcessingImplicationsServiceConsumerModel.yaml
@@ -0,0 +1,14 @@
+name: revcl-DataProcessingImplicationsServiceConsumerModel
+title: Are data processing implications (service provider / service consumer model)
+ clear and documented
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: 832e42e3-611c-4818-a0a0-bc510e43a18a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DdosStandardProtectionExrVpnGatewaySubnet.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DdosStandardProtectionExrVpnGatewaySubnet.yaml
new file mode 100644
index 000000000..4c279a4d1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DdosStandardProtectionExrVpnGatewaySubnet.yaml
@@ -0,0 +1,13 @@
+name: revcl-DdosStandardProtectionExrVpnGatewaySubnet
+title: Is DDoS standard protection enabled on ExR/VPN Gateway subnet in Azure
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 334fdf91-c234-4182-a652-75269440b4be
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DedicatedPrivilegedAccessWorkstationAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DedicatedPrivilegedAccessWorkstationAzureVmwareSolution.yaml
new file mode 100644
index 000000000..8bdfeb879
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-DedicatedPrivilegedAccessWorkstationAzureVmwareSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-DedicatedPrivilegedAccessWorkstationAzureVmwareSolution
+title: Use a dedicated privileged access workstation (PAW) to manage Azure VMware
+ Solution, vCenter, NSX manager and HCX manager
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 3d3e0843-276d-44bd-a015-bcf219e4a1eb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-EastWestTrafficFilteringNsxT.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-EastWestTrafficFilteringNsxT.yaml
new file mode 100644
index 000000000..362dffb64
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-EastWestTrafficFilteringNsxT.yaml
@@ -0,0 +1,13 @@
+name: revcl-EastWestTrafficFilteringNsxT
+title: Is East-West traffic filtering implemented within NSX-T
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 79377bcd-b375-41ab-8ab0-ead66e15d3d4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ExtendedSecurityUpdateSupportAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ExtendedSecurityUpdateSupportAzureVmwareSolution.yaml
new file mode 100644
index 000000000..de22cd73d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ExtendedSecurityUpdateSupportAzureVmwareSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-ExtendedSecurityUpdateSupportAzureVmwareSolution
+title: Consider using extended security update support for workloads running on Azure
+ VMware Solution (Azure VMware Solution is eligible for ESU)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 5ac94222-3e13-4810-9230-81a941741583
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ExternalIdentityProviderNsxManager.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ExternalIdentityProviderNsxManager.yaml
new file mode 100644
index 000000000..56ad419d1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-ExternalIdentityProviderNsxManager.yaml
@@ -0,0 +1,13 @@
+name: revcl-ExternalIdentityProviderNsxManager
+title: Ensure that NSX-Manager is integrated with an external Identity provider (LDAPS)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: 53d88e89-d17b-473b-82a5-a67e7a9ed5b3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-InboundInternetRequestsAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-InboundInternetRequestsAzureVmwareSolution.yaml
new file mode 100644
index 000000000..4e6be9609
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-InboundInternetRequestsAzureVmwareSolution.yaml
@@ -0,0 +1,14 @@
+name: revcl-InboundInternetRequestsAzureVmwareSolution
+title: Auditing and logging is implemented for inbound internet requests to Azure
+ VMware Solution and Azure VMware Solution based workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: eace4cb1-deb4-4c65-8c3f-c14eeab36938
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-LimitUseCloudadminAccount.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-LimitUseCloudadminAccount.yaml
new file mode 100644
index 000000000..bc429e067
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-LimitUseCloudadminAccount.yaml
@@ -0,0 +1,13 @@
+name: revcl-LimitUseCloudadminAccount
+title: Limit use of CloudAdmin account to emergency access only
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: 8defc4d7-21d3-41d2-90fb-707ae9eab40e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-NsxCredentialsProcess.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-NsxCredentialsProcess.yaml
new file mode 100644
index 000000000..b83986484
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-NsxCredentialsProcess.yaml
@@ -0,0 +1,14 @@
+name: revcl-NsxCredentialsProcess
+title: Is a process defined to regularly rotate cloudadmin (vCenter) and admin (NSX)
+ credentials
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 9dd24429-eb72-4281-97a1-51c5bb4e4f18
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-OtherAzureNativeServicesAzurePrivateLink.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-OtherAzureNativeServicesAzurePrivateLink.yaml
new file mode 100644
index 000000000..bf04d36e7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-OtherAzureNativeServicesAzurePrivateLink.yaml
@@ -0,0 +1,13 @@
+name: revcl-OtherAzureNativeServicesAzurePrivateLink
+title: Consider the use of Azure Private-Link when using other Azure Native Services
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 6691e883-5ac9-4422-83e1-3810523081a9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-OutboundInternetConnectionsAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-OutboundInternetConnectionsAzureVmwareSolution.yaml
new file mode 100644
index 000000000..bec27f7bb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-OutboundInternetConnectionsAzureVmwareSolution.yaml
@@ -0,0 +1,15 @@
+name: revcl-OutboundInternetConnectionsAzureVmwareSolution
+title: Session monitoring is implemented for outbound internet connections from Azure
+ VMware Solution or Azure VMware Solution based workloads to identify suspicious/malicious
+ activity
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: 29e3eec2-1836-487a-8077-a2b5945bda43
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-PrivilegedIdentityManagementAuditReportingAzureVmwareSolutionPimRoles.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-PrivilegedIdentityManagementAuditReportingAzureVmwareSolutionPimRoles.yaml
new file mode 100644
index 000000000..c6d1f25b1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-PrivilegedIdentityManagementAuditReportingAzureVmwareSolutionPimRoles.yaml
@@ -0,0 +1,14 @@
+name: revcl-PrivilegedIdentityManagementAuditReportingAzureVmwareSolutionPimRoles
+title: Privileged Identity Management audit reporting should be implemented for the
+ Azure VMware Solution PIM roles
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: c4e2436b-b336-4d71-9f17-960eee0b9b5c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RbacModelVmwareVsphere.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RbacModelVmwareVsphere.yaml
new file mode 100644
index 000000000..45bd4b58e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RbacModelVmwareVsphere.yaml
@@ -0,0 +1,13 @@
+name: revcl-RbacModelVmwareVsphere
+title: Has an RBAC model been created for use within VMware vSphere
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: ae0e37ce-e297-411b-b352-caaab79b198d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RbacPermissionsAddsGroups.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RbacPermissionsAddsGroups.yaml
new file mode 100644
index 000000000..796c14a11
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RbacPermissionsAddsGroups.yaml
@@ -0,0 +1,13 @@
+name: revcl-RbacPermissionsAddsGroups
+title: RBAC permissions should be granted on ADDS groups and not on specific users
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: ab81932c-9fc9-4d1b-a780-36f5e6bfbb9e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RdPartySolutionsAzureVmwareSolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RdPartySolutionsAzureVmwareSolution.yaml
new file mode 100644
index 000000000..a4645f324
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-RdPartySolutionsAzureVmwareSolution.yaml
@@ -0,0 +1,15 @@
+name: revcl-RdPartySolutionsAzureVmwareSolution
+title: Workloads on Azure VMware Solution are not directly exposed to the internet.
+ Traffic is filtered and inspected by Azure Application Gateway, Azure Firewall or
+ 3rd party solutions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: a2adb1c3-d232-46af-825c-a44e1695fddd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-SecureProtocolConnection.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-SecureProtocolConnection.yaml
new file mode 100644
index 000000000..3f3108b92
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-SecureProtocolConnection.yaml
@@ -0,0 +1,14 @@
+name: revcl-SecureProtocolConnection
+title: Ensure that the connection from vCenter to ADDS is using a secure protocol
+ (LDAPS)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 1
+labels:
+ guid: cd289ced-6b17-4db8-8554-61e2aee3553a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-SufficientDataEncryptionGuestDiskEncryption.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-SufficientDataEncryptionGuestDiskEncryption.yaml
new file mode 100644
index 000000000..1a249585e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-SufficientDataEncryptionGuestDiskEncryption.yaml
@@ -0,0 +1,15 @@
+name: revcl-SufficientDataEncryptionGuestDiskEncryption
+title: Ensure workloads on Azure VMware Solution use sufficient data encryption during
+ run-time (like in-guest disk encryption and SQL TDE). (vSAN encryption at rest is
+ default)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 2
+labels:
+ guid: 85e12139-bd7b-4b01-8f7b-95ef6e043e2a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-UserAccountsVcenter.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-UserAccountsVcenter.yaml
new file mode 100644
index 000000000..3db3a54ef
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/Security/revcl-UserAccountsVcenter.yaml
@@ -0,0 +1,14 @@
+name: revcl-UserAccountsVcenter
+title: Ensure that vCenter is connected to ADDS to enable authentication based on
+ 'named user accounts'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.avs/privateclouds
+waf: Security
+severity: 0
+labels:
+ guid: de3aad1e-7c28-4ec9-9666-b7570449aa80
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureMonitorAlertWarningThresholdsVmwareVsanDatastoreSlackSpace.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureMonitorAlertWarningThresholdsVmwareVsanDatastoreSlackSpace.yaml
new file mode 100644
index 000000000..c4f4d66d8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureMonitorAlertWarningThresholdsVmwareVsanDatastoreSlackSpace.yaml
@@ -0,0 +1,61 @@
+name: aprl-AzureMonitorAlertWarningThresholdsVmwareVsanDatastoreSlackSpace
+title: Configure Azure Monitor Alert warning thresholds for vSAN datastore utilization
+description: |-
+ Ensure VMware vSAN datastore slack space is maintained for SLA by monitoring storage utilization and setting alerts at 70% and 75% utilization to allow for capacity planning. To expand, add hosts or external storage like Azure Elastic SAN, Azure NetApp Files, if CPU and RAM requirements are met.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 0
+labels:
+ guid: 4232eb32-3241-4049-9e14-9b8005817b56
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure VMware Solution resources that don't have a vSAN capacity critical alert with a threshold of 75% or a warning capacity of 70%.
+ (
+ resources
+ | where ['type'] == "microsoft.avs/privateclouds"
+ | extend scopeId = tolower(tostring(id))
+ | project ['scopeId'], name, id, tags
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.insights/metricalerts"
+ | extend alertProperties = todynamic(properties)
+ | mv-expand alertProperties.scopes
+ | mv-expand alertProperties.criteria.allOf
+ | extend scopeId = tolower(tostring(alertProperties_scopes))
+ | extend metric = alertProperties_criteria_allOf.metricName
+ | extend threshold = alertProperties_criteria_allOf.threshold
+ | project scopeId, tostring(metric), toint(['threshold'])
+ | where metric == "DiskUsedPercentage"
+ | where threshold == 75
+ ) on scopeId
+ | where isnull(['threshold'])
+ | project recommendationId = "4232eb32-3241-4049-9e14-9b8005817b56", name, id, tags, param1 = "vsanCapacityCriticalAlert: isNull or threshold != 75"
+ )
+ | union (
+ resources
+ | where ['type'] == "microsoft.avs/privateclouds"
+ | extend scopeId = tolower(tostring(id))
+ | project ['scopeId'], name, id, tags
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.insights/metricalerts"
+ | extend alertProperties = todynamic(properties)
+ | mv-expand alertProperties.scopes
+ | mv-expand alertProperties.criteria.allOf
+ | extend scopeId = tolower(tostring(alertProperties_scopes))
+ | extend metric = alertProperties_criteria_allOf.metricName
+ | extend threshold = alertProperties_criteria_allOf.threshold
+ | project scopeId, tostring(metric), toint(['threshold'])
+ | where metric == "DiskUsedPercentage"
+ | where threshold == 70
+ ) on scopeId
+ | where isnull(['threshold'])
+ | project recommendationId = "4232eb32-3241-4049-9e14-9b8005817b56", name, id, tags, param1 = "vsanCapacityWarningAlert: isNull or threshold != 70"
+ )
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureServiceHealthNotificationsServiceRequestSubmissions.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureServiceHealthNotificationsServiceRequestSubmissions.yaml
new file mode 100644
index 000000000..3901d0bb6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureServiceHealthNotificationsServiceRequestSubmissions.yaml
@@ -0,0 +1,56 @@
+name: aprl-AzureServiceHealthNotificationsServiceRequestSubmissions
+title: Configure Azure Service Health notifications and alerts for Azure VMware Solution
+description: |-
+ Ensure Azure Service Health notifications are set for Azure VMware Solution across all used regions and subscriptions. This communicates service/security issues and maintenance activities like host replacements and upgrades, reducing service request submissions.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 0
+labels:
+ guid: 74fcb9f2-9a25-49a6-8c42-d32851c4afb7
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure VMware Solution resources that don't have one or more service health alerts covering AVS private clouds in the deployed subscription and region pairs.
+ //full list of private clouds
+ (resources
+ | where ['type'] == "microsoft.avs/privateclouds"
+ | extend locale = tolower(location)
+ | extend subscriptionId = tolower(subscriptionId)
+ | project id, name, tags, subscriptionId, locale)
+ | join kind=leftouter
+ //Alert ID's that include all incident types filtered by AVS Service Health alerts
+ ((resources
+ | where type == "microsoft.insights/activitylogalerts"
+ | extend alertproperties = todynamic(properties)
+ | where alertproperties.condition.allOf[0].field == "category" and alertproperties.condition.allOf[0].equals == "ServiceHealth"
+ | where alertproperties.condition.allOf[1].field == "properties.impactedServices[*].ServiceName" and set_has_element(alertproperties.condition.allOf[1].containsAny, "Azure VMware Solution")
+ | extend locale = strcat_array(split(tolower(alertproperties.condition.allOf[2].containsAny),' '), '')
+ | mv-expand todynamic(locale)
+ | where locale != "global"
+ | project subscriptionId, tostring(locale) )
+ | union
+ //Alert ID's that include only some of the incident types after filtering by service health alerts covering AVS private clouds.
+ (resources
+ | where type == "microsoft.insights/activitylogalerts"
+ | extend subscriptionId = tolower(subscriptionId)
+ | extend alertproperties = todynamic(properties)
+ | where alertproperties.condition.allOf[0].field == "category" and alertproperties.condition.allOf[0].equals == "ServiceHealth"
+ | where alertproperties.condition.allOf[2].field == "properties.impactedServices[*].ServiceName" and set_has_element(alertproperties.condition.allOf[2].containsAny, "Azure VMware Solution")
+ | extend locale = strcat_array(split(tolower(alertproperties.condition.allOf[3].containsAny),' '), '')
+ | mv-expand todynamic(locale)
+ | mv-expand alertproperties.condition.allOf[1].anyOf
+ | extend incidentType = alertproperties_condition_allOf_1_anyOf.equals
+ | where locale != "global"
+ | project id, subscriptionId, locale, incidentType
+ | distinct subscriptionId, tostring(locale), tostring(incidentType)
+ | summarize incidentTypes=count() by subscriptionId, locale
+ | where incidentTypes == 5 //only include this subscription, region pair if it includes all the incident types.
+ | project subscriptionId, locale)) on subscriptionId, locale
+ | where subscriptionId1 == "" or locale1 == "" or isnull(subscriptionId1) or isnull(locale1)
+ | project recommendationId = "74fcb9f2-9a25-49a6-8c42-d32851c4afb7", name, id, tags, param1 = "avsServiceHealthAlertsAllIncidentTypesConfigured: False"
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionClusterSizeProactiveResourceMonitoring.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionClusterSizeProactiveResourceMonitoring.yaml
new file mode 100644
index 000000000..3d41b8654
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionClusterSizeProactiveResourceMonitoring.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureVmwareSolutionClusterSizeProactiveResourceMonitoring
+title: Monitor when Azure VMware Solution Cluster Size is approaching the host limit
+description: |-
+ Alert when the cluster size reaches 14 hosts. Set up periodic alerts for planning new clusters or datastores due to growth, especially from storage needs. Beyond 14 hosts, trigger alerts for each new host addition for proactive resource monitoring.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 1
+labels:
+ guid: f86355e3-de7c-4dad-8080-1b0b411e66c8
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudNewPrivateCloud.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudNewPrivateCloud.yaml
new file mode 100644
index 000000000..a74e8a50c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudNewPrivateCloud.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureVmwareSolutionPrivateCloudNewPrivateCloud
+title: Monitor when Azure VMware Solution Private Cloud is reaching the capacity limit
+description: |-
+ Set an alert for when the node count in Azure VMware Solution Private Cloud hits or exceeds 90 hosts, enabling timely planning for a new private cloud.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 1
+labels:
+ guid: 29d7a115-dfb6-4df1-9205-04824109548f
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudResourceGroupResourceDeleteLock.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudResourceGroupResourceDeleteLock.yaml
new file mode 100644
index 000000000..d5178f3cb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudResourceGroupResourceDeleteLock.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureVmwareSolutionPrivateCloudResourceGroupResourceDeleteLock
+title: Apply Resource delete lock on the resource group hosting the private cloud
+description: |-
+ Applying a resource delete lock to the Azure VMware Solution Private Cloud resource group prevents unauthorized or accidental deletion by anyone with contributor access, ensuring the protection and reliability of the Azure VMware Solution Private Cloud.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 0
+labels:
+ guid: a5ef7c05-c611-4842-9af5-11efdc99123a
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudsMultipleDnsServers.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudsMultipleDnsServers.yaml
new file mode 100644
index 000000000..b76a1869d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionPrivateCloudsMultipleDnsServers.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureVmwareSolutionPrivateCloudsMultipleDnsServers
+title: Use multiple DNS servers per private FQDN zone
+description: |-
+ Azure VMware Solution private clouds support up to three DNS servers for a single FQDN, preventing a single DNS server from becoming a point of failure. It's crucial to use multiple DNS servers for on-premises FQDN resolution from each private cloud.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 0
+labels:
+ guid: fcc2e257-23af-4c68-aac8-9cc03033c939
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionSynchronousStorageReplication.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionSynchronousStorageReplication.yaml
new file mode 100644
index 000000000..26529be34
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionSynchronousStorageReplication.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureVmwareSolutionSynchronousStorageReplication
+title: Enable Stretched Clusters for Multi-AZ Availability of the vSAN Datastore
+description: |-
+ For Azure VMware Solution, enabling Stretched Clusters offers 99.99% SLA, synchronous storage replication (RPO=0), and spreads vSAN datastore across two AZs. Must be done at initial setup, needing double quota due to extension across AZs.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 2
+labels:
+ guid: 9ec5b4c8-3dd8-473a-86ee-3273290331b9
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure VMware Solution resources that aren't configured as stretched clusters and in supported regions.
+ resources
+ | where ['type'] == "microsoft.avs/privateclouds"
+ | extend avsproperties = todynamic(properties)
+ | where avsproperties.availability.strategy != "DualZone"
+ | where location in ("uksouth", "westeurope", "germanywestcentral", "australiaeast")
+ | project recommendationId = "9ec5b4c8-3dd8-473a-86ee-3273290331b9", name, id, tags, param1 = "stretchClusters: Disabled"
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionSyslogsQuickerIssueResolution.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionSyslogsQuickerIssueResolution.yaml
new file mode 100644
index 000000000..da60b5d02
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-AzureVmwareSolutionSyslogsQuickerIssueResolution.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureVmwareSolutionSyslogsQuickerIssueResolution
+title: Configure Syslog in Diagnostic Settings for Azure VMware Solution
+description: |-
+ Ensure Diagnostic Settings are configured for each private cloud to send syslogs to external sources for analysis and/or archiving. Azure VMware Solution Syslogs contain data for troubleshooting and performance, aiding quicker issue resolution and early detection of issues.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 0
+labels:
+ guid: fa4ab927-bced-429a-971a-53350de7f14b
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-DynamicWorkloadResourceManagementHostResourceExhaustion.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-DynamicWorkloadResourceManagementHostResourceExhaustion.yaml
new file mode 100644
index 000000000..b57e7f5f0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-DynamicWorkloadResourceManagementHostResourceExhaustion.yaml
@@ -0,0 +1,38 @@
+name: aprl-DynamicWorkloadResourceManagementHostResourceExhaustion
+title: Monitor CPU Utilization to ensure sufficient resources for workloads
+description: |-
+ Ensure sufficient compute resources to avoid host resource exhaustion in Azure VMware Solution, which utilizes vSphere DRS and HA for dynamic workload resource management. However, sustained CPU utilization over 95% may increase CPU Ready times, impacting workloads.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 1
+labels:
+ guid: 4ee5d535-c47b-470a-9557-4a3dd297d62f
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure VMware Solution resources that don't have a Cluster CPU capacity critical alert with a threshold of 95%.
+ resources
+ | where ['type'] == "microsoft.avs/privateclouds"
+ | extend scopeId = tolower(tostring(id))
+ | project ['scopeId'], name, id, tags
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.insights/metricalerts"
+ | extend alertProperties = todynamic(properties)
+ | mv-expand alertProperties.scopes
+ | mv-expand alertProperties.criteria.allOf
+ | extend scopeId = tolower(tostring(alertProperties_scopes))
+ | extend metric = alertProperties_criteria_allOf.metricName
+ | extend threshold = alertProperties_criteria_allOf.threshold
+ | project scopeId, tostring(metric), toint(['threshold'])
+ | where metric == "EffectiveCpuAverage"
+ | where threshold == 95
+ ) on scopeId
+ | where isnull(['threshold'])
+ | project recommendationId = "4ee5d535-c47b-470a-9557-4a3dd297d62f", name, id, tags, param1 = "hostCpuCriticalAlert: isNull or threshold != 95"
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-HostResourceExhaustionDynamicWorkloadManagement.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-HostResourceExhaustionDynamicWorkloadManagement.yaml
new file mode 100644
index 000000000..cebcf7bf2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-HostResourceExhaustionDynamicWorkloadManagement.yaml
@@ -0,0 +1,38 @@
+name: aprl-HostResourceExhaustionDynamicWorkloadManagement
+title: Monitor Memory Utilization to ensure sufficient resources for workloads
+description: |-
+ Ensure sufficient memory resources to prevent host resource exhaustion in Azure VMware Solution. It uses vSphere DRS and vSphere HA for dynamic workload management. Yet, continuous memory use over 95% leads to disk swapping, affecting workloads.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 1
+labels:
+ guid: 029208c8-5186-4a76-8ee8-6e3445fef4dd
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure VMware Solution resources that don't have a cluster host memory critical alert with a threshold of 95%.
+ resources
+ | where ['type'] == "microsoft.avs/privateclouds"
+ | extend scopeId = tolower(tostring(id))
+ | project ['scopeId'], name, id, tags
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.insights/metricalerts"
+ | extend alertProperties = todynamic(properties)
+ | mv-expand alertProperties.scopes
+ | mv-expand alertProperties.criteria.allOf
+ | extend scopeId = tolower(tostring(alertProperties_scopes))
+ | extend metric = alertProperties_criteria_allOf.metricName
+ | extend threshold = alertProperties_criteria_allOf.threshold
+ | project scopeId, tostring(metric), toint(['threshold'])
+ | where metric == "UsageAverage"
+ | where threshold == 95
+ ) on scopeId
+ | where isnull(['threshold'])
+ | project recommendationId = "029208c8-5186-4a76-8ee8-6e3445fef4dd", name, id, tags, param1 = "hostMemoryCriticalAlert: isNull or threshold != 95"
diff --git a/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-VsanDatastoreCustomerManagedKeysAzureKeyVault.yaml b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-VsanDatastoreCustomerManagedKeysAzureKeyVault.yaml
new file mode 100644
index 000000000..05a0da21d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAVS-privateClouds/aprl-VsanDatastoreCustomerManagedKeysAzureKeyVault.yaml
@@ -0,0 +1,18 @@
+name: aprl-VsanDatastoreCustomerManagedKeysAzureKeyVault
+title: Use key autorotation for vSAN datastore customer-managed keys
+description: |-
+ When using customer-managed keys for encrypting vSAN datastores, leveraging Azure Key Vault for central management and accessing them via a managed identity linked to the private cloud is advised. The expiration of these keys can render the vSAN datastore and its associated workloads inaccessible.
+source:
+ type: aprl
+ file: azure-resources/AVS/privateClouds/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AVS/privateClouds
+severity: 0
+labels:
+ guid: e0ac2f57-c8c0-4b8c-a7c8-19e5797828b5
+ area: Security
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApimLandingZoneAcceleratorCloudAdaptionFramework.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApimLandingZoneAcceleratorCloudAdaptionFramework.yaml
new file mode 100644
index 000000000..2903a0067
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApimLandingZoneAcceleratorCloudAdaptionFramework.yaml
@@ -0,0 +1,16 @@
+name: revcl-ApimLandingZoneAcceleratorCloudAdaptionFramework
+title: Configure APIM via Infrastructure-as-code. Review DevOps best practices from
+ the Cloud Adaption Framework APIM Landing Zone Accelerator
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: c385bfcd-49fd-4786-81ba-cedbb4c57345
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/app-platform/api-management/platform-automation-and-devops#design-recommendations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApisPoliciesBaseElement.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApisPoliciesBaseElement.yaml
new file mode 100644
index 000000000..d00fad61f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApisPoliciesBaseElement.yaml
@@ -0,0 +1,15 @@
+name: revcl-ApisPoliciesBaseElement
+title: Ensure all APIs policies include a element.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 0b0c0765-ff37-4369-90bd-3eb23ce71b08
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/set-edit-policies?tabs=form#use-base-element-to-set-policy-evaluation-order
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApplicationInsightsDetailedTelemetry.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApplicationInsightsDetailedTelemetry.yaml
new file mode 100644
index 000000000..e05087934
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ApplicationInsightsDetailedTelemetry.yaml
@@ -0,0 +1,15 @@
+name: revcl-ApplicationInsightsDetailedTelemetry
+title: Enable Application Insights for more detailed telemetry
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 8691fa38-45ed-4299-a247-fecd98d35deb
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-app-insights
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-CriticalMetricsAlerts.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-CriticalMetricsAlerts.yaml
new file mode 100644
index 000000000..105020a41
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-CriticalMetricsAlerts.yaml
@@ -0,0 +1,15 @@
+name: revcl-CriticalMetricsAlerts
+title: Configure alerts on the most critical metrics
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 0
+labels:
+ guid: 55fd27bb-76ac-4a91-bc37-049e885be6b7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-DevopsCiCd.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-DevopsCiCd.yaml
new file mode 100644
index 000000000..3841888d8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-DevopsCiCd.yaml
@@ -0,0 +1,15 @@
+name: revcl-DevopsCiCd
+title: Implement DevOps and CI/CD in your workflow
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 354f1c03-8112-4965-85ad-c0074bddf231
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/devops-api-development-templates
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-DiagnosticsSettingsAzureMonitor.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-DiagnosticsSettingsAzureMonitor.yaml
new file mode 100644
index 000000000..90ca07e62
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-DiagnosticsSettingsAzureMonitor.yaml
@@ -0,0 +1,15 @@
+name: revcl-DiagnosticsSettingsAzureMonitor
+title: Enable Diagnostics Settings to export logs to Azure Monitor
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 0
+labels:
+ guid: a7d0840a-c8c4-4e83-adec-5ca578eb4049
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-use-azure-monitor#resource-logs
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ErrorHandlingPolicyGlobalLevel.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ErrorHandlingPolicyGlobalLevel.yaml
new file mode 100644
index 000000000..c3039847c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-ErrorHandlingPolicyGlobalLevel.yaml
@@ -0,0 +1,15 @@
+name: revcl-ErrorHandlingPolicyGlobalLevel
+title: Implement an error handling policy at the global level
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: d7941d4a-7b6f-458f-8714-2f8f8c059ad4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-error-handling-policies
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-HighPerformanceLevelsEventHubsPolicy.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-HighPerformanceLevelsEventHubsPolicy.yaml
new file mode 100644
index 000000000..f6a951695
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-HighPerformanceLevelsEventHubsPolicy.yaml
@@ -0,0 +1,15 @@
+name: revcl-HighPerformanceLevelsEventHubsPolicy
+title: If you need to log at high performance levels, consider Event Hubs policy
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 2
+labels:
+ guid: 8210699f-8d43-45c2-8f19-57e54134bd8f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-log-event-hubs
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-MonetizationSupportArticleBestPractices.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-MonetizationSupportArticleBestPractices.yaml
new file mode 100644
index 000000000..22d848c39
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-MonetizationSupportArticleBestPractices.yaml
@@ -0,0 +1,16 @@
+name: revcl-MonetizationSupportArticleBestPractices
+title: If you are planning to monetize your APIs, review the 'monetization support'
+ article for best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: c3818a95-6ff3-4474-88dc-e809b46dad6a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/monetization-support
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-NamedValuesCommonValues.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-NamedValuesCommonValues.yaml
new file mode 100644
index 000000000..dfceddc58
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-NamedValuesCommonValues.yaml
@@ -0,0 +1,15 @@
+name: revcl-NamedValuesCommonValues
+title: Use Named Values to store common values that can be used in policies
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 03b125d5-b69b-4739-b7fd-84b86da4933e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-properties?tabs=azure-portal
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-PowershellAutomationScriptsManagement.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-PowershellAutomationScriptsManagement.yaml
new file mode 100644
index 000000000..a31c1dd86
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-PowershellAutomationScriptsManagement.yaml
@@ -0,0 +1,15 @@
+name: revcl-PowershellAutomationScriptsManagement
+title: Simplify management with PowerShell automation scripts
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 0674d750-0c6f-4ac0-8717-ceec04d0bdbd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/automation-manage-api-management
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-RedundantApiBackendConfigurationsBackendsFeature.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-RedundantApiBackendConfigurationsBackendsFeature.yaml
new file mode 100644
index 000000000..f3b131986
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-RedundantApiBackendConfigurationsBackendsFeature.yaml
@@ -0,0 +1,15 @@
+name: revcl-RedundantApiBackendConfigurationsBackendsFeature
+title: Use Backends feature to eliminate redundant API backend configurations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 06862505-2d9a-4874-9491-2837b00a3475
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/backends
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-SamePoliciesDefinitionsPolicyFragments.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-SamePoliciesDefinitionsPolicyFragments.yaml
new file mode 100644
index 000000000..2715bd8b5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-SamePoliciesDefinitionsPolicyFragments.yaml
@@ -0,0 +1,16 @@
+name: revcl-SamePoliciesDefinitionsPolicyFragments
+title: Use Policy Fragments to avoid repeating same policies definitions across multiple
+ APIs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: a5c45b03-93b6-42fe-b16b-8fccb6a79902
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/policy-fragments
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-VisualStudioCodeApimExtensionFasterApiDevelopment.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-VisualStudioCodeApimExtensionFasterApiDevelopment.yaml
new file mode 100644
index 000000000..c1b37edce
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Operations/revcl-VisualStudioCodeApimExtensionFasterApiDevelopment.yaml
@@ -0,0 +1,15 @@
+name: revcl-VisualStudioCodeApimExtensionFasterApiDevelopment
+title: Promote usage of Visual Studio Code APIM extension for faster API development
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Operations
+severity: 1
+labels:
+ guid: 6c3a27c0-197f-426c-9ffa-86fed51d9ab6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/visual-studio-code-tutorial
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-AutoscalingNumber.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-AutoscalingNumber.yaml
new file mode 100644
index 000000000..53a3b2399
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-AutoscalingNumber.yaml
@@ -0,0 +1,15 @@
+name: revcl-AutoscalingNumber
+title: Configure autoscaling to scale out the number of instances when the load increases
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Performance
+severity: 1
+labels:
+ guid: bb5f356b-3daf-47a2-a9ee-867a8100bbd5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-autoscale
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-AzureFrontDoorMultiRegionDeployment.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-AzureFrontDoorMultiRegionDeployment.yaml
new file mode 100644
index 000000000..a6c5e9a87
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-AzureFrontDoorMultiRegionDeployment.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorMultiRegionDeployment
+title: Use Azure Front Door in front of APIM for multi-region deployment
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Performance
+severity: 1
+labels:
+ guid: 7519e385-a88b-4d34-966b-6269d686e890
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/front-door-api-management
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-SelfHostedGatewaysBackendApis.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-SelfHostedGatewaysBackendApis.yaml
new file mode 100644
index 000000000..5394edc48
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-SelfHostedGatewaysBackendApis.yaml
@@ -0,0 +1,16 @@
+name: revcl-SelfHostedGatewaysBackendApis
+title: Deploy self-hosted gateways where Azure doesn't have a region close to the
+ backend APIs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Performance
+severity: 1
+labels:
+ guid: 84b94abb-59b6-4b9d-8587-3413669468e8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-provision-self-hosted-gateway
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-ThrottlingPoliciesNumber.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-ThrottlingPoliciesNumber.yaml
new file mode 100644
index 000000000..87a7051a1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Performance/revcl-ThrottlingPoliciesNumber.yaml
@@ -0,0 +1,17 @@
+name: revcl-ThrottlingPoliciesNumber
+title: Apply throttling policies to control the number of requests per second
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Performance
+severity: 1
+labels:
+ guid: 121bfc39-fa7b-4096-b93b-ab56c1bc0bed
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-sample-flexible-throttling
+- type: docs
+ url: https://learn.microsoft.com/training/modules/protect-apis-on-api-management/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-ApimLimits.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-ApimLimits.yaml
new file mode 100644
index 000000000..16267e46e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-ApimLimits.yaml
@@ -0,0 +1,15 @@
+name: revcl-ApimLimits
+title: Be aware of APIM's limits
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 0
+labels:
+ guid: 46f07d33-ef9a-44e8-8f98-67c097c5d8cd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#api-management-limits
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-AutomatedBackupRoutine.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-AutomatedBackupRoutine.yaml
new file mode 100644
index 000000000..cb11ac10e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-AutomatedBackupRoutine.yaml
@@ -0,0 +1,15 @@
+name: revcl-AutomatedBackupRoutine
+title: Ensure there is an automated backup routine
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 0
+labels:
+ guid: 8d2db6e8-85c6-4118-a52c-ae76a4f27934
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#service-native-backup-capability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-MultiRegionModelRegionalBackends.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-MultiRegionModelRegionalBackends.yaml
new file mode 100644
index 000000000..568881d32
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-MultiRegionModelRegionalBackends.yaml
@@ -0,0 +1,16 @@
+name: revcl-MultiRegionModelRegionalBackends
+title: In multi-region model, use Policies to route the requests to regional backends
+ based on availability or latency.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 1
+labels:
+ guid: 1b8d68a4-66cd-44d5-ba94-3ee94440e8d6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region#-route-api-calls-to-regional-backend-services
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-OneUnitAvailabilityZones.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-OneUnitAvailabilityZones.yaml
new file mode 100644
index 000000000..b92213ec8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-OneUnitAvailabilityZones.yaml
@@ -0,0 +1,16 @@
+name: revcl-OneUnitAvailabilityZones
+title: Deploy at least one unit in two or more availability zones for an increased
+ SLA of 99.99%
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 1
+labels:
+ guid: 9c8d1664-dd9a-49d4-bd83-950af0af4044
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/high-availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-OverBackendUrlFailingCalls.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-OverBackendUrlFailingCalls.yaml
new file mode 100644
index 000000000..a7c514370
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-OverBackendUrlFailingCalls.yaml
@@ -0,0 +1,15 @@
+name: revcl-OverBackendUrlFailingCalls
+title: Use Policies to add a fail-over backend URL and caching to reduce failing calls.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 1
+labels:
+ guid: 43e60b94-7bca-43a2-aadf-efb04d63a485
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/retry-policy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-PremiumTierDr.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-PremiumTierDr.yaml
new file mode 100644
index 000000000..ce0ef92a4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-PremiumTierDr.yaml
@@ -0,0 +1,16 @@
+name: revcl-PremiumTierDr
+title: For DR, leverage the premium tier with deployments scaled across two or more
+ regions for 99.99% SLA
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 1
+labels:
+ guid: beae759e-4ddb-4326-bf26-47f87d3454b6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-PremiumTierProductionWorkloads.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-PremiumTierProductionWorkloads.yaml
new file mode 100644
index 000000000..a128bad6b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-PremiumTierProductionWorkloads.yaml
@@ -0,0 +1,15 @@
+name: revcl-PremiumTierProductionWorkloads
+title: Use the premium tier for production workloads.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 1
+labels:
+ guid: 1fe8db45-a017-4888-8c4d-4422583cfae0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/upgrade-and-scale#upgrade-and-scale
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-SelfHostedGatewayDeployments.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-SelfHostedGatewayDeployments.yaml
new file mode 100644
index 000000000..78bcd9939
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Reliability/revcl-SelfHostedGatewayDeployments.yaml
@@ -0,0 +1,15 @@
+name: revcl-SelfHostedGatewayDeployments
+title: Ensure that the self-hosted gateway deployments are resilient.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Reliability
+severity: 0
+labels:
+ guid: 10f58602-f0f9-4d77-972a-956f6e0f2600
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/api-management/self-hosted-gateway-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AppropriateGroupsVisibility.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AppropriateGroupsVisibility.yaml
new file mode 100644
index 000000000..267d5011c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AppropriateGroupsVisibility.yaml
@@ -0,0 +1,15 @@
+name: revcl-AppropriateGroupsVisibility
+title: Create appropriate groups to control the visibility of the products
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: f8e574ce-280f-49c8-b2ef-68279b081cf3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-create-groups
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AuthorizationsFeatureOauthToken.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AuthorizationsFeatureOauthToken.yaml
new file mode 100644
index 000000000..832960f19
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AuthorizationsFeatureOauthToken.yaml
@@ -0,0 +1,16 @@
+name: revcl-AuthorizationsFeatureOauthToken
+title: Use Authorizations feature to simplify management of OAuth 2.0 token for your
+ backend APIs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 5507c4b8-a7f8-41d6-9661-418c987100c9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/authorizations-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AzureKeyVaultNamedValues.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AzureKeyVaultNamedValues.yaml
new file mode 100644
index 000000000..7cf2ede4c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-AzureKeyVaultNamedValues.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureKeyVaultNamedValues
+title: Ensure that secrets (Named values) are stored an Azure Key Vault so they can
+ be securely accessed and updated
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 0
+labels:
+ guid: f8af3d94-1d2b-4070-846f-849197524258
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#im-8-restrict-the-exposure-of-credential-and-secrets
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-ClientCertificateAuthenticationSecureApis.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-ClientCertificateAuthenticationSecureApis.yaml
new file mode 100644
index 000000000..df904d619
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-ClientCertificateAuthenticationSecureApis.yaml
@@ -0,0 +1,15 @@
+name: revcl-ClientCertificateAuthenticationSecureApis
+title: Secure APIs using client certificate authentication
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: b6439493-426a-45f3-9697-cf65baee208d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates-for-clients
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-CustomSslCertificatesAzureKeyVault.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-CustomSslCertificatesAzureKeyVault.yaml
new file mode 100644
index 000000000..0f69b53cf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-CustomSslCertificatesAzureKeyVault.yaml
@@ -0,0 +1,16 @@
+name: revcl-CustomSslCertificatesAzureKeyVault
+title: Ensure that custom SSL certificates are stored an Azure Key Vault so they can
+ be securely accessed and updated
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 0
+labels:
+ guid: 39460bdb-156f-4dc2-a87f-1e8c11ab0998
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#certificate-management-in-azure-key-vault
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-IncomingRequestsDataPlane.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-IncomingRequestsDataPlane.yaml
new file mode 100644
index 000000000..4160b1fb3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-IncomingRequestsDataPlane.yaml
@@ -0,0 +1,15 @@
+name: revcl-IncomingRequestsDataPlane
+title: Protect incoming requests to APIs (data plane) with Azure AD
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 0
+labels:
+ guid: e9217997-5f6c-479d-8576-8f2adf706ec8
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-ad-authentication-required-for-data-plane-access
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-LatestTlsVersionUnnecessaryProtocols.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-LatestTlsVersionUnnecessaryProtocols.yaml
new file mode 100644
index 000000000..f88d907da
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-LatestTlsVersionUnnecessaryProtocols.yaml
@@ -0,0 +1,16 @@
+name: revcl-LatestTlsVersionUnnecessaryProtocols
+title: Use the latest TLS version when encrypting information in transit. Disable
+ outdated and unnecessary protocols and ciphers when possible.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 0
+labels:
+ guid: 2deee033-b906-4bc2-9f26-c8d3699fe091
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-manage-protocols-ciphers
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-MicrosoftEntraIdDeveloperPortal.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-MicrosoftEntraIdDeveloperPortal.yaml
new file mode 100644
index 000000000..c66d3cb14
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-MicrosoftEntraIdDeveloperPortal.yaml
@@ -0,0 +1,15 @@
+name: revcl-MicrosoftEntraIdDeveloperPortal
+title: Use Microsoft Entra ID to authenticate users in the Developer Portal
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 5e5f64ba-c90e-480e-8888-398d96cf0bfb
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-aad
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-NetworkSecurityGroupsNsg.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-NetworkSecurityGroupsNsg.yaml
new file mode 100644
index 000000000..61d544c69
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-NetworkSecurityGroupsNsg.yaml
@@ -0,0 +1,16 @@
+name: revcl-NetworkSecurityGroupsNsg
+title: Deploy network security groups (NSG) to your subnets to restrict or monitor
+ traffic to/from APIM.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 02661582-b3d1-48d1-9d7b-c6a918a0ca33
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#network-security-group-support
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-OtherAzureResourcesManagedIdentities.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-OtherAzureResourcesManagedIdentities.yaml
new file mode 100644
index 000000000..58421c082
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-OtherAzureResourcesManagedIdentities.yaml
@@ -0,0 +1,15 @@
+name: revcl-OtherAzureResourcesManagedIdentities
+title: Use managed identities to authenticate to other Azure resources whenever possible
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 791abd8b-7706-4e31-9569-afefde724be3
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#managed-identities
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-OwaspApiSecurityTopThreatsArticleReview.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-OwaspApiSecurityTopThreatsArticleReview.yaml
new file mode 100644
index 000000000..ea1ebc85d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-OwaspApiSecurityTopThreatsArticleReview.yaml
@@ -0,0 +1,16 @@
+name: revcl-OwaspApiSecurityTopThreatsArticleReview
+title: Review 'Recommendations to mitigate OWASP API Security Top 10 threats' article
+ and check what is applicable to your APIs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 074435f5-4a46-41ac-b521-d6114cb5d845
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/mitigate-owasp-api-threats
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-PrivateEndpointsIncomingTraffic.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-PrivateEndpointsIncomingTraffic.yaml
new file mode 100644
index 000000000..ca8b869d5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-PrivateEndpointsIncomingTraffic.yaml
@@ -0,0 +1,16 @@
+name: revcl-PrivateEndpointsIncomingTraffic
+title: Deploy Private Endpoints to filter incoming traffic when APIM is not deployed
+ to a VNet.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 67437a28-2721-4a2c-becd-caa54c8237a5
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#azure-private-link
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-PublicNetworkAccess.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-PublicNetworkAccess.yaml
new file mode 100644
index 000000000..9245d4452
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-PublicNetworkAccess.yaml
@@ -0,0 +1,15 @@
+name: revcl-PublicNetworkAccess
+title: Disable Public Network Access
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 0
+labels:
+ guid: d698adbd-3288-44cb-b10a-9b572da395ae
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#disable-public-network-access
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-SecureBackendServicesClientCertificateAuthentication.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-SecureBackendServicesClientCertificateAuthentication.yaml
new file mode 100644
index 000000000..1e6c5d88a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-SecureBackendServicesClientCertificateAuthentication.yaml
@@ -0,0 +1,15 @@
+name: revcl-SecureBackendServicesClientCertificateAuthentication
+title: Secure backend services using client certificate authentication
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: 2a67d143-1033-4c0a-8732-680896478f08
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/api-management/api-management-howto-mutual-certificates
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-VirtualNetworkService.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-VirtualNetworkService.yaml
new file mode 100644
index 000000000..6bdb62ba3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-VirtualNetworkService.yaml
@@ -0,0 +1,15 @@
+name: revcl-VirtualNetworkService
+title: Deploy the service within a Virtual Network (VNet)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 1
+labels:
+ guid: cd45c90e-7690-4753-930b-bf290c69c074
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#virtual-network-integration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-WebApplicationFirewallApplicationGateway.yaml b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-WebApplicationFirewallApplicationGateway.yaml
new file mode 100644
index 000000000..1055f9959
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/Security/revcl-WebApplicationFirewallApplicationGateway.yaml
@@ -0,0 +1,16 @@
+name: revcl-WebApplicationFirewallApplicationGateway
+title: Use web application firewall (WAF) by deploying Application Gateway in front
+ of APIM
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.apimanagement/service
+waf: Security
+severity: 0
+labels:
+ guid: 220c4ca6-6688-476b-b2b5-425a78e6fb87
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/api-management-security-baseline?toc=%2Fazure%2Fapi-management%2F&bc=%2Fazure%2Fapi-management%2Fbreadcrumb%2Ftoc.json#ns-6-deploy-web-application-firewall
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/aprl-ApiManagementInstanceApiManagementServices.yaml b/v2/recos/Services/MicrosoftApiManagement-service/aprl-ApiManagementInstanceApiManagementServices.yaml
new file mode 100644
index 000000000..41f5a5995
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/aprl-ApiManagementInstanceApiManagementServices.yaml
@@ -0,0 +1,24 @@
+name: aprl-ApiManagementInstanceApiManagementServices
+title: Migrate API Management services to Premium SKU to support Availability Zones
+description: |-
+ Upgrading the API Management instance to the Premium SKU adds support for Availability Zones, enhancing availability and resilience by distributing services across physically separate locations within Azure regions.
+source:
+ type: aprl
+ file: azure-resources/ApiManagement/service/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ApiManagement/service
+severity: 0
+labels:
+ guid: baf3bfc0-32a2-4c0c-926d-c9bf0b49808e
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all API Management instances that aren't Premium
+ resources
+ | where type =~ 'Microsoft.ApiManagement/service'
+ | extend skuName = sku.name
+ | where tolower(skuName) != tolower('premium')
+ | project recommendationId = "baf3bfc0-32a2-4c0c-926d-c9bf0b49808e", name, id, tags, param1=strcat("SKU: ", skuName)
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/aprl-AzureApiManagementPlatformVersionApiManagementStv.yaml b/v2/recos/Services/MicrosoftApiManagement-service/aprl-AzureApiManagementPlatformVersionApiManagementStv.yaml
new file mode 100644
index 000000000..af2fb82c1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/aprl-AzureApiManagementPlatformVersionApiManagementStv.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureApiManagementPlatformVersionApiManagementStv
+title: Azure API Management platform version should be stv2
+description: |-
+ Upgrading to API Management stv2 is required as stv1 retires on 31 Aug 2024, offering enhanced capabilities with the new platform version.
+source:
+ type: aprl
+ file: azure-resources/ApiManagement/service/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ApiManagement/service
+severity: 0
+labels:
+ guid: e35cf148-8eee-49d1-a1c9-956160f99e0b
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all API Management instances that aren't upgraded to platform version stv2
+ resources
+ | where type =~ 'Microsoft.ApiManagement/service'
+ | extend plat_version = properties.platformVersion
+ | extend skuName = sku.name
+ | where tolower(plat_version) != tolower('stv2')
+ | project recommendationId = "e35cf148-8eee-49d1-a1c9-956160f99e0b", name, id, tags, param1=strcat("Platform Version: ", plat_version) , param2=strcat("SKU: ", skuName)
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/aprl-PremiumApiManagementInstancesManagementApi.yaml b/v2/recos/Services/MicrosoftApiManagement-service/aprl-PremiumApiManagementInstancesManagementApi.yaml
new file mode 100644
index 000000000..89c2f1158
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/aprl-PremiumApiManagementInstancesManagementApi.yaml
@@ -0,0 +1,26 @@
+name: aprl-PremiumApiManagementInstancesManagementApi
+title: Enable Availability Zones on Premium API Management instances
+description: |-
+ Zone redundancy for APIM instances ensures the gateway and control plane (Management API, developer portal, Git configuration) are replicated across datacenters in physically separated zones, boosting resilience to zone failures.
+source:
+ type: aprl
+ file: azure-resources/ApiManagement/service/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ApiManagement/service
+severity: 0
+labels:
+ guid: 740f2c1c-8857-4648-80eb-47d2c56d5a50
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Premium API Management instances that aren't zone redundant
+ resources
+ | where type =~ 'Microsoft.ApiManagement/service'
+ | extend skuName = sku.name
+ | where tolower(skuName) == tolower('premium')
+ | where isnull(zones) or array_length(zones) < 2
+ | extend zoneValue = iff((isnull(zones)), "null", zones)
+ | project recommendationId = "740f2c1c-8857-4648-80eb-47d2c56d5a50", name, id, tags, param1="Zones: No Zone or Zonal", param2=strcat("Zones value: ", zoneValue )
diff --git a/v2/recos/Services/MicrosoftApiManagement-service/aprl-VariableTrafficPatternsApiManagementServices.yaml b/v2/recos/Services/MicrosoftApiManagement-service/aprl-VariableTrafficPatternsApiManagementServices.yaml
new file mode 100644
index 000000000..37063d2f5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApiManagement-service/aprl-VariableTrafficPatternsApiManagementServices.yaml
@@ -0,0 +1,18 @@
+name: aprl-VariableTrafficPatternsApiManagementServices
+title: Enable auto-scale for production workloads on API Management services
+description: |-
+ Use API Management with auto-scale for high availability in workloads that experience variable traffic patterns. There are several limitations with auto-scale, so review the documentation to ensure it meets your requirements.
+source:
+ type: aprl
+ file: azure-resources/ApiManagement/service/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ApiManagement/service
+severity: 2
+labels:
+ guid: c79680ea-de85-44fa-a596-f31fa17a952f
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-ActivePassiveApplicationGuidanceCrossRegionDr.yaml b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-ActivePassiveApplicationGuidanceCrossRegionDr.yaml
new file mode 100644
index 000000000..e3a23c5e7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-ActivePassiveApplicationGuidanceCrossRegionDr.yaml
@@ -0,0 +1,16 @@
+name: revcl-ActivePassiveApplicationGuidanceCrossRegionDr
+title: For cross-region DR, deploy container apps in multiple regions and follow active/active
+ or active/passive application guidance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.app/containerapps
+waf: Reliability
+severity: 0
+labels:
+ guid: ccaa4fc2-fdbc-4432-8bb7-f7e6469e4dc3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-FrontDoorClosestRegion.yaml b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-FrontDoorClosestRegion.yaml
new file mode 100644
index 000000000..f611b1b4b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-FrontDoorClosestRegion.yaml
@@ -0,0 +1,15 @@
+name: revcl-FrontDoorClosestRegion
+title: Use Front Door or Traffic Manager to route traffic to the closest region
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.app/containerapps
+waf: Reliability
+severity: 0
+labels:
+ guid: 2ffada86-c031-4933-bf7d-0c45bc4e5919
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#cross-region-disaster-recovery-and-business-continuity
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-LeverageAvailabilityZones.yaml b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-LeverageAvailabilityZones.yaml
new file mode 100644
index 000000000..26fa658c8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-LeverageAvailabilityZones.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAvailabilityZones
+title: Leverage Availability Zones if regionally applicable
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.app/containerapps
+waf: Reliability
+severity: 0
+labels:
+ guid: af416482-663c-4ed6-b195-b44c7068e09c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#availability-zone-support
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-OneReplicaZoneRedundancy.yaml b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-OneReplicaZoneRedundancy.yaml
new file mode 100644
index 000000000..4a55bd02a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApp-containerApps/Reliability/revcl-OneReplicaZoneRedundancy.yaml
@@ -0,0 +1,15 @@
+name: revcl-OneReplicaZoneRedundancy
+title: Use more than one replica and enable Zone Redundancy.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.app/containerapps
+waf: Reliability
+severity: 0
+labels:
+ guid: 95bc80ec-6499-4d14-a7d2-7d296b1d8abc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/reliability-azure-container-apps?tabs=azure-cli#set-up-zone-redundancy-in-your-container-apps-environment
+queries: {}
diff --git a/v2/recos/Services/MicrosoftApp-containerApps/aprl-ContainerHealthProbesContainerApps.yaml b/v2/recos/Services/MicrosoftApp-containerApps/aprl-ContainerHealthProbesContainerApps.yaml
new file mode 100644
index 000000000..87b6d3835
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApp-containerApps/aprl-ContainerHealthProbesContainerApps.yaml
@@ -0,0 +1,18 @@
+name: aprl-ContainerHealthProbesContainerApps
+title: Enable container health probes
+description: |-
+ Enable container health probes to monitor the health of your container apps and ensure that unhealthy containers are restarted automatically.
+source:
+ type: aprl
+ file: azure-resources/App/containerApps/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.App/containerApps
+severity: 0
+labels:
+ guid: 8dbcd94b-0948-4df3-b608-1946726c3abf
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftApp-managedenvironments/aprl-ZoneRedundantContainerAppEnvironmentsContainerAppsEnvironment.yaml b/v2/recos/Services/MicrosoftApp-managedenvironments/aprl-ZoneRedundantContainerAppEnvironmentsContainerAppsEnvironment.yaml
new file mode 100644
index 000000000..34692dd9c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftApp-managedenvironments/aprl-ZoneRedundantContainerAppEnvironmentsContainerAppsEnvironment.yaml
@@ -0,0 +1,24 @@
+name: aprl-ZoneRedundantContainerAppEnvironmentsContainerAppsEnvironment
+title: Deploy zone redundant Container app environments
+description: |-
+ To take advantage of availability zones, you must enable zone redundancy when you create a Container Apps environment. The environment must include a virtual network with an available subnet. To ensure proper distribution of replicas, set your app's minimum replica count to three.
+source:
+ type: aprl
+ file: azure-resources/App/managedEnvironments/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.App/managedenvironments
+severity: 0
+labels:
+ guid: f4201965-a88d-449d-b3b4-021394719eb2
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // The query filters the qualified Container app environments that do not have Zone Redundancy enabled.
+ resources
+ | where type =~ "microsoft.app/managedenvironments"
+ | where tobool(properties.zoneRedundant) == false
+ | project recommendationId = "f4201965-a88d-449d-b3b4-021394719eb2", name, id, tags, param1 = "AvailabilityZones: Single Zone"
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftAppConfiguration-configurationStores/aprl-AppConfigurationStandardTierFreeTier.yaml b/v2/recos/Services/MicrosoftAppConfiguration-configurationStores/aprl-AppConfigurationStandardTierFreeTier.yaml
new file mode 100644
index 000000000..b36896a16
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppConfiguration-configurationStores/aprl-AppConfigurationStandardTierFreeTier.yaml
@@ -0,0 +1,23 @@
+name: aprl-AppConfigurationStandardTierFreeTier
+title: Upgrade to App Configuration Standard tier
+description: |-
+ SLA is not available for Free tier. Upgrade to the Standard tier to get an SLA of 99.9%
+source:
+ type: aprl
+ file: azure-resources/AppConfiguration/configurationStores/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AppConfiguration/configurationStores
+severity: 0
+labels:
+ guid: 2102a57a-a056-4d5e-afe5-9df9f92177ca
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Upgrade to App Configuration Standard tier
+ resources
+ | where type =~ "Microsoft.AppConfiguration/configurationStores"
+ | where sku.name == "free"
+ | project recommendationId = "2102a57a-a056-4d5e-afe5-9df9f92177ca", name, id, tags, param1 = "Upgrade to Standard SKU"
diff --git a/v2/recos/Services/MicrosoftAppConfiguration-configurationStores/aprl-AzureAppConfigurationSoftDeletedStores.yaml b/v2/recos/Services/MicrosoftAppConfiguration-configurationStores/aprl-AzureAppConfigurationSoftDeletedStores.yaml
new file mode 100644
index 000000000..3b84a37f0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppConfiguration-configurationStores/aprl-AzureAppConfigurationSoftDeletedStores.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureAppConfigurationSoftDeletedStores
+title: Enable Purge protection for Azure App Configuration
+description: |-
+ With Purge protection enabled, soft deleted stores can't be purged in the retention period. If disabled, the soft deleted store can be purged before the retention period expires.
+source:
+ type: aprl
+ file: azure-resources/AppConfiguration/configurationStores/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.AppConfiguration/configurationStores
+severity: 2
+labels:
+ guid: bb4c8db4-f821-475b-b1ea-16e95358665e
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Purge protection should be enabled for App Configuration stores to prevent accidental deletion of configuration data.
+ resources
+ | where type =~ "Microsoft.AppConfiguration/configurationStores"
+ | where sku.name <> "free"
+ | where (properties.enablePurgeProtection <> true) or isnull(properties.enablePurgeProtection )
+ | project recommendationId = "bb4c8db4-f821-475b-b1ea-16e95358665e", name, id, tags, param1 = "Enable purge protection"
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AppInstanceApps.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AppInstanceApps.yaml
new file mode 100644
index 000000000..102ab3fd9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AppInstanceApps.yaml
@@ -0,0 +1,15 @@
+name: revcl-AppInstanceApps
+title: Use more than 1 app instance for your apps
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: ffc735ad-fbb1-4802-b43f-ad6387c4c066
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/spring-apps/concept-understand-app-and-deployment
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsApplicationInsights.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsApplicationInsights.yaml
new file mode 100644
index 000000000..8d08735c3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsApplicationInsights.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureSpringAppsApplicationInsights
+title: Monitor Azure Spring Apps with logs, metrics and tracing. Integrate ASA with
+ application insights and track failures and create workbooks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: 7504c230-6035-4183-95a5-85762acc6075
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/spring-apps/diagnostic-services
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsAvailabilityZones.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsAvailabilityZones.yaml
new file mode 100644
index 000000000..fd804e554
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsAvailabilityZones.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureSpringAppsAvailabilityZones
+title: In supported region, Azure Spring Apps can be deployed as zone redundant, which
+ means that instances are automatically distributed across availability zones. This
+ feature is only available in Standard and Enterprise tiers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: ff1ae6a7-9301-4feb-9d11-56cd72f1d4ef
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/reliability-spring-apps
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsInstancesMultipleRegions.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsInstancesMultipleRegions.yaml
new file mode 100644
index 000000000..757177dcc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-AzureSpringAppsInstancesMultipleRegions.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureSpringAppsInstancesMultipleRegions
+title: Azure Spring Apps instances could be created in multiple regions for your applications
+ and traffic could be routed by Traffic Manager/Front Door.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: fbcb40ac-9480-4a6d-bcf4-8081252a6716
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/web-apps/spring-apps/architectures/spring-apps-multi-region
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-BlueGreenDeploymentStrategiesAzureSpringApps.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-BlueGreenDeploymentStrategiesAzureSpringApps.yaml
new file mode 100644
index 000000000..d7571ca80
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-BlueGreenDeploymentStrategiesAzureSpringApps.yaml
@@ -0,0 +1,18 @@
+name: revcl-BlueGreenDeploymentStrategiesAzureSpringApps
+title: Azure Spring Apps permits two deployments for every app, only one of which
+ receives production traffic. You can achieve zero downtime with blue green deployment
+ strategies. Blue green deployment is only available in Standard and Enterprise tiers.
+ You could automate deployment using CI/CD with ADO/GitHub actions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: 6d8e32a8-3892-479d-a40b-10f6b4f6f298
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/spring-apps/concepts-blue-green-deployment-strategies
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-MissionCriticalAppsEnterprisePlan.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-MissionCriticalAppsEnterprisePlan.yaml
new file mode 100644
index 000000000..c876f1f00
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-MissionCriticalAppsEnterprisePlan.yaml
@@ -0,0 +1,16 @@
+name: revcl-MissionCriticalAppsEnterprisePlan
+title: Use Enterprise plan for commercial support of spring boot for mission critical
+ apps. With other tiers you get OSS support.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: dfcaffd1-d27c-4ef2-998d-64c1df3a7ac3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/spring-apps/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-SpringCloudGateway.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-SpringCloudGateway.yaml
new file mode 100644
index 000000000..1b340b58d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-SpringCloudGateway.yaml
@@ -0,0 +1,15 @@
+name: revcl-SpringCloudGateway
+title: Set up autoscaling in Spring Cloud Gateway
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 1
+labels:
+ guid: 1eb48d58-3eec-4ef5-80b0-d2b0dde3f0c6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/spring-apps/how-to-configure-enterprise-spring-cloud-gateway
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-StandardConsumptionDedicatedPlan.yaml b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-StandardConsumptionDedicatedPlan.yaml
new file mode 100644
index 000000000..eb6463e98
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAppPlatform-Spring/Reliability/revcl-StandardConsumptionDedicatedPlan.yaml
@@ -0,0 +1,15 @@
+name: revcl-StandardConsumptionDedicatedPlan
+title: Enable autoscale for the apps with Standard consumption & dedicated plan.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.appplatform/spring
+waf: Reliability
+severity: 2
+labels:
+ guid: 97411607-b6fd-4335-99d1-9885faf4e392
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/spring-apps/how-to-setup-autoscale
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-AzurePolicyDefinitionsAzureRoleAssignments.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-AzurePolicyDefinitionsAzureRoleAssignments.yaml
new file mode 100644
index 000000000..d0810e102
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-AzurePolicyDefinitionsAzureRoleAssignments.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzurePolicyDefinitionsAzureRoleAssignments
+title: Map regulatory and compliance requirements to Azure Policy definitions and
+ Azure role assignments.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: d8a2adb1-17d6-4326-af62-5ca44e5695f2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-DataSovereigntyRequirementsAzurePolicies.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-DataSovereigntyRequirementsAzurePolicies.yaml
new file mode 100644
index 000000000..b4d3b263d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-DataSovereigntyRequirementsAzurePolicies.yaml
@@ -0,0 +1,18 @@
+name: revcl-DataSovereigntyRequirementsAzurePolicies
+title: If any data sovereignty requirements exist, Azure Policies can be deployed
+ to enforce them
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 5a917e1f-348e-4f25-9c27-d42e8bbac757
+links:
+- type: docs
+ url: https://learn.microsoft.com/industry/release-plan/2023wave2/cloud-sovereignty/enable-data-sovereignty-policy-baseline
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-your-cloud-data/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-HighestAppropriateLevelPolicyAssignments.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-HighestAppropriateLevelPolicyAssignments.yaml
new file mode 100644
index 000000000..af0922c40
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-HighestAppropriateLevelPolicyAssignments.yaml
@@ -0,0 +1,16 @@
+name: revcl-HighestAppropriateLevelPolicyAssignments
+title: Manage policy assignments at the highest appropriate level with exclusions
+ at bottom levels, if required.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 3829e7e3-1618-4368-9a04-77a209945bda
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-IntermediateRootManagementGroupAzurePolicyDefinitions.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-IntermediateRootManagementGroupAzurePolicyDefinitions.yaml
new file mode 100644
index 000000000..9150860f4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-IntermediateRootManagementGroupAzurePolicyDefinitions.yaml
@@ -0,0 +1,16 @@
+name: revcl-IntermediateRootManagementGroupAzurePolicyDefinitions
+title: Establish Azure Policy definitions at the intermediate root management group
+ so that they can be assigned at inherited scopes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 223ace8c-b123-408c-a501-7f154e3ab369
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-LeverageAzurePolicyPolicyInitiatives.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-LeverageAzurePolicyPolicyInitiatives.yaml
new file mode 100644
index 000000000..1235990a0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-LeverageAzurePolicyPolicyInitiatives.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAzurePolicyPolicyInitiatives
+title: Leverage Azure Policy strategically, define controls for your environment,
+ using Policy Initiatives to group related policies.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 0
+labels:
+ guid: 5c986cb2-9131-456a-8247-6e49f541acdc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-OperationalOverheadPolicies.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-OperationalOverheadPolicies.yaml
new file mode 100644
index 000000000..cc85c6f5d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-OperationalOverheadPolicies.yaml
@@ -0,0 +1,15 @@
+name: revcl-OperationalOverheadPolicies
+title: Use built-in policies where possible to minimize operational overhead.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: be7d7e48-4327-46d8-adc0-55bcf619e8a1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-ResourcePolicyContributorRoleCentralItTeam.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-ResourcePolicyContributorRoleCentralItTeam.yaml
new file mode 100644
index 000000000..63f988c8b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-ResourcePolicyContributorRoleCentralItTeam.yaml
@@ -0,0 +1,21 @@
+name: revcl-ResourcePolicyContributorRoleCentralItTeam
+title: Assign the built-in Resource Policy Contributor role at a particular scope
+ to enable application-level governance.
+description: Assigning the Resource Policy Contributor role to specific scopes allows
+ you to delegate policy management to relevant teams. For instance, a central IT
+ team may oversee management group-level policies, while application teams handle
+ policies for their subscriptions, enabling distributed governance with adherence
+ to organizational standards.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 3f988795-25d6-4268-a6d7-0ba6c97be995
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview#azure-rbac-permissions-in-azure-policy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-RootManagementGroupScopeAzurePolicyAssignments.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-RootManagementGroupScopeAzurePolicyAssignments.yaml
new file mode 100644
index 000000000..5ed9e122c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-RootManagementGroupScopeAzurePolicyAssignments.yaml
@@ -0,0 +1,16 @@
+name: revcl-RootManagementGroupScopeAzurePolicyAssignments
+title: Limit the number of Azure Policy assignments made at the root management group
+ scope to avoid managing through exclusions at inherited scopes.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 19048384-5c98-46cb-8913-156a12476e49
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereignLandingZoneSovereignControlObjectives-1.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereignLandingZoneSovereignControlObjectives-1.yaml
new file mode 100644
index 000000000..f27ab95fb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereignLandingZoneSovereignControlObjectives-1.yaml
@@ -0,0 +1,14 @@
+name: revcl-SovereignLandingZoneSovereignControlObjectives-1
+title: For Sovereign Landing Zone, process is in place for CRUD of 'Sovereign Control
+ objectives to policy mapping'.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 9b461617-db7b-4399-8ac6-d4eb7153893a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereignLandingZoneSovereignControlObjectives.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereignLandingZoneSovereignControlObjectives.yaml
new file mode 100644
index 000000000..0113f232c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereignLandingZoneSovereignControlObjectives.yaml
@@ -0,0 +1,16 @@
+name: revcl-SovereignLandingZoneSovereignControlObjectives
+title: For Sovereign Landing Zone, sovereign Control objectives to policy mapping'
+ is documented.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: caeea0e9-1024-41df-a52e-d99c3f22a6f4
+links:
+- type: docs
+ url: https://learn.microsoft.com/industry/sovereignty/policy-portfolio-baseline
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereigntyPolicyBaselinePolicyInitiativeSovereignLandingZone.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereigntyPolicyBaselinePolicyInitiativeSovereignLandingZone.yaml
new file mode 100644
index 000000000..9b85545ee
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SovereigntyPolicyBaselinePolicyInitiativeSovereignLandingZone.yaml
@@ -0,0 +1,16 @@
+name: revcl-SovereigntyPolicyBaselinePolicyInitiativeSovereignLandingZone
+title: For Sovereign Landing Zone, sovereignty policy baseline' policy initiative
+ is deployed and and assigned at correct MG level.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 1
+labels:
+ guid: 78b22132-b41c-460b-a4d3-df8f73a67dc2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/sovereign-landing-zone
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SubscriptionManagementGroupLevelAzurePolicy.yaml b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SubscriptionManagementGroupLevelAzurePolicy.yaml
new file mode 100644
index 000000000..d59539404
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAuthorization-policyDefinitions/Security/revcl-SubscriptionManagementGroupLevelAzurePolicy.yaml
@@ -0,0 +1,16 @@
+name: revcl-SubscriptionManagementGroupLevelAzurePolicy
+title: Use Azure Policy to control which services users can provision at the subscription/management
+ group level
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.authorization/policydefinitions
+waf: Security
+severity: 2
+labels:
+ guid: 43334f24-9116-4341-a2ba-527526944008
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/mcsb-asset-management#am-2-use-only-approved-services
+queries: {}
diff --git a/v2/recos/Services/MicrosoftAutomation-automationAccounts/aprl-ReplicaAutomationAccountAutomationAccounts.yaml b/v2/recos/Services/MicrosoftAutomation-automationAccounts/aprl-ReplicaAutomationAccountAutomationAccounts.yaml
new file mode 100644
index 000000000..054f4cfdf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftAutomation-automationAccounts/aprl-ReplicaAutomationAccountAutomationAccounts.yaml
@@ -0,0 +1,18 @@
+name: aprl-ReplicaAutomationAccountAutomationAccounts
+title: Set up disaster recovery of Automation accounts and its dependent resources
+description: |-
+ Set up disaster recovery for Automation accounts and resources like Modules, Connections, Credentials, Certificates, Variables, and Schedules to deal with region or zone failures. A replica Automation account should be ready in a secondary region for failover.
+source:
+ type: aprl
+ file: azure-resources/Automation/automationAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Automation/automationAccounts
+severity: 0
+labels:
+ guid: 67205887-0733-466e-b50e-b1cd7316c514
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftBatch-batchAccounts/aprl-CrossRegionDisasterRecoveryNecessaryCoreNumbers.yaml b/v2/recos/Services/MicrosoftBatch-batchAccounts/aprl-CrossRegionDisasterRecoveryNecessaryCoreNumbers.yaml
new file mode 100644
index 000000000..081700771
--- /dev/null
+++ b/v2/recos/Services/MicrosoftBatch-batchAccounts/aprl-CrossRegionDisasterRecoveryNecessaryCoreNumbers.yaml
@@ -0,0 +1,18 @@
+name: aprl-CrossRegionDisasterRecoveryNecessaryCoreNumbers
+title: Monitor Batch Account quota
+description: |-
+ To ensure cross-region disaster recovery and business continuity, set the right quotas for all Batch accounts to allocate necessary core numbers upfront, preventing execution interruptions from reaching quota limits.
+source:
+ type: aprl
+ file: azure-resources/Batch/batchAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Batch/batchAccounts
+severity: 1
+labels:
+ guid: 3464854d-6f75-4922-95e4-a2a308b53ce6
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftBatch-batchAccounts/aprl-VirtualMachineConfigurationAzureBatchPools.yaml b/v2/recos/Services/MicrosoftBatch-batchAccounts/aprl-VirtualMachineConfigurationAzureBatchPools.yaml
new file mode 100644
index 000000000..6667e70c5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftBatch-batchAccounts/aprl-VirtualMachineConfigurationAzureBatchPools.yaml
@@ -0,0 +1,18 @@
+name: aprl-VirtualMachineConfigurationAzureBatchPools
+title: Create an Azure Batch pool across Availability Zones
+description: |-
+ When using Virtual Machine Configuration for Azure Batch pools, opting to distribute your pool across Availability Zones bolsters your compute nodes against Azure datacenter failures.
+source:
+ type: aprl
+ file: azure-resources/Batch/batchAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Batch/batchAccounts
+severity: 0
+labels:
+ guid: 71cfab8f-d588-4742-b175-b6e07ae48dbd
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-EuBotRegionalServiceAzureBotService.yaml b/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-EuBotRegionalServiceAzureBotService.yaml
new file mode 100644
index 000000000..232e81c95
--- /dev/null
+++ b/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-EuBotRegionalServiceAzureBotService.yaml
@@ -0,0 +1,21 @@
+name: revcl-EuBotRegionalServiceAzureBotService
+title: Azure Bot Service runs in active-active mode for both global and regional services.
+ When an outage occurs, you don't need to detect errors or manage the service. Azure
+ Bot Service automatically performs auto failover and auto recovery in a multi-region
+ geographical architecture. For the EU bot regional service, Azure Bot Service provides
+ two full regions inside Europe with active/active replication to ensure redundancy.
+ For the global bot service, all available regions/geographies can be served as the
+ global footprint.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.botservice/botservices
+waf: Reliability
+severity: 1
+labels:
+ guid: 19bfe9d5-5d04-4c3c-9919-ca1b2d1215ae
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/reliability/reliability-bot#cross-region-disaster-recovery-in-multi-region-geography
+queries: {}
diff --git a/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-LocalDataResidencyRegionalCompliance.yaml b/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-LocalDataResidencyRegionalCompliance.yaml
new file mode 100644
index 000000000..741646013
--- /dev/null
+++ b/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-LocalDataResidencyRegionalCompliance.yaml
@@ -0,0 +1,15 @@
+name: revcl-LocalDataResidencyRegionalCompliance
+title: Deploying bots with local data residency and regional compliance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.botservice/botservices
+waf: Reliability
+severity: 1
+labels:
+ guid: e65de8e1-3f9c-4cbd-9682-66abca264f9a
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization
+queries: {}
diff --git a/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-ReliabilitySupportRecommendationsAzureBotService.yaml b/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-ReliabilitySupportRecommendationsAzureBotService.yaml
new file mode 100644
index 000000000..4c05e557b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftBotService-botServices/Reliability/revcl-ReliabilitySupportRecommendationsAzureBotService.yaml
@@ -0,0 +1,15 @@
+name: revcl-ReliabilitySupportRecommendationsAzureBotService
+title: Follow reliability support recommendations in Azure Bot Service
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.botservice/botservices
+waf: Reliability
+severity: 1
+labels:
+ guid: 6ad48408-ee72-4734-a476-ba28fdcf590c
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/reliability/reliability-bot
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorCustomAccessRules.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorCustomAccessRules.yaml
new file mode 100644
index 000000000..99f090eb5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorCustomAccessRules.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureFrontDoorCustomAccessRules
+title: Use geo-filtering in Azure Front Door
+description: |-
+ Azure Front Door's geo-filtering through WAF enables defining custom access rules by country/region to restrict or allow web app access.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: b515690d-3bf9-3a49-8d38-188e0fd45896
+ area: Security
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorHeadHttpMethods.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorHeadHttpMethods.yaml
new file mode 100644
index 000000000..ed67911ee
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorHeadHttpMethods.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureFrontDoorHeadHttpMethods
+title: Use HEAD health probes
+description: |-
+ Health probes in Azure Front Door can use GET or HEAD HTTP methods. Using the HEAD method for health probes is a recommended practice because it reduces the traffic load on your origins, being less resource-intensive.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 5783defe-b49e-d947-84f7-d8677593f324
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorImportantSecurityPatches.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorImportantSecurityPatches.yaml
new file mode 100644
index 000000000..8619e93d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorImportantSecurityPatches.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureFrontDoorImportantSecurityPatches
+title: Use the latest API version and SDK version
+description: |-
+ When working with Azure Front Door through APIs, ARM templates, Bicep, or SDKs, using the latest API or SDK version is crucial. Updates bring new functions, important security patches, and bug fixes.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 52bc9a7b-23c8-bc4c-9d2a-7bc43b50104a
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorMicrosoftBackboneNetwork.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorMicrosoftBackboneNetwork.yaml
new file mode 100644
index 000000000..096067f92
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorMicrosoftBackboneNetwork.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureFrontDoorMicrosoftBackboneNetwork
+title: Secure your Origin with Private Link in Azure Front Door
+description: |-
+ Azure Private Link enables secure access to Azure PaaS and services over a private endpoint in your virtual network, ensuring traffic goes over the Microsoft backbone network, not the public internet.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 1cfe7834-56ec-ff41-b11d-993734705dba
+ area: Security
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorSecureConnections.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorSecureConnections.yaml
new file mode 100644
index 000000000..bf3922efd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-AzureFrontDoorSecureConnections.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureFrontDoorSecureConnections
+title: Use HTTP to HTTPS redirection
+description: |-
+ Using HTTPS is ideal for secure connections. However, for compatibility with older clients, HTTP requests may be necessary. Azure Front Door enables auto redirection of HTTP to HTTPS, enhancing security without sacrificing accessibility.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 0
+labels:
+ guid: 24ab9f11-a3e4-3043-a985-22cf94c4933a
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Use HTTP to HTTPS redirection
+ cdnresources
+ | where type == "microsoft.cdn/profiles/afdendpoints/routes"
+ | extend httpsRedirect=tostring(properties.httpsRedirect)
+ | project id,name,httpsRedirect,tags
+ | where httpsRedirect !~ "enabled"
+ | project recommendationId= "24ab9f11-a3e4-3043-a985-22cf94c4933a", name,id,tags,param1=strcat("httpsRedirect:",httpsRedirect)
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorAzureHostedOrigins.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorAzureHostedOrigins.yaml
new file mode 100644
index 000000000..a1b63b5f8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorAzureHostedOrigins.yaml
@@ -0,0 +1,25 @@
+name: aprl-FrontDoorAzureHostedOrigins
+title: Use end-to-end TLS
+description: |-
+ Front Door terminates TCP and TLS connections from clients and establishes new connections from each PoP to the origin. Securing these connections with TLS, even for Azure-hosted origins, ensures data is always encrypted during transit.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 0
+labels:
+ guid: d9bd6780-0d6f-cd4c-bc66-8ddcab12f3d1
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Use end-to-end TLS
+ cdnresources
+ | where type == "microsoft.cdn/profiles/afdendpoints/routes"
+ | extend forwardingProtocol=tostring(properties.forwardingProtocol),supportedProtocols=properties.supportedProtocols
+ | project id,name,forwardingProtocol,supportedProtocols,tags
+ | where forwardingProtocol !~ "httpsonly" or supportedProtocols has "http"
+ | project recommendationId= "d9bd6780-0d6f-cd4c-bc66-8ddcab12f3d1", name,id,tags,param1=strcat("forwardingProtocol:",forwardingProtocol),param2=strcat("supportedProtocols:",supportedProtocols)
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorHealthProbesOneOrigin.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorHealthProbesOneOrigin.yaml
new file mode 100644
index 000000000..575345bab
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorHealthProbesOneOrigin.yaml
@@ -0,0 +1,38 @@
+name: aprl-FrontDoorHealthProbesOneOrigin
+title: Disable health probes when there is only one origin in an origin group
+description: |-
+ Front Door health probes help detect unavailable or unhealthy origins, directing traffic to alternate origins if needed.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 2
+labels:
+ guid: 38f3d542-6de6-a44b-86c6-97e3be690281
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Disable health probes when there is only one origin in an origin group
+ cdnresources
+ | where type =~ "microsoft.cdn/profiles/origingroups"
+ | extend healthprobe=tostring(properties.healthProbeSettings)
+ | project origingroupname=name, id, tags, resourceGroup, subscriptionId, healthprobe
+ | join (
+ cdnresources
+ | where type =~ "microsoft.cdn/profiles/origingroups/Origins"
+ | extend origingroupname = tostring(properties.originGroupName)
+ )
+ on origingroupname
+ | summarize origincount=count(), enabledhealthprobecount=countif(healthprobe != "") by origingroupname, id, tostring(tags), resourceGroup, subscriptionId
+ | where origincount == 1 and enabledhealthprobecount != 0
+ | project
+ recommendationId = "38f3d542-6de6-a44b-86c6-97e3be690281",
+ name=origingroupname,
+ id,
+ todynamic(tags),
+ param1 = strcat("origincount:", origincount),
+ param2 = strcat("enabledhealthprobecount:", enabledhealthprobecount)
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorLogsComprehensiveTelemetry.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorLogsComprehensiveTelemetry.yaml
new file mode 100644
index 000000000..fd1da0e94
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorLogsComprehensiveTelemetry.yaml
@@ -0,0 +1,18 @@
+name: aprl-FrontDoorLogsComprehensiveTelemetry
+title: Configure logs
+description: |-
+ Front Door logs offer comprehensive telemetry on each request, crucial for understanding your solution's performance and responses, especially when caching is enabled, as origin servers might not receive every request.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 1ad74c3c-e3d7-0046-b83f-a2199974ef15
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorTraffic.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorTraffic.yaml
new file mode 100644
index 000000000..e00ef034c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorTraffic.yaml
@@ -0,0 +1,18 @@
+name: aprl-FrontDoorTraffic
+title: Restrict traffic to your origins
+description: |-
+ Front Door's features perform optimally when traffic exclusively comes through Front Door. It's advised to set up your origin to deny access to traffic that bypasses Front Door.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 0
+labels:
+ guid: 6c40b7ae-2bea-5748-be1a-9e9e3b834649
+ area: Security
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorWebApplicationFirewallInternetFacingApplications.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorWebApplicationFirewallInternetFacingApplications.yaml
new file mode 100644
index 000000000..262fdc1f3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-FrontDoorWebApplicationFirewallInternetFacingApplications.yaml
@@ -0,0 +1,56 @@
+name: aprl-FrontDoorWebApplicationFirewallInternetFacingApplications
+title: Enable the WAF
+description: |-
+ For internet-facing applications, enabling the Front Door web application firewall (WAF) and configuring it to use managed rules is recommended for protection against a wide range of attacks using Microsoft-managed rules.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 1bd2b7e8-400f-e64a-99a2-c572f7b08a62
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Enable the WAF
+
+ resources
+ | where type =~ "microsoft.cdn/profiles" and sku has "AzureFrontDoor"
+ | project name, cdnprofileid=tolower(id), tostring(tags), resourceGroup, subscriptionId,skuname=tostring(sku.name)
+ | join kind= fullouter (
+ cdnresources
+ | where type == "microsoft.cdn/profiles/securitypolicies"
+ | extend wafpolicyid=tostring(properties['parameters']['wafPolicy']['id'])
+ | extend splitid=split(id, "/")
+ | extend cdnprofileid=tolower(strcat_array(array_slice(splitid, 0, 8), "/"))
+ | project secpolname=name, cdnprofileid, wafpolicyid
+ )
+ on cdnprofileid
+ | project name, cdnprofileid, secpolname, wafpolicyid,skuname
+ | join kind = fullouter (
+ resources
+ | where type == "microsoft.network/frontdoorwebapplicationfirewallpolicies"
+ | extend
+ managedrulesenabled=iff(tostring(properties.managedRules.managedRuleSets) != "[]", true, false),
+ enabledState = tostring(properties.policySettings.enabledState)
+ | project afdwafname=name, managedrulesenabled, wafpolicyid=id, enabledState, tostring(tags)
+ )
+ on wafpolicyid
+ | where name != ""
+ | summarize
+ associatedsecuritypolicies=countif(secpolname != ""),
+ wafswithmanagedrules=countif(managedrulesenabled == 1)
+ by name, id=cdnprofileid, tags,skuname
+ | where associatedsecuritypolicies == 0 or wafswithmanagedrules == 0
+ | project
+ recommendationId = "1bd2b7e8-400f-e64a-99a2-c572f7b08a62",
+ name,
+ id,
+ todynamic(tags),
+ param1 = strcat("associatedsecuritypolicies:", associatedsecuritypolicies),
+ param2 = strcat("wafswithmanagedrules:", wafswithmanagedrules),
+ param3 = strcat("skuname:",skuname)
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-GoodHealthProbeEndpointsAzureFrontDoor.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-GoodHealthProbeEndpointsAzureFrontDoor.yaml
new file mode 100644
index 000000000..9a8b5a717
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-GoodHealthProbeEndpointsAzureFrontDoor.yaml
@@ -0,0 +1,18 @@
+name: aprl-GoodHealthProbeEndpointsAzureFrontDoor
+title: Select good health probe endpoints
+description: |-
+ Consider selecting a webpage or location specifically designed for health monitoring as the endpoint for Azure Front Door's health probes. This should encompass the status of critical components like application servers, databases, and caches to serve production traffic efficiently.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 5225bba3-28ec-1e43-8986-7eedfd466d65
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-KeyVaultCertificateVersionNewCertificateVersions.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-KeyVaultCertificateVersionNewCertificateVersions.yaml
new file mode 100644
index 000000000..bc4ddbadd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-KeyVaultCertificateVersionNewCertificateVersions.yaml
@@ -0,0 +1,18 @@
+name: aprl-KeyVaultCertificateVersionNewCertificateVersions
+title: Use latest version for customer-managed certificates
+description: |-
+ If you use your own TLS certificates, set the Key Vault certificate version to 'Latest' to avoid reconfiguring Azure Front Door for new certificate versions and waiting for deployment across Front Door's environments.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: 4638c2c0-03de-6d42-9e09-82ee4478cbf3
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-ManagedTlsCertificatesFrontDoor.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-ManagedTlsCertificatesFrontDoor.yaml
new file mode 100644
index 000000000..cce2e3f3e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-ManagedTlsCertificatesFrontDoor.yaml
@@ -0,0 +1,18 @@
+name: aprl-ManagedTlsCertificatesFrontDoor
+title: Use managed TLS certificates
+description: |-
+ When Front Door manages your TLS certificates, it reduces your operational costs and helps you to avoid costly outages caused by forgetting to renew a certificate. Front Door automatically issues and rotates the managed TLS certificates.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 0
+labels:
+ guid: 29d65c41-2fad-d142-95eb-9eab95f6c0a5
+ area: Security
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-SameDomainNameCustomDomainNames.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-SameDomainNameCustomDomainNames.yaml
new file mode 100644
index 000000000..6bd3be15b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-SameDomainNameCustomDomainNames.yaml
@@ -0,0 +1,18 @@
+name: aprl-SameDomainNameCustomDomainNames
+title: Use the same domain name on Front Door and your origin
+description: |-
+ Front Door can rewrite Host headers for custom domain names routing to a single origin, useful for avoiding custom domain configuration at both Front Door and the origin.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 1
+labels:
+ guid: cd6a32af-747a-e649-82a7-a98f528ca842
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCdn-profiles/aprl-SimpleGlobalLoadBalancingAzureFrontDoor.yaml b/v2/recos/Services/MicrosoftCdn-profiles/aprl-SimpleGlobalLoadBalancingAzureFrontDoor.yaml
new file mode 100644
index 000000000..2a2d5cb7e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCdn-profiles/aprl-SimpleGlobalLoadBalancingAzureFrontDoor.yaml
@@ -0,0 +1,47 @@
+name: aprl-SimpleGlobalLoadBalancingAzureFrontDoor
+title: Avoid combining Traffic Manager and Front Door
+description: |-
+ For most solutions, choose either Azure Front Door for content caching, CDN, TLS termination, and WAF, or Traffic Manager for simple global load balancing.
+source:
+ type: aprl
+ file: azure-resources/Cdn/profiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cdn/profiles
+severity: 0
+labels:
+ guid: 9437634c-d69e-2747-b13e-631c13182150
+ area: Business Continuity
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Avoid combining Traffic Manager and Front Door
+ resources
+ | where type == "microsoft.network/trafficmanagerprofiles"
+ | mvexpand(properties.endpoints)
+ | extend endpoint=tostring(properties_endpoints.properties.target)
+ | project name, trafficmanager=id, matchname=endpoint, tags
+ | join (
+ resources
+ | where type =~ "microsoft.cdn/profiles/afdendpoints"
+ | extend matchname= tostring(properties.hostName)
+ | extend splitid=split(id, "/")
+ | extend frontdoorid=tolower(strcat_array(array_slice(splitid, 0, 8), "/"))
+ | project name, id, matchname, frontdoorid, type
+ | union
+ (cdnresources
+ | where type =~ "Microsoft.Cdn/Profiles/CustomDomains"
+ | extend matchname= tostring(properties.hostName)
+ | extend splitid=split(id, "/")
+ | extend frontdoorid=tolower(strcat_array(array_slice(splitid, 0, 8), "/"))
+ | project name, id, matchname, frontdoorid, type)
+ )
+ on matchname
+ | project
+ recommendationId = "9437634c-d69e-2747-b13e-631c13182150",
+ name=split(trafficmanager, "/")[-1],
+ id=trafficmanager,
+ tags,
+ param1=strcat("hostname:", matchname),
+ param2=strcat("frontdoorid:", frontdoorid)
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AppropriateAccountabilityProcessesCostManagementFeatures.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AppropriateAccountabilityProcessesCostManagementFeatures.yaml
new file mode 100644
index 000000000..e916ddf8a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AppropriateAccountabilityProcessesCostManagementFeatures.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AppropriateAccountabilityProcessesCostManagementFeatures
+title: 'Cost management: Use cost management features with OpenAI to monitor costs,
+ set budgets to manage costs, and create alerts to notify stakeholders of risks or
+ anomalies.'
+description: Cost monitoring, setting budgets, and setting alerts provides governance
+ with the appropriate accountability processes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 0c5365cb-838b-4dfb-9608-0bcfabe98460
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ArchitecturalDesignDecisionsAzureOpenaiModels.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ArchitecturalDesignDecisionsAzureOpenaiModels.yaml
new file mode 100644
index 000000000..ce6f52e5b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ArchitecturalDesignDecisionsAzureOpenaiModels.yaml
@@ -0,0 +1,19 @@
+name: wafsg-ArchitecturalDesignDecisionsAzureOpenaiModels
+title: 'Monitor pay-as-you-go usage: If you use the pay-as-you-go approach, monitor
+ usage of TPM and RPM. Use that information to inform architectural design decisions
+ such as what models to use, and to optimize prompt sizes.'
+description: Continuously monitoring TPM and RPM gives you relevant metrics to optimize
+ the cost of Azure OpenAI models. You can couple this monitoring with model features
+ and model pricing to optimize model usage. You can also use this monitoring to optimize
+ prompt sizes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 0d6d5b07-c475-408c-8f6a-fa8c92b96957
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AzureOpenaiCompletionsApiDesignClientCode.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AzureOpenaiCompletionsApiDesignClientCode.yaml
new file mode 100644
index 000000000..2f691860f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AzureOpenaiCompletionsApiDesignClientCode.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureOpenaiCompletionsApiDesignClientCode
+title: 'Design client code to set limits: Your custom clients should use the limit
+ features of the Azure OpenAI completions API, such as maximum limit on the number
+ of tokens per model (`max_tokens`) or number of completions to generation (`n`).
+ Setting limits ensures that the server doesn''t produce more than the client needs.'
+description: Using API features to restrict usage aligns service consumption with
+ client needs. This saves money by ensuring the model doesn't generate an overly
+ long response that consumes more tokens than necessary.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 550bf6a6-0fd6-4f5e-a447-fefda36067bc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AzureOpenaiPriceBreakpointsNextBillingPeriod.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AzureOpenaiPriceBreakpointsNextBillingPeriod.yaml
new file mode 100644
index 000000000..dcfe8a55f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-AzureOpenaiPriceBreakpointsNextBillingPeriod.yaml
@@ -0,0 +1,20 @@
+name: wafsg-AzureOpenaiPriceBreakpointsNextBillingPeriod
+title: 'Usage optimization: Maximize Azure OpenAI price breakpoints, for example,
+ fine-tuning and model breakpoints like image generation. Because fine-tuning is
+ charged per hour, use as much time as you have available per hour to improve fine-tuning
+ results while avoiding slipping into the next billing period. Similarly, the cost
+ for generating 100 images is the same as the cost for 1 image. Maximize price breakpoints
+ to your advantage.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 73965cc9-1763-43c1-82aa-549b3ea75f4e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-CostEfficiencyBatchRequests.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-CostEfficiencyBatchRequests.yaml
new file mode 100644
index 000000000..a0b7455ee
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-CostEfficiencyBatchRequests.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CostEfficiencyBatchRequests
+title: 'Cost efficiency: Batch requests where possible to minimize the per-call overhead,
+ which can reduce overall costs. Ensure that you optimize batch size.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 3100afcf-2db1-4f14-901c-bd5e33bc29ff
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-CostTrackingSystemModelUsage.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-CostTrackingSystemModelUsage.yaml
new file mode 100644
index 000000000..5ed1cd56e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-CostTrackingSystemModelUsage.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CostTrackingSystemModelUsage
+title: 'Monitor and optimize: Set up a cost-tracking system that monitors model usage.
+ Use that information to help inform model choices and prompt sizes.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 6ebaa528-2e34-4366-b8cb-6bc3318ec624
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-DifferentFineTuningCostsCostEfficiency.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-DifferentFineTuningCostsCostEfficiency.yaml
new file mode 100644
index 000000000..c269f6c52
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-DifferentFineTuningCostsCostEfficiency.yaml
@@ -0,0 +1,16 @@
+name: wafsg-DifferentFineTuningCostsCostEfficiency
+title: 'Cost efficiency: Because models have different fine-tuning costs, consider
+ these costs if your solution requires fine-tuning.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 15ea2d47-0659-4906-a1ec-d26a00aa4237
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-MaximumTokenUsageLimitsDesiredApplicationPerformance.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-MaximumTokenUsageLimitsDesiredApplicationPerformance.yaml
new file mode 100644
index 000000000..a8321e83c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-MaximumTokenUsageLimitsDesiredApplicationPerformance.yaml
@@ -0,0 +1,22 @@
+name: wafsg-MaximumTokenUsageLimitsDesiredApplicationPerformance
+title: 'Usage optimization: Consider model pricing and capabilities when you choose
+ models. Start with less-costly models for less-complex tasks like text generation
+ or completion tasks. For more complex tasks like language translation or content
+ understanding, consider using more advanced models. Consider different model capabilities
+ and maximum token usage limits when you choose a model that''s appropriate for use
+ cases like text embedding, image generation, or transcription scenarios. By carefully
+ selecting the model that best fits your needs, you can optimize costs while still
+ achieving the desired application performance.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: e65920ea-b7aa-4eda-bfc8-36746c74933a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-PromptInputResponseLength.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-PromptInputResponseLength.yaml
new file mode 100644
index 000000000..741dfa7d0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-PromptInputResponseLength.yaml
@@ -0,0 +1,19 @@
+name: wafsg-PromptInputResponseLength
+title: 'Adjust usage: Optimize prompt input and response length. Longer prompts raise
+ costs by consuming more tokens. However, prompts that are missing sufficient context
+ don''t help the models yield good results. Create concise prompts that provide enough
+ context for the model to generate a useful response. Also ensure that you optimize
+ the limit of the response length.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 9e2fb33a-0e01-43c6-9de0-2409778ad08d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ProvisionManagedUtilizationThroughputUsage.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ProvisionManagedUtilizationThroughputUsage.yaml
new file mode 100644
index 000000000..dcce9bc26
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ProvisionManagedUtilizationThroughputUsage.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ProvisionManagedUtilizationThroughputUsage
+title: 'Monitor provisioned throughput usage: If you use provisioned throughput, monitor
+ provision-managed utilization to ensure you''re not underutilizing the provisioned
+ throughput you purchased.'
+description: Continuously monitoring provision-managed utilization gives you the information
+ you need to understand if you're underutilizing your provisioned throughput.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 25a3468e-92d0-4aa3-bb5f-c1214eee958b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ThroughputPricingModelRateOptimization.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ThroughputPricingModelRateOptimization.yaml
new file mode 100644
index 000000000..b062d555b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ThroughputPricingModelRateOptimization.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ThroughputPricingModelRateOptimization
+title: 'Rate optimization: When your token usage is sufficiently high and predictable
+ over a period of time, use the provisioned throughput pricing model for better cost
+ optimization.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 8c51bdd3-d4cb-4742-a323-89917c6ac87e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UnusedFineTunedModelsOngoingHostingFee.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UnusedFineTunedModelsOngoingHostingFee.yaml
new file mode 100644
index 000000000..9ebec1c61
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UnusedFineTunedModelsOngoingHostingFee.yaml
@@ -0,0 +1,16 @@
+name: wafsg-UnusedFineTunedModelsOngoingHostingFee
+title: 'Usage optimization: Remove unused fine-tuned models when they''re no longer
+ being consumed to avoid incurring an ongoing hosting fee.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: a1abac7c-cce9-4443-97e8-2faf150559d4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UsageOptimizationAzureOpenai.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UsageOptimizationAzureOpenai.yaml
new file mode 100644
index 000000000..60be167af
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UsageOptimizationAzureOpenai.yaml
@@ -0,0 +1,16 @@
+name: wafsg-UsageOptimizationAzureOpenai
+title: 'Usage optimization: Start with pay-as-you-go pricing for Azure OpenAI until
+ your token usage is predictable.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: 48e39691-9809-4ab1-86fb-857d47e4163e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UsageOptimizationTokenLimitingConstraints.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UsageOptimizationTokenLimitingConstraints.yaml
new file mode 100644
index 000000000..882ff9295
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-UsageOptimizationTokenLimitingConstraints.yaml
@@ -0,0 +1,17 @@
+name: wafsg-UsageOptimizationTokenLimitingConstraints
+title: 'Usage optimization: Use the token-limiting constraints offered by the API
+ calls, such as `max_tokens` and `n`, which indicate the number of completions to
+ generate.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: d310e9bc-ae3d-4eff-90a1-8356d72a1376
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ViableCostModelCostManagement.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ViableCostModelCostManagement.yaml
new file mode 100644
index 000000000..a8d75526f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Cost/wafsg-ViableCostModelCostManagement.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ViableCostModelCostManagement
+title: 'Cost management: Develop your cost model, considering prompt sizes. Understanding
+ prompt input and response sizes and how text translates into tokens helps you create
+ a viable cost model.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Cost
+severity: 1
+labels:
+ guid: fb012775-b93d-442c-916c-81ca72d7bc91
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AppropriateMetricsObservability.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AppropriateMetricsObservability.yaml
new file mode 100644
index 000000000..d79e8963b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AppropriateMetricsObservability.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AppropriateMetricsObservability
+title: 'Observability: Monitor, aggregate, and visualize appropriate metrics.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: f9637ddc-7d73-4efd-86f1-75d9d122f943
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AutomatedKeyRotationStrategyKeyBasedAuthentication.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AutomatedKeyRotationStrategyKeyBasedAuthentication.yaml
new file mode 100644
index 000000000..a9e1d5fd6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AutomatedKeyRotationStrategyKeyBasedAuthentication.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AutomatedKeyRotationStrategyKeyBasedAuthentication
+title: 'Automate for efficiency: If you use key-based authentication, implement an
+ automated key-rotation strategy.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: 406ddc6b-7ccc-4262-8c11-e00714f74590
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureApiManagementAzureOpenaiDiagnostics.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureApiManagementAzureOpenaiDiagnostics.yaml
new file mode 100644
index 000000000..ebdbd3343
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureApiManagementAzureOpenaiDiagnostics.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureApiManagementAzureOpenaiDiagnostics
+title: 'Observability: If Azure OpenAI diagnostics are insufficient for your needs,
+ consider using a gateway like Azure API Management in front of Azure OpenAI to log
+ both incoming prompts and outgoing responses where permitted. This information can
+ help you understand the effectiveness of the model for incoming prompts.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: eff14512-adda-441e-a2af-7a6589c330d5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureDevopsCultureAzureOpenaiInstances.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureDevopsCultureAzureOpenaiInstances.yaml
new file mode 100644
index 000000000..c5e186116
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureDevopsCultureAzureOpenaiInstances.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureDevopsCultureAzureOpenaiInstances
+title: 'Azure DevOps culture: Ensure deployment of Azure OpenAI instances across your
+ various environments, such as development, test, and production. Ensure that you
+ have environments to support continuous learning and experimentation throughout
+ the development cycle.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: be37d987-ea7b-4f82-b63a-49384a95b30b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureOpenaiModelDeployments.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureOpenaiModelDeployments.yaml
new file mode 100644
index 000000000..298abb65d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureOpenaiModelDeployments.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureOpenaiModelDeployments
+title: 'Deploy with confidence: Use infrastructure as code (IaC) to deploy Azure OpenAI,
+ model deployments, and other infrastructure required for fine-tuning models.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: 79634884-f1b8-4cbb-8583-e0ca1f41dd4d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureOpenaiServiceAzureDiagnostics.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureOpenaiServiceAzureDiagnostics.yaml
new file mode 100644
index 000000000..c265cd57d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-AzureOpenaiServiceAzureDiagnostics.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureOpenaiServiceAzureDiagnostics
+title: 'Enable and configure Azure Diagnostics: Enable and configure Diagnostics for
+ the Azure OpenAI Service.'
+description: Diagnostics collects and analyzes metrics and logs, helping you monitor
+ the availability, performance, and operation of Azure OpenAI.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: c5ac80e5-9b95-4205-a5c7-d8d8702ed00b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-LargeLanguageModelOperationsAzureOpenaiLlms.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-LargeLanguageModelOperationsAzureOpenaiLlms.yaml
new file mode 100644
index 000000000..ddb6665f2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Operations/wafsg-LargeLanguageModelOperationsAzureOpenaiLlms.yaml
@@ -0,0 +1,17 @@
+name: wafsg-LargeLanguageModelOperationsAzureOpenaiLlms
+title: 'Deploy with confidence: Follow large language model operations (LLMOps) practices
+ to operationalize the management of your Azure OpenAI LLMs, including deployment,
+ fine-tuning, and prompt engineering.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Operations
+severity: 1
+labels:
+ guid: 8863b916-2b11-4d2f-a468-110900f06f11
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiApplicationsAchievePerformance.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiApplicationsAchievePerformance.yaml
new file mode 100644
index 000000000..5d5cd9182
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiApplicationsAchievePerformance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureOpenaiApplicationsAchievePerformance
+title: 'Achieve performance: For applications like chatbots or conversational interfaces,
+ consider implementing streaming. Streaming can enhance the perceived performance
+ of Azure OpenAI applications by delivering responses to users in an incremental
+ manner, improving the user experience.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 3bbf1b68-e6d6-475b-9406-9271cdee6454
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiBenchmarkingToolTokenConsumptionRequirements.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiBenchmarkingToolTokenConsumptionRequirements.yaml
new file mode 100644
index 000000000..69cae309e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiBenchmarkingToolTokenConsumptionRequirements.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureOpenaiBenchmarkingToolTokenConsumptionRequirements
+title: 'Capacity: Benchmark token consumption requirements based on estimated demands
+ from consumers. Consider using the Azure OpenAI benchmarking tool to help you validate
+ the throughput if you''re using provisioned throughput unit (PTU) deployments.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 1238d615-b520-4de2-a8db-5da3156ea687
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiDeploymentsAppropriateGateways.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiDeploymentsAppropriateGateways.yaml
new file mode 100644
index 000000000..c0cf17d7a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-AzureOpenaiDeploymentsAppropriateGateways.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureOpenaiDeploymentsAppropriateGateways
+title: 'Capacity: Add the appropriate gateways in front of your Azure OpenAI deployments.
+ Ensure that the gateway can route to multiple instances in the same or different
+ regions.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 39601e61-c985-4ac6-9269-9f7edff4ca1e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-ConsumersElasticityDemandsHighPriorityTraffic.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-ConsumersElasticityDemandsHighPriorityTraffic.yaml
new file mode 100644
index 000000000..ba86c02e4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-ConsumersElasticityDemandsHighPriorityTraffic.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ConsumersElasticityDemandsHighPriorityTraffic
+title: 'Capacity: Estimate consumers'' elasticity demands. Identify high-priority
+ traffic that requires synchronous responses and low-priority traffic that can be
+ asynchronous and batched.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: c8f369bf-bb71-4c71-bec6-a9806f071d66
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-CustomGatewayImplementationTpmDeployment.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-CustomGatewayImplementationTpmDeployment.yaml
new file mode 100644
index 000000000..1241637da
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-CustomGatewayImplementationTpmDeployment.yaml
@@ -0,0 +1,19 @@
+name: wafsg-CustomGatewayImplementationTpmDeployment
+title: 'Capacity: Allocate PTUs to cover your predicted usage, and complement these
+ PTUs with a TPM deployment to handle elasticity above that limit. This approach
+ combines base throughput with elastic throughput for efficiency. Like other considerations,
+ this approach requires a custom gateway implementation to route requests to the
+ TPM deployment when the PTU limits are reached.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 2153dc0b-41f7-4470-abd1-c6ac7522537c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-DedicatedModelDeploymentsModelUsageIsolation.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-DedicatedModelDeploymentsModelUsageIsolation.yaml
new file mode 100644
index 000000000..839c49685
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-DedicatedModelDeploymentsModelUsageIsolation.yaml
@@ -0,0 +1,17 @@
+name: wafsg-DedicatedModelDeploymentsModelUsageIsolation
+title: 'Achieve performance: Consider using dedicated model deployments per consumer
+ group to provide per-model usage isolation that can help prevent noisy neighbors
+ between your consumer groups.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 21a63a3a-9e5d-4a7d-9825-636f4012fbcf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-FasterResponseTimesPerformanceRequirements.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-FasterResponseTimesPerformanceRequirements.yaml
new file mode 100644
index 000000000..6f92e6de2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-FasterResponseTimesPerformanceRequirements.yaml
@@ -0,0 +1,20 @@
+name: wafsg-FasterResponseTimesPerformanceRequirements
+title: 'Capacity: Select a model that aligns with your performance requirements, considering
+ the tradeoff between speed and output complexity. Model performance can vary significantly
+ based on the chosen model type. Models designed for speed offer faster response
+ times, which can be beneficial for applications that require quick interactions.
+ Conversely, more sophisticated models might deliver higher-quality outputs at the
+ expense of increased response time.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 6fd43871-d247-42ea-b468-dcf25d2d4e68
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-HighPriorityRequestsLowPriorityRequests.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-HighPriorityRequestsLowPriorityRequests.yaml
new file mode 100644
index 000000000..912c7bb48
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-HighPriorityRequestsLowPriorityRequests.yaml
@@ -0,0 +1,16 @@
+name: wafsg-HighPriorityRequestsLowPriorityRequests
+title: 'Capacity: Send high-priority requests synchronously. Queue low-priority requests
+ and send them through in batches when demand is low.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 4d0ffbf1-3c3b-4ea3-8a58-05fac3a22e33
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-NoisyNeighborProblemsConsistentMaximumLatency.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-NoisyNeighborProblemsConsistentMaximumLatency.yaml
new file mode 100644
index 000000000..4c29a4a7b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-NoisyNeighborProblemsConsistentMaximumLatency.yaml
@@ -0,0 +1,19 @@
+name: wafsg-NoisyNeighborProblemsConsistentMaximumLatency
+title: 'Capacity: Use provisioned throughput for production workloads. Provisioned
+ throughput offers dedicated memory and compute, reserved capacity, and consistent
+ maximum latency for the specified model version. The pay-as-you-go offering can
+ suffer from noisy neighbor problems like increased latency and throttling in regions
+ under heavy use. Also, the pay-as-you-go approach doesn''t offer guaranteed capacity.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 2b52edf1-c7bc-4108-90c0-d3df81bff610
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-RetrievalAugmentedGenerationRagApproachesGoodUseCases.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-RetrievalAugmentedGenerationRagApproachesGoodUseCases.yaml
new file mode 100644
index 000000000..464806257
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Performance/wafsg-RetrievalAugmentedGenerationRagApproachesGoodUseCases.yaml
@@ -0,0 +1,19 @@
+name: wafsg-RetrievalAugmentedGenerationRagApproachesGoodUseCases
+title: 'Achieve performance: Determine when to use fine-tuning before you commit to
+ fine-tuning. Although there are good use cases for fine-tuning, such as when the
+ information needed to steer the model is too long or complex to fit into the prompt,
+ make sure that prompt engineering and retrieval-augmented generation (RAG) approaches
+ don''t work or are demonstrably more expensive.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Performance
+severity: 1
+labels:
+ guid: 50fa9db0-6a80-446b-8eca-32b51efb14b5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-BusinessContinuityDisasterRecovery.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-BusinessContinuityDisasterRecovery.yaml
new file mode 100644
index 000000000..96b893a5f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-BusinessContinuityDisasterRecovery.yaml
@@ -0,0 +1,16 @@
+name: revcl-BusinessContinuityDisasterRecovery
+title: Business Continuity and Disaster Recovery (BCDR) considerations with Azure
+ OpenAI Service
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 0
+labels:
+ guid: 750ab2ab-039d-4a6d-95d7-c892adb107d5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ai-services/openai/how-to/business-continuity-disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-ChatgptConversations.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-ChatgptConversations.yaml
new file mode 100644
index 000000000..a2cb07ff6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-ChatgptConversations.yaml
@@ -0,0 +1,15 @@
+name: revcl-ChatgptConversations
+title: Backup Your ChatGPT conversations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 325af625-ca44-4e46-a5e2-223ace8bb123
+links:
+- type: docs
+ url: https://github.com/abacaj/chatgpt-backup#backup-your-chatgpt-conversations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-CustomSpeechCiCd.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-CustomSpeechCiCd.yaml
new file mode 100644
index 000000000..219ac527d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-CustomSpeechCiCd.yaml
@@ -0,0 +1,15 @@
+name: revcl-CustomSpeechCiCd
+title: CI/CD for custom speech
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 07ca5f17-f154-4e3a-a369-2829e7e31618
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ai-services/speech-service/how-to-custom-speech-continuous-integration-continuous-deployment
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-KnowledgeBaseExportImport.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-KnowledgeBaseExportImport.yaml
new file mode 100644
index 000000000..8eb4fdf92
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-KnowledgeBaseExportImport.yaml
@@ -0,0 +1,15 @@
+name: revcl-KnowledgeBaseExportImport
+title: Move a knowledge base using export-import
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 3687a046-7a1f-4893-9bda-43324f248116
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ai-services/qnamaker/tutorials/export-knowledge-base
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-LeverageFtaHandbookCognitiveServices.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-LeverageFtaHandbookCognitiveServices.yaml
new file mode 100644
index 000000000..387454657
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-LeverageFtaHandbookCognitiveServices.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageFtaHandbookCognitiveServices
+title: Leverage FTA HandBook for Cognitive Services
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 21c30d25-ffb7-4f6a-b9ea-b3fec328f787
+links:
+- type: docs
+ url: https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-cog_svcs_v1.docx
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-Prompts.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-Prompts.yaml
new file mode 100644
index 000000000..7f940666a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/revcl-Prompts.yaml
@@ -0,0 +1,15 @@
+name: revcl-Prompts
+title: Backup Your Prompts
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 78c34698-16b2-4763-aefe-1b9b599de0d5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ai-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-AppropriateDeploymentOptionUseCase.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-AppropriateDeploymentOptionUseCase.yaml
new file mode 100644
index 000000000..1f81d043a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-AppropriateDeploymentOptionUseCase.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AppropriateDeploymentOptionUseCase
+title: 'Resiliency: Choose the appropriate deployment option of either pay-as-you-go
+ or provisioned throughput based on your use case. Because reserved capacity increases
+ resiliency, choose provisioned throughput for production solutions. The pay-as-you-go
+ approach is ideal for dev/test environments.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 9d3622f2-e644-41df-8909-d30ac168fd6e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-AzureBlobStoreLargeDataFiles.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-AzureBlobStoreLargeDataFiles.yaml
new file mode 100644
index 000000000..289da14ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-AzureBlobStoreLargeDataFiles.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureBlobStoreLargeDataFiles
+title: 'Resiliency: Follow the guidance for large data files and import the data from
+ an Azure blob store. Large files, 100 MB or larger, can become unstable when uploaded
+ through multipart forms because the requests are atomic and can''t be retried or
+ resumed.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 544e8c7d-450b-4e55-aaec-1a75f667db90
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-CapacityUsageThroughputLimits.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-CapacityUsageThroughputLimits.yaml
new file mode 100644
index 000000000..72cb865b2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-CapacityUsageThroughputLimits.yaml
@@ -0,0 +1,17 @@
+name: wafsg-CapacityUsageThroughputLimits
+title: 'Resiliency: Monitor capacity usage to ensure you aren''t exceeding throughput
+ limits. Regularly review capacity usage to achieve more accurate forecasting and
+ help prevent service interruptions due to capacity constraints.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: fca027d7-7acf-497a-b915-52872ab724a4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ImportantThroughputInformationRateLimits.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ImportantThroughputInformationRateLimits.yaml
new file mode 100644
index 000000000..d55bfb501
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ImportantThroughputInformationRateLimits.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ImportantThroughputInformationRateLimits
+title: 'Monitor rate limits for pay-as-you-go: If you''re using the pay-as-you-go
+ approach, manage rate limits for your model deployments and monitor usage of tokens
+ per minute (TPM) and requests per minute (RPM).'
+description: This important throughput information provides information required to
+ ensure that you assign enough TPM from your quota to meet the demand for your deployments.Assigning
+ enough quota prevents throttling of calls to your deployed models.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: b1f8cbf7-e5d5-47cd-b8c6-dcece4ef10bf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-MultipleAzureOpenaiInstancesAzureOpenaiDeployments.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-MultipleAzureOpenaiInstancesAzureOpenaiDeployments.yaml
new file mode 100644
index 000000000..2a903ef70
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-MultipleAzureOpenaiInstancesAzureOpenaiDeployments.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MultipleAzureOpenaiInstancesAzureOpenaiDeployments
+title: 'Redundancy: Add the appropriate gateways in front of your Azure OpenAI deployments.
+ The gateway must have the capability to withstand transient failures like throttling
+ and also route to multiple Azure OpenAI instances. Consider routing to instances
+ in different regions to build regional redundancy.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: bb8e46b8-026e-44ed-9218-cc86ac5f82dc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-OpaqueRiskAnalysisTuneContentFilters.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-OpaqueRiskAnalysisTuneContentFilters.yaml
new file mode 100644
index 000000000..b4009c85e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-OpaqueRiskAnalysisTuneContentFilters.yaml
@@ -0,0 +1,16 @@
+name: wafsg-OpaqueRiskAnalysisTuneContentFilters
+title: 'Tune content filters: Tune content filters to minimize false positives from
+ overly aggressive filters.'
+description: Content filters block prompts or completions based on an opaque risk
+ analysis. Ensure content filters are tuned to allow expected usage for your workload.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 3b329988-97cb-40c6-b139-17089897a9a1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ThroughputModelResiliency.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ThroughputModelResiliency.yaml
new file mode 100644
index 000000000..5ede36191
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ThroughputModelResiliency.yaml
@@ -0,0 +1,19 @@
+name: wafsg-ThroughputModelResiliency
+title: 'Resiliency: If you''re using provisioned throughput, consider also deploying
+ a pay-as-you-go instance to handle overflow. You can route calls to the pay-as-you-go
+ instance via your gateway when your provisioned throughput model is throttled. You
+ can also use monitoring to predict when the model will be throttled and preemptively
+ route calls to the pay-as-you-go instance.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 9ba430a3-7386-4b44-8e19-26470b015bb8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ThroughputPaymentModelProvisionedThroughput.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ThroughputPaymentModelProvisionedThroughput.yaml
new file mode 100644
index 000000000..c6a61d672
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-ThroughputPaymentModelProvisionedThroughput.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ThroughputPaymentModelProvisionedThroughput
+title: 'Monitor provision-managed utilization for provisioned throughput: If you''re
+ using the provisioned throughput payment model, monitor provision-managed utilization.'
+description: It's important to monitor provision-managed utilization to ensure it
+ doesn't exceed 100%, to prevent throttling of calls to your deployed models.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: a7585b62-bb9f-4b4f-8491-13e9728a0865
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-TrainingDataAzureOpenai.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-TrainingDataAzureOpenai.yaml
new file mode 100644
index 000000000..b45395299
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Reliability/wafsg-TrainingDataAzureOpenai.yaml
@@ -0,0 +1,19 @@
+name: wafsg-TrainingDataAzureOpenai
+title: 'Recovery: Define a recovery strategy that includes a recovery plan for models
+ that are fine-tuned and for training data uploaded to Azure OpenAI. Because Azure
+ OpenAI doesn''t have automatic failover, you must design a strategy that encompasses
+ the entire service and all dependencies, such as storage that contains training
+ data.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 8fe970c3-76a2-4c9f-b198-0e6106b17f96
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AccessControlsUserAccess.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AccessControlsUserAccess.yaml
new file mode 100644
index 000000000..5d6cc3814
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AccessControlsUserAccess.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AccessControlsUserAccess
+title: 'Protect integrity: Implement access controls to authenticate and authorize
+ user access to the system by using the least-privilege principle and by using individual
+ identities instead of keys.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: f47bab52-1aa2-45c5-b250-b3716716367e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureAiContentSafetyStudioAzureOpenaiDeployments.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureAiContentSafetyStudioAzureOpenaiDeployments.yaml
new file mode 100644
index 000000000..c8474c4c9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureAiContentSafetyStudioAzureOpenaiDeployments.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureAiContentSafetyStudioAzureOpenaiDeployments
+title: 'Protect against jailbreak attacks: Use Azure AI Content Safety Studio to detect
+ jailbreak risks.'
+description: Detect jailbreak attempts to identify and block prompts that try to bypass
+ the safety mechanisms of your Azure OpenAI deployments.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: 47f53122-cc5c-4172-901a-cd3cf6d5085f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureOpenaiKeyBasedAuthenticationAzureKeyVault.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureOpenaiKeyBasedAuthenticationAzureKeyVault.yaml
new file mode 100644
index 000000000..62626b272
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureOpenaiKeyBasedAuthenticationAzureKeyVault.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureOpenaiKeyBasedAuthenticationAzureKeyVault
+title: 'Secure keys: If your architecture requires Azure OpenAI key-based authentication,
+ store those keys in Azure Key Vault, not in application code.'
+description: Separating secrets from code by storing them in Key Vault reduces the
+ chance of leaking secrets. Separation also facilitates central management of secrets,
+ easing responsibilities like key rotation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: 8dc95921-66ec-40fa-9e0c-2bcd0de338bc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureOpenaiResourcesDataExfiltration.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureOpenaiResourcesDataExfiltration.yaml
new file mode 100644
index 000000000..ccadd321f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureOpenaiResourcesDataExfiltration.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureOpenaiResourcesDataExfiltration
+title: 'Protect confidentiality: Guard against data exfiltration by limiting the outbound
+ URLs that Azure OpenAI resources can access.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: da9ce235-e104-401e-b094-59bf983cfa40
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureVirtualNetworkNetworkTraffic.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureVirtualNetworkNetworkTraffic.yaml
new file mode 100644
index 000000000..dd39cbf42
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-AzureVirtualNetworkNetworkTraffic.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureVirtualNetworkNetworkTraffic
+title: 'Restrict access: Disable public access to Azure OpenAI unless your workload
+ requires it. Create private endpoints if you''re connecting from consumers in an
+ Azure virtual network.'
+description: Controlling access to Azure OpenAI helps prevent attacks from unauthorized
+ users. Using private endpoints ensures network traffic remains private between the
+ application and the platform.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: fb4efdfc-4ccf-4be0-8652-39f3ac82a3a3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-CognitiveServicesOpenaiUserRoleGrantModelAutomationPipelines.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-CognitiveServicesOpenaiUserRoleGrantModelAutomationPipelines.yaml
new file mode 100644
index 000000000..59cfd0559
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-CognitiveServicesOpenaiUserRoleGrantModelAutomationPipelines.yaml
@@ -0,0 +1,22 @@
+name: wafsg-CognitiveServicesOpenaiUserRoleGrantModelAutomationPipelines
+title: 'Microsoft Entra ID: Use Microsoft Entra ID for authentication and to authorize
+ access to Azure OpenAI by using role-based access control (RBAC). Disable local
+ authentication in Azure AI Services and set `disableLocalAuth` to `true`. Grant
+ identities that perform completions or image generation the Cognitive Services OpenAI
+ User role. Grant model automation pipelines and ad-hoc data-science access a role
+ like Cognitive Services OpenAI Contributor.'
+description: Using Microsoft Entra ID centralizes the identity-management component
+ and eliminates the use of API keys. Using RBAC with Microsoft Entra ID ensures that
+ users or groups have exactly the permissions they need to do their job. This kind
+ of fine-grained access control isn't possible with Azure OpenAI API keys.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: a391f8f5-e04e-4285-b756-4e9de162bc10
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-CustomerManagedKeysFineTunedModels.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-CustomerManagedKeysFineTunedModels.yaml
new file mode 100644
index 000000000..a1dcdd74e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-CustomerManagedKeysFineTunedModels.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CustomerManagedKeysFineTunedModels
+title: 'Use customer-managed keys: Use customer-managed keys for fine-tuned models
+ and training data that''s uploaded to Azure OpenAI.'
+description: Using customer-managed keys gives you greater flexibility to create,
+ rotate, disable, and revoke access controls.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: f73c5ae9-9299-48ca-969c-6ac872096e3d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-JailbreakRiskDetectionLanguageModelDeployments.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-JailbreakRiskDetectionLanguageModelDeployments.yaml
new file mode 100644
index 000000000..c391910ce
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-JailbreakRiskDetectionLanguageModelDeployments.yaml
@@ -0,0 +1,16 @@
+name: wafsg-JailbreakRiskDetectionLanguageModelDeployments
+title: 'Protect integrity: Implement jailbreak risk detection to safeguard your language
+ model deployments against prompt injection attacks.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: 41a12d3c-56b5-4f10-9eea-303af5adcdb6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-ModelUsageQuotasSuspectedAbuse.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-ModelUsageQuotasSuspectedAbuse.yaml
new file mode 100644
index 000000000..d3325cc48
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-ModelUsageQuotasSuspectedAbuse.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ModelUsageQuotasSuspectedAbuse
+title: 'Protect availability: Use security controls to prevent attacks that might
+ exhaust model usage quotas. You might configure controls to isolate the service
+ on a network. If the service must be accessible from the internet, consider using
+ a gateway to block suspected abuse by using routing or throttling.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: a55c7008-6341-44e8-8b8c-089bc61dd193
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-SecurityBestPracticesAzureBlobStorage.yaml b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-SecurityBestPracticesAzureBlobStorage.yaml
new file mode 100644
index 000000000..f795fa3f6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCognitiveServices-accounts/Security/wafsg-SecurityBestPracticesAzureBlobStorage.yaml
@@ -0,0 +1,21 @@
+name: wafsg-SecurityBestPracticesAzureBlobStorage
+title: 'Protect confidentiality: If you upload training data to Azure OpenAI, use
+ customer-managed keys for data encryption, implement a key-rotation strategy, and
+ delete training, validation, and training results data. If you use an external data
+ store for training data, follow security best practices for that store. For example,
+ for Azure Blob Storage, use customer-managed keys for encryption and implement a
+ key-rotation strategy. Use managed identity-based access, implement a network perimeter
+ by using private endpoints, and enable access logs.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-openai.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.cognitiveservices/accounts
+waf: Security
+severity: 1
+labels:
+ guid: 18050528-bca5-43c3-99c5-4e7035bd9496
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-galleries/aprl-ProductionImageVersionsProductionImages.yaml b/v2/recos/Services/MicrosoftCompute-galleries/aprl-ProductionImageVersionsProductionImages.yaml
new file mode 100644
index 000000000..d9dffa276
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-galleries/aprl-ProductionImageVersionsProductionImages.yaml
@@ -0,0 +1,26 @@
+name: aprl-ProductionImageVersionsProductionImages
+title: A minimum of three replicas should be kept for production image versions
+description: |-
+ Keeping a minimum of 3 replicas for production images in Azure's Compute Gallery ensures scalability and prevents throttling in multi-VM deployments by distributing VM deployments across different replicas. This reduces the risk of overloading a single replica.
+source:
+ type: aprl
+ file: azure-resources/Compute/galleries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/galleries
+severity: 1
+labels:
+ guid: b49a39fd-f431-4b61-9062-f2157849d845
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Query to list all image versions,its associated image name and version replica configurations per region in a compute gallery whose version replicas is less than 3
+ resources
+ | where type =~ "microsoft.compute/galleries/images/versions"
+ | extend GalleryName = tostring(split(tostring(id), "/")[8]), ImageName = tostring(split(tostring(id), "/")[10])
+ | mv-expand VersionReplicas = properties.publishingProfile.targetRegions
+ | project RecommendationId="b49a39fd-f431-4b61-9062-f2157849d845",name,id,tags,param1=strcat("GalleryName: ",GalleryName),param2=strcat("ImageName: ",ImageName),param3=strcat("VersionReplicaRegionName: ",VersionReplicas.name),param4=strcat("VersionReplicationCount: ",VersionReplicas.regionalReplicaCount),rc=toint(VersionReplicas.regionalReplicaCount)
+ | where rc < 3
+ | project-away rc
diff --git a/v2/recos/Services/MicrosoftCompute-galleries/aprl-TrustedLaunchSupportedImagesLargeBootVolume.yaml b/v2/recos/Services/MicrosoftCompute-galleries/aprl-TrustedLaunchSupportedImagesLargeBootVolume.yaml
new file mode 100644
index 000000000..6e8eda482
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-galleries/aprl-TrustedLaunchSupportedImagesLargeBootVolume.yaml
@@ -0,0 +1,24 @@
+name: aprl-TrustedLaunchSupportedImagesLargeBootVolume
+title: Consider creating TrustedLaunchSupported images where possible
+description: |-
+ We recommend creating Trusted Launch Supported Images for benefits like Secure Boot, vTPM, trusted launch VMs, large boot volume. These are Gen 2 Images by default and you cannot change a VM's generation after creation, so review the considerations first.
+source:
+ type: aprl
+ file: azure-resources/Compute/galleries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/galleries
+severity: 2
+labels:
+ guid: 1c5e1e58-4e56-491c-8529-10f37af9d4ed
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Query to list all images whose Hyper-V generation is not V2
+ resources
+ | where type =~ "microsoft.compute/galleries/images"
+ | extend VMGeneration = properties.hyperVGeneration
+ | where VMGeneration <> 'V2'
+ | project RecommendationId="1c5e1e58-4e56-491c-8529-10f37af9d4ed",name,id,tags,param1=strcat("VMGeneration: ",VMGeneration)
diff --git a/v2/recos/Services/MicrosoftCompute-galleries/aprl-ZoneRedundantStorageAzureComputeGallery.yaml b/v2/recos/Services/MicrosoftCompute-galleries/aprl-ZoneRedundantStorageAzureComputeGallery.yaml
new file mode 100644
index 000000000..e25d10d3b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-galleries/aprl-ZoneRedundantStorageAzureComputeGallery.yaml
@@ -0,0 +1,25 @@
+name: aprl-ZoneRedundantStorageAzureComputeGallery
+title: Zone redundant storage should be used for image versions
+description: |-
+ Use ZRS for high availability when creating image/VM versions in Azure Compute Gallery, offering resilience against Availability Zone failures. ZRS accounts are advisable in regions with Availability Zones, with the choice of Standard_ZRS recommended over Standard_LRS for these regions.
+source:
+ type: aprl
+ file: azure-resources/Compute/galleries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/galleries
+severity: 1
+labels:
+ guid: 488dcc8b-f2e3-40ce-bf95-73deb2db095f
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Query to list all image versions and its associated image and gallery name whose Storage account type is not using ZRS
+ resources
+ | where type =~ "microsoft.compute/galleries/images/versions"
+ | extend GalleryName = tostring(split(tostring(id), "/")[8]), ImageName = tostring(split(tostring(id), "/")[10])
+ | extend StorageAccountType = tostring(properties.publishingProfile.storageAccountType)
+ | where StorageAccountType !has "ZRS"
+ | project RecommendationId="488dcc8b-f2e3-40ce-bf95-73deb2db095f",name,id,tags,param1=strcat("GalleryName: ",GalleryName),param2=strcat("ImageName: ",ImageName),param3=strcat("StorageAccountType: ",StorageAccountType)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/Reliability/revcl-EnhancedVmScaleSetsAutomaticInstanceRepairs.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/Reliability/revcl-EnhancedVmScaleSetsAutomaticInstanceRepairs.yaml
new file mode 100644
index 000000000..6aae56b9f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/Reliability/revcl-EnhancedVmScaleSetsAutomaticInstanceRepairs.yaml
@@ -0,0 +1,18 @@
+name: revcl-EnhancedVmScaleSetsAutomaticInstanceRepairs
+title: Enable automatic instance repairs for enhanced VM Scale Sets resiliency
+description: Automatic instance repairs ensure that unhealthy instances are promptly
+ identified and replaced, maintaining a set of healthy instances within your scale
+ set.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachinescalesets
+waf: Reliability
+severity: 2
+labels:
+ guid: 7e13c105-675c-41e9-95b4-59837ff7ae7c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-ApplicationLoadDemandsVmInstanceDistribution.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-ApplicationLoadDemandsVmInstanceDistribution.yaml
new file mode 100644
index 000000000..1a3346345
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-ApplicationLoadDemandsVmInstanceDistribution.yaml
@@ -0,0 +1,25 @@
+name: aprl-ApplicationLoadDemandsVmInstanceDistribution
+title: Disable Force strictly even balance across zones to avoid scale in and out
+ fail attempts
+description: |-
+ Microsoft advises disabling strictly even VM instance distribution across Availability Zones in VMSS to improve scalability and flexibility, noting that uneven distribution may better serve application load demands despite the potential trade-off in resilience.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 0
+labels:
+ guid: b5a63aa0-c58e-244f-b8a6-cbba0560a6db
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find VMSS instances where strictly zoneBalance is set to True
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | where properties.orchestrationMode == "Uniform" and properties.zoneBalance == true
+ | project recommendationId = "b5a63aa0-c58e-244f-b8a6-cbba0560a6db", name, id, tags, param1 = "strictly zoneBalance: Enabled"
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AutoGuestPatchingVmssImageVersions.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AutoGuestPatchingVmssImageVersions.yaml
new file mode 100644
index 000000000..8324a3afe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AutoGuestPatchingVmssImageVersions.yaml
@@ -0,0 +1,18 @@
+name: aprl-AutoGuestPatchingVmssImageVersions
+title: Upgrade VMSS Image versions scheduled to be deprecated or already retired
+description: |-
+ Ensure current versions of images are in use to avoid disruption after image deprecation. Please review the publisher, offer, sku information of the VM to ensure you are running on a supported image. Enable Auto Guest Patching or Image Upgrades, to get notifications about image deprecation.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 0
+labels:
+ guid: 83d61669-7bd6-9642-a305-175db8adcdf4
+ area: Governance
+links: []
+queries:
+ arg: |
+ //cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AutomaticVmGuestPatchingPatchOrchestrationOptions.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AutomaticVmGuestPatchingPatchOrchestrationOptions.yaml
new file mode 100644
index 000000000..2403f5263
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AutomaticVmGuestPatchingPatchOrchestrationOptions.yaml
@@ -0,0 +1,39 @@
+name: aprl-AutomaticVmGuestPatchingPatchOrchestrationOptions
+title: Set Patch orchestration options to Azure-orchestrated
+description: |-
+ Enabling automatic VM guest patching eases update management by safely, automatically patching virtual machines to maintain security compliance, while limiting blast radius of VMs. Note, the KQL will not return sets using Uniform orchestration.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 2
+labels:
+ guid: e4ffd7b0-ba24-c84e-9352-ba4819f908c0
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph query
+ // Identifies VMs and VMSS with manual patch settings, excluding automatic patch modes
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | join kind=inner (
+ resources
+ | where type == "microsoft.compute/virtualmachines"
+ | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties
+ ) on id
+ | extend recommendationId = "e4ffd7b0-ba24-c84e-9352-ba4819f908c0", param1 = "patchMode: Manual", vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode
+ | where isnotnull(vmproperties.osProfile.linuxConfiguration) and vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode !in ("AutomaticByPlatform", "AutomaticByOS")
+ | distinct recommendationId, name, id, param1
+ | union (resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | join kind=inner (
+ resources
+ | where type == "microsoft.compute/virtualmachines"
+ | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties
+ ) on id
+ | extend recommendationId = "e4ffd7b0-ba24-c84e-9352-ba4819f908c0", param1 = "patchMode: Manual", vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode
+ | where isnotnull(vmproperties.osProfile.windowsConfiguration) and vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode !in ("AutomaticByPlatform", "AutomaticByOS")
+ | distinct recommendationId, name, id, param1)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AvailabilityZonesProtectionMeasure.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AvailabilityZonesProtectionMeasure.yaml
new file mode 100644
index 000000000..526008dcc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AvailabilityZonesProtectionMeasure.yaml
@@ -0,0 +1,24 @@
+name: aprl-AvailabilityZonesProtectionMeasure
+title: Deploy VMSS across availability zones with VMSS Flex
+description: |-
+ When creating VMSS, implement availability zones as a protection measure for your applications and data against the rare event of datacenter failure.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 0
+labels:
+ guid: 1422c567-782c-7148-ac7c-5fc14cf45adc
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find VMSS instances with one or no Zones selected
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | where array_length(zones) <= 1 or isnull(zones)
+ | project recommendationId = "1422c567-782c-7148-ac7c-5fc14cf45adc", name, id, tags, param1 = "AvailabilityZones: Single Zone"
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetVirtualMachineScaleSets.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetVirtualMachineScaleSets.yaml
new file mode 100644
index 000000000..a7c8f50af
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetVirtualMachineScaleSets.yaml
@@ -0,0 +1,30 @@
+name: aprl-AzureVirtualMachineScaleSetVirtualMachineScaleSets
+title: Enable Azure Virtual Machine Scale Set Application Health Monitoring
+description: |-
+ Monitoring application health in Azure Virtual Machine Scale Sets is crucial for deployment management. It supports rolling upgrades such as automatic OS-image upgrades and VM guest patching, leveraging health monitoring for upgrading.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 1
+labels:
+ guid: 94794d2a-eff0-2345-9b67-6f9349d0a627
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that do NOT have health monitoring enabled
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | mv-expand extension=properties.virtualMachineProfile.extensionProfile.extensions
+ | where extension.properties.type in ( "ApplicationHealthWindows", "ApplicationHealthLinux" )
+ | project id
+ ) on id
+ | where id1 == ""
+ | project recommendationId = "94794d2a-eff0-2345-9b67-6f9349d0a627", name, id, tags, param1 = "extension: null"
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetsAutomaticRepairPolicy.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetsAutomaticRepairPolicy.yaml
new file mode 100644
index 000000000..402ddf9bc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetsAutomaticRepairPolicy.yaml
@@ -0,0 +1,23 @@
+name: aprl-AzureVirtualMachineScaleSetsAutomaticRepairPolicy
+title: Enable Automatic Repair Policy on Azure Virtual Machine Scale Sets
+description: |-
+ Enabling automatic instance repairs in Azure Virtual Machine Scale Sets enhances application availability through a continuous health check and maintenance process.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 0
+labels:
+ guid: 820f4743-1f94-e946-ae0b-45efafd87962
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that do NOT have automatic repair policy enabled
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | where properties.automaticRepairsPolicy.enabled == false
+ | project recommendationId = "820f4743-1f94-e946-ae0b-45efafd87962", name, id, tags, param1 = "automaticRepairsPolicy: Disabled"
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetsHistoricalUsageAnalysis.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetsHistoricalUsageAnalysis.yaml
new file mode 100644
index 000000000..2b494d085
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-AzureVirtualMachineScaleSetsHistoricalUsageAnalysis.yaml
@@ -0,0 +1,31 @@
+name: aprl-AzureVirtualMachineScaleSetsHistoricalUsageAnalysis
+title: Enable Predictive autoscale and configure at least for Forecast Only
+description: |-
+ Predictive autoscale utilizes machine learning to efficiently manage and scale Azure Virtual Machine Scale Sets by forecasting CPU load through historical usage analysis, ensuring timely scale-out to meet demand.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 2
+labels:
+ guid: 3f85a51c-e286-9f44-b4dc-51d00768696c
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find VMSS instances associated with autoscale settings when predictiveAutoscalePolicy_scaleMode is disabled
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | project name, id, tags
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.insights/autoscalesettings"
+ | where tostring(properties.targetResourceUri) contains "Microsoft.Compute/virtualMachineScaleSets"
+ | project id = tostring(properties.targetResourceUri), autoscalesettings = properties
+ ) on id
+ | where autoscalesettings.enabled == "true" and autoscalesettings.predictiveAutoscalePolicy.scaleMode == "Disabled"
+ | project recommendationId = "3f85a51c-e286-9f44-b4dc-51d00768696c", name, id, tags, param1 = "predictiveAutoscalePolicy_scaleMode: Disabled"
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-CustomAutoscaleCostEffectiveness.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-CustomAutoscaleCostEffectiveness.yaml
new file mode 100644
index 000000000..3c0000189
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-CustomAutoscaleCostEffectiveness.yaml
@@ -0,0 +1,31 @@
+name: aprl-CustomAutoscaleCostEffectiveness
+title: Configure VMSS Autoscale to custom and configure the scaling metrics
+description: |-
+ Use custom autoscale for VMSS based on metrics and schedules to improve performance and cost effectiveness, adjusting instances as demand changes.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 0
+labels:
+ guid: ee66ff65-9aa3-2345-93c1-25827cf79f44
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find VMSS instances associated with autoscale settings when autoscale is disabled
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | project name, id, tags
+ | join kind=leftouter (
+ resources
+ | where type == "microsoft.insights/autoscalesettings"
+ | where tostring(properties.targetResourceUri) contains "Microsoft.Compute/virtualMachineScaleSets"
+ | project id = tostring(properties.targetResourceUri), autoscalesettings = properties
+ ) on id
+ | where isnull(autoscalesettings) or autoscalesettings.enabled == "false"
+ | project recommendationId = "ee66ff65-9aa3-2345-93c1-25827cf79f44", name, id, tags, param1 = "autoscalesettings: Disabled"
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-FlexOrchestrationModeFlexibleOrchestrationMode.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-FlexOrchestrationModeFlexibleOrchestrationMode.yaml
new file mode 100644
index 000000000..3d90f9512
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachineScaleSets/aprl-FlexOrchestrationModeFlexibleOrchestrationMode.yaml
@@ -0,0 +1,23 @@
+name: aprl-FlexOrchestrationModeFlexibleOrchestrationMode
+title: Deploy VMSS with Flex orchestration mode instead of Uniform
+description: |-
+ Deploying even single instance VMs into a scale set with Flexible orchestration mode future-proofs applications for scaling and availability. This mode guarantees high availability (up to 1000 VMs) by distributing VMs across fault domains in a region or within an Availability Zone.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachineScaleSets/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachineScaleSets
+severity: 1
+labels:
+ guid: e7495e1c-0c75-0946-b266-b429b5c7f3bf
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all zonal VMs that are NOT deployed with Flex orchestration mode
+ resources
+ | where type == "microsoft.compute/virtualmachinescalesets"
+ | where properties.orchestrationMode != "Flexible"
+ | project recommendationId = "e7495e1c-0c75-0946-b266-b429b5c7f3bf", name, id, tags, param1 = strcat("orchestrationMode: ", tostring(properties.orchestrationMode))
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-AzureReservedInstancesSignificantCostSavings.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-AzureReservedInstancesSignificantCostSavings.yaml
new file mode 100644
index 000000000..08f7dc0dc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-AzureReservedInstancesSignificantCostSavings.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureReservedInstancesSignificantCostSavings
+title: 'Utilize Azure Reserved Instances: This feature allows you to reserve VMs for
+ a period of 1 or 3 years, providing significant cost savings compared to PAYG prices.'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: c7acbe49-bbe6-44dd-a9f2-e87778468d55
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/identity-access#prerequisites-for-a-landing-zone---design-recommendations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-DiskSizesGibDisk.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-DiskSizesGibDisk.yaml
new file mode 100644
index 000000000..3c7c51548
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-DiskSizesGibDisk.yaml
@@ -0,0 +1,16 @@
+name: revcl-DiskSizesGibDisk
+title: Check disk sizes where the size does not match the tier (i.e. A 513 GiB disk
+ will pay a P30 (1TiB) and consider resizing
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: a2ed27b2-d186-4f1a-8252-bddde68a487c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/automation/how-to/region-mappings
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-InterruptibleJobsDiscountedPrice.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-InterruptibleJobsDiscountedPrice.yaml
new file mode 100644
index 000000000..2d7344a39
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-InterruptibleJobsDiscountedPrice.yaml
@@ -0,0 +1,19 @@
+name: revcl-InterruptibleJobsDiscountedPrice
+title: 'Use Spot VMs for interruptible jobs: These are VMs that can be bid on and
+ purchased at a discounted price, providing a cost-effective solution for non-critical
+ workloads.'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 393a040f-d329-4479-ab11-88b2c5a46ceb
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/overview-v2
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LargerDisksTib.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LargerDisksTib.yaml
new file mode 100644
index 000000000..a744bb916
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LargerDisksTib.yaml
@@ -0,0 +1,15 @@
+name: revcl-LargerDisksTib
+title: Only larger disks can be reserved => 1 TiB -
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: a6bcca2b-4fea-41db-b3dd-95d48c7c891d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory-domain-services/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LearnMicrosoftAhub.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LearnMicrosoftAhub.yaml
new file mode 100644
index 000000000..d2e1b3d5f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LearnMicrosoftAhub.yaml
@@ -0,0 +1,15 @@
+name: revcl-LearnMicrosoftAhub
+title: ' this can be also put under AHUB if you already have licenses https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux?tabs=rhelpayg%2Crhelbyos%2CrhelEnablebyos%2Crhelcompliance'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 7b95e06e-158e-42ea-9992-c2de6e2065b3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/privileged-identity-management/pim-configure
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LicensePartDiscountTheVm.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LicensePartDiscountTheVm.yaml
new file mode 100644
index 000000000..71b9495e1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LicensePartDiscountTheVm.yaml
@@ -0,0 +1,15 @@
+name: revcl-LicensePartDiscountTheVm
+title: The VM + license part discount (ahub + 3YRI) is around 70% discount
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 6e2065b3-a76a-4f4a-991e-8839ada46667
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/roles/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LowerStorageTiersDisks.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LowerStorageTiersDisks.yaml
new file mode 100644
index 000000000..9245362fe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-LowerStorageTiersDisks.yaml
@@ -0,0 +1,18 @@
+name: revcl-LowerStorageTiersDisks
+title: 'Check that the disks are really needed, if not: delete. If they are needed,
+ find lower storage tiers or use backup -'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 6aae01e6-a84d-4e5d-b36d-1d92881a1bd5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/costs/manage-automation
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-MeterCategoryLicensesWindowsVms.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-MeterCategoryLicensesWindowsVms.yaml
new file mode 100644
index 000000000..0975f1d5e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-MeterCategoryLicensesWindowsVms.yaml
@@ -0,0 +1,17 @@
+name: revcl-MeterCategoryLicensesWindowsVms
+title: run the script on all windows VMs https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing?ref=andrewmatveychuk.com#convert-an-existing-vm-using-azure-hybrid-benefit-for-windows-server-
+ consider implementing a policy if windows VMs are created frequently
+description: check by searching the Meter Category Licenses in the Cost analysys
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 59ae568b-a38d-4498-9e22-13dbd7bb012f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/manage/centralize-operations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-PremiumSsdDisksStandardSsd.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-PremiumSsdDisksStandardSsd.yaml
new file mode 100644
index 000000000..d9e513c67
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-PremiumSsdDisksStandardSsd.yaml
@@ -0,0 +1,16 @@
+name: revcl-PremiumSsdDisksStandardSsd
+title: 'Disks - validate use of Premium SSD disks everywhere: for example, non-prod
+ could swap to Standard SSD or on-demand Premium SSD '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 92d34429-3c76-4286-97a5-51c5b04e4f18
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/backup-center-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RecentSizesVm.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RecentSizesVm.yaml
new file mode 100644
index 000000000..da6e7a96e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RecentSizesVm.yaml
@@ -0,0 +1,17 @@
+name: revcl-RecentSizesVm
+title: Swap VM sized with normalized and most recent sizes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: b04e4f18-5438-47e5-aed1-26cd032af5b2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RightSizingOptimization.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RightSizingOptimization.yaml
new file mode 100644
index 000000000..74813c526
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RightSizingOptimization.yaml
@@ -0,0 +1,15 @@
+name: revcl-RightSizingOptimization
+title: After the right-sizing optimization
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: cb1f7d57-59ae-4568-aa38-d4985e2213db
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/identity/adds-extend-domain
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RightSizingVmsUsage.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RightSizingVmsUsage.yaml
new file mode 100644
index 000000000..8bdb2dda3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-RightSizingVmsUsage.yaml
@@ -0,0 +1,18 @@
+name: revcl-RightSizingVmsUsage
+title: right-sizing VMs - start with monitoring usage below 5% and then work up to
+ 40%
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: fc6998a5-35e3-4378-a7e3-1c67d68cf6a6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-UnassociatedServicesIpAddresses.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-UnassociatedServicesIpAddresses.yaml
new file mode 100644
index 000000000..354e58c0f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-UnassociatedServicesIpAddresses.yaml
@@ -0,0 +1,15 @@
+name: revcl-UnassociatedServicesIpAddresses
+title: Delete or archive unassociated services (disks, nics, ip addresses etc)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 64f9a19a-f29c-495d-94c6-c7919ca0f6c5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/lighthouse
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmDensityApplication.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmDensityApplication.yaml
new file mode 100644
index 000000000..175b19648
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmDensityApplication.yaml
@@ -0,0 +1,18 @@
+name: revcl-VmDensityApplication
+title: Containerizing an application can improve VM density and save money on scaling
+ it
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 2a119495-6d69-47dc-9a2e-d27b2d186f1a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmFamiliesFlexibilityOption.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmFamiliesFlexibilityOption.yaml
new file mode 100644
index 000000000..489dedd8a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmFamiliesFlexibilityOption.yaml
@@ -0,0 +1,18 @@
+name: revcl-VmFamiliesFlexibilityOption
+title: Consolidate reserved VM families with flexibility option (no more than 4-5
+ families)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 75c1e945-b459-4837-bf7a-e7c6d3b475a5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal
+- type: docs
+ url: https://learn.microsoft.com/azure/automation/automation-solution-vm-management
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmRightSizingAdvisor.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmRightSizingAdvisor.yaml
new file mode 100644
index 000000000..ae859c00d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmRightSizingAdvisor.yaml
@@ -0,0 +1,15 @@
+name: revcl-VmRightSizingAdvisor
+title: 'Make sure advisor is configured for VM right sizing '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: d0102cac-6aae-401e-9a84-de5de36d1d92
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-Vms.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-Vms.yaml
new file mode 100644
index 000000000..83a16ad15
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-Vms.yaml
@@ -0,0 +1,15 @@
+name: revcl-Vms
+title: Right-sizing all VMs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 544451e1-92d3-4442-a3c7-628637a551c5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmssDemand.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmssDemand.yaml
new file mode 100644
index 000000000..f97b4c343
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/revcl-VmssDemand.yaml
@@ -0,0 +1,15 @@
+name: revcl-VmssDemand
+title: Consider using a VMSS to match demand rather than flat sizing
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: ccbd9792-a6bc-4ca2-a4fe-a1dbf3dd95d4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-AzureAutomationStartStopFeatureTheStartStopFeature.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-AzureAutomationStartStopFeatureTheStartStopFeature.yaml
new file mode 100644
index 000000000..4b8fe6bdb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-AzureAutomationStartStopFeatureTheStartStopFeature.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureAutomationStartStopFeatureTheStartStopFeature
+title: (Scale set) Reduce the number of VM instances when demand decreases. Set a
+ scale-in policy based on criteria. Stop VMs during off-hours. You can use the
+ Azure Automation Start/Stop feature and configure it according to your business
+ needs.
+description: Scaling in or stopping resources when they're not in use reduces the
+ number of VMs running in the scale set, which saves costs. The Start/Stop feature
+ is a low-cost automation option.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 0a6605c5-2e42-4796-b60c-f2ac2a89872c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-AzurePremiumSsdVDiskExtraCostOptimizationFeatures.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-AzurePremiumSsdVDiskExtraCostOptimizationFeatures.yaml
new file mode 100644
index 000000000..fa96594db
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-AzurePremiumSsdVDiskExtraCostOptimizationFeatures.yaml
@@ -0,0 +1,21 @@
+name: wafsg-AzurePremiumSsdVDiskExtraCostOptimizationFeatures
+title: (VMs, scale set) Evaluate the disk options that are associated with your VM's
+ SKUs. Determine your performance needs while keeping in mind your storage capacity
+ needs and accounting for fluctuating workload patterns. For example, the Azure
+ Premium SSD v2 disk allows you to granularly adjust your performance independent
+ of the disk's size.
+description: Some high-performance disk types offer extra cost optimization features
+ and strategies. The Premium SSD v2 disk's adjustment capability can reduce costs
+ because it provides high performance without overprovisioning, which could otherwise
+ lead to underutilized resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 8e136ca6-91e6-4cd0-8d19-b6cfec2622c1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-BackupStorageCostsAzureBackupStorage.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-BackupStorageCostsAzureBackupStorage.yaml
new file mode 100644
index 000000000..5ab531d8b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-BackupStorageCostsAzureBackupStorage.yaml
@@ -0,0 +1,18 @@
+name: wafsg-BackupStorageCostsAzureBackupStorage
+title: Choose the right capabilities for dependent resources. Save on backup storage
+ costs for the vault-standard tier by using Azure Backup storage with reserved capacity.
+ It offers a discount when you commit to a reservation for either one year or three
+ years.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: e445d2d7-01a5-428d-9996-7d42b8727ae5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-ComputeInfrastructureCostsSpotVirtualMachines.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-ComputeInfrastructureCostsSpotVirtualMachines.yaml
new file mode 100644
index 000000000..90d735e76
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-ComputeInfrastructureCostsSpotVirtualMachines.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ComputeInfrastructureCostsSpotVirtualMachines
+title: (Scale set) Mix regular VMs with spot virtual machines. Flexible orchestration
+ lets you distribute spot virtual machines based on a specified percentage.
+description: Reduce compute infrastructure costs by applying the deep discounts of
+ spot virtual machines.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: bf114ba8-d145-4e31-9798-fb07277a246d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-CostEffectiveApproachPriorityQueues.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-CostEffectiveApproachPriorityQueues.yaml
new file mode 100644
index 000000000..0bad597e3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-CostEffectiveApproachPriorityQueues.yaml
@@ -0,0 +1,20 @@
+name: wafsg-CostEffectiveApproachPriorityQueues
+title: Look for ways to optimize. Some strategies include choosing the most cost-effective
+ approach between increasing resources in an existing system, or scaling up, and
+ adding more instances of that system, or scaling out. You can offload demand by
+ distributing it to other resources, or you can reduce demand by implementing priority
+ queues, gateway offloading, buffering, and rate limiting. For more information,
+ see the recommendations in Performance Efficiency.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: f7fc4792-bc2c-4a9d-98dc-ee637e18badd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-CostGuardrailsGovernancePolicies.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-CostGuardrailsGovernancePolicies.yaml
new file mode 100644
index 000000000..8f1fc526c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-CostGuardrailsGovernancePolicies.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CostGuardrailsGovernancePolicies
+title: Implement cost guardrails. Use governance policies to restrict resource types,
+ configurations, and locations. Use RBAC to block actions that can lead to overspending.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 389aca19-a7d5-4abb-82f6-66716e25023a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-ParallelBatchProcessingJobsRightVmPlanSize.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-ParallelBatchProcessingJobsRightVmPlanSize.yaml
new file mode 100644
index 000000000..f55313c2f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-ParallelBatchProcessingJobsRightVmPlanSize.yaml
@@ -0,0 +1,21 @@
+name: wafsg-ParallelBatchProcessingJobsRightVmPlanSize
+title: (VMs, scale set) Choose the right VM plan size and SKU. Identify the best VM
+ sizes for your workload. Use the VM selector to identify the best VM for your workload.
+ See Windows and Linux pricing. For workloads like highly parallel batch processing
+ jobs that can tolerate some interruptions, consider using Azure Spot Virtual Machines.
+ Spot virtual machines are good for experimenting, developing, and testing large-scale
+ solutions.
+description: SKUs are priced according to the capabilities that they offer. If you
+ don't need advanced capabilities, don't overspend on SKUs. Spot virtual machines
+ take advantage of the surplus capacity in Azure at a lower cost.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 12835f9e-fdcf-4ecd-8d96-22d2a32bbd29
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-PremisesWindowsServerOsLicensesAzureHybridBenefit.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-PremisesWindowsServerOsLicensesAzureHybridBenefit.yaml
new file mode 100644
index 000000000..0acc6e02a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-PremisesWindowsServerOsLicensesAzureHybridBenefit.yaml
@@ -0,0 +1,18 @@
+name: wafsg-PremisesWindowsServerOsLicensesAzureHybridBenefit
+title: (VMs, scale set) Take advantage of license mobility by using Azure Hybrid Benefit.
+ VMs have a licensing option that allows you to bring your own on-premises Windows
+ Server OS licenses to Azure. Azure Hybrid Benefit also lets you bring certain Linux
+ subscriptions to Azure.
+description: You can maximize your on-premises licenses while getting the benefits
+ of the cloud.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 2a4a0772-4dab-4123-bdb0-569271e29b63
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-PricingCalculatorBestVm.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-PricingCalculatorBestVm.yaml
new file mode 100644
index 000000000..364e62550
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-PricingCalculatorBestVm.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PricingCalculatorBestVm
+title: Estimate realistic costs. Use the pricing calculator to estimate the costs
+ of your VMs. Identify the best VM for your workload by using the VM selector. For
+ more information, see Linux and Windows pricing.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 4f730d71-d8da-489b-b609-e9b1962ab07f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-RightBillingModelCommitmentBasedModels.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-RightBillingModelCommitmentBasedModels.yaml
new file mode 100644
index 000000000..45f03a5f7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-RightBillingModelCommitmentBasedModels.yaml
@@ -0,0 +1,17 @@
+name: wafsg-RightBillingModelCommitmentBasedModels
+title: 'Choose the right billing model. Evaluate whether commitment-based models for
+ computing optimize costs based on the business requirements of workload. Consider
+ these Azure options:'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 72eb7a10-acdd-47f4-ac63-c2366162dca0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-UnderutilizedVmsKeyApproach.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-UnderutilizedVmsKeyApproach.yaml
new file mode 100644
index 000000000..1000fc839
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-UnderutilizedVmsKeyApproach.yaml
@@ -0,0 +1,18 @@
+name: wafsg-UnderutilizedVmsKeyApproach
+title: Monitor usage. Continuously monitor usage patterns and detect unused or underutilized
+ VMs. For those instances, shut down VM instances when they're not in use. Monitoring
+ is a key approach of Operational Excellence. For more information, see the recommendations
+ in Operational Excellence.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: 9269756b-3f6f-4066-907b-a24ef20d44c9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-VmPlanSizesRightResources.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-VmPlanSizesRightResources.yaml
new file mode 100644
index 000000000..27d81149a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Cost/wafsg-VmPlanSizesRightResources.yaml
@@ -0,0 +1,18 @@
+name: wafsg-VmPlanSizesRightResources
+title: Choose the right resources. Your selection of VM plan sizes and SKUs directly
+ affect the overall cost. Choose VMs based on workload characteristics. Is the workload
+ CPU intensive or does it run interruptible processes? Each SKU has associated disk
+ options that affect the overall cost.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Cost
+severity: 1
+labels:
+ guid: fd59590a-44b0-469a-aa57-e04183683d0b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureAutomanageMachineConfigurationAuditCapabilitiesOsLevelVirtualMachine.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureAutomanageMachineConfigurationAuditCapabilitiesOsLevelVirtualMachine.yaml
new file mode 100644
index 000000000..bd57cb7f0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureAutomanageMachineConfigurationAuditCapabilitiesOsLevelVirtualMachine.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureAutomanageMachineConfigurationAuditCapabilitiesOsLevelVirtualMachine
+title: Monitor OS level virtual machine (VM) configuration drift using Azure Policy.
+ Enabling Azure Automanage Machine Configuration audit capabilities through policy
+ helps application team workloads to immediately consume feature capabilities with
+ little effort.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: e7d7e484-3276-4d8b-bc05-5bcf619e8a13
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/machine-configuration/overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureUpdateManagerPatchingMechanism-1.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureUpdateManagerPatchingMechanism-1.yaml
new file mode 100644
index 000000000..82052cdec
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureUpdateManagerPatchingMechanism-1.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureUpdateManagerPatchingMechanism-1
+title: Use Azure Update Manager as a patching mechanism for Windows and Linux VMs
+ outside of Azure using Azure Arc.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: c806c048-26b7-4ddf-b4c2-b4f0c476925d
+links:
+- type: docs
+ url: 'https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations '
+- type: docs
+ url: https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureUpdateManagerPatchingMechanism.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureUpdateManagerPatchingMechanism.yaml
new file mode 100644
index 000000000..a331caeb5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureUpdateManagerPatchingMechanism.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureUpdateManagerPatchingMechanism
+title: Use Azure Update Manager as a patching mechanism for Windows and Linux VMs
+ in Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: f9887952-5d62-4688-9d70-ba6c97be9951
+links:
+- type: docs
+ url: 'https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#update-management-considerations '
+- type: docs
+ url: https://learn.microsoft.com/azure/update-manager/overview?tabs=azure-vms
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureVirtualMachinesDisasterRecoveryScenariosAzureSiteRecovery.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureVirtualMachinesDisasterRecoveryScenariosAzureSiteRecovery.yaml
new file mode 100644
index 000000000..eb3e2a4ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/revcl-AzureVirtualMachinesDisasterRecoveryScenariosAzureSiteRecovery.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureVirtualMachinesDisasterRecoveryScenariosAzureSiteRecovery
+title: Use Azure Site Recovery for Azure-to-Azure Virtual Machines disaster recovery
+ scenarios. This enables you to replicate workloads across regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 2476e49f-541a-4cdc-b979-377bcdb3751a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/site-recovery/site-recovery-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AutomaticVmGuestPatchingLinuxVirtualMachines.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AutomaticVmGuestPatchingLinuxVirtualMachines.yaml
new file mode 100644
index 000000000..3cd74e08c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AutomaticVmGuestPatchingLinuxVirtualMachines.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AutomaticVmGuestPatchingLinuxVirtualMachines
+title: Have processes for installing automatic updates. Consider using Automatic VM
+ guest patching for a timely rollout of critical patches and security patches. Use
+ Azure Update Manager to manage OS updates for your Windows and Linux virtual machines
+ in Azure.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 941dc2bd-3fae-42ce-97e8-2aae24fa414c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureChaosStudioFaultLibrariesTestEnvironment.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureChaosStudioFaultLibrariesTestEnvironment.yaml
new file mode 100644
index 000000000..ea523f410
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureChaosStudioFaultLibrariesTestEnvironment.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureChaosStudioFaultLibrariesTestEnvironment
+title: Build a test environment that closely matches your production environment to
+ test updates and changes before you deploy them to production. Have processes in
+ place to test the security updates, performance baselines, and reliability faults.
+ Take advantage of Azure Chaos Studio fault libraries to inject and simulate error
+ conditions. For more information, see Azure Chaos Studio fault and action library.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: bc5e266d-f8ee-4c9d-ba6c-edbb581c9a97
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureComputeGalleryScaleSet.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureComputeGalleryScaleSet.yaml
new file mode 100644
index 000000000..e4acaeccd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureComputeGalleryScaleSet.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureComputeGalleryScaleSet
+title: (VMs, scale set) Automatically deploy VM applications from the Azure Compute
+ Gallery by defining the applications in the profile.
+description: The VMs in the scale set are created and the specified apps are preinstalled,
+ which makes management easier.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 77a59c87-2e77-4070-8823-def10424362e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureMonitorAlertsResourceUsage.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureMonitorAlertsResourceUsage.yaml
new file mode 100644
index 000000000..af1202805
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureMonitorAlertsResourceUsage.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureMonitorAlertsResourceUsage
+title: Monitor the VM instances. Collect logs and metrics from VM instances to monitor
+ resource usage and measure the health of the instances. Some common metrics include
+ CPU usage, number of requests, and input/output (I/O) latency. Set up Azure Monitor
+ alerts to be notified about issues and to detect configuration changes in your environment.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 7fabd21e-bee0-4264-a4c0-666cb66e9deb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureUpdateManagerScaleSet.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureUpdateManagerScaleSet.yaml
new file mode 100644
index 000000000..630c99125
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-AzureUpdateManagerScaleSet.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureUpdateManagerScaleSet
+title: (Scale set) Keep your VMs up to date by setting an upgrade policy. We recommend
+ rolling upgrades. However, if you need granular control, choose to upgrade manually. For
+ Flexible orchestration, you can use Azure Update Manager.
+description: Security is the primary reason for upgrades. Security assurances for
+ the instances shouldn't decay over time. Rolling upgrades are done in batches,
+ which ensures all instances aren't down at the same time.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 2adb5980-e146-44a0-b143-b1e618b9af3f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-FollowingOptionsCustomScripts.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-FollowingOptionsCustomScripts.yaml
new file mode 100644
index 000000000..a84065f56
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-FollowingOptionsCustomScripts.yaml
@@ -0,0 +1,17 @@
+name: wafsg-FollowingOptionsCustomScripts
+title: 'Automate processes for bootstrapping, running scripts, and configuring VMs.
+ You can automate processes by using extensions or custom scripts. We recommend the
+ following options:'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 91646a8b-4462-401b-9b10-e600079458fe
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-HealthVms.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-HealthVms.yaml
new file mode 100644
index 000000000..189841371
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-HealthVms.yaml
@@ -0,0 +1,15 @@
+name: wafsg-HealthVms
+title: Monitor the health of the VMs and their dependencies.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: f41eee87-6f25-4471-b482-a186535f468d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-OsSpecificDataCollectionRulesMonitorAgentExtension.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-OsSpecificDataCollectionRulesMonitorAgentExtension.yaml
new file mode 100644
index 000000000..4043cd06b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-OsSpecificDataCollectionRulesMonitorAgentExtension.yaml
@@ -0,0 +1,21 @@
+name: wafsg-OsSpecificDataCollectionRulesMonitorAgentExtension
+title: (VMs, scale set) Monitor and measure the health of the VM instances. Deploy
+ the Monitor agent extension to your VMs to collect monitoring data from the guest
+ OS with OS-specific data collection rules. Enable VM insights to monitor health
+ and performance and to view trends from the collected data. Use boot diagnostics
+ to get information as VMs boot. Boot diagnostics also diagnose boot failures.
+description: Monitoring data is at the core of incident resolution. A comprehensive
+ monitoring stack provides information about how the VMs are performing and their
+ health. By continuously monitoring the instances, you can be ready for or prevent
+ failures like performance overload and reliability issues.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: eb4dbee8-3513-472d-a1da-f27afda1e7d2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-PrebuiltSoftwareComponentsSoftwareInstallation.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-PrebuiltSoftwareComponentsSoftwareInstallation.yaml
new file mode 100644
index 000000000..ac905f159
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-PrebuiltSoftwareComponentsSoftwareInstallation.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PrebuiltSoftwareComponentsSoftwareInstallation
+title: Install prebuilt software components as extensions as part of bootstrapping. Azure
+ supports many extensions that can be used to configure, monitor, secure, and provide
+ utility applications for your VMs. Enable automatic upgrades on extensions.
+description: Extensions can help simplify the software installation at scale without
+ you having to manually install, configure, or upgrade it on each VM.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: bb8b2ac8-e277-4172-996b-a366a00321d3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-QuotaLevel.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-QuotaLevel.yaml
new file mode 100644
index 000000000..890f8f44a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-QuotaLevel.yaml
@@ -0,0 +1,17 @@
+name: wafsg-QuotaLevel
+title: Manage your quota. Plan what level of quota your workload requires and review
+ that level regularly as the workload evolves. If you need to increase or decrease
+ your quota, request those changes early.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 00d9961c-9d4b-4edd-9c69-45aed5d2172c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-RegularSystemPatchingImmediatePatchApplication.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-RegularSystemPatchingImmediatePatchApplication.yaml
new file mode 100644
index 000000000..0ab576ea6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-RegularSystemPatchingImmediatePatchApplication.yaml
@@ -0,0 +1,18 @@
+name: wafsg-RegularSystemPatchingImmediatePatchApplication
+title: Create a maintenance plan that includes regular system patching as a part of
+ routine operations. Include emergency processes that allow for immediate patch application.
+ You can have custom processes to manage patching or partially delegate the task
+ to Azure.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: f419068c-ec1e-4c73-a7c6-ead478c8b4d6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-VirtualMachineScaleSetsMultipleFaultDomains.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-VirtualMachineScaleSetsMultipleFaultDomains.yaml
new file mode 100644
index 000000000..1d223b573
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Operations/wafsg-VirtualMachineScaleSetsMultipleFaultDomains.yaml
@@ -0,0 +1,19 @@
+name: wafsg-VirtualMachineScaleSetsMultipleFaultDomains
+title: (Scale set) Virtual Machine Scale Sets in Flexible orchestration mode can help
+ simplify the deployment and management of your workload. For example, you can easily
+ manage self-healing by using automatic repairs.
+description: Flexible orchestration can manage VM instances at scale. Handing individual
+ VMs adds operational overhead. For example, when you delete VM instances, the associated
+ disks and NICs are also automatically deleted. VM instances are spread across multiple
+ fault domains so that update operations don't disrupt service.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Operations
+severity: 1
+labels:
+ guid: 6ecf127d-151e-41d6-a796-2f1b0502ddd7
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-AutoscaleRulesVmInstances.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-AutoscaleRulesVmInstances.yaml
new file mode 100644
index 000000000..fe6e26bdb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-AutoscaleRulesVmInstances.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AutoscaleRulesVmInstances
+title: (VMs, scale set) Set autoscale rules to increase or decrease the number of
+ VM instances in your scale set based on demand.
+description: If your application demand increases, the load on the VM instances in
+ your scale set increases. Autoscale rules ensure that you have enough resources
+ to meet the demand.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: ac6b7b0d-63b8-4c6f-b7ed-f0bd175ba810
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ContentDeliveryNetworksDependentServices.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ContentDeliveryNetworksDependentServices.yaml
new file mode 100644
index 000000000..949b7d7c2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ContentDeliveryNetworksDependentServices.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ContentDeliveryNetworksDependentServices
+title: Take the dependent services into account. Workload dependencies, like caching,
+ network traffic, and content delivery networks, that interact with the VMs can affect
+ performance. Also, consider geographical distribution, like zones and regions, which
+ can add latency.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: b255b907-9f43-4998-ad40-ef60a225fe43
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-HighPerformanceUseCasesNonVolatileMemoryExpress.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-HighPerformanceUseCasesNonVolatileMemoryExpress.yaml
new file mode 100644
index 000000000..fb28b55ff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-HighPerformanceUseCasesNonVolatileMemoryExpress.yaml
@@ -0,0 +1,18 @@
+name: wafsg-HighPerformanceUseCasesNonVolatileMemoryExpress
+title: VM performance tuning. Take advantage of performance optimization and enhancing
+ features as required by the workload. For example, use locally attached Non-Volatile
+ Memory Express (NVMe) for high performance use cases and accelerated networking,
+ and use Premium SSD v2 for better performance and scalability.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: d7ea0eb8-7505-4e2b-9be1-380fad934a96
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-LowLatencyDiskSupportVmsHighInputOutputOperations.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-LowLatencyDiskSupportVmsHighInputOutputOperations.yaml
new file mode 100644
index 000000000..f7900b6b0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-LowLatencyDiskSupportVmsHighInputOutputOperations.yaml
@@ -0,0 +1,21 @@
+name: wafsg-LowLatencyDiskSupportVmsHighInputOutputOperations
+title: (VMs, scale set) Set the storage profile by analyzing the disk performance
+ of existing workloads and the VM SKU. Use Premium SSDs for production VMs. Adjust
+ the performance of disks with Premium SSD v2. Use locally attached NVMe devices.
+description: Premium SSDs deliver high-performance and low-latency disk support VMs
+ with I/O-intensive workloads. Premium SSD v2 doesn't require disk resizing, which
+ enables high performance without excessive over-provisioning and minimizes the cost
+ of unused capacity. When available on VM SKUs, locally attached NVMe or similar
+ devices can offer high performance, especially for use cases that require high input/output
+ operations per second (IOPS) and low latency.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: 633df150-cf95-4992-853f-72b1d599395b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-OperationalExcellenceBestPracticesPerformanceData.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-OperationalExcellenceBestPracticesPerformanceData.yaml
new file mode 100644
index 000000000..089a8d163
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-OperationalExcellenceBestPracticesPerformanceData.yaml
@@ -0,0 +1,17 @@
+name: wafsg-OperationalExcellenceBestPracticesPerformanceData
+title: Collect performance data. Follow the Operational Excellence best practices
+ for monitoring and deploy the appropriate extensions to view metrics that track
+ against performance indicators.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: fd304fa2-0694-4952-b53a-6161a4e21099
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-PerformanceProfileScaleSets.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-PerformanceProfileScaleSets.yaml
new file mode 100644
index 000000000..de7b4fa37
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-PerformanceProfileScaleSets.yaml
@@ -0,0 +1,18 @@
+name: wafsg-PerformanceProfileScaleSets
+title: Factor in the performance profile of VMs, scale sets, and disk configuration
+ in your capacity planning. Each SKU has a different profile of memory and CPU and
+ behaves differently depending on the type of workload. Conduct pilots and proofs
+ of concept to understand performance behavior under the specific workload.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: 5739c739-7af2-4f47-8c0a-a38cce9f64af
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ProximityPlacementGroupsAzureComputeResources.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ProximityPlacementGroupsAzureComputeResources.yaml
new file mode 100644
index 000000000..eccafab6d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ProximityPlacementGroupsAzureComputeResources.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ProximityPlacementGroupsAzureComputeResources
+title: (VMs, scale set) Deploy latency-sensitive workload VMs in proximity placement
+ groups.
+description: Proximity placement groups reduce the physical distance between Azure
+ compute resources, which can improve performance and reduce network latency between
+ stand-alone VMs, VMs in multiple availability sets, or VMs in multiple scale sets.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: d69311a8-15b4-4509-928a-0dd369babed3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ProximityPlacementGroupsLowLatency.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ProximityPlacementGroupsLowLatency.yaml
new file mode 100644
index 000000000..151264b6e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ProximityPlacementGroupsLowLatency.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ProximityPlacementGroupsLowLatency
+title: Proximity placement groups. Use proximity placement groups in workloads where
+ low latency is required to ensure that VMs are physically located close to each
+ other.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: e2a34493-c121-47fe-aa04-d9897feeca73
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ScaleSetCapacityPlanning.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ScaleSetCapacityPlanning.yaml
new file mode 100644
index 000000000..275c93861
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-ScaleSetCapacityPlanning.yaml
@@ -0,0 +1,19 @@
+name: wafsg-ScaleSetCapacityPlanning
+title: (VMs, scale set) Choose SKUs for VMs that align with your capacity planning.
+ Have a good understanding of your workload requirements, including the number of
+ cores, memory, storage, and network bandwidth so that you can filter out unsuitable
+ SKUs.
+description: Rightsizing your VMs is a fundamental decision that significantly affects
+ the performance of your workload. Without the right set of VMs, you might experience
+ performance issues and accrue unnecessary costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: 0278dc83-3a7e-4439-b706-1bdc45e0ecd0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-SecondConcurrentUsersPerformanceTargets.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-SecondConcurrentUsersPerformanceTargets.yaml
new file mode 100644
index 000000000..795c86f48
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-SecondConcurrentUsersPerformanceTargets.yaml
@@ -0,0 +1,18 @@
+name: wafsg-SecondConcurrentUsersPerformanceTargets
+title: Define performance targets. Identify VM metrics to track and measure against
+ performance indicators as response time, CPU utilization, and memory utilization,
+ as well as workload metrics such as transactions per second, concurrent users, and
+ availability and health.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: 9ea20a53-3560-42fd-b9c2-e0554d262a5f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-SingleRootIOVirtualizationAcceleratedNetworking.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-SingleRootIOVirtualizationAcceleratedNetworking.yaml
new file mode 100644
index 000000000..c8166f806
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Performance/wafsg-SingleRootIOVirtualizationAcceleratedNetworking.yaml
@@ -0,0 +1,15 @@
+name: wafsg-SingleRootIOVirtualizationAcceleratedNetworking
+title: (VMs) Consider enabling accelerated networking.
+description: It enables single root I/O virtualization (SR-IOV) to a VM, which greatly
+ improves its networking performance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Performance
+severity: 1
+labels:
+ guid: 8b4677c6-aed0-4e08-9736-6710010b142b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AvailabilityZonesAvailabilitySets.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AvailabilityZonesAvailabilitySets.yaml
new file mode 100644
index 000000000..c8fde7796
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AvailabilityZonesAvailabilitySets.yaml
@@ -0,0 +1,18 @@
+name: revcl-AvailabilityZonesAvailabilitySets
+title: For regions that do not support Availability Zones deploy VMs into Availability
+ Sets
+description: Use at least two VMs in Availability Sets to isolate VMs on different
+ fault and update domains.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 5a785d6f-e96c-496a-b884-4cf3b2b38c88
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability-set-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureLoadBalancerIncomingNetworkTraffic.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureLoadBalancerIncomingNetworkTraffic.yaml
new file mode 100644
index 000000000..033de1167
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureLoadBalancerIncomingNetworkTraffic.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureLoadBalancerIncomingNetworkTraffic
+title: Azure Load Balancer and Application Gateway distribute incoming network traffic
+ across multiple resources.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 84101f59-1941-4195-a270-e28034290e3a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureMetadataServiceUpcomingMaintenanceEvents.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureMetadataServiceUpcomingMaintenanceEvents.yaml
new file mode 100644
index 000000000..430bd93f6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureMetadataServiceUpcomingMaintenanceEvents.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureMetadataServiceUpcomingMaintenanceEvents
+title: Utilize Scheduled Events to prepare for VM maintenance
+description: Scheduled Events is an Azure Metadata Service that provides information
+ about upcoming maintenance events for virtual machines (VMs). By leveraging Scheduled
+ Events, you can proactively prepare your applications for VM maintenance, minimizing
+ disruption and improving the availability of your VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 2
+labels:
+ guid: 6d3b475a-5c7a-4cbe-99bb-e64dd8902e87
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/windows/scheduled-events
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureVirtualMachinesAzureBackup.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureVirtualMachinesAzureBackup.yaml
new file mode 100644
index 000000000..abe6c8091
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-AzureVirtualMachinesAzureBackup.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureVirtualMachinesAzureBackup
+title: Consider Azure Backup to meet your resiliency requirements for Azure VMs
+description: Ensure that Azure Backup is utilized appropriately to meet your organization's
+ resiliency requirements for Azure virtual machines (VMs).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 4d874a74-8b66-42d6-b150-512a66498f6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/backup-azure-vms-introduction
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-LeverageAvailabilityZonesOtherAvailabilityZones.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-LeverageAvailabilityZonesOtherAvailabilityZones.yaml
new file mode 100644
index 000000000..4c8c051f3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-LeverageAvailabilityZonesOtherAvailabilityZones.yaml
@@ -0,0 +1,17 @@
+name: revcl-LeverageAvailabilityZonesOtherAvailabilityZones
+title: Leverage Availability Zones for your VMs in regions where they are supported
+description: Co-locate your compute, storage, networking, and data resources across
+ an availability zone, and replicate this arrangement in other availability zones.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: e514548d-2447-4ec6-9138-b8200f1ce16e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/availability-zones-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-LeverageAvailabilityZonesVms.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-LeverageAvailabilityZonesVms.yaml
new file mode 100644
index 000000000..ed345c22f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-LeverageAvailabilityZonesVms.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAvailabilityZonesVms
+title: Leverage Availability Zones for your VMs in regions where they are supported.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 826c5c45-bb79-4951-a812-e3bfbfd7326b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/availability-zones-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-ManagedDisksDataDurability.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-ManagedDisksDataDurability.yaml
new file mode 100644
index 000000000..3d3ebb1d0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-ManagedDisksDataDurability.yaml
@@ -0,0 +1,17 @@
+name: revcl-ManagedDisksDataDurability
+title: Ensure Managed Disks are used for all VMs
+description: Azure automatically replicates managed disks within a region to ensure
+ data durability and protect against single-point failures.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: b31e38c3-f298-412b-8363-cffe179b599d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-NetworkVirtualAppliancesNecessaryNvaConfiguration.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-NetworkVirtualAppliancesNecessaryNvaConfiguration.yaml
new file mode 100644
index 000000000..27a636801
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-NetworkVirtualAppliancesNecessaryNvaConfiguration.yaml
@@ -0,0 +1,20 @@
+name: revcl-NetworkVirtualAppliancesNecessaryNvaConfiguration
+title: Deploy Network Virtual Appliances (NVAs) in a vendor supported configuration
+ for High Availability
+description: When choosing the best option for deploying NVAs in Azure, it is crucial
+ to consider the vendor's recommendations and validate that the specific design has
+ been vetted and validated by the NVA vendor. The vendor should also provide the
+ necessary NVA configuration for seamless integration in Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 8b1188b3-c6a4-46ce-a544-451e192d3442
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-PartnerNetworkingTechnologiesPartnerVendor.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-PartnerNetworkingTechnologiesPartnerVendor.yaml
new file mode 100644
index 000000000..70d951dc9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-PartnerNetworkingTechnologiesPartnerVendor.yaml
@@ -0,0 +1,16 @@
+name: revcl-PartnerNetworkingTechnologiesPartnerVendor
+title: When deploying partner networking technologies or NVAs, follow the partner
+ vendor's guidance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: e2e8abac-3571-4559-ab91-53e89f89dc7b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/dmz/nva-ha
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-PotentialResourceConstraintsDrRegion.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-PotentialResourceConstraintsDrRegion.yaml
new file mode 100644
index 000000000..afea88e8a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-PotentialResourceConstraintsDrRegion.yaml
@@ -0,0 +1,18 @@
+name: revcl-PotentialResourceConstraintsDrRegion
+title: Increase quotas in DR region before testing failover with ASR
+description: By ensuring that the necessary quotas are increased in your DR region
+ before testing failover with ASR, you can avoid any potential resource constraints
+ during the recovery process for failed over VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: e6e2065b-3a76-4af4-a691-e8939ada4666
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/quotas/per-vm-quota-requests
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-ProductionWorkloadSingleVm.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-ProductionWorkloadSingleVm.yaml
new file mode 100644
index 000000000..4a9f1e549
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-ProductionWorkloadSingleVm.yaml
@@ -0,0 +1,15 @@
+name: revcl-ProductionWorkloadSingleVm
+title: Avoid running a production workload on a single VM.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 7ccb7c06-5511-42df-8177-d97f08d0337d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-RecoveryTimeObjectiveLowRtoRequirements.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-RecoveryTimeObjectiveLowRtoRequirements.yaml
new file mode 100644
index 000000000..029f43308
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-RecoveryTimeObjectiveLowRtoRequirements.yaml
@@ -0,0 +1,18 @@
+name: revcl-RecoveryTimeObjectiveLowRtoRequirements
+title: For Azure and on-premises VMs (Hyper-V/Phyiscal/VMware) with low RTO requirements
+ use Azure Site Recovery
+description: Azure Site Recovery enables you to achieve low RTO (Recovery Time Objective)
+ for your Azure and hybrid VMs by providing continuous replication and failover capabilities.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 2a6bcca2-b5fe-4a1e-af3d-d95d48c7c891
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/site-recovery/site-recovery-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-SqlServerTempdbTempDisk.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-SqlServerTempdbTempDisk.yaml
new file mode 100644
index 000000000..b00d4f1bf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-SqlServerTempdbTempDisk.yaml
@@ -0,0 +1,18 @@
+name: revcl-SqlServerTempdbTempDisk
+title: Do not use the Temp disk for anything that is not acceptable to be lost
+description: Temporary disks are intended for short-term storage of non-persistent
+ data such as page files, swap files, or SQL Server tempdb. Storing persistent data
+ on temporary disks can lead to data loss during maintenance events or VM redeployment.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: e0d5973c-d4ce-432c-8881-37f6f7c4c0d4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview#temporary-disk
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-UseCapacityReservationsCriticalWorkloads.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-UseCapacityReservationsCriticalWorkloads.yaml
new file mode 100644
index 000000000..4310ae6ce
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-UseCapacityReservationsCriticalWorkloads.yaml
@@ -0,0 +1,17 @@
+name: revcl-UseCapacityReservationsCriticalWorkloads
+title: Use Capacity Reservations for critical workloads that require guaranteed capacity
+description: By using Capacity Reservations, you can effectively manage capacity for
+ critical workloads, ensuring resource availability in specified regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 2
+labels:
+ guid: bd7bb012-f7b9-45e0-9e15-8e3ea3992c2d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/capacity-reservation-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-VirtualMachineConnectivitySingleInstanceVms.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-VirtualMachineConnectivitySingleInstanceVms.yaml
new file mode 100644
index 000000000..37ff1760b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-VirtualMachineConnectivitySingleInstanceVms.yaml
@@ -0,0 +1,18 @@
+name: revcl-VirtualMachineConnectivitySingleInstanceVms
+title: Use Premium or Ultra disks for production VMs
+description: Single Instance VMs using Premium SSD or Ultra Disk for all Operating
+ System Disks and Data Disks are guaranteed to have Virtual Machine Connectivity
+ of at least 99.9%
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 8052d88e-79d1-47b7-9b22-a5a67e7a8ed4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/disks-types
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-VirtualMachineScaleSetsAzureSiteRecovery.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-VirtualMachineScaleSetsAzureSiteRecovery.yaml
new file mode 100644
index 000000000..ad318f475
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/revcl-VirtualMachineScaleSetsAzureSiteRecovery.yaml
@@ -0,0 +1,17 @@
+name: revcl-VirtualMachineScaleSetsAzureSiteRecovery
+title: Avoid running a production workload on a single VM
+description: Azure provides multiple options for VM redundancy to meet different requirements
+ (Availability Zones, Virtual Machine Scale Sets, Availability Sets, Azure Site Recovery)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 0
+labels:
+ guid: 6ba2c021-4991-414a-9d3c-e574dccbd979
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-AutomaticRecoveryOptionsHealthDegradationMonitoring.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-AutomaticRecoveryOptionsHealthDegradationMonitoring.yaml
new file mode 100644
index 000000000..668a75c4e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-AutomaticRecoveryOptionsHealthDegradationMonitoring.yaml
@@ -0,0 +1,20 @@
+name: wafsg-AutomaticRecoveryOptionsHealthDegradationMonitoring
+title: Explore the automatic recovery options. Azure supports health degradation monitoring
+ and self-healing features for VMs. For example, scale sets provide automatic instance
+ repairs. In more advanced scenarios, self-healing involves using Azure Site Recovery,
+ having a passive standby to fail over to, or redeploying from infrastructure as
+ code (IaC). The method that you choose should align with the business requirements
+ and your organizational operations. For more information, see VM service disruptions.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 9a34544a-d391-485c-8373-e191d47e3fb8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-CapacityReservationsFeatureApplicableSlas.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-CapacityReservationsFeatureApplicableSlas.yaml
new file mode 100644
index 000000000..9514f83de
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-CapacityReservationsFeatureApplicableSlas.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CapacityReservationsFeatureApplicableSlas
+title: (VMs) Take advantage of the capacity reservations feature.
+description: Capacity is reserved for your use and is available within the scope of
+ the applicable SLAs. You can delete capacity reservations when you no longer need
+ them, and billing is consumption based.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 640c79fd-8a7f-4824-ba96-ca41034d02e8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-CompositeServiceLevelObjectivesAzureServiceLevelAgreements.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-CompositeServiceLevelObjectivesAzureServiceLevelAgreements.yaml
new file mode 100644
index 000000000..950c9e800
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-CompositeServiceLevelObjectivesAzureServiceLevelAgreements.yaml
@@ -0,0 +1,17 @@
+name: wafsg-CompositeServiceLevelObjectivesAzureServiceLevelAgreements
+title: Calculate your composite service-level objectives (SLOs) based on Azure service-level
+ agreements (SLAs). Ensure that your SLO isn't higher than the Azure SLAs to avoid
+ unrealistic expectations and potential issues.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 0962db49-c5c0-45b4-9064-c5da949a67b3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ComprehensiveDisasterRecoveryPlanComprehensivePlan.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ComprehensiveDisasterRecoveryPlanComprehensivePlan.yaml
new file mode 100644
index 000000000..22899b49b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ComprehensiveDisasterRecoveryPlanComprehensivePlan.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ComprehensiveDisasterRecoveryPlanComprehensivePlan
+title: Create a comprehensive disaster recovery plan. Disaster preparedness involves
+ creating a comprehensive plan and deciding on a technology for recovery.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: dcaadec2-8bc9-43ce-b13d-51aa5c4db90e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-EphemeralOperatingSystemFailureModeAnalysis.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-EphemeralOperatingSystemFailureModeAnalysis.yaml
new file mode 100644
index 000000000..7123774f3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-EphemeralOperatingSystemFailureModeAnalysis.yaml
@@ -0,0 +1,19 @@
+name: wafsg-EphemeralOperatingSystemFailureModeAnalysis
+title: Conduct a failure mode analysis to minimize points of failure by analyzing
+ VM interactions with the network and storage components. Choose configurations like
+ ephemeral operating system (OS) disks to localize disk access and avoid network
+ hops. Add a load balancer to enhance self-preservation by distributing network traffic
+ across multiple VMs, which improves availability and reliability.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 957b7b80-d049-454d-b65b-7bbd967b141b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-EphemeralOsDisksSeparateDataDisk.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-EphemeralOsDisksSeparateDataDisk.yaml
new file mode 100644
index 000000000..ec1a1cb1e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-EphemeralOsDisksSeparateDataDisk.yaml
@@ -0,0 +1,18 @@
+name: wafsg-EphemeralOsDisksSeparateDataDisk
+title: Create state isolation. Workload data should be on a separate data disk to
+ prevent interference with the OS disk. If a VM fails, you can create a new OS disk
+ with the same data disk, which ensures resilience and fault isolation. For more
+ information, see Ephemeral OS disks.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: b2ecdce9-fd21-4784-beb8-6084a166aa12
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-InRedundancyOptionsRedundancyChoices.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-InRedundancyOptionsRedundancyChoices.yaml
new file mode 100644
index 000000000..287738e94
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-InRedundancyOptionsRedundancyChoices.yaml
@@ -0,0 +1,19 @@
+name: wafsg-InRedundancyOptionsRedundancyChoices
+title: Make VMs and their dependencies redundant across zones. If a VM fails, the
+ workload should continue to function because of redundancy. Include dependencies
+ in your redundancy choices. For example, use the built-in redundancy options that
+ are available with disks. Use zone-redundant IPs to ensure data availability and
+ high uptime.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 5aaae165-879c-4ce7-8661-c4a05b0e5074
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-MaximumLoadExtraCapacity.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-MaximumLoadExtraCapacity.yaml
new file mode 100644
index 000000000..6a8862241
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-MaximumLoadExtraCapacity.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MaximumLoadExtraCapacity
+title: Rightsize the VMs and their dependencies. Understand your VM's expected work
+ to ensure it's not undersized and can handle the maximum load. Have extra capacity
+ to mitigate failures.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 285a5da3-2741-4f96-b58f-d2a48be2d39d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-OneFaultDomainManyFaultDomains.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-OneFaultDomainManyFaultDomains.yaml
new file mode 100644
index 000000000..836da58fd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-OneFaultDomainManyFaultDomains.yaml
@@ -0,0 +1,16 @@
+name: wafsg-OneFaultDomainManyFaultDomains
+title: (Scale set) Allow Flexible orchestration to spread the VM instances across
+ as many fault domains as possible.
+description: This option isolates fault domains. During maintenance periods, when
+ one fault domain is updated, VM instances are available in the other fault domains.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 18b6cb3c-704e-415c-ac33-a04ce8d33982
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-PreferredRepairActionPrematureRepairOperations.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-PreferredRepairActionPrematureRepairOperations.yaml
new file mode 100644
index 000000000..3da1202a0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-PreferredRepairActionPrematureRepairOperations.yaml
@@ -0,0 +1,19 @@
+name: wafsg-PreferredRepairActionPrematureRepairOperations
+title: (VMs) Implement heath endpoints that emit instance health statuses on VMs. (Scale
+ set) Enable automatic repairs on the scale set by specifying the preferred repair
+ action. Consider setting a time frame during which automatic repairs pause if the
+ VM's state changes.
+description: Maintain availability even if an instance is deemed unhealthy. Automatic
+ repairs initiate recovery by replacing the faulty instance. Setting a time window
+ can prevent inadvertent or premature repair operations.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 0bc7ac44-c4e0-4192-a423-09571aae23dc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ReliabilityDesignChoicesApplicationVmPatches.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ReliabilityDesignChoicesApplicationVmPatches.yaml
new file mode 100644
index 000000000..21ce5c47d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ReliabilityDesignChoicesApplicationVmPatches.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ReliabilityDesignChoicesApplicationVmPatches
+title: Run operations with rigor. Reliability design choices must be supported by
+ effective operations based on the principles of monitoring, resiliency testing in
+ production, automated application VM patches and upgrades, and consistency of deployments.
+ For operational guidance, see Operational Excellence.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: eaff9b97-b18a-4ab7-9307-14cf820eeb5a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ScaleSetDeploymentTimes.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ScaleSetDeploymentTimes.yaml
new file mode 100644
index 000000000..3f3b02f49
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-ScaleSetDeploymentTimes.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ScaleSetDeploymentTimes
+title: (Scale set) Enable overprovisioning on scale sets.
+description: Overprovisioning reduces deployment times and has a cost benefit because
+ the extra VMs aren't billed.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: c97c1d86-cef5-435b-9312-c8f41b231afe
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-TheVmInstancesScaleSet.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-TheVmInstancesScaleSet.yaml
new file mode 100644
index 000000000..e044ca649
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-TheVmInstancesScaleSet.yaml
@@ -0,0 +1,21 @@
+name: wafsg-TheVmInstancesScaleSet
+title: (Scale set) Deploy across availability zones on scale sets. Set up at least
+ two instances in each zone. Zone balancing equally spreads the instances across
+ zones.
+description: The VM instances are provisioned in physically separate locations within
+ each Azure region that are tolerant to local failures. Keep in mind that, depending
+ on resource availability, there might be an uneven number of instances across zones.
+ Zone balancing supports availability by making sure that, if one zone is down, the
+ other zones have sufficient instances. Two instances in each zone provide a buffer
+ during upgrades.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: cfcbe692-8d95-414c-855a-2af8530bbee7
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachineScaleSetsFlexibleOrchestrationMode.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachineScaleSetsFlexibleOrchestrationMode.yaml
new file mode 100644
index 000000000..055ff2ab9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachineScaleSetsFlexibleOrchestrationMode.yaml
@@ -0,0 +1,17 @@
+name: wafsg-VirtualMachineScaleSetsFlexibleOrchestrationMode
+title: (Scale set) Use Virtual Machine Scale Sets in Flexible orchestration mode to
+ deploy VMs.
+description: Future-proof your application for scaling and take advantage of the high
+ availability guarantees that spread VMs across fault domains in a region or an availability
+ zone.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 2f3edda7-4225-472e-83d0-265c26367213
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachineScaleSetsServiceLevelDegradation.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachineScaleSetsServiceLevelDegradation.yaml
new file mode 100644
index 000000000..71199a6d1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachineScaleSetsServiceLevelDegradation.yaml
@@ -0,0 +1,18 @@
+name: wafsg-VirtualMachineScaleSetsServiceLevelDegradation
+title: Be ready to scale up and scale out to prevent service level degradation and
+ to avoid failures. Virtual Machine Scale Sets have autoscale capabilities that create
+ new instances as required and distribute the load across multiple VMs and availability
+ zones.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 553a3f24-22d8-4c4c-a26a-84063663c613
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachinesQuotasDesignRestrictions.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachinesQuotasDesignRestrictions.yaml
new file mode 100644
index 000000000..ec87b8727
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Reliability/wafsg-VirtualMachinesQuotasDesignRestrictions.yaml
@@ -0,0 +1,19 @@
+name: wafsg-VirtualMachinesQuotasDesignRestrictions
+title: Review Virtual Machines quotas and limits that might pose design restrictions.
+ VMs have specific limits and quotas, which vary based on the type of VM or the region.
+ There might be subscription restrictions, such as the number of VMs per subscription
+ or the number of cores per VM. If other workloads share your subscription, then
+ your ability to consume data might be reduced.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Reliability
+severity: 1
+labels:
+ guid: 361c5452-9715-4191-b073-b0331eb90559
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-BaseOperatingSystemPatchingAzureMonitorLogs.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-BaseOperatingSystemPatchingAzureMonitorLogs.yaml
new file mode 100644
index 000000000..5206a077a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-BaseOperatingSystemPatchingAzureMonitorLogs.yaml
@@ -0,0 +1,16 @@
+name: revcl-BaseOperatingSystemPatchingAzureMonitorLogs
+title: Monitor base operating system patching drift via Azure Monitor Logs and Defender
+ for Cloud.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 15833ee7-ad6c-46d3-9331-65c7acbe44ab
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/security-center/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-CompliantBaselineVmConfigurationVmExtensions.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-CompliantBaselineVmConfigurationVmExtensions.yaml
new file mode 100644
index 000000000..83f6b8606
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-CompliantBaselineVmConfigurationVmExtensions.yaml
@@ -0,0 +1,16 @@
+name: revcl-CompliantBaselineVmConfigurationVmExtensions
+title: Use Azure policies to automatically deploy software configurations through
+ VM extensions and enforce a compliant baseline VM configuration.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: f541acdc-e979-4377-acdb-3751ab2ab13a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-EndpointProtectionIaasServers.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-EndpointProtectionIaasServers.yaml
new file mode 100644
index 000000000..448825e88
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-EndpointProtectionIaasServers.yaml
@@ -0,0 +1,15 @@
+name: revcl-EndpointProtectionIaasServers
+title: Enable Endpoint Protection on IaaS Servers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 0
+labels:
+ guid: 24d96b30-61ee-4436-a1cc-d6ef08bc574b
+links:
+- type: docs
+ url: https://learn.microsoft.com/mem/configmgr/protect/deploy-use/endpoint-protection
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-VmSecurityConfigurationDriftGuestConfigurationFeatures.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-VmSecurityConfigurationDriftGuestConfigurationFeatures.yaml
new file mode 100644
index 000000000..9e468e9d5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/revcl-VmSecurityConfigurationDriftGuestConfigurationFeatures.yaml
@@ -0,0 +1,18 @@
+name: revcl-VmSecurityConfigurationDriftGuestConfigurationFeatures
+title: Monitor VM security configuration drift via Azure Policy.
+description: Azure Policy's guest configuration features can audit and remediate machine
+ settings (e.g., OS, application, environment) to ensure resources align with expected
+ configurations, and Update Management can enforce patch management for VMs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: da6e55d7-d8a2-4adb-817d-6326af625ca4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AssociatedNetworkSecurityGroupVirtualNetworkInterfaces.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AssociatedNetworkSecurityGroupVirtualNetworkInterfaces.yaml
new file mode 100644
index 000000000..f326ea176
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AssociatedNetworkSecurityGroupVirtualNetworkInterfaces.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AssociatedNetworkSecurityGroupVirtualNetworkInterfaces
+title: (VMs) Choose secure networking options for your VM's network profile. Don't
+ directly associate public IP addresses to your VMs and don't enable IP forwarding. Ensure
+ that all virtual network interfaces have an associated network security group.
+description: You can set segmentation controls in the networking profile. Attackers
+ scan public IP addresses, which makes VMs vulnerable to threats.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 312f1ab0-131f-4606-ae9b-18956ba60371
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AttackSurfaceOsImages.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AttackSurfaceOsImages.yaml
new file mode 100644
index 000000000..3f4605679
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AttackSurfaceOsImages.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AttackSurfaceOsImages
+title: Reduce the attack surface by hardening OS images and removing unused components.
+ Use smaller images and remove binaries that aren't required to run the workload.
+ Tighten the VM configurations by removing features, like default accounts and ports,
+ that you don't need.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: e4779d30-f938-495f-b9a6-bfed5afa8c38
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AutomatedSecurityPatchingSecurityCompliance.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AutomatedSecurityPatchingSecurityCompliance.yaml
new file mode 100644
index 000000000..41c2b4d85
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AutomatedSecurityPatchingSecurityCompliance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AutomatedSecurityPatchingSecurityCompliance
+title: Ensure timely and automated security patching and upgrades. Make sure updates
+ are automatically rolled out and validated by using a well-defined process. Use
+ a solution like Azure Automation to manage OS updates and maintain security compliance
+ by making critical updates.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 51c32087-d5b8-4be6-9006-786bf12bd94b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureConfidentialComputingHighSensitivityRequirements.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureConfidentialComputingHighSensitivityRequirements.yaml
new file mode 100644
index 000000000..3a9fe05a0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureConfidentialComputingHighSensitivityRequirements.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureConfidentialComputingHighSensitivityRequirements
+title: Identify the VMs that hold state. Make sure that data is classified according
+ to the sensitivity labels that your organization provided. Protect data by using
+ security controls like appropriate levels of at-rest and in-transit encryption.
+ If you have high sensitivity requirements, consider using high-security controls
+ like double encryption and Azure confidential computing to protect data-in-use.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: a4ceac6a-ac90-4278-9ad9-706194c2d5c9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureKeyVaultExtensionCorrespondingCertificates.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureKeyVaultExtensionCorrespondingCertificates.yaml
new file mode 100644
index 000000000..fb5840bdd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureKeyVaultExtensionCorrespondingCertificates.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureKeyVaultExtensionCorrespondingCertificates
+title: Protect secrets such as the certificates that you need to protect data in transit.
+ Consider using the Azure Key Vault extension for Windows or Linux that automatically
+ refreshes the certificates stored in a key vault. When it detects a change in the
+ certificates, the extension retrieves and installs the corresponding certificates.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 08be36ad-0190-4740-b002-9adae9be0cca
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureVirtualNetworkNetworkSecurityGroups.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureVirtualNetworkNetworkSecurityGroups.yaml
new file mode 100644
index 000000000..07ef0da2d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-AzureVirtualNetworkNetworkSecurityGroups.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureVirtualNetworkNetworkSecurityGroups
+title: Use network controls to restrict ingress and egress traffic. Isolate VMs and
+ scale sets in Azure Virtual Network and define network security groups to filter
+ traffic. Protect against distributed denial of service (DDoS) attacks. Use load
+ balancers and firewall rules to protect against malicious traffic and data exfiltration
+ attacks.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 51bdfe3f-1460-43ac-860d-d5dcaa69a698
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-IntrusionDetectionSystemsTrustedExecutionEnvironment.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-IntrusionDetectionSystemsTrustedExecutionEnvironment.yaml
new file mode 100644
index 000000000..fda0b7480
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-IntrusionDetectionSystemsTrustedExecutionEnvironment.yaml
@@ -0,0 +1,17 @@
+name: wafsg-IntrusionDetectionSystemsTrustedExecutionEnvironment
+title: Threat prevention. Protect against malware attacks and malicious actors by
+ implementing security controls like firewalls, antivirus software, and intrusion
+ detection systems. Determine if a Trusted Execution Environment (TEE) is required.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: ad4792c8-903c-4467-a6c8-90c84a49af47
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdAuthenticationAzureDiskEncryptionExtension.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdAuthenticationAzureDiskEncryptionExtension.yaml
new file mode 100644
index 000000000..fc7c62482
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdAuthenticationAzureDiskEncryptionExtension.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MicrosoftEntraIdAuthenticationAzureDiskEncryptionExtension
+title: (VMs, scale set) Include extensions in your VMs that protect against threats. For
+ example, - Key Vault extension for Windows and Linux - Microsoft Entra ID authentication -
+ Microsoft Antimalware for Azure Cloud Services and Virtual Machines - Azure Disk
+ Encryption extension for Windows and Linux.
+description: The extensions are used to bootstrap the VMs with the right software
+ that protects access to and from the VMs. Microsoft-provided extensions are updated
+ frequently to keep up with the evolving security standards.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 01d2e86e-e54e-4e42-87dd-fc09bf9f69a0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdRoleBasedAccessControl.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdRoleBasedAccessControl.yaml
new file mode 100644
index 000000000..c8870f5c1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdRoleBasedAccessControl.yaml
@@ -0,0 +1,20 @@
+name: wafsg-MicrosoftEntraIdRoleBasedAccessControl
+title: Apply access controls to the identities that try to reach the VMs and also
+ to the VMs that reach other resources. Use Microsoft Entra ID for authentication
+ and authorization needs. Put strong passwords, multifactor authentication, and role-based
+ access control (RBAC) in place for your VMs and their dependencies, like secrets,
+ to permit allowed identities to perform only the operations that are expected of
+ their roles.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 2e452de7-a327-401b-9ad4-19a42e7b3b2a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdVmProfile.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdVmProfile.yaml
new file mode 100644
index 000000000..8a7c46c3f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-MicrosoftEntraIdVmProfile.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MicrosoftEntraIdVmProfile
+title: (Scale set) Assign a managed identity to scale sets. All VMs in the scale set
+ get the same identity through the specified VM profile. (VMs) You can also assign
+ a managed identity to individual VMs when you create them and then add it to a scale
+ set if needed.
+description: When VMs communicate with other resources, they cross a trust boundary.
+ Scale sets and VMs should authenticate their identity before communication is allowed.
+ Microsoft Entra ID handles that authentication by using managed identities.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 22995c7f-8fcf-4986-b139-cc1b8e946c03
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-PublicNetworkAccessSecureStorageOptions.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-PublicNetworkAccessSecureStorageOptions.yaml
new file mode 100644
index 000000000..6fa163ecc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-PublicNetworkAccessSecureStorageOptions.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PublicNetworkAccessSecureStorageOptions
+title: (VMs) Choose secure storage options for your VM's storage profile. Enable
+ disk encryption and data-at-rest encryption by default. Disable public network access
+ to the VM disks.
+description: Disabling public network access helps prevent unauthorized access to
+ your data and resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 47c0a03c-627a-4961-96da-9a8c883d0d9f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetConfidentialComputing.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetConfidentialComputing.yaml
new file mode 100644
index 000000000..0a0b04c27
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetConfidentialComputing.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ScaleSetConfidentialComputing
+title: (Scale set) Choose VM SKUs with security features. For example, some SKUs support
+ BitLocker encryption, and confidential computing provides encryption of data-in-use. Review
+ the features to understand the limitations.
+description: Azure-provided features are based on signals that are captured across
+ many tenants and can protect resources better than custom controls. You can also
+ use policies to enforce those controls.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: b298468d-1c65-4c20-986c-6456d2d99665
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetOrganizationRecommendedTags.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetOrganizationRecommendedTags.yaml
new file mode 100644
index 000000000..bd7574c0f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetOrganizationRecommendedTags.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ScaleSetOrganizationRecommendedTags
+title: (VMs, scale set) Apply organization-recommended tags in the provisioned resources.
+description: Tagging is a common way to segment and organize resources and can be
+ crucial during incident management. For more information, see Purpose of naming
+ and tagging.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: b47b917b-bb94-49a9-9c84-a579d9554f18
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetsNetworkBoundaries.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetsNetworkBoundaries.yaml
new file mode 100644
index 000000000..9923b8e01
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ScaleSetsNetworkBoundaries.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ScaleSetsNetworkBoundaries
+title: Provide segmentation to the VMs and scale sets by setting network boundaries
+ and access controls. Place VMs in resource groups that share the same lifecycle.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: f90aa688-2018-4e02-9fd9-0c7151dee588
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ThreatDetectionAuditTrail.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ThreatDetectionAuditTrail.yaml
new file mode 100644
index 000000000..55bb9f34e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-ThreatDetectionAuditTrail.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ThreatDetectionAuditTrail
+title: Threat detection. Monitor VMs for threats and misconfigurations. Use Defender
+ for Servers to capture VM and OS changes, and maintain an audit trail of access,
+ new accounts, and changes in permissions.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 9a7f628b-002c-4926-b1fc-d4918b451c30
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-VirtualMachineScaleSetsAzureSecurityBaseline.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-VirtualMachineScaleSetsAzureSecurityBaseline.yaml
new file mode 100644
index 000000000..e5c481b87
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-VirtualMachineScaleSetsAzureSecurityBaseline.yaml
@@ -0,0 +1,19 @@
+name: wafsg-VirtualMachineScaleSetsAzureSecurityBaseline
+title: (VMs, scale set) Set a security profile with the security features that you
+ want to enable in the VM configuration. For example, when you specify encryption
+ at host in the profile, the data that's stored on the VM host is encrypted at rest
+ and flows are encrypted to the storage service.
+description: The features in the security profile are automatically enabled when the
+ VM is created. For more information, see Azure security baseline for Virtual Machine
+ Scale Sets.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: 4529997c-b38f-402e-9bbf-8db5717a74d4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-VirtualMachineScaleSetsSecurityBaselines.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-VirtualMachineScaleSetsSecurityBaselines.yaml
new file mode 100644
index 000000000..8ea69ce68
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/Security/wafsg-VirtualMachineScaleSetsSecurityBaselines.yaml
@@ -0,0 +1,16 @@
+name: wafsg-VirtualMachineScaleSetsSecurityBaselines
+title: Review the security baselines for Linux and Windows VMs and Virtual Machine
+ Scale Sets.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/virtual-machines.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.compute/virtualmachines
+waf: Security
+severity: 1
+labels:
+ guid: fe47919b-9d90-4600-8dad-658568ce94d8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureCapacityReservationsReserveComputeCapacity.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureCapacityReservationsReserveComputeCapacity.yaml
new file mode 100644
index 000000000..be44e6b5a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureCapacityReservationsReserveComputeCapacity.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureCapacityReservationsReserveComputeCapacity
+title: Reserve Compute Capacity for critical workloads
+description: |-
+ Azure Capacity Reservations ensure high availability for virtual machines by reserving compute capacity in advance within a specific region or availability zone. This guarantees that VMs will have the necessary resources during peak demand or maintenance events, enhancing reliability and uptime.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: 302fda08-ee65-4fbe-a916-6dc0b33169c4
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find all Virtual Machines not associated with a Capacity Reservation, and provide details for Capacity Reservation like vmSize, location, and zone.
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnull(properties.capacityReservation)
+ | extend zoneValue = iff(isnull(zones), "null", zones)
+ | project recommendationId = "302fda08-ee65-4fbe-a916-6dc0b33169c4", name, id, tags, param1 = strcat("VmSize: ", properties.hardwareProfile.vmSize), param2 = strcat("Location: ", location), param3 = strcat("Zone: ", zoneValue)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVirtualMachinesAzureMonitorMetrics.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVirtualMachinesAzureMonitorMetrics.yaml
new file mode 100644
index 000000000..f6ad49f11
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVirtualMachinesAzureMonitorMetrics.yaml
@@ -0,0 +1,60 @@
+name: aprl-AzureVirtualMachinesAzureMonitorMetrics
+title: Configure monitoring for all Azure Virtual Machines
+description: |-
+ Azure Monitor Metrics automatically receives platform metrics, but platform logs, which offer detailed diagnostics and auditing for resources and their Azure platform, need to be manually routed for collection.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 4a9d8973-6dba-0042-b3aa-07924877ebd5
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Virtual Machines without diagnostic settings enabled/with diagnostic settings enabled but not configured both performance counters and event logs/syslogs.
+ resources
+ | where type =~ "microsoft.compute/virtualmachines"
+ | project name, id, tags, lowerCaseVmId = tolower(id)
+ | join kind = leftouter (
+ resources
+ | where type =~ "Microsoft.Compute/virtualMachines/extensions" and properties.publisher =~ "Microsoft.Azure.Diagnostics"
+ | project
+ lowerCaseVmIdOfExtension = tolower(substring(id, 0, indexof(id, "/extensions/"))),
+ extensionType = properties.type,
+ provisioningState = properties.provisioningState,
+ storageAccount = properties.settings.StorageAccount,
+ // Windows
+ wadPerfCounters = properties.settings.WadCfg.DiagnosticMonitorConfiguration.PerformanceCounters.PerformanceCounterConfiguration,
+ wadEventLogs = properties.settings.WadCfg.DiagnosticMonitorConfiguration.WindowsEventLog,
+ // Linux
+ ladPerfCounters = properties.settings.ladCfg.diagnosticMonitorConfiguration.performanceCounters.performanceCounterConfiguration,
+ ladSyslog = properties.settings.ladCfg.diagnosticMonitorConfiguration.syslogEvents
+ | extend
+ // Windows
+ isWadPerfCountersConfigured = iif(array_length(wadPerfCounters) > 0, true, false),
+ isWadEventLogsConfigured = iif(isnotnull(wadEventLogs) and array_length(wadEventLogs.DataSource) > 0, true, false),
+ // Linux
+ isLadPerfCountersConfigured = iif(array_length(ladPerfCounters) > 0, true, false),
+ isLadSyslogConfigured = isnotnull(ladSyslog)
+ | project
+ lowerCaseVmIdOfExtension,
+ extensionType,
+ provisioningState,
+ storageAccount,
+ isPerfCountersConfigured = case(extensionType =~ "IaaSDiagnostics", isWadPerfCountersConfigured, extensionType =~ "LinuxDiagnostic", isLadPerfCountersConfigured, false),
+ isEventLogsConfigured = case(extensionType =~ "IaaSDiagnostics", isWadEventLogsConfigured, extensionType =~ "LinuxDiagnostic", isLadSyslogConfigured, false)
+ )
+ on $left.lowerCaseVmId == $right.lowerCaseVmIdOfExtension
+ | where isempty(lowerCaseVmIdOfExtension) or provisioningState !~ "Succeeded" or not(isPerfCountersConfigured and isEventLogsConfigured)
+ | extend
+ param1 = strcat("DiagnosticSetting: ", iif(isnotnull(extensionType), strcat("Enabled, partially configured (", extensionType, ")"), "Not enabled")),
+ param2 = strcat("ProvisioningState: ", iif(isnotnull(provisioningState), provisioningState, "n/a")),
+ param3 = strcat("storageAccount: ", iif(isnotnull(storageAccount), storageAccount, "n/a")),
+ param4 = strcat("PerformanceCounters: ", case(isnull(isPerfCountersConfigured), "n/a", isPerfCountersConfigured, "Configured", "Not configured")),
+ param5 = strcat("EventLogs/Syslogs: ", case(isnull(isEventLogsConfigured), "n/a", isEventLogsConfigured, "Configured", "Not configured"))
+ | project recommendationId = "4a9d8973-6dba-0042-b3aa-07924877ebd5", name, id, tags, param1, param2, param3, param4, param5
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVirtualMachinesReviewVms.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVirtualMachinesReviewVms.yaml
new file mode 100644
index 000000000..e5d5c2fe6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVirtualMachinesReviewVms.yaml
@@ -0,0 +1,23 @@
+name: aprl-AzureVirtualMachinesReviewVms
+title: Review VMs in stopped state
+description: |-
+ Azure Virtual Machines (VM) instances have various states, like provisioning and power states. A non-running VM may indicate issues or it being unnecessary, suggesting removal could help cut costs.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 98b334c0-8578-6046-9e43-b6e8fce6318e
+ area: Governance
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that are NOT running
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where properties.extended.instanceView.powerState.displayStatus != 'VM running'
+ | project recommendationId = "98b334c0-8578-6046-9e43-b6e8fce6318e", name, id, tags
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVmDisksAzureDiskEncryption.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVmDisksAzureDiskEncryption.yaml
new file mode 100644
index 000000000..a3688a27d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-AzureVmDisksAzureDiskEncryption.yaml
@@ -0,0 +1,27 @@
+name: aprl-AzureVmDisksAzureDiskEncryption
+title: Virtual Machines should have Azure Disk Encryption or EncryptionAtHost enabled
+description: |-
+ Consider enabling Azure Disk Encryption (ADE) for encrypting Azure VM disks using DM-Crypt (Linux) or BitLocker (Windows). Additionally, consider Encryption at host and Confidential disk encryption for enhanced data security.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: f0a97179-133a-6e4f-8a49-8a44da73ffce
+ area: Security
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Provides a list of Azure VM disks without Azure Disk Encryption or encryption at host enabled
+ resources
+ | where type =~ "microsoft.compute/disks"
+ | project diskId = id, diskName = name, vmId = tolower(managedBy), azureDiskEncryption = iff(properties.encryptionSettingsCollection.enabled == true, true, false)
+ | join kind=leftouter (resources
+ | where type =~ "microsoft.compute/virtualmachines"
+ | project vmId = tolower(id), vmName = name, encryptionAtHost = iff(properties.securityProfile.encryptionAtHost == true, true, false)) on vmId
+ | where not(encryptionAtHost) and not(azureDiskEncryption)
+ | project recommendationId = 'f0a97179-133a-6e4f-8a49-8a44da73ffce', name = vmName, id =vmId, param1 = strcat('diskName:',diskName), param2 = strcat('azureDiskEncryption:',iff(azureDiskEncryption, "Enabled", "Disabled")), param3 = strcat('encryptionAtHost:',iff(encryptionAtHost, "Enabled", "Disabled"))
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-CompatibleVmSizesAzureMaintenanceActivities.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-CompatibleVmSizesAzureMaintenanceActivities.yaml
new file mode 100644
index 000000000..f268a7de0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-CompatibleVmSizesAzureMaintenanceActivities.yaml
@@ -0,0 +1,18 @@
+name: aprl-CompatibleVmSizesAzureMaintenanceActivities
+title: Use Azure Boost VMs for Maintenance sensitive workload
+description: |-
+ If the workload is Maintenance sensitive, consider Azure Boost compatible VMs. Azure Boost is designed to lessen the impact on customers when Azure maintenance activities occur on the host, and the current list of compatible VM sizes are documented in the first link below.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 9ab499d8-8844-424d-a2d4-8f53690eb8f8
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ConstantFullCpuPerformanceSmallToMediumDatabases.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ConstantFullCpuPerformanceSmallToMediumDatabases.yaml
new file mode 100644
index 000000000..bf6c6a66d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ConstantFullCpuPerformanceSmallToMediumDatabases.yaml
@@ -0,0 +1,23 @@
+name: aprl-ConstantFullCpuPerformanceSmallToMediumDatabases
+title: Don't use A or B-Series VMs for production needing constant full CPU performance
+description: |-
+ A-series VMs are tailored for entry-level workloads like development and testing, including use cases such as development and test servers, low traffic web servers, and small to medium databases.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: 3201dba8-d1da-4826-98a4-104066545170
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs using A or B series families
+ resources
+ | where type == 'microsoft.compute/virtualmachines'
+ | where properties.hardwareProfile.vmSize contains "Standard_B" or properties.hardwareProfile.vmSize contains "Standard_A"
+ | project recommendationId = "3201dba8-d1da-4826-98a4-104066545170", name, id, tags, param1=strcat("vmSku: " , properties.hardwareProfile.vmSize)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ContinuousAsynchronousDiskReplicationRecoveryPointObjective.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ContinuousAsynchronousDiskReplicationRecoveryPointObjective.yaml
new file mode 100644
index 000000000..7354c9e49
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ContinuousAsynchronousDiskReplicationRecoveryPointObjective.yaml
@@ -0,0 +1,33 @@
+name: aprl-ContinuousAsynchronousDiskReplicationRecoveryPointObjective
+title: Replicate VMs using Azure Site Recovery
+description: |-
+ Replicating Azure VMs via Site Recovery entails continuous, asynchronous disk replication to a target region. Recovery points are generated every few minutes, ensuring a Recovery Point Objective (RPO) in minutes.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: cfe22a65-b1db-fd41-9e8e-d573922709ae
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find all VMs that do NOT have replication with ASR enabled
+ resources
+ | where type =~ "Microsoft.Compute/virtualMachines"
+ | extend securityType = iif(isnull(properties.securityProfile.securityType), "Standard", properties.securityProfile.securityType)
+ | where securityType !in~ ("TrustedLaunch", "ConfidentialVM")
+ | project id, vmIdForJoin = tolower(id), name, tags
+ | join kind = leftouter (
+ recoveryservicesresources
+ | where type =~ "Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationProtectedItems"
+ and properties.providerSpecificDetails.dataSourceInfo.datasourceType =~ "AzureVm"
+ | project vmResourceId = tolower(properties.providerSpecificDetails.dataSourceInfo.resourceId)
+ )
+ on $left.vmIdForJoin == $right.vmResourceId
+ | where isempty(vmResourceId)
+ | project recommendationId = "cfe22a65-b1db-fd41-9e8e-d573922709ae", name, id, tags
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-CrossZoneDataReplicationHigherWriteLatency.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-CrossZoneDataReplicationHigherWriteLatency.yaml
new file mode 100644
index 000000000..05b647a1d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-CrossZoneDataReplicationHigherWriteLatency.yaml
@@ -0,0 +1,24 @@
+name: aprl-CrossZoneDataReplicationHigherWriteLatency
+title: Use Azure Disks with Zone Redundant Storage for higher resiliency and availability
+description: |-
+ Azure disks offers a zone-redundant storage (ZRS) option for workloads that need to be resilient to an entire zone being down. Due to the cross-zone data replication, ZRS disks have higher write latency when compared to the locally-redundant option (LRS), so make sure to benchmark your disks.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: fa0cf4f5-0b21-47b7-89a9-ee936f193ce1
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find eligible Disks that are not zonal nor zone redundant
+ resources
+ | where type == 'microsoft.compute/disks'
+ | where sku has "Premium_LRS" or sku has "StandardSSD_LRS"
+ | where sku.name has_cs 'ZRS' or array_length(zones) > 0
+ | project recommendationId="fa0cf4f5-0b21-47b7-89a9-ee936f193ce1", name, id, tags, param1 = sku, param2 = sku.name
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DefaultAzureVnetInterfaceLatestMellanoxDrivers.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DefaultAzureVnetInterfaceLatestMellanoxDrivers.yaml
new file mode 100644
index 000000000..87004c01e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DefaultAzureVnetInterfaceLatestMellanoxDrivers.yaml
@@ -0,0 +1,18 @@
+name: aprl-DefaultAzureVnetInterfaceLatestMellanoxDrivers
+title: When AccelNet is enabled, you must manually update the GuestOS NIC driver
+description: |-
+ When Accelerated Networking is enabled, the default Azure VNet interface in GuestOS is swapped for a Mellanox, and its driver comes from a 3rd party. Marketplace images have the latest Mellanox drivers, but post-deployment, updating the driver is the user's responsibility.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 73d1bb04-7d3e-0d47-bc0d-63afe773b5fe
+ area: Governance
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DemandingNetworkWorkloadsAcceleratedNetworking.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DemandingNetworkWorkloadsAcceleratedNetworking.yaml
new file mode 100644
index 000000000..ce35037d8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DemandingNetworkWorkloadsAcceleratedNetworking.yaml
@@ -0,0 +1,34 @@
+name: aprl-DemandingNetworkWorkloadsAcceleratedNetworking
+title: Enable Accelerated Networking (AccelNet)
+description: |-
+ Accelerated networking enables SR-IOV to a VM, greatly improving its networking performance by bypassing the host from the data path, which reduces latency, jitter, and CPU utilization for demanding network workloads on supported VM types.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: dfedbeb1-1519-fc47-86a5-52f96cf07105
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VM NICs that do not have Accelerated Networking enabled
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | mv-expand nic = properties.networkProfile.networkInterfaces
+ | project name, id, tags, lowerCaseNicId = tolower(nic.id), vmSize = tostring(properties.hardwareProfile.vmSize)
+ | join kind = inner (
+ resources
+ | where type =~ 'Microsoft.Network/networkInterfaces'
+ | where properties.enableAcceleratedNetworking == false
+ | project nicName = split(id, "/")[8], lowerCaseNicId = tolower(id)
+ )
+ on lowerCaseNicId
+ | summarize nicNames = make_set(nicName) by name, id, tostring(tags), vmSize
+ | extend param1 = strcat("NicName: ", strcat_array(nicNames, ", ")), param2 = strcat("VMSize: ", vmSize)
+ | project recommendationId = "dfedbeb1-1519-fc47-86a5-52f96cf07105", name, id, tags, param1, param2
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DifferentFaultDomainsAvailabilitySets.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DifferentFaultDomainsAvailabilitySets.yaml
new file mode 100644
index 000000000..18ab04a37
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-DifferentFaultDomainsAvailabilitySets.yaml
@@ -0,0 +1,23 @@
+name: aprl-DifferentFaultDomainsAvailabilitySets
+title: Migrate VMs using availability sets to VMSS Flex
+description: |-
+ While availability sets are not scheduled for immediate deprecation, they are planned to be deprecated in the future. Migrate workloads from VMs to VMSS Flex for deployment across zones or within the same zone across different fault domains (FDs) and update domains (UDs) for better reliability.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: a8d25876-7951-b646-b4e8-880c9031596b
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs using Availability Sets
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnotnull(properties.availabilitySet)
+ | project recommendationId = "a8d25876-7951-b646-b4e8-880c9031596b", name, id, tags, param1=strcat("availabilitySet: ",properties.availabilitySet.id)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-HigherSingleInstanceVirtualMachineUptimeSlasHighestUptimeSla.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-HigherSingleInstanceVirtualMachineUptimeSlasHighestUptimeSla.yaml
new file mode 100644
index 000000000..4dcb45ca5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-HigherSingleInstanceVirtualMachineUptimeSlasHighestUptimeSla.yaml
@@ -0,0 +1,31 @@
+name: aprl-HigherSingleInstanceVirtualMachineUptimeSlasHighestUptimeSla
+title: Mission Critical Workloads should consider using Premium or Ultra Disks
+description: |-
+ Compared to Standard HDD and SSD, Premium SSD, SSDv2, and Ultra SSDs offer improved performance, configurability, and higher single-instance Virtual Machine uptime SLAs. The lowest SLA of all disks on a Virtual Machine applies, so it is best to use Premium or Ultra Disks for the highest uptime SLA.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: df0ff862-814d-45a3-95e4-4fad5a244ba6
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that have an attached disk that is not in the Premium or Ultra sku tier.
+
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | extend lname = tolower(name)
+ | join kind=leftouter(resources
+ | where type =~ 'Microsoft.Compute/disks'
+ | where not(sku.tier =~ 'Premium') and not(sku.tier =~ 'Ultra')
+ | extend lname = tolower(tostring(split(managedBy, '/')[8]))
+ | project lname, name
+ | summarize disks = make_list(name) by lname) on lname
+ | where isnotnull(disks)
+ | project recommendationId = "df0ff862-814d-45a3-95e4-4fad5a244ba6", name, id, tags, param1=strcat("AffectedDisks: ", disks)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MaintenanceConfigurationSettingsMaintenanceConfigurations.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MaintenanceConfigurationSettingsMaintenanceConfigurations.yaml
new file mode 100644
index 000000000..79b280102
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MaintenanceConfigurationSettingsMaintenanceConfigurations.yaml
@@ -0,0 +1,32 @@
+name: aprl-MaintenanceConfigurationSettingsMaintenanceConfigurations
+title: Use maintenance configurations for the VMs
+description: |-
+ The maintenance configuration settings let users schedule and manage updates, making sure the updates or interruptions on the VM are performed within a planned timeframe.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: 52ab9e5c-eec0-3148-8bd7-b6dd9e1be870
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find VMS that do not have maintenance configuration assigned
+ Resources
+ | extend resourceId = tolower(id)
+ | project name, location, type, id, tags, resourceId, properties
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | join kind=leftouter (
+ maintenanceresources
+ | where type =~ "microsoft.maintenance/configurationassignments"
+ | project planName = name, type, maintenanceProps = properties
+ | extend resourceId = tostring(maintenanceProps.resourceId)
+ ) on resourceId
+ | where isnull(maintenanceProps)
+ | project recommendationId = "52ab9e5c-eec0-3148-8bd7-b6dd9e1be870",name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MaintenanceSensitiveWorkloadVmsAzureMetadataService.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MaintenanceSensitiveWorkloadVmsAzureMetadataService.yaml
new file mode 100644
index 000000000..47bbbfdd6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MaintenanceSensitiveWorkloadVmsAzureMetadataService.yaml
@@ -0,0 +1,18 @@
+name: aprl-MaintenanceSensitiveWorkloadVmsAzureMetadataService
+title: Enable Scheduled Events for Maintenance sensitive workload VMs
+description: |-
+ If your workload is Maintenance sensitive, enable Scheduled Events. This Azure Metadata Service lets your app prepare for virtual machine maintenance by providing information on upcoming events like reboots, reducing disruptions.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 2de8fa5e-14f4-4c4c-857f-1520f87a629f
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ManagedDisksVmDisks.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ManagedDisksVmDisks.yaml
new file mode 100644
index 000000000..c2162da7a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ManagedDisksVmDisks.yaml
@@ -0,0 +1,23 @@
+name: aprl-ManagedDisksVmDisks
+title: Use Managed Disks for VM disks
+description: |-
+ Azure is retiring unmanaged disks on September 30, 2025. Users should plan the migration to avoid disruptions and maintain service reliability.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: 122d11d7-b91f-8747-a562-f56b79bcfbdc
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that are not using Managed Disks
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnull(properties.storageProfile.osDisk.managedDisk)
+ | project recommendationId = "122d11d7-b91f-8747-a562-f56b79bcfbdc", name, id, tags
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MicrosoftAzureCloudAzureBackupService.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MicrosoftAzureCloudAzureBackupService.yaml
new file mode 100644
index 000000000..801ae042b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-MicrosoftAzureCloudAzureBackupService.yaml
@@ -0,0 +1,35 @@
+name: aprl-MicrosoftAzureCloudAzureBackupService
+title: Backup VMs with Azure Backup service
+description: |-
+ Enable backups for your virtual machines with Azure Backup to secure and quickly recover your data. This service offers simple, secure, and cost-effective solutions for backing up and recovering data from the Microsoft Azure cloud.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 1981f704-97b9-b645-9c57-33f8ded9261a
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that do NOT have Backup enabled
+ // Run query to see results.
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | project name, id, tags
+ | join kind=leftouter (
+ recoveryservicesresources
+ | where type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems'
+ | where properties.dataSourceInfo.datasourceType =~ 'Microsoft.Compute/virtualMachines'
+ | project idBackupEnabled=properties.sourceResourceId
+ | extend name=strcat_array(array_slice(split(idBackupEnabled, '/'), 8, -1), '/')
+ ) on name
+ | where isnull(idBackupEnabled)
+ | project-away idBackupEnabled
+ | project-away name1
+ | project recommendationId = "1981f704-97b9-b645-9c57-33f8ded9261a", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-NetworkIssuesVmInsights.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-NetworkIssuesVmInsights.yaml
new file mode 100644
index 000000000..7001123ce
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-NetworkIssuesVmInsights.yaml
@@ -0,0 +1,43 @@
+name: aprl-NetworkIssuesVmInsights
+title: Enable VM Insights
+description: |-
+ VM Insights monitors VM and scale set performance, health, running processes, and dependencies. It enhances the predictability of application performance and availability by pinpointing performance bottlenecks and network issues, and it clarifies if problems are related to other dependencies.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: b72214bb-e879-5f4b-b9cd-642db84f36f4
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Check for VMs without Azure Monitoring Agent extension installed, missing Data Collection Rule or Data Collection Rule without performance enabled.
+ Resources
+ | where type == 'microsoft.compute/virtualmachines'
+ | project idVm = tolower(id), name, tags
+ | join kind=leftouter (
+ InsightsResources
+ | where type =~ "Microsoft.Insights/dataCollectionRuleAssociations" and id has "Microsoft.Compute/virtualMachines"
+ | project idDcr = tolower(properties.dataCollectionRuleId), idVmDcr = tolower(substring(id, 0, indexof(id, "/providers/Microsoft.Insights/dataCollectionRuleAssociations/"))))
+ on $left.idVm == $right.idVmDcr
+ | join kind=leftouter (
+ Resources
+ | where type =~ "Microsoft.Insights/dataCollectionRules"
+ | extend
+ isPerformanceEnabled = iif(properties.dataSources.performanceCounters contains "Microsoft-InsightsMetrics" and properties.dataFlows contains "Microsoft-InsightsMetrics", true, false),
+ isMapEnabled = iif(properties.dataSources.extensions contains "Microsoft-ServiceMap" and properties.dataSources.extensions contains "DependencyAgent" and properties.dataFlows contains "Microsoft-ServiceMap", true, false)//,
+ | where isPerformanceEnabled or isMapEnabled
+ | project dcrName = name, isPerformanceEnabled, isMapEnabled, idDcr = tolower(id))
+ on $left.idDcr == $right.idDcr
+ | join kind=leftouter (
+ Resources
+ | where type == 'microsoft.compute/virtualmachines/extensions' and (name contains 'AzureMonitorWindowsAgent' or name contains 'AzureMonitorLinuxAgent')
+ | extend idVmExtension = tolower(substring(id, 0, indexof(id, '/extensions'))), extensionName = name)
+ on $left.idVm == $right.idVmExtension
+ | where isPerformanceEnabled != 1 or (extensionName != 'AzureMonitorWindowsAgent' and extensionName != 'AzureMonitorLinuxAgent')
+ | project recommendationId = "b72214bb-e879-5f4b-b9cd-642db84f36f4", name, id = idVm, tags, param1 = strcat('MonitoringExtension:', extensionName), param2 = strcat('DataCollectionRuleId:', idDcr), param3 = strcat('isPerformanceEnabled:', isPerformanceEnabled)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-OtherEssentialDataHostDatabaseData.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-OtherEssentialDataHostDatabaseData.yaml
new file mode 100644
index 000000000..944e7b309
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-OtherEssentialDataHostDatabaseData.yaml
@@ -0,0 +1,23 @@
+name: aprl-OtherEssentialDataHostDatabaseData
+title: Host database data on a data disk
+description: |-
+ A data disk is a managed disk attached to a virtual machine for storing database or other essential data. These disks are SCSI drives labeled as per choice.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 4ea2878f-0d69-8d4a-b715-afc10d1e538e
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that only have OS Disk
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where array_length(properties.storageProfile.dataDisks) < 1
+ | project recommendationId = "4ea2878f-0d69-8d4a-b715-afc10d1e538e", name, id, tags
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-OutboundInternetConnectivityPublicIp.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-OutboundInternetConnectivityPublicIp.yaml
new file mode 100644
index 000000000..540623eeb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-OutboundInternetConnectivityPublicIp.yaml
@@ -0,0 +1,36 @@
+name: aprl-OutboundInternetConnectivityPublicIp
+title: VMs should not have a Public IP directly associated
+description: |-
+ For outbound internet connectivity of Virtual Machines, using NAT Gateway or Azure Firewall is recommended to enhance security and service resilience, thanks to their higher availability and SNAT ports.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 1f629a30-c9d0-d241-82ee-6f2eb9d42cb4
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs with PublicIPs directly associated with them
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnotnull(properties.networkProfile.networkInterfaces)
+ | mv-expand nic=properties.networkProfile.networkInterfaces
+ | project name, id, tags, nicId = nic.id
+ | extend nicId = tostring(nicId)
+ | join kind=inner (
+ Resources
+ | where type =~ 'Microsoft.Network/networkInterfaces'
+ | where isnotnull(properties.ipConfigurations)
+ | mv-expand ipconfig=properties.ipConfigurations
+ | extend publicIp = tostring(ipconfig.properties.publicIPAddress.id)
+ | where publicIp != ""
+ | project name, nicId = tostring(id), publicIp
+ ) on nicId
+ | project recommendationId = "1f629a30-c9d0-d241-82ee-6f2eb9d42cb4", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-PotentialExternalThreatsDisablePublicAccess.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-PotentialExternalThreatsDisablePublicAccess.yaml
new file mode 100644
index 000000000..7158717bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-PotentialExternalThreatsDisablePublicAccess.yaml
@@ -0,0 +1,42 @@
+name: aprl-PotentialExternalThreatsDisablePublicAccess
+title: Network access to the VM disk should be set to Disable public access and enable
+ private access
+description: |-
+ Recommended changing to "Disable public access and enable private access" and creating a Private Endpoint to improve security by restricting direct public access and ensuring connections are made privately, enhancing data protection and minimizing potential external threats.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 70b1d2be-e6c4-b54e-9959-b1b690f9e485
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Disks with "Enable public access from all networks" enabled
+ resources
+ | where type =~ 'Microsoft.Compute/disks'
+ | where properties.publicNetworkAccess == "Enabled"
+ | project id, name, tags, lowerCaseDiskId = tolower(id)
+ | join kind = leftouter (
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)
+ | join kind = fullouter (
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | mv-expand dataDisks = properties.storageProfile.dataDisks
+ | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)
+ )
+ on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId
+ | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)
+ )
+ on lowerCaseDiskId
+ | summarize vmNames = make_set(vmName) by name, id, tostring(tags)
+ | extend param1 = iif(isempty(vmNames[0]), "VMName: n/a", strcat("VMName: ", strcat_array(vmNames, ", ")))
+ | project recommendationId = "70b1d2be-e6c4-b54e-9959-b1b690f9e485", name, id, tags, param1
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ProductionVmWorkloadsVmssFlexInstance.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ProductionVmWorkloadsVmssFlexInstance.yaml
new file mode 100644
index 000000000..4065c7f4d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-ProductionVmWorkloadsVmssFlexInstance.yaml
@@ -0,0 +1,23 @@
+name: aprl-ProductionVmWorkloadsVmssFlexInstance
+title: Run production workloads on two or more VMs using VMSS Flex
+description: |-
+ Production VM workloads should be deployed on multiple VMs and grouped in a VMSS Flex instance to intelligently distribute across the platform, minimizing the impact of platform faults and updates.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: 273f6b30-68e0-4241-85ea-acf15ffb60bf
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that are not associated with a VMSS Flex instance
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnull(properties.virtualMachineScaleSet.id)
+ | project recommendationId="273f6b30-68e0-4241-85ea-acf15ffb60bf", name, id, tags
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-SecondaryAzureRegionPersonalHostPools.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-SecondaryAzureRegionPersonalHostPools.yaml
new file mode 100644
index 000000000..4b35c4152
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-SecondaryAzureRegionPersonalHostPools.yaml
@@ -0,0 +1,18 @@
+name: aprl-SecondaryAzureRegionPersonalHostPools
+title: Use Azure Site Recovery or backups to protect VMs supporting personal desktops
+description: |-
+ Implement Azure Site Recovery (ASR) or Azure Backup for personal host pools to enable seamless failover and failback. This replicates VMs supporting personal desktops to a secondary Azure region, ensuring recovery from a known state in case of a disaster or outage.
+source:
+ type: aprl
+ file: azure-resources/DesktopVirtualization/hostPools/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 38721758-2cc2-4d6b-b7b7-8b47dadbf7df
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-UnexpectedCommunicationIssuesPotentialRuleConflicts.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-UnexpectedCommunicationIssuesPotentialRuleConflicts.yaml
new file mode 100644
index 000000000..2498e8ec9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-UnexpectedCommunicationIssuesPotentialRuleConflicts.yaml
@@ -0,0 +1,43 @@
+name: aprl-UnexpectedCommunicationIssuesPotentialRuleConflicts
+title: VM network interfaces and associated subnets both have a Network Security Group
+ associated
+description: |-
+ Unless you have a specific reason, it's advised to associate a network security group to a subnet or a network interface, but not both, to avoid unexpected communication issues and troubleshooting due to potential rule conflicts between the two associations.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 82b3cf6b-9ae2-2e44-b193-10793213f676
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of virtual machines and associated NICs that do have an NSG associated to them and also an NSG associated to the subnet.
+ Resources
+ | where type =~ 'Microsoft.Network/networkInterfaces'
+ | where isnotnull(properties.networkSecurityGroup)
+ | mv-expand ipConfigurations = properties.ipConfigurations, nsg = properties.networkSecurityGroup
+ | project nicId = tostring(id), subnetId = tostring(ipConfigurations.properties.subnet.id), nsgName=split(nsg.id, '/')[8]
+ | parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet
+ | join kind=inner (
+ Resources
+ | where type =~ 'Microsoft.Network/NetworkSecurityGroups' and isnotnull(properties.subnets)
+ | project name, resourceGroup, subnet=properties.subnets
+ | mv-expand subnet
+ | project subnetId=tostring(subnet.id)
+ ) on subnetId
+ | project nicId
+ | join kind=leftouter (
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnotnull(properties.networkProfile.networkInterfaces)
+ | mv-expand nic=properties.networkProfile.networkInterfaces
+ | project vmName = name, vmId = id, tags, nicId = nic.id, nicName=split(nic.id, '/')[8]
+ | extend nicId = tostring(nicId)
+ ) on nicId
+ | project recommendationId = "82b3cf6b-9ae2-2e44-b193-10793213f676", name=vmName, id = vmId, tags, param1 = strcat("nic-name=", nicName)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-UnlikelyDatacenterFailuresAzureAvailabilityZones.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-UnlikelyDatacenterFailuresAzureAvailabilityZones.yaml
new file mode 100644
index 000000000..d8aa4112b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-UnlikelyDatacenterFailuresAzureAvailabilityZones.yaml
@@ -0,0 +1,23 @@
+name: aprl-UnlikelyDatacenterFailuresAzureAvailabilityZones
+title: Deploy VMs across Availability Zones
+description: |-
+ Azure Availability Zones, within each Azure region, are tolerant to local failures, protecting applications and data against unlikely Datacenter failures by being physically separate.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 0
+labels:
+ guid: 2bd0be95-a825-6f47-a8c6-3db1fb5eb387
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs that are not assigned to a Zone
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnull(zones)
+ | project recommendationId="2bd0be95-a825-6f47-a8c6-3db1fb5eb387", name, id, tags, param1="No Zone"
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VariousAzureServicesAzurePolicies.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VariousAzureServicesAzurePolicies.yaml
new file mode 100644
index 000000000..7f3d2057b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VariousAzureServicesAzurePolicies.yaml
@@ -0,0 +1,57 @@
+name: aprl-VariousAzureServicesAzurePolicies
+title: Ensure that your VMs are compliant with Azure Policies
+description: |-
+ Keeping your virtual machine (VM) secure is crucial for the applications you run. This involves using various Azure services and features to ensure secure access to your VMs and the secure storage of your data, aiming for overall security of your VM and applications.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: c42343ae-2712-2843-a285-3437eb0b28a1
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find all VMs in "Non-compliant" state with Azure Policies
+ policyresources
+ | where type =~ "Microsoft.PolicyInsights/policyStates" and properties.resourceType =~ "Microsoft.Compute/virtualMachines" and properties.complianceState =~ "NonCompliant"
+ | project
+ policyDefinitionId = tolower(properties.policyDefinitionId),
+ policyAssignmentId = tolower(properties.policyAssignmentId),
+ targetResourceId = tolower(properties.resourceId)
+ // Join the policy definition details
+ | join kind = leftouter (
+ policyresources
+ | where type =~ "Microsoft.Authorization/policyDefinitions"
+ | project policyDefinitionId = tolower(id), policyDefinitionDisplayName = properties.displayName
+ )
+ on policyDefinitionId
+ | project policyDefinitionId, policyDefinitionDisplayName, policyAssignmentId, targetResourceId
+ // Join the policy assignment details
+ | join kind = leftouter (
+ policyresources
+ | where type =~ "Microsoft.Authorization/policyAssignments"
+ | project policyAssignmentId = tolower(id), policyAssignmentDisplayName = properties.displayName
+ )
+ on policyAssignmentId
+ | project policyDefinitionId, policyDefinitionDisplayName, policyAssignmentId, policyAssignmentDisplayName, targetResourceId
+ // Join the target resource details
+ | join kind = leftouter (
+ resources
+ | where type =~ "Microsoft.Compute/virtualMachines"
+ | project targetResourceId = tolower(id), targetResourceIdPreservedCase = id, targetResourceName = name, targetResourceTags = tags
+ )
+ on targetResourceId
+ | project
+ recommendationId = "c42343ae-2712-2843-a285-3437eb0b28a1",
+ name = targetResourceName,
+ id = targetResourceIdPreservedCase,
+ tags = targetResourceTags,
+ param1 = strcat("DefinitionName: ", policyDefinitionDisplayName),
+ param2 = strcat("DefinitionID: ", policyDefinitionId),
+ param3 = strcat("AssignmentName: ", policyAssignmentDisplayName),
+ param4 = strcat("AssignmentID: ", policyAssignmentId)
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VirtualMachineNetworkInterfaceNetworkVirtualAppliances.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VirtualMachineNetworkInterfaceNetworkVirtualAppliances.yaml
new file mode 100644
index 000000000..e0b8e34bb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VirtualMachineNetworkInterfaceNetworkVirtualAppliances.yaml
@@ -0,0 +1,33 @@
+name: aprl-VirtualMachineNetworkInterfaceNetworkVirtualAppliances
+title: IP Forwarding should only be enabled for Network Virtual Appliances
+description: |-
+ IP forwarding allows a virtual machine network interface to receive and send network traffic not destined for or originating from its assigned IP addresses.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 41a22a5e-5e08-9647-92d0-2ffe9ef1bdad
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VM NICs that have IPForwarding enabled. This feature is usually only required for Network Virtual Appliances
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnotnull(properties.networkProfile.networkInterfaces)
+ | mv-expand nic=properties.networkProfile.networkInterfaces
+ | project name, id, tags, nicId = nic.id
+ | extend nicId = tostring(nicId)
+ | join kind=inner (
+ Resources
+ | where type =~ 'Microsoft.Network/networkInterfaces'
+ | where properties.enableIPForwarding == true
+ | project nicId = tostring(id)
+ ) on nicId
+ | project recommendationId = "41a22a5e-5e08-9647-92d0-2ffe9ef1bdad", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VirtualNetworkLevelCustomerDnsServers.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VirtualNetworkLevelCustomerDnsServers.yaml
new file mode 100644
index 000000000..2c4c39a25
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VirtualNetworkLevelCustomerDnsServers.yaml
@@ -0,0 +1,35 @@
+name: aprl-VirtualNetworkLevelCustomerDnsServers
+title: Customer DNS Servers should be configured in the Virtual Network level
+description: |-
+ Configure the DNS Server at the Virtual Network level to prevent any inconsistency across the environment.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 2
+labels:
+ guid: 1cf8fe21-9593-1e4e-966b-779a294c0d30
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VM NICs that have DNS Server settings configured in any of the NICs
+ Resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | where isnotnull(properties.networkProfile.networkInterfaces)
+ | mv-expand nic=properties.networkProfile.networkInterfaces
+ | project name, id, tags, nicId = nic.id
+ | extend nicId = tostring(nicId)
+ | join kind=inner (
+ Resources
+ | where type =~ 'Microsoft.Network/networkInterfaces'
+ | project name, id, dnsServers = properties.dnsSettings.dnsServers
+ | extend hasDns = array_length(dnsServers) >= 1
+ | where hasDns != 0
+ | project name, nicId = tostring(id)
+ ) on nicId
+ | project recommendationId = "1cf8fe21-9593-1e4e-966b-779a294c0d30", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VmClusterMembersClusteredServers.yaml b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VmClusterMembersClusteredServers.yaml
new file mode 100644
index 000000000..55df79867
--- /dev/null
+++ b/v2/recos/Services/MicrosoftCompute-virtualMachines/aprl-VmClusterMembersClusteredServers.yaml
@@ -0,0 +1,41 @@
+name: aprl-VmClusterMembersClusteredServers
+title: Shared disks should only be enabled in clustered servers
+description: |-
+ Azure shared disks let you attach a disk to multiple VMs at once for deploying or migrating clustered applications, suitable only when a disk is shared among VM cluster members.
+source:
+ type: aprl
+ file: azure-resources/Compute/virtualMachines/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Compute/virtualMachines
+severity: 1
+labels:
+ guid: 3263a64a-c256-de48-9818-afd3cbc55c2a
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Disks configured to be Shared. This is not an indication of an issue, but if a disk with this configuration is assigned to two or more VMs without a proper disk control mechanism (like a WSFC) it can lead to data loss
+ resources
+ | where type =~ 'Microsoft.Compute/disks'
+ | where isnotnull(properties.maxShares) and properties.maxShares >= 2
+ | project id, name, tags, lowerCaseDiskId = tolower(id), diskState = tostring(properties.diskState)
+ | join kind = leftouter (
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)
+ | join kind = fullouter (
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | mv-expand dataDisks = properties.storageProfile.dataDisks
+ | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)
+ )
+ on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId
+ | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)
+ )
+ on lowerCaseDiskId
+ | summarize vmNames = make_set(vmName) by name, id, tostring(tags), diskState
+ | extend param1 = strcat("DiskState: ", diskState), param2 = iif(isempty(vmNames[0]), "VMName: n/a", strcat("VMName: ", strcat_array(vmNames, ", ")))
+ | project recommendationId = "3263a64a-c256-de48-9818-afd3cbc55c2a", name, id, tags, param1, param2
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-CustomMaintenanceScheduleFlexibleServerInstances.yaml b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-CustomMaintenanceScheduleFlexibleServerInstances.yaml
new file mode 100644
index 000000000..857977bcc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-CustomMaintenanceScheduleFlexibleServerInstances.yaml
@@ -0,0 +1,23 @@
+name: aprl-CustomMaintenanceScheduleFlexibleServerInstances
+title: Enable custom maintenance schedule
+description: |-
+ Use custom maintenance schedule on flexible server instances to select a preferred time for service updates to be applied.
+source:
+ type: aprl
+ file: azure-resources/DBforMySQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforMySQL/flexibleServers
+severity: 0
+labels:
+ guid: 82a9a0f2-24ee-496f-9ad2-25f81710942d
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for MySQL instances that do not have a custom maintenance window
+ resources
+ | where type =~ "microsoft.dbformysql/flexibleservers"
+ | where properties.maintenanceWindow.customWindow != "Enabled"
+ | project recommendationId = "82a9a0f2-24ee-496f-9ad2-25f81710942d", name, id, tags, param1 = strcat("customWindow:", properties['maintenanceWindow']['customWindow'])
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-DurabilityTargetsReadReplicas.yaml b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-DurabilityTargetsReadReplicas.yaml
new file mode 100644
index 000000000..c30644c1a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-DurabilityTargetsReadReplicas.yaml
@@ -0,0 +1,23 @@
+name: aprl-DurabilityTargetsReadReplicas
+title: Configure one or more read replicas
+description: |-
+ Configure one or more read replicas to ensure that your database meets its availability and durability targets even in the face of failures or disasters.
+source:
+ type: aprl
+ file: azure-resources/DBforMySQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforMySQL/flexibleServers
+severity: 0
+labels:
+ guid: b49a8653-cc43-48c9-8513-a2d2e3f14dd1
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for MySQL instances that do not have a read replica configured
+ resources
+ | where type =~ "microsoft.dbformysql/flexibleservers"
+ | where properties.replicationRole == "None"
+ | project recommendationId = "b49a8653-cc43-48c9-8513-a2d2e3f14dd1", name, id, tags, param1 = strcat("replicationRole:", properties['replicationRole'])
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-FlexibleServerInstancesAutomaticFailoverCapability.yaml b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-FlexibleServerInstancesAutomaticFailoverCapability.yaml
new file mode 100644
index 000000000..01cc9f25d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-FlexibleServerInstancesAutomaticFailoverCapability.yaml
@@ -0,0 +1,23 @@
+name: aprl-FlexibleServerInstancesAutomaticFailoverCapability
+title: Enable HA with zone redundancy
+description: |-
+ Enable HA with zone redundancy on flexible server instances to deploy a standby replica in a different zone, offering automatic failover capability for improved reliability and disaster recovery.
+source:
+ type: aprl
+ file: azure-resources/DBforMySQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforMySQL/flexibleServers
+severity: 0
+labels:
+ guid: 88856605-53d8-4bbd-a75b-4a7b14939d32
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for MySQL instances that are not zone redundant
+ resources
+ | where type == "microsoft.dbformysql/flexibleservers"
+ | where properties.highAvailability.mode != "ZoneRedundant"
+ | project recommendationId = "88856605-53d8-4bbd-a75b-4a7b14939d32", name, id, tags, param1 = "ZoneRedundant: False"
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-GeoRedundantBackupStorageDurabilityTargets.yaml b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-GeoRedundantBackupStorageDurabilityTargets.yaml
new file mode 100644
index 000000000..d3ac19c5a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-GeoRedundantBackupStorageDurabilityTargets.yaml
@@ -0,0 +1,23 @@
+name: aprl-GeoRedundantBackupStorageDurabilityTargets
+title: Configure geo redundant backup storage
+description: |-
+ Configure GRS to ensure that your database meets its availability and durability targets even in the face of failures or disasters.
+source:
+ type: aprl
+ file: azure-resources/DBforMySQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforMySQL/flexibleServers
+severity: 0
+labels:
+ guid: 5c96afc3-7d2e-46ff-a4c7-9c32850c441b
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for MySQL instances that do not have geo redundant backup storage enabled
+ resources
+ | where type =~ "microsoft.dbformysql/flexibleservers"
+ | where properties.backup.geoRedundantBackup != "Enabled"
+ | project recommendationId = "5c96afc3-7d2e-46ff-a4c7-9c32850c441b", name, id, tags, param1 = strcat("geoRedundantBackup:", properties['backup']['geoRedundantBackup'])
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-StorageAutoGrowServer.yaml b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-StorageAutoGrowServer.yaml
new file mode 100644
index 000000000..52ca96b3c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-flexibleServers/aprl-StorageAutoGrowServer.yaml
@@ -0,0 +1,23 @@
+name: aprl-StorageAutoGrowServer
+title: Configure storage auto-grow
+description: |-
+ Configure storage auto-grow to prevent the server from running out of storage and becoming read-only.
+source:
+ type: aprl
+ file: azure-resources/DBforMySQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforMySQL/flexibleServers
+severity: 0
+labels:
+ guid: 8176a79d-8645-4e52-96be-a10fc0204fe5
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for MySQL instances that do not have a storage auto-grow
+ resources
+ | where type =~ "microsoft.dbformysql/flexibleservers"
+ | where properties.storage.autoGrow != "Enabled"
+ | project recommendationId = "8176a79d-8645-4e52-96be-a10fc0204fe5", name, id, tags, param1 = strcat("autoGrow:", properties['storage']['autoGrow'])
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-CrossRegionDrScenariosLeverageData.yaml b/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-CrossRegionDrScenariosLeverageData.yaml
new file mode 100644
index 000000000..48838c882
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-CrossRegionDrScenariosLeverageData.yaml
@@ -0,0 +1,15 @@
+name: revcl-CrossRegionDrScenariosLeverageData
+title: Leverage Data-in replication for cross-region DR scenarios
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.dbformysql/servers
+waf: Reliability
+severity: 1
+labels:
+ guid: 1e944a45-9c37-43e7-bd61-623b365a917e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/mysql/flexible-server/overview#setup-hybrid-or-multi-cloud-data-synchronization-with-data-in-replication
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-LeverageAvailabilityZones-1-2-3.yaml b/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-LeverageAvailabilityZones-1-2-3.yaml
new file mode 100644
index 000000000..606238d91
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-LeverageAvailabilityZones-1-2-3.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAvailabilityZones-1-2-3
+title: Leverage Availability Zones where regionally applicable
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.dbformysql/servers
+waf: Reliability
+severity: 0
+labels:
+ guid: de3aad1e-8c38-4ec9-9666-7313c005674b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/mysql/flexible-server/overview#high-availability-within-and-across-availability-zones
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-LeverageFlexibleServer.yaml b/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-LeverageFlexibleServer.yaml
new file mode 100644
index 000000000..cc36c9eb1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforMySQL-servers/Reliability/revcl-LeverageFlexibleServer.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageFlexibleServer
+title: Leverage Flexible Server
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.dbformysql/servers
+waf: Reliability
+severity: 1
+labels:
+ guid: 388c3e25-e800-4ad2-9df3-f3d6ae1050b7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/mysql/flexible-server/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-CustomMaintenanceScheduleFlexibleServerInstances-1.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-CustomMaintenanceScheduleFlexibleServerInstances-1.yaml
new file mode 100644
index 000000000..6f68e44bf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-CustomMaintenanceScheduleFlexibleServerInstances-1.yaml
@@ -0,0 +1,23 @@
+name: aprl-CustomMaintenanceScheduleFlexibleServerInstances-1
+title: Enable custom maintenance schedule
+description: |-
+ Use custom maintenance schedule on flexible server instances to select a preferred time for service updates to be applied.
+source:
+ type: aprl
+ file: azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforPostgreSQL/flexibleServers
+severity: 0
+labels:
+ guid: b2bad57d-7e03-4c0f-9024-597c9eb295bb
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for PostgreSQL instances that do not have a custom maintenance window
+ resources
+ | where type == "microsoft.dbforpostgresql/flexibleservers"
+ | where properties.maintenanceWindow.customWindow != "Enabled"
+ | project recommendationId = "b2bad57d-7e03-4c0f-9024-597c9eb295bb", name, id, tags, param1 = strcat("customWindow:", properties['maintenanceWindow']['customWindow'])
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-DurabilityTargetsReadReplicas-1.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-DurabilityTargetsReadReplicas-1.yaml
new file mode 100644
index 000000000..b589059b2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-DurabilityTargetsReadReplicas-1.yaml
@@ -0,0 +1,23 @@
+name: aprl-DurabilityTargetsReadReplicas-1
+title: Configure one or more read replicas
+description: |-
+ Configure one or more read replicas to ensure that your database meets its availability and durability targets even in the face of failures or disasters.
+source:
+ type: aprl
+ file: azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforPostgreSQL/flexibleServers
+severity: 0
+labels:
+ guid: 2ab85a67-26be-4ed2-a0bb-101b2513ec63
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for PostgreSQL instances that are read replicas
+ resources
+ | where type == "microsoft.dbforpostgresql/flexibleservers"
+ | where properties.replicationRole == "AsyncReplica"
+ | project recommendationId = "2ab85a67-26be-4ed2-a0bb-101b2513ec63", name, id, tags, param1 = strcat("replicationRole:", properties['replicationRole'])
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-FlexibleServerInstancesAutomaticFailoverCapability-1.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-FlexibleServerInstancesAutomaticFailoverCapability-1.yaml
new file mode 100644
index 000000000..6b1b33f7a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-FlexibleServerInstancesAutomaticFailoverCapability-1.yaml
@@ -0,0 +1,23 @@
+name: aprl-FlexibleServerInstancesAutomaticFailoverCapability-1
+title: Enable HA with zone redundancy
+description: |-
+ Enable HA with zone redundancy on flexible server instances to deploy a standby replica in a different zone, offering automatic failover capability for improved reliability and disaster recovery.
+source:
+ type: aprl
+ file: azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforPostgreSQL/flexibleServers
+severity: 0
+labels:
+ guid: ca87914f-aac4-4783-ab67-82a6f936f194
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for PostgreSQL instances that are not zone redundant
+ resources
+ | where type == "microsoft.dbforpostgresql/flexibleservers"
+ | where properties.highAvailability.mode != "ZoneRedundant"
+ | project recommendationId = "ca87914f-aac4-4783-ab67-82a6f936f194", name, id, tags, param1 = "ZoneRedundant: False"
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-GeoRedundantBackupStorageDurabilityTargets-1.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-GeoRedundantBackupStorageDurabilityTargets-1.yaml
new file mode 100644
index 000000000..9db17ae4f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-GeoRedundantBackupStorageDurabilityTargets-1.yaml
@@ -0,0 +1,23 @@
+name: aprl-GeoRedundantBackupStorageDurabilityTargets-1
+title: Configure geo redundant backup storage
+description: |-
+ Configure GRS to ensure that your database meets its availability and durability targets even in the face of failures or disasters.
+source:
+ type: aprl
+ file: azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforPostgreSQL/flexibleServers
+severity: 0
+labels:
+ guid: 31f4ac4b-29cb-4588-8de2-d8fe6f13ceb3
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find Database for PostgreSQL instances that do not have geo redundant backup storage configured
+ resources
+ | where type == "microsoft.dbforpostgresql/flexibleservers"
+ | where properties.backup.geoRedundantBackup != "Enabled"
+ | project recommendationId = "31f4ac4b-29cb-4588-8de2-d8fe6f13ceb3", name, id, tags, param1 = strcat("geoRedundantBackup:", properties['backup']['geoRedundantBackup'])
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-StorageAutoGrowServer-1.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-StorageAutoGrowServer-1.yaml
new file mode 100644
index 000000000..d03fd9de5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-flexibleServers/aprl-StorageAutoGrowServer-1.yaml
@@ -0,0 +1,18 @@
+name: aprl-StorageAutoGrowServer-1
+title: Configure storage auto-grow
+description: |-
+ Configure storage auto-grow to prevent the server from running out of storage and becoming read-only.
+source:
+ type: aprl
+ file: azure-resources/DBforPostgreSQL/flexibleServers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DBforPostgreSQL/flexibleServers
+severity: 0
+labels:
+ guid: 6293a3cc-6b4a-4c0f-9ea7-b8ae8d7dd3d5
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageAvailabilityZones-1-2-3-4.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageAvailabilityZones-1-2-3-4.yaml
new file mode 100644
index 000000000..b37252089
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageAvailabilityZones-1-2-3-4.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAvailabilityZones-1-2-3-4
+title: Leverage Availability Zones where regionally applicable
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.dbforpostgresql/servers
+waf: Reliability
+severity: 0
+labels:
+ guid: 016ccf31-ae5a-41eb-9888-9535e227896d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/postgresql/flexible-server/overview#architecture-and-high-availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageCrossRegionReplicas.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageCrossRegionReplicas.yaml
new file mode 100644
index 000000000..036ca42c3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageCrossRegionReplicas.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageCrossRegionReplicas
+title: Leverage cross-region read replicas for BCDR
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.dbforpostgresql/servers
+waf: Reliability
+severity: 1
+labels:
+ guid: 31b67c67-be59-4519-8083-845d587cb391
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/postgresql/single-server/concepts-business-continuity#cross-region-read-replicas
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageFlexibleServer-1.yaml b/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageFlexibleServer-1.yaml
new file mode 100644
index 000000000..a31827a87
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDBforPostgreSQL-servers/Reliability/revcl-LeverageFlexibleServer-1.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageFlexibleServer-1
+title: Leverage Flexible Server
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.dbforpostgresql/servers
+waf: Reliability
+severity: 1
+labels:
+ guid: 65285269-441c-44bf-9d3e-0844276d4bdc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/postgresql/flexible-server/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-AdfPipelinesKeyVault.yaml b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-AdfPipelinesKeyVault.yaml
new file mode 100644
index 000000000..9f0747986
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-AdfPipelinesKeyVault.yaml
@@ -0,0 +1,18 @@
+name: revcl-AdfPipelinesKeyVault
+title: If using Keyvault integration, use SLA of Keyvault to understand your availablity
+description: If your ADF Pipelines use Key Vault you don't have to do anything to
+ replicate Key Vault. Key Vault is a managed service and Microsoft takes care of
+ it for you
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.datafactory/datafactories
+waf: Reliability
+severity: 2
+labels:
+ guid: 25498f6d-bad3-47da-a43b-c6ce1d7aa9b2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-GithubAzureDevopsIntegrationArmTemplates.yaml b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-GithubAzureDevopsIntegrationArmTemplates.yaml
new file mode 100644
index 000000000..1033accfe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-GithubAzureDevopsIntegrationArmTemplates.yaml
@@ -0,0 +1,15 @@
+name: revcl-GithubAzureDevopsIntegrationArmTemplates
+title: 'Use DevOps to Backup the ARM templates with Github/Azure DevOps integration '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.datafactory/datafactories
+waf: Reliability
+severity: 1
+labels:
+ guid: 9ef1d6e8-32e5-42e3-911c-818b1a0bc511
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-factory/source-control
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-LeverageFtaResiliencyPlaybookAzureDataFactory.yaml b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-LeverageFtaResiliencyPlaybookAzureDataFactory.yaml
new file mode 100644
index 000000000..05ea9c83f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-LeverageFtaResiliencyPlaybookAzureDataFactory.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageFtaResiliencyPlaybookAzureDataFactory
+title: Leverage FTA Resiliency Playbook for Azure Data Factory
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.datafactory/datafactories
+waf: Reliability
+severity: 1
+labels:
+ guid: ab91932c-9fc9-4d1b-a881-37f5e6c0cb9e
+links:
+- type: docs
+ url: https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-ADF_v1.docx
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-SelfHostedIntegrationRuntimeVmsRegion.yaml b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-SelfHostedIntegrationRuntimeVmsRegion.yaml
new file mode 100644
index 000000000..74d99b0d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-SelfHostedIntegrationRuntimeVmsRegion.yaml
@@ -0,0 +1,16 @@
+name: revcl-SelfHostedIntegrationRuntimeVmsRegion
+title: 'Make sure you replicate the Self-Hosted Integration Runtime VMs in another
+ region '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.datafactory/datafactories
+waf: Reliability
+severity: 1
+labels:
+ guid: e43a18a9-cd29-49cf-b7b1-7db8255562f2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-SisterRegionNetwork.yaml b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-SisterRegionNetwork.yaml
new file mode 100644
index 000000000..f503f3214
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-SisterRegionNetwork.yaml
@@ -0,0 +1,16 @@
+name: revcl-SisterRegionNetwork
+title: Make sure you replicate or duplicate your network in the sister region. You
+ have to make a copy of your Vnet in another region
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.datafactory/datafactories
+waf: Reliability
+severity: 1
+labels:
+ guid: aee4563a-fd83-4393-98b2-62d6dc5f512a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-ZoneRedundantPipelinesAvailabilityZones.yaml b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-ZoneRedundantPipelinesAvailabilityZones.yaml
new file mode 100644
index 000000000..194a52993
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDataFactory-datafactories/Reliability/revcl-ZoneRedundantPipelinesAvailabilityZones.yaml
@@ -0,0 +1,15 @@
+name: revcl-ZoneRedundantPipelinesAvailabilityZones
+title: Use zone redundant pipelines in regions that support Availability Zones
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.datafactory/datafactories
+waf: Reliability
+severity: 0
+labels:
+ guid: e503547c-d447-4e82-9138-a7200f1cac6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/example-scenario/analytics/pipelines-disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/Cost/revcl-SpotVmsFallback.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/Cost/revcl-SpotVmsFallback.yaml
new file mode 100644
index 000000000..c1cc29abb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/Cost/revcl-SpotVmsFallback.yaml
@@ -0,0 +1,16 @@
+name: revcl-SpotVmsFallback
+title: Consider using Spot VMs with fallback where possible. Consider autotermination
+ of clusters.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.databricks/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: cd463cbb-bc8a-4c29-aebc-91a43da1dae2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/databricks/clusters/cluster-config-best-practices#automatic-termination
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AdbWorkspaceLimitsSeparateSubscriptions.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AdbWorkspaceLimitsSeparateSubscriptions.yaml
new file mode 100644
index 000000000..3eb6426ba
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AdbWorkspaceLimitsSeparateSubscriptions.yaml
@@ -0,0 +1,18 @@
+name: aprl-AdbWorkspaceLimitsSeparateSubscriptions
+title: Deploy workspaces in separate Subscriptions
+description: |-
+ Customers often naturally divide workspaces by teams or departments. However, it's crucial to also consider Azure Subscription and ADB Workspace limits when partitioning.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 397cdebb-9d6e-ab4f-83a1-8c481de0a3a7
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ApacheSparkUdfsProductionGradeModel.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ApacheSparkUdfsProductionGradeModel.yaml
new file mode 100644
index 000000000..44f203f4f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ApacheSparkUdfsProductionGradeModel.yaml
@@ -0,0 +1,18 @@
+name: aprl-ApacheSparkUdfsProductionGradeModel
+title: Use a scalable and production-grade model serving infrastructure
+description: |-
+ Use Databricks and MLflow for deploying models as Apache Spark UDFs, benefiting from job scheduling, retries, autoscaling, etc.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 4cbb7744-ff3d-0447-badb-baf068c95696
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AutomaticJobTerminationUserDefinedLocalProcesses.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AutomaticJobTerminationUserDefinedLocalProcesses.yaml
new file mode 100644
index 000000000..7f8676641
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AutomaticJobTerminationUserDefinedLocalProcesses.yaml
@@ -0,0 +1,19 @@
+name: aprl-AutomaticJobTerminationUserDefinedLocalProcesses
+title: Automatic Job Termination is enabled, ensure there are no user-defined local
+ processes
+description: |-
+ To conserve cluster resources, you can terminate a cluster to store its configuration for future reuse or autostart jobs. Clusters can auto-terminate after inactivity, but this only tracks Spark jobs, not local processes, which might still be running even after Spark jobs end.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: 3d3e53b5-ebd1-db42-b43b-d4fad74824ec
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AutomaticRetriesSparkUdfs.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AutomaticRetriesSparkUdfs.yaml
new file mode 100644
index 000000000..7b5e88035
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AutomaticRetriesSparkUdfs.yaml
@@ -0,0 +1,18 @@
+name: aprl-AutomaticRetriesSparkUdfs
+title: Configure jobs for automatic retries and termination
+description: |-
+ Use Databricks and MLflow for deploying models as Spark UDFs for job scheduling, retries, autoscaling. Model serving offers scalable infrastructure, processes models using MLflow, and serves them via REST API using serverless compute managed in Databricks cloud.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 84e44da6-8cd7-b349-b02c-c8bf72cf587c
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AzureDatabricksWorkspaceDataAvailabilityConcerns.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AzureDatabricksWorkspaceDataAvailabilityConcerns.yaml
new file mode 100644
index 000000000..e2ef55593
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-AzureDatabricksWorkspaceDataAvailabilityConcerns.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureDatabricksWorkspaceDataAvailabilityConcerns
+title: Do not Store any Production Data in Default DBFS Folders
+description: |-
+ Driven by security and data availability concerns, each Azure Databricks Workspace comes with a default DBFS designed for system-level artifacts like libraries and Init scripts, not for production data.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 14310ba6-77ad-3641-a2db-57a2218b9bc7
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-CriticalProductionWorkloadsAzureSpotVms.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-CriticalProductionWorkloadsAzureSpotVms.yaml
new file mode 100644
index 000000000..92a7d85ff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-CriticalProductionWorkloadsAzureSpotVms.yaml
@@ -0,0 +1,18 @@
+name: aprl-CriticalProductionWorkloadsAzureSpotVms
+title: Do not use Azure Spot VMs for critical Production workloads
+description: |-
+ Azure Spot VMs are not suitable for critical production workloads needing high availability and reliability. They are meant for fault-tolerant tasks and can be evicted with 30-seconds notice if Azure needs the capacity, with no SLA guarantees.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: b5af7e26-3939-1b48-8fba-f8d4a475c67a
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-CurrentControlPlaneRegionRegionControlPlane.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-CurrentControlPlaneRegionRegionControlPlane.yaml
new file mode 100644
index 000000000..1e704ad6e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-CurrentControlPlaneRegionRegionControlPlane.yaml
@@ -0,0 +1,18 @@
+name: aprl-CurrentControlPlaneRegionRegionControlPlane
+title: Evaluate regional isolation for workspaces
+description: |-
+ Move workspaces to in-region control plane for increased regional isolation. Identify current control plane region using the workspace URL and nslookup. When region from CNAME differs from workspace region and an in-region control is available, consider migration using tools provided below.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 8aa63c34-dd9d-49bd-9582-21ec310dfbdd
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DatabricksAutoLoaderDeltaLiveTables.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DatabricksAutoLoaderDeltaLiveTables.yaml
new file mode 100644
index 000000000..984350945
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DatabricksAutoLoaderDeltaLiveTables.yaml
@@ -0,0 +1,19 @@
+name: aprl-DatabricksAutoLoaderDeltaLiveTables
+title: Automatically rescue invalid or nonconforming data with Databricks Auto Loader
+ or Delta Live Tables
+description: |-
+ Invalid or nonconforming data can crash workloads dependent on specific data formats. Best practices recommend filtering such data at ingestion to improve end-to-end resilience, ensuring no data is lost or missed.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 2
+labels:
+ guid: 7e52d64d-8cc0-8548-a593-eb49ab45630d
+ area: Business Continuity
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaLiveTablesDataProcessingLatency.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaLiveTablesDataProcessingLatency.yaml
new file mode 100644
index 000000000..85e229020
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaLiveTablesDataProcessingLatency.yaml
@@ -0,0 +1,18 @@
+name: aprl-DeltaLiveTablesDataProcessingLatency
+title: Use Delta Live Tables enhanced autoscaling
+description: |-
+ Databricks enhanced autoscaling optimizes cluster utilization by automatically allocating cluster resources based on workload volume, with minimal impact on the data processing latency of your pipelines.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: cd77db98-9b13-6e4b-bd2b-74c2cb538628
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaLiveTablesDeltaTables.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaLiveTablesDeltaTables.yaml
new file mode 100644
index 000000000..26e1c7689
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaLiveTablesDeltaTables.yaml
@@ -0,0 +1,18 @@
+name: aprl-DeltaLiveTablesDeltaTables
+title: Use constraints and data expectations
+description: |-
+ Delta tables verify data quality automatically with SQL constraints, triggering an error for violations. Delta Live Tables enhance this by defining expectations for data quality, utilizing Python or SQL, to manage actions for record failures, ensuring data integrity and compliance.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 2
+labels:
+ guid: a42297c4-7e4f-8b41-8d4b-114033263f0e
+ area: Business Continuity
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaTimeTravelThoroughTesting.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaTimeTravelThoroughTesting.yaml
new file mode 100644
index 000000000..9b8e74b5a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DeltaTimeTravelThoroughTesting.yaml
@@ -0,0 +1,18 @@
+name: aprl-DeltaTimeTravelThoroughTesting
+title: Recover ETL jobs based on Delta time travel
+description: |-
+ Despite thorough testing, a production job can fail or yield unexpected data. Sometimes, repairs are done by adding jobs post-issue identification and pipeline correction.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: a18d60f8-c98c-ba4e-ad6e-2fac72879df1
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DisasterRecoveryPatternDataTeamsAccess.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DisasterRecoveryPatternDataTeamsAccess.yaml
new file mode 100644
index 000000000..958350df9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-DisasterRecoveryPatternDataTeamsAccess.yaml
@@ -0,0 +1,20 @@
+name: aprl-DisasterRecoveryPatternDataTeamsAccess
+title: Configure a disaster recovery pattern
+description: |-
+ Implementing a disaster recovery pattern is vital for Azure Databricks, ensuring data teams' access even during rare regional outages.
+
+ It is important to note that the Azure Databricks service is not entirely zone redudant and does support zonal failover.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 4fdb7112-4531-6f48-b60e-c917a6068d9b
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-EfficientErrorRecoveryDatabricksWorkflows.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-EfficientErrorRecoveryDatabricksWorkflows.yaml
new file mode 100644
index 000000000..87af5b01d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-EfficientErrorRecoveryDatabricksWorkflows.yaml
@@ -0,0 +1,18 @@
+name: aprl-EfficientErrorRecoveryDatabricksWorkflows
+title: Use Databricks Workflows and built-in recovery
+description: |-
+ Databricks Workflows enable efficient error recovery in multi-task jobs by offering a matrix view for issue examination. Fixes can be applied to initiate repair runs targeting only failed and dependent tasks, preserving successful outcomes and thereby saving time and money.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 2
+labels:
+ guid: c0e22580-3819-444d-8546-a80e4ed85c83
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LatestXVersionDatabricksRuntimeVersion.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LatestXVersionDatabricksRuntimeVersion.yaml
new file mode 100644
index 000000000..dcf5f19f1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LatestXVersionDatabricksRuntimeVersion.yaml
@@ -0,0 +1,18 @@
+name: aprl-LatestXVersionDatabricksRuntimeVersion
+title: Databricks runtime version is not latest or is not LTS version
+description: |-
+ Databricks recommends migrating workloads to the latest or LTS version of its runtime for enhanced stability and support. If on Runtime 11.3 LTS or above, move directly to the latest 12.x version. If below, first migrate to 11.3 LTS, then to the latest 12.x version as per the migration guide.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: 0e835cc2-2551-a247-b1f1-3c5f25c9cb70
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LayeredStorageArchitectureLayeredArchitecture.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LayeredStorageArchitectureLayeredArchitecture.yaml
new file mode 100644
index 000000000..a40b3b330
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LayeredStorageArchitectureLayeredArchitecture.yaml
@@ -0,0 +1,18 @@
+name: aprl-LayeredStorageArchitectureLayeredArchitecture
+title: Use a layered storage architecture
+description: |-
+ Curate data by creating a layered architecture to increase data quality across layers. Start with a raw layer for ingested source data, continue with a curated layer for cleansed and refined data, and finish with a final layer catered to business needs, focusing on security and performance.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: 1b0d0893-bf0e-8f4c-9dc6-f18f145c1ecf
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LoggingClusterLogDeliveryLogDeliveryLocation.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LoggingClusterLogDeliveryLogDeliveryLocation.yaml
new file mode 100644
index 000000000..631297259
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-LoggingClusterLogDeliveryLogDeliveryLocation.yaml
@@ -0,0 +1,18 @@
+name: aprl-LoggingClusterLogDeliveryLogDeliveryLocation
+title: Enable Logging-Cluster log delivery
+description: |-
+ When creating a Databricks cluster, you can set a log delivery location for the Spark driver, worker nodes, and events. Logs are delivered every 5 mins and archived hourly. Upon cluster termination, all generated logs until that point are guaranteed to be delivered.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: 7fb90127-5364-bb4d-86fa-30778ed713fb
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ManyUseCasesDeltaLiveTables.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ManyUseCasesDeltaLiveTables.yaml
new file mode 100644
index 000000000..e87c3c4b8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ManyUseCasesDeltaLiveTables.yaml
@@ -0,0 +1,18 @@
+name: aprl-ManyUseCasesDeltaLiveTables
+title: Enable autoscaling for batch workloads
+description: |-
+ Autoscaling adjusts cluster sizes automatically based on workload demands, offering benefits for many use cases in terms of costs and performance. It includes guidance on when and how to best utilize Autoscaling. For streaming, Delta Live Tables with autoscaling is advised.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 5c72f0d6-55ec-d941-be84-36c194fa78c0
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-OneDatabricksWorkspaceIsolationModel.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-OneDatabricksWorkspaceIsolationModel.yaml
new file mode 100644
index 000000000..ca2256794
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-OneDatabricksWorkspaceIsolationModel.yaml
@@ -0,0 +1,18 @@
+name: aprl-OneDatabricksWorkspaceIsolationModel
+title: Isolate each workspace in its own Vnet
+description: |-
+ Deploying only one Databricks Workspace per VNet aligns with ADB's isolation model.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 5e722c4f-415a-9b4c-bd4c-96b74dce29ad
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-OpenSourceStorageFormatScalableMetadataHandling.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-OpenSourceStorageFormatScalableMetadataHandling.yaml
new file mode 100644
index 000000000..7caf166c9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-OpenSourceStorageFormatScalableMetadataHandling.yaml
@@ -0,0 +1,18 @@
+name: aprl-OpenSourceStorageFormatScalableMetadataHandling
+title: Use Delta Lake for higher reliability
+description: |-
+ Delta Lake is an open source storage format enhancing data lakes' reliability with ACID transactions, schema enforcement, and scalable metadata handling.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: da4ea916-4df3-8c4d-8060-17b49da45977
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-PreProvisionVmsProvisioningErrors.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-PreProvisionVmsProvisioningErrors.yaml
new file mode 100644
index 000000000..67345760b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-PreProvisionVmsProvisioningErrors.yaml
@@ -0,0 +1,18 @@
+name: aprl-PreProvisionVmsProvisioningErrors
+title: Use Databricks Pools
+description: |-
+ Databricks pools pre-provision VMs, reducing risks of provisioning errors during cluster start or scale, enhancing reliability.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: c166602e-0804-e34b-be8f-09b4d56e1fcd
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ProblematicOperationalDataSilosLakehouseDataQuality.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ProblematicOperationalDataSilosLakehouseDataQuality.yaml
new file mode 100644
index 000000000..b8b84dac2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ProblematicOperationalDataSilosLakehouseDataQuality.yaml
@@ -0,0 +1,18 @@
+name: aprl-ProblematicOperationalDataSilosLakehouseDataQuality
+title: Improve data integrity by reducing data redundancy
+description: |-
+ Copying data leads to redundancy, lost integrity, lineage, and access issues, affecting lakehouse data quality. Temporary copies are useful for agility and innovation but can become problematic operational data silos, questioning data's master status and currency.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 2
+labels:
+ guid: e93fe702-e385-d741-ba37-1f1656482ecd
+ area: Business Continuity
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ResilientDistributedDataProcessingUsePhotonAcceleration.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ResilientDistributedDataProcessingUsePhotonAcceleration.yaml
new file mode 100644
index 000000000..dd4b5ddf0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-ResilientDistributedDataProcessingUsePhotonAcceleration.yaml
@@ -0,0 +1,18 @@
+name: aprl-ResilientDistributedDataProcessingUsePhotonAcceleration
+title: Use Photon Acceleration
+description: |-
+ Apache Spark in Databricks Lakehouse ensures resilient distributed data processing by automatically rescheduling failed tasks, aiding in overcoming external issues like network problems or revoked VMs.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 2
+labels:
+ guid: 892ca809-e2b5-9a47-924a-71132bf6f902
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-SqlWarehouseScalingParameter.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-SqlWarehouseScalingParameter.yaml
new file mode 100644
index 000000000..1bf1663f4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-SqlWarehouseScalingParameter.yaml
@@ -0,0 +1,18 @@
+name: aprl-SqlWarehouseScalingParameter
+title: Enable autoscaling for SQL warehouse
+description: |-
+ The scaling parameter of a SQL warehouse defines the min and max number of clusters for distributing queries. By default, it's set to one. Increasing the cluster count can accommodate more concurrent users effectively.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 362ad2b6-b92c-414f-980a-0cf69467ccce
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-StandardSsdsBalanceCostWorkerVmType.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-StandardSsdsBalanceCostWorkerVmType.yaml
new file mode 100644
index 000000000..d6a5ff445
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-StandardSsdsBalanceCostWorkerVmType.yaml
@@ -0,0 +1,18 @@
+name: aprl-StandardSsdsBalanceCostWorkerVmType
+title: Use SSD backed VMs for Worker VM Type and Driver type
+description: |-
+ Upgrade HDDs in premium VMs to SSDs for better speed and reliability. Premium SSDs boost IO-heavy apps; Standard SSDs balance cost and performance. Ideal for critical workloads, upgrading improves connectivity with brief reboot. Consider for vital VMs
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: 5877a510-8444-7a4c-8412-a8dab8662f7e
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-StructuredStreamingQueryFailuresAzureDatabricksWorkflows.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-StructuredStreamingQueryFailuresAzureDatabricksWorkflows.yaml
new file mode 100644
index 000000000..5741408ae
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-StructuredStreamingQueryFailuresAzureDatabricksWorkflows.yaml
@@ -0,0 +1,18 @@
+name: aprl-StructuredStreamingQueryFailuresAzureDatabricksWorkflows
+title: Recover from Structured Streaming query failures
+description: |-
+ Structured Streaming ensures fault-tolerance and data consistency in streaming queries. With Azure Databricks workflows, you can set up your queries to automatically restart after failure, picking up precisely where they left off.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 12e9d852-5cdc-2743-bffe-ee21f2ef7781
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksLabsProjectDatabricksCliApi.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksLabsProjectDatabricksCliApi.yaml
new file mode 100644
index 000000000..3fe2fab4d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksLabsProjectDatabricksCliApi.yaml
@@ -0,0 +1,18 @@
+name: aprl-TheDatabricksLabsProjectDatabricksCliApi
+title: Create regular backups
+description: |-
+ To recover from a failure, regular backups are needed. The Databricks Labs project migrate lets admins create backups by exporting workspace assets using the Databricks CLI/API. These backups help in restoring or migrating workspaces.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 2
+labels:
+ guid: 932d45d6-b46d-e341-abfb-d97bce832f1f
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces-1.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces-1.yaml
new file mode 100644
index 000000000..d0cd20e85
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces-1.yaml
@@ -0,0 +1,18 @@
+name: aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces-1
+title: Set up monitoring, alerting, and logging
+description: |-
+ The Databricks Terraform provider is a flexible, powerful tool for managing Azure Databricks workspaces and cloud infrastructure.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 20193ff9-dbcd-a74e-b197-71d7d9d3c1e6
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces.yaml
new file mode 100644
index 000000000..682cfd762
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces.yaml
@@ -0,0 +1,18 @@
+name: aprl-TheDatabricksTerraformProviderAzureDatabricksWorkspaces
+title: Automate deployments and workloads
+description: |-
+ The Databricks Terraform provider manages Azure Databricks workspaces and cloud infrastructure flexibly and powerfully.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 0
+labels:
+ guid: 42aedaa8-6151-424d-b782-b8666c779969
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-UncontrolledSchemaChangesInvalidData.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-UncontrolledSchemaChangesInvalidData.yaml
new file mode 100644
index 000000000..76e108935
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-UncontrolledSchemaChangesInvalidData.yaml
@@ -0,0 +1,18 @@
+name: aprl-UncontrolledSchemaChangesInvalidData
+title: Actively manage schemas
+description: |-
+ Uncontrolled schema changes can lead to invalid data and failing jobs. Databricks validates and enforces schema through Delta Lake, which prevents bad records during ingestion, and Auto Loader, which detects new columns and supports schema evolution to maintain data integrity.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: b7e1d13f-54c9-1648-8a52-34c0abe8ce16
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-VmSkuSwapStrategiesAlternateVmSkus.yaml b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-VmSkuSwapStrategiesAlternateVmSkus.yaml
new file mode 100644
index 000000000..9462b4e36
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDatabricks-workspaces/aprl-VmSkuSwapStrategiesAlternateVmSkus.yaml
@@ -0,0 +1,18 @@
+name: aprl-VmSkuSwapStrategiesAlternateVmSkus
+title: Define alternate VM SKUs
+description: |-
+ Azure Databricks planning should include VM SKU swap strategies for capacity issues. VMs are regional, and allocation failures may occur, shown by a "CLOUD PROVIDER" error.
+source:
+ type: aprl
+ file: azure-resources/Databricks/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Databricks/workspaces
+severity: 1
+labels:
+ guid: 028593be-956e-4736-bccf-074cb10b92f4
+ area: Personalized
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-EarlyIssueDetectionMultipleHostPools.yaml b/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-EarlyIssueDetectionMultipleHostPools.yaml
new file mode 100644
index 000000000..c12f564e2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-EarlyIssueDetectionMultipleHostPools.yaml
@@ -0,0 +1,18 @@
+name: aprl-EarlyIssueDetectionMultipleHostPools
+title: Create a validation host pool for testing of planned updates
+description: |-
+ Create a Validation Pool for early issue detection with planned AVD updates. Adjust limits based on needs. Scale by adding multiple host pools for more users. Regularly test updates on host pools. Validate changes before applying to main environment to avoid downtime.
+source:
+ type: aprl
+ file: azure-resources/DesktopVirtualization/hostPools/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DesktopVirtualization/hostPools
+severity: 1
+labels:
+ guid: 013ac34e-7c4b-425f-9e0c-216f0cc06181
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-HostPoolScheduledAgentUpdatesAzureVirtualDesktopAgent.yaml b/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-HostPoolScheduledAgentUpdatesAzureVirtualDesktopAgent.yaml
new file mode 100644
index 000000000..c937fe52d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-HostPoolScheduledAgentUpdatesAzureVirtualDesktopAgent.yaml
@@ -0,0 +1,23 @@
+name: aprl-HostPoolScheduledAgentUpdatesAzureVirtualDesktopAgent
+title: Configure host pool scheduled agent updates
+description: |-
+ Create maintenance schedules for AVD agent updates to avoid disruptions. Use Scheduled Agent Updates to set maintenance windows for updating Azure Virtual Desktop agent, side-by-side stack, and Geneva Monitoring agent.
+source:
+ type: aprl
+ file: azure-resources/DesktopVirtualization/hostPools/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DesktopVirtualization/hostPools
+severity: 1
+labels:
+ guid: 979ff8be-5f3a-4d8e-9aa3-407ecdd6d6f7
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // This resource graph query will return all AVD host pools that does not have scheduled agent updates configured
+ resources
+ | where type =~ "Microsoft.DesktopVirtualization/hostpools"
+ | where isnull(properties.agentUpdate)
+ | project recommendationId = "979ff8be-5f3a-4d8e-9aa3-407ecdd6d6f7", name, id, tags, param1 = 'No scheduled agent updates'
diff --git a/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-UniqueOuHostPools.yaml b/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-UniqueOuHostPools.yaml
new file mode 100644
index 000000000..9cbe27544
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDesktopVirtualization-hostPools/aprl-UniqueOuHostPools.yaml
@@ -0,0 +1,19 @@
+name: aprl-UniqueOuHostPools
+title: Ensure a unique OU is used when deploying host pools with domain joined session
+ hosts
+description: |-
+ For optimized AVD configuration, place Hybrid VMs in unique OUs. Segregate Prod and DR units for environment-specific settings. This ensures targeted configurations for session hosts, including Fslogix, timeouts, and session controls.
+source:
+ type: aprl
+ file: azure-resources/DesktopVirtualization/hostPools/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DesktopVirtualization/hostPools
+severity: 1
+labels:
+ guid: 939cb85c-102a-4e0a-ab82-5c92116d3778
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDesktopVirtualization-scalingPlans/aprl-SecondaryScalingPlanScalingPlans.yaml b/v2/recos/Services/MicrosoftDesktopVirtualization-scalingPlans/aprl-SecondaryScalingPlanScalingPlans.yaml
new file mode 100644
index 000000000..cf055204f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDesktopVirtualization-scalingPlans/aprl-SecondaryScalingPlanScalingPlans.yaml
@@ -0,0 +1,18 @@
+name: aprl-SecondaryScalingPlanScalingPlans
+title: Scaling plans should be created per region and not scaled across regions
+description: |-
+ Each region has its own scaling plans assigned to host pools within that region. However, these plans can become inaccessible if there's a regional failure. To mitigate this risk, it's advisable to create a secondary scaling plan in another region.
+source:
+ type: aprl
+ file: azure-resources/DesktopVirtualization/scalingPlans/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DesktopVirtualization/scalingPlans
+severity: 1
+labels:
+ guid: 499769ae-67c9-492e-9ca5-cfd4cece5209
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-CorrespondingGeoPairedRegionAffectedRegion-1.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-CorrespondingGeoPairedRegionAffectedRegion-1.yaml
new file mode 100644
index 000000000..74eac229d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-CorrespondingGeoPairedRegionAffectedRegion-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-CorrespondingGeoPairedRegionAffectedRegion-1
+title: Be aware of Microsoft-initiated failovers. These are exercised by Microsoft
+ in rare situations to fail over all the IoT hubs from an affected region to the
+ corresponding geo-paired region.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/iothubs
+waf: Reliability
+severity: 1
+labels:
+ guid: 35f651e8-0124-4ef7-8c57-658e38609e6e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3.yaml
new file mode 100644
index 000000000..32e20d3ae
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3.yaml
@@ -0,0 +1,15 @@
+name: revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3
+title: Consider a Cross-Region DR strategy for critical workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/iothubs
+waf: Reliability
+severity: 0
+labels:
+ guid: 4ed3e490-dc06-4a1e-b467-5d0239d85540
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#cross-region-dr
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-Failover.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-Failover.yaml
new file mode 100644
index 000000000..444eff6ba
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-Failover.yaml
@@ -0,0 +1,15 @@
+name: revcl-Failover
+title: Learn how to fail back after a failover.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/iothubs
+waf: Reliability
+severity: 0
+labels:
+ guid: f9db8dfb-1194-460b-aedd-34dd6a69db22
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#failback
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-LeverageAvailabilityZones-1-2.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-LeverageAvailabilityZones-1-2.yaml
new file mode 100644
index 000000000..7bb980147
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-LeverageAvailabilityZones-1-2.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAvailabilityZones-1-2
+title: Leverage Availability Zones if regionally applicable (this is automatically
+ enabled)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/iothubs
+waf: Reliability
+severity: 0
+labels:
+ guid: ac1d6380-f866-4bbd-a9b4-b1ee5d7908b8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#availability-zones
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-ManualFailover.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-ManualFailover.yaml
new file mode 100644
index 000000000..2094b3c61
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/Reliability/revcl-ManualFailover.yaml
@@ -0,0 +1,15 @@
+name: revcl-ManualFailover
+title: Learn how to trigger a manual failover.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/iothubs
+waf: Reliability
+severity: 0
+labels:
+ guid: a11ecab0-db47-46f7-9aa7-17764e7e45a1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/iot-hub/iot-hub-ha-dr#microsoft-initiated-failover
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-DisabledFallbackRouteDefaultRoute.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-DisabledFallbackRouteDefaultRoute.yaml
new file mode 100644
index 000000000..cf6c757f7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-DisabledFallbackRouteDefaultRoute.yaml
@@ -0,0 +1,24 @@
+name: aprl-DisabledFallbackRouteDefaultRoute
+title: Disabled Fallback Route
+description: |-
+ Using message routing for custom endpoints in IoT Hub, messages might not reach these destinations if specific conditions are unmet. A default route ensures all messages are received, but disabling this safety net risks leaving some messages undelivered.
+source:
+ type: aprl
+ file: azure-resources/Devices/iotHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Devices/IotHubs
+severity: 2
+labels:
+ guid: e7dbd21f-b27a-4b8c-a901-cedb1e6d8e1e
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // list all IoT Hubs that have the fallback route disabled
+ resources
+ | where type == "microsoft.devices/iothubs"
+ | extend fallbackEnabled=properties.routing.fallbackRoute.isEnabled
+ | where fallbackEnabled == false
+ | project recommendationId="e7dbd21f-b27a-4b8c-a901-cedb1e6d8e1e", name, id, tags, param1='FallbackRouteEnabled:false'
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-FailoverGuidelinesRegionalFailure.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-FailoverGuidelinesRegionalFailure.yaml
new file mode 100644
index 000000000..4208ee914
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-FailoverGuidelinesRegionalFailure.yaml
@@ -0,0 +1,18 @@
+name: aprl-FailoverGuidelinesRegionalFailure
+title: Define Failover Guidelines
+description: |-
+ In case of a regional failure, an IoT Hub can failover to a second region, automatically or manually, to ensure your application continues working.
+source:
+ type: aprl
+ file: azure-resources/Devices/iotHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Devices/IotHubs
+severity: 0
+labels:
+ guid: 02568a5d-335e-4e51-9f7c-fe2ada977300
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-MissionCriticalWorkloadsFailoverRegionIotHub.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-MissionCriticalWorkloadsFailoverRegionIotHub.yaml
new file mode 100644
index 000000000..78ee6b39d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-MissionCriticalWorkloadsFailoverRegionIotHub.yaml
@@ -0,0 +1,18 @@
+name: aprl-MissionCriticalWorkloadsFailoverRegionIotHub
+title: Device Identities are exported to a secondary region
+description: |-
+ Device Identities should be copied to the failover region IoT-Hub for all IoT devices to ensure connectivity in case of a failover. Manual Failover to another region is quicker (RTO), suitable for mission critical workloads.
+source:
+ type: aprl
+ file: azure-resources/Devices/iotHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Devices/IotHubs
+severity: 0
+labels:
+ guid: 783c6c18-760b-4867-9ced-3010a0bc5aa3
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-NecessaryServiceLevelAgreementIotHubTier.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-NecessaryServiceLevelAgreementIotHubTier.yaml
new file mode 100644
index 000000000..88abeafab
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-NecessaryServiceLevelAgreementIotHubTier.yaml
@@ -0,0 +1,23 @@
+name: aprl-NecessaryServiceLevelAgreementIotHubTier
+title: Do not use free tier
+description: |-
+ In a production scenario, the IoT Hub tier should not be Free because the Free tier does not provide the necessary Service Level Agreement.
+source:
+ type: aprl
+ file: azure-resources/Devices/iotHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Devices/IotHubs
+severity: 0
+labels:
+ guid: eeba3a49-fef0-481f-a471-7ff01139b474
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // list all IoT Hubs that are using the Free tier
+ resources
+ | where type =~ "microsoft.devices/iothubs" and
+ tostring(sku.tier) =~ 'Free'
+ | project recommendationId="eeba3a49-fef0-481f-a471-7ff01139b474", name, id, tags, param1=strcat("tier:", tostring(sku.tier))
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-NewIotHubsUseAvailabilityZones.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-NewIotHubsUseAvailabilityZones.yaml
new file mode 100644
index 000000000..4809896d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-NewIotHubsUseAvailabilityZones.yaml
@@ -0,0 +1,18 @@
+name: aprl-NewIotHubsUseAvailabilityZones
+title: Use Availability Zones
+description: |-
+ In regions supporting Availability Zones for IoT Hub, using these zones boosts availability. They're automatically activated for new IoT Hubs in supported areas.
+source:
+ type: aprl
+ file: azure-resources/Devices/iotHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Devices/IotHubs
+severity: 0
+labels:
+ guid: 214cbc46-747e-4354-af6e-6bf0054196a5
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-SpecificIotHubInstancesUseDeviceProvisioningService.yaml b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-SpecificIotHubInstancesUseDeviceProvisioningService.yaml
new file mode 100644
index 000000000..933235a20
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-IotHubs/aprl-SpecificIotHubInstancesUseDeviceProvisioningService.yaml
@@ -0,0 +1,30 @@
+name: aprl-SpecificIotHubInstancesUseDeviceProvisioningService
+title: Use Device Provisioning Service
+description: |-
+ Device Provisioning Service (DPS) enables easy redistribution of IoT devices for scaling and availability, allowing devices to be reassigned and not bound to specific IoT Hub instances. Devices in IoT Hubs using DPS should be verified for DPS utilization.
+source:
+ type: aprl
+ file: azure-resources/Devices/iotHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Devices/IotHubs
+severity: 0
+labels:
+ guid: b1e1378d-4572-4414-bebd-b8872a6d4d1c
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // list all IoT Hubs that do not have a linked IoT Hub Device Provisioning Service (DPS)
+ resources
+ | where type =~ "microsoft.devices/iothubs"
+ | project id, iotHubName=tostring(properties.hostName), tags, resourceGroup
+ | join kind=fullouter (
+ resources
+ | where type == "microsoft.devices/provisioningservices"
+ | mv-expand iotHubs=properties.iotHubs
+ | project iotHubName = tostring(iotHubs.name), dpsName = name, name=iotHubs.name
+ ) on iotHubName
+ | where dpsName == ''
+ | project recommendationId="b1e1378d-4572-4414-bebd-b8872a6d4d1c", name=iotHubName, id, tags, param1='DPS:none'
diff --git a/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1-2.yaml b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1-2.yaml
new file mode 100644
index 000000000..88d5d0983
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1-2.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServiceEnvironmentIsolatedEnvironment-1-2
+title: If deploying to an Isolated environment, use or migrate to App Service Environment
+ (ASE) v3
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/deviceupdateservices
+waf: Reliability
+severity: 0
+labels:
+ guid: bd91245c-fe32-4e98-a085-794a40f4bfe1
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/environment/intro
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-CorrespondingGeoPairedRegionAffectedRegion.yaml b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-CorrespondingGeoPairedRegionAffectedRegion.yaml
new file mode 100644
index 000000000..3ab4bcbbd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-CorrespondingGeoPairedRegionAffectedRegion.yaml
@@ -0,0 +1,17 @@
+name: revcl-CorrespondingGeoPairedRegionAffectedRegion
+title: Be aware of Microsoft-initiated failovers. These are exercised by Microsoft
+ in rare situations to fail over all the DPS instances from an affected region to
+ the corresponding geo-paired region.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/deviceupdateservices
+waf: Reliability
+severity: 0
+labels:
+ guid: c0c273bd-00ad-419a-9f2f-fc72fb181e55
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2.yaml b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2.yaml
new file mode 100644
index 000000000..ea3fde60d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2.yaml
@@ -0,0 +1,15 @@
+name: revcl-CrossRegionDrStrategyCriticalWorkloads-1-2
+title: Consider a Cross-Region DR strategy for critical workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/deviceupdateservices
+waf: Reliability
+severity: 0
+labels:
+ guid: 3af8abe6-07eb-4287-b393-6c4abe3702eb
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-LeverageAvailabilityZones-1.yaml b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-LeverageAvailabilityZones-1.yaml
new file mode 100644
index 000000000..1cb1fb6d4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-deviceUpdateServices/Reliability/revcl-LeverageAvailabilityZones-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAvailabilityZones-1
+title: Leverage Availability Zones if regionally applicable (this is automatically
+ enabled).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/deviceupdateservices
+waf: Reliability
+severity: 0
+labels:
+ guid: 0e03f5ee-4648-423c-bb86-7239480f9171
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/iot-dps/iot-dps-ha-dr#high-availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-provisioningServices/Operations/revcl-LeverageAzureDevopsLogicAppCode.yaml b/v2/recos/Services/MicrosoftDevices-provisioningServices/Operations/revcl-LeverageAzureDevopsLogicAppCode.yaml
new file mode 100644
index 000000000..77ca536b9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-provisioningServices/Operations/revcl-LeverageAzureDevopsLogicAppCode.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAzureDevopsLogicAppCode
+title: Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic
+ App code
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/provisioningservices
+waf: Operations
+severity: 1
+labels:
+ guid: 62711604-c9d1-4b0a-bdb7-5fda54a4f6c1
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1.yaml b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1.yaml
new file mode 100644
index 000000000..c2fc15fbe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServiceEnvironmentIsolatedEnvironment-1
+title: If deploying to an Isolated environment, use or migrate to App Service Environment
+ (ASE) v3
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/provisioningservices
+waf: Reliability
+severity: 0
+labels:
+ guid: da0f033e-d180-4f36-9aa4-c468dba14203
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/environment/intro
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1.yaml b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1.yaml
new file mode 100644
index 000000000..f7421fc86
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1.yaml
@@ -0,0 +1,15 @@
+name: revcl-CrossRegionDrStrategyCriticalWorkloads-1
+title: Consider a Cross-Region DR strategy for critical workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/provisioningservices
+waf: Reliability
+severity: 0
+labels:
+ guid: 8aed4fbf-0830-4883-899d-222a154af478
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-LogicAppsRegionFailures.yaml b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-LogicAppsRegionFailures.yaml
new file mode 100644
index 000000000..fdaf2879f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-LogicAppsRegionFailures.yaml
@@ -0,0 +1,16 @@
+name: revcl-LogicAppsRegionFailures
+title: Protect logic apps from region failures with zone redundancy and availability
+ zones
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/provisioningservices
+waf: Reliability
+severity: 0
+labels:
+ guid: f6dd7977-1123-4f39-b488-f91415a8430a
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps
+queries: {}
diff --git a/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-RightLogicAppHostingPlanSloRequirements.yaml b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-RightLogicAppHostingPlanSloRequirements.yaml
new file mode 100644
index 000000000..e2d9cc205
--- /dev/null
+++ b/v2/recos/Services/MicrosoftDevices-provisioningServices/Reliability/revcl-RightLogicAppHostingPlanSloRequirements.yaml
@@ -0,0 +1,15 @@
+name: revcl-RightLogicAppHostingPlanSloRequirements
+title: Select the right Logic App hosting plan based on your business & SLO requirements
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.devices/provisioningservices
+waf: Reliability
+severity: 0
+labels:
+ guid: cb26b2ba-a9db-45d1-8260-d9c6ec1447d9
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare
+queries: {}
diff --git a/v2/recos/Services/MicrosoftEventGrid-topics/aprl-AzureEventGridResourcesDiagnosticSettings.yaml b/v2/recos/Services/MicrosoftEventGrid-topics/aprl-AzureEventGridResourcesDiagnosticSettings.yaml
new file mode 100644
index 000000000..099fc2113
--- /dev/null
+++ b/v2/recos/Services/MicrosoftEventGrid-topics/aprl-AzureEventGridResourcesDiagnosticSettings.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureEventGridResourcesDiagnosticSettings
+title: Configure Diagnostic Settings for all Azure Event Grid resources
+description: |-
+ Enabling diagnostic settings on Azure Event Grid resources like custom topics, system topics, and domains lets you capture and view diagnostic information to troubleshoot failures effectively.
+source:
+ type: aprl
+ file: azure-resources/EventGrid/topics/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.EventGrid/topics
+severity: 2
+labels:
+ guid: 54c3191b-b535-1946-bba9-b754f44060f6
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftEventGrid-topics/aprl-AzureEventGridTopicsPrivateLinkPrivateEndpoints.yaml b/v2/recos/Services/MicrosoftEventGrid-topics/aprl-AzureEventGridTopicsPrivateLinkPrivateEndpoints.yaml
new file mode 100644
index 000000000..0a480e900
--- /dev/null
+++ b/v2/recos/Services/MicrosoftEventGrid-topics/aprl-AzureEventGridTopicsPrivateLinkPrivateEndpoints.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureEventGridTopicsPrivateLinkPrivateEndpoints
+title: Azure Event Grid topics should use Private Link Private Endpoints
+description: |-
+ Use private endpoints for secure event ingress to custom topics/domains via a private link, avoiding the public internet. It employs an IP from the VNet space for your topic/domain.
+source:
+ type: aprl
+ file: azure-resources/EventGrid/topics/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.EventGrid/topics
+severity: 1
+labels:
+ guid: b2069f64-4741-3d4a-a71d-50c8b03f5ab7
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all eventgrid services not protected by private endpoints.
+ Resources
+ | where type contains "eventgrid"
+ | where properties['publicNetworkAccess'] == "Enabled"
+ | project recommendationId = "b2069f64-4741-3d4a-a71d-50c8b03f5ab7", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftEventGrid-topics/aprl-SpecificTimeSeveralAttempts.yaml b/v2/recos/Services/MicrosoftEventGrid-topics/aprl-SpecificTimeSeveralAttempts.yaml
new file mode 100644
index 000000000..152be89af
--- /dev/null
+++ b/v2/recos/Services/MicrosoftEventGrid-topics/aprl-SpecificTimeSeveralAttempts.yaml
@@ -0,0 +1,18 @@
+name: aprl-SpecificTimeSeveralAttempts
+title: Configure Dead-letter to save events that cannot be delivered
+description: |-
+ Event Grid may not deliver an event within a specific time or after several attempts, leading to dead-lettering where undelivered events are sent to a storage account.
+source:
+ type: aprl
+ file: azure-resources/EventGrid/topics/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.EventGrid/topics
+severity: 2
+labels:
+ guid: 92162eb5-4323-3145-8a6c-525ce2f0700e
+ area: Personalized
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftInsights-activityLogAlerts/aprl-PersonalizedHealthViewServiceHealthAlerts.yaml b/v2/recos/Services/MicrosoftInsights-activityLogAlerts/aprl-PersonalizedHealthViewServiceHealthAlerts.yaml
new file mode 100644
index 000000000..d6692b6fb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-activityLogAlerts/aprl-PersonalizedHealthViewServiceHealthAlerts.yaml
@@ -0,0 +1,34 @@
+name: aprl-PersonalizedHealthViewServiceHealthAlerts
+title: Configure Service Health Alerts
+description: |-
+ Service health gives a personalized health view of Azure services and regions used, offering the best place for notifications on outages, planned maintenance, and health advisories by knowing the services used.
+source:
+ type: aprl
+ file: azure-resources/Insights/activityLogAlerts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Insights/activityLogAlerts
+severity: 0
+labels:
+ guid: 9729c89d-8118-41b4-a39b-e12468fa872b
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This resource graph query will return all subscriptions without Service Health alerts configured.
+
+ resourcecontainers
+ | where type == 'microsoft.resources/subscriptions'
+ | project subscriptionAlerts=tostring(id),name,tags
+ | join kind=leftouter (
+ resources
+ | where type == 'microsoft.insights/activitylogalerts' and properties.condition contains "ServiceHealth"
+ | extend subscriptions = properties.scopes
+ | project subscriptions
+ | mv-expand subscriptions
+ | project subscriptionAlerts = tostring(subscriptions)
+ ) on subscriptionAlerts
+ | where isempty(subscriptionAlerts1)
+ | project-away subscriptionAlerts1
+ | project recommendationId = "9729c89d-8118-41b4-a39b-e12468fa872b",id=subscriptionAlerts,name,tags
diff --git a/v2/recos/Services/MicrosoftInsights-activityLogAlerts/aprl-ResourceHealthAlertsHistoricalHealthStatus.yaml b/v2/recos/Services/MicrosoftInsights-activityLogAlerts/aprl-ResourceHealthAlertsHistoricalHealthStatus.yaml
new file mode 100644
index 000000000..5a36d8a18
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-activityLogAlerts/aprl-ResourceHealthAlertsHistoricalHealthStatus.yaml
@@ -0,0 +1,18 @@
+name: aprl-ResourceHealthAlertsHistoricalHealthStatus
+title: Configure Resource Health Alerts
+description: |-
+ Configure Resource Health Alerts for all applicable resources to stay informed about the current and historical health status of your Azure resources. They notify you when these resources have a change in their health status.
+source:
+ type: aprl
+ file: azure-resources/Insights/activityLogAlerts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Insights/activityLogAlerts
+severity: 2
+labels:
+ guid: be448849-0d7d-49ba-9c94-9573ee533d5d
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-DataCollectionRulesAzureMonitor.yaml b/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-DataCollectionRulesAzureMonitor.yaml
new file mode 100644
index 000000000..6b13371c5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-DataCollectionRulesAzureMonitor.yaml
@@ -0,0 +1,17 @@
+name: revcl-DataCollectionRulesAzureMonitor
+title: Data collection rules in Azure Monitor -https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-rule-overview
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Cost
+severity: 1
+labels:
+ guid: a95b86ad-8840-48e3-9273-4b875ba18f20
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/guide/multitenant/considerations/tenancy-models
+- type: docs
+ url: https://azure.microsoft.com/pricing/reservations/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-DifferentLogAnalyticsWorkspacesDifferentRetention.yaml b/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-DifferentLogAnalyticsWorkspacesDifferentRetention.yaml
new file mode 100644
index 000000000..c6b0d21c0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-DifferentLogAnalyticsWorkspacesDifferentRetention.yaml
@@ -0,0 +1,22 @@
+name: revcl-DifferentLogAnalyticsWorkspacesDifferentRetention
+title: 'Check spending and savings opportunities among the 40 different log analytics
+ workspaces- use different retention and data collection for nonprod workspaces-create
+ daily cap for awareness and tier sizing - If you do set a daily cap, in addition
+ to creating an alert when the cap is reached,ensure that you also create an alert
+ rule to be notified when some percentage has been reached (90% for example). - consider
+ workspace transformation if possible - https://learn.microsoft.com/azure/azure-monitor/essentials/data-collection-transformations#workspace-transformation-dcr '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Cost
+severity: 1
+labels:
+ guid: 674b5ed8-5a85-49c7-933b-e2a1a27b765a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/manage/direct-ea-administration#manage-notification-contacts
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/costs/understand-work-scopes
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-PurgingLogPolicyColdStorage.yaml b/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-PurgingLogPolicyColdStorage.yaml
new file mode 100644
index 000000000..320eaea74
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Cost/revcl-PurgingLogPolicyColdStorage.yaml
@@ -0,0 +1,18 @@
+name: revcl-PurgingLogPolicyColdStorage
+title: Enforce a purging log policy and automation (if needed, logs can be moved to
+ cold storage)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Cost
+severity: 1
+labels:
+ guid: 91be1f38-8ef3-494c-8bd4-63cbbac75819
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations
+- type: docs
+ url: https://www.youtube.com/watch?v=nHQYcYGKuyw
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-AzureMonitorAlertsOperationalAlerts.yaml b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-AzureMonitorAlertsOperationalAlerts.yaml
new file mode 100644
index 000000000..dbcda6acf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-AzureMonitorAlertsOperationalAlerts.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureMonitorAlertsOperationalAlerts
+title: Use Azure Monitor alerts for the generation of operational alerts.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Operations
+severity: 1
+labels:
+ guid: 97be9951-9048-4384-9c98-6cb2913156a1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-AzureMonitorLogsInsights.yaml b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-AzureMonitorLogsInsights.yaml
new file mode 100644
index 000000000..d5ef058c3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-AzureMonitorLogsInsights.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureMonitorLogsInsights
+title: Use Azure Monitor Logs for insights and reporting.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Operations
+severity: 1
+labels:
+ guid: 6944008b-e7d7-4e48-9327-6d8bdc055bcf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-LogAnalyticsWorkspaceAzureAutomationAccounts.yaml b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-LogAnalyticsWorkspaceAzureAutomationAccounts.yaml
new file mode 100644
index 000000000..b4bcf6763
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-LogAnalyticsWorkspaceAzureAutomationAccounts.yaml
@@ -0,0 +1,17 @@
+name: revcl-LogAnalyticsWorkspaceAzureAutomationAccounts
+title: When using Change and Inventory Tracking via Azure Automation Accounts, ensure
+ that you have selected supported regions for linking your Log Analytics workspace
+ and automation accounts together.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Operations
+severity: 1
+labels:
+ guid: fed3c55f-a67e-4875-aadd-3aba3f9fde31
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/automation/how-to/region-mappings
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-LogRetentionRequirementsAzureStorage.yaml b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-LogRetentionRequirementsAzureStorage.yaml
new file mode 100644
index 000000000..dc16c8b01
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-LogRetentionRequirementsAzureStorage.yaml
@@ -0,0 +1,19 @@
+name: revcl-LogRetentionRequirementsAzureStorage
+title: Export logs to Azure Storage if your log retention requirements exceed twelve
+ years. Use immutable storage with a write-once, read-many policy to make data non-erasable
+ and non-modifiable for a user-specified interval.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Operations
+severity: 1
+labels:
+ guid: 5e6c4cfd-3e50-4454-9c24-47ec66138a72
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-infrastructure-operations/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-SingleMonitorLogsWorkspaceAzureRoleBasedAccessControl.yaml b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-SingleMonitorLogsWorkspaceAzureRoleBasedAccessControl.yaml
new file mode 100644
index 000000000..3be847479
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Operations/revcl-SingleMonitorLogsWorkspaceAzureRoleBasedAccessControl.yaml
@@ -0,0 +1,19 @@
+name: revcl-SingleMonitorLogsWorkspaceAzureRoleBasedAccessControl
+title: Use a single monitor logs workspace to manage platforms centrally except where
+ Azure role-based access control (Azure RBAC), data sovereignty requirements, or
+ data retention policies mandate separate workspaces.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Operations
+severity: 1
+labels:
+ guid: 67e7a8ed-4b30-4e38-a3f2-9812b2363cef
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/Security/revcl-CentralizedAzureMonitorLogAnalyticsWorkspaceDefaultResourceConfigurations.yaml b/v2/recos/Services/MicrosoftInsights-components/Security/revcl-CentralizedAzureMonitorLogAnalyticsWorkspaceDefaultResourceConfigurations.yaml
new file mode 100644
index 000000000..b0a5e0781
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/Security/revcl-CentralizedAzureMonitorLogAnalyticsWorkspaceDefaultResourceConfigurations.yaml
@@ -0,0 +1,16 @@
+name: revcl-CentralizedAzureMonitorLogAnalyticsWorkspaceDefaultResourceConfigurations
+title: Connect default resource configurations to a centralized Azure Monitor Log
+ Analytics workspace.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.insights/components
+waf: Security
+severity: 1
+labels:
+ guid: e5f8d79f-2e87-4768-924c-516775c6ea95
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment
+queries: {}
diff --git a/v2/recos/Services/MicrosoftInsights-components/aprl-ExistingApplicationMonitoringScenariosWorkspaceBasedApplicationInsights.yaml b/v2/recos/Services/MicrosoftInsights-components/aprl-ExistingApplicationMonitoringScenariosWorkspaceBasedApplicationInsights.yaml
new file mode 100644
index 000000000..444d12e98
--- /dev/null
+++ b/v2/recos/Services/MicrosoftInsights-components/aprl-ExistingApplicationMonitoringScenariosWorkspaceBasedApplicationInsights.yaml
@@ -0,0 +1,21 @@
+name: aprl-ExistingApplicationMonitoringScenariosWorkspaceBasedApplicationInsights
+title: Convert Classic Deployments
+description: |-
+ Classic Application Insights retires in February 2024. To minimize disruption to existing application monitoring scenarios, transition to workspace-based Application Insights before 29 February 2024.
+source:
+ type: aprl
+ file: azure-resources/Insights/components/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Insights/components
+severity: 1
+labels:
+ guid: dac421ec-2832-4c37-839e-b6dc5a38f2fa
+ area: Service Upgrade and Retirement
+links: []
+queries:
+ arg: "// Azure Resource Graph query\n// Filters Application Insights resources with\
+ \ \u2018Classic\u2019 deployment type\nresources\n| where type =~ \"microsoft.insights/components\"\
+ \n| extend IngestionMode = properties.IngestionMode\n| where IngestionMode =~\
+ \ 'ApplicationInsights'\n| project recommendationId= \"dac421ec-2832-4c37-839e-b6dc5a38f2fa\"\
+ , name, id, tags, param1=\"ApplicationInsightsDeploymentType: Classic\"\n"
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Operations/revcl-VirtualMachinesUserPasswordsKeyVaultSecrets.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Operations/revcl-VirtualMachinesUserPasswordsKeyVaultSecrets.yaml
new file mode 100644
index 000000000..8d31fd42b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Operations/revcl-VirtualMachinesUserPasswordsKeyVaultSecrets.yaml
@@ -0,0 +1,16 @@
+name: revcl-VirtualMachinesUserPasswordsKeyVaultSecrets
+title: Use Key Vault secrets to avoid hard-coding sensitive information such as credentials
+ (virtual machines user passwords), certificates or keys.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Operations
+severity: 0
+labels:
+ guid: 108d5099-a11d-4445-bd8b-e12a5e95412e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/development-strategy-development-lifecycle#automated-builds
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-AccessPolicyKeyVault.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-AccessPolicyKeyVault.yaml
new file mode 100644
index 000000000..98d6f95c2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-AccessPolicyKeyVault.yaml
@@ -0,0 +1,17 @@
+name: revcl-AccessPolicyKeyVault
+title: During failover, access policy or firewall configurations and settings can't
+ be changed. The key vault will be in read-only mode during failover. Familiarize
+ yourself with the Key Vault's failover guidance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: 614682ca-6e0c-4f34-9f03-c6d3f2b99a32
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#failover-across-regions
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-BackupLimitationsPastVersions.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-BackupLimitationsPastVersions.yaml
new file mode 100644
index 000000000..7fbeaec9c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-BackupLimitationsPastVersions.yaml
@@ -0,0 +1,18 @@
+name: revcl-BackupLimitationsPastVersions
+title: Understand Key Vault's backup limitations. Key Vault does not support the ability
+ to backup more than 500 past versions of a key, secret, or certificate object. Attempting
+ to backup a key, secret, or certificate object may result in an error. It is not
+ possible to delete previous versions of a key, secret, or certificate.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 2
+labels:
+ guid: e8659d11-7e02-4db0-848c-c6541dbab68c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-EntireKeyVaultSingleOperation.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-EntireKeyVaultSingleOperation.yaml
new file mode 100644
index 000000000..ae8926602
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-EntireKeyVaultSingleOperation.yaml
@@ -0,0 +1,17 @@
+name: revcl-EntireKeyVaultSingleOperation
+title: Key Vault doesn't currently provide a way to back up an entire key vault in
+ a single operation and keys, secrets and certitificates must be backup indvidually.
+ Familiarize yourself with the Key Vault's backup and restore guidance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 2
+labels:
+ guid: 45c25e29-d0ef-4f07-aa04-0f8c64cbcc04
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#limitations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultBestPractices.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultBestPractices.yaml
new file mode 100644
index 000000000..d7a0c7c97
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultBestPractices.yaml
@@ -0,0 +1,16 @@
+name: revcl-KeyVaultBestPractices
+title: Familiarize yourself with the Key Vault's best practices such as isolation
+ recommendations, access control, data protection, backup, and logging.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 0
+labels:
+ guid: 6d37a33b-531c-4a91-871a-b69d8044f04e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultManagedService.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultManagedService.yaml
new file mode 100644
index 000000000..3bb45e78d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultManagedService.yaml
@@ -0,0 +1,16 @@
+name: revcl-KeyVaultManagedService
+title: Key Vault is a managed service and Microsoft will handle the failover within
+ and across region. Familiarize yourself with the Key Vault's availability and redundancy.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: 7ba4d380-7b9e-4a8b-a0c3-2d8e49c11872
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultSameGeography.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultSameGeography.yaml
new file mode 100644
index 000000000..09fd1f11f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultSameGeography.yaml
@@ -0,0 +1,17 @@
+name: revcl-KeyVaultSameGeography
+title: The contents of your key vault are replicated within the region and to a secondary
+ region at least 150 miles away, but within the same geography to maintain high durability
+ of your keys and secrets. Familiarize yourself with the Key Vault's data replication.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: 17fb86a2-eb45-42a4-9c34-52b92a2a1842
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/disaster-recovery-guidance#data-replication
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultSoftDeletedResources.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultSoftDeletedResources.yaml
new file mode 100644
index 000000000..38e293ee7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-KeyVaultSoftDeletedResources.yaml
@@ -0,0 +1,16 @@
+name: revcl-KeyVaultSoftDeletedResources
+title: Key Vault's soft-deleted resources are retained for a set period of 90 calendar
+ days. Familiarize yourself with the Key Vault's soft-delete guidance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 2
+labels:
+ guid: cbfa96b0-5249-4e6f-947c-d0e79509708c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-MaliciousDeletionKeyVault.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-MaliciousDeletionKeyVault.yaml
new file mode 100644
index 000000000..4f90c1731
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-MaliciousDeletionKeyVault.yaml
@@ -0,0 +1,16 @@
+name: revcl-MaliciousDeletionKeyVault
+title: If you want protection against accidental or malicious deletion of your secrets,
+ configure soft-delete and purge protection features on your key vault.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 0
+labels:
+ guid: 2df045b1-c0f6-47d3-9a9b-99cf6999684e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-OptionalKeyVaultBehaviorPurgeProtection.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-OptionalKeyVaultBehaviorPurgeProtection.yaml
new file mode 100644
index 000000000..e71eb45ea
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-OptionalKeyVaultBehaviorPurgeProtection.yaml
@@ -0,0 +1,18 @@
+name: revcl-OptionalKeyVaultBehaviorPurgeProtection
+title: Purge protection is recommended when using keys for encryption to prevent data
+ loss. Purge protection is an optional Key Vault behavior and is not enabled by default.
+ Purge protection can only be enabled once soft-delete is enabled. It can be turned
+ on via CLI, PowerShell or Portal.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: 0f15640b-31e5-4de6-85a7-d2c652fa09d3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/soft-delete-overview#purge-protection
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-SameAzureSubscriptionKeyVaultObject.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-SameAzureSubscriptionKeyVaultObject.yaml
new file mode 100644
index 000000000..1cc8185f0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Reliability/revcl-SameAzureSubscriptionKeyVaultObject.yaml
@@ -0,0 +1,19 @@
+name: revcl-SameAzureSubscriptionKeyVaultObject
+title: When you back up a key vault object, such as a secret, key, or certificate,
+ the backup operation will download the object as an encrypted blob. This blob can't
+ be decrypted outside of Azure. To get usable data from this blob, you must restore
+ the blob into a key vault within the same Azure subscription and Azure geography.
+ Familiarize yourself with the Key Vault's backup and restore guidance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: 9ef2b0d2-3206-4c94-b47a-4f07e6a1c509
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/backup?tabs=azure-cli#design-considerations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AppropriateRegionPairsDisasterRecoveryRegions.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AppropriateRegionPairsDisasterRecoveryRegions.yaml
new file mode 100644
index 000000000..516f2f5d2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AppropriateRegionPairsDisasterRecoveryRegions.yaml
@@ -0,0 +1,18 @@
+name: revcl-AppropriateRegionPairsDisasterRecoveryRegions
+title: If you want to bring your own keys, this might not be supported across all
+ considered services. Implement relevant mitigation so that inconsistencies don't
+ hinder desired outcomes. Choose appropriate region pairs and disaster recovery regions
+ that minimize latency.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 25d62688-6d70-4ba6-a97b-e99519048384
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AutomatedProcessCertificateRotation.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AutomatedProcessCertificateRotation.yaml
new file mode 100644
index 000000000..843f9bb2b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AutomatedProcessCertificateRotation.yaml
@@ -0,0 +1,15 @@
+name: revcl-AutomatedProcessCertificateRotation
+title: Establish an automated process for key and certificate rotation.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 913156a1-2476-4e49-b541-acdce979377b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultApplication.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultApplication.yaml
new file mode 100644
index 000000000..f5b9a9de3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultApplication.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureKeyVaultApplication
+title: Use an Azure Key Vault per application per environment per region.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 91163418-2ba5-4275-8694-4008be7d7e48
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultSecrets.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultSecrets.yaml
new file mode 100644
index 000000000..d292dd23b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultSecrets.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureKeyVaultSecrets
+title: Use Azure Key Vault to store your secrets and credentials
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 0
+labels:
+ guid: 5017f154-e3ab-4369-9829-e7e316183687
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultSoftDelete.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultSoftDelete.yaml
new file mode 100644
index 000000000..025765c9e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-AzureKeyVaultSoftDelete.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureKeyVaultSoftDelete
+title: Provision Azure Key Vault with the soft delete and purge policies enabled to
+ allow retention protection for deleted objects.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 2ba52752-6944-4008-ae7d-7e4843276d8b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-CustomMicrosoftEntraIdRolesPrivilegeModel.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-CustomMicrosoftEntraIdRolesPrivilegeModel.yaml
new file mode 100644
index 000000000..761440c44
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-CustomMicrosoftEntraIdRolesPrivilegeModel.yaml
@@ -0,0 +1,16 @@
+name: revcl-CustomMicrosoftEntraIdRolesPrivilegeModel
+title: Follow a least privilege model by limiting authorization to permanently delete
+ keys, secrets, and certificates to specialized custom Microsoft Entra ID roles.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: dc055bcf-619e-48a1-9f98-879525d62688
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-DelegateKeyVaultInstantiationPrivilegedAccess.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-DelegateKeyVaultInstantiationPrivilegedAccess.yaml
new file mode 100644
index 000000000..10067b86b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-DelegateKeyVaultInstantiationPrivilegedAccess.yaml
@@ -0,0 +1,16 @@
+name: revcl-DelegateKeyVaultInstantiationPrivilegedAccess
+title: Delegate Key Vault instantiation and privileged access and use Azure Policy
+ to enforce a consistent compliant configuration.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: b12308ca-5017-4f15-9e3a-b3693829e7e3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-DifferentAzureKeyVaultsTransactionScaleLimits.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-DifferentAzureKeyVaultsTransactionScaleLimits.yaml
new file mode 100644
index 000000000..92d6aaf9e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-DifferentAzureKeyVaultsTransactionScaleLimits.yaml
@@ -0,0 +1,23 @@
+name: revcl-DifferentAzureKeyVaultsTransactionScaleLimits
+title: Use different Azure Key Vaults for different applications and regions to avoid
+ transaction scale limits and restrict access to secrets.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: a0477a20-9945-4bda-9333-4f2491163418
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/overview-throttling
+queries:
+ arg: ResourceContainers | where type=='microsoft.resources/subscriptions'| parse
+ id with '/subscriptions/' SubscriptionID| project subscriptionId, SubscriptionName
+ = name| join kind=leftouter (Resources| where type == 'microsoft.keyvault/vaults'|
+ project id, name, subscriptionId) on subscriptionId| join kind= leftouter (Resources|
+ where type == 'microsoft.keyvault/vaults'| summarize ResourceCount = count() by
+ subscriptionId) on subscriptionId| extend RCount = iff(isnull(ResourceCount),
+ 0, ResourceCount)| project-away ResourceCount| extend compliant = (RCount <> 1)
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-PlatformCentralAzureMonitorLogAnalyticsWorkspaceSecretUsage.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-PlatformCentralAzureMonitorLogAnalyticsWorkspaceSecretUsage.yaml
new file mode 100644
index 000000000..6f5dba0e1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-PlatformCentralAzureMonitorLogAnalyticsWorkspaceSecretUsage.yaml
@@ -0,0 +1,16 @@
+name: revcl-PlatformCentralAzureMonitorLogAnalyticsWorkspaceSecretUsage
+title: Use the platform-central Azure Monitor Log Analytics workspace to audit key,
+ certificate, and secret usage within each instance of Key Vault.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 17d6326a-f625-4ca4-9e56-95f2223ace8c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/monitor-key-vault
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-PublicCertificateAuthoritiesCertificateManagement.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-PublicCertificateAuthoritiesCertificateManagement.yaml
new file mode 100644
index 000000000..0db21e776
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-PublicCertificateAuthoritiesCertificateManagement.yaml
@@ -0,0 +1,16 @@
+name: revcl-PublicCertificateAuthoritiesCertificateManagement
+title: Automate the certificate management and renewal process with public certificate
+ authorities to ease administration.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 6d70ba6c-97be-4995-8904-83845c986cb2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-SovereignLandingZoneAzureKeyVault.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-SovereignLandingZoneAzureKeyVault.yaml
new file mode 100644
index 000000000..6deade3bb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-SovereignLandingZoneAzureKeyVault.yaml
@@ -0,0 +1,16 @@
+name: revcl-SovereignLandingZoneAzureKeyVault
+title: For Sovereign Landing Zone, use Azure Key Vault managed HSM to store your secrets
+ and credentials.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: 4ac6b67c-b3a4-4ff9-8e87-b07a7ce7bbdb
+links:
+- type: docs
+ url: https://learn.microsoft.com/industry/sovereignty/key-management
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-VirtualNetworkServiceEndpointPrivateEndpoint.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-VirtualNetworkServiceEndpointPrivateEndpoint.yaml
new file mode 100644
index 000000000..9ba340588
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/Security/revcl-VirtualNetworkServiceEndpointPrivateEndpoint.yaml
@@ -0,0 +1,16 @@
+name: revcl-VirtualNetworkServiceEndpointPrivateEndpoint
+title: Enable firewall and virtual network service endpoint or private endpoint on
+ the vault to control access to the key vault.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.keyvault/vaults
+waf: Security
+severity: 1
+labels:
+ guid: cdb3751a-b2ab-413a-ba6e-55d7d8a2adb1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/key-vault/general/best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-AzurePrivateLinkServicePublicInternetExposure.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-AzurePrivateLinkServicePublicInternetExposure.yaml
new file mode 100644
index 000000000..c2e75ed32
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-AzurePrivateLinkServicePublicInternetExposure.yaml
@@ -0,0 +1,26 @@
+name: aprl-AzurePrivateLinkServicePublicInternetExposure
+title: Private endpoint should be configured for Key Vault
+description: |-
+ Azure Private Link Service lets you securely and privately connect to Azure Key Vault via a Private Endpoint in your VNet, using a private IP and eliminating public Internet exposure.
+source:
+ type: aprl
+ file: azure-resources/KeyVault/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.KeyVault/vaults
+severity: 1
+labels:
+ guid: 00c3d2b0-ea6e-4c4b-89be-b78a35caeb51
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This resource graph query will return all Key Vaults that does not have a Private Endpoint Connection or where a private endpoint exists but public access is enabled
+
+ resources
+ | where type == "microsoft.keyvault/vaults"
+ | where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != ("Succeeded") or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled')
+ | extend param1 = strcat('Private Endpoint: ', iif(isnotnull(properties.privateEndpointConnections),split(properties.privateEndpointConnections[0].properties.privateEndpoint.id,'/')[8],'No Private Endpoint'))
+ | extend param2 = strcat('Access: ', iif(properties.publicNetworkAccess == 'Disabled', 'Public Access Disabled', iif(isnotnull(properties.networkAcls), 'NetworkACLs in place','Public Access Enabled')))
+ | project recommendationId = "00c3d2b0-ea6e-4c4b-89be-b78a35caeb51", name, id, tags, param1, param2
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-KeyVaultAccessRetentionRequirements.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-KeyVaultAccessRetentionRequirements.yaml
new file mode 100644
index 000000000..5411106b1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-KeyVaultAccessRetentionRequirements.yaml
@@ -0,0 +1,18 @@
+name: aprl-KeyVaultAccessRetentionRequirements
+title: Diagnostic logs in Key Vault should be enabled
+description: |-
+ Enable logs, set up alerts, and adhere to retention requirements for improved monitoring and security of Key Vault access, detailing the frequency and identity of users.
+source:
+ type: aprl
+ file: azure-resources/KeyVault/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.KeyVault/vaults
+severity: 2
+labels:
+ guid: 1dc0821d-4f14-7644-bab4-ba208ff5f7fa
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-PermanentDataLossKeyVaults.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-PermanentDataLossKeyVaults.yaml
new file mode 100644
index 000000000..a1229d550
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-PermanentDataLossKeyVaults.yaml
@@ -0,0 +1,23 @@
+name: aprl-PermanentDataLossKeyVaults
+title: Key vaults should have purge protection enabled
+description: |-
+ Purge protection secures against malicious deletions by enforcing a retention period for soft deleted key vaults, ensuring no one, not even insiders or Microsoft, can purge your key vaults during this period, preventing permanent data loss.
+source:
+ type: aprl
+ file: azure-resources/KeyVault/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.KeyVault/vaults
+severity: 1
+labels:
+ guid: 70fcfe6d-00e9-5544-a63a-fff42b9f2edb
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This resource graph query will return all Key Vaults that do not have Purge Protection enabled.
+ resources
+ | where type == "microsoft.keyvault/vaults"
+ | where isnull(properties.enablePurgeProtection) or properties.enablePurgeProtection != "true"
+ | project recommendationId = "70fcfe6d-00e9-5544-a63a-fff42b9f2edb", name, id, tags, param1 = "EnablePurgeProtection: Disabled"
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-SeparateKeyVaultsSecurityBoundaries.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-SeparateKeyVaultsSecurityBoundaries.yaml
new file mode 100644
index 000000000..6c2233e09
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-SeparateKeyVaultsSecurityBoundaries.yaml
@@ -0,0 +1,18 @@
+name: aprl-SeparateKeyVaultsSecurityBoundaries
+title: Use separate key vaults per application per environment
+description: |-
+ Key vaults are security boundaries for secret storage. Grouping secrets together increases risk during a security event, as attacks could access multiple secrets.
+source:
+ type: aprl
+ file: azure-resources/KeyVault/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.KeyVault/vaults
+severity: 0
+labels:
+ guid: e7091145-3642-bd41-bb58-66502e64d2cd
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-SoftDeleteKeyVault.yaml b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-SoftDeleteKeyVault.yaml
new file mode 100644
index 000000000..d5e83168c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKeyVault-vaults/aprl-SoftDeleteKeyVault.yaml
@@ -0,0 +1,23 @@
+name: aprl-SoftDeleteKeyVault
+title: Key vaults should have soft delete enabled
+description: |-
+ Key Vault's soft-delete feature enables recovery of deleted vaults and objects like keys, secrets, and certificates. When enabled, marked resources are retained for 90 days, allowing for their recovery, essentially undoing deletion.
+source:
+ type: aprl
+ file: azure-resources/KeyVault/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.KeyVault/vaults
+severity: 0
+labels:
+ guid: 1cca00d2-d9ab-8e42-a788-5d40f49405cb
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This Resource Graph query will return all Key Vaults that do not have soft delete enabled.
+ resources
+ | where type == "microsoft.keyvault/vaults"
+ | where isnull(properties.enableSoftDelete) or properties.enableSoftDelete != "true"
+ | project recommendationId = "1cca00d2-d9ab-8e42-a788-5d40f49405cb", name, id, tags, param1 = "EnableSoftDelete: Disabled"
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ActiveHotStandbyConfigurationActiveHotConfiguration.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ActiveHotStandbyConfigurationActiveHotConfiguration.yaml
new file mode 100644
index 000000000..44d273363
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ActiveHotStandbyConfigurationActiveHotConfiguration.yaml
@@ -0,0 +1,23 @@
+name: revcl-ActiveHotStandbyConfigurationActiveHotConfiguration
+title: For applications, which required only read during failure, create Active-Hot
+ standby configuration
+description: The Active-Hot configuration is similar to the Active-Active configuration
+ in dual ingest, processing, and curation. While the standby cluster is online for
+ ingestion, process, and curation, it isn't available to query. The standby cluster
+ doesn't need to be in the same SKU as the primary cluster. It can be of a smaller
+ SKU and scale, which may result in it being less performant. In a disaster scenario,
+ users are redirected to the standby cluster, which can optionally be scaled up to
+ increase performance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 8fadfe27-7de2-483b-8ac3-52baa9b75708
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-hot-standby-configuration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ContinuousDataExportOverviewLeverageExternalTables.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ContinuousDataExportOverviewLeverageExternalTables.yaml
new file mode 100644
index 000000000..c224df482
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ContinuousDataExportOverviewLeverageExternalTables.yaml
@@ -0,0 +1,17 @@
+name: revcl-ContinuousDataExportOverviewLeverageExternalTables
+title: Leverage External Tables and Continuous data export overview to reduce costs
+description: Using the correct approach to feed a datalake with cold data and having
+ the Kusto query engine at your disposal at the same time, as in the short-term storage
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: ba7da7be-9951-4914-a384-5d997cb39132
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/kusto/management/data-export/continuous-data-export
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-DemandDataRecoveryClusterConfigurationDisasterRecoveryScenario.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-DemandDataRecoveryClusterConfigurationDisasterRecoveryScenario.yaml
new file mode 100644
index 000000000..a9e3e3995
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-DemandDataRecoveryClusterConfigurationDisasterRecoveryScenario.yaml
@@ -0,0 +1,24 @@
+name: revcl-DemandDataRecoveryClusterConfigurationDisasterRecoveryScenario
+title: For applications, where cost is a concern and can withstand some downtime during
+ failure, create on-demand data recovery cluster configuration
+description: This solution offers the least resiliency (highest RPO and RTO), is the
+ lowest in cost and highest in effort. In this configuration, there's no data recovery
+ cluster. Configure continuous export of curated data (unless raw and intermediate
+ data is also required) to a storage account that is configured GRS (Geo Redundant
+ Storage). A data recovery cluster is spun up if there is a disaster recovery scenario.
+ At that time, DDLs, configuration, policies, and processes are applied. Data is
+ ingested from storage with the ingestion property kustoCreationTime to over-ride
+ the ingestion time that defaults to system time.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 49aa8092-dc8e-4b9d-8bb7-3b26a5a67eba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#on-demand-data-recovery-configuration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-IngestDataCluster.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-IngestDataCluster.yaml
new file mode 100644
index 000000000..110d80632
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-IngestDataCluster.yaml
@@ -0,0 +1,15 @@
+name: revcl-IngestDataCluster
+title: Ingest data into each cluster in parallel
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 18ca6017-0265-4f4b-a46a-393af7f31728
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-LeaderFollowerClusterConfigurationOptionalFollowerCapability.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-LeaderFollowerClusterConfigurationOptionalFollowerCapability.yaml
new file mode 100644
index 000000000..69057d1ea
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-LeaderFollowerClusterConfigurationOptionalFollowerCapability.yaml
@@ -0,0 +1,22 @@
+name: revcl-LeaderFollowerClusterConfigurationOptionalFollowerCapability
+title: To share data, explore Leader-follower cluster configuration
+description: Azure Data Explorer provides an optional follower capability for a leader
+ cluster to be followed by other follower clusters for read-only access to the leader's
+ data and metadata. Changes in the leader, such as create, append, and drop are automatically
+ synchronized to the follower. While the leaders could span Azure regions, the follower
+ clusters should be hosted in the same region(s) as the leader. If the leader cluster
+ is down or databases or tables are accidentally dropped, the follower clusters will
+ lose access until access is recovered in the leader.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 56a22586-f490-4641-addd-ea8a377cdeb3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/follower?tabs=csharp
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-LeverageInfrastructureCluster.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-LeverageInfrastructureCluster.yaml
new file mode 100644
index 000000000..60266e866
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-LeverageInfrastructureCluster.yaml
@@ -0,0 +1,18 @@
+name: revcl-LeverageInfrastructureCluster
+title: Be fully cognizant of what it takes to build a cluster from scratch. Leverage
+ Infrastructure as a Code for your deployments
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 8b9fe5c4-1049-4d40-9a82-2c3474d00f18
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/devops
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/implement-hybrid-identity-windows-server/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ManagementActivitiesNewTables.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ManagementActivitiesNewTables.yaml
new file mode 100644
index 000000000..81d4b1cac
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ManagementActivitiesNewTables.yaml
@@ -0,0 +1,16 @@
+name: revcl-ManagementActivitiesNewTables
+title: Replicate all management activities such as creating new tables or managing
+ user roles on each cluster.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 436b0635-cb45-4e57-a603-324ace8cc123
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#replicate-management-activities
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-MultipleAzureDataExplorerClustersAzurePairedRegions.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-MultipleAzureDataExplorerClustersAzurePairedRegions.yaml
new file mode 100644
index 000000000..981eed60c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-MultipleAzureDataExplorerClustersAzurePairedRegions.yaml
@@ -0,0 +1,19 @@
+name: revcl-MultipleAzureDataExplorerClustersAzurePairedRegions
+title: For critical application with no tolerance for outages, create Active-Active-Active
+ (always-on) configuration
+description: This configuration is also called 'always-on'. For critical application
+ deployments with no tolerance for outages, you should use multiple Azure Data Explorer
+ clusters across Azure paired regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 58a9c279-9c42-4bb6-9d0c-65556246b338
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-active-configuration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ReleaseAutomationToolWrapDevops.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ReleaseAutomationToolWrapDevops.yaml
new file mode 100644
index 000000000..7fb6ec357
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ReleaseAutomationToolWrapDevops.yaml
@@ -0,0 +1,20 @@
+name: revcl-ReleaseAutomationToolWrapDevops
+title: Wrap DevOps and source control around all your code
+description: All database objects, policies, and configurations should be persisted
+ in source control so they can be released to the cluster from your release automation
+ tool.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 5a907e1e-348e-4f25-9c27-d32e8bbac757
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/devops
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-your-cloud-data/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-TwoAzurePairedRegionsEntireAzureRegion.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-TwoAzurePairedRegionsEntireAzureRegion.yaml
new file mode 100644
index 000000000..a26fd4f3d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-TwoAzurePairedRegionsEntireAzureRegion.yaml
@@ -0,0 +1,21 @@
+name: revcl-TwoAzurePairedRegionsEntireAzureRegion
+title: To protect against regional failure, create Multiple independent clusters,
+ preferably in two Azure Paired regions
+description: Azure Data Explorer doesn't support automatic protection against the
+ outage of an entire Azure region. This disruption can happen during a natural disaster,
+ like an earthquake. If you require a solution for a disaster recovery situation,
+ do the following steps to ensure business continuity. In these steps, you'll replicate
+ your clusters, management, and data ingestion in two Azure paired regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 861bb2bc-14ae-4a6e-95d8-d9a3adc218e6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-create-solution#create-multiple-independent-clusters
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-TwoAzurePairedRegionsTwoPairedRegions.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-TwoAzurePairedRegionsTwoPairedRegions.yaml
new file mode 100644
index 000000000..d05faa74a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-TwoAzurePairedRegionsTwoPairedRegions.yaml
@@ -0,0 +1,20 @@
+name: revcl-TwoAzurePairedRegionsTwoPairedRegions
+title: For critical applications, create Active-Active configuration in two paired
+ regions
+description: This configuration is identical to the active-active-active configuration,
+ but only involves two Azure paired regions. Configure dual ingestion, processing,
+ and curation. Users are routed to the nearest region. The cluster SKU must be the
+ same across regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 563a4dc7-4a74-48b6-922a-d190916a6649
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/business-continuity-overview#active-active-configuration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ValidationRoutinesDataPerspective.yaml b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ValidationRoutinesDataPerspective.yaml
new file mode 100644
index 000000000..36dab184d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftKusto-clusters/Reliability/revcl-ValidationRoutinesDataPerspective.yaml
@@ -0,0 +1,18 @@
+name: revcl-ValidationRoutinesDataPerspective
+title: Design, develop, and implement validation routines to ensure all clusters are
+ in-sync from a data perspective.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.kusto/clusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 1559ab91-53e8-4908-ae28-b84c33b6b780
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/data-explorer/devops
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-active-directory/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-AzureReservedVirtualMachineInstancesNextOneToThreeYears.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-AzureReservedVirtualMachineInstancesNextOneToThreeYears.yaml
new file mode 100644
index 000000000..8b939a528
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-AzureReservedVirtualMachineInstancesNextOneToThreeYears.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureReservedVirtualMachineInstancesNextOneToThreeYears
+title: 'Rate optimization: Purchase Azure Reserved Virtual Machine Instances if you
+ have a good estimate of usage over the next one to three years.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: f846a556-0f24-45ba-a2e2-43855e78ca2d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-CheaperVmSizesResourceUsage.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-CheaperVmSizesResourceUsage.yaml
new file mode 100644
index 000000000..1b6ca42de
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-CheaperVmSizesResourceUsage.yaml
@@ -0,0 +1,17 @@
+name: wafsg-CheaperVmSizesResourceUsage
+title: 'Monitor and optimize: Monitor your resource usage such as CPU and GPU usage
+ when training models. If the resources aren''t being fully used, modify your code
+ to better use resources or scale down to smaller or cheaper VM sizes.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 2905301e-e22b-4203-8fa0-6c7d740dd465
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-EarlyTerminationPoliciesTrainingTerminationPolicies.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-EarlyTerminationPoliciesTrainingTerminationPolicies.yaml
new file mode 100644
index 000000000..ac38379c7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-EarlyTerminationPoliciesTrainingTerminationPolicies.yaml
@@ -0,0 +1,16 @@
+name: wafsg-EarlyTerminationPoliciesTrainingTerminationPolicies
+title: 'Set training termination policies: Set early termination policies to limit
+ the duration of training runs or terminate them early.'
+description: Setting termination policies can help you save costs by stopping nonperforming
+ runs early.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: d02f1c6b-b32d-4027-8c23-dad429d06570
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-IdleShutdownComputeInstances.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-IdleShutdownComputeInstances.yaml
new file mode 100644
index 000000000..00f8b4b06
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-IdleShutdownComputeInstances.yaml
@@ -0,0 +1,17 @@
+name: wafsg-IdleShutdownComputeInstances
+title: 'Enable idle shutdown for compute instances: Enable idle shutdown for compute
+ instances or schedule a start and stop time if usage time is known.'
+description: By default, compute instances are available to you, accruing cost. Configuring
+ compute instances to shut down when idle or configuring a schedule for them saves
+ cost when they aren't in use.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: af8c167c-be44-45c2-bb57-a1bc383a8abd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LessIterativeExperimentationComputeScaling.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LessIterativeExperimentationComputeScaling.yaml
new file mode 100644
index 000000000..6137d9047
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LessIterativeExperimentationComputeScaling.yaml
@@ -0,0 +1,21 @@
+name: wafsg-LessIterativeExperimentationComputeScaling
+title: 'Optimize compute scaling: Configure your compute clusters for autoscaling
+ to ensure you only use what you need.For training clusters, set the minimum number
+ of nodes to 0 and configure the amount of time the node is idle to an appropriate
+ time. For less iterative experimentation, reduce the time to save costs. For more
+ iterative experimentation, use a higher time to prevent paying for scaling up or
+ down after each change.'
+description: Configure autoscaling for compute clusters to scale down when their usage
+ is low. Set the minimum number of nodes to 0 for training clusters to scale down
+ to 0 when not in use.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: f96f9439-c6c3-4bd1-a6ef-912307025375
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LowPriorityVirtualMachinesBatchWorkloads.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LowPriorityVirtualMachinesBatchWorkloads.yaml
new file mode 100644
index 000000000..19fcbb9e4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LowPriorityVirtualMachinesBatchWorkloads.yaml
@@ -0,0 +1,17 @@
+name: wafsg-LowPriorityVirtualMachinesBatchWorkloads
+title: 'Use low-priority virtual machines for batch workloads: Consider using low-priority
+ virtual machines for batch workloads that aren''t time-sensitive and in which interruptions
+ are recoverable.'
+description: Low-priority virtual machines enable a large amount of compute power
+ to be used for a low cost. They take advantage of surplus capacity in Azure.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 8fff224b-1d7f-4116-8624-e92ed5afc67a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LowerCostSkusUsageOptimization.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LowerCostSkusUsageOptimization.yaml
new file mode 100644
index 000000000..f91d67ac1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-LowerCostSkusUsageOptimization.yaml
@@ -0,0 +1,16 @@
+name: wafsg-LowerCostSkusUsageOptimization
+title: 'Usage optimization: Test parallelizing training workloads to determine if
+ training requirements can be met on lower cost SKUs.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: feac1256-41f0-435e-8d6c-c66c264deb5b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-MultipleSmallerInstancesTrainingWorkloads.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-MultipleSmallerInstancesTrainingWorkloads.yaml
new file mode 100644
index 000000000..bdec6be62
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-MultipleSmallerInstancesTrainingWorkloads.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MultipleSmallerInstancesTrainingWorkloads
+title: 'Parallelize training workloads: Consider parallelizing training workloads.
+ Test running them with the help of the parallel components in Machine Learning.'
+description: Parallel workloads can be run on multiple smaller instances, potentially
+ yielding cost savings.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 2c88452f-1c05-46c4-a541-54acbfc708b2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-NextOneToThreeYearsAzureReservedVmInstances.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-NextOneToThreeYearsAzureReservedVmInstances.yaml
new file mode 100644
index 000000000..988709ba8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-NextOneToThreeYearsAzureReservedVmInstances.yaml
@@ -0,0 +1,18 @@
+name: wafsg-NextOneToThreeYearsAzureReservedVmInstances
+title: 'Azure Reserved VM Instances: Purchase Azure Reserved VM Instances if you have
+ a good estimate of usage over the next one to three years. Take advantage of reserved
+ capacity options for services when you have good estimates of usage.'
+description: Purchase Azure Reserved VM Instances to prepay for virtual machine usage
+ and provide discounts with pay-as-you-go pricing. The discount is automatically
+ applied for virtual machine usage that matches the reservation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: bfc81863-3497-4a8d-a16e-aab55f3bae72
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationAppropriateResources.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationAppropriateResources.yaml
new file mode 100644
index 000000000..30c435ce6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationAppropriateResources.yaml
@@ -0,0 +1,17 @@
+name: wafsg-UsageOptimizationAppropriateResources
+title: 'Usage optimization: Choose the appropriate resources to ensure that they align
+ with your workload requirements. For example, choose between CPUs or GPUs, various
+ SKUs, or low versus regular-priority VMs.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: ac00077c-9c99-40f8-8b08-9938b9ab6445
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationLowerLimits.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationLowerLimits.yaml
new file mode 100644
index 000000000..71ac0fc89
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationLowerLimits.yaml
@@ -0,0 +1,16 @@
+name: wafsg-UsageOptimizationLowerLimits
+title: 'Usage optimization: Apply policies and configure quotas to comply with the
+ design''s upper and lower limits.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 66c94617-9ee4-4b81-be7a-ef5dbd521fc6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationResources.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationResources.yaml
new file mode 100644
index 000000000..d0582be6e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-UsageOptimizationResources.yaml
@@ -0,0 +1,16 @@
+name: wafsg-UsageOptimizationResources
+title: 'Usage optimization: Ensure compute resources that aren''t being used are scaled
+ down or shut down when idle to reduce waste.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 42466537-fe74-483d-94b7-3525c15f3cf8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-VeryLargeMachinesSpecializedCoreInstructions.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-VeryLargeMachinesSpecializedCoreInstructions.yaml
new file mode 100644
index 000000000..05b73bb4a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Cost/wafsg-VeryLargeMachinesSpecializedCoreInstructions.yaml
@@ -0,0 +1,29 @@
+name: wafsg-VeryLargeMachinesSpecializedCoreInstructions
+title: "Optimize compute resources: Optimize your compute resources based on the requirements\
+ \ of your workload. Choose the SKU that best suits your workload:
- General\
+ \ Purpose \u2013 Balanced CPU to memory ratio, good for all purposes.
- Compute\
+ \ Optimized \u2013 High CPU to memory ratio, good for math-heavy computations.
- Memory\
+ \ Optimized \u2013 High memory to CPU, good for in-memory computations or database\
+ \ applications.
- M Series \u2013 Very large machines that have huge amounts\
+ \ of memory and CPU.
- GPU \u2013 Better for models with a high number of\
+ \ variables that can benefit from higher parallelism and specialized core instructions.\
+ \ Typical applications are deep learning, image or video processing, scientific\
+ \ simulations, data mining, and taking advantage of GPU development frameworks.\
+ \ Test with multiple families and document the results as your baseline. As your\
+ \ model and data evolve, the most adequate compute resource might change. Monitor\
+ \ execution times and reevaluate as needed."
+description: Selecting the right compute is critical as it directly impacts the cost
+ of running your workload. Choosing a GPU or a high-performance SKU without proper
+ usage can lead to wasteful spending, while choosing undersized compute can lead
+ to prohibitively long training times and performance problems.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 1d3deb66-a7cf-4c9e-8071-3b3e3d60c478
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-CurateModelTrainingEnvironmentsUnnecessaryImageBuilds.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-CurateModelTrainingEnvironmentsUnnecessaryImageBuilds.yaml
new file mode 100644
index 000000000..d7d7622e1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-CurateModelTrainingEnvironmentsUnnecessaryImageBuilds.yaml
@@ -0,0 +1,19 @@
+name: wafsg-CurateModelTrainingEnvironmentsUnnecessaryImageBuilds
+title: 'Curate model training environments: Use curated environments optimized for
+ Machine Learning, when available.'
+description: Curated environments are pre-created environments provided by Machine
+ Learning that speed up deployment time and reduce deployment and training latency.
+ Using curated environments improves training and deployment success rates and avoids
+ unnecessary image builds. Curated environments, such as Azure Container for PyTorch,
+ can also be optimized for training large models on Machine Learning.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: 4addefe4-a8b2-4b05-8483-c8a96ada0ee0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-CuratedEnvironmentsMachineLearning.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-CuratedEnvironmentsMachineLearning.yaml
new file mode 100644
index 000000000..0f6c16d88
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-CuratedEnvironmentsMachineLearning.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CuratedEnvironmentsMachineLearning
+title: 'Simplicity: Use curated environments optimized for Machine Learning, when
+ available.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: d0afa393-bcfd-4e72-8cd2-304a988a6d0a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-DeployedModelsDataDrift.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-DeployedModelsDataDrift.yaml
new file mode 100644
index 000000000..cda946cda
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-DeployedModelsDataDrift.yaml
@@ -0,0 +1,16 @@
+name: wafsg-DeployedModelsDataDrift
+title: 'Observability: Monitor the performance of your deployed models including data
+ drift.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: 528dda34-794b-4acb-bd29-67d14b1cac5b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-DifferentPerformantSkusOnlineEndpoints.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-DifferentPerformantSkusOnlineEndpoints.yaml
new file mode 100644
index 000000000..0aaf4c855
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-DifferentPerformantSkusOnlineEndpoints.yaml
@@ -0,0 +1,24 @@
+name: wafsg-DifferentPerformantSkusOnlineEndpoints
+title: 'Monitor infrastructure: If your models are deployed to online endpoints, enable
+ Application Insights to monitor online endpoints and deployments.Monitor training
+ infrastructure to ensure you''re meeting your baseline requirements.Ensure you''re
+ collecting resource logs for Machine Learning.'
+description: Monitoring endpoints gives you visibility into metrics such as request
+ latency and requests per minute. You can compare your performance versus your baseline
+ and use this information to make changes to compute resources accordingly. Monitoring
+ metrics such as network bytes can alert you if you're approaching quota limits and
+ prevent throttling.Likewise, monitoring your training environment provides you with
+ the information to make changes to your training environment. Use that information
+ to decide to scale in or out, scale up or down with different performant SKUs, or
+ choose between CPUs or GPUs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: dce862d1-7b48-478a-bc39-39faa56f2531
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-FineTunePretrainedFoundationalMachineLearningModelsMachineLearningModelCatalogs.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-FineTunePretrainedFoundationalMachineLearningModelsMachineLearningModelCatalogs.yaml
new file mode 100644
index 000000000..137e767c7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-FineTunePretrainedFoundationalMachineLearningModelsMachineLearningModelCatalogs.yaml
@@ -0,0 +1,22 @@
+name: wafsg-FineTunePretrainedFoundationalMachineLearningModelsMachineLearningModelCatalogs
+title: 'Take advantage of model catalogs and registries: Take advantage of Machine
+ Learning model catalogs and registries to store, version, and share machine learning
+ assets.Use Machine Learning model catalogs to help you implement A/B testing and
+ deployment of models.'
+description: Use Machine Learning model registries to store and version your machine
+ learning models to track changes and maintain lineage with the job and datasets
+ used for training. With Machine Learning model catalogs, your data science teams
+ can discover, evaluate, and fine tune pretrained foundational machine learning models.
+ Storing versioned models in Machine Learning model registries supports deployment
+ strategies such as A/B releases, canary releases, and rollbacks.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: 53e64198-939d-4710-bb60-78240890442a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-GoodMachineLearningOperationsMlopsPractices.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-GoodMachineLearningOperationsMlopsPractices.yaml
new file mode 100644
index 000000000..3983a9b22
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-GoodMachineLearningOperationsMlopsPractices.yaml
@@ -0,0 +1,18 @@
+name: wafsg-GoodMachineLearningOperationsMlopsPractices
+title: 'Automate for efficiency: Follow good machine learning operations (MLOps) practices.
+ When possible, build end-to-end automated pipelines for data preparation, training,
+ and scoring processes. In development, use scripts instead of notebooks for training
+ models, as scripts are easier to integrate into automated pipelines.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: b796f824-2db6-452c-abf7-38292ba5b5f2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningModelCatalogsMachineLearningAssets.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningModelCatalogsMachineLearningAssets.yaml
new file mode 100644
index 000000000..2921c0070
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningModelCatalogsMachineLearningAssets.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningModelCatalogsMachineLearningAssets
+title: 'Development standards: Take advantage of Machine Learning model catalogs and
+ registries to store, version, and share machine learning assets.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: f5da553a-b026-4714-a3e3-d34ff609f316
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningWorkspaceInstancesMultipleSeparateWorkspaces.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningWorkspaceInstancesMultipleSeparateWorkspaces.yaml
new file mode 100644
index 000000000..d59993d3b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningWorkspaceInstancesMultipleSeparateWorkspaces.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MachineLearningWorkspaceInstancesMultipleSeparateWorkspaces
+title: 'Minimize Machine Learning workspace instances: Minimize the number of workspaces,
+ when possible, to reduce maintenance.'
+description: Limiting the number of workspaces reduces the maintenance effort and
+ cost of operation. For requirements, such as security, you might need multiple separate
+ workspaces. Minimize the number of workspaces when possible.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: 89ba4602-237d-4482-ba98-bf25c262c8e8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningWorkspacesOtherDeploymentEnvironments.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningWorkspacesOtherDeploymentEnvironments.yaml
new file mode 100644
index 000000000..41252c9ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MachineLearningWorkspacesOtherDeploymentEnvironments.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningWorkspacesOtherDeploymentEnvironments
+title: 'Deploy with confidence: Implement infrastructure as code (IaC) for Machine
+ Learning workspaces, compute clusters, compute instances, and other deployment environments.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: 47a26596-5524-4dd6-8fdd-fcc6ccbc9601
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MonitoringDataDriftInputData.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MonitoringDataDriftInputData.yaml
new file mode 100644
index 000000000..da61654d0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-MonitoringDataDriftInputData.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MonitoringDataDriftInputData
+title: 'Monitor model performance: Monitor the performance of your deployed models,
+ and detect data drift on datasets.'
+description: "Monitoring deployed models ensures your models meet the performance\
+ \ requirements.Monitoring data drift helps you detect changes in the input data\
+ \ that can lead to a decline in your model\u2019s performance. Managing data drift\
+ \ helps you ensure that your model provides accurate results over time."
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: 2ec618e1-844b-4b7f-bc41-be65bdf537d0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-OnlineEndpointsApplicationInsights.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-OnlineEndpointsApplicationInsights.yaml
new file mode 100644
index 000000000..7a28f8384
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Operations/wafsg-OnlineEndpointsApplicationInsights.yaml
@@ -0,0 +1,17 @@
+name: wafsg-OnlineEndpointsApplicationInsights
+title: 'Observability: If your models are deployed to online endpoints, enable Application
+ Insights to monitor online endpoints and deployments. Monitor training infrastructure
+ to ensure you''re meeting your baseline requirements.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Operations
+severity: 1
+labels:
+ guid: b5a47cd0-f65e-44bb-8001-66f68f8e0687
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AcceptableTrainingTimeTrainingTimeGoal.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AcceptableTrainingTimeTrainingTimeGoal.yaml
new file mode 100644
index 000000000..6e97421b2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AcceptableTrainingTimeTrainingTimeGoal.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AcceptableTrainingTimeTrainingTimeGoal
+title: 'Performance targets: Determine the acceptable training time and retrain frequency
+ for your model. Setting a clear target for training time, along with testing, helps
+ you determine the compute resources, CPU versus GPU, and CPU SKUs required to meet
+ the training time goal.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: 2b36442a-e682-4d91-9dac-75d02e6e90bf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AppropriateActionsPerformance.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AppropriateActionsPerformance.yaml
new file mode 100644
index 000000000..2e0259f00
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AppropriateActionsPerformance.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AppropriateActionsPerformance
+title: 'Achieve and sustain performance: Continuously monitor the performance of your
+ deployed models, review results, and take appropriate actions.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: 97507b95-fd6d-4784-a678-0327e5427f31
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AppropriateActionsTrainingTime.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AppropriateActionsTrainingTime.yaml
new file mode 100644
index 000000000..0bd8e0cd6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AppropriateActionsTrainingTime.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AppropriateActionsTrainingTime
+title: 'Achieve and sustain performance: Continuously monitor the performance of your
+ infrastructure of deployed models, review results, and take appropriate actions.
+ Monitor training infrastructure to ensure you''re meeting your requirements for
+ training time.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: d5d78692-ab7b-45d0-8c91-93b4f6329f41
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AzureMonitorAutoscaleFeatureAksDeploymentEnvironments.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AzureMonitorAutoscaleFeatureAksDeploymentEnvironments.yaml
new file mode 100644
index 000000000..3ef42405d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-AzureMonitorAutoscaleFeatureAksDeploymentEnvironments.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureMonitorAutoscaleFeatureAksDeploymentEnvironments
+title: "Model deployment environment scaling: Use the deployment environment\u2019\
+ s autoscale capabilities. For AKS deployment environments, use the cluster autoscaler\
+ \ to scale to meet demand. For online endpoints, automatically scale via integration\
+ \ with the Azure Monitor autoscale feature."
+description: Autoscaling adjusts the number of instances of the deployed model to
+ match demand.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: bc3729bc-45fd-4ceb-9b5d-2135464eddfb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-CpuSkuChoicesAcceptablePerformanceTargets.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-CpuSkuChoicesAcceptablePerformanceTargets.yaml
new file mode 100644
index 000000000..046788c22
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-CpuSkuChoicesAcceptablePerformanceTargets.yaml
@@ -0,0 +1,18 @@
+name: wafsg-CpuSkuChoicesAcceptablePerformanceTargets
+title: 'Performance targets: Define the acceptable performance targets for your deployed
+ models including response time, requests per second, error rate, and uptime. Performance
+ targets act as a benchmark for your deployed model''s efficiency. Targets can help
+ you make CPU versus GPU determinations, CPU SKU choices, and scaling requirements.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: 224fccfe-921b-4854-a01c-429988f76fd0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-DeploymentEnvironmentsAutoscalingCapabilities.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-DeploymentEnvironmentsAutoscalingCapabilities.yaml
new file mode 100644
index 000000000..94aa6c9d4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-DeploymentEnvironmentsAutoscalingCapabilities.yaml
@@ -0,0 +1,16 @@
+name: wafsg-DeploymentEnvironmentsAutoscalingCapabilities
+title: 'Meet capacity requirements: Choose deployment environments with autoscaling
+ capabilities to add and remove capacity as demand fluctuates.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: def7165b-3e46-4bab-b1a1-a24681c4cacc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-DifferentPerformantSkusOnlineEndpoints-1.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-DifferentPerformantSkusOnlineEndpoints-1.yaml
new file mode 100644
index 000000000..0d8f0b714
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-DifferentPerformantSkusOnlineEndpoints-1.yaml
@@ -0,0 +1,25 @@
+name: wafsg-DifferentPerformantSkusOnlineEndpoints-1
+title: 'Monitor infrastructure: Monitor online endpoints and integrate with Monitor
+ to track and monitor the appropriate metrics and logs. Enable Application Insights
+ when creating online deployments.Monitor training infrastructure and review resource
+ usage such as memory and CPU or GPU usage when training models to ensure you''re
+ meeting your baseline requirements.'
+description: Monitoring endpoints gives you visibility into metrics such as request
+ latency and requests per minute. You can compare your performance versus your baseline
+ and use this information to make changes to compute resources accordingly. Monitoring
+ metrics such as network bytes can alert you if you're approaching quota limits and
+ prevent throttling.Likewise, monitoring your training environment provides you with
+ the information to make changes to your training environment. Use that information
+ to decide to scale in or out, scale up or down with different performant SKUs, or
+ choose between CPUs or GPUs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: ff1f7368-9980-4cf5-bfe0-31ebae0ebc7e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-FeatureAttributionDriftMonitoringDataDrift.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-FeatureAttributionDriftMonitoringDataDrift.yaml
new file mode 100644
index 000000000..a63a9aaa3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-FeatureAttributionDriftMonitoringDataDrift.yaml
@@ -0,0 +1,18 @@
+name: wafsg-FeatureAttributionDriftMonitoringDataDrift
+title: 'Monitor model performance: Monitor the performance of your deployed models.'
+description: "Tracking the performance of models in production alerts you to potential\
+ \ problems such as data drift, prediction drift, data quality, and feature attribution\
+ \ drift.Monitoring data drift helps you detect changes in the input data that can\
+ \ lead to a decline in your model\u2019s performance. Managing data drift helps\
+ \ you ensure that your model provides accurate results over time."
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: ce910d41-2b8b-4685-9e78-5dc683d84bc1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-MachineLearningComputeClustersAppropriateComputeServices.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-MachineLearningComputeClustersAppropriateComputeServices.yaml
new file mode 100644
index 000000000..595ad7999
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-MachineLearningComputeClustersAppropriateComputeServices.yaml
@@ -0,0 +1,26 @@
+name: wafsg-MachineLearningComputeClustersAppropriateComputeServices
+title: 'Select appropriate compute services for model training: Consider Machine Learning
+ compute clusters over compute instances for model training if you require autoscaling.Optimize
+ your compute resources based on the training requirements. First choose between
+ CPUs and GPUs. Default to CPUs, but consider GPUs for workloads such as deep learning,
+ image or video processing, or large amounts of data. Next, choose the image SKU
+ that best suits your workload.Use testing to choose the compute option that optimizes
+ cost against training time when determining your baseline.'
+description: Selecting the right compute is critical as it directly impacts the training
+ time. Choosing the right SKU and CPU versus GPU ensures your model training can
+ meet your requirements and performance targets. Choosing a low-performance SKU that's
+ overused can lead to prohibitively long training times and performance problems.
+ Compute clusters provide the ability to improve performance by scaling out workloads
+ that support horizontal scaling. This method provides flexibility for handling workloads
+ with different demands and lets you add or remove machines as needed.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: 8c75d7e5-34e6-4a55-85a1-db4c26eb15f2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-RightComputeResourcesCapacityRequirements-1.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-RightComputeResourcesCapacityRequirements-1.yaml
new file mode 100644
index 000000000..eaa07ec8a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-RightComputeResourcesCapacityRequirements-1.yaml
@@ -0,0 +1,15 @@
+name: wafsg-RightComputeResourcesCapacityRequirements-1
+title: 'Meet capacity requirements: Choose the right compute resources for model deployments.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: 31f9cf51-136d-4c41-93d3-59f89c253259
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-RightComputeResourcesCapacityRequirements.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-RightComputeResourcesCapacityRequirements.yaml
new file mode 100644
index 000000000..d357ee628
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Performance/wafsg-RightComputeResourcesCapacityRequirements.yaml
@@ -0,0 +1,15 @@
+name: wafsg-RightComputeResourcesCapacityRequirements
+title: 'Meet capacity requirements: Choose the right compute resources for model training.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Performance
+severity: 1
+labels:
+ guid: ff8ee1a1-242e-4f07-b027-41219ea774d8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-AzureContainerRegistryAzureStorage.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-AzureContainerRegistryAzureStorage.yaml
new file mode 100644
index 000000000..7b6eef7a7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-AzureContainerRegistryAzureStorage.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureContainerRegistryAzureStorage
+title: 'Recovery: Ensure you have a recovery strategy defined. Machine Learning doesn''t
+ have automatic failover. Therefore, you must design a strategy that encompasses
+ the workspace and all its dependencies, such as Key Vault, Azure Storage, and Azure
+ Container Registry.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: bfa8abfb-faee-4eff-aff9-240353e483e2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-BusinessRequirementsComputeClusters.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-BusinessRequirementsComputeClusters.yaml
new file mode 100644
index 000000000..29878d60d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-BusinessRequirementsComputeClusters.yaml
@@ -0,0 +1,17 @@
+name: wafsg-BusinessRequirementsComputeClusters
+title: 'Business requirements: Select your use of compute clusters, compute instances,
+ and externalized inference hosts based on reliability needs, considering service-level
+ agreements (SLAs) as a factor.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: a03b959b-6c2a-485f-824c-4d105fce8c68
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-DedicatedVirtualMachineTierLowPriorityVirtualMachines.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-DedicatedVirtualMachineTierLowPriorityVirtualMachines.yaml
new file mode 100644
index 000000000..9a1676df4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-DedicatedVirtualMachineTierLowPriorityVirtualMachines.yaml
@@ -0,0 +1,17 @@
+name: wafsg-DedicatedVirtualMachineTierLowPriorityVirtualMachines
+title: 'Use the Dedicated virtual machine tier for compute clusters: Use the Dedicated
+ virtual machine tier for compute clusters for batch inferencing to ensure your batch
+ job isn''t preempted.'
+description: Low-priority virtual machines come at a reduced price but are preemptible.
+ Clusters that use the Dedicated virtual machine tier aren't preempted.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 68b3ba0d-ab8c-44b9-b840-601535753fcc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MachineLearningWorkloadsDifferentGeographicalAreas.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MachineLearningWorkloadsDifferentGeographicalAreas.yaml
new file mode 100644
index 000000000..f5f6f8aba
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MachineLearningWorkloadsDifferentGeographicalAreas.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MachineLearningWorkloadsDifferentGeographicalAreas
+title: 'Multi-region model deployment: For enhanced reliability and availability,
+ consider a multi-region deployment environment when possible.'
+description: A multi-region deployment ensures that your Machine Learning workloads
+ continue to run even if one region experiences an outage. Multi-region deployment
+ improves load distribution across regions, potentially enhancing performance for
+ users located in different geographical areas. For more information, see Failover
+ for business continuity and disaster recovery.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: c953c774-517c-48ce-82cb-105448b8a647
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MachineLearningWorkspacesExploratoryWork.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MachineLearningWorkspacesExploratoryWork.yaml
new file mode 100644
index 000000000..1dff1058e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MachineLearningWorkspacesExploratoryWork.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningWorkspacesExploratoryWork
+title: 'Resiliency: Segregate Machine Learning workspaces used for exploratory work
+ from those used for production.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 3994dafd-ee4c-4768-8c9f-a3b8ff74b1ba
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MultiRegionDeploymentTopologyDatacenterFailure.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MultiRegionDeploymentTopologyDatacenterFailure.yaml
new file mode 100644
index 000000000..b82eef80f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-MultiRegionDeploymentTopologyDatacenterFailure.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MultiRegionDeploymentTopologyDatacenterFailure
+title: 'Resiliency: Deploy models to environments that support availability zones,
+ such as AKS. By ensuring deployments are distributed across availability zones,
+ you''re ensuring a deployment is available even in the event of a datacenter failure.
+ For enhanced reliability and availability, consider a multi-region deployment topology.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 0d13edb5-8966-463a-868e-c3ba9d94e644
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-OnlineEndpointsReleaseStrategy.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-OnlineEndpointsReleaseStrategy.yaml
new file mode 100644
index 000000000..121ccb339
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-OnlineEndpointsReleaseStrategy.yaml
@@ -0,0 +1,17 @@
+name: wafsg-OnlineEndpointsReleaseStrategy
+title: 'Resiliency: When using managed online endpoints for inferencing, use a release
+ strategy such as blue-green deployments to minimize downtime and reduce the risk
+ associated with deploying new versions.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: a8c2bbfa-d47f-44bd-ad33-4c635773259e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-SelfHealingCapabilitiesCheckpointingFeatures.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-SelfHealingCapabilitiesCheckpointingFeatures.yaml
new file mode 100644
index 000000000..b6cbbb6f6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-SelfHealingCapabilitiesCheckpointingFeatures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SelfHealingCapabilitiesCheckpointingFeatures
+title: 'Recovery: Ensure you have self-healing capabilities, such as checkpointing
+ features supported by Machine Learning, when training large models.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 45f7fa49-0339-464b-94cb-b20ec1700e14
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-SufficientComputeResourcePlanning.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-SufficientComputeResourcePlanning.yaml
new file mode 100644
index 000000000..bd36abbb1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-SufficientComputeResourcePlanning.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SufficientComputeResourcePlanning
+title: 'Resiliency: Ensure you have sufficient compute for both training and inferencing.
+ Through resource planning, make sure your compute SKU and scale settings meet the
+ requirements of your workload.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 9a42f7b9-41db-4c47-854d-90d08c4cbe22
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-TensorflowEstimatorClassModelTrainingResiliency.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-TensorflowEstimatorClassModelTrainingResiliency.yaml
new file mode 100644
index 000000000..849b72b2c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Reliability/wafsg-TensorflowEstimatorClassModelTrainingResiliency.yaml
@@ -0,0 +1,19 @@
+name: wafsg-TensorflowEstimatorClassModelTrainingResiliency
+title: 'Model training resiliency: Use checkpointing features supported by Machine
+ Learning including Azure Container for PyTorch, the TensorFlow Estimator class,
+ or the Run object and the FileDataset class that support model checkpointing.'
+description: Model checkpointing periodically saves the state of your machine learning
+ model during training, so that it can be restored in case of interruption, failure,
+ or termination. For more information, see Boost checkpoint speed and reduce cost
+ with Nebula.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 176382f6-20de-404a-a6c1-1cb00618b101
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ApprovedRegistriesModelRegistry.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ApprovedRegistriesModelRegistry.yaml
new file mode 100644
index 000000000..aec8b5837
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ApprovedRegistriesModelRegistry.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ApprovedRegistriesModelRegistry
+title: 'Integrity: Regulate access to foundational models. Ensure only approved registries
+ have access to models in the model registry.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: ad0a3245-9a51-46d2-81e0-1fa77b288902
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-IntegrityTrust.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-IntegrityTrust.yaml
new file mode 100644
index 000000000..b71fee263
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-IntegrityTrust.yaml
@@ -0,0 +1,16 @@
+name: wafsg-IntegrityTrust
+title: 'Integrity: Establish trust and verified access by implementing encryption
+ for data at rest and data in transit.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 99910102-9fb9-4526-ad60-f0ef309b0230
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-LatestOperatingSystemImageLatestSecurityPatches.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-LatestOperatingSystemImageLatestSecurityPatches.yaml
new file mode 100644
index 000000000..acf7e41af
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-LatestOperatingSystemImageLatestSecurityPatches.yaml
@@ -0,0 +1,16 @@
+name: wafsg-LatestOperatingSystemImageLatestSecurityPatches
+title: 'Get the latest operating system image: Recreate compute instances to get the
+ latest operating system image.'
+description: Using the latest images ensures you're maintaining a consistent, stable,
+ and secure environment, including ensuring you have the latest security patches.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 97fb061c-e8f2-49ae-9932-bc3b16cfd9e5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeClusterPublicSecureShell.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeClusterPublicSecureShell.yaml
new file mode 100644
index 000000000..ff7f9a6ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeClusterPublicSecureShell.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MachineLearningComputeClusterPublicSecureShell
+title: 'Disable the public SSH port: Ensure the public Secure Shell (SSH) port is
+ closed on the Machine Learning compute cluster by setting `remoteLoginPortPublicAccess`
+ to `Disabled`. Apply a similar configuration if you use a different compute.'
+description: Disabling SSH access helps prevent unauthorized individuals from gaining
+ access and potentially causing harm to your system and protects you against brute
+ force attacks.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 10b9366c-cd35-439f-ac46-68b330714d4d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeContainerRegistries.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeContainerRegistries.yaml
new file mode 100644
index 000000000..48212df30
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeContainerRegistries.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningComputeContainerRegistries
+title: 'Integrity: Regulate access to approved container registries. Ensure Machine
+ Learning compute can only access approved registries.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 20487ff0-e5c9-436d-939c-35c856dd64aa
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeEnvironmentsRequiringCodeSigning.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeEnvironmentsRequiringCodeSigning.yaml
new file mode 100644
index 000000000..02044a34f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeEnvironmentsRequiringCodeSigning.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MachineLearningComputeEnvironmentsRequiringCodeSigning
+title: 'Integrity: Require code used for training in Machine Learning compute environments
+ to be signed. Requiring code signing ensures that the code running is from a trusted
+ source and hasn''t been tampered with.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 69440a0f-3fab-4ea2-95b1-ba0ec1c637fc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeLocalAuthentication.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeLocalAuthentication.yaml
new file mode 100644
index 000000000..41817137c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputeLocalAuthentication.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MachineLearningComputeLocalAuthentication
+title: 'Disable local authentication: Disable local authentication for Machine Learning
+ compute clusters and instances.'
+description: Disabling local authentication increases the security of your Machine
+ Learning compute and provides centralized control and management of identities and
+ resource credentials.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: f4b8cd6c-b939-4cd6-a88f-cb56c5f1958f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputePythonPackages.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputePythonPackages.yaml
new file mode 100644
index 000000000..bf17b27d4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningComputePythonPackages.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningComputePythonPackages
+title: 'Integrity: Regulate the Python packages that can be run on Machine Learning
+ compute. Regulating the Python packages ensures only trusted packages are run.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: a6718d1d-a5e1-4064-a501-7068066d74ba
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningCustomerManagedKeys.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningCustomerManagedKeys.yaml
new file mode 100644
index 000000000..186ccf8a3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningCustomerManagedKeys.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MachineLearningCustomerManagedKeys
+title: 'Encrypt data at rest: Consider using customer-managed keys with Machine Learning.'
+description: Encrypting data at rest enhances data security by ensuring that sensitive
+ data is encrypted by using keys directly managed by you. If you have a regulatory
+ requirement to manage your own encryption keys, use this feature to comply with
+ that requirement.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: bf8d8030-a273-4136-b91b-3e926b3265b1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningNetworkIsolationMachineLearningWorkspace.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningNetworkIsolationMachineLearningWorkspace.yaml
new file mode 100644
index 000000000..82a0f4067
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningNetworkIsolationMachineLearningWorkspace.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MachineLearningNetworkIsolationMachineLearningWorkspace
+title: 'Machine Learning network isolation: Configure a private endpoint for your
+ Machine Learning workspace and connect to the workspace over that private endpoint.'
+description: Machine Learning network isolation enhances security by ensuring that
+ access to your workspace is secure and controlled. With a private endpoint configured
+ for your workspace, you can then limit access to your workspace to only occur over
+ the private IP addresses.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: a4cde3d0-7ea2-40b0-b2a8-b047c132dab2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningServiceAzureSecurityBaseline.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningServiceAzureSecurityBaseline.yaml
new file mode 100644
index 000000000..259f04464
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningServiceAzureSecurityBaseline.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MachineLearningServiceAzureSecurityBaseline
+title: 'Security baseline: To enhance the security and compliance of your Machine
+ Learning Service, apply the Azure security baseline for Machine Learning.'
+description: The security baseline provides tailored guidance on crucial security
+ aspects such as network security, identity management, data protection, and privileged
+ access. For optimal security, use Microsoft Defender for Cloud to monitor these
+ aspects.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 255aca7d-7c4e-4b83-a0d8-aee85f7c2695
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceAttackSurface.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceAttackSurface.yaml
new file mode 100644
index 000000000..f1a699089
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceAttackSurface.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningWorkspaceAttackSurface
+title: 'Availability: Reduce the attack surface of the Machine Learning workspace
+ by restricting access to the workspace to resources within the virtual network.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 53cd2461-3b8d-47ca-ab08-a9b4491d71ae
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceLeastPrivilegePrinciple.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceLeastPrivilegePrinciple.yaml
new file mode 100644
index 000000000..13847daa4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceLeastPrivilegePrinciple.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MachineLearningWorkspaceLeastPrivilegePrinciple
+title: 'Integrity: Implement access controls that authenticate and authorize the Machine
+ Learning workspace for external resources based on the least privilege principle.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: dad6ac87-fd6d-44a4-9882-6d51b37bc564
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceOtherExternalResources.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceOtherExternalResources.yaml
new file mode 100644
index 000000000..20ae78ecd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceOtherExternalResources.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MachineLearningWorkspaceOtherExternalResources
+title: 'Confidentiality: Guard against data exfiltration from the Machine Learning
+ workspace by implementing network isolation. Ensure access to all external resources
+ is explicitly approved and access to all other external resources isn''t permitted.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: bad5ff5c-bdeb-4648-b667-1ea0a76266dc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceQualifiedDomainNames.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceQualifiedDomainNames.yaml
new file mode 100644
index 000000000..21aeb20e1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-MachineLearningWorkspaceQualifiedDomainNames.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MachineLearningWorkspaceQualifiedDomainNames
+title: 'Allow only approved outbound access: Configure the outbound mode on the Machine
+ Learning workspace managed outbound access to `Allow only approved outbound` to
+ minimize the risk of data exfiltration. Configure private endpoints, service tags,
+ or fully qualified domain names (FQDNs) for resources that you need to access.'
+description: "This configuration minimizes the risk of data exfiltration, improving\
+ \ data security. With this configuration enabled, a malicious actor who gains access\
+ \ to your system can\u2019t send your data to an unapproved external destination."
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 6b50845b-0ab2-416a-bbd9-2b4295f8ffcc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ManagedIdentityManagedIdentities.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ManagedIdentityManagedIdentities.yaml
new file mode 100644
index 000000000..5a9261320
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ManagedIdentityManagedIdentities.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ManagedIdentityManagedIdentities
+title: 'Managed identity: Use managed identities for authentication between Machine
+ Learning and other services.'
+description: Managed identities improve security by eliminating the need to store
+ credentials and manually manage and rotate service principals.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 75bc1a96-b2a0-449e-b0e5-93c8a658a39d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ManagedVirtualNetworkIsolationNetworkTopologyRecommendations.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ManagedVirtualNetworkIsolationNetworkTopologyRecommendations.yaml
new file mode 100644
index 000000000..c1ac73baa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-ManagedVirtualNetworkIsolationNetworkTopologyRecommendations.yaml
@@ -0,0 +1,24 @@
+name: wafsg-ManagedVirtualNetworkIsolationNetworkTopologyRecommendations
+title: 'Managed virtual network isolation: Configure managed virtual network isolation
+ for Machine Learning. When you enable managed virtual network isolation, a managed
+ virtual network is created for the workspace. Managed compute resources you create
+ for the workspace automatically use this managed virtual network. If you can''t
+ implement managed virtual network isolation, then you must follow the network topology
+ recommendations to separate compute into a dedicated subnet away from the rest of
+ the resources in the solution, including the private endpoints for workspace resources.'
+description: Managed virtual network isolation enhances security by isolating your
+ workspace from other networks, reducing the risk of unauthorized access. In a scenario
+ in which a breach occurs in another network within your organization, the isolated
+ network of your Machine Learning workspace remains unaffected, protecting your machine
+ learning workloads.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: afb9783e-67e0-4aca-9f01-0299630c34f0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-OpenSourceFoundationalModelsModelCatalogDeployments.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-OpenSourceFoundationalModelsModelCatalogDeployments.yaml
new file mode 100644
index 000000000..34079081b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-OpenSourceFoundationalModelsModelCatalogDeployments.yaml
@@ -0,0 +1,17 @@
+name: wafsg-OpenSourceFoundationalModelsModelCatalogDeployments
+title: 'Restrict model catalog deployments: Restrict model deployments to specific
+ registries.'
+description: Restricting the deployments from the model catalog to specific registries
+ ensures you only deploy models to approved registries. This approach helps regulate
+ access to the open-source foundational models.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: ce858034-a1e7-475c-82df-73878cfb2b42
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-PrivateIpAddressesVirtualNetworkIsolation.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-PrivateIpAddressesVirtualNetworkIsolation.yaml
new file mode 100644
index 000000000..494fa7783
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-PrivateIpAddressesVirtualNetworkIsolation.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PrivateIpAddressesVirtualNetworkIsolation
+title: 'Virtual network isolation for dependent services: Configure dependent services,
+ such as Storage, Key Vault, and Container Registry with private endpoints and disable
+ public access.'
+description: Network isolation bolsters security by restricting access to Azure platform
+ as a service (PaaS) solutions to private IP addresses only.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: f2bbde49-82c0-4b92-b593-5b66537909de
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-PublicIpAddressesMachineLearningCompute.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-PublicIpAddressesMachineLearningCompute.yaml
new file mode 100644
index 000000000..4cf5799a2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-PublicIpAddressesMachineLearningCompute.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PublicIpAddressesMachineLearningCompute
+title: 'Don''t provision public IP addresses for Machine Learning compute: Set enableNodePublicIp
+ to `false` when provisioning Machine Learning compute clusters or compute instances.
+ Apply a similar configuration if you use a different compute.'
+description: Refrain from provisioning public IP addresses to enhance security by
+ limiting the potential for unauthorized access to your compute instance or clusters.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: aa25efe6-19ad-455e-8bae-886c75a8092b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-RoleBasedAccessControlMachineLearningWorkspace.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-RoleBasedAccessControlMachineLearningWorkspace.yaml
new file mode 100644
index 000000000..defdf6add
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-RoleBasedAccessControlMachineLearningWorkspace.yaml
@@ -0,0 +1,18 @@
+name: wafsg-RoleBasedAccessControlMachineLearningWorkspace
+title: 'Confidentiality: Adhere to the principle of least privilege for role-based
+ access control (RBAC) to the Machine Learning workspace and related resources, such
+ as the workspace storage account, to ensure individuals have only the necessary
+ permissions for their role, thereby minimizing potential security risks.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 3fff9526-ef3a-487b-b89e-cb04d344c691
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-SpecificAzureStorageAccountsServiceEndpointPolicy.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-SpecificAzureStorageAccountsServiceEndpointPolicy.yaml
new file mode 100644
index 000000000..97076deb2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-SpecificAzureStorageAccountsServiceEndpointPolicy.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SpecificAzureStorageAccountsServiceEndpointPolicy
+title: 'Minimize the risk of data exfiltration: Implement data exfiltration prevention.
+ For example, create a service endpoint policy to filter egress virtual network traffic
+ and permit data exfiltration only to specific Azure Storage accounts.'
+description: Minimize the risk of data exfiltration by limiting inbound and outbound
+ requirements.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 5842dc88-8f4b-4f34-9cba-9a3ecbd083f7
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-SpecificUseCasesUseCaseSegregation.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-SpecificUseCasesUseCaseSegregation.yaml
new file mode 100644
index 000000000..850fe0363
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-SpecificUseCasesUseCaseSegregation.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SpecificUseCasesUseCaseSegregation
+title: 'Integrity: Implement use case segregation for Machine Learning workspaces
+ by setting up workspaces based on specific use cases or projects. This approach
+ adheres to the principle of least privilege by ensuring that workspaces are only
+ accessible to individuals that require access to data and experimentation assets
+ for the use case or project.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-machine-learning.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 18119160-8531-45fb-b169-3e5488b9bd30
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-StrictMachineLearningWorkspaceAccessControlsStrictWorkspaceAccessControls.yaml b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-StrictMachineLearningWorkspaceAccessControlsStrictWorkspaceAccessControls.yaml
new file mode 100644
index 000000000..a293d6e0e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftMachineLearningServices-workspaces/Security/wafsg-StrictMachineLearningWorkspaceAccessControlsStrictWorkspaceAccessControls.yaml
@@ -0,0 +1,19 @@
+name: wafsg-StrictMachineLearningWorkspaceAccessControlsStrictWorkspaceAccessControls
+title: 'Strict Machine Learning workspace access controls: Use Microsoft Entra ID
+ groups to manage workspace access and adhere to the principle of least privilege
+ for RBAC.'
+description: Strict workspace access controls enhance security by ensuring that individuals
+ have only the necessary permissions for their role. A data scientist, for instance,
+ might have access to run experiments but not to modify security settings, minimizing
+ potential security risks.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.machinelearningservices/workspaces
+waf: Security
+severity: 1
+labels:
+ guid: 07d3c478-039d-4654-9e75-44712f822a98
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesAvailabilityZoneAzVolumePlacementFeature.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesAvailabilityZoneAzVolumePlacementFeature.yaml
new file mode 100644
index 000000000..3598e3c1e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesAvailabilityZoneAzVolumePlacementFeature.yaml
@@ -0,0 +1,19 @@
+name: aprl-AzureNetappFilesAvailabilityZoneAzVolumePlacementFeature
+title: Deploy ANF volumes in the same availability zone with Azure compute and other
+ services
+description: |-
+ Azure NetApp Files' availability zone (AZ) volume placement feature lets you deploy volumes in the same AZ with Azure compute and other services to have within AZ latency and share the same AZ failure domain.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: 8bb690e8-64d5-4838-8703-9ee3dbac688f
+ area: Other Best Practices
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesAzurePolicyIntegration.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesAzurePolicyIntegration.yaml
new file mode 100644
index 000000000..77134f394
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesAzurePolicyIntegration.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureNetappFilesAzurePolicyIntegration
+title: Enforce standards and assess compliance in Azure NetApp Files with Azure policy
+description: |-
+ Azure NetApp Files supports Azure policy integration using either built-in policy definitions or by creating custom ones to maintain organizational standards and compliance.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 1
+labels:
+ guid: 687ae58f-517f-ca43-90fe-922497e61283
+ area: Governance
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesDataProtection.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesDataProtection.yaml
new file mode 100644
index 000000000..524b0e10c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesDataProtection.yaml
@@ -0,0 +1,23 @@
+name: aprl-AzureNetappFilesDataProtection
+title: Enable backup for data protection in Azure NetApp Files
+description: |-
+ Azure NetApp Files offers a fully managed backup solution enhancing long-term recovery, archiving, and compliance.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: b2fb3e60-97ec-e34d-af29-b16a0d61c2ac
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // This Resource Graph query will return all Azure NetApp Files volumes without a backup policy defined.
+ resources
+ | where type == "microsoft.netapp/netappaccounts/capacitypools/volumes"
+ | where properties.dataProtection.backup.backupPolicyId == ""
+ | project recommendationId = "b2fb3e60-97ec-e34d-af29-b16a0d61c2ac", name, id, tags
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesMetricsNetappAccounts.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesMetricsNetappAccounts.yaml
new file mode 100644
index 000000000..ccbce7a23
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesMetricsNetappAccounts.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureNetappFilesMetricsNetappAccounts
+title: Monitor Azure NetApp Files metrics to better understand usage pattern and performance
+description: |-
+ Azure NetApp Files offers metrics like allocated storage, actual usage, volume IOPS, and latency, enabling a better understanding of usage patterns and volume performance for NetApp accounts.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 1
+labels:
+ guid: 2f579fc9-e599-0d44-8b97-254f50ae04d8
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesMultipleAvailabilityZones.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesMultipleAvailabilityZones.yaml
new file mode 100644
index 000000000..e46ef885e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesMultipleAvailabilityZones.yaml
@@ -0,0 +1,23 @@
+name: aprl-AzureNetappFilesMultipleAvailabilityZones
+title: Use availability zones for high availability in Azure NetApp Files
+description: |-
+ Availability zones are distinct locations within an Azure region to withstand local failures. Deploy your workload in multiple availability zones and use application-based replication or Azure NetApp Files cross-zone replication to achieve high availability. Note that failover is a manual process.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: 47d100a5-7f85-5742-967a-67eb5081240a
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This Resource Graph query will return all Azure NetApp Files volumes without an availability zone defined.
+ Resources
+ | where type =~ "Microsoft.NetApp/netAppAccounts/capacityPools/volumes"
+ | where array_length(zones) == 0 or isnull(zones)
+ | project recommendationId = "47d100a5-7f85-5742-967a-67eb5081240a", name, id, tags
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesReplicationAzureNetappFilesVolumes.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesReplicationAzureNetappFilesVolumes.yaml
new file mode 100644
index 000000000..67b89c232
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesReplicationAzureNetappFilesVolumes.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureNetappFilesReplicationAzureNetappFilesVolumes
+title: Enable Cross-region replication of Azure NetApp Files volumes
+description: |-
+ Azure NetApp Files replication offers data protection by allowing asynchronous cross-region volume replication for application failover in case of regional outages. Volumes can be replicated across regions, not concurrently with cross-zone replication. Note that failover is a manual process.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: e30317d2-c502-4dfe-a2d3-0a737cc79545
+ area: Disaster Recovery
+links: []
+queries:
+ arg: "// Azure Resource Graph Query\n// This Resource Graph query will return all\
+ \ Azure NetApp Files volumes without cross-region replication.\nresources\n|\_\
+ where\_type\_==\_\"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n|\_\
+ extend\_remoteVolumeRegion\_=\_properties.dataProtection.replication.remoteVolumeRegion\n\
+ |\_extend\_volumeType\_=\_properties.volumeType\n|\_extend\_replicationType\_\
+ =\_iff((remoteVolumeRegion\_==\_location),\_\"CZR\",\_iff((remoteVolumeRegion\_\
+ ==\_\"\"),\"n/a\",\"CRR\"))\n| where replicationType != \"CRR\" and volumeType\
+ \ != \"DataProtection\"\n| project recommendationId = \"e30317d2-c502-4dfe-a2d3-0a737cc79545\"\
+ , name, id, tags\n"
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesSnapshotTechnologyAzureNetappFilesData.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesSnapshotTechnologyAzureNetappFilesData.yaml
new file mode 100644
index 000000000..39003bc59
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesSnapshotTechnologyAzureNetappFilesData.yaml
@@ -0,0 +1,21 @@
+name: aprl-AzureNetappFilesSnapshotTechnologyAzureNetappFilesData
+title: Use snapshots for data protection in Azure NetApp Files
+description: |-
+ Azure NetApp Files snapshot technology ensures stability, scalability, and swift data recoverability without affecting performance. It supports automatic snapshot creation via policies for Azure NetApp Files data.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: 72827434-c773-4345-9493-34848ddf5803
+ area: High Availability
+links: []
+queries:
+ arg: "// Azure Resource Graph Query\n// This Resource Graph query will return all\
+ \ Azure NetApp Files volumes without a snapshot policy defined.\nresources\n|\_\
+ where\_type\_==\_\"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n|\
+ \ where properties.dataProtection.snapshot.snapshotPolicyId == \"\"\n| project\
+ \ recommendationId = \"72827434-c773-4345-9493-34848ddf5803\", name, id, tags\n"
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesVolumesDifferentAvailabilityZones.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesVolumesDifferentAvailabilityZones.yaml
new file mode 100644
index 000000000..792c357b5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-AzureNetappFilesVolumesDifferentAvailabilityZones.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureNetappFilesVolumesDifferentAvailabilityZones
+title: Enable Cross-zone replication of Azure NetApp Files volumes
+description: |-
+ The cross-zone replication (CZR) feature enables asynchronous data replication between Azure NetApp Files volumes across different availability zones, ensuring data protection and critical application failover in case of zone-wide disasters. Note that failover is a manual process.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: e3d742e1-dacd-9b48-b6b1-510ec9f87c96
+ area: Disaster Recovery
+links: []
+queries:
+ arg: "// Azure Resource Graph Query\n// This Resource Graph query will return all\
+ \ Azure NetApp Files volumes without cross-zone replication.\nresources\n|\_where\_\
+ type\_==\_\"microsoft.netapp/netappaccounts/capacitypools/volumes\"\n|\_extend\_\
+ remoteVolumeRegion\_=\_properties.dataProtection.replication.remoteVolumeRegion\n\
+ |\_extend\_volumeType\_=\_properties.volumeType\n|\_extend\_replicationType\_\
+ =\_iff((remoteVolumeRegion\_==\_location),\_\"CZR\",\_iff((remoteVolumeRegion\_\
+ ==\_\"\"),\"n/a\",\"CRR\"))\n| where replicationType != \"CZR\" and volumeType\
+ \ != \"DataProtection\"\n| project recommendationId = \"e3d742e1-dacd-9b48-b6b1-510ec9f87c96\"\
+ , name, id, tags\n"
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-CapacityPoolAttributesAzureNetappFiles.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-CapacityPoolAttributesAzureNetappFiles.yaml
new file mode 100644
index 000000000..0665f8845
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-CapacityPoolAttributesAzureNetappFiles.yaml
@@ -0,0 +1,19 @@
+name: aprl-CapacityPoolAttributesAzureNetappFiles
+title: Use the correct service level and volume quota size for the expected performance
+ level
+description: |-
+ Service levels, part of capacity pool attributes, determine the maximum throughput per volume quota in Azure NetApp Files. It combines read and write speed, offering three levels: Standard (16 MiB/s per 1TiB), Premium (64 MiB/s per 1TiB), and Ultra (128 MiB/s per 1TiB) throughput.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 1
+labels:
+ guid: af426a99-62a6-6b4c-9662-42d220b413b8
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-SmbContinuousAvailabilitySmbTransparentFailover.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-SmbContinuousAvailabilitySmbTransparentFailover.yaml
new file mode 100644
index 000000000..7b8c8a79e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-SmbContinuousAvailabilitySmbTransparentFailover.yaml
@@ -0,0 +1,18 @@
+name: aprl-SmbContinuousAvailabilitySmbTransparentFailover
+title: Make use of SMB continuous availability for supported applications
+description: |-
+ Certain SMB applications need SMB Transparent Failover for maintenance without interrupting server connectivity. Azure NetApp Files provides this through SMB Continuous Availability for applications like Citrix App Layering, FSLogix user/profile containers, Microsoft SQL Server, MSIX app attach.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: d1e7ccc3-e6c1-40e9-a36e-fd134711c808
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-SpecificAzureVirtualNetworksAzureNetappFilesVolumes.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-SpecificAzureVirtualNetworksAzureNetappFilesVolumes.yaml
new file mode 100644
index 000000000..bc0a9b6e5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-SpecificAzureVirtualNetworksAzureNetappFilesVolumes.yaml
@@ -0,0 +1,18 @@
+name: aprl-SpecificAzureVirtualNetworksAzureNetappFilesVolumes
+title: Restrict default access to Azure NetApp Files volumes
+description: |-
+ Access to the delegated subnet should be limited to specific Azure Virtual Networks. SMB-enabled volumes' share permissions should move away from 'Everyone/Full control'. NFS-enabled volumes' access needs to be controlled via export policies and/or NFSv4.1 ACLs.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 1
+labels:
+ guid: cfa2244b-5436-47de-8287-b217875d3b0a
+ area: Security
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-StandardNetworkFeaturesAzureNetappFiles.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-StandardNetworkFeaturesAzureNetappFiles.yaml
new file mode 100644
index 000000000..ffdb9cdc6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-StandardNetworkFeaturesAzureNetappFiles.yaml
@@ -0,0 +1,23 @@
+name: aprl-StandardNetworkFeaturesAzureNetappFiles
+title: Use standard network features for production in Azure NetApp Files
+description: |-
+ Standard network feature in Azure NetApp Files enhances IP limits and VNet capabilities, including network security groups, user-defined routes on subnets, and diverse connectivity options.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 0
+labels:
+ guid: ab984130-c57b-6c4a-8d04-6723b4e1bdb6
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This Resource Graph query will return all Azure NetApp Files volumes without standard network features.
+ resources
+ | where type =~ "microsoft.netapp/netappaccounts/capacitypools/volumes"
+ | where properties.networkFeatures != "Standard"
+ | project recommendationId = "ab984130-c57b-6c4a-8d04-6723b4e1bdb6", name, id, tags
diff --git a/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-StorageServiceMaintenanceEventsOccasionalPlannedMaintenance.yaml b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-StorageServiceMaintenanceEventsOccasionalPlannedMaintenance.yaml
new file mode 100644
index 000000000..fe25404a6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetApp-netAppAccounts/aprl-StorageServiceMaintenanceEventsOccasionalPlannedMaintenance.yaml
@@ -0,0 +1,18 @@
+name: aprl-StorageServiceMaintenanceEventsOccasionalPlannedMaintenance
+title: Ensure application resilience for service maintenance events
+description: |-
+ Azure NetApp Files might undergo occasional planned maintenance such as platform updates or service and software upgrades. It's important to be aware of the application's resiliency settings to cope with these storage service maintenance events.
+source:
+ type: aprl
+ file: azure-resources/NetApp/netAppAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetApp/netAppAccounts
+severity: 1
+labels:
+ guid: 60f36f9b-fac9-4160-bbf5-57af04da4f53
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-AzureExpressrouteDirectAdminState.yaml b/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-AzureExpressrouteDirectAdminState.yaml
new file mode 100644
index 000000000..81b277c3e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-AzureExpressrouteDirectAdminState.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureExpressrouteDirectAdminState
+title: The Admin State of both Links of an ExpressRoute Direct should be in Enabled
+ state
+description: |-
+ In Azure ExpressRoute Direct, the "Admin State" indicates the administrative status of layer 1 links, showing if a link is enabled or disabled, effectively turning the physical port on or off.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRoutePorts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/ExpressRoutePorts
+severity: 0
+labels:
+ guid: 60077378-7cb1-4b35-89bb-393884d9921d
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Express Route Directs that do not have Admin State of both Links Enabled
+ resources
+ | where type == "microsoft.network/expressrouteports"
+ | where properties['links'][0]['properties']['adminState'] == "Disabled" or properties['links'][1]['properties']['adminState'] == "Disabled"
+ | project recommendationId = "60077378-7cb1-4b35-89bb-393884d9921d", name, id, tags, param1 = strcat("Link1AdminState: ", properties['links'][0]['properties']['adminState']), param2 = strcat("Link2AdminState: ", properties['links'][1]['properties']['adminState'])
diff --git a/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-AzureMonitorBaselineAlertsExpressroutePortLightLevels.yaml b/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-AzureMonitorBaselineAlertsExpressroutePortLightLevels.yaml
new file mode 100644
index 000000000..fff7aa7fa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-AzureMonitorBaselineAlertsExpressroutePortLightLevels.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureMonitorBaselineAlertsExpressroutePortLightLevels
+title: Configure monitoring and alerting for ExpressRoute Ports
+description: |-
+ Use Network Insights for monitoring ExpressRoute Port light levels, bits per second in/out, and line protocol. Set alerts based on Azure Monitor Baseline Alerts for light levels, bits per second in/out, and line protocol exceeding specific thresholds.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRoutePorts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRoutePorts
+severity: 0
+labels:
+ guid: 55815823-d588-4cb7-a5b8-ae581837356e
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-GbpsExpressrouteDirectResourceExpressrouteDirectPort.yaml b/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-GbpsExpressrouteDirectResourceExpressrouteDirectPort.yaml
new file mode 100644
index 000000000..6c4216bfa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-ExpressRoutePorts/aprl-GbpsExpressrouteDirectResourceExpressrouteDirectPort.yaml
@@ -0,0 +1,23 @@
+name: aprl-GbpsExpressrouteDirectResourceExpressrouteDirectPort
+title: Ensure you do not over-subscribe an ExpressRoute Direct
+description: |-
+ Provisioning ExpressRoute circuits on a 10-Gbps or 100-Gbps ExpressRoute Direct resource up to 20-Gbps or 200-Gbps is possible but not recommended for resiliency. If an ExpressRoute Direct port fails, and circuits are using full capacity, the remaining port won't handle the extra load.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRoutePorts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/ExpressRoutePorts
+severity: 0
+labels:
+ guid: 0bee356b-7348-4799-8cab-0c71ffe13018
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Express Route Directs that are over subscribed
+ resources
+ | where type == "microsoft.network/expressrouteports"
+ | where toint(properties['provisionedBandwidthInGbps']) > toint(properties['bandwidthInGbps'])
+ | project recommendationId = "0bee356b-7348-4799-8cab-0c71ffe13018", name, id, tags, param1 = strcat("provisionedBandwidthInGbps: ", properties['provisionedBandwidthInGbps']), param2 = strcat("bandwidthInGbps: ", properties['bandwidthInGbps'])
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallDeploymentsTestingEnvironments.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallDeploymentsTestingEnvironments.yaml
new file mode 100644
index 000000000..a3a98e8be
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallDeploymentsTestingEnvironments.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallDeploymentsTestingEnvironments
+title: Stop Azure Firewall deployments that don't need to run for 24x7.
+description: You might have development or testing environments that are used only
+ during business hours. For more information, see Deallocate and allocate Azure Firewall.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: e3cd59af-4664-4d35-b291-45076f5452bd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallManagerOneFirewallAssociation.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallManagerOneFirewallAssociation.yaml
new file mode 100644
index 000000000..0f77afab2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallManagerOneFirewallAssociation.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFirewallManagerOneFirewallAssociation
+title: Use Azure Firewall Manager and its Policies to reduce operational costs, increase
+ efficiency, and reduce management overhead.
+description: Review your Firewall Manager policies, associations, and inheritance
+ carefully. Policies are billed based on firewall associations. A policy with zero
+ or one firewall association is free of charge. A policy with multiple firewall associations
+ is billed at a fixed rate.For more information, see Pricing - Azure Firewall Manager.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: a8ac7739-8682-4369-84c6-e0fd8185f1a6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallSku.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallSku.yaml
new file mode 100644
index 000000000..4c7859442
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-AzureFirewallSku.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallSku
+title: Select the Azure Firewall SKU to deploy.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: e23cca89-b750-4a14-8187-038aa999ab81
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-CostEffectiveApproachThirdPartySolutions.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-CostEffectiveApproachThirdPartySolutions.yaml
new file mode 100644
index 000000000..e22d5445e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-CostEffectiveApproachThirdPartySolutions.yaml
@@ -0,0 +1,20 @@
+name: wafsg-CostEffectiveApproachThirdPartySolutions
+title: Review logging requirements.
+description: Azure Firewall has the ability to comprehensively log metadata of all
+ traffic it sees, to Log Analytics Workspaces, Storage or third party solutions through
+ Event Hubs. However, all logging solutions incur costs for data processing and storage.
+ At very large volumes these costs can be significant, a cost effective approach
+ and alternative to Log Analytics should be considered and cost estimated. Consider
+ whether it is required to log traffic metadata for all logging categories and modify
+ in Diagnostic Settings if needed.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: 9fba472e-101a-4d6c-b9e9-762ce0e6035d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-FirewallInstancesUsageCostEffectiveness.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-FirewallInstancesUsageCostEffectiveness.yaml
new file mode 100644
index 000000000..632675387
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-FirewallInstancesUsageCostEffectiveness.yaml
@@ -0,0 +1,15 @@
+name: wafsg-FirewallInstancesUsageCostEffectiveness
+title: Monitor and optimize firewall instances usage to determine cost-effectiveness.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: 5f8eaf16-cabf-4fc4-82f9-1b9069b3bac2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-FirewallUseWorkloads.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-FirewallUseWorkloads.yaml
new file mode 100644
index 000000000..dcedc4d57
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-FirewallUseWorkloads.yaml
@@ -0,0 +1,15 @@
+name: wafsg-FirewallUseWorkloads
+title: Determine where you can optimize firewall use across workloads.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: b68aec37-acbd-4101-be19-3e99e8d641f6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-LoggingRequirementsEstimate.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-LoggingRequirementsEstimate.yaml
new file mode 100644
index 000000000..1cabb9945
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-LoggingRequirementsEstimate.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LoggingRequirementsEstimate
+title: Review logging requirements, estimate cost and control over time.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: ed8185a5-8f3a-402b-bd40-a3db15b390fd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-ManySpokeVirtualNetworksVirtualWanSecureHub.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-ManySpokeVirtualNetworksVirtualWanSecureHub.yaml
new file mode 100644
index 000000000..365f88326
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-ManySpokeVirtualNetworksVirtualWanSecureHub.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ManySpokeVirtualNetworksVirtualWanSecureHub
+title: Share the same instance of Azure Firewall across multiple workloads and Azure
+ Virtual Networks.
+description: You can use a central instance of Azure Firewall in the hub virtual network
+ or Virtual WAN secure hub and share the same firewall across many spoke virtual
+ networks that are connected to the same hub from the same region. Ensure there's
+ no unexpected cross-region traffic as part of the hub-spoke topology.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: 0648162b-e60c-4625-811d-8e844e53d297
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-PermanentXAllocationInstances.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-PermanentXAllocationInstances.yaml
new file mode 100644
index 000000000..322ba40fe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-PermanentXAllocationInstances.yaml
@@ -0,0 +1,15 @@
+name: wafsg-PermanentXAllocationInstances
+title: Determine if some instances don't need permanent 24x7 allocation.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: c606fee7-9b75-4ce1-921f-aac5591768f8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-ProperAzureFirewallSkuRightAzureFirewallSku.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-ProperAzureFirewallSkuRightAzureFirewallSku.yaml
new file mode 100644
index 000000000..771d3ffc1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-ProperAzureFirewallSkuRightAzureFirewallSku.yaml
@@ -0,0 +1,21 @@
+name: wafsg-ProperAzureFirewallSkuRightAzureFirewallSku
+title: Deploy the proper Azure Firewall SKU.
+description: "Azure Firewall can be deployed in three different SKUs: Basic, Standard\
+ \ and Premium. Azure Firewall Premium is recommended to secure highly sensitive\
+ \ applications (such as payment processing). Azure Firewall Standard is recommended\
+ \ for customers looking for Layer 3\u2013Layer 7 firewall and needs autoscaling\
+ \ to handle peak traffic periods of up to 30 Gbps. Azure Firewall Basic is recommended\
+ \ for SMB customers with throughput needs of 250 Mbps. If required, downgrade or\
+ \ upgrade is possible between Standard and Premium as documented here. For more\
+ \ information, see Choose the right Azure Firewall SKU to meet your needs."
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: f91761cf-5135-4dc1-bebc-0f25ebd32c55
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-PublicIpAddressesNumber.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-PublicIpAddressesNumber.yaml
new file mode 100644
index 000000000..3f30dc935
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-PublicIpAddressesNumber.yaml
@@ -0,0 +1,16 @@
+name: wafsg-PublicIpAddressesNumber
+title: Review and optimize the number of public IP addresses required and Policies
+ used.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: c88ea77e-1e9c-4d30-8b5e-c5e35cd4d93f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-TopFlowsLogFatFlows.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-TopFlowsLogFatFlows.yaml
new file mode 100644
index 000000000..ab2ffe711
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-TopFlowsLogFatFlows.yaml
@@ -0,0 +1,18 @@
+name: wafsg-TopFlowsLogFatFlows
+title: Regularly review traffic processed by Azure Firewall and look for originating
+ workload optimizations
+description: Top Flows log (known in the industry as Fat Flows), shows the top connections
+ that are contributing to the highest throughput through the firewall. It is recommended
+ to regularly review traffic processed by the Azure Firewall and search for possible
+ optimizations to reduce the amount of traffic traversing the firewall.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: c6b65421-d9c6-46aa-85c5-9e891c888744
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-UnusedAzureFirewallDeploymentsAzureFirewallInstances.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-UnusedAzureFirewallDeploymentsAzureFirewallInstances.yaml
new file mode 100644
index 000000000..11d5673f9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-UnusedAzureFirewallDeploymentsAzureFirewallInstances.yaml
@@ -0,0 +1,22 @@
+name: wafsg-UnusedAzureFirewallDeploymentsAzureFirewallInstances
+title: Review under-utilized Azure Firewall instances. Identify and delete unused
+ Azure Firewall deployments.
+description: To identify unused Azure Firewall deployments, start by analyzing the
+ monitoring metrics and UDRs associated with subnets pointing to the firewall's private
+ IP. Combine that information with other validations, such as if your instance of
+ Azure Firewall has any rules (classic) for NAT, Network and Application, or even
+ if the DNS Proxy setting is configured to Disabled, and with internal documentation
+ about your environment and deployments. You can detect deployments that are cost-effective
+ over time. For more information about monitoring logs and metrics, see Monitor
+ Azure Firewall logs and metrics and SNAT port utilization.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: ef951ddc-d36a-4194-a039-48af1cd3b1dd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-UnusedPublicIpAddressesSnatPortUtilization.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-UnusedPublicIpAddressesSnatPortUtilization.yaml
new file mode 100644
index 000000000..6ff24e3d1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Cost/wafsg-UnusedPublicIpAddressesSnatPortUtilization.yaml
@@ -0,0 +1,18 @@
+name: wafsg-UnusedPublicIpAddressesSnatPortUtilization
+title: Delete unused public IP addresses.
+description: Validate whether all the associated public IP addresses are in use. If
+ they aren't in use, disassociate and delete them. Evaluate SNAT port utilization
+ before removing any IP addresses.You'll only use the number of public IPs your firewall
+ needs. For more information, see Monitor Azure Firewall logs and metrics and SNAT
+ port utilization.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Cost
+severity: 1
+labels:
+ guid: 01e92d97-de38-46fd-a4b3-a180301ada9b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-AzureFirewallAzureMonitor.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-AzureFirewallAzureMonitor.yaml
new file mode 100644
index 000000000..e7541136e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-AzureFirewallAzureMonitor.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureFirewallAzureMonitor
+title: Integrate Azure Firewall with Azure Monitor and enable diagnostic logging to
+ store and analyze firewall logs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 2
+labels:
+ guid: 1dc04554-dece-4ffb-a49e-5c683e09f8da
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/firewall-diagnostics
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-AzureFirewallClassicRulesFirewallPolicy.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-AzureFirewallClassicRulesFirewallPolicy.yaml
new file mode 100644
index 000000000..b8ab4998f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-AzureFirewallClassicRulesFirewallPolicy.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureFirewallClassicRulesFirewallPolicy
+title: Migrate from Azure Firewall Classic rules (if exist) to Firewall Policy.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+labels:
+ guid: e960fc6b-4ab2-4db6-9609-3745135f9ffa
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall-manager/migrate-to-policy
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
+filepath: C:\Users\jomore\Repos\review-checklists\v2\recos\Services\MicrosoftNetwork-azureFirewalls\Operations\revcl-AzureFirewallClassicRulesFirewallPolicy.yaml
+severity: 1
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-FirewallRulesBackups.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-FirewallRulesBackups.yaml
new file mode 100644
index 000000000..db648f378
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-FirewallRulesBackups.yaml
@@ -0,0 +1,15 @@
+name: revcl-FirewallRulesBackups
+title: Implement backups for your firewall rules
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 2
+labels:
+ guid: 64e7000e-3c06-485e-b455-ced7f454cba3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-ResourceSpecificDestinationTableAzureFirewallDeployments.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-ResourceSpecificDestinationTableAzureFirewallDeployments.yaml
new file mode 100644
index 000000000..800cc64b5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/revcl-ResourceSpecificDestinationTableAzureFirewallDeployments.yaml
@@ -0,0 +1,18 @@
+name: revcl-ResourceSpecificDestinationTableAzureFirewallDeployments
+title: Add diagnostic settings to save logs, using the Resource Specific destination
+ table, for all Azure Firewall deployments.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 715d833d-4708-4527-90ac-1b142c7045ba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/firewall-structured-logs
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzfwLatencyProbeMetricsAzureFirewallCapacity.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzfwLatencyProbeMetricsAzureFirewallCapacity.yaml
new file mode 100644
index 000000000..1ee6f3056
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzfwLatencyProbeMetricsAzureFirewallCapacity.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzfwLatencyProbeMetricsAzureFirewallCapacity
+title: Monitor key metrics and create alerts for indicators of the utilization of
+ Azure Firewall capacity.
+description: Alerts should be created to monitor at least Throughput, Firewall health
+ state, SNAT port utilization and AZFW Latency Probe metrics.For information about
+ monitoring logs and metrics, see Monitor Azure Firewall logs and metrics.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 912d5cba-1c0b-4a40-8ec0-81e5492c3023
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallConfigurationInventory.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallConfigurationInventory.yaml
new file mode 100644
index 000000000..232bf5afa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallConfigurationInventory.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallConfigurationInventory
+title: Maintain inventory and backup of Azure Firewall configuration and Policies.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 3309c420-34ee-475f-983a-d258c92d73d1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallMicrosoftDefender.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallMicrosoftDefender.yaml
new file mode 100644
index 000000000..1a2a7a436
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallMicrosoftDefender.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallMicrosoftDefender
+title: Integrate Azure Firewall with Microsoft Defender for Cloud and Microsoft Sentinel.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 9b0b7514-18c1-4687-8a29-66e9e15c570d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallPortalExperienceAzureFirewallMonitoringWorkbook.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallPortalExperienceAzureFirewallMonitoringWorkbook.yaml
new file mode 100644
index 000000000..4e475f4c4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-AzureFirewallPortalExperienceAzureFirewallMonitoringWorkbook.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFirewallPortalExperienceAzureFirewallMonitoringWorkbook
+title: Use the built-in Azure Firewall Monitoring Workbook.
+description: Azure Firewall portal experience now includes a new workbook under the
+ Monitoring section UI, a separate installation is no more required. With the Azure
+ Firewall Workbook, you can extract valuable insights from Azure Firewall events,
+ delve into your application and network rules, and examine statistics regarding
+ firewall activities across URLs, ports, and addresses.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: c108c3a4-1cb0-4b5f-84dc-060e313574c4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-ExternalLogicAppAzurePolicyArtifacts.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-ExternalLogicAppAzurePolicyArtifacts.yaml
new file mode 100644
index 000000000..731f0ebf2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-ExternalLogicAppAzurePolicyArtifacts.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExternalLogicAppAzurePolicyArtifacts
+title: Maintain regular backups of Azure Policy artifacts.
+description: If Infrastructure-as-Code (IaC) approach is used to maintain Azure Firewall
+ and all dependencies then backup and versioning of Azure Firewall Policies should
+ be already in place. If not, a companion mechanism based on external Logic App can
+ be deployed to automate and provide an effective solution.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 1fe21c62-7800-4bd8-b1ed-b13c020a0759
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance.yaml
new file mode 100644
index 000000000..67eb8b6d4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance
+title: Regularly review Policy Analytics dashboard to identify potential issues.
+description: Policy Analytics is a new feature that provides insights into the impact
+ of your Azure Firewall policies. It helps you identify potential issues (hitting
+ policy limits, low utilization rules, redundant rules, rules too generic, IP Groups
+ usage recommendation) in your policies and provides recommendations to improve your
+ security posture and rule processing performance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 8ad68872-c312-4c23-9f23-be376493dfdb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-KustoQueryLanguageQueriesAzureFirewallLogs.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-KustoQueryLanguageQueriesAzureFirewallLogs.yaml
new file mode 100644
index 000000000..29fcc3670
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-KustoQueryLanguageQueriesAzureFirewallLogs.yaml
@@ -0,0 +1,17 @@
+name: wafsg-KustoQueryLanguageQueriesAzureFirewallLogs
+title: Become familiar with KQL (Kusto Query Language) queries to allow quick analysis
+ and troubleshooting using Azure Firewall logs.
+description: Sample queries are provided for Azure Firewall. Those will enable you
+ to quickly identify what's happening inside your firewall and check to see which
+ rule was triggered, or which rule is allowing/blocking a request.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: bc0c5e49-a3d6-4d3d-b95d-aa96ce824f4b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-LeverageAzureFirewallMonitoringWorkbook.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-LeverageAzureFirewallMonitoringWorkbook.yaml
new file mode 100644
index 000000000..978d8d69f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-LeverageAzureFirewallMonitoringWorkbook.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LeverageAzureFirewallMonitoringWorkbook
+title: Leverage Azure Firewall Monitoring workbook.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 35c3a850-dd12-46fc-8748-d8e549a9b70e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-LeverageDiagnosticLogsFirewallMonitoring.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-LeverageDiagnosticLogsFirewallMonitoring.yaml
new file mode 100644
index 000000000..e161aac22
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-LeverageDiagnosticLogsFirewallMonitoring.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LeverageDiagnosticLogsFirewallMonitoring
+title: Leverage diagnostic logs for firewall monitoring and troubleshooting.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 32f7e307-f271-46d7-a0ea-e32ce5cf5f9a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-ManyMonitoringToolsAzureFirewallResources.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-ManyMonitoringToolsAzureFirewallResources.yaml
new file mode 100644
index 000000000..2ba19a724
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-ManyMonitoringToolsAzureFirewallResources.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ManyMonitoringToolsAzureFirewallResources
+title: Enable Diagnostic Logs for Azure Firewall.
+description: Diagnostic Logs is a key component for many monitoring tools and strategies
+ for Azure Firewall and should be enabled. You can monitor Azure Firewall by using
+ firewall logs or workbooks. You can also use activity logs for auditing operations
+ on Azure Firewall resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: afcc1df9-da67-4db4-a2d4-bad67422d890
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-MicrosoftSentinelSolutionsAzureNetworkSecurity.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-MicrosoftSentinelSolutionsAzureNetworkSecurity.yaml
new file mode 100644
index 000000000..a52dd8d19
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-MicrosoftSentinelSolutionsAzureNetworkSecurity.yaml
@@ -0,0 +1,20 @@
+name: wafsg-MicrosoftSentinelSolutionsAzureNetworkSecurity
+title: Configure Azure Firewall integration with Microsoft Defender for Cloud and
+ Microsoft Sentinel.
+description: If these tools are available in the environment, it is recommended to
+ leverage integration with Microsoft Defender for Cloud and Microsoft Sentinel solutions.
+ With Microsoft Defender for Cloud integration, you can visualize the all-up status
+ of network infrastructure and network security in one place, including Azure Network
+ Security across all VNets and Virtual Hubs spread across different regions in Azure.
+ Integration with Microsoft Sentinel provides threat detection and prevention capabilities.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: e900c615-4865-4658-8cba-0d0f5fb6d169
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-NetworkSecurityGroupsIntraVnetTrafficControl.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-NetworkSecurityGroupsIntraVnetTrafficControl.yaml
new file mode 100644
index 000000000..1098aba0d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-NetworkSecurityGroupsIntraVnetTrafficControl.yaml
@@ -0,0 +1,17 @@
+name: wafsg-NetworkSecurityGroupsIntraVnetTrafficControl
+title: Do not use Azure Firewall for intra-VNet traffic control.
+description: Azure Firewall should be used to control traffic across VNets, between
+ VNets and on-premises networks, outbound traffic to the Internet and incoming non-HTTP/s
+ traffic. For intra-VNet traffic control, it is recommended to use Network Security
+ Groups.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 0405f896-a746-4bd5-831e-9914e4cb840f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-PolicyInsightsAnalytics.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-PolicyInsightsAnalytics.yaml
new file mode 100644
index 000000000..e8940551e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-PolicyInsightsAnalytics.yaml
@@ -0,0 +1,15 @@
+name: wafsg-PolicyInsightsAnalytics
+title: Regularly review your Policy insights and analytics.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: bc079e69-8f2f-43e6-94a7-61a05d1dd447
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-PreviousDiagnosticLogsFormatStructuredFirewallLogsFormat.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-PreviousDiagnosticLogsFormatStructuredFirewallLogsFormat.yaml
new file mode 100644
index 000000000..a29222660
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Operations/wafsg-PreviousDiagnosticLogsFormatStructuredFirewallLogsFormat.yaml
@@ -0,0 +1,19 @@
+name: wafsg-PreviousDiagnosticLogsFormatStructuredFirewallLogsFormat
+title: Use Structured Firewall Logs format.
+description: Structured Firewall Logs are a type of log data that are organized in
+ a specific new format. They use a predefined schema to structure log data in a way
+ that makes it easy to search, filter, and analyze. The latest monitoring tools are
+ based on this type of logs hence it is often a pre-requisite. Use the previous Diagnostic
+ Logs format only if there is an existing tool with a pre-requisite on that. Do not
+ enable both logging formats at the same time.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 4f3d5677-801a-48f2-834c-4a2326a6a1c8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-AzureAppGatewaysTlsInspection.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-AzureAppGatewaysTlsInspection.yaml
new file mode 100644
index 000000000..ef616d420
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-AzureAppGatewaysTlsInspection.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureAppGatewaysTlsInspection
+title: As part of your TLS inspection, plan for receiving traffic from Azure App Gateways
+ for inspection.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 6eff7e6c-6c4a-43d7-be3f-6641c2cb3d4a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/example-scenario/gateway/application-gateway-before-azure-firewall
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-IpTableRulesIpGroups.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-IpTableRulesIpGroups.yaml
new file mode 100644
index 000000000..27c542ffb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-IpTableRulesIpGroups.yaml
@@ -0,0 +1,15 @@
+name: revcl-IpTableRulesIpGroups
+title: Use IP Groups or IP prefixes to reduce number of IP table rules
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 0da83bb1-2f39-49af-b5c9-835fc455e3d1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/ip-groups
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-NatGatewaySettingsSnatPortUsage.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-NatGatewaySettingsSnatPortUsage.yaml
new file mode 100644
index 000000000..32151b735
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-NatGatewaySettingsSnatPortUsage.yaml
@@ -0,0 +1,17 @@
+name: revcl-NatGatewaySettingsSnatPortUsage
+title: "Prevent SNAT Port exhaustion by monitoring SNAT port usage, evaluating NAT\
+ \ Gateway settings, and ensuring seamless failover. If the port count approaches\
+ \ the limit, it\xE2\u20AC\u2122s a sign that SNAT exhaustion might be imminent."
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 7371dc21-251a-47a3-af14-6e01b9da4757
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/nat-gateway/tutorial-hub-spoke-nat-firewall
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-RuleCollectionGroupsRuleCollections.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-RuleCollectionGroupsRuleCollections.yaml
new file mode 100644
index 000000000..9c4a0038b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-RuleCollectionGroupsRuleCollections.yaml
@@ -0,0 +1,16 @@
+name: revcl-RuleCollectionGroupsRuleCollections
+title: Arrange rules within the firewall policy into Rule Collection Groups and Rule
+ Collections and based on their frequency of use
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 828cec2e-af6c-40c2-8fa2-1b681ee63eb7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall-manager/rule-hierarchy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-SourceIpIncomingDnats.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-SourceIpIncomingDnats.yaml
new file mode 100644
index 000000000..cd82ec138
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-SourceIpIncomingDnats.yaml
@@ -0,0 +1,16 @@
+name: revcl-SourceIpIncomingDnats
+title: Avoid wildcards as a source IP for DNATS, such as * or any, you should specify
+ source IPs for incoming DNATs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: c44c6f0e-1642-4a61-a17b-0922f835c93a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/tutorial-firewall-dnat
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-TlsInspection.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-TlsInspection.yaml
new file mode 100644
index 000000000..ff2461e4a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-TlsInspection.yaml
@@ -0,0 +1,15 @@
+name: revcl-TlsInspection
+title: Enable TLS Inspection
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 0
+labels:
+ guid: 346840b8-1064-496e-8396-4b1340172d52
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/premium-features#tls-inspection
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-WebCategoriesOutboundAccess.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-WebCategoriesOutboundAccess.yaml
new file mode 100644
index 000000000..916dd48d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/revcl-WebCategoriesOutboundAccess.yaml
@@ -0,0 +1,15 @@
+name: revcl-WebCategoriesOutboundAccess
+title: Use web categories to allow or deny outbound access to specific topics.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 2
+labels:
+ guid: 39990a13-915c-45f9-a2d3-562d7d6c4b7c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/premium-features#web-categories
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-AzureFirewallWebCategoriesPublicInternetSites.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-AzureFirewallWebCategoriesPublicInternetSites.yaml
new file mode 100644
index 000000000..b71f11923
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-AzureFirewallWebCategoriesPublicInternetSites.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFirewallWebCategoriesPublicInternetSites
+title: Consider Web Categories to allow or deny outbound access in bulk.
+description: Instead of explicitly building and maintaining a long list of public
+ Internet sites, consider the usage of Azure Firewall Web Categories. This feature
+ will dynamically categorize web content and will permit the creation of compact
+ Application Rules.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 0fb0141c-f1ac-4149-a10c-4b7954050b12
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-AzureLoadTestingServiceAzureFirewallInstance.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-AzureLoadTestingServiceAzureFirewallInstance.yaml
new file mode 100644
index 000000000..890c66b80
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-AzureLoadTestingServiceAzureFirewallInstance.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureLoadTestingServiceAzureFirewallInstance
+title: Properly warm up Azure Firewall before any performance test.
+description: Create initial traffic that isn't part of your load tests 20 minutes
+ before the test. Use diagnostics settings to capture scale-up and scale-down events.
+ You can use the Azure Load Testing service to generate the initial traffic. Allows
+ the Azure Firewall instance to scale up its instances to the maximum.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 0ec844d3-4b8c-41ee-ad0a-89c2b23f007b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-BackendVirtualMachineScaleSetInstanceTwoVirtualMachineScaleSetInstances.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-BackendVirtualMachineScaleSetInstanceTwoVirtualMachineScaleSetInstances.yaml
new file mode 100644
index 000000000..889a55db2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-BackendVirtualMachineScaleSetInstanceTwoVirtualMachineScaleSetInstances.yaml
@@ -0,0 +1,19 @@
+name: wafsg-BackendVirtualMachineScaleSetInstanceTwoVirtualMachineScaleSetInstances
+title: Assess potential SNAT port exhaustion problem.
+description: Azure Firewall currently supports 2496 ports per Public IP address per
+ backend Virtual Machine Scale Set instance. By default, there are two Virtual Machine
+ Scale Set instances. So, there are 4992 ports per flow destination IP, destination
+ port and protocol (TCP or UDP). The firewall scales up to a maximum of 20 instances.
+ You can work around the limits by configuring Azure Firewall deployments with a
+ minimum of five public IP addresses for deployments susceptible to SNAT exhaustion.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: b2acb591-6e44-49f2-97f9-1196094776f3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-DiagnosticToolsLogging.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-DiagnosticToolsLogging.yaml
new file mode 100644
index 000000000..06d4b599d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-DiagnosticToolsLogging.yaml
@@ -0,0 +1,15 @@
+name: wafsg-DiagnosticToolsLogging
+title: Do not enable diagnostic tools and logging if not required.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 565d2322-9a28-4f3d-a657-95391fa683a5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-FirewallRules.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-FirewallRules.yaml
new file mode 100644
index 000000000..c80bbfa78
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-FirewallRules.yaml
@@ -0,0 +1,15 @@
+name: wafsg-FirewallRules
+title: Regularly review and optimize firewall rules.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 0a96b331-2efc-47d2-8e25-f5c57b890ea9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-FlowTraceLogsAdvancedLoggingCapabilities.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-FlowTraceLogsAdvancedLoggingCapabilities.yaml
new file mode 100644
index 000000000..db4b532d6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-FlowTraceLogsAdvancedLoggingCapabilities.yaml
@@ -0,0 +1,18 @@
+name: wafsg-FlowTraceLogsAdvancedLoggingCapabilities
+title: Do not enable advanced logging if not required
+description: Azure Firewall provides some advanced logging capabilities that can be
+ expensive to maintain always active. Instead, they should be used for troubleshooting
+ purposes only, and limited in duration, then disabled when no more necessary. For
+ example, Top flows and Flow trace logs are expensive can cause excessive CPU and
+ storage usage on the Azure Firewall infrastructure.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 60d6a84a-dcc9-4fbb-a68f-810341b9253c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-IdpsModeAlertDenyMode.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-IdpsModeAlertDenyMode.yaml
new file mode 100644
index 000000000..55524f34e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-IdpsModeAlertDenyMode.yaml
@@ -0,0 +1,15 @@
+name: wafsg-IdpsModeAlertDenyMode
+title: Evaluate the performance impact of IDPS in Alert and deny mode.
+description: If Azure Firewall is required to operate in IDPS mode Alert and deny,
+ carefully consider the performance impact as documented in this page.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 9263120f-b82d-4784-9c9a-73941e85079b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance-1.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance-1.yaml
new file mode 100644
index 000000000..ea223e073
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance-1.yaml
@@ -0,0 +1,19 @@
+name: wafsg-IpGroupsUsageRecommendationRuleProcessingPerformance-1
+title: Use Policy Analytics dashboard to identify potential optimizations for Firewall
+ Policies.
+description: Policy Analytics is a new feature that provides insights into the impact
+ of your Azure Firewall policies. It helps you identify potential issues (hitting
+ policy limits, low utilization rules, redundant rules, rules too generic, IP Groups
+ usage recommendation) in your policies and provides recommendations to improve your
+ security posture and rule processing performance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: e104f2f7-c376-4ed8-b536-a10a16be484d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-LoadTestsAutoScalePerformance.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-LoadTestsAutoScalePerformance.yaml
new file mode 100644
index 000000000..8c2969ea6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-LoadTestsAutoScalePerformance.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LoadTestsAutoScalePerformance
+title: Plan load tests to test auto-scale performance in your environment.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 5dcb4cd3-a501-4d37-b2a6-3f59c3e1bd32
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-PolicyRequirementsIpRanges.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-PolicyRequirementsIpRanges.yaml
new file mode 100644
index 000000000..3563bbdbf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-PolicyRequirementsIpRanges.yaml
@@ -0,0 +1,16 @@
+name: wafsg-PolicyRequirementsIpRanges
+title: Review policy requirements and opportunities to summarize IP ranges and URLs
+ list.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: be71278e-b14a-4c1b-9007-b7513095b138
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-SnatPortRequirements.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-SnatPortRequirements.yaml
new file mode 100644
index 000000000..33e6fd865
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-SnatPortRequirements.yaml
@@ -0,0 +1,15 @@
+name: wafsg-SnatPortRequirements
+title: Assess your SNAT port requirements.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: 503f63e3-bdd2-4e37-9a44-644670d204f0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-TheAzureFirewallSubnetNameEnoughIpAddresses.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-TheAzureFirewallSubnetNameEnoughIpAddresses.yaml
new file mode 100644
index 000000000..759eac6fe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Performance/wafsg-TheAzureFirewallSubnetNameEnoughIpAddresses.yaml
@@ -0,0 +1,20 @@
+name: wafsg-TheAzureFirewallSubnetNameEnoughIpAddresses
+title: Configure an Azure Firewall subnet (AzureFirewallSubnet) with a /26 address
+ space.
+description: Azure Firewall is a dedicated deployment in your virtual network. Within
+ your virtual network, a dedicated subnet is required for the instance of Azure Firewall.
+ Azure Firewall provisions more capacity as it scales.A /26 address space for its
+ subnets ensures that the firewall has enough IP addresses available to accommodate
+ the scaling. Azure Firewall doesn't need a subnet bigger than /26. The Azure Firewall
+ subnet name must be AzureFirewallSubnet.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Performance
+severity: 1
+labels:
+ guid: d1510802-2f00-4995-8a04-fbebce7fe966
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureCloudAdoptionFrameworkDocumentationAzureVirtualWanNetworkTopologies.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureCloudAdoptionFrameworkDocumentationAzureVirtualWanNetworkTopologies.yaml
new file mode 100644
index 000000000..7308a867f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureCloudAdoptionFrameworkDocumentationAzureVirtualWanNetworkTopologies.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureCloudAdoptionFrameworkDocumentationAzureVirtualWanNetworkTopologies
+title: Use Azure Firewall Manager with traditional Hub & Spokes or Azure Virtual WAN
+ network topologies to deploy and manage instances of Azure Firewall.
+description: Easily create hub-and-spoke and transitive architectures with native
+ security services for traffic governance and protection. For more information on
+ network topologies, see the Azure Cloud Adoption Framework documentation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 22e4993d-53d4-4655-84fa-4d1bc8523e41
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallClassicRulesAzureFirewallManagerPolicies.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallClassicRulesAzureFirewallManagerPolicies.yaml
new file mode 100644
index 000000000..af4d83949
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallClassicRulesAzureFirewallManagerPolicies.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFirewallClassicRulesAzureFirewallManagerPolicies
+title: Migrate Azure Firewall Classic Rules to Azure Firewall Manager Policies for
+ existing deployments.
+description: For existing deployments, migrate Azure Firewall rules to Azure Firewall
+ Manager policies. Use Azure Firewall Manager to centrally manage your firewalls
+ and policies. For more information, see Migrate to Azure Firewall Premium.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 15329f1b-13d3-43a7-b76c-d110d7933148
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallHealthState.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallHealthState.yaml
new file mode 100644
index 000000000..8778488b9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallHealthState.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallHealthState
+title: Monitor Azure Firewall health state.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 4ab78087-97ce-4ec5-ab5d-f67e47b20854
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallPolicyStructure.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallPolicyStructure.yaml
new file mode 100644
index 000000000..a29b9f87b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallPolicyStructure.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallPolicyStructure
+title: Create Azure Firewall Policy structure.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 457a41f6-6cc9-48a8-b16b-01f2312b6537
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallProductGroupAzureFirewallKnownIssues.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallProductGroupAzureFirewallKnownIssues.yaml
new file mode 100644
index 000000000..1d95ace6b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallProductGroupAzureFirewallKnownIssues.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFirewallProductGroupAzureFirewallKnownIssues
+title: Review the list of Azure Firewall Known Issues.
+description: Azure Firewall Product Group maintains an updated list of known-issues
+ at this location. This list contains important information related to by-design
+ behavior, fixes under construction, platform limitations, along with possible workarounds
+ or mitigation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 8af66a9f-689a-4e52-a9f1-08cf07f86047
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallResourceHealthCheckAzfwLatencyProbeMetrics.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallResourceHealthCheckAzfwLatencyProbeMetrics.yaml
new file mode 100644
index 000000000..19fea63dd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureFirewallResourceHealthCheckAzfwLatencyProbeMetrics.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureFirewallResourceHealthCheckAzfwLatencyProbeMetrics
+title: Monitor Azure Firewall Metrics and Resource Health state.
+description: Closely monitor key metrics indicator of Azure Firewall health state
+ such as Throughput, Firewall health state, SNAT port utilization and AZFW Latency
+ Probe metrics. Additionally, Azure Firewall now integrates with Azure Resource Health.
+ With the Azure Firewall Resource Health check, you can now view the health status
+ of your Azure Firewall and address service problems that might affect your Azure
+ Firewall resource.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 778a05b2-ee67-42f2-b35e-0adfe817cded
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureVirtualWanAzureVirtualNetwork.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureVirtualWanAzureVirtualNetwork.yaml
new file mode 100644
index 000000000..c16e38b67
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureVirtualWanAzureVirtualNetwork.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureVirtualWanAzureVirtualNetwork
+title: In multi-region environments, deploy an Azure Firewall instance per region.
+description: For traditional Hub & Spokes architectures, multi-region details are
+ explained in this article. For secured virtual hubs (Azure Virtual WAN), Routing
+ Intent and Policies must be configured to secure inter-hub and branch-to-branch
+ communications. For workloads designed to be resistant to failures and fault tolerant,
+ remember to consider that instances of Azure Firewall and Azure Virtual Network
+ as regional resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 82ee097d-7480-4896-92e9-78b3b335cfcb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureVirtualWanHubsHubVirtualNetworks.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureVirtualWanHubsHubVirtualNetworks.yaml
new file mode 100644
index 000000000..9ed422fec
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-AzureVirtualWanHubsHubVirtualNetworks.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureVirtualWanHubsHubVirtualNetworks
+title: Deploy Azure Firewall in hub virtual networks or as part of Azure Virtual WAN
+ hubs.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 29c79d8a-974d-4768-9036-6b7c3980258b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-GlobalNetworkEnvironmentsCentralBasePolicy.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-GlobalNetworkEnvironmentsCentralBasePolicy.yaml
new file mode 100644
index 000000000..6eeefb2bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-GlobalNetworkEnvironmentsCentralBasePolicy.yaml
@@ -0,0 +1,20 @@
+name: wafsg-GlobalNetworkEnvironmentsCentralBasePolicy
+title: Create Azure Firewall Policies to govern the security posture across global
+ network environments. Assign policies to all instances of Azure Firewall.
+description: Azure Firewall Policies can be arranged in an hierarchical structure
+ to overlay a central base policy. Allow for granular policies to meet the requirements
+ of specific regions. Delegate incremental firewall policies to local security teams
+ through role-based access control (RBAC). Some settings are specific per instance,
+ for example DNAT Rules and DNS configuration, then multiple specialized policies
+ might be required.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 965fde84-1253-4833-93bc-9476a10ce2ad
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-HigherServiceLevelAgreementSingleAvailabilityZone.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-HigherServiceLevelAgreementSingleAvailabilityZone.yaml
new file mode 100644
index 000000000..8781ffa87
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-HigherServiceLevelAgreementSingleAvailabilityZone.yaml
@@ -0,0 +1,18 @@
+name: wafsg-HigherServiceLevelAgreementSingleAvailabilityZone
+title: Deploy Azure Firewall across multiple availability zones for higher service-level
+ agreement (SLA).
+description: Azure Firewall provides different SLAs when it's deployed in a single
+ availability zone and when it's deployed in multiple zones. For more information,
+ see SLA for Azure Firewall. For information about all Azure SLAs, see SLA summary
+ for Azure services.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: bc96dc36-32aa-404b-b450-aaacf0b1becc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-KnownIssueList.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-KnownIssueList.yaml
new file mode 100644
index 000000000..9dca3dc7c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-KnownIssueList.yaml
@@ -0,0 +1,15 @@
+name: wafsg-KnownIssueList
+title: Review the Known Issue list.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 8af18b41-9be2-4bb2-aaac-8c2a5734539a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-LeverageAvailabilityZonesResiliency.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-LeverageAvailabilityZonesResiliency.yaml
new file mode 100644
index 000000000..bfd16491a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-LeverageAvailabilityZonesResiliency.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LeverageAvailabilityZonesResiliency
+title: Leverage Availability Zones resiliency.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: 59945fc0-9f70-4b5d-a8b6-2ac38dc2508d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-RuleCollectionGroupsAzureFirewallPolicy.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-RuleCollectionGroupsAzureFirewallPolicy.yaml
new file mode 100644
index 000000000..44f42d892
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Reliability/wafsg-RuleCollectionGroupsAzureFirewallPolicy.yaml
@@ -0,0 +1,16 @@
+name: wafsg-RuleCollectionGroupsAzureFirewallPolicy
+title: Ensure your Azure Firewall Policy adheres to Azure Firewall limits and recommendations.
+description: There are limits on the policy structure, including numbers of Rules
+ and Rule Collection Groups, total policy size, source/target destinations. Be sure
+ to compose your policy and stay behind the documented thresholds.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Reliability
+severity: 1
+labels:
+ guid: c673cfb7-5f2f-40ff-a878-c4ffeb26acd9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallDnsProxyConfiguration.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallDnsProxyConfiguration.yaml
new file mode 100644
index 000000000..11cb10341
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallDnsProxyConfiguration.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFirewallDnsProxyConfiguration
+title: 'Enable Azure Firewall DNS proxy configuration '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 94f3eede-9aa3-4088-92a3-bb9a56509fad
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/dns-details
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallIdpsModeAdditionalProtection.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallIdpsModeAdditionalProtection.yaml
new file mode 100644
index 000000000..f0117c9e8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallIdpsModeAdditionalProtection.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureFirewallIdpsModeAdditionalProtection
+title: Configure Azure Firewall IDPS mode to Deny for additional protection.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: b9d0dff5-bdd4-4cd8-88ed-5811610b2b2c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/premium-features#idps
+queries:
+ arg: resources | where type=='microsoft.network/firewallpolicies' | extend compliant
+ = (properties.intrusionDetection.mode == 'Deny') | project id, compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallPremiumAdditionalSecurity.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallPremiumAdditionalSecurity.yaml
new file mode 100644
index 000000000..42a6d2786
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallPremiumAdditionalSecurity.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureFirewallPremiumAdditionalSecurity
+title: Use Azure Firewall Premium for additional security and protection.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: c10d51ef-f999-455d-bba0-5c90ece07447
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/premium-features
+queries:
+ arg: resources | where type=='microsoft.network/firewallpolicies' | extend compliant
+ = (properties.sku.tier == 'Premium') | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallSubnets.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallSubnets.yaml
new file mode 100644
index 000000000..2f036549e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallSubnets.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureFirewallSubnets
+title: Use a /26 prefix for your Azure Firewall subnets.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: 22d6419e-b627-4d95-9e7d-019fa759387f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/firewall-faq#why-does-azure-firewall-need-a--26-subnet-size
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets
+ | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix
+ | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName ==
+ 'AzureFirewallSubnet' | extend compliant = (subnetPrefixLength == 26) | distinct
+ id, compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallThreatIntelligenceModeAdditionalProtection.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallThreatIntelligenceModeAdditionalProtection.yaml
new file mode 100644
index 000000000..ac8216a86
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureFirewallThreatIntelligenceModeAdditionalProtection.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureFirewallThreatIntelligenceModeAdditionalProtection
+title: Configure Azure Firewall Threat Intelligence mode to Alert and Deny for additional
+ protection.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: e9c8f584-6d5e-473b-8dc5-acc9fbaab4e3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/premium-features
+queries:
+ arg: resources | where type=='microsoft.network/firewallpolicies' | extend compliant
+ = (properties.threatIntelMode == 'Deny') | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzurePaasServicesAzureFirewall.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzurePaasServicesAzureFirewall.yaml
new file mode 100644
index 000000000..a5a94c77a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzurePaasServicesAzureFirewall.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzurePaasServicesAzureFirewall
+title: Filter egress traffic to Azure PaaS services using FQDNs instead of IP addresses
+ in Azure Firewall or an NVA to prevent data exfiltration. If using Private Link
+ you can block all FQDNs, otherwise allow only the required PaaS services.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 7e7a8ed4-b30e-438c-9f29-812b2363cefe
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureRoleBasedAccessControlGlobalAzureFirewallPolicy.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureRoleBasedAccessControlGlobalAzureFirewallPolicy.yaml
new file mode 100644
index 000000000..e7c92b945
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-AzureRoleBasedAccessControlGlobalAzureFirewallPolicy.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureRoleBasedAccessControlGlobalAzureFirewallPolicy
+title: Create a global Azure Firewall policy to govern security posture across the
+ global network environment and assign it to all Azure Firewall instances. Allow
+ for granular policies to meet requirements of specific regions by delegating incremental
+ firewall policies to local security teams via Azure role-based access control.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 5a4b1511-e43a-458a-ac22-99c4d7b57d0c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-FqdnBasedNetworkRulesApplicationRules.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-FqdnBasedNetworkRulesApplicationRules.yaml
new file mode 100644
index 000000000..0a2cc1ba9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-FqdnBasedNetworkRulesApplicationRules.yaml
@@ -0,0 +1,18 @@
+name: revcl-FqdnBasedNetworkRulesApplicationRules
+title: Use FQDN-based network rules and Azure Firewall with DNS proxy to filter egress
+ traffic to the Internet over protocols not supported by application rules.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: 14d99880-2f88-47e8-a134-62a7d85c94af
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall/fqdn-filtering-network-rules
+queries:
+ arg: resources | where type=='microsoft.network/firewallpolicies' | extend compliant
+ = (properties.dnsSettings.enableProxy == true) | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-HttpSInboundConnectionsEastWestTrafficFiltering.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-HttpSInboundConnectionsEastWestTrafficFiltering.yaml
new file mode 100644
index 000000000..627c38eb8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-HttpSInboundConnectionsEastWestTrafficFiltering.yaml
@@ -0,0 +1,19 @@
+name: revcl-HttpSInboundConnectionsEastWestTrafficFiltering
+title: Use Azure Firewall to govern Azure outbound traffic to the internet, non-HTTP/S
+ inbound connections, and East/West traffic filtering (if the organization requires
+ it)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: e6c4cfd3-e504-4547-a244-7ec66138a720
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-NetworkVirtualApplianceVirtualWan.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-NetworkVirtualApplianceVirtualWan.yaml
new file mode 100644
index 000000000..57199a9a1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-NetworkVirtualApplianceVirtualWan.yaml
@@ -0,0 +1,28 @@
+name: revcl-NetworkVirtualApplianceVirtualWan
+title: For subnets in VNets not connected to Virtual WAN, attach a route table so
+ that Internet traffic is redirected to Azure Firewall or a Network Virtual Appliance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 0
+labels:
+ guid: a3784907-9836-4271-aafc-93535f8ec08b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets
+ | mv-expand subnets | project id,name,subnetId=tostring(subnets.id), subnetName=tostring(subnets.name),subnetRT=subnets.properties.routeTable.id
+ | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet',
+ 'AzureBastionSubnet')) | extend hasRT = isnotnull(subnetRT) | distinct id, hasRT,
+ subnetId | join kind=fullouter (resources | where type == 'microsoft.network/virtualnetworks'
+ | mvexpand properties.virtualNetworkPeerings | extend isVWAN=(tolower(split(properties_virtualNetworkPeerings.name,
+ '_')[0]) == 'remotevnettohubpeering') | mv-expand properties.subnets | project
+ id, isVWAN, name, subnetId=tostring(properties_subnets.id), subnetName=tostring(properties_subnets.name)
+ | summarize PeeredToVWAN=max(isVWAN) by id, subnetId | project id, subnetId, isVWANpeer
+ = (PeeredToVWAN == true)) on subnetId | project id=iff(isnotempty(id), id, id1),
+ subnetId=iff(isnotempty(subnetId), subnetId, subnetId1), hasRT, isVWANpeer | extend
+ compliant = (hasRT==true or isVWANpeer==true) | distinct id, subnetId, compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-PublicIpAddressesPolicyAssignment.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-PublicIpAddressesPolicyAssignment.yaml
new file mode 100644
index 000000000..24dffc166
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-PublicIpAddressesPolicyAssignment.yaml
@@ -0,0 +1,16 @@
+name: revcl-PublicIpAddressesPolicyAssignment
+title: "Ensure there is a policy assignment to deny Public IP addresses\xC2\_directly\
+ \ tied to Virtual Machines"
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 3c5a808d-c695-4c14-a63c-c7ab7a510e41
+links:
+- type: docs
+ url: https://github.com/Azure/Enterprise-Scale/wiki/ALZ-Policies#corp
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-SupportedPartnerSaasSecurityProvidersFirewallManager.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-SupportedPartnerSaasSecurityProvidersFirewallManager.yaml
new file mode 100644
index 000000000..804165d82
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/revcl-SupportedPartnerSaasSecurityProvidersFirewallManager.yaml
@@ -0,0 +1,18 @@
+name: revcl-SupportedPartnerSaasSecurityProvidersFirewallManager
+title: Configure supported partner SaaS security providers within Firewall Manager
+ if the organization wants to use such solutions to help protect outbound connections.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 2
+labels:
+ guid: 655562f2-b3e4-4563-a4d8-739748b662d6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/firewall-manager/deploy-trusted-security-partner
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-ADdosProtectionPlanAzureDdosProtectionPlan.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-ADdosProtectionPlanAzureDdosProtectionPlan.yaml
new file mode 100644
index 000000000..07296b712
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-ADdosProtectionPlanAzureDdosProtectionPlan.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ADdosProtectionPlanAzureDdosProtectionPlan
+title: Use Azure Firewall Manager to create and associate a DDoS protection plan with
+ your hub virtual network (does not apply to Azure Virtual WAN).
+description: A DDoS protection plan provides enhanced mitigation features to defend
+ your firewall from DDoS attacks. Azure Firewall Manager is an integrated tool to
+ create your firewall infrastructure and DDoS protection plans. For more information,
+ see Configure an Azure DDoS Protection Plan using Azure Firewall Manager.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 1b052318-dd38-486c-97f3-b20c584c1bcd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzFirewallServiceTagsSecurityRuleCreation.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzFirewallServiceTagsSecurityRuleCreation.yaml
new file mode 100644
index 000000000..3ccb29547
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzFirewallServiceTagsSecurityRuleCreation.yaml
@@ -0,0 +1,21 @@
+name: wafsg-AzFirewallServiceTagsSecurityRuleCreation
+title: Use Service Tags in Network Rules to enable selective access to specific Microsoft
+ services.
+description: 'A service tag represents a group of IP address prefixes to help minimize
+ complexity for security rule creation. Using Service Tags in Network Rules, it is
+ possible to enable outbound access to specific services in Azure, Dynamics and Office
+ 365 without opening wide ranges of IP addresses. Azure will maintain automatically
+ the mapping between these tags and underlying IP addresses used by each service.
+ The list of Service Tags available to Azure Firewall are listed here: Az Firewall
+ Service Tags.'
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 2747c05a-f1a0-44e2-918a-f673f409e9aa
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallDnsProxy.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallDnsProxy.yaml
new file mode 100644
index 000000000..357c53bdf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallDnsProxy.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallDnsProxy
+title: Enable Azure Firewall DNS proxy.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: eb9ee852-eda8-41a8-917d-4a5a25a6d866
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallDnsProxyConfigurationFullyQualifiedDomainName.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallDnsProxyConfigurationFullyQualifiedDomainName.yaml
new file mode 100644
index 000000000..e95f793f3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallDnsProxyConfigurationFullyQualifiedDomainName.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFirewallDnsProxyConfigurationFullyQualifiedDomainName
+title: Use Fully Qualified Domain Name (FQDN) filtering in network rules.
+description: You can use FQDN based on DNS resolution in Azure Firewall and firewall
+ policies. This capability allows you to filter outbound traffic with any TCP/UDP
+ protocol (including NTP, SSH, RDP, and more). You must enable the Azure Firewall
+ DNS Proxy configuration to use FQDNs in your network rules. To learn how it works,
+ see Azure Firewall FQDN filtering in network rules.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: edad73e6-11f4-4f3d-ad4d-85a803631d88
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallManagementSubnetExistingAzureFirewallInstance.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallManagementSubnetExistingAzureFirewallInstance.yaml
new file mode 100644
index 000000000..26e456246
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallManagementSubnetExistingAzureFirewallInstance.yaml
@@ -0,0 +1,23 @@
+name: wafsg-AzureFirewallManagementSubnetExistingAzureFirewallInstance
+title: If required to route all internet-bound traffic to a designated next hop instead
+ of going directly to the internet, configure Azure Firewall in forced tunneling
+ mode (does not apply to Azure Virtual WAN).
+description: Azure Firewall must have direct internet connectivity. If your AzureFirewallSubnet
+ learns a default route to your on-premises network via the Border Gateway Protocol,
+ you must configure Azure Firewall in the forced tunneling mode. Using the forced
+ tunneling feature, you'll need another /26 address space for the Azure Firewall
+ Management subnet. You're required to name it AzureFirewallManagementSubnet.If this
+ is an existing Azure Firewall instance that can't be reconfigured in the forced
+ tunneling mode, create a UDR with a 0.0.0.0/0 route. Set the NextHopType value as
+ Internet. Associate it with AzureFirewallSubnet to maintain internet connectivity.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 00be10aa-262b-44b5-a82a-8c68aad4cccd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallPublicIpAddressesDdos.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallPublicIpAddressesDdos.yaml
new file mode 100644
index 000000000..c64ee17f2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureFirewallPublicIpAddressesDdos.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFirewallPublicIpAddressesDdos
+title: Protect your Azure Firewall public IP addresses with DDoS.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: b64f5de8-7f72-4545-a18e-9e75bc46a712
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureVirtualWanAzureFirewallInstance.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureVirtualWanAzureFirewallInstance.yaml
new file mode 100644
index 000000000..dfa63ce79
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-AzureVirtualWanAzureFirewallInstance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureVirtualWanAzureFirewallInstance
+title: Configure user-defined routes (UDR) to force traffic through Azure Firewall.
+description: In a traditional Hub & Spokes architecture, configure UDRs to force traffic
+ through Azure Firewall for `SpoketoSpoke`, `SpoketoInternet`, and `SpoketoHybrid`
+ connectivity. In Azure Virtual WAN, instead, configure Routing Intent and Policies
+ to redirect private and/or Internet traffic through the Azure Firewall instance
+ integrated into the hub.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 0eb2861e-50ba-479a-93d2-ca98a617e5fb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-BreedThirdPartySecaasOfferingsAzureVirtualWan.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-BreedThirdPartySecaasOfferingsAzureVirtualWan.yaml
new file mode 100644
index 000000000..a4834a044
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-BreedThirdPartySecaasOfferingsAzureVirtualWan.yaml
@@ -0,0 +1,20 @@
+name: wafsg-BreedThirdPartySecaasOfferingsAzureVirtualWan
+title: Configure supported third-party software as a service (SaaS) security providers
+ within Firewall Manager if you want to use these solutions to protect outbound connections.
+description: You can use your familiar, best-in-breed, third-party SECaaS offerings
+ to protect internet access for your users. This scenario does require Azure Virtual
+ WAN with a S2S VPN Gateway in the Hub, as it uses an IPSec tunnel to connect to
+ the provider's infrastructure. SECaaS providers might charge additional license
+ fees and limit throughput on IPSec connections. Alternative solutions such as ZScaler
+ Cloud Connector exist and might be more suitable.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: b1b6c964-c59a-42fb-85fe-61e5ec11da56
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-DirectNetworkTrafficAzureFirewall.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-DirectNetworkTrafficAzureFirewall.yaml
new file mode 100644
index 000000000..bfff61129
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-DirectNetworkTrafficAzureFirewall.yaml
@@ -0,0 +1,15 @@
+name: wafsg-DirectNetworkTrafficAzureFirewall
+title: Direct network traffic through Azure Firewall.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 0d173bba-16e4-4779-bbc6-b18447718271
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-DnsProxyConfigurationInternalDnsInfrastructure.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-DnsProxyConfigurationInternalDnsInfrastructure.yaml
new file mode 100644
index 000000000..84239e162
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-DnsProxyConfigurationInternalDnsInfrastructure.yaml
@@ -0,0 +1,17 @@
+name: wafsg-DnsProxyConfigurationInternalDnsInfrastructure
+title: Enable Azure Firewall (DNS) proxy configuration.
+description: Enabling this feature points clients in the VNets to Azure Firewall as
+ a DNS server. It will protect internal DNS infrastructure that will not be directly
+ accessed and exposed. Azure Firewall must be also configured to use custom DNS that
+ will be used to forward DNS queries.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 35c2f653-acd6-471c-91a9-f7e4a3fcce3e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-InternalEnterpriseCertificationAuthorityAzureFirewallPremium.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-InternalEnterpriseCertificationAuthorityAzureFirewallPremium.yaml
new file mode 100644
index 000000000..ccc1ed642
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-InternalEnterpriseCertificationAuthorityAzureFirewallPremium.yaml
@@ -0,0 +1,17 @@
+name: wafsg-InternalEnterpriseCertificationAuthorityAzureFirewallPremium
+title: Use an Enterprise PKI to generate certificates for TLS Inspection.
+description: With Azure Firewall Premium, if TLS Inspection feature is used, it is
+ recommended to leverage an internal Enterprise Certification Authority (CA) for
+ production environment. Self-signed certificates should be used for testing/PoC
+ purposes only.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: c5db7b18-fa0c-48be-a754-ddb21f1acdcb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeastPrivilegeAccessCriteriaRules.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeastPrivilegeAccessCriteriaRules.yaml
new file mode 100644
index 000000000..685b59a4c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeastPrivilegeAccessCriteriaRules.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LeastPrivilegeAccessCriteriaRules
+title: Create rules for Policies based on least privilege access criteria.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: a8db6917-b19a-4e97-a797-97a3cc882b45
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeastPrivilegeAccessZeroTrustPrincipleLeastPrivilegeAccessCriteria.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeastPrivilegeAccessZeroTrustPrincipleLeastPrivilegeAccessCriteria.yaml
new file mode 100644
index 000000000..aa078dc74
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeastPrivilegeAccessZeroTrustPrincipleLeastPrivilegeAccessCriteria.yaml
@@ -0,0 +1,19 @@
+name: wafsg-LeastPrivilegeAccessZeroTrustPrincipleLeastPrivilegeAccessCriteria
+title: Create rules for Firewall Policies based on least privilege access criteria.
+description: Azure Firewall Policies can be arranged in an hierarchical structure
+ to overlay a central base policy. Allow for granular policies to meet the requirements
+ of specific regions. Each policy can contains different sets of DNAT, Network and
+ Application rules with specific priority, action and processing order. Create your
+ rules based on least privilege access Zero Trust principle . How rules are processed
+ is explained in this article.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: eea03b99-3b97-4c7a-b1ab-76404535a87f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeverageThreatIntelligence.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeverageThreatIntelligence.yaml
new file mode 100644
index 000000000..31d16ce6f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-LeverageThreatIntelligence.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LeverageThreatIntelligence
+title: Leverage Threat Intelligence.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: dbfeaa71-3a9d-4c45-b68c-05fd8ccd6d66
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-NewAzureFirewallInstancePrivateDataPlane.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-NewAzureFirewallInstancePrivateDataPlane.yaml
new file mode 100644
index 000000000..9581a04f9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-NewAzureFirewallInstancePrivateDataPlane.yaml
@@ -0,0 +1,20 @@
+name: wafsg-NewAzureFirewallInstancePrivateDataPlane
+title: Set the public IP address to None to deploy a fully private data plane when
+ you configure Azure Firewall in the forced tunneling mode (does not apply to Azure
+ Virtual WAN).
+description: When you deploy a new Azure Firewall instance, if you enable the forced
+ tunneling mode, you can set the public IP address to None to deploy a fully private
+ data plane. However, the management plane still requires a public IP for management
+ purposes only. The internal traffic from virtual and on-premises networks won't
+ use that public IP. For more about forced tunneling, see Azure Firewall forced tunneling.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 0b4f833f-2a39-4d49-85b2-221317d24865
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-PowerfulAzureFirewallPremiumSecurityFeatures.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-PowerfulAzureFirewallPremiumSecurityFeatures.yaml
new file mode 100644
index 000000000..96d4647c8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-PowerfulAzureFirewallPremiumSecurityFeatures.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PowerfulAzureFirewallPremiumSecurityFeatures
+title: Enable IDPS in Alert or Alert and deny mode.
+description: IDPS is one of the most powerful Azure Firewall (Premium) security features
+ and should be enabled. Based on security and application requirements, and considering
+ the performance impact (see the Cost section below), Alert or Alert and deny modes
+ can be selected.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 25ca3e7f-b569-4ddf-8f50-3577a7f8a86c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-PrivateIpAddressExistingNetworkRoutes.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-PrivateIpAddressExistingNetworkRoutes.yaml
new file mode 100644
index 000000000..75038df15
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-PrivateIpAddressExistingNetworkRoutes.yaml
@@ -0,0 +1,20 @@
+name: wafsg-PrivateIpAddressExistingNetworkRoutes
+title: If not possible to apply UDR, and only web traffic redirection is required,
+ consider using Azure Firewall as an Explicit Proxy
+description: With explicit proxy feature enabled on the outbound path, you can configure
+ a proxy setting on the sending web application (such as a web browser) with Azure
+ Firewall configured as the proxy. As a result, web traffic will reach the firewall's
+ private IP address and therefore egresses directly from the firewall without using
+ a UDR. This feature also facilitates the usage of multiple firewalls without modifying
+ existing network routes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 24f05ffb-5b19-4ff8-8168-0884bfd131cd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-QualifiedDomainNamesOutboundNetworkTraffic.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-QualifiedDomainNamesOutboundNetworkTraffic.yaml
new file mode 100644
index 000000000..e5a24a2a0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-QualifiedDomainNamesOutboundNetworkTraffic.yaml
@@ -0,0 +1,18 @@
+name: wafsg-QualifiedDomainNamesOutboundNetworkTraffic
+title: Use FQDN Tags in Application Rules to enable selective access to specific Microsoft
+ services.
+description: An FQDN tag represents a group of fully qualified domain names (FQDNs)
+ associated with well known Microsoft services. You can use an FQDN tag in application
+ rules to allow the required outbound network traffic through your firewall for some
+ specific Azure services, Office 365, Windows 365 and Intune.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 2ee28c36-0f0e-4da4-96a9-985f44b29615
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-ThirdPartySecuritySecaasProviders.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-ThirdPartySecuritySecaasProviders.yaml
new file mode 100644
index 000000000..3e0848f79
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-ThirdPartySecuritySecaasProviders.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ThirdPartySecuritySecaasProviders
+title: Determine if you want to use third-party security as a service (SECaaS) providers.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 6cf7bc2c-7416-48d1-8966-05f18b4c77dc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-Tunneling.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-Tunneling.yaml
new file mode 100644
index 000000000..d43d3998f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-Tunneling.yaml
@@ -0,0 +1,15 @@
+name: wafsg-Tunneling
+title: Determine if you need Forced Tunneling.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-firewall.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: f3ff369e-56ed-45da-ad6a-c135803249ba
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-VirtualWanScenariosZeroTrustConfigurationGuide.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-VirtualWanScenariosZeroTrustConfigurationGuide.yaml
new file mode 100644
index 000000000..5b9c34677
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/Security/wafsg-VirtualWanScenariosZeroTrustConfigurationGuide.yaml
@@ -0,0 +1,17 @@
+name: wafsg-VirtualWanScenariosZeroTrustConfigurationGuide
+title: Review Zero-Trust configuration guide for Azure Firewall and Application Gateway
+description: If your security requirements necessitate implementing a Zero-Trust approach
+ for web applications (inspection and encryption), it is recommended to follow this
+ guide. In this document, how to integrate together Azure Firewall and Application
+ Gateway will be explained, in both traditional Hub & Spoke and Virtual WAN scenarios.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/azurefirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 96522d15-f2d0-41d0-b021-c87b47bf8b59
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-AzfwLatencyProbeMetricFirewallInstanceCpus.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-AzfwLatencyProbeMetricFirewallInstanceCpus.yaml
new file mode 100644
index 000000000..bee6bb9ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-AzfwLatencyProbeMetricFirewallInstanceCpus.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzfwLatencyProbeMetricFirewallInstanceCpus
+title: Monitor "AZFW Latency Probe" metric
+description: |-
+ Creating a metric to monitor latency probes over 20ms for periods longer than 30ms helps identify when firewall instance CPUs are stressed, potentially indicating issues.
+source:
+ type: aprl
+ file: azure-resources/Network/azureFirewalls/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/azureFirewalls
+severity: 0
+labels:
+ guid: 8faace2d-a36e-425c-aa58-2ad99e3e0b7a
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under development
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-LeverageAzureFirewallPolicyInheritanceModelAzureCustomRoles.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-LeverageAzureFirewallPolicyInheritanceModelAzureCustomRoles.yaml
new file mode 100644
index 000000000..5c6061b61
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-LeverageAzureFirewallPolicyInheritanceModelAzureCustomRoles.yaml
@@ -0,0 +1,18 @@
+name: aprl-LeverageAzureFirewallPolicyInheritanceModelAzureCustomRoles
+title: Leverage Azure Firewall policy inheritance model
+description: |-
+ Azure Firewall policy supports rule hierarchies for compliance enforcement, using a central base policy with higher priority over child policies, and employs Azure custom roles to safeguard base policy and manage access within subscriptions or groups.
+source:
+ type: aprl
+ file: azure-resources/Network/azureFirewalls/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/azureFirewalls
+severity: 1
+labels:
+ guid: 3a63560a-1ed3-6140-acd1-d1d23f9a2e12
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-OutboundSnatPortUsageSecureVirtualHubNetworks.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-OutboundSnatPortUsageSecureVirtualHubNetworks.yaml
new file mode 100644
index 000000000..b21d95d36
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-OutboundSnatPortUsageSecureVirtualHubNetworks.yaml
@@ -0,0 +1,38 @@
+name: aprl-OutboundSnatPortUsageSecureVirtualHubNetworks
+title: Monitor Azure Firewall metrics
+description: |-
+ Monitor Azure Firewall for overall health, processed throughput, and outbound SNAT port usage. Get alerted before limits impact services. Consider NAT gateway integration with zonal deployments; note limitations with zone redundant firewalls and secure virtual hub networks.
+source:
+ type: aprl
+ file: azure-resources/Network/azureFirewalls/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/azureFirewalls
+severity: 0
+labels:
+ guid: 3c8fa7c6-6b78-a24a-a63f-348a7c71acb9
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // List all Azure Firewalls resources in-scope, along with any metrics associated to Azure Monitor alert rules, that are not fully configured.
+ resources
+ | where type == "microsoft.network/azurefirewalls"
+ | project firewallId = tolower(id), name, tags
+ | join kind = leftouter (
+ resources
+ | where type == "microsoft.insights/metricalerts"
+ | mv-expand properties.scopes
+ | mv-expand properties.criteria.allOf
+ | where properties_scopes contains "azureFirewalls"
+ | project metricId = tolower(properties_scopes), monitoredMetric = properties_criteria_allOf.metricName, tags
+ | summarize monitoredMetrics = make_list(monitoredMetric) by tostring(metricId)
+ | project
+ metricId,
+ monitoredMetrics,
+ allAlertsConfigured = monitoredMetrics contains("FirewallHealth") and monitoredMetrics contains ("Throughput") and monitoredMetrics contains ("SNATPortUtilization")
+ ) on $left.firewallId == $right.metricId
+ | extend alertsNotFullyConfigured = isnull(allAlertsConfigured) or not(allAlertsConfigured)
+ | where alertsNotFullyConfigured
+ | project recommendationId = "c8fa7c6-6b78-a24a-a63f-348a7c71acb9", name, id = firewallId, tags, param1 = strcat("MetricsAlerts:", monitoredMetrics)
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-SingleAvailabilityZoneMultipleAvailabilityZones.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-SingleAvailabilityZoneMultipleAvailabilityZones.yaml
new file mode 100644
index 000000000..532d1ae80
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-SingleAvailabilityZoneMultipleAvailabilityZones.yaml
@@ -0,0 +1,24 @@
+name: aprl-SingleAvailabilityZoneMultipleAvailabilityZones
+title: Deploy Azure Firewall across multiple availability zones
+description: |-
+ Azure Firewall offers different SLAs depending on its deployment; in a single availability zone or across multiple, potentially improving reliability and performance.
+source:
+ type: aprl
+ file: azure-resources/Network/azureFirewalls/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/azureFirewalls
+severity: 0
+labels:
+ guid: c72b7fee-1fa0-5b4b-98e5-54bcae95bb74
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // List all Azure Firewalls that are not configured with multiple availability zones or deployed without a zone
+ resources
+ | where type == 'microsoft.network/azurefirewalls'
+ | where array_length(zones) <= 1 or isnull(zones)
+ | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id)
+ | project recommendationId = "c72b7fee-1fa0-5b4b-98e5-54bcae95bb74", name, id, tags, param1="multipleZones:false"
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-TwoToFourPublicIpAddressesSnatPortUtilization.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-TwoToFourPublicIpAddressesSnatPortUtilization.yaml
new file mode 100644
index 000000000..bddf8f83f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-TwoToFourPublicIpAddressesSnatPortUtilization.yaml
@@ -0,0 +1,18 @@
+name: aprl-TwoToFourPublicIpAddressesSnatPortUtilization
+title: Configure 2-4 PIPs for SNAT Port utilization
+description: |-
+ Configure a minimum of two to four public IP addresses per Azure Firewall to avoid SNAT exhaustion. Azure Firewall offers SNAT for all outbound traffic to public IPs, providing 2,496 SNAT ports for each additional PIP.
+source:
+ type: aprl
+ file: azure-resources/Network/azureFirewalls/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/azureFirewalls
+severity: 1
+labels:
+ guid: d2e4a38e-2307-4299-a217-4c0cebc9a7f6
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under development
diff --git a/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-VirtualNetworkHostingAzureFirewallVnet.yaml b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-VirtualNetworkHostingAzureFirewallVnet.yaml
new file mode 100644
index 000000000..f167c1783
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-azureFirewalls/aprl-VirtualNetworkHostingAzureFirewallVnet.yaml
@@ -0,0 +1,38 @@
+name: aprl-VirtualNetworkHostingAzureFirewallVnet
+title: Configure DDoS Protection on the Azure Firewall VNet
+description: |-
+ Associate a DDoS protection plan with the virtual network hosting Azure Firewall to provide enhanced mitigation against DDoS attacks. Azure Firewall Manager integrates the creation of firewall infrastructure and DDoS protection plans.
+source:
+ type: aprl
+ file: azure-resources/Network/azureFirewalls/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/azureFirewalls
+severity: 0
+labels:
+ guid: 1b2dbf4a-8a0b-5e4b-8f4e-3f758188910d
+ area: Security
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // List all in-scope Azure Firewall resources, where the VNet is not associated to a DDoS Protection Plan
+ resources
+ | where type =~ "Microsoft.Network/azureFirewalls"
+ | where isempty(properties.virtualHub.id) or isnull(properties.virtualHub.id)
+ | mv-expand ipConfig = properties.ipConfigurations
+ | project
+ name,
+ firewallId = id,
+ tags,
+ vNetName = split(ipConfig.properties.subnet.id, "/", 8)[0],
+ vNetId = tolower(substring(ipConfig.properties.subnet.id, 0, indexof(ipConfig.properties.subnet.id, "/subnet")))
+ | join kind=fullouter (
+ resources
+ | where type =~ "Microsoft.Network/ddosProtectionPlans"
+ | mv-expand vNet = properties.virtualNetworks
+ | project ddosProtectionPlanId = id, vNetId = tolower(vNet.id)
+ )
+ on vNetId
+ | where isempty(ddosProtectionPlanId)
+ | project recommendationId = "1b2dbf4a-8a0b-5e4b-8f4e-3f758188910d", name, id = firewallId, tags, param1 = strcat("vNet: ", vNetName), param2 = "ddosProtection: Disabled"
diff --git a/v2/recos/Services/MicrosoftNetwork-connections/aprl-GatewayConnectionResourcesAzureResourceLock.yaml b/v2/recos/Services/MicrosoftNetwork-connections/aprl-GatewayConnectionResourcesAzureResourceLock.yaml
new file mode 100644
index 000000000..4a95e7565
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-connections/aprl-GatewayConnectionResourcesAzureResourceLock.yaml
@@ -0,0 +1,18 @@
+name: aprl-GatewayConnectionResourcesAzureResourceLock
+title: Configure an Azure Resource Lock on connections to prevent accidental deletion
+description: |-
+ Configure an Azure Resource lock for Gateway Connection resources to prevent accidental deletion and maintain connectivity between on-premises networks and Azure workloads.
+source:
+ type: aprl
+ file: azure-resources/Network/connections/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/connections
+severity: 0
+labels:
+ guid: a5f3a4bd-4cf1-4196-a3cb-f5a0876198b2
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-connections/aprl-VirtualNetworkDataPathPerformanceVirtualMachines.yaml b/v2/recos/Services/MicrosoftNetwork-connections/aprl-VirtualNetworkDataPathPerformanceVirtualMachines.yaml
new file mode 100644
index 000000000..9b26a7006
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-connections/aprl-VirtualNetworkDataPathPerformanceVirtualMachines.yaml
@@ -0,0 +1,19 @@
+name: aprl-VirtualNetworkDataPathPerformanceVirtualMachines
+title: For better data path performance enable FastPath on ExpressRoute Direct and
+ Gateway
+description: |-
+ ExpressRoute gateways facilitate network traffic and route exchanges. FastPath enhances on-premises to virtual network data path performance by directing traffic straight to virtual machines, bypassing the gateway for improved resiliency through reduced gateway utilization.
+source:
+ type: aprl
+ file: azure-resources/Network/connections/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/connections
+severity: 1
+labels:
+ guid: f6a14b32-a727-4ace-b5fa-7b1c6bdff402
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-ddosProtectionPlans/aprl-AzureDdosProtectionPlanMetricsAzureDdosPlanMetrics.yaml b/v2/recos/Services/MicrosoftNetwork-ddosProtectionPlans/aprl-AzureDdosProtectionPlanMetricsAzureDdosPlanMetrics.yaml
new file mode 100644
index 000000000..4e030c12d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-ddosProtectionPlans/aprl-AzureDdosProtectionPlanMetricsAzureDdosPlanMetrics.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureDdosProtectionPlanMetricsAzureDdosPlanMetrics
+title: Monitor Azure DDoS Protection Plan metrics
+description: |-
+ Azure DDoS Plan metrics differentiate packets and bytes by tags: Dropped (packets scrubbed by DDoS), Forwarded (packets to VIP not filtered), and No tag (total packets, sum of dropped and forwarded).
+source:
+ type: aprl
+ file: azure-resources/Network/ddosProtectionPlans/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/ddosProtectionPlans
+severity: 1
+labels:
+ guid: ae054bf2-aefa-cf4a-8282-741194cef8da
+ area: Security
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-AzureDnsDnsRecords.yaml b/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-AzureDnsDnsRecords.yaml
new file mode 100644
index 000000000..b989b2c6e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-AzureDnsDnsRecords.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureDnsDnsRecords
+title: Enable auto-registration for Azure DNS to automatically manage the lifecycle
+ of the DNS records for the virtual machines deployed within a virtual network.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/dnszones
+waf: Operations
+severity: 0
+labels:
+ guid: 614658d3-558f-4d77-849b-821112df27ee
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/dns/private-dns-autoregistration
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-AzurePrivateDnsDelegatedZone.yaml b/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-AzurePrivateDnsDelegatedZone.yaml
new file mode 100644
index 000000000..a44a2a70f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-AzurePrivateDnsDelegatedZone.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzurePrivateDnsDelegatedZone
+title: For environments where name resolution in Azure is all that's required, use
+ Azure Private DNS for resolution with a delegated zone for name resolution (such
+ as 'azure.contoso.com').
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/dnszones
+waf: Operations
+severity: 1
+labels:
+ guid: 153e8908-ae28-4c84-a33b-6b7808b9fe5c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-RedHatOpenshiftPreferredDnsSolution.yaml b/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-RedHatOpenshiftPreferredDnsSolution.yaml
new file mode 100644
index 000000000..5d1e16905
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-dnsZones/Operations/revcl-RedHatOpenshiftPreferredDnsSolution.yaml
@@ -0,0 +1,16 @@
+name: revcl-RedHatOpenshiftPreferredDnsSolution
+title: Special workloads that require and deploy their own DNS (such as Red Hat OpenShift)
+ should use their preferred DNS solution.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/dnszones
+waf: Operations
+severity: 2
+labels:
+ guid: 1e6a83de-5de3-42c1-a924-81607d5d1e4e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-dnsZones/Reliability/revcl-AzureDnsPrivateResolversPremisesDnsServices.yaml b/v2/recos/Services/MicrosoftNetwork-dnsZones/Reliability/revcl-AzureDnsPrivateResolversPremisesDnsServices.yaml
new file mode 100644
index 000000000..6f8edac64
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-dnsZones/Reliability/revcl-AzureDnsPrivateResolversPremisesDnsServices.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureDnsPrivateResolversPremisesDnsServices
+title: Implement DNS Failover using Azure DNS Private Resolvers
+description: To eliminate a single point of failure in your on-premises DNS services
+ and ensure reliable DNS resolution during business continuity and disaster recovery
+ scenarios, it is recommended to utilize Azure DNS Private Resolvers in multiple
+ regions. By deploying two or more Azure DNS private resolvers across different regions,
+ you can enable DNS failover and achieve resiliency in your DNS infrastructure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/dnszones
+waf: Reliability
+severity: 2
+labels:
+ guid: 43da1dae-2cc8-4814-9060-7c1cca0e6146
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/dns/tutorial-dns-private-resolver-failover
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-dnsZones/Security/revcl-AzureDnsPrivateResolverNameResolution.yaml b/v2/recos/Services/MicrosoftNetwork-dnsZones/Security/revcl-AzureDnsPrivateResolverNameResolution.yaml
new file mode 100644
index 000000000..25d943b48
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-dnsZones/Security/revcl-AzureDnsPrivateResolverNameResolution.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureDnsPrivateResolverNameResolution
+title: For environments where name resolution across Azure and on-premises is required,
+ consider using Azure DNS Private Resolver.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/dnszones
+waf: Security
+severity: 1
+labels:
+ guid: 41049d40-3a92-43c3-974d-00018ac6a9e0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/dns/dns-private-resolver-overview
+- type: docs
+ url: https://learn.microsoft.com/training/modules/intro-to-azure-dns-private-resolver/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-expressRouteGateways/aprl-DiversePeeringLocationsDifferentPeeringLocation.yaml b/v2/recos/Services/MicrosoftNetwork-expressRouteGateways/aprl-DiversePeeringLocationsDifferentPeeringLocation.yaml
new file mode 100644
index 000000000..0d335fb61
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-expressRouteGateways/aprl-DiversePeeringLocationsDifferentPeeringLocation.yaml
@@ -0,0 +1,21 @@
+name: aprl-DiversePeeringLocationsDifferentPeeringLocation
+title: Connect v-Hub's ExpressRoute gateway to circuits from diverse peering locations
+ for resilience
+description: To increase reliability, it's advised that each v-Hub's ExpressRoute
+ gateway connects to at least two circuits, with each circuit originating from a
+ different peering location than the other, ensuring diverse connectivity paths for
+ enhanced resilience.|
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteGateways
+severity: 0
+labels:
+ guid: 9987c813-d687-4163-a511-95f31bc5e536
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-expressRouteGateways/aprl-VirtualWanExpressRouteGatewayBgpRoutesPrefixes.yaml b/v2/recos/Services/MicrosoftNetwork-expressRouteGateways/aprl-VirtualWanExpressRouteGatewayBgpRoutesPrefixes.yaml
new file mode 100644
index 000000000..751b32e17
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-expressRouteGateways/aprl-VirtualWanExpressRouteGatewayBgpRoutesPrefixes.yaml
@@ -0,0 +1,20 @@
+name: aprl-VirtualWanExpressRouteGatewayBgpRoutesPrefixes
+title: Monitor health for v-Hub's ExpressRoute gateway
+description: Set up monitoring and alerts for Virtual WAN Express Route Gateway. Create
+ alert rule for ensuring promptly response to critical events such as exceeding packets
+ per second, exceeding BGP routes prefixes, Gateway overutilization and high frequency
+ in route changes.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteGateways
+severity: 0
+labels:
+ guid: 17e8d380-e4b4-41a1-9b37-2e4df9fd5125
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-AzureApplicationGatewayWafLogsFalsePositives.yaml b/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-AzureApplicationGatewayWafLogsFalsePositives.yaml
new file mode 100644
index 000000000..f4436ae1d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-AzureApplicationGatewayWafLogsFalsePositives.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureApplicationGatewayWafLogsFalsePositives
+title: Check Azure Application Gateway WAF logs for mistakenly blocked valid requests
+description: |-
+ WAF may block legitimate requests as false positives. Identifying blocked requests within the last 24 hours through Log Analytics can help manage and mitigate these incorrect blockages efficiently.
+source:
+ type: aprl
+ file: azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/frontdoorWebApplicationFirewallPolicies
+severity: 0
+labels:
+ guid: 537b4d94-edd1-4041-b13d-8217dfa485f0
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-AzureFrontDoorWafLogsFalsePositives.yaml b/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-AzureFrontDoorWafLogsFalsePositives.yaml
new file mode 100644
index 000000000..4fda54430
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-AzureFrontDoorWafLogsFalsePositives.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureFrontDoorWafLogsFalsePositives
+title: Inspect Azure Front Door WAF logs for wrongfully blocked legitimate requests
+description: |-
+ WAF may mistakenly block legitimate requests (false positives). These can be identified by examining the last 24 hours of blocked requests in Log Analytics.
+source:
+ type: aprl
+ file: azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/frontdoorWebApplicationFirewallPolicies
+severity: 0
+labels:
+ guid: d0cfe47f-686b-5043-bf83-5a3868acb80a
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-WebApplicationFirewallAzureMonitorLogs.yaml b/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-WebApplicationFirewallAzureMonitorLogs.yaml
new file mode 100644
index 000000000..4ab12d5bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-frontdoorWebApplicationFirewallPolicies/aprl-WebApplicationFirewallAzureMonitorLogs.yaml
@@ -0,0 +1,18 @@
+name: aprl-WebApplicationFirewallAzureMonitorLogs
+title: Monitor Web Application Firewall
+description: |-
+ Monitoring the health of your Web Application Firewall and the applications it protects is crucial. This can be achieved through integration with Microsoft Defender for Cloud, Azure Monitor, and Azure Monitor logs, ensuring optimal performance and security.
+source:
+ type: aprl
+ file: azure-resources/Network/frontDoorWebApplicationFirewallPolicies/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/frontdoorWebApplicationFirewallPolicies
+severity: 0
+labels:
+ guid: 5357ae22-0f52-1a49-9fd4-1f00ace6add0
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/Reliability/revcl-LoadBalancerOutboundRulesAzureNatGateway.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/Reliability/revcl-LoadBalancerOutboundRulesAzureNatGateway.yaml
new file mode 100644
index 000000000..5509971b9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/Reliability/revcl-LoadBalancerOutboundRulesAzureNatGateway.yaml
@@ -0,0 +1,18 @@
+name: revcl-LoadBalancerOutboundRulesAzureNatGateway
+title: Use Azure NAT Gateway instead of Load Balancer outbound rules for better SNAT
+ scalability
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/loadbalancers
+waf: Reliability
+severity: 0
+labels:
+ guid: 97a2fd46-64b0-1dfa-b72d-9c8869496d75
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/nat-gateway/nat-overview#outbound-connectivity
+queries:
+ arg: resources | where type=='microsoft.network/loadbalancers' | extend countOutRules=array_length(properties.outboundRules)
+ | extend compliant = (countOutRules == 0) | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/Security/revcl-AzureLoadBalancersStandardSku.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/Security/revcl-AzureLoadBalancersStandardSku.yaml
new file mode 100644
index 000000000..514a435ad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/Security/revcl-AzureLoadBalancersStandardSku.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureLoadBalancersStandardSku
+title: Ensure you are using the Standard SKU for your Azure Load Balancers
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/loadbalancers
+waf: Security
+severity: 1
+labels:
+ guid: 4e35fbf5-0ae2-48b2-97ce-753353edbd1a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-overview
+queries:
+ arg: resources | where type == 'microsoft.network/loadbalancers' | project id, compliant=(tolower(sku.name)
+ == 'standard')
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/Security/revcl-LoadBalancersFrontendIpAddressesZonalFrontends.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/Security/revcl-LoadBalancersFrontendIpAddressesZonalFrontends.yaml
new file mode 100644
index 000000000..b7c37c026
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/Security/revcl-LoadBalancersFrontendIpAddressesZonalFrontends.yaml
@@ -0,0 +1,16 @@
+name: revcl-LoadBalancersFrontendIpAddressesZonalFrontends
+title: Ensure your Load Balancers frontend IP addresses are zone-redundant (unless
+ you require zonal frontends).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/loadbalancers
+waf: Security
+severity: 1
+labels:
+ guid: 9432621a-8397-4654-a882-5bc856b7ef83
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-standard-availability-zones
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-AzureLoadBalancersBackendInstancesAvailability.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-AzureLoadBalancersBackendInstancesAvailability.yaml
new file mode 100644
index 000000000..85a37d5c4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-AzureLoadBalancersBackendInstancesAvailability.yaml
@@ -0,0 +1,23 @@
+name: aprl-AzureLoadBalancersBackendInstancesAvailability
+title: Use Health Probes to detect backend instances availability
+description: |-
+ Health probes are used by Azure Load Balancers to determine the status of backend endpoints. Using custom health probes that are aligned with vendor recommendations enhances understanding of backend availability and facilitates monitoring of backend services for any impact.
+source:
+ type: aprl
+ file: azure-resources/Network/loadBalancers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/loadBalancers
+severity: 0
+labels:
+ guid: e5f5fcea-f925-4578-8599-9a391e888a60
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // List the load balancers which don't have health probe configured
+ resources
+ | where type =~ "microsoft.network/loadbalancers"
+ | where array_length(properties.probes) == 0
+ | project recommendationId="e5f5fcea-f925-4578-8599-9a391e888a60", name, id, tags, param1="customHealthProbeUsed: false"
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardLoadBalancerSkuStandardSkuLoadBalancer.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardLoadBalancerSkuStandardSkuLoadBalancer.yaml
new file mode 100644
index 000000000..45b8d7cfa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardLoadBalancerSkuStandardSkuLoadBalancer.yaml
@@ -0,0 +1,23 @@
+name: aprl-StandardLoadBalancerSkuStandardSkuLoadBalancer
+title: Use Standard Load Balancer SKU
+description: |-
+ Selecting Standard SKU Load Balancer enhances reliability through availability zones and zone resiliency, ensuring deployments withstand zone and region failures. Unlike Basic, it supports global load balancing and offers an SLA.
+source:
+ type: aprl
+ file: azure-resources/Network/loadBalancers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/loadBalancers
+severity: 0
+labels:
+ guid: 38c3bca1-97a1-eb42-8cd3-838b243f35ba
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all LoadBalancers using Basic SKU
+ resources
+ | where type =~ 'Microsoft.Network/loadBalancers'
+ | where sku.name == 'Basic'
+ | project recommendationId = "38c3bca1-97a1-eb42-8cd3-838b243f35ba", name, id, tags, Param1=strcat("sku-tier: basic")
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardLoadBalancerZoneRedundantFrontendIp.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardLoadBalancerZoneRedundantFrontendIp.yaml
new file mode 100644
index 000000000..18141eb49
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardLoadBalancerZoneRedundantFrontendIp.yaml
@@ -0,0 +1,50 @@
+name: aprl-StandardLoadBalancerZoneRedundantFrontendIp
+title: Ensure Standard Load Balancer is zone-redundant
+description: |-
+ In regions with Availability Zones, assigning a zone-redundant frontend IP to a Standard Load Balancer ensures continuous traffic distribution even if one availability zone fails, provided other healthy zones and backend instances are available to receive the traffic.
+source:
+ type: aprl
+ file: azure-resources/Network/loadBalancers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/loadBalancers
+severity: 0
+labels:
+ guid: 621dbc78-3745-4d32-8eac-9e65b27b7512
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all LoadBalancers with with regional or zonal public IP Addresses
+ resources
+ | where type == "microsoft.network/loadbalancers"
+ | where tolower(sku.name) != 'basic'
+ | mv-expand feIPconfigs = properties.frontendIPConfigurations
+ | extend
+ feConfigName = (feIPconfigs.name),
+ PrivateSubnetId = toupper(feIPconfigs.properties.subnet.id),
+ PrivateIPZones = feIPconfigs.zones,
+ PIPid = toupper(feIPconfigs.properties.publicIPAddress.id),
+ JoinID = toupper(id)
+ | where isnotempty(PrivateSubnetId)
+ | where isnull(PrivateIPZones) or array_length(PrivateIPZones) < 2
+ | project name, feConfigName, id
+ | union (resources
+ | where type == "microsoft.network/loadbalancers"
+ | where tolower(sku.name) != 'basic'
+ | mv-expand feIPconfigs = properties.frontendIPConfigurations
+ | extend
+ feConfigName = (feIPconfigs.name),
+ PIPid = toupper(feIPconfigs.properties.publicIPAddress.id),
+ JoinID = toupper(id)
+ | where isnotempty(PIPid)
+ | join kind=innerunique (
+ resources
+ | where type == "microsoft.network/publicipaddresses"
+ | where isnull(zones) or array_length(zones) < 2
+ | extend
+ LBid = toupper(substring(properties.ipConfiguration.id, 0, indexof(properties.ipConfiguration.id, '/frontendIPConfigurations'))),
+ InnerID = toupper(id)
+ ) on $left.PIPid == $right.InnerID)
+ | project recommendationId = "621dbc78-3745-4d32-8eac-9e65b27b7512", name, id, tags, param1="Zones: No Zone or Zonal", param2=strcat("Frontend IP Configuration:", " ", feConfigName)
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardPublicLoadBalancerManualPortAllocation.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardPublicLoadBalancerManualPortAllocation.yaml
new file mode 100644
index 000000000..e3530ebb2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-StandardPublicLoadBalancerManualPortAllocation.yaml
@@ -0,0 +1,24 @@
+name: aprl-StandardPublicLoadBalancerManualPortAllocation
+title: Use NAT Gateway instead of Outbound Rules for Production Workloads
+description: |-
+ Outbound rules for Standard Public Load Balancer involve manual port allocation for backend pools, limiting scalability and risk of SNAT port exhaustion. NAT Gateway is recommended for its dynamic scaling and secure internet connectivity.
+source:
+ type: aprl
+ file: azure-resources/Network/loadBalancers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/loadBalancers
+severity: 1
+labels:
+ guid: 8d319a05-677b-944f-b9b4-ca0fb42e883c
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all LoadBalancers with Outbound rules configured
+ resources
+ | where type =~ 'Microsoft.Network/loadBalancers'
+ | extend outboundRules = array_length(properties.outboundRules)
+ | where outboundRules > 0
+ | project recommendationId = "8d319a05-677b-944f-b9b4-ca0fb42e883c", name, id, tags, Param1 = "outboundRules: >=1"
diff --git a/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-VirtualMachineScaleSetsOptimalScaleBuilding.yaml b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-VirtualMachineScaleSetsOptimalScaleBuilding.yaml
new file mode 100644
index 000000000..b27efe933
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-loadBalancers/aprl-VirtualMachineScaleSetsOptimalScaleBuilding.yaml
@@ -0,0 +1,52 @@
+name: aprl-VirtualMachineScaleSetsOptimalScaleBuilding
+title: Ensure the Backend Pool contains at least two instances
+description: |-
+ Deploying Azure Load Balancers with at least two instances in the backend prevents a single point of failure and supports scalability. Pairing with Virtual Machine Scale Sets is advised for optimal scale building.
+source:
+ type: aprl
+ file: azure-resources/Network/loadBalancers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/loadBalancers
+severity: 0
+labels:
+ guid: 6d82d042-6d61-ad49-86f0-6a5455398081
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find all LoadBalancers which only have 1 backend pool defined or only 1 VM in the backend pool
+ resources
+ | where type =~ 'Microsoft.Network/loadBalancers'
+ | extend bep = properties.backendAddressPools
+ | extend BackEndPools = array_length(bep)
+ | where BackEndPools == 0
+ | project recommendationId = "6d82d042-6d61-ad49-86f0-6a5455398081", name, id, Param1="backendPools", Param2=toint(0), tags
+ | union (resources
+ | where type =~ 'Microsoft.Network/loadBalancers'
+ | where sku.name == "Standard"
+ | extend bep = properties.backendAddressPools
+ | extend BackEndPools = toint(array_length(bep))
+ | mv-expand bip = properties.backendAddressPools
+ | extend BackendAddresses = array_length(bip.properties.loadBalancerBackendAddresses)
+ | where toint(BackendAddresses) <= 1
+ | project recommendationId = "6d82d042-6d61-ad49-86f0-6a5455398081", name, id, tags, Param1="backendAddresses", Param2=toint(BackendAddresses))
+ | union (
+ resources
+ | where type =~ 'Microsoft.Network/loadBalancers'
+ | where sku.name == "Basic"
+ | mv-expand properties.backendAddressPools
+ | extend backendPoolId = properties_backendAddressPools.id
+ | project id, name, tags, tostring(backendPoolId), recommendationId = "6d82d042-6d61-ad49-86f0-6a5455398081", Param1="BackEndPools"
+ | join kind = leftouter (
+ resources
+ | where type =~ "Microsoft.Network/networkInterfaces"
+ | mv-expand properties.ipConfigurations
+ | mv-expand properties_ipConfigurations.properties.loadBalancerBackendAddressPools
+ | extend backendPoolId = tostring(properties_ipConfigurations_properties_loadBalancerBackendAddressPools.id)
+ | summarize poolMembers = count() by backendPoolId
+ | project tostring(backendPoolId), poolMembers ) on backendPoolId
+ | where toint(poolMembers) <= 1
+ | extend BackendAddresses = poolMembers
+ | project id, name, tags, recommendationId, Param1="backendAddresses", Param2=toint(BackendAddresses))
diff --git a/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-TotalSnatConnectionCountMetricAzureMonitorBaselineAlerts.yaml b/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-TotalSnatConnectionCountMetricAzureMonitorBaselineAlerts.yaml
new file mode 100644
index 000000000..bf36e0bcf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-TotalSnatConnectionCountMetricAzureMonitorBaselineAlerts.yaml
@@ -0,0 +1,18 @@
+name: aprl-TotalSnatConnectionCountMetricAzureMonitorBaselineAlerts
+title: Configure monitoring and alerting for NAT gateway
+description: |-
+ Use Network Insights for monitoring and alerting on your NAT gateway.Use Total SNAT connection count metric to determine if you're nearing the connection limit of NAT gateway. Set alerts based on Azure Monitor Baseline Alerts (AMBA) thresholds for NAT Gateway
+source:
+ type: aprl
+ file: azure-resources/Network/natGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/natGateways
+severity: 0
+labels:
+ guid: babf75d6-6407-4d90-b01e-5a1768e621f5
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-TotalSnatConnectionCountMetricPublicIpAddress.yaml b/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-TotalSnatConnectionCountMetricPublicIpAddress.yaml
new file mode 100644
index 000000000..8035b02b1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-TotalSnatConnectionCountMetricPublicIpAddress.yaml
@@ -0,0 +1,18 @@
+name: aprl-TotalSnatConnectionCountMetricPublicIpAddress
+title: Scale a NAT gateway to meet the demand of a dynamic workload
+description: |-
+ NAT Gateway provides 64,512 SNAT ports per public IP address and supports up to 16 public IP addresses. Monitor "Total SNAT connection count" metric to determine if you're nearing the connection limit of NAT gateway. You can scale the NAT gateway by adding more public IP addresses.
+source:
+ type: aprl
+ file: azure-resources/Network/natGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/natGateways
+severity: 1
+labels:
+ guid: 4281631c-3d19-4994-8d96-084c2a51a534
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-ZonalNatGatewayDeploymentNatGatewayResource.yaml b/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-ZonalNatGatewayDeploymentNatGatewayResource.yaml
new file mode 100644
index 000000000..5d0015542
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-natGateways/aprl-ZonalNatGatewayDeploymentNatGatewayResource.yaml
@@ -0,0 +1,18 @@
+name: aprl-ZonalNatGatewayDeploymentNatGatewayResource
+title: Consider zonal NAT gateway deployment for zone isolation scenarios
+description: |-
+ A zonal promise for zone isolation scenarios exists when a virtual machine instance using a NAT gateway resource is in the same zone as the NAT gateway resource and its public IP addresses. The pattern you want to use for zone isolation is creating a "zonal stack" per availability zone.
+source:
+ type: aprl
+ file: azure-resources/Network/natGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/natGateways
+severity: 1
+labels:
+ guid: 419df1ea-336b-460a-b6b2-fefe2588fcef
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Reliability/revcl-NsgRulesLimit.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Reliability/revcl-NsgRulesLimit.yaml
new file mode 100644
index 000000000..c71c30596
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Reliability/revcl-NsgRulesLimit.yaml
@@ -0,0 +1,20 @@
+name: revcl-NsgRulesLimit
+title: Consider the limit of NSG rules per NSG (1000).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networksecuritygroups
+waf: Reliability
+severity: 1
+labels:
+ guid: 0390417d-53dc-44d9-b3f4-c8832f359b41
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works
+queries:
+ arg: resources | where type == 'microsoft.network/networksecuritygroups' | project
+ id, rules = array_length(properties.securityRules) | project id, compliant = (rules
+ < 900)
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-ApplicationSecurityGroupsApplicationTeam.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-ApplicationSecurityGroupsApplicationTeam.yaml
new file mode 100644
index 000000000..d7f67b461
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-ApplicationSecurityGroupsApplicationTeam.yaml
@@ -0,0 +1,20 @@
+name: revcl-ApplicationSecurityGroupsApplicationTeam
+title: The application team should use application security groups at the subnet-level
+ NSGs to help protect multi-tier VMs within the landing zone.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networksecuritygroups
+waf: Security
+severity: 1
+labels:
+ guid: 9c2299c4-d7b5-47d0-a655-562f2b3e4563
+links:
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/
+queries:
+ arg: Resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets
+ | mv-expand subnets | project id,name,subnetName=subnets.name,subnetNsg=subnets.properties.networkSecurityGroup
+ | where not (subnetName in ('GatewaySubnet', 'AzureFirewallSubnet', 'RouteServerSubnet',
+ 'AzureBastionSubnet')) | extend compliant = isnotnull(subnetNsg)
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-ApplicationSecurityGroupsMicroSegmentTraffic.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-ApplicationSecurityGroupsMicroSegmentTraffic.yaml
new file mode 100644
index 000000000..7915a3898
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-ApplicationSecurityGroupsMicroSegmentTraffic.yaml
@@ -0,0 +1,18 @@
+name: revcl-ApplicationSecurityGroupsMicroSegmentTraffic
+title: Use NSGs and application security groups to micro-segment traffic within the
+ landing zone and avoid using a central NVA to filter traffic flows.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networksecuritygroups
+waf: Security
+severity: 1
+labels:
+ guid: a4d87397-48b6-462d-9d15-f512a65498f6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-LandingZonesEastWestTraffic.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-LandingZonesEastWestTraffic.yaml
new file mode 100644
index 000000000..092c2311b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-LandingZonesEastWestTraffic.yaml
@@ -0,0 +1,18 @@
+name: revcl-LandingZonesEastWestTraffic
+title: Use NSGs to help protect traffic across subnets, as well as east/west traffic
+ across the platform (traffic between landing zones).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networksecuritygroups
+waf: Security
+severity: 1
+labels:
+ guid: 872e52e3-611c-4c58-a5a4-b1511e43a58a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-landing-zone-network-segmentation
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-NsgInboundDefaultRulesVirtualnetworkServiceTag.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-NsgInboundDefaultRulesVirtualnetworkServiceTag.yaml
new file mode 100644
index 000000000..0ae77f440
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-NsgInboundDefaultRulesVirtualnetworkServiceTag.yaml
@@ -0,0 +1,23 @@
+name: revcl-NsgInboundDefaultRulesVirtualnetworkServiceTag
+title: Don't rely on the NSG inbound default rules using the VirtualNetwork service
+ tag to limit connectivity.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networksecuritygroups
+waf: Security
+severity: 1
+labels:
+ guid: 11deb39d-8299-4e47-bbe0-0fb5a36318a8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags
+queries:
+ arg: resources | where type=='microsoft.network/networksecuritygroups' | mvexpand
+ properties.securityRules | project id,name,ruleAction=properties_securityRules.properties.access,rulePriority=properties_securityRules.properties.priority,ruleDst=properties_securityRules.properties.destinationAddressPrefix,ruleSrc=properties_securityRules.properties.sourceAddressPrefix,ruleProt=properties_securityRules.properties.protocol,ruleDirection=properties_securityRules.properties.direction,rulePort=properties_securityRules.properties.destinationPortRange
+ | summarize StarDenies=countif(ruleAction=='Deny' and ruleDst=='*' and ruleSrc=='*'
+ and ruleProt=='*' and rulePort=='*') by id,tostring(ruleDirection) | where ruleDirection
+ == 'Inbound' | project id,compliant=(StarDenies>0) | union (resources | where
+ type=='microsoft.network/networksecuritygroups' | where array_length(properties.securityRules)==0
+ | extend compliant=false | project id,compliant)
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-VnetFlowLogsExternalTrafficFlows.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-VnetFlowLogsExternalTrafficFlows.yaml
new file mode 100644
index 000000000..67733477f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/Security/revcl-VnetFlowLogsExternalTrafficFlows.yaml
@@ -0,0 +1,18 @@
+name: revcl-VnetFlowLogsExternalTrafficFlows
+title: Enable VNet Flow Logs and feed them into Traffic Analytics to gain insights
+ into internal and external traffic flows.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networksecuritygroups
+waf: Security
+severity: 1
+labels:
+ guid: dfe237de-143b-416c-91d7-aa9b64704489
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/network-security-group-how-it-works
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-AzureNetworkSecurityGroupsDefaultSecurityRules.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-AzureNetworkSecurityGroupsDefaultSecurityRules.yaml
new file mode 100644
index 000000000..44da201a3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-AzureNetworkSecurityGroupsDefaultSecurityRules.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureNetworkSecurityGroupsDefaultSecurityRules
+title: The NSG only has Default Security Rules, make sure to configure the necessary
+ rules
+description: |-
+ Azure network security groups filter network traffic between resources in a virtual network, using security rules to allow or deny inbound or outbound traffic based on source, destination, port, and protocol.
+source:
+ type: aprl
+ file: azure-resources/Network/networkSecurityGroups/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkSecurityGroups
+severity: 1
+labels:
+ guid: 8291c1fa-650c-b44b-b008-4deb7465919d
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This query will return all NSGs that have NO security rules
+ resources
+ | where type =~ "microsoft.network/networksecuritygroups"
+ | extend sr = string_size(properties.securityRules)
+ | where sr <=2 or isnull(properties.securityRules)
+ | project recommendationId = "8291c1fa-650c-b44b-b008-4deb7465919d", name, id
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupRulesNetworkSecurityGroups.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupRulesNetworkSecurityGroups.yaml
new file mode 100644
index 000000000..b39f3ace8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupRulesNetworkSecurityGroups.yaml
@@ -0,0 +1,39 @@
+name: aprl-NetworkSecurityGroupRulesNetworkSecurityGroups
+title: Monitor changes in Network Security Groups with Azure Monitor
+description: |-
+ Create Alerts with Azure Monitor for operations like creating or updating Network Security Group rules to catch unauthorized/undesired changes to resources and spot attempts to bypass firewalls or access resources from the outside.
+source:
+ type: aprl
+ file: azure-resources/Network/networkSecurityGroups/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkSecurityGroups
+severity: 2
+labels:
+ guid: 8bb4a57b-55e4-d24e-9c19-2679d8bc779f
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Network Security Groups without alerts for modification configured.
+ resources
+ | where type =~ "Microsoft.Network/networkSecurityGroups"
+ | project name, id, tags, lowerCaseNsgId = tolower(id)
+ | join kind = leftouter (
+ resources
+ | where type =~ "Microsoft.Insights/activityLogAlerts" and properties.enabled == true
+ | mv-expand scope = properties.scopes
+ | where scope has "Microsoft.Network/networkSecurityGroups"
+ | project alertName = name, conditionJson = dynamic_to_json(properties.condition.allOf), scope
+ | where conditionJson has '"Administrative"' and (
+ // Create or Update Network Security Group
+ (conditionJson has '"Microsoft.Network/networkSecurityGroups/write"') or
+ // All administrative operations
+ (conditionJson !has '"Microsoft.Network/networkSecurityGroups/write"' and conditionJson !has '"Microsoft.Network/networkSecurityGroups/delete"' and conditionJson !has '"Microsoft.Network/networkSecurityGroups/join/action"')
+ )
+ | project lowerCaseNsgIdOfScope = tolower(scope)
+ )
+ on $left.lowerCaseNsgId == $right.lowerCaseNsgIdOfScope
+ | where isempty(lowerCaseNsgIdOfScope)
+ | project recommendationId = "8bb4a57b-55e4-d24e-9c19-2679d8bc779f", name, id, tags, param1 = "ModificationAlert: Not configured/Disabled"
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupsAccidentalChanges.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupsAccidentalChanges.yaml
new file mode 100644
index 000000000..b00c7d022
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupsAccidentalChanges.yaml
@@ -0,0 +1,19 @@
+name: aprl-NetworkSecurityGroupsAccidentalChanges
+title: Configure locks for Network Security Groups to avoid accidental changes and/or
+ deletion
+description: |-
+ As an administrator, you can lock an Azure subscription, resource group, or resource to protect them from accidental deletions and modifications. The lock overrides user permissions. Locks can prevent either deletions or modifications and are known as Delete and Read-only in the portal.
+source:
+ type: aprl
+ file: azure-resources/Network/networkSecurityGroups/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkSecurityGroups
+severity: 2
+labels:
+ guid: 52ac35e8-9c3e-f84d-8ce8-2fab955333d3
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupsDiagnosticSettings.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupsDiagnosticSettings.yaml
new file mode 100644
index 000000000..83eb707b5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NetworkSecurityGroupsDiagnosticSettings.yaml
@@ -0,0 +1,18 @@
+name: aprl-NetworkSecurityGroupsDiagnosticSettings
+title: Configure Diagnostic Settings for all network security groups
+description: |-
+ Resource Logs are not collected and stored until you create a diagnostic setting and route them to one or more locations.
+source:
+ type: aprl
+ file: azure-resources/Network/networkSecurityGroups/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkSecurityGroups
+severity: 1
+labels:
+ guid: d2976d3e-294b-4b49-a1f0-c42566a3758f
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NsgFlowLogsOpenInternetPorts.yaml b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NsgFlowLogsOpenInternetPorts.yaml
new file mode 100644
index 000000000..1392d78e6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-networkSecurityGroups/aprl-NsgFlowLogsOpenInternetPorts.yaml
@@ -0,0 +1,30 @@
+name: aprl-NsgFlowLogsOpenInternetPorts
+title: Configure NSG Flow Logs
+description: |-
+ Monitoring, managing, and understanding your network is crucial for protection and optimization. Knowing the current state, who and from where connections are made, open internet ports, expected and irregular behavior, and traffic spikes is essential.
+source:
+ type: aprl
+ file: azure-resources/Network/networkSecurityGroups/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkSecurityGroups
+severity: 1
+labels:
+ guid: da1a3c06-d1d5-a940-9a99-fcc05966fe7c
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Network Security Groups without NSG Flow logs configured or disabled.
+ resources
+ | where type =~ "Microsoft.Network/networkSecurityGroups"
+ | project name, id, tags, lowerCaseNsgId = tolower(id)
+ | join kind = leftouter (
+ resources
+ | where type == "microsoft.network/networkwatchers/flowlogs" and properties.enabled == true
+ | project flowLogName = name, lowerCaseTargetNsgId = tolower(properties.targetResourceId)
+ )
+ on $left.lowerCaseNsgId == $right.lowerCaseTargetNsgId
+ | where isempty(lowerCaseTargetNsgId)
+ | project recommendationId = "da1a3c06-d1d5-a940-9a99-fcc05966fe7c", name, id, tags, param1 = "NSGFlowLog: Not configured/Disabled"
diff --git a/v2/recos/Services/MicrosoftNetwork-p2sVpnGateways/aprl-UserVpnRouteLimitsConnectionCountLimits.yaml b/v2/recos/Services/MicrosoftNetwork-p2sVpnGateways/aprl-UserVpnRouteLimitsConnectionCountLimits.yaml
new file mode 100644
index 000000000..6d6631538
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-p2sVpnGateways/aprl-UserVpnRouteLimitsConnectionCountLimits.yaml
@@ -0,0 +1,19 @@
+name: aprl-UserVpnRouteLimitsConnectionCountLimits
+title: Monitor health for v-Hub's Point-to-Site VPN gateways
+description: Set up monitoring and alerts for Point-to-Site VPN gateways. Create alert
+ rule for ensuring promptly response to critical events such as Gateway overutilization,
+ connection count limits and User VPN route limits.
+source:
+ type: aprl
+ file: azure-resources/Network/p2sVpnGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/p2sVpnGateways
+severity: 0
+labels:
+ guid: fd43ea32-2ccf-49a8-ada4-9a78794e3ff1
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-PrivateDnsZoneContributorRolePrivateDnsZones.yaml b/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-PrivateDnsZoneContributorRolePrivateDnsZones.yaml
new file mode 100644
index 000000000..f4fd49731
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-PrivateDnsZoneContributorRolePrivateDnsZones.yaml
@@ -0,0 +1,18 @@
+name: aprl-PrivateDnsZoneContributorRolePrivateDnsZones
+title: Protect private DNS zones and records
+description: |-
+ Private DNS zones and records are critical and their deletion can cause service outages. To protect against unauthorized or accidental changes, the Private DNS Zone Contributor role, a built-in role for managing these resources, should be assigned to specific users or groups.
+source:
+ type: aprl
+ file: azure-resources/Network/privateDnsZones/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/privateDnsZones
+severity: 1
+labels:
+ guid: 2820f6d6-a23c-7a40-aec5-506f3bd1aeb6
+ area: Security
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-PrivateDnsZonesHealthDnsRecords.yaml b/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-PrivateDnsZonesHealthDnsRecords.yaml
new file mode 100644
index 000000000..b9438e842
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-PrivateDnsZonesHealthDnsRecords.yaml
@@ -0,0 +1,18 @@
+name: aprl-PrivateDnsZonesHealthDnsRecords
+title: Monitor Private DNS Zones health and set up alerts
+description: |-
+ The records in a private DNS zone are only resolvable from linked virtual networks. You can link a private DNS zone to multiple networks and enable autoregistration to manage DNS records for virtual machines automatically.
+source:
+ type: aprl
+ file: azure-resources/Network/privateDnsZones/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/privateDnsZones
+severity: 0
+labels:
+ guid: ab896e8c-49b9-2c44-adec-98339aff7821
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-ResourceFailoverEntriesAzurePrivateDns.yaml b/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-ResourceFailoverEntriesAzurePrivateDns.yaml
new file mode 100644
index 000000000..164e697d6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-privateDnsZones/aprl-ResourceFailoverEntriesAzurePrivateDns.yaml
@@ -0,0 +1,19 @@
+name: aprl-ResourceFailoverEntriesAzurePrivateDns
+title: Align Production and DR zones with identical workload and resource failover
+ entries
+description: |-
+ Azure Private DNS offers a reliable, secure way to handle domain names within virtual networks, using custom domains instead of default Azure names. Records in these zones aren't internet-accessible, only resolvable within linked virtual networks.
+source:
+ type: aprl
+ file: azure-resources/Network/privateDnsZones/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/privateDnsZones
+severity: 1
+labels:
+ guid: 1e02335c-1f90-fd4e-a5a5-d359c7b22d70
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-privateEndpoints/aprl-TwoCustomPropertiesStaticIpAddress.yaml b/v2/recos/Services/MicrosoftNetwork-privateEndpoints/aprl-TwoCustomPropertiesStaticIpAddress.yaml
new file mode 100644
index 000000000..6f70b77a3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-privateEndpoints/aprl-TwoCustomPropertiesStaticIpAddress.yaml
@@ -0,0 +1,23 @@
+name: aprl-TwoCustomPropertiesStaticIpAddress
+title: Resolve issues with Private Endpoints in non Succeeded connection state
+description: |-
+ A private endpoint has two custom properties, static IP address and the network interface name, which must be set at creation. If not in Succeeded state, there may be issues with the endpoint or associated resource.
+source:
+ type: aprl
+ file: azure-resources/Network/privateEndpoints/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/privateEndpoints
+severity: 1
+labels:
+ guid: b89c9acc-0aba-fb44-9ff2-3dbfcf97dce7
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // This query will return all Private Endpoints that are not in a Succeeded state
+ resources
+ | where type =~ "microsoft.network/privateendpoints"
+ | where (properties.provisioningState =~ "Succeeded" and (properties.privateLinkServiceConnections[0].properties.provisioningState =~ "Succeeded" or properties.manualPrivateLinkServiceConnections[0].properties.provisioningState =~ "Succeeded")) == false
+ | project recommendationId = "b89c9acc-0aba-fb44-9ff2-3dbfcf97dce7", name, id, tags, param1 = strcat("provisioningState: ", tostring(properties.provisioningState)), param2 = strcat("provisioningState: ", tostring(properties.privateLinkServiceConnections[0].properties.provisioningState)), param3 = strcat("manualProvisioningState: ", tostring(properties.manualPrivateLinkServiceConnections[0].properties.provisioningState))
diff --git a/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-BasicSkuPublicIpAddressesStandardSkuPublicIpAddresses.yaml b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-BasicSkuPublicIpAddressesStandardSkuPublicIpAddresses.yaml
new file mode 100644
index 000000000..b0b81462d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-BasicSkuPublicIpAddressesStandardSkuPublicIpAddresses.yaml
@@ -0,0 +1,23 @@
+name: aprl-BasicSkuPublicIpAddressesStandardSkuPublicIpAddresses
+title: Upgrade Basic SKU public IP addresses to Standard SKU
+description: |-
+ Basic SKU public IP addresses will be retired on September 30, 2025. Users are advised to upgrade to Standard SKU public IP addresses before this date to avoid service disruptions.
+source:
+ type: aprl
+ file: azure-resources/Network/publicIPAddresses/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/publicIPAddresses
+severity: 1
+labels:
+ guid: 5cea1501-6fe4-4ec4-ac8f-f72320eb18d3
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph query
+ // List Basic SKU public IP addresses
+ Resources
+ | where type =~ "Microsoft.Network/publicIPAddresses"
+ | where sku.name =~ "Basic"
+ | project recommendationId = "5cea1501-6fe4-4ec4-ac8f-f72320eb18d3", name, id, tags, param1 = strcat("sku: ", sku.name)
diff --git a/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-PublicIpAddressesDdosProtection.yaml b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-PublicIpAddressesDdosProtection.yaml
new file mode 100644
index 000000000..018adce44
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-PublicIpAddressesDdosProtection.yaml
@@ -0,0 +1,23 @@
+name: aprl-PublicIpAddressesDdosProtection
+title: Public IP addresses should have DDoS protection enabled
+description: |-
+ DDoS attacks can be targeted at any endpoint that is publicly reachable through the internet.
+source:
+ type: aprl
+ file: azure-resources/Network/publicIPAddresses/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/publicIPAddresses
+severity: 1
+labels:
+ guid: c4254c66-b8a5-47aa-82f6-e7d7fb418f47
+ area: Security
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph query
+ // Public IP addresses should have DDoS protection enabled
+ resources
+ | where type =~ 'Microsoft.Network/publicIPAddresses'
+ | where properties.ddosSettings.protectionMode !in~ ("Enabled", "VirtualNetworkInherited")
+ | project recommendationId="c4254c66-b8a5-47aa-82f6-e7d7fb418f47", name, id, tags, param1=strcat("Apply either DDoS Network protection or DDoS IP Protrection to the public IP address.")
diff --git a/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-PublicIpAddressesSingleZoneFailure.yaml b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-PublicIpAddressesSingleZoneFailure.yaml
new file mode 100644
index 000000000..dd5de9ed7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-PublicIpAddressesSingleZoneFailure.yaml
@@ -0,0 +1,24 @@
+name: aprl-PublicIpAddressesSingleZoneFailure
+title: Use Standard SKU and Zone-Redundant IPs when applicable
+description: |-
+ Public IP addresses in Azure can be of standard SKU, available as non-zonal, zonal, or zone-redundant. Zone-redundant IPs are accessible across all zones, resisting any single zone failure, thereby providing higher resilience.
+source:
+ type: aprl
+ file: azure-resources/Network/publicIPAddresses/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/publicIPAddresses
+severity: 0
+labels:
+ guid: c63b81fb-7afc-894c-a840-91bb8a8dcfaf
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph query
+ // List public IP addresses that are not Zone-Redundant
+ Resources
+ | where type =~ "Microsoft.Network/publicIPAddresses" and sku.tier =~ "Regional"
+ | where isempty(zones) or array_length(zones) <= 1
+ | extend az = case(isempty(zones), "Non-zonal", array_length(zones) <= 1, strcat("Zonal (", strcat_array(zones, ","), ")"), zones)
+ | project recommendationId = "c63b81fb-7afc-894c-a840-91bb8a8dcfaf", name, id, tags, param1 = strcat("sku: ", sku.name), param2 = strcat("availabilityZone: ", az)
diff --git a/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-SecureInternetConnectionsSnatPortExhaustion.yaml b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-SecureInternetConnectionsSnatPortExhaustion.yaml
new file mode 100644
index 000000000..4f85bc8ec
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-publicIPAddresses/aprl-SecureInternetConnectionsSnatPortExhaustion.yaml
@@ -0,0 +1,23 @@
+name: aprl-SecureInternetConnectionsSnatPortExhaustion
+title: Use NAT gateway for outbound connectivity to avoid SNAT Exhaustion
+description: |-
+ Prevent connectivity failures due to SNAT port exhaustion by employing NAT gateway for outbound traffic from virtual networks, ensuring dynamic scaling and secure internet connections.
+source:
+ type: aprl
+ file: azure-resources/Network/publicIPAddresses/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/publicIPAddresses
+severity: 1
+labels:
+ guid: 1adba190-5c4c-e646-8527-dd1b2a6d8b15
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph query
+ // Lists VMs with PIPs
+ resources
+ | where type =~ 'Microsoft.Network/publicIPAddresses'
+ | where tostring(properties.ipConfiguration.id) contains "microsoft.network/networkinterfaces"
+ | project recommendationId="1adba190-5c4c-e646-8527-dd1b2a6d8b15", name, id, tags, param1=strcat("Migrate from instance IP to NAT Gateway")
diff --git a/v2/recos/Services/MicrosoftNetwork-routeTables/aprl-ImproperRoutingChangesRouteTables.yaml b/v2/recos/Services/MicrosoftNetwork-routeTables/aprl-ImproperRoutingChangesRouteTables.yaml
new file mode 100644
index 000000000..787213ddf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-routeTables/aprl-ImproperRoutingChangesRouteTables.yaml
@@ -0,0 +1,39 @@
+name: aprl-ImproperRoutingChangesRouteTables
+title: Monitor changes in Route Tables with Azure Monitor
+description: |-
+ Create Alerts with Azure Monitor for operations like Create or Update Route Table to spot unauthorized/undesired changes in production resources. This setup aids in identifying improper routing changes, including efforts to evade firewalls or access resources from outside.
+source:
+ type: aprl
+ file: azure-resources/Network/routeTables/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/routeTables
+severity: 0
+labels:
+ guid: 23b2dfc7-7e5d-9443-9f62-980ca621b561
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Route Tables without alerts for modification configured.
+ resources
+ | where type =~ "Microsoft.Network/routeTables"
+ | project name, id, tags, lowerCaseRouteTableId = tolower(id)
+ | join kind = leftouter (
+ resources
+ | where type =~ "Microsoft.Insights/activityLogAlerts" and properties.enabled == true
+ | mv-expand scope = properties.scopes
+ | where scope has "Microsoft.Network/routeTables"
+ | project alertName = name, conditionJson = dynamic_to_json(properties.condition.allOf), scope
+ | where conditionJson has '"Administrative"' and (
+ // Create or Update Route Table
+ (conditionJson has '"Microsoft.Network/routeTables/write"') or
+ // All Administrative operations
+ (conditionJson !has '"Microsoft.Network/routeTables/write"' and conditionJson !has '"Microsoft.Network/routeTables/delete"' and conditionJson !has '"Microsoft.Network/routeTables/join/action"')
+ )
+ | project lowerCaseRouteTableIdOfScope = tolower(scope)
+ )
+ on $left.lowerCaseRouteTableId == $right.lowerCaseRouteTableIdOfScope
+ | where isempty(lowerCaseRouteTableIdOfScope)
+ | project recommendationId = "23b2dfc7-7e5d-9443-9f62-980ca621b561", name, id, tags, param1 = "ModificationAlert: Not configured/Disabled"
diff --git a/v2/recos/Services/MicrosoftNetwork-routeTables/aprl-RouteTablesAccidentalChanges.yaml b/v2/recos/Services/MicrosoftNetwork-routeTables/aprl-RouteTablesAccidentalChanges.yaml
new file mode 100644
index 000000000..c7282377d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-routeTables/aprl-RouteTablesAccidentalChanges.yaml
@@ -0,0 +1,18 @@
+name: aprl-RouteTablesAccidentalChanges
+title: Configure locks for Route Tables to avoid accidental changes or deletion
+description: |-
+ As an administrator, you can protect Azure subscriptions, resource groups, or resources from accidental deletions and modifications by setting locks.
+source:
+ type: aprl
+ file: azure-resources/Network/routeTables/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/routeTables
+severity: 2
+labels:
+ guid: 89d1166a-1a20-0f46-acc8-3194387bf127
+ area: Governance
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualHubs/Security/revcl-RouteServerSubnet.yaml b/v2/recos/Services/MicrosoftNetwork-virtualHubs/Security/revcl-RouteServerSubnet.yaml
new file mode 100644
index 000000000..be051384a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualHubs/Security/revcl-RouteServerSubnet.yaml
@@ -0,0 +1,20 @@
+name: revcl-RouteServerSubnet
+title: If using Route Server, use a /27 prefix for the Route Server subnet.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualhubs
+waf: Security
+severity: 2
+labels:
+ guid: 91b9d7d5-91e1-4dcb-8f1f-fa7e465646cc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/route-server/quickstart-configure-route-server-portal#create-a-route-server-1
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets
+ | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix
+ | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName ==
+ 'RouteServerSubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct
+ id, compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualHubs/aprl-AlertRuleBgpStatus.yaml b/v2/recos/Services/MicrosoftNetwork-virtualHubs/aprl-AlertRuleBgpStatus.yaml
new file mode 100644
index 000000000..a08b26a18
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualHubs/aprl-AlertRuleBgpStatus.yaml
@@ -0,0 +1,16 @@
+name: aprl-AlertRuleBgpStatus
+title: Monitor health for v-Hubs
+description: Set up monitoring and alerts for v-Hubs. Create alert rule for ensuring
+ promptly response to changes in BGP status and Data processed by v-Hubs.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualHubs/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualHubs
+severity: 1
+labels:
+ guid: 30ec8a5e-46de-4323-87e9-a7c56b72813b
+ area: Monitoring and Alerting
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Cost/revcl-CentralHubVirtualNetworkNetworkingServices.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Cost/revcl-CentralHubVirtualNetworkNetworkingServices.yaml
new file mode 100644
index 000000000..948c1ac3d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Cost/revcl-CentralHubVirtualNetworkNetworkingServices.yaml
@@ -0,0 +1,17 @@
+name: revcl-CentralHubVirtualNetworkNetworkingServices
+title: Ensure that shared networking services, including ExpressRoute gateways, VPN
+ gateways, and Azure Firewall or partner NVAs in the central-hub virtual network.
+ If necessary, also deploy DNS servers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Cost
+severity: 0
+labels:
+ guid: 7dd61623-a364-4a90-9eca-e48ebd54cd7d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/expressroute
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Operations/revcl-AzureMonitorEndState.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Operations/revcl-AzureMonitorEndState.yaml
new file mode 100644
index 000000000..95f4f255b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Operations/revcl-AzureMonitorEndState.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureMonitorEndState
+title: Use Azure Monitor for Networks to monitor the end-to-end state of the networks
+ on Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Operations
+severity: 1
+labels:
+ guid: 4722d929-c1b1-4cd6-81f5-4b29bade39ad
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/insights/network-insights-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-network-monitoring/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Performance/revcl-GlobalVirtualNetworkPeeringsNetworkArchitectures.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Performance/revcl-GlobalVirtualNetworkPeeringsNetworkArchitectures.yaml
new file mode 100644
index 000000000..79ae315fb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Performance/revcl-GlobalVirtualNetworkPeeringsNetworkArchitectures.yaml
@@ -0,0 +1,19 @@
+name: revcl-GlobalVirtualNetworkPeeringsNetworkArchitectures
+title: For network architectures with multiple hub-and-spoke topologies across Azure
+ regions, use global virtual network peerings between the hub VNets to connect the
+ regions to each other.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Performance
+severity: 1
+labels:
+ guid: cc881471-607c-41cc-a0e6-14658dd558f9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-networks-faq#can-i-create-a-peering-connection-to-a-vnet-in-a-different-region
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/azure-administrator-manage-virtual-networks/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Performance/revcl-IpAddressSpaceLargeVirtualNetworks.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Performance/revcl-IpAddressSpaceLargeVirtualNetworks.yaml
new file mode 100644
index 000000000..a77541ce2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Performance/revcl-IpAddressSpaceLargeVirtualNetworks.yaml
@@ -0,0 +1,23 @@
+name: revcl-IpAddressSpaceLargeVirtualNetworks
+title: Ensure that IP address space isn't wasted, don't create unnecessarily large
+ virtual networks (for example /16)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Performance
+severity: 0
+labels:
+ guid: 33aad5e8-c68e-41d7-9667-313b4f5664b5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-network-infrastructure/
+queries:
+ arg: resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace
+ = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes)
+ | mvexpand addressSpace | mvexpand addressPrefix | extend addressMask = split(addressPrefix,'/')[1]
+ | extend compliant = addressMask > 16 | project name, id, subscriptionId, resourceGroup,
+ addressPrefix, compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-CentralHubVirtualNetworkVnetPeeringLimits.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-CentralHubVirtualNetworkVnetPeeringLimits.yaml
new file mode 100644
index 000000000..503038c54
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-CentralHubVirtualNetworkVnetPeeringLimits.yaml
@@ -0,0 +1,20 @@
+name: revcl-CentralHubVirtualNetworkVnetPeeringLimits
+title: When connecting spoke virtual networks to the central hub virtual network,
+ consider VNet peering limits (500), the maximum number of prefixes that can be advertised
+ via ExpressRoute (1000)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Reliability
+severity: 1
+labels:
+ guid: 0e7c28ec-9366-4572-83b0-f4664b1d944a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits
+queries:
+ arg: resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings
+ | summarize peeringcount = count() by id | extend compliant = (peeringcount <
+ 450) | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-NetworkOutboundTrafficConfigurationDefaultOutboundAccess.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-NetworkOutboundTrafficConfigurationDefaultOutboundAccess.yaml
new file mode 100644
index 000000000..688a1ae44
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-NetworkOutboundTrafficConfigurationDefaultOutboundAccess.yaml
@@ -0,0 +1,18 @@
+name: revcl-NetworkOutboundTrafficConfigurationDefaultOutboundAccess
+title: Assess and review network outbound traffic configuration and strategy before
+ the upcoming breaking change. On September 30, 2025, default outbound access for
+ new deployments will be retired and only explicit access configurations will be
+ allowed
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Reliability
+severity: 0
+labels:
+ guid: b034c01e-110b-463a-b36e-e3346e57f225
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-OverlappingIpAddressRangesDrSites.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-OverlappingIpAddressRangesDrSites.yaml
new file mode 100644
index 000000000..9c670d4cb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-OverlappingIpAddressRangesDrSites.yaml
@@ -0,0 +1,17 @@
+name: revcl-OverlappingIpAddressRangesDrSites
+title: Avoid using overlapping IP address ranges for production and DR sites.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Reliability
+severity: 0
+labels:
+ guid: f348ef25-4c27-4d42-b8bb-ac7571559ab9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/site-recovery/concepts-on-premises-to-azure-networking#retain-ip-addresses
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/az-104-manage-virtual-networks/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-RemoteVirtualNetworkVnetPeerings.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-RemoteVirtualNetworkVnetPeerings.yaml
new file mode 100644
index 000000000..fbc1d2d07
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-RemoteVirtualNetworkVnetPeerings.yaml
@@ -0,0 +1,19 @@
+name: revcl-RemoteVirtualNetworkVnetPeerings
+title: Use the setting 'Allow traffic to remote virtual network' when configuring
+ VNet peerings
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Reliability
+severity: 0
+labels:
+ guid: c76cb5a2-abe2-11ed-afa1-0242ac120002
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/virtual-network-manage-peering
+queries:
+ arg: resources | where type == 'microsoft.network/virtualnetworks' | mvexpand properties.virtualNetworkPeerings
+ | project id, peeringName=properties_virtualNetworkPeerings.name, compliant =
+ (properties_virtualNetworkPeerings.properties.allowVirtualNetworkAccess == True)
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-RouteTableLimit.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-RouteTableLimit.yaml
new file mode 100644
index 000000000..1ea630a53
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Reliability/revcl-RouteTableLimit.yaml
@@ -0,0 +1,18 @@
+name: revcl-RouteTableLimit
+title: Consider the limit of routes per route table (400).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Reliability
+severity: 1
+labels:
+ guid: 3d457936-e9b7-41eb-bdff-314b26450b12
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=/azure/virtual-network/toc.json#azure-resource-manager-virtual-networking-limits
+queries:
+ arg: resources | where type=='microsoft.network/routetables' | mvexpand properties.routes
+ | summarize routeCount = count() by id | extend compliant = (routeCount < 360)
+ | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-AddressAllocationRangesIpAddresses.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-AddressAllocationRangesIpAddresses.yaml
new file mode 100644
index 000000000..c9718dc14
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-AddressAllocationRangesIpAddresses.yaml
@@ -0,0 +1,24 @@
+name: revcl-AddressAllocationRangesIpAddresses
+title: Use IP addresses from the address allocation ranges for private internets (RFC
+ 1918).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Security
+severity: 2
+labels:
+ guid: 3f630472-2dd6-49c5-a5c2-622f54b69bad
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-network-infrastructure/
+queries:
+ arg: resources | where type == 'microsoft.network/virtualnetworks' | extend addressSpace
+ = todynamic(properties.addressSpace) | extend addressPrefix = todynamic(properties.addressSpace.addressPrefixes)
+ | mvexpand addressSpace | mvexpand addressPrefix | project name, id, location,
+ resourceGroup, subscriptionId, cidr = addressPrefix | extend compliant = (cidr
+ matches regex @'^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)') | project
+ id, compliant, cidr
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-DdosRelatedLogsPublicIpAddresses.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-DdosRelatedLogsPublicIpAddresses.yaml
new file mode 100644
index 000000000..e8b2fd22d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-DdosRelatedLogsPublicIpAddresses.yaml
@@ -0,0 +1,18 @@
+name: revcl-DdosRelatedLogsPublicIpAddresses
+title: Add diagnostic settings to save DDoS related logs for all the protected public
+ IP addresses (DDoS IP or Network Protection).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Security
+severity: 0
+labels:
+ guid: b1c82a3f-2320-4dfa-8972-7ae4823c8930
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-IpProtectionPlansPublicIpAddresses.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-IpProtectionPlansPublicIpAddresses.yaml
new file mode 100644
index 000000000..adc55f0be
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-IpProtectionPlansPublicIpAddresses.yaml
@@ -0,0 +1,18 @@
+name: revcl-IpProtectionPlansPublicIpAddresses
+title: Use a DDoS Network or IP protection plans for all Public IP addresses in application
+ landing zones.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Security
+severity: 1
+labels:
+ guid: 143b16c3-1d7a-4a9b-9470-4489a8042d88
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-PublicIpAddressesEndpointsIpProtectionPlans.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-PublicIpAddressesEndpointsIpProtectionPlans.yaml
new file mode 100644
index 000000000..ee7d059e8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-PublicIpAddressesEndpointsIpProtectionPlans.yaml
@@ -0,0 +1,18 @@
+name: revcl-PublicIpAddressesEndpointsIpProtectionPlans
+title: Use Azure DDoS Network or IP Protection plans to help protect Public IP Addresses
+ endpoints within the virtual networks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Security
+severity: 0
+labels:
+ guid: 088137f5-e6c4-4cfd-9e50-4547c2447ec6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ddos-protection/ddos-protection-reference-architectures
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-SpokeNetworkTopologyNetworkDesign.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-SpokeNetworkTopologyNetworkDesign.yaml
new file mode 100644
index 000000000..0526bdadd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-SpokeNetworkTopologyNetworkDesign.yaml
@@ -0,0 +1,18 @@
+name: revcl-SpokeNetworkTopologyNetworkDesign
+title: Leverage a network design based on the traditional hub-and-spoke network topology
+ for network scenarios that require maximum flexibility.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Security
+severity: 1
+labels:
+ guid: e8bbac75-7155-49ab-a153-e8908ae28c84
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/enterprise-scale/network-topology-and-connectivity
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-network-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-VirtualNetworkServiceEndpointsDefault.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-VirtualNetworkServiceEndpointsDefault.yaml
new file mode 100644
index 000000000..ed98fe859
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/Security/revcl-VirtualNetworkServiceEndpointsDefault.yaml
@@ -0,0 +1,22 @@
+name: revcl-VirtualNetworkServiceEndpointsDefault
+title: Don't enable virtual network service endpoints by default on all subnets.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworks
+waf: Security
+severity: 1
+labels:
+ guid: 4704489a-8042-4d88-b79d-17b73b22a5a6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn
+queries:
+ arg: resources | where type =~ 'microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets
+ = properties.subnets | mv-expand subnets | project id = subnets.id, resourceGroup,
+ VNet = name, serviceEndpoints = subnets.properties.serviceEndpoints, compliant
+ = (isnull(subnets.properties.serviceEndpoints) or array_length(subnets.properties.serviceEndpoints)
+ == 0) | order by compliant asc
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-AzureDdosStandardProtectionPlansApplicationDesignBestPractices.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-AzureDdosStandardProtectionPlansApplicationDesignBestPractices.yaml
new file mode 100644
index 000000000..7ceb46c37
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-AzureDdosStandardProtectionPlansApplicationDesignBestPractices.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureDdosStandardProtectionPlansApplicationDesignBestPractices
+title: Shield public endpoints in Azure VNets with Azure DDoS Standard Protection
+ Plans
+description: |-
+ Azure DDoS Protection offers enhanced mitigation features against DDoS attacks and is auto-tuned to protect specific resources in a virtual network, combined with application design best practices.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworks/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworks
+severity: 0
+labels:
+ guid: 69ea1185-19b7-de40-9da1-9e8493547a5c
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find virtual networks without DDoS Protection
+ resources
+ | where type =~ 'Microsoft.Network/virtualNetworks'
+ | where isnull(properties.enableDdosProtection) or properties.enableDdosProtection contains "false"
+ | project recommendationId = "69ea1185-19b7-de40-9da1-9e8493547a5c", name, id, tags, param1 = strcat("EnableDdosProtection: ", properties.enableDdosProtection)
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-AzureServiceAccessVnetServiceEndpoints.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-AzureServiceAccessVnetServiceEndpoints.yaml
new file mode 100644
index 000000000..f0f2b765d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-AzureServiceAccessVnetServiceEndpoints.yaml
@@ -0,0 +1,30 @@
+name: aprl-AzureServiceAccessVnetServiceEndpoints
+title: When available, use Private Endpoints instead of Service Endpoints for PaaS
+ Services
+description: |-
+ Use VNet service endpoints only if Private Link isn't available and no data movement concerns. This feature restricts Azure service access to specified VNet and subnet, enhancing network security and isolating service traffic.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworks/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworks
+severity: 1
+labels:
+ guid: 24ae3773-cc2c-3649-88de-c9788e25b463
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find Subnets with Service Endpoint enabled for services that offer Private Link
+ resources
+ | where type =~ 'Microsoft.Network/virtualnetworks'
+ | mv-expand subnets = properties.subnets
+ | extend se = array_length(subnets.properties.serviceEndpoints)
+ | where se >= 1
+ | project name, id, tags, subnets, serviceEndpoints=todynamic(subnets.properties.serviceEndpoints)
+ | mv-expand serviceEndpoints
+ | project name, id, tags, subnetName=subnets.name, serviceName=tostring(serviceEndpoints.service)
+ | where serviceName in (parse_json('["Microsoft.CognitiveServices","Microsoft.AzureCosmosDB","Microsoft.DBforMariaDB","Microsoft.DBforMySQL","Microsoft.DBforPostgreSQL","Microsoft.EventHub","Microsoft.KeyVault","Microsoft.ServiceBus","Microsoft.Sql", "Microsoft.Storage","Microsoft.StorageSync","Microsoft.Synapse","Microsoft.Web"]'))
+ | project recommendationId = "24ae3773-cc2c-3649-88de-c9788e25b463", name, id, tags, param1 = strcat("subnet=", subnetName), param2=strcat("serviceName=",serviceName), param3="ServiceEndpoints=true"
diff --git a/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-NetworkSecurityGroupApplicationSecurityGroups.yaml b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-NetworkSecurityGroupApplicationSecurityGroups.yaml
new file mode 100644
index 000000000..2f76d2364
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-virtualNetworks/aprl-NetworkSecurityGroupApplicationSecurityGroups.yaml
@@ -0,0 +1,25 @@
+name: aprl-NetworkSecurityGroupApplicationSecurityGroups
+title: All Subnets should have a Network Security Group associated
+description: |-
+ Network security groups and application security groups allow filtering of inbound and outbound traffic by IP, port, and protocol, adding a security layer at the Subnet level.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworks/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworks
+severity: 2
+labels:
+ guid: f0bf9ae6-25a5-974d-87d5-025abec73539
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find Subnets without NSG associated
+ resources
+ | where type =~ 'Microsoft.Network/virtualnetworks'
+ | mv-expand subnets = properties.subnets
+ | extend sn = string_size(subnets.properties.networkSecurityGroup)
+ | where sn == 0 and subnets.name !in ("GatewaySubnet", "AzureFirewallSubnet", "AzureFirewallManagementSubnet", "RouteServerSubnet")
+ | project recommendationId = "f0bf9ae6-25a5-974d-87d5-025abec73539", name, id, tags, param1 = strcat("SubnetName: ", subnets.name), param2 = "NSG: False"
diff --git a/v2/recos/Services/MicrosoftNetwork-vpnGateways/aprl-PacketDropCountsMonitorGateway.yaml b/v2/recos/Services/MicrosoftNetwork-vpnGateways/aprl-PacketDropCountsMonitorGateway.yaml
new file mode 100644
index 000000000..620d85150
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetwork-vpnGateways/aprl-PacketDropCountsMonitorGateway.yaml
@@ -0,0 +1,19 @@
+name: aprl-PacketDropCountsMonitorGateway
+title: Monitor gateway for Site-to-site v-Hub's VPN gateway
+description: Set up monitoring and alerts for v-Hub's VPN Gateway. Create alert rule
+ for ensuring promptly response to critical events such as packet drop counts, BGP
+ status, Gateway overutilization.
+source:
+ type: aprl
+ file: azure-resources/Network/vpnGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/vpnGateways
+severity: 0
+labels:
+ guid: f0d4f766-ac19-48c4-b228-4601cc038baa
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/MicrosoftNetworkFunction-azureTrafficCollectors/aprl-LogAnalyticsWorkspaceExpressrouteTrafficCollector.yaml b/v2/recos/Services/MicrosoftNetworkFunction-azureTrafficCollectors/aprl-LogAnalyticsWorkspaceExpressrouteTrafficCollector.yaml
new file mode 100644
index 000000000..1231870a9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftNetworkFunction-azureTrafficCollectors/aprl-LogAnalyticsWorkspaceExpressrouteTrafficCollector.yaml
@@ -0,0 +1,19 @@
+name: aprl-LogAnalyticsWorkspaceExpressrouteTrafficCollector
+title: Ensure ExpressRoute Traffic Collector is enabled and configured for Direct
+ or Provider circuits
+description: |-
+ ExpressRoute Traffic Collector samples network flows over ExpressRoute Direct or Service-Provider based circuits, sending flow logs to a Log Analytics workspace for analysis or export to visualization tools/SIEM.
+source:
+ type: aprl
+ file: azure-resources/NetworkFunction/azureTrafficCollectors/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.NetworkFunction/azureTrafficCollectors
+severity: 1
+labels:
+ guid: 1ceea4b5-1d8b-4be0-9bbe-9594557be51a
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftOperationalInsights-workspaces/aprl-HealthStatusAlertRuleLogAnalyticsWorkspace.yaml b/v2/recos/Services/MicrosoftOperationalInsights-workspaces/aprl-HealthStatusAlertRuleLogAnalyticsWorkspace.yaml
new file mode 100644
index 000000000..5cf8b995e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftOperationalInsights-workspaces/aprl-HealthStatusAlertRuleLogAnalyticsWorkspace.yaml
@@ -0,0 +1,18 @@
+name: aprl-HealthStatusAlertRuleLogAnalyticsWorkspace
+title: Create a health status alert rule for your Log Analytics workspace
+description: |-
+ A health status alert will proactively notify you if a workspace becomes unavailable because of a datacenter or regional failure.
+source:
+ type: aprl
+ file: azure-resources/OperationalInsights/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.OperationalInsights/workspaces
+severity: 2
+labels:
+ guid: 4b77191c-cc3c-8c4e-844b-0f56d0927890
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftOperationalInsights-workspaces/aprl-LogAnalyticsDataExportLogAnalyticsWorkspace.yaml b/v2/recos/Services/MicrosoftOperationalInsights-workspaces/aprl-LogAnalyticsDataExportLogAnalyticsWorkspace.yaml
new file mode 100644
index 000000000..8ea8b3b11
--- /dev/null
+++ b/v2/recos/Services/MicrosoftOperationalInsights-workspaces/aprl-LogAnalyticsDataExportLogAnalyticsWorkspace.yaml
@@ -0,0 +1,18 @@
+name: aprl-LogAnalyticsDataExportLogAnalyticsWorkspace
+title: Enable Log Analytics data export to GRS or GZRS
+description: |-
+ Data export in a Log Analytics workspace to an Azure Storage account enhances data protection against regional failures by using geo-redundant (GRS) or geo-zone-redundant storage (GZRS), mainly for compliance and integration with other Azure services and tools.
+source:
+ type: aprl
+ file: azure-resources/OperationalInsights/workspaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.OperationalInsights/workspaces
+severity: 1
+labels:
+ guid: b36fd2ac-dd83-664a-ab48-ff7b8d3b189d
+ area: Governance
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftPowerBI-gateways/Reliability/revcl-PremisesDataGatewayClustersBusinessCriticalData.yaml b/v2/recos/Services/MicrosoftPowerBI-gateways/Reliability/revcl-PremisesDataGatewayClustersBusinessCriticalData.yaml
new file mode 100644
index 000000000..26a6e6dd8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPowerBI-gateways/Reliability/revcl-PremisesDataGatewayClustersBusinessCriticalData.yaml
@@ -0,0 +1,18 @@
+name: revcl-PremisesDataGatewayClustersBusinessCriticalData
+title: Use on-premises data gateway clusters to ensure high availability for business-critical
+ data
+description: Use an on-premises data gateway cluster to avoid single points of failure
+ and to load balance traffic across gateways.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.powerbi/gateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 89f89dc7-b44b-4e3b-8a27-f8b9e91be103
+links:
+- type: docs
+ url: https://learn.microsoft.com/data-integration/gateway/service-gateway-high-availability-clusters
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AssessmentScores.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AssessmentScores.yaml
new file mode 100644
index 000000000..470f6cffe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AssessmentScores.yaml
@@ -0,0 +1,15 @@
+name: revcl-AssessmentScores
+title: Generate assessment scores
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: b130a888-9579-4e76-a896-e710a7da7be9
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/compliance-manager
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AssestLifecycleBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AssestLifecycleBestPractices.yaml
new file mode 100644
index 000000000..76f6d1edb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AssestLifecycleBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-AssestLifecycleBestPractices
+title: Follow Assest lifecycle best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: b3d1325a-a225-4c6f-9e06-85edddea8a4b
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-asset-lifecycle
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AutomationBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AutomationBestPractices.yaml
new file mode 100644
index 000000000..18fef9e14
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-AutomationBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-AutomationBestPractices
+title: Follow automation best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 7cdeb3c6-1fc2-4fc1-9eea-6e69d8d9a3ed
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-automation
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BackupStrategyRegularBackups.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BackupStrategyRegularBackups.yaml
new file mode 100644
index 000000000..b77eb1f2f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BackupStrategyRegularBackups.yaml
@@ -0,0 +1,15 @@
+name: revcl-BackupStrategyRegularBackups
+title: Plan a backup strategy and take regular backups
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 0
+labels:
+ guid: 97b15b8a-219a-44ab-bb57-879024d22678
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BestPracticesGovernancePortal.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BestPracticesGovernancePortal.yaml
new file mode 100644
index 000000000..43c88fdc1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BestPracticesGovernancePortal.yaml
@@ -0,0 +1,15 @@
+name: revcl-BestPracticesGovernancePortal
+title: Follow Classification Best Practices in Governance Portal
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: c49d997c-b3d1-4325-aa22-5c6f4e0685ed
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-classification
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BestPracticesRegisteredSources.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BestPracticesRegisteredSources.yaml
new file mode 100644
index 000000000..860dd7dd8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-BestPracticesRegisteredSources.yaml
@@ -0,0 +1,15 @@
+name: revcl-BestPracticesRegisteredSources
+title: Follow Best Practices for Scanning Registered Sources
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 9579e76b-896e-4710-a7da-7be9956d14d3
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-scanning
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-CollectionArchitecturesBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-CollectionArchitecturesBestPractices.yaml
new file mode 100644
index 000000000..6d3a56735
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-CollectionArchitecturesBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-CollectionArchitecturesBestPractices
+title: Follow Collection Architectures and best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 896e710a-7da7-4be9-a56d-14d3c49d997c
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-collections
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataCenterLevelOutagePlan.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataCenterLevelOutagePlan.yaml
new file mode 100644
index 000000000..0a174f76b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataCenterLevelOutagePlan.yaml
@@ -0,0 +1,15 @@
+name: revcl-DataCenterLevelOutagePlan
+title: Plan for Data Center level outage
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 0
+labels:
+ guid: ab067acb-49e5-4b96-8332-4ecf8cc13318
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataContentSummaries.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataContentSummaries.yaml
new file mode 100644
index 000000000..dc832ea21
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataContentSummaries.yaml
@@ -0,0 +1,15 @@
+name: revcl-DataContentSummaries
+title: Profiling- get summaries of data content
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 956d14d3-c49d-4997-ab3d-1325aa225c6f
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/compliance-manager-scoring
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataStewardshipCatalogAdoption.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataStewardshipCatalogAdoption.yaml
new file mode 100644
index 000000000..09c444e4f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DataStewardshipCatalogAdoption.yaml
@@ -0,0 +1,15 @@
+name: revcl-DataStewardshipCatalogAdoption
+title: Use Data stewardship and Catalog adoption
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: aa3d3ef7-f317-46c4-a97b-15b8a219a4ab
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/catalog-adoption-insights
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DevopsPolicies.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DevopsPolicies.yaml
new file mode 100644
index 000000000..a353748d6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-DevopsPolicies.yaml
@@ -0,0 +1,15 @@
+name: revcl-DevopsPolicies
+title: Follow DevOps policies
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: b49e5b96-0332-44ec-b8cc-13318da61170
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-policies-devops
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageAzureStoragePlaceData.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageAzureStoragePlaceData.yaml
new file mode 100644
index 000000000..19ad6a3cc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageAzureStoragePlaceData.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAzureStoragePlaceData
+title: Leverage Azure Storage in-place data sharing with Microsoft Purview
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: d8d9a3ed-c218-4e68-9ab0-67acb49e5b96
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-data-share
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageDataEstateInsights.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageDataEstateInsights.yaml
new file mode 100644
index 000000000..cabd3b09b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageDataEstateInsights.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageDataEstateInsights
+title: Leverage Data Estate Insights
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 03324ecf-8cc1-4331-ada6-1170269f4fb4
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-insights
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageFtaResillencyHandbook-1.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageFtaResillencyHandbook-1.yaml
new file mode 100644
index 000000000..a00f8c4d8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageFtaResillencyHandbook-1.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageFtaResillencyHandbook-1
+title: Leverage FTA Resillency Handbook
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 1fc2fc14-eea6-4e69-b8d9-a3edc218e687
+links:
+- type: docs
+ url: https://polite-sea-0995b240f.2.azurestaticapps.net/technical-delivery-playbook/azure-services/analytics/purview/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageInsightsSensitivityLabels.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageInsightsSensitivityLabels.yaml
new file mode 100644
index 000000000..6baeade77
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageInsightsSensitivityLabels.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageInsightsSensitivityLabels
+title: Leverage Insights for Glossary, Classifications, Sensitivity Labels
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 19bf8d8e-5c58-46b7-b8cd-c15acc075ee9
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/glossary-insights
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageWorkflows.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageWorkflows.yaml
new file mode 100644
index 000000000..4f2ddb541
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-LeverageWorkflows.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageWorkflows
+title: 'Leverage Workflows '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: f3176c4b-97b1-45b8-a219-a4abeb578790
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-workflow
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MicrosoftPurviewDataOwnerAccessPolicies.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MicrosoftPurviewDataOwnerAccessPolicies.yaml
new file mode 100644
index 000000000..e8aaa3580
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MicrosoftPurviewDataOwnerAccessPolicies.yaml
@@ -0,0 +1,15 @@
+name: revcl-MicrosoftPurviewDataOwnerAccessPolicies
+title: Follow Microsoft Purview Data Owner access policies
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 4e0685ed-ddea-48a4-a7cd-eb3c61fc2fc1
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-policies-data-owner#microsoft-purview-policy-concepts
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MicrosoftPurviewEventHubs.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MicrosoftPurviewEventHubs.yaml
new file mode 100644
index 000000000..6068d3d1f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MicrosoftPurviewEventHubs.yaml
@@ -0,0 +1,16 @@
+name: revcl-MicrosoftPurviewEventHubs
+title: Use Microsoft Purview's Event Hubs to subscribe and create entities to another
+ account
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 6d20b56c-56a9-4581-89bf-8d8e5c586b7d
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/manage-kafka-dotnet
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MigrateGlossaryTermsMigrateRelationships.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MigrateGlossaryTermsMigrateRelationships.yaml
new file mode 100644
index 000000000..5991d6ab7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MigrateGlossaryTermsMigrateRelationships.yaml
@@ -0,0 +1,18 @@
+name: revcl-MigrateGlossaryTermsMigrateRelationships
+title: Practice Failover for BCDR
+description: 1. Create the new account 2. Migrate configuration items 3. Run scans
+ 4. Migrate custom typedefs and custom assets 5. Migrate relationships 6. Migrate
+ glossary terms 7. Assign classifications to assets 8. Assign contacts to assets
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: da611702-69f4-4fb4-aa3d-3ef7f3176c4b
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MigrationBestPracticesBackup.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MigrationBestPracticesBackup.yaml
new file mode 100644
index 000000000..197fd6c70
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-MigrationBestPracticesBackup.yaml
@@ -0,0 +1,15 @@
+name: revcl-MigrationBestPracticesBackup
+title: Follow Backup and Migration Best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: c218e687-ab06-47ac-a49e-5b9603324ecf
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/disaster-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PerformSensitivityLabellingPurviewDataMap.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PerformSensitivityLabellingPurviewDataMap.yaml
new file mode 100644
index 000000000..73edc07be
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PerformSensitivityLabellingPurviewDataMap.yaml
@@ -0,0 +1,15 @@
+name: revcl-PerformSensitivityLabellingPurviewDataMap
+title: Perform Sensitivity Labelling in the Purview Data Map
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: ddea8a4b-7cde-4b3c-91fc-2fc14eea6e69
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/sensitivity-labels-frequently-asked-questions
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewAccountsArchitecturesDeploymentBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewAccountsArchitecturesDeploymentBestPractices.yaml
new file mode 100644
index 000000000..b476d69be
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewAccountsArchitecturesDeploymentBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-PurviewAccountsArchitecturesDeploymentBestPractices
+title: Follow Purview accounts architectures and deployment best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 8cdc15ac-c075-4ee9-a130-a8889579e76b
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/deployment-best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewDataLineageBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewDataLineageBestPractices.yaml
new file mode 100644
index 000000000..fc38538fa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewDataLineageBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-PurviewDataLineageBestPractices
+title: Follow Purview Data Lineage Best Practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 5c586b7d-8cdc-415a-ac07-5ee9b130a888
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-lineage-azure-data-factory
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewGlossaryBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewGlossaryBestPractices.yaml
new file mode 100644
index 000000000..6d2fdc206
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewGlossaryBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-PurviewGlossaryBestPractices
+title: Follow Purview Glossary Best Practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 8cc13318-da61-4170-869f-4fb4aa3d3ef7
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-glossary
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewSecurityBestPractices.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewSecurityBestPractices.yaml
new file mode 100644
index 000000000..027b673d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-PurviewSecurityBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-PurviewSecurityBestPractices
+title: Follow Purview Security Best Practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 24d22678-6d20-4b56-a56a-958119bf8d8e
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-best-practices-security
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-SelfServiceAccessPolicies.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-SelfServiceAccessPolicies.yaml
new file mode 100644
index 000000000..f0e3a1d5b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-SelfServiceAccessPolicies.yaml
@@ -0,0 +1,15 @@
+name: revcl-SelfServiceAccessPolicies
+title: Follow Self-service access policies
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 4eea6e69-d8d9-4a3e-bc21-8e687ab067ac
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-self-service-data-access-policy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-UseInventoryOwnership.yaml b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-UseInventoryOwnership.yaml
new file mode 100644
index 000000000..6d64f463f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftPurview-accounts/Reliability/revcl-UseInventoryOwnership.yaml
@@ -0,0 +1,15 @@
+name: revcl-UseInventoryOwnership
+title: Use Inventory and Ownership
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.purview/accounts
+waf: Reliability
+severity: 2
+labels:
+ guid: eb578790-24d2-4267-a6d2-0b56c56a9581
+links:
+- type: docs
+ url: https://learn.microsoft.com/purview/concept-insights
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-BackupInstancesUnderlyingDatasource.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-BackupInstancesUnderlyingDatasource.yaml
new file mode 100644
index 000000000..a76cbc7b9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-BackupInstancesUnderlyingDatasource.yaml
@@ -0,0 +1,15 @@
+name: revcl-BackupInstancesUnderlyingDatasource
+title: check backup instances with the underlying datasource not found
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Cost
+severity: 1
+labels:
+ guid: 45901365-d38e-443f-abcb-d868266abca2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/multi-tenant/automation
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-RecoveryPointsVaultArchive.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-RecoveryPointsVaultArchive.yaml
new file mode 100644
index 000000000..826054d14
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-RecoveryPointsVaultArchive.yaml
@@ -0,0 +1,17 @@
+name: revcl-RecoveryPointsVaultArchive
+title: Move recovery points to vault-archive where applicable (Validate)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Cost
+severity: 1
+labels:
+ guid: 44be3b1a-27f8-4b9e-a1be-1f38df03a822
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2#how-retention-and-archiving-work
+- type: docs
+ url: https://azure.microsoft.com/pricing/reservations/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-SiteRecoveryStorageMissionCriticalApplications.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-SiteRecoveryStorageMissionCriticalApplications.yaml
new file mode 100644
index 000000000..3a1f27fa7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-SiteRecoveryStorageMissionCriticalApplications.yaml
@@ -0,0 +1,16 @@
+name: revcl-SiteRecoveryStorageMissionCriticalApplications
+title: Consider a good balance between site recovery storage and backup for non mission
+ critical applications
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Cost
+severity: 1
+labels:
+ guid: 69bad37a-ad53-4cc7-ae1d-76667357c449
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-microsoft-customer-agreement#design-recommendations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-StandardSsdDisksReplicationThroughput.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-StandardSsdDisksReplicationThroughput.yaml
new file mode 100644
index 000000000..21784ac54
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Cost/revcl-StandardSsdDisksReplicationThroughput.yaml
@@ -0,0 +1,16 @@
+name: revcl-StandardSsdDisksReplicationThroughput
+title: For ASR, consider using Standard SSD disks if the RPO/RTO and replication throughput
+ allow it
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Cost
+severity: 1
+labels:
+ guid: c2efc5d7-61d4-41d2-900b-b47a393a040f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/site-recovery/site-recovery-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Operations/revcl-AzureCompatibleRdPartyBackupSolutionAzureNativeBackupCapabilities.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Operations/revcl-AzureCompatibleRdPartyBackupSolutionAzureNativeBackupCapabilities.yaml
new file mode 100644
index 000000000..dc3fe4657
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Operations/revcl-AzureCompatibleRdPartyBackupSolutionAzureNativeBackupCapabilities.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureCompatibleRdPartyBackupSolutionAzureNativeBackupCapabilities
+title: Use Azure-native backup capabilities, or an Azure-compatible, 3rd-party backup
+ solution.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Operations
+severity: 1
+labels:
+ guid: f625ca44-e569-45f2-823a-ce8cb12308ca
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/backup-center-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-AzureBackupControlledAccess.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-AzureBackupControlledAccess.yaml
new file mode 100644
index 000000000..b964085c5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-AzureBackupControlledAccess.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureBackupControlledAccess
+title: Implement multi-user authorization for Azure Backup to ensure secure and controlled
+ access to backup resources
+description: Azure Backup's multi-user authorization enables fine-grained control
+ over user access to backup resources, allowing you to restrict privileges and ensure
+ proper authentication and authorization for backup operations.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Reliability
+severity: 2
+labels:
+ guid: 2cd463cb-bbc8-4ac2-a9eb-c92a43da1dae
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/multi-user-authorization-concept
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-AzureImmutableStorageUnauthorizedModifications.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-AzureImmutableStorageUnauthorizedModifications.yaml
new file mode 100644
index 000000000..420fbd79f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-AzureImmutableStorageUnauthorizedModifications.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureImmutableStorageUnauthorizedModifications
+title: Implement Immutable Storage for your vaults to protect against ransomware and
+ prevent unauthorized modifications to backups
+description: Azure Immutable Storage provides an additional layer of security by ensuring
+ that backup data stored in the vault cannot be modified or deleted for a specified
+ retention period. This helps safeguard your backups from ransomware attacks that
+ may attempt to compromise or manipulate your backup data.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Reliability
+severity: 2
+labels:
+ guid: 2cc88147-0607-4c1c-aa0e-614658dd458e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/backup-azure-immutable-vault-concept?source=recommendations&tabs=recovery-services-vault
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-DifferentBackupTypesAzureBackup.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-DifferentBackupTypesAzureBackup.yaml
new file mode 100644
index 000000000..74d50375b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-DifferentBackupTypesAzureBackup.yaml
@@ -0,0 +1,16 @@
+name: revcl-DifferentBackupTypesAzureBackup
+title: When using Azure Backup, consider the different backup types (GRS, ZRS & LRS)
+ as the default setting is GRS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: eba8cf22-45c6-4dc1-9b57-2cceb3b97ce5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-redundancy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-PotentialRansomwareEncryptionRansomwareAttacks.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-PotentialRansomwareEncryptionRansomwareAttacks.yaml
new file mode 100644
index 000000000..06ece256a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/Reliability/revcl-PotentialRansomwareEncryptionRansomwareAttacks.yaml
@@ -0,0 +1,18 @@
+name: revcl-PotentialRansomwareEncryptionRansomwareAttacks
+title: Enable Azure Backup enhanced soft delete for improved data protection and recovery
+description: Azure Backup enhanced soft delete provides critical protection against
+ ransomware attacks by retaining deleted backups, enabling recovery from potential
+ ransomware encryption or deletion.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.recoveryservices/vaults
+waf: Reliability
+severity: 1
+labels:
+ guid: b44be3b1-a27f-48b9-b91b-e1038df03a82
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/backup/backup-azure-enhanced-soft-delete-about
+queries: {}
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-AzureRecoveryServicesVaultsAzureMonitorAlerts.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-AzureRecoveryServicesVaultsAzureMonitorAlerts.yaml
new file mode 100644
index 000000000..640beef10
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-AzureRecoveryServicesVaultsAzureMonitorAlerts.yaml
@@ -0,0 +1,27 @@
+name: aprl-AzureRecoveryServicesVaultsAzureMonitorAlerts
+title: Migrate from classic alerts to built-in Azure Monitor alerts for Azure Recovery
+ Services Vaults
+description: |-
+ Classic alerts for Recovery Services vaults in Azure Backup will be retired on 31 March 2026.
+source:
+ type: aprl
+ file: azure-resources/RecoveryServices/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.RecoveryServices/vaults
+severity: 1
+labels:
+ guid: 2912472d-0198-4bdc-aa90-37f145790edc
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This Resource Graph query will return all Recovery services vault with Classic alerts enabled.
+ resources
+ | where type in~ ('microsoft.recoveryservices/vaults')
+ | extend monitoringSettings = parse_json(properties).monitoringSettings
+ | extend isUsingClassicAlerts = case(isnull(monitoringSettings),'Enabled',monitoringSettings.classicAlertSettings.alertsForCriticalOperations)
+ | extend isUsingJobsAlerts = case(isnull(monitoringSettings), 'Enabled', monitoringSettings.azureMonitorAlertSettings.alertsForAllJobFailures)
+ | where isUsingClassicAlerts == 'Enabled'
+ | project recommendationId = "2912472d-0198-4bdc-aa90-37f145790edc", name, id, tags, param1=strcat("isUsingClassicAlerts: ", isUsingClassicAlerts), param2=strcat("isUsingJobsAlerts: ", isUsingJobsAlerts)
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-RecoveryServicesVaultsSoftDelete.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-RecoveryServicesVaultsSoftDelete.yaml
new file mode 100644
index 000000000..22f55980a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-RecoveryServicesVaultsSoftDelete.yaml
@@ -0,0 +1,24 @@
+name: aprl-RecoveryServicesVaultsSoftDelete
+title: Enable Soft Delete for Recovery Services Vaults in Azure Backup
+description: |-
+ With soft delete, if backup data is deleted, the backup data is retained for 14 additional days, allowing the recovery of that backup item with no data loss with no cost to you. Soft delete is enabled by default. Disabling this feature isn't recommended.
+source:
+ type: aprl
+ file: azure-resources/RecoveryServices/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.RecoveryServices/vaults
+severity: 1
+labels:
+ guid: 9e39919b-78af-4a0b-b70f-c548dae97c25
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Find all Azure Recovery Services vaults that do not have soft delete enabled
+ resources
+ | where type == "microsoft.recoveryservices/vaults"
+ | mv-expand issoftDelete=properties.securitySettings.softDeleteSettings.softDeleteState
+ | where issoftDelete == 'Disabled'
+ | project recommendationId = "9e39919b-78af-4a0b-b70f-c548dae97c25", name, id, tags, param1=strcat("Soft Delete: ",issoftDelete)
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SecondaryAzurePairedRegionGrsRecoveryServicesVault.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SecondaryAzurePairedRegionGrsRecoveryServicesVault.yaml
new file mode 100644
index 000000000..a33c64da2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SecondaryAzurePairedRegionGrsRecoveryServicesVault.yaml
@@ -0,0 +1,27 @@
+name: aprl-SecondaryAzurePairedRegionGrsRecoveryServicesVault
+title: Enable Cross Region Restore for your GRS Recovery Services Vault
+description: |-
+ Cross Region Restore enables the restoration of Azure VMs in a secondary, Azure paired region, facilitating drills for audit or compliance and allowing recovery of VMs or disks in the event of a primary region disaster. It is an opt-in feature available exclusively for GRS vaults.
+source:
+ type: aprl
+ file: azure-resources/RecoveryServices/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.RecoveryServices/vaults
+severity: 1
+labels:
+ guid: 1549b91f-2ea0-4d4f-ba2a-4596becbe3de
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Displays all recovery services vaults that do not have cross region restore enabled
+ resources
+ | where type =~ "Microsoft.RecoveryServices/vaults" and
+ properties.redundancySettings.standardTierStorageRedundancy =~ "GeoRedundant" and
+ properties.redundancySettings.crossRegionRestore !~ "Enabled"
+ | extend
+ param1 = strcat("CrossRegionRestore: ", properties.redundancySettings.crossRegionRestore),
+ param2 = strcat("StorageReplicationType: ", properties.redundancySettings.standardTierStorageRedundancy)
+ | project recommendationId = "1549b91f-2ea0-4d4f-ba2a-4596becbe3de", name, id, tags, param1, param2
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SiteRecoveryTestFailoverDisasterRecoveryPlan.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SiteRecoveryTestFailoverDisasterRecoveryPlan.yaml
new file mode 100644
index 000000000..edafb17ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SiteRecoveryTestFailoverDisasterRecoveryPlan.yaml
@@ -0,0 +1,24 @@
+name: aprl-SiteRecoveryTestFailoverDisasterRecoveryPlan
+title: Validate VM functionality with a Site Recovery test failover to check performance
+ at target
+description: |-
+ Perform a test failover to validate your BCDR strategy and ensure that your applications are functioning correctly in the target region without impacting your production environment. Test your Disaster Recovery plan periodically without any data loss or downtime, using test failovers.
+source:
+ type: aprl
+ file: azure-resources/RecoveryServices/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.RecoveryServices/vaults
+severity: 0
+labels:
+ guid: 17e877f7-3a89-4205-8a24-0670de54ddcd
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all VMs where replication has been enabled but Test Failover was never performed
+ recoveryservicesresources
+ | where type == "microsoft.recoveryservices/vaults/replicationfabrics/replicationprotectioncontainers/replicationprotecteditems"
+ | where properties.providerSpecificDetails.dataSourceInfo.datasourceType == 'AzureVm' and isnull(properties.lastSuccessfulTestFailoverTime)
+ | project recommendationId="17e877f7-3a89-4205-8a24-0670de54ddcd" , name = properties.providerSpecificDetails.recoveryAzureVMName, id=properties.providerSpecificDetails.dataSourceInfo.resourceId
diff --git a/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SiteRecoveryVmFailoverSettingsVmNetworkSettings.yaml b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SiteRecoveryVmFailoverSettingsVmNetworkSettings.yaml
new file mode 100644
index 000000000..d986995e6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftRecoveryServices-vaults/aprl-SiteRecoveryVmFailoverSettingsVmNetworkSettings.yaml
@@ -0,0 +1,19 @@
+name: aprl-SiteRecoveryVmFailoverSettingsVmNetworkSettings
+title: Ensure static IP addresses in Site Recovery VM failover settings are available
+ in failover subnet
+description: |-
+ Ensure VM failover settings' static IP addresses are available in the failover subnet to maintain consistent IP assignment during failover, with the target VM receiving the same static IP if it's available or the next available IP otherwise. IP adjustments can be made in VM Network settings.
+source:
+ type: aprl
+ file: azure-resources/RecoveryServices/vaults/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.RecoveryServices/vaults
+severity: 0
+labels:
+ guid: e93bb813-b356-48f3-9bdf-a06a0a6ba039
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftResources-resourceGroups/aprl-EnsureResourceGroupResourceLocations.yaml b/v2/recos/Services/MicrosoftResources-resourceGroups/aprl-EnsureResourceGroupResourceLocations.yaml
new file mode 100644
index 000000000..a44a14a24
--- /dev/null
+++ b/v2/recos/Services/MicrosoftResources-resourceGroups/aprl-EnsureResourceGroupResourceLocations.yaml
@@ -0,0 +1,29 @@
+name: aprl-EnsureResourceGroupResourceLocations
+title: Ensure Resource Group and its Resources are located in the same Region
+description: |-
+ Ensure resource locations align with their resource group to manage resources during regional outages. ARM stores resource data, which if in an unavailable region, could halt updates, rendering resources read-only.
+source:
+ type: aprl
+ file: azure-resources/Resources/resourceGroups/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Resources/resourceGroups
+severity: 0
+labels:
+ guid: 98bd7098-49d6-491b-86f1-b143d6b1a0ff
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure Resource Groups that have resources deployed in a region different than the Resource Group region
+ resources
+ | project id, name, tags, resourceGroup, location
+ | where location != "global" // exclude global resources
+ | where resourceGroup != "networkwatcherrg" // exclude networkwatcherrg
+ | where split(id, "/", 3)[0] =~ "resourceGroups" // resource is in a resource group
+ | extend resourceGroupId = strcat_array(array_slice(split(id, "/"),0,4), "/") // create resource group resource id
+ | join (resourcecontainers | project containerid=id, containerlocation=location ) on $left.resourceGroupId == $right.['containerid'] // join to resourcecontainers table
+ | where location != containerlocation
+ | project recommendationId="98bd7098-49d6-491b-86f1-b143d6b1a0ff", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-AzureCognitiveSearchIndexIndexDefinition.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-AzureCognitiveSearchIndexIndexDefinition.yaml
new file mode 100644
index 000000000..cf00cefe1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-AzureCognitiveSearchIndexIndexDefinition.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureCognitiveSearchIndexIndexDefinition
+title: Backup and Restore an Azure Cognitive Search Index. Use this sample code to
+ back up index definition and snapshot to a series of Json files
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 0
+labels:
+ guid: 7be10278-57c1-4a61-8ee3-895aebfec5aa
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#back-up-and-restore-alternatives
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-AzureTrafficManagerRequests.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-AzureTrafficManagerRequests.yaml
new file mode 100644
index 000000000..6fcead21e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-AzureTrafficManagerRequests.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureTrafficManagerRequests
+title: Use Azure Traffic Manager to coordinate requests
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 1
+labels:
+ guid: 85ee93c9-f53c-4803-be51-e6e4aa37ff4e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#use-azure-traffic-manager-to-coordinate-requests
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-LeverageAvailabilityZonesRead.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-LeverageAvailabilityZonesRead.yaml
new file mode 100644
index 000000000..97bbfb7ef
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-LeverageAvailabilityZonesRead.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageAvailabilityZonesRead
+title: Leverage Availability Zones by enabling read and/or write replicas
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 0
+labels:
+ guid: 44dc5f2b-a032-4d03-aae8-90c3f2c0a4c3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#availability-zone-support
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-MultipleServicesUseIndexers.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-MultipleServicesUseIndexers.yaml
new file mode 100644
index 000000000..36b613ec7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-MultipleServicesUseIndexers.yaml
@@ -0,0 +1,17 @@
+name: revcl-MultipleServicesUseIndexers
+title: To synchronize data across multiple services either Use indexers for updating
+ content on multiple services or Use REST APIs for pushing content updates on multiple
+ services
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 1
+labels:
+ guid: 3c964882-aec9-4d44-9f68-4b5f2efbbdb6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#synchronize-data-across-multiple-services
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-ReadWriteOperationsReplicas.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-ReadWriteOperationsReplicas.yaml
new file mode 100644
index 000000000..eea7f5b1a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-ReadWriteOperationsReplicas.yaml
@@ -0,0 +1,15 @@
+name: revcl-ReadWriteOperationsReplicas
+title: Enable 3 replicas to have 99.9% availability for read/write operations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 1
+labels:
+ guid: 7d956fd9-788a-4845-9b9f-c0340972d810
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#high-availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-RegionalRedudancyAutomatedMethod.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-RegionalRedudancyAutomatedMethod.yaml
new file mode 100644
index 000000000..c9d201400
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-RegionalRedudancyAutomatedMethod.yaml
@@ -0,0 +1,17 @@
+name: revcl-RegionalRedudancyAutomatedMethod
+title: For regional redudancy, Manually create services in 2 or more regions for Search
+ as it doesn't provide an automated method of replicating search indexes across geographic
+ regions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 1
+labels:
+ guid: cd0730f0-0ff1-4b77-9a2b-2a1f7dd5e291
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#multiple-services-in-separate-geographic-regions
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-ReplicasAvailability.yaml b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-ReplicasAvailability.yaml
new file mode 100644
index 000000000..aa8896e89
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSearch-searchServices/Reliability/revcl-ReplicasAvailability.yaml
@@ -0,0 +1,15 @@
+name: revcl-ReplicasAvailability
+title: Enable 2 replicas to have 99.9% availability for read operations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.search/searchservices
+waf: Reliability
+severity: 0
+labels:
+ guid: 41faa1ed-b7f0-447d-8cba-4a4905e5bb83
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/search/search-reliability#high-availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AServiceBusClientAppServiceBusMessagingNamespace.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AServiceBusClientAppServiceBusMessagingNamespace.yaml
new file mode 100644
index 000000000..dce1e3a11
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AServiceBusClientAppServiceBusMessagingNamespace.yaml
@@ -0,0 +1,23 @@
+name: revcl-AServiceBusClientAppServiceBusMessagingNamespace
+title: When possible, your application should be using a managed identity to authenticate
+ to Azure Service Bus. If not, consider having the storage credential (SAS, service
+ principal credential) in Azure Key Vault or an equivalent service
+description: 'A Service Bus client app running inside an Azure App Service application
+ or in a virtual machine with enabled managed entities for Azure resources support
+ does not need to handle SAS rules and keys, or any other access tokens. The client
+ app only needs the endpoint address of the Service Bus Messaging namespace. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 786d60f9-6c96-4ad8-a55d-04c2b39c986b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/service-bus-managed-service-identity
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusNamespaceClasslessInterDomainRoutingNotation.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusNamespaceClasslessInterDomainRoutingNotation.yaml
new file mode 100644
index 000000000..50aa567f9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusNamespaceClasslessInterDomainRoutingNotation.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureServiceBusNamespaceClasslessInterDomainRoutingNotation
+title: Consider only allowing access to Azure Service Bus namespace from specific
+ IP addresses or ranges
+description: 'With IP firewall, you can restrict the public endpoint further to only
+ a set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing)
+ notation. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: ca5f06f1-58e3-4ea3-a92c-2de7e2165c3a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/service-bus-ip-filtering
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusNamespacesTransportLayerSecurity.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusNamespacesTransportLayerSecurity.yaml
new file mode 100644
index 000000000..13668987e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusNamespacesTransportLayerSecurity.yaml
@@ -0,0 +1,22 @@
+name: revcl-AzureServiceBusNamespacesTransportLayerSecurity
+title: 'Enforce a minimum required version of Transport Layer Security (TLS) for requests '
+description: Communication between a client application and an Azure Service Bus namespace
+ is encrypted using Transport Layer Security (TLS). Azure Service Bus namespaces
+ permit clients to send and receive data with TLS 1.0 and above. To enforce stricter
+ security measures, you can configure your Service Bus namespace to require that
+ clients send and receive data with a newer version of TLS.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 5c1ea55b-46a9-448f-b8ae-7d7e4b475b6c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/transport-layer-security-enforce-minimum-version
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusPremiumCustomerManagedKeyOption.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusPremiumCustomerManagedKeyOption.yaml
new file mode 100644
index 000000000..262c151ff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusPremiumCustomerManagedKeyOption.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureServiceBusPremiumCustomerManagedKeyOption
+title: Use customer-managed key option in data at rest encryption when required
+description: 'Azure Service Bus Premium provides encryption of data at rest. If you
+ use your own key, the data is still encrypted using the Microsoft-managed key, but
+ in addition the Microsoft-managed key will be encrypted using the customer-managed
+ key. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 2
+labels:
+ guid: 87af4a79-1f89-439b-ba47-768e14c11567
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/configure-customer-managed-key
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusPublicIpAddress.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusPublicIpAddress.yaml
new file mode 100644
index 000000000..3022140ae
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-AzureServiceBusPublicIpAddress.yaml
@@ -0,0 +1,22 @@
+name: revcl-AzureServiceBusPublicIpAddress
+title: Consider using private endpoints to access Azure Service Bus and disable public
+ network access when applicable.
+description: 'Azure Service Bus by default has a public IP address and is Internet-reachable.
+ Private endpoints allow traffic between your virtual network and Azure Service Bus
+ traverses over the Microsoft backbone network. In addition to that, you should disable
+ public endpoints if those are not used. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 9ae669ca-48e4-4a85-b222-3ece8bb12307
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/private-link-service
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-LeastPrivilegeDataPlaneRbacAzureServiceBus.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-LeastPrivilegeDataPlaneRbacAzureServiceBus.yaml
new file mode 100644
index 000000000..89374e4e2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-LeastPrivilegeDataPlaneRbacAzureServiceBus.yaml
@@ -0,0 +1,20 @@
+name: revcl-LeastPrivilegeDataPlaneRbacAzureServiceBus
+title: Use least privilege data plane RBAC
+description: 'When creating permissions, provide fine-grained control over a client''s
+ access to Azure Service Bus. Permissions in Azure Service Bus can and should be
+ scoped to the individual resource level e.g. queue, topic or subscription. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 0
+labels:
+ guid: f615658d-e558-4f93-9249-b831112dbd7e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/authenticate-application#azure-built-in-roles-for-azure-service-bus
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-ServiceBusNamespaceAdministrativeRootAccount.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-ServiceBusNamespaceAdministrativeRootAccount.yaml
new file mode 100644
index 000000000..b619b6c14
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-ServiceBusNamespaceAdministrativeRootAccount.yaml
@@ -0,0 +1,22 @@
+name: revcl-ServiceBusNamespaceAdministrativeRootAccount
+title: Avoid using root account when it is not necessary
+description: 'When you create a Service Bus namespace, a SAS rule named RootManageSharedAccessKey
+ is automatically created for the namespace. This policy has Manage permissions for
+ the entire namespace. It''s recommended that you treat this rule like an administrative
+ root account and don''t use it in your application. Using AAD as an authentication
+ provider with RBAC is recommended. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 8bcbf59b-ce65-4de8-a03f-97879468d66a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/service-bus-sas#shared-access-authorization-policies
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-VariousDataPlaneAccessOperationsAzureServiceBusResourceLogs.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-VariousDataPlaneAccessOperationsAzureServiceBusResourceLogs.yaml
new file mode 100644
index 000000000..13c86e8b9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/Security/revcl-VariousDataPlaneAccessOperationsAzureServiceBusResourceLogs.yaml
@@ -0,0 +1,22 @@
+name: revcl-VariousDataPlaneAccessOperationsAzureServiceBusResourceLogs
+title: Enable logging for security investigation. Use Azure Monitor to trace resource
+ logs and runtime audit logs (currently available only in the premium tier)
+description: Azure Service Bus resource logs include operational logs, virtual network
+ and IP filtering logs. Runtime audit logs capture aggregated diagnostic information
+ for various data plane access operations (such as send or receive messages) in Service
+ Bus.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.servicebus/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: af12e7f9-43f6-4304-922d-929c2b1cd622
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-bus-messaging/monitor-service-bus-reference
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/manage-identity-and-access/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/aprl-ServiceBusNamespacesUseServiceBus-1.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/aprl-ServiceBusNamespacesUseServiceBus-1.yaml
new file mode 100644
index 000000000..d0c20d4c4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/aprl-ServiceBusNamespacesUseServiceBus-1.yaml
@@ -0,0 +1,18 @@
+name: aprl-ServiceBusNamespacesUseServiceBus-1
+title: Enable auto-scale for production workloads on Service Bus namespaces
+description: |-
+ Use Service Bus with auto-scale for high availability. The Premium SKU supports auto-scale, ensuring that the resources are automatically scaled based on the load.
+source:
+ type: aprl
+ file: azure-resources/ServiceBus/namespaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ServiceBus/namespaces
+severity: 0
+labels:
+ guid: d810e3a8-600f-4be1-895b-1a93e61d37fd
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftServiceBus-namespaces/aprl-ServiceBusNamespacesUseServiceBus.yaml b/v2/recos/Services/MicrosoftServiceBus-namespaces/aprl-ServiceBusNamespacesUseServiceBus.yaml
new file mode 100644
index 000000000..f58533911
--- /dev/null
+++ b/v2/recos/Services/MicrosoftServiceBus-namespaces/aprl-ServiceBusNamespacesUseServiceBus.yaml
@@ -0,0 +1,23 @@
+name: aprl-ServiceBusNamespacesUseServiceBus
+title: Enable Availability Zones for Service Bus namespaces
+description: |-
+ Use Service Bus with zone redundancy for high availability. The Premium SKU supports availability zones, ensuring isolation within the same region. It manages 3 copies of the messaging store, kept in sync.
+source:
+ type: aprl
+ file: azure-resources/ServiceBus/namespaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ServiceBus/namespaces
+severity: 0
+labels:
+ guid: 20057905-262c-49fe-a9be-49f423afb359
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns Service Bus namespaces that do not have any availability zones enabled
+ resources
+ | where type =~ 'Microsoft.ServiceBus/namespaces'
+ | where properties.zoneRedundant == 'false'
+ | project recommendationId = "20057905-262c-49fe-a9be-49f423afb359", name, id, tags, param1=strcat("zoneRedundant: ", properties.zoneRedundant), param2=strcat("SKU: ", sku.name), param3=iff(tolower(sku.name) == 'premium', 'Move Service Bus namespace to a region that supports Availability Zones', 'Migrate to Premium SKU in a region that supports Availability Zones')
diff --git a/v2/recos/Services/MicrosoftSignalRService-SignalR/aprl-ZoneRedundancyPremiumTier.yaml b/v2/recos/Services/MicrosoftSignalRService-SignalR/aprl-ZoneRedundancyPremiumTier.yaml
new file mode 100644
index 000000000..99a0ed75c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSignalRService-SignalR/aprl-ZoneRedundancyPremiumTier.yaml
@@ -0,0 +1,24 @@
+name: aprl-ZoneRedundancyPremiumTier
+title: Enable zone redundancy for SignalR
+description: |-
+ Use SignalR with zone redundancy for production to improve uptime. This feature, available in the Premium tier, is activated upon creating or upgrading to Premium. Standard can upgrade to Premium without downtime.
+source:
+ type: aprl
+ file: azure-resources/SignalRService/signalR/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.SignalRService/SignalR
+severity: 0
+labels:
+ guid: 6a8b3db9-5773-413a-a127-4f7032f34bbd
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find SignalR instances that are not configured with the Premium tier
+ resources
+ | where type == "microsoft.signalrservice/signalr"
+ | where sku.tier != "Premium"
+ | project recommendationId = "6a8b3db9-5773-413a-a127-4f7032f34bbd", name, id, tags, param1 = "AvailabilityZones: Single Zone"
+ | order by id asc
diff --git a/v2/recos/Services/MicrosoftSql-servers/Cost/revcl-LearnMicrosoftPolicy.yaml b/v2/recos/Services/MicrosoftSql-servers/Cost/revcl-LearnMicrosoftPolicy.yaml
new file mode 100644
index 000000000..62afb11bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/Cost/revcl-LearnMicrosoftPolicy.yaml
@@ -0,0 +1,15 @@
+name: revcl-LearnMicrosoftPolicy
+title: Check if applicable and enforce policy/change https://learn.microsoft.com/azure/azure-sql/azure-hybrid-benefit?view=azuresql&tabs=azure-portalhttps://learn.microsoft.com/azure/cost-management-billing/scope-level/create-sql-license-assignments?source=recommendations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.sql/servers
+waf: Cost
+severity: 1
+labels:
+ guid: d7bb012f-7b95-4e06-b158-e2ea3992c2de
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/active-directory/app-proxy/application-proxy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSql-servers/aprl-AzureKeyVaultEncryptedConfigurations.yaml b/v2/recos/Services/MicrosoftSql-servers/aprl-AzureKeyVaultEncryptedConfigurations.yaml
new file mode 100644
index 000000000..34552a39c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/aprl-AzureKeyVaultEncryptedConfigurations.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureKeyVaultEncryptedConfigurations
+title: Back Up Your Keys
+description: |-
+ It is highly recommended to use Azure Key Vault (AKV) to store encryption keys related to Always Encrypted configurations, however it is not required. If you are not using AKV, then ensure that your keys are properly backed up and stored in a secure manner.
+source:
+ type: aprl
+ file: azure-resources/Sql/servers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Sql/servers
+severity: 1
+labels:
+ guid: d6ef87aa-574e-584e-a955-3e6bb8b5425b
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftSql-servers/aprl-AzureSqlDatabaseDatabaseLayerConfiguration.yaml b/v2/recos/Services/MicrosoftSql-servers/aprl-AzureSqlDatabaseDatabaseLayerConfiguration.yaml
new file mode 100644
index 000000000..c4fe85226
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/aprl-AzureSqlDatabaseDatabaseLayerConfiguration.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureSqlDatabaseDatabaseLayerConfiguration
+title: Implement Retry Logic
+description: |-
+ During transient failures, the application should handle connection retries effectively with Azure SQL Database. No Database layer configuration is needed; instead, the application must be set up for graceful retrying.
+source:
+ type: aprl
+ file: azure-resources/Sql/servers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Sql/servers
+severity: 0
+labels:
+ guid: cbb17a29-64fb-c943-95d0-8df814a37c40
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftSql-servers/aprl-AzureSqlDatabasePremiumTierAzureAvailabilityZones.yaml b/v2/recos/Services/MicrosoftSql-servers/aprl-AzureSqlDatabasePremiumTierAzureAvailabilityZones.yaml
new file mode 100644
index 000000000..eccae6424
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/aprl-AzureSqlDatabasePremiumTierAzureAvailabilityZones.yaml
@@ -0,0 +1,26 @@
+name: aprl-AzureSqlDatabasePremiumTierAzureAvailabilityZones
+title: Enable zone redundancy for Azure SQL Database to achieve high availability
+ and resiliency
+description: |-
+ By default, Azure SQL Database premium tier provisions multiple copies within the same region. For geo redundancy, databases can be set as Zone Redundant, distributing copies across Azure Availability Zones to maintain availability during regional outages.
+source:
+ type: aprl
+ file: azure-resources/Sql/servers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Sql/servers
+severity: 1
+labels:
+ guid: c0085c32-84c0-c247-bfa9-e70977cbf108
+ area: High Availability
+links: []
+queries:
+ arg: |+
+ // Azure Resource Graph Query
+ // Finds non-zone redundant SQL databases and lists them
+ Resources
+ | where type =~ 'microsoft.sql/servers/databases'
+ | where tolower(tostring(properties.zoneRedundant))=~'false'
+ |project recommendationId = "c0085c32-84c0-c247-bfa9-e70977cbf108", name, id, tags
+
+...
diff --git a/v2/recos/Services/MicrosoftSql-servers/aprl-GeoReplicatedDatabaseManagementAutoFailoverGroups.yaml b/v2/recos/Services/MicrosoftSql-servers/aprl-GeoReplicatedDatabaseManagementAutoFailoverGroups.yaml
new file mode 100644
index 000000000..c280e375d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/aprl-GeoReplicatedDatabaseManagementAutoFailoverGroups.yaml
@@ -0,0 +1,24 @@
+name: aprl-GeoReplicatedDatabaseManagementAutoFailoverGroups
+title: Auto Failover Groups can encompass one or multiple databases, usually used
+ by the same app.
+description: |-
+ Failover Groups facilitate disaster recovery by configuring databases on one logical server to replicate to another region's logical server. This streamlines geo-replicated database management, offering a single endpoint for connection routing to replicated databases if the primary server fails.
+source:
+ type: aprl
+ file: azure-resources/Sql/servers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Sql/servers
+severity: 0
+labels:
+ guid: 943c168a-2ec2-a94c-8015-85732a1b4859
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Provides a list of SQL databases that are not configured to use a failover-group.
+ resources
+ | where type =~'microsoft.sql/servers/databases'
+ | where isnull(properties['failoverGroupId'])
+ | project recommendationId = "943c168a-2ec2-a94c-8015-85732a1b4859", name, id, tags, param1= strcat("databaseId=", properties['databaseId'])
diff --git a/v2/recos/Services/MicrosoftSql-servers/aprl-ReadableSecondaryDatabaseReplicasActiveGeoReplication.yaml b/v2/recos/Services/MicrosoftSql-servers/aprl-ReadableSecondaryDatabaseReplicasActiveGeoReplication.yaml
new file mode 100644
index 000000000..adac6dc22
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/aprl-ReadableSecondaryDatabaseReplicasActiveGeoReplication.yaml
@@ -0,0 +1,29 @@
+name: aprl-ReadableSecondaryDatabaseReplicasActiveGeoReplication
+title: Use Active Geo Replication to Create a Readable Secondary in Another Region
+description: |-
+ Active Geo Replication ensures business continuity by utilizing readable secondary database replicas. In case of primary database failure, manually failover to secondary database. Secondaries, up to four, can be in same/different regions, used for read-only access.
+source:
+ type: aprl
+ file: azure-resources/Sql/servers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Sql/servers
+severity: 0
+labels:
+ guid: 74c2491d-048b-0041-a140-935960220e20
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Provides a list of SQL databases that are not part of Geo Replication.
+ resources
+ | where type == "microsoft.sql/servers/databases"
+ | summarize secondaryTypeCount = countif(isnotempty(properties.secondaryType)) by name
+ | where secondaryTypeCount == 0
+ | join kind=inner (
+ Resources
+ | where type == "microsoft.sql/servers/databases"
+ ) on name
+ | extend param1 = "Not part of Geo Replication"
+ | project recommendationId = "74c2491d-048b-0041-a140-935960220e20", name, id, tags, param1
diff --git a/v2/recos/Services/MicrosoftSql-servers/aprl-RelevantDatabaseMetricsAzureSqlDatabase.yaml b/v2/recos/Services/MicrosoftSql-servers/aprl-RelevantDatabaseMetricsAzureSqlDatabase.yaml
new file mode 100644
index 000000000..af217daa9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSql-servers/aprl-RelevantDatabaseMetricsAzureSqlDatabase.yaml
@@ -0,0 +1,33 @@
+name: aprl-RelevantDatabaseMetricsAzureSqlDatabase
+title: Monitor your Azure SQL Database in Near Real-Time to Detect Reliability Incidents
+description: |-
+ Monitoring and alerting are an important part of database operations. When working with Azure SQL Database, make use of Azure Monitor and SQL Insights to ensure that you capture relevant database metrics.
+source:
+ type: aprl
+ file: azure-resources/Sql/servers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Sql/servers
+severity: 0
+labels:
+ guid: 7e7daec9-6a81-3546-a4cc-9aef72fec1f7
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of SQL databases that are not configured for monitoring.
+ resources
+ | where type == "microsoft.insights/metricalerts"
+ | mv-expand properties.scopes
+ | mv-expand properties.criteria.allOf
+ | project databaseid = properties_scopes, monitoredMetric = properties_criteria_allOf.metricName
+ | where databaseid contains 'databases'
+ | summarize monitoredMetrics=make_list(monitoredMetric) by databaseid=tolower(tostring(databaseid))
+ | join kind=fullouter (
+ resources
+ | where type =~ 'microsoft.sql/servers/databases'
+ | project databaseid = tolower(id), name, tags
+ ) on databaseid
+ | where isnull(monitoredMetrics)
+ | project recommendationId = "7e7daec9-6a81-3546-a4cc-9aef72fec1f7", name, id=databaseid1, tags, param1=strcat("MonitoringMetrics=false" )
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-LowerTierCustomizedRule.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-LowerTierCustomizedRule.yaml
new file mode 100644
index 000000000..99f98d40b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-LowerTierCustomizedRule.yaml
@@ -0,0 +1,17 @@
+name: revcl-LowerTierCustomizedRule
+title: 'Consider moving unused storage to lower tier, with customized rule - https://learn.microsoft.com/azure/storage/blobs/lifecycle-management-policy-configure '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: d1e44a19-659d-4395-afd7-7289b835556d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/azure-billing-enterprise-agreement#design-considerations
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/costs/enable-tag-inheritance
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StandardSsdPremium.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StandardSsdPremium.yaml
new file mode 100644
index 000000000..df22c9226
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StandardSsdPremium.yaml
@@ -0,0 +1,15 @@
+name: revcl-StandardSsdPremium
+title: Consider using standard SSD rather than Premium or Ultra where possible
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: dec4861b-c3bc-410a-b77e-26e4d5a3bec2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/concepts/guest-configuration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StorageAccountsHotTier.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StorageAccountsHotTier.yaml
new file mode 100644
index 000000000..d39cb0b9b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StorageAccountsHotTier.yaml
@@ -0,0 +1,15 @@
+name: revcl-StorageAccountsHotTier
+title: 'Storage accounts: check hot tier and/or GRS necessary'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: d3294798-b118-48b2-a5a4-6ceb544451e1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/framework/resiliency/backup-and-recovery
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StorageAccountsTransactionCharges.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StorageAccountsTransactionCharges.yaml
new file mode 100644
index 000000000..40e3d2c66
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-StorageAccountsTransactionCharges.yaml
@@ -0,0 +1,16 @@
+name: revcl-StorageAccountsTransactionCharges
+title: For storage accounts, make sure that the chosen tier is not adding up transaction
+ charges (it might be cheaper to move to the next tier)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: c4e2436b-1336-4db5-9f17-960eee0bdf5c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/management-operational-compliance#monitoring-for-configuration-drift
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-TiersLess.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-TiersLess.yaml
new file mode 100644
index 000000000..c6bc599aa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/revcl-TiersLess.yaml
@@ -0,0 +1,15 @@
+name: revcl-TiersLess
+title: Consider archiving tiers for less used data
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 7e31c67d-68cf-46a6-8a11-94956d697dc3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/best-practices/monitoring
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AppropriateLogStorageLocationAzureMonitorLogsWorkspace.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AppropriateLogStorageLocationAzureMonitorLogsWorkspace.yaml
new file mode 100644
index 000000000..e8a06d0f8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AppropriateLogStorageLocationAzureMonitorLogsWorkspace.yaml
@@ -0,0 +1,23 @@
+name: wafsg-AppropriateLogStorageLocationAzureMonitorLogsWorkspace
+title: Reduce the cost of using resource logs by choosing the appropriate log storage
+ location and by managing log-retention periods. If you only plan to query logs occasionally
+ (for example, querying logs for compliance auditing), consider sending resource
+ logs to a storage account instead of sending them to an Azure Monitor Logs workspace.
+ You can use a serverless query solution such as Azure Synapse Analytics to analyze
+ logs. For more information, see Optimize cost for infrequent queries. Use lifecycle
+ management policies to delete or archive logs.
+description: Storing resource logs in a storage account for later analysis can be
+ a cheaper option. Using lifecycle management policies to manage log retention in
+ a storage account prevents large numbers of logs files building up over time, which
+ can lead to unnecessary capacity charges.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 4ee9e348-ad55-46c9-bdbf-e17adcae5fd0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AppropriatePricingPageAppropriateSettings.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AppropriatePricingPageAppropriateSettings.yaml
new file mode 100644
index 000000000..e96fba18b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AppropriatePricingPageAppropriateSettings.yaml
@@ -0,0 +1,20 @@
+name: wafsg-AppropriatePricingPageAppropriateSettings
+title: 'Understand the price of each meter: Make sure to use the appropriate pricing
+ page and apply the appropriate settings in that page. For more information, see
+ Finding the unit price for each meter. Consider the number of operations associated
+ with each price. For example, the price associated with write and read operations
+ applies to 10,000 operations. To determine the price of an individual operation,
+ divide the listed price by 10,000.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: e53d71d3-879f-4a64-b425-e30f007e7221
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AzurePricingCalculatorAzureFilesPricing.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AzurePricingCalculatorAzureFilesPricing.yaml
new file mode 100644
index 000000000..062671d58
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AzurePricingCalculatorAzureFilesPricing.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzurePricingCalculatorAzureFilesPricing
+title: 'Estimate the cost of capacity and operations: You can use the Azure pricing
+ calculator to model the costs associated with data storage, ingress, and egress.
+ Compare the cost associated with various regions, account types, and redundancy
+ configurations. For more information, see Azure Files pricing.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: c1f59c13-a5f1-4969-a1f4-a3180d9f7a30
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AzurePricingCalculatorVariousRegions.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AzurePricingCalculatorVariousRegions.yaml
new file mode 100644
index 000000000..442c5c375
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-AzurePricingCalculatorVariousRegions.yaml
@@ -0,0 +1,21 @@
+name: wafsg-AzurePricingCalculatorVariousRegions
+title: 'Estimate the cost of capacity and operations: You can model the costs associated
+ with data storage, ingress, and egress by using the Azure pricing calculator. Use
+ fields to compare the cost associated with various regions, account types, namespace
+ types, and redundancy configurations. For certain scenarios, you can use sample
+ calculations and worksheets available in Microsoft documentation. For example, you
+ can estimate the cost of archiving data or estimate the cost of using the AzCopy
+ command to transfer blobs.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 4d17df43-4382-430a-9463-13abf73774d0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-BillingModelCommitmentBasedModel.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-BillingModelCommitmentBasedModel.yaml
new file mode 100644
index 000000000..fcec694c7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-BillingModelCommitmentBasedModel.yaml
@@ -0,0 +1,18 @@
+name: wafsg-BillingModelCommitmentBasedModel
+title: 'Choose a billing model for capacity: Evaluate whether using a commitment-based
+ model is more cost-efficient than using a consumption-based model. If you''re unsure
+ about how much capacity you need, you can start with a consumption-based model,
+ monitor the capacity metrics, and then evaluate later.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 5bf631db-5818-4a48-9bb2-12383fb22c27
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CoolerAccessTiersWarmerAccessTiers.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CoolerAccessTiersWarmerAccessTiers.yaml
new file mode 100644
index 000000000..dd30c7640
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CoolerAccessTiersWarmerAccessTiers.yaml
@@ -0,0 +1,18 @@
+name: wafsg-CoolerAccessTiersWarmerAccessTiers
+title: 'Have a plan for managing the data lifecycle: Optimize transaction and capacity
+ costs by taking advantage of access tiers and lifecycle management. Data used less
+ often should be placed in cooler access tiers while data that''s accessed often
+ should be placed in warmer access tiers.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: d48626ce-bf57-4b9a-92b4-58d2904aca16
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostAnalysisPaneAzurePortal-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostAnalysisPaneAzurePortal-1.yaml
new file mode 100644
index 000000000..f7e3d608d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostAnalysisPaneAzurePortal-1.yaml
@@ -0,0 +1,18 @@
+name: wafsg-CostAnalysisPaneAzurePortal-1
+title: 'Monitor costs: Ensure costs stay within budgets, compare costs against forecasts,
+ and see where overspending occurs. You can use the cost analysis pane in the Azure
+ portal to monitor costs. You can also export cost data to a storage account, and
+ use Excel or Power BI to analyze that data.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 5473960a-7ac3-44a0-8d01-695132b782cd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostAnalysisPaneAzurePortal.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostAnalysisPaneAzurePortal.yaml
new file mode 100644
index 000000000..075ca223f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostAnalysisPaneAzurePortal.yaml
@@ -0,0 +1,18 @@
+name: wafsg-CostAnalysisPaneAzurePortal
+title: 'Monitor costs: Ensure costs stay within budgets, compare costs against forecasts,
+ and see where overspending occurs. You can use the cost analysis pane in the Azure
+ portal to monitor costs. You also can export cost data to a storage account and
+ analyze that data by using Excel or Power BI.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 18f1f2f6-de79-405d-b7a1-65fb571c0493
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostEffectiveAccessTierTotalOverallCost.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostEffectiveAccessTierTotalOverallCost.yaml
new file mode 100644
index 000000000..4880b411c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostEffectiveAccessTierTotalOverallCost.yaml
@@ -0,0 +1,26 @@
+name: wafsg-CostEffectiveAccessTierTotalOverallCost
+title: 'After you migrate your workload, if you use standard file shares, carefully
+ choose the most cost effective access tier for your file share: hot, cool, or transaction
+ optimized. After you operate for a few days or weeks with regular usage, you can
+ insert your transaction counts in the pricing calculator to figure out which tier
+ best suits your workload. Most customers should choose cool even if they actively
+ use the share. But you should examine each share and compare the balance of storage
+ capacity to transactions to determine your tier. If transaction costs make up a
+ significant percentage of your bill, the savings from using the cool access tier
+ often offsets this cost and minimizes the total overall cost. We recommend that
+ you move standard file shares between access tiers only when necessary to optimize
+ for changes in your workload pattern. Each move incurs transactions. For more information,
+ see Switching between standard tiers.'
+description: Select the appropriate access tier for standard file shares to considerably
+ reduce your costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 9dd18ccf-33eb-4da0-9710-7b3d64290faa
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostEffectiveDefaultAccessTierDefaultAccessTierSetting.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostEffectiveDefaultAccessTierDefaultAccessTierSetting.yaml
new file mode 100644
index 000000000..e7a432054
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-CostEffectiveDefaultAccessTierDefaultAccessTierSetting.yaml
@@ -0,0 +1,21 @@
+name: wafsg-CostEffectiveDefaultAccessTierDefaultAccessTierSetting
+title: 'Choose the most cost-effective default access tier: Unless a tier is specified
+ with each blob upload, blobs infer their access tier from the default access tier
+ setting. A change to the default access tier setting of a storage account applies
+ to all blobs in the account for which an access tier hasn''t been explicitly set.
+ This cost could be significant if you''ve collected a large number of blobs. For
+ more information about how a tier change affects each existing blob, see Changing
+ a blob''s access tier.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: d78ebd83-3708-43dc-a146-c87c0bc845cc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-DefaultAccessTierRedundancyLevel.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-DefaultAccessTierRedundancyLevel.yaml
new file mode 100644
index 000000000..7614b6225
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-DefaultAccessTierRedundancyLevel.yaml
@@ -0,0 +1,18 @@
+name: wafsg-DefaultAccessTierRedundancyLevel
+title: 'Choose an account type, a redundancy level, and a default access tier: You
+ must select a value for each of these settings when you create a storage account.
+ All the values affect transaction charges and capacity charges. All these settings
+ except for the account type can be changed after the account is created.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 96e18bc5-92d9-4184-990e-0916f7c116fa
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-DefaultAccessTierSettingLifecycleManagementPolicies.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-DefaultAccessTierSettingLifecycleManagementPolicies.yaml
new file mode 100644
index 000000000..f8acd49b3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-DefaultAccessTierSettingLifecycleManagementPolicies.yaml
@@ -0,0 +1,23 @@
+name: wafsg-DefaultAccessTierSettingLifecycleManagementPolicies
+title: 'Upload data directly to the most cost-efficient access tier: For example,
+ if the default access tier setting of your account is hot, but you''re uploading
+ files for archiving purposes, specify a cooler tier as the archive or a cold tier
+ as part of your upload operation. After uploading blobs, use lifecycle management
+ policies to move blobs to the most cost-efficient tiers based on usage metrics such
+ as the last accessed time. Choosing the most optimal tier up front can reduce costs.
+ If you change the tier of a block blob that you already uploaded, then you pay the
+ cost of writing to the initial tier when you first upload the blob, and then pay
+ the cost of writing to the desired tier.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: d8225b92-cc37-400e-9e24-660b9f4c1a28
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-EmergencyDataRestorationSituationsStandardPriorityRehydration.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-EmergencyDataRestorationSituationsStandardPriorityRehydration.yaml
new file mode 100644
index 000000000..128fe59bc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-EmergencyDataRestorationSituationsStandardPriorityRehydration.yaml
@@ -0,0 +1,17 @@
+name: wafsg-EmergencyDataRestorationSituationsStandardPriorityRehydration
+title: Use standard-priority rehydration when rehydrating blobs from archive storage.
+ Use high-priority rehydration only for emergency data restoration situations. For
+ more information, see Rehydrate an archived blob to an online tier
+description: High-priority rehydration from the archive tier can lead to higher-than-normal
+ bills.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: ab60898d-c5ae-4087-95ce-5b55ed006972
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-EncryptionScopesUnnecessaryCharges.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-EncryptionScopesUnnecessaryCharges.yaml
new file mode 100644
index 000000000..58272b556
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-EncryptionScopesUnnecessaryCharges.yaml
@@ -0,0 +1,14 @@
+name: wafsg-EncryptionScopesUnnecessaryCharges
+title: Disable any encryption scopes that aren't needed to avoid unnecessary charges.
+description: Encryptions scopes incur a per month charge.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: a97cd83a-ed73-43df-bf01-11853e14f665
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-FastDataTransferSpeedsAzureStandardHddStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-FastDataTransferSpeedsAzureStandardHddStorage.yaml
new file mode 100644
index 000000000..9989c5656
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-FastDataTransferSpeedsAzureStandardHddStorage.yaml
@@ -0,0 +1,21 @@
+name: wafsg-FastDataTransferSpeedsAzureStandardHddStorage
+title: 'Decide whether your workload requires the performance of premium file shares
+ (Azure Premium SSD) or if Azure Standard HDD storage is sufficient: Determine your
+ storage account type and billing model based on the type of storage that you need.
+ If you require large amounts of input/output operations per second (IOPS), extremely
+ fast data transfer speeds, or very low latency, then you should choose premium Azure
+ file shares. NFS Azure file shares are only available on the premium tier. NFS and
+ SMB file shares are the same price on the premium tier.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 54bceac0-695d-4d3a-9e50-91fdb4c9f51a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-HigherDataTransferCostsFewerLargeFiles.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-HigherDataTransferCostsFewerLargeFiles.yaml
new file mode 100644
index 000000000..0dedcbc7d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-HigherDataTransferCostsFewerLargeFiles.yaml
@@ -0,0 +1,16 @@
+name: wafsg-HigherDataTransferCostsFewerLargeFiles
+title: Pack small files into larger files before moving them to cooler tiers. You
+ can use file formats such as TAR or ZIP.
+description: Cooler tiers have higher data transfer costs. By having fewer large files,
+ you can reduce the number of operations required to transfer data.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 1e8c6cb4-abe1-4ba1-899f-5ddc0d700517
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-LifecycleManagementPolicyOldBlobVersions.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-LifecycleManagementPolicyOldBlobVersions.yaml
new file mode 100644
index 000000000..497bafb28
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-LifecycleManagementPolicyOldBlobVersions.yaml
@@ -0,0 +1,17 @@
+name: wafsg-LifecycleManagementPolicyOldBlobVersions
+title: If you enable versioning, use a lifecycle management policy to automatically
+ delete old blob versions.
+description: Every write operation to a blob creates a new version. This increases
+ capacity costs. You can keep costs in check by removing versions that you no longer
+ need.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 72af3409-f6b8-43b7-b254-31990577bb73
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MetadataStorageChargesAzureFilesReservations.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MetadataStorageChargesAzureFilesReservations.yaml
new file mode 100644
index 000000000..00c3c0c52
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MetadataStorageChargesAzureFilesReservations.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MetadataStorageChargesAzureFilesReservations
+title: Use Azure Files reservations, also referred to as reserved instances, to precommit
+ to storage usage and get a discount. Use reservations for production workloads or
+ dev/test workloads with consistent footprints. For more information, see Optimize
+ costs with storage reservations. Reservations don't include transaction, bandwidth,
+ data transfer, and metadata storage charges.
+description: Three-year reservations can provide a discount up to 36% on the total
+ cost of file storage. Reservations don't affect performance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: f455ac95-f1e3-4a9a-9fab-044e7faeff2f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MinimumRecommendedRetentionPeriodPremiumFileShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MinimumRecommendedRetentionPeriodPremiumFileShares.yaml
new file mode 100644
index 000000000..7c4e80839
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MinimumRecommendedRetentionPeriodPremiumFileShares.yaml
@@ -0,0 +1,22 @@
+name: wafsg-MinimumRecommendedRetentionPeriodPremiumFileShares
+title: Set retention periods for the soft-delete feature, especially when you first
+ start using it. Consider starting with a short retention period to better understand
+ how the feature affects your bill. The minimum recommended retention period is seven
+ days. When you soft delete standard and premium file shares, they're billed as used
+ capacity rather than provisioned capacity. And premium file shares are billed at
+ the snapshot rate while in the soft-delete state. Standard file shares are billed
+ at the regular rate while in the soft-delete state.
+description: Set a retention period so that soft-deleted files don't pile up and increase
+ the cost of capacity. After the configured retention period, permanently deleted
+ data doesn't incur cost.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: bb6048c7-29fd-4388-aa22-de89fdbb39ea
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MinimumRecommendedRetentionPeriodShortRetentionPeriod.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MinimumRecommendedRetentionPeriodShortRetentionPeriod.yaml
new file mode 100644
index 000000000..fa03c51b4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-MinimumRecommendedRetentionPeriodShortRetentionPeriod.yaml
@@ -0,0 +1,21 @@
+name: wafsg-MinimumRecommendedRetentionPeriodShortRetentionPeriod
+title: If you enable soft delete, then place blobs that are frequently overwritten
+ into an account that doesn't have soft delete enabled. Set retention periods. Consider
+ starting with a short retention period to better understand how the feature affects
+ your bill. The minimum recommended retention period is seven days.
+description: Every time a blob is overwritten, a new snapshot is created. The cause
+ of increased capacity charges might be difficult to access because the creation
+ of these snapshots doesn't appear in logs. To reduce capacity charges, store frequently
+ overwritten data in a separate storage account with soft delete disabled. A retention
+ period keeps soft-deleted blobs from piling up and adding to the cost of capacity.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: edc3f7bc-6b6c-41a8-8f11-1485781fdf58
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-NumerousLogFilesCostEffectiveAccessTiers.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-NumerousLogFilesCostEffectiveAccessTiers.yaml
new file mode 100644
index 000000000..ace014afe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-NumerousLogFilesCostEffectiveAccessTiers.yaml
@@ -0,0 +1,22 @@
+name: wafsg-NumerousLogFilesCostEffectiveAccessTiers
+title: 'Monitor usage: Continuously monitor usage patterns and detect unused or underutilized
+ accounts and containers. Use Storage insights to identity accounts with no or low
+ use. Enable blob inventory reports, and use tools such as Azure Databricks or Azure
+ Synapse Analytics and Power BI to analyze cost data. Watch out for unexpected increases
+ in capacity, which might indicate that you''re collecting numerous log files, blob
+ versions, or soft-deleted blobs. Develop a strategy for expiring or transitioning
+ objects to more cost-effective access tiers.Have a plan for expiring objects or
+ moving objects to more affordable access tiers.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: d48bcd05-e5af-4500-b04e-e35dce0f17f9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-OtherCostAspectsAzureFileSync.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-OtherCostAspectsAzureFileSync.yaml
new file mode 100644
index 000000000..abf551e1a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-OtherCostAspectsAzureFileSync.yaml
@@ -0,0 +1,19 @@
+name: wafsg-OtherCostAspectsAzureFileSync
+title: 'Decide which value-added services you need: Azure Files supports integrations
+ with value-added services such as Backup, Azure File Sync, and Defender for Storage.
+ These solutions have their own licensing and product costs but are often considered
+ part of the total cost of ownership for file storage. Consider other cost aspects
+ if you use Azure File Sync.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 318fe019-cffa-4ca1-aa56-e00d1df86fe2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-PremiumFileSharesIoPerformanceCharacteristics.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-PremiumFileSharesIoPerformanceCharacteristics.yaml
new file mode 100644
index 000000000..72a3e812f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-PremiumFileSharesIoPerformanceCharacteristics.yaml
@@ -0,0 +1,19 @@
+name: wafsg-PremiumFileSharesIoPerformanceCharacteristics
+title: If you use premium shares, ensure that you provision more than enough capacity
+ and performance for your workload but not so much that you incur unnecessary costs.
+ We recommend overprovisioning by two to three times. You can dynamically scale premium
+ file shares up or down depending on your storage and input/output (IO) performance
+ characteristics.
+description: Overprovision premium file shares by a reasonable amount to help maintain
+ performance and account for future growth and performance requirements.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 11b05f06-7a9a-4f25-9816-f41f893897b4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-ResourceGroupsGovernancePolicies.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-ResourceGroupsGovernancePolicies.yaml
new file mode 100644
index 000000000..13f1c0fbf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-ResourceGroupsGovernancePolicies.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ResourceGroupsGovernancePolicies
+title: 'Create guardrails: Create budgets based on subscriptions and resource groups.
+ Use governance policies to restrict resource types, configurations, and locations.
+ Additionally, use RBAC to block actions that can lead to overspending.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: f0c38fed-fc9f-458d-aab7-9b03b8a0dfea
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-RoleBasedAccessControlResourceGroups.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-RoleBasedAccessControlResourceGroups.yaml
new file mode 100644
index 000000000..a83390332
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-RoleBasedAccessControlResourceGroups.yaml
@@ -0,0 +1,18 @@
+name: wafsg-RoleBasedAccessControlResourceGroups
+title: 'Create guardrails: Create budgets based on subscriptions and resource groups.
+ Use governance policies to restrict resource types, configurations, and locations.
+ Additionally, use role-based access control (RBAC) to block actions that can lead
+ to overspending.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: a5675d94-de9f-44b1-8b21-f8032cdf3f3d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SftpSupportSftpEndpoint.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SftpSupportSftpEndpoint.yaml
new file mode 100644
index 000000000..c7fdecf17
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SftpSupportSftpEndpoint.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SftpSupportSftpEndpoint
+title: Enable SFTP support only when it's used to transfer data.
+description: Enabling the SFTP endpoint incurs an hourly cost. By thoughtfully disabling
+ SFTP support, and then enabling it as needed, you can avoid passive charges from
+ accruing in your account.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: dd86bdc7-a08c-4624-9028-e0e80335a9ba
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SoftDeleteAdditionalTransaction.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SoftDeleteAdditionalTransaction.yaml
new file mode 100644
index 000000000..867a8cbce
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SoftDeleteAdditionalTransaction.yaml
@@ -0,0 +1,18 @@
+name: wafsg-SoftDeleteAdditionalTransaction
+title: 'Decide which features you need: Some features such as versioning and blob
+ soft delete incur additional transaction and capacity costs as well as other charges.
+ Make sure to review the pricing and billing sections in articles that describe those
+ capabilities when you choose which capabilities to add to your account.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: ccbe2ffd-7bea-41ce-93fa-a9facc5bc5d0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SshFileTransferProtocolChangeFeedSupport.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SshFileTransferProtocolChangeFeedSupport.yaml
new file mode 100644
index 000000000..bff22a7eb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-SshFileTransferProtocolChangeFeedSupport.yaml
@@ -0,0 +1,20 @@
+name: wafsg-SshFileTransferProtocolChangeFeedSupport
+title: 'Identify the meters that are used to calculate your bill: Meters are used
+ to track the amount of data stored in the account (data capacity) and the number
+ and type of operations that are performed to write and read data. There are also
+ meters associated with the use of optional features such as blob index tags, blob
+ inventory, change feed support, encryption scopes, and SSH File Transfer Protocol
+ (SFTP) support. For more information, see How you''re charged for Blob Storage.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 322c5ad8-8c4a-4aa9-acd7-6f34a3e47c9c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardAzureFileSharesPremiumFileShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardAzureFileSharesPremiumFileShares.yaml
new file mode 100644
index 000000000..16b6a52b8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardAzureFileSharesPremiumFileShares.yaml
@@ -0,0 +1,19 @@
+name: wafsg-StandardAzureFileSharesPremiumFileShares
+title: When you migrate to standard Azure file shares, we recommend that you start
+ in the transaction-optimized tier during the initial migration. Transaction usage
+ during migration isn't typically indicative of normal transaction usage. This consideration
+ doesn't apply for premium file shares because the provisioned billing model doesn't
+ charge for transactions.
+description: Migrating to Azure Files is a temporary, transaction-heavy workload.
+ Optimize the price for high-transaction workloads to help reduce migration costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 72b9477f-3c39-4633-a052-90b1203f9be5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardAzureFileSharesPremiumShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardAzureFileSharesPremiumShares.yaml
new file mode 100644
index 000000000..a5b093de6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardAzureFileSharesPremiumShares.yaml
@@ -0,0 +1,22 @@
+name: wafsg-StandardAzureFileSharesPremiumShares
+title: 'Understand how your bill is calculated: Standard Azure file shares provide
+ a pay-as-you-go model. Premium shares use a provisioned model in which you specify
+ and pay for a certain amount of capacity, IOPS, and throughput up front. In the
+ pay-as-you-go model, meters track the amount of data that''s stored in the account,
+ or the capacity, and the number and type of transactions based on your usage of
+ that data. The pay-as-you-go model can be cost efficient because you pay only for
+ what you use. With the pay-as-you-go model, you don''t need to overprovision or
+ deprovision storage based on performance requirements or demand fluctuations.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 6a667592-f9c4-45ba-81c8-bb4841aa8781
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardSmbAzureFileSharesSameStandardStorageHardware.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardSmbAzureFileSharesSameStandardStorageHardware.yaml
new file mode 100644
index 000000000..76adf7e82
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardSmbAzureFileSharesSameStandardStorageHardware.yaml
@@ -0,0 +1,20 @@
+name: wafsg-StandardSmbAzureFileSharesSameStandardStorageHardware
+title: 'Choose the most cost-effective access tier: Standard SMB Azure file shares
+ offer three access tiers: transaction optimized, hot, and cool. All three tiers
+ are stored on the same standard storage hardware. The main difference for these
+ three tiers is their data at rest storage prices, which are lower in cooler tiers,
+ and the transaction prices, which are higher in cooler tiers. For more information,
+ see Differences in standard tiers.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: f3dd18d1-9937-413e-99a6-6abbe25b574c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardSmbFileSharesStandardFileShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardSmbFileSharesStandardFileShares.yaml
new file mode 100644
index 000000000..975abbfbf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StandardSmbFileSharesStandardFileShares.yaml
@@ -0,0 +1,21 @@
+name: wafsg-StandardSmbFileSharesStandardFileShares
+title: 'Create a storage account for your file share, and choose a redundancy level:
+ Choose either a standard (GPv2) or premium (FileStorage) account. The redundancy
+ level that you choose affects cost. The more redundancy, the higher the cost. Locally
+ redundant storage (LRS) is the most affordable. GRS is only available for standard
+ SMB file shares. Standard file shares only show transaction information at the storage
+ account level, so we recommend that you deploy only one file share in each storage
+ account to ensure full billing visibility.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 220f8243-dcba-41cd-95c1-70b8b0cc3bd2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StorageCapacityChargesSeparateStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StorageCapacityChargesSeparateStorageAccount.yaml
new file mode 100644
index 000000000..91f63cab0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-StorageCapacityChargesSeparateStorageAccount.yaml
@@ -0,0 +1,17 @@
+name: wafsg-StorageCapacityChargesSeparateStorageAccount
+title: If you enable versioning, then place blobs that are frequently overwritten
+ into an account that doesn't have versioning enabled.
+description: Every time a blob is overwritten, a new version is added which leads
+ to increased storage capacity charges. To reduce capacity charges, store frequently
+ overwritten data in a separate storage account with versioning disabled.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: 4fb53237-e44f-4292-a7a5-f8e79d55fc4e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-TotalAzureFilesBillAzureFileSync.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-TotalAzureFilesBillAzureFileSync.yaml
new file mode 100644
index 000000000..93b21fd42
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-TotalAzureFilesBillAzureFileSync.yaml
@@ -0,0 +1,20 @@
+name: wafsg-TotalAzureFilesBillAzureFileSync
+title: Monitor snapshot usage. Snapshots incur charges, but they're billed based on
+ the differential storage usage of each snapshot. You pay only for the difference
+ in each snapshot. For more information, see Snapshots. Azure File Sync takes share-level
+ and file-level snapshots as part of regular usage, which can increase your total
+ Azure Files bill.
+description: Differential snapshots ensure that you're not billed multiple times for
+ storing the same data. However, you should still monitor snapshot usage to help
+ reduce your Azure Files bill.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: f3715e13-e5c7-4830-b1a0-4319523efab1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-UnderusedStorageAccountsCostEffectiveAccessTiers.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-UnderusedStorageAccountsCostEffectiveAccessTiers.yaml
new file mode 100644
index 000000000..27dde3468
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Cost/wafsg-UnderusedStorageAccountsCostEffectiveAccessTiers.yaml
@@ -0,0 +1,19 @@
+name: wafsg-UnderusedStorageAccountsCostEffectiveAccessTiers
+title: 'Monitor usage: Continuously monitor usage patterns to detect unused or underused
+ storage accounts and file shares. Check for unexpected increases in capacity, which
+ might indicate that you''re collecting numerous log files or soft-deleted files.
+ Develop a strategy for deleting files or moving files to more cost-effective access
+ tiers.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Cost
+severity: 1
+labels:
+ guid: a294f2dd-cd4f-42f7-80d8-798759c799e4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards-1.yaml
new file mode 100644
index 000000000..820aa516d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards-1.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards-1
+title: 'Monitor the health of your storage account: Create Storage insights dashboards
+ to monitor availability, performance, and resiliency metrics. Set up alerts to identify
+ and address problems in your system before your customers notice them. Use diagnostic
+ settings to route resource logs to an Azure Monitor Logs workspace. Then you can
+ query logs to investigate alerts more deeply.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: b860ac4e-04bd-4fca-bbe3-b6d4659a3a62
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards.yaml
new file mode 100644
index 000000000..76fd7d52b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureMonitorLogsWorkspaceStorageInsightsDashboards
+title: 'Monitor the health of your storage account: Create Storage insights dashboards
+ to monitor availability, performance, and resilience metrics. Set up alerts to identify
+ and address problems in your system before your customers notice them. Use diagnostic
+ settings to route resource logs to an Azure Monitor Logs workspace. Then you can
+ query logs to investigate alerts more deeply.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 16a0b5cc-d1a3-430b-a8d1-141a721f4e76
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses-1.yaml
new file mode 100644
index 000000000..8decc7548
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses-1.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses-1
+title: Use infrastructure as code (IaC) to define the details of your storage accounts
+ in Azure Resource Manager templates (ARM templates), Bicep, or Terraform.
+description: You can use your existing DevOps processes to deploy new storage accounts,
+ and use Azure Policy to enforce their configuration.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 6a7d5ccf-3cbf-468c-84cb-d5bdee7c7f3d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses.yaml
new file mode 100644
index 000000000..3bf7b6bff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureResourceManagerTemplatesExistingDevopsProcesses
+title: Use infrastructure as code (IaC) to define the details of your storage accounts
+ in Azure Resource Manager templates (ARM templates), Bicep, or Terraform.
+description: You can use your existing DevOps processes to deploy new storage accounts,
+ and use Azure Policy to enforce their configuration.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 1c680237-1240-4015-b028-1e1525ac1a41
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-BlobInventoryReportsCostEfficientAccessTiers.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-BlobInventoryReportsCostEfficientAccessTiers.yaml
new file mode 100644
index 000000000..7979a93e8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-BlobInventoryReportsCostEfficientAccessTiers.yaml
@@ -0,0 +1,19 @@
+name: wafsg-BlobInventoryReportsCostEfficientAccessTiers
+title: 'Set up policies that delete blobs or move them to cost-efficient access tiers:
+ Create a lifecycle management policy with an initial set of conditions. Policy runs
+ automatically delete or set the access tier of blobs based on the conditions you
+ define. Periodically analyze container use by using Monitor metrics and blob inventory
+ reports so that you can refine conditions to optimize cost efficiency.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 508126c2-2c18-4411-a803-1d9c7ee07e7a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-EmergencyRecoveryPlansDataProtectionFeatures-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-EmergencyRecoveryPlansDataProtectionFeatures-1.yaml
new file mode 100644
index 000000000..ba2bd2956
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-EmergencyRecoveryPlansDataProtectionFeatures-1.yaml
@@ -0,0 +1,17 @@
+name: wafsg-EmergencyRecoveryPlansDataProtectionFeatures-1
+title: 'Create maintenance and emergency recovery plans: Consider data protection
+ features, backup and restore operations, and failover procedures. Prepare for potential
+ data loss and data inconsistencies and the time and cost of failing over.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 7de2699b-2c67-4b05-90a4-45d6c9d6693a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-EmergencyRecoveryPlansDataProtectionFeatures.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-EmergencyRecoveryPlansDataProtectionFeatures.yaml
new file mode 100644
index 000000000..d03bc3204
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-EmergencyRecoveryPlansDataProtectionFeatures.yaml
@@ -0,0 +1,17 @@
+name: wafsg-EmergencyRecoveryPlansDataProtectionFeatures
+title: 'Create maintenance and emergency recovery plans: Consider data protection
+ features, backup and restore operations, and failover procedures. Prepare for potential
+ data loss and data inconsistencies and the time and cost of failing over.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 2f429983-43fe-4e9a-a0f7-ec3328270b5c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-FileSharesUseMonitor.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-FileSharesUseMonitor.yaml
new file mode 100644
index 000000000..23efe32d5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-FileSharesUseMonitor.yaml
@@ -0,0 +1,16 @@
+name: wafsg-FileSharesUseMonitor
+title: Use Monitor to analyze metrics, such as availability, latency, and usage, and
+ to create alerts.
+description: Monitor provides a view of availability, performance, and resiliency
+ for your file shares.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 9e6f3601-b1cc-47e4-9f7e-715ec473b941
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StandardFileSharesDifferentAccessTier.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StandardFileSharesDifferentAccessTier.yaml
new file mode 100644
index 000000000..22bb708bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StandardFileSharesDifferentAccessTier.yaml
@@ -0,0 +1,19 @@
+name: wafsg-StandardFileSharesDifferentAccessTier
+title: 'Periodically review file share activity: Share activity can change over time.
+ Move standard file shares to cooler access tiers, or you can provision or deprovision
+ capacity for premium shares. When you move standard file shares to a different access
+ tier, you incur a transaction charge. Move standard file shares only when needed
+ to reduce your monthly bill.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: b7ee3665-5f27-4d59-89d1-ab99c6dba955
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageAccountContentsAzureSynapseAnalytics.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageAccountContentsAzureSynapseAnalytics.yaml
new file mode 100644
index 000000000..9af5c71fe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageAccountContentsAzureSynapseAnalytics.yaml
@@ -0,0 +1,20 @@
+name: wafsg-StorageAccountContentsAzureSynapseAnalytics
+title: 'Enable blob inventory reports: Enable blob inventory reports to review the
+ retention, legal hold, or encryption status of your storage account contents. You
+ can also use blob inventory reports to understand the total data size, age, tier
+ distribution, or other attributes of your data. Use tools such as Azure Databricks
+ or Azure Synapse Analytics and Power BI to better visualize inventory data and to
+ create reports for stakeholders.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: c9e1bce3-8d36-44f7-a91a-e7d35e67297c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageInsightsUnifiedView-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageInsightsUnifiedView-1.yaml
new file mode 100644
index 000000000..ddda1189e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageInsightsUnifiedView-1.yaml
@@ -0,0 +1,18 @@
+name: wafsg-StorageInsightsUnifiedView-1
+title: Use Storage insights to track the health and performance of your storage accounts.
+ Storage insights provides a unified view of the failures, performance, availability,
+ and capacity for all your storage accounts.
+description: You can track the health and operation of each of your accounts. Easily
+ create dashboards and reports that stakeholders can use to track the health of your
+ storage accounts.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 5fff0543-7133-4501-bd87-ea55392c6a7e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageInsightsUnifiedView.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageInsightsUnifiedView.yaml
new file mode 100644
index 000000000..4cbd82e1d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Operations/wafsg-StorageInsightsUnifiedView.yaml
@@ -0,0 +1,18 @@
+name: wafsg-StorageInsightsUnifiedView
+title: Use Storage insights to track the health and performance of your storage accounts.
+ Storage insights provides a unified view of the failures, performance, availability,
+ and capacity for all your storage accounts.
+description: You can track the health and operation of each of your accounts. Easily
+ create dashboards and reports that stakeholders can use to track the health of your
+ storage accounts.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Operations
+severity: 1
+labels:
+ guid: 15f258d9-8353-49ff-9eca-441c96e911be
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-AzureFileSyncAzureFiles.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-AzureFileSyncAzureFiles.yaml
new file mode 100644
index 000000000..e20732f44
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-AzureFileSyncAzureFiles.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureFileSyncAzureFiles
+title: 'Plan for scale: Understand the scalability and performance targets for storage
+ accounts, Azure Files, and Azure File Sync.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 606bb21e-2197-4b38-89bd-3cf48e053a7d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-AzureFilesPremiumServiceNconnectClientSideMountOption.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-AzureFilesPremiumServiceNconnectClientSideMountOption.yaml
new file mode 100644
index 000000000..7e665b212
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-AzureFilesPremiumServiceNconnectClientSideMountOption.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFilesPremiumServiceNconnectClientSideMountOption
+title: Use the nconnect client-side mount option with NFS Azure file shares on Linux
+ clients. Nconnect enables you to use more TCP connections between the client and
+ the Azure Files premium service for NFSv4.1.
+description: Increase performance at scale, and reduce the total cost of ownership
+ for NFS file shares.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 830493d9-b872-469b-8248-88a098ae834f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BestPossibleClientExperienceStandardStorageAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BestPossibleClientExperienceStandardStorageAccounts.yaml
new file mode 100644
index 000000000..74d75d0c1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BestPossibleClientExperienceStandardStorageAccounts.yaml
@@ -0,0 +1,18 @@
+name: wafsg-BestPossibleClientExperienceStandardStorageAccounts
+title: Make sure your file share or storage account isn't being throttled, which can
+ result in high latency, low throughput, or low IOPS. Requests are throttled when
+ the IOPS, ingress, or egress limits are reached. For standard storage accounts,
+ throttling occurs at the account level. For premium file shares, throttling usually
+ occurs at the share level.
+description: Avoid throttling to provide the best possible client experience.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 1ba7c827-9dea-42c2-ae8f-6a8399bedf94
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BlobRestOperationsBlobStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BlobRestOperationsBlobStorage.yaml
new file mode 100644
index 000000000..d85f5d402
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BlobRestOperationsBlobStorage.yaml
@@ -0,0 +1,20 @@
+name: wafsg-BlobRestOperationsBlobStorage
+title: 'Optimize the performance of custom code: Consider using Storage SDKs instead
+ of creating your own wrappers for blob REST operations. Azure SDKs are optimized
+ for performance and provide mechanisms to fine-tune performance. Before creating
+ an application, review the performance and scalability checklist for Blob Storage.
+ Consider using query acceleration to filter out unwanted data during the storage
+ request and keep clients from needlessly transferring data across the network.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: faea0cea-49d5-462b-bece-94cca446b10a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BlockSizePerformanceEnhancements.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BlockSizePerformanceEnhancements.yaml
new file mode 100644
index 000000000..5f7a8d2a7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-BlockSizePerformanceEnhancements.yaml
@@ -0,0 +1,16 @@
+name: wafsg-BlockSizePerformanceEnhancements
+title: When uploading blobs or blocks, use a blob or block size that's greater than
+ 256 KiB.
+description: Blob or block sizes above 256 KiB takes advantage of performance enhancements
+ in the platform made specifically for larger blobs and block sizes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 22fb7fa5-e280-4a6a-8ae4-53fcd802c196
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-ContentDeliveryNetworkDefaultNetworkConfigurations.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-ContentDeliveryNetworkDefaultNetworkConfigurations.yaml
new file mode 100644
index 000000000..8b13cc3d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-ContentDeliveryNetworkDefaultNetworkConfigurations.yaml
@@ -0,0 +1,20 @@
+name: wafsg-ContentDeliveryNetworkDefaultNetworkConfigurations
+title: 'Reduce travel distance between the client and server: Place data in regions
+ nearest to connecting clients (ideally in the same region). Optimize for clients
+ in regions far away by using object replication or a content delivery network. Default
+ network configurations provide the best performance. Modify network settings only
+ to improve security. In general, network settings don''t decrease travel distance
+ and don''t improve performance.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 4732ffbc-7fe6-4e88-9178-932e7fbeddf5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-DataPlaneOperationsMonitorStorageInsights.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-DataPlaneOperationsMonitorStorageInsights.yaml
new file mode 100644
index 000000000..722400ef9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-DataPlaneOperationsMonitorStorageInsights.yaml
@@ -0,0 +1,20 @@
+name: wafsg-DataPlaneOperationsMonitorStorageInsights
+title: 'Collect performance data: Monitor your storage account to identify performance
+ bottlenecks that occur from throttling. For more information, see Monitoring your
+ storage service with Monitor Storage insights. Use both metrics and logs. Metrics
+ provide numbers such as throttling errors. Logs describe activity. If you see throttling
+ metrics, you can use logs to identity which clients are receiving throttling errors.
+ For more information, see Auditing data plane operations.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 557fe672-1057-4798-acbb-bb377abcb704
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-HashCharacterSequenceVirtualDirectoryName.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-HashCharacterSequenceVirtualDirectoryName.yaml
new file mode 100644
index 000000000..67bae95b7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-HashCharacterSequenceVirtualDirectoryName.yaml
@@ -0,0 +1,19 @@
+name: wafsg-HashCharacterSequenceVirtualDirectoryName
+title: Add a hash character sequence (such as three digits) as early as possible in
+ the partition key of a blob. The partition key is the account name, container name,
+ virtual directory name, and blob name. If you plan to use timestamps in names, then
+ consider adding a seconds value to the beginning of that stamp. For more information,
+ see Partitioning.
+description: Using a hash code or seconds value nearest the beginning of a partition
+ key reduces the time required to list query and read blobs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 5111fdd2-bb7e-46bf-9c14-371d1371c935
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-HashTagPrefixesBlobPartitionKey.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-HashTagPrefixesBlobPartitionKey.yaml
new file mode 100644
index 000000000..79c1b3446
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-HashTagPrefixesBlobPartitionKey.yaml
@@ -0,0 +1,18 @@
+name: wafsg-HashTagPrefixesBlobPartitionKey
+title: 'Choose an efficient naming scheme: Decrease the latency of listing, list,
+ query, and read operations by using hash tag prefixes nearest the beginning of the
+ blob partition key (account, container, virtual directory, or blob name). This scheme
+ benefits mostly accounts that have a flat namespace.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: e79e1149-9aa1-4064-8c07-52e390f99d9e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MicrosoftGlobalEdgeNetworkAzureFrontDoor.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MicrosoftGlobalEdgeNetworkAzureFrontDoor.yaml
new file mode 100644
index 000000000..89b992d18
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MicrosoftGlobalEdgeNetworkAzureFrontDoor.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MicrosoftGlobalEdgeNetworkAzureFrontDoor
+title: For broad consumption by web clients (streaming video, audio, or static website
+ content), consider using a content delivery network through Azure Front Door.
+description: Content is delivered to clients faster because it uses the Microsoft
+ global edge network with hundreds of global and local points of presence around
+ the world.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: b14ffaa1-4873-48ce-be43-05203e7e2562
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MobileDeviceAppsPremisesEnterpriseServices.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MobileDeviceAppsPremisesEnterpriseServices.yaml
new file mode 100644
index 000000000..abaa37a67
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MobileDeviceAppsPremisesEnterpriseServices.yaml
@@ -0,0 +1,24 @@
+name: wafsg-MobileDeviceAppsPremisesEnterpriseServices
+title: Provision storage accounts in the same region where dependent resources are
+ placed. For applications that aren't hosted on Azure, such as mobile device apps
+ or on-premises enterprise services, locate the storage account in a region nearer
+ to those clients. For more information, see Azure geographies.If clients from a
+ different region don't require the same data, then create a separate account in
+ each region.If clients from a different region require only some data, consider
+ using an object-replication policy to asynchronously copy relevant objects to a
+ storage account in the other region.
+description: Reducing the physical distance between the storage account and VMs, services,
+ and on-premises clients can improve performance and reduce network latency. Reducing
+ the physical distance also reduces cost for applications hosted in Azure because
+ bandwidth usage within a single region is free.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 876895f8-8298-4cda-9569-2fb95405511a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MostSmbFileShareWorkloadsOptimalStorageAccountType.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MostSmbFileShareWorkloadsOptimalStorageAccountType.yaml
new file mode 100644
index 000000000..b72464388
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-MostSmbFileShareWorkloadsOptimalStorageAccountType.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MostSmbFileShareWorkloadsOptimalStorageAccountType
+title: 'Choose the optimal storage account type: If your workload requires large amounts
+ of IOPS, extremely fast data transfer speeds, or very low latency, then you should
+ choose premium (FileStorage) storage accounts. You can use a standard general-purpose
+ v2 account for most SMB file share workloads. The primary tradeoff between the two
+ storage account types is cost versus performance.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 6014ae08-0163-41c5-84ea-1467ad0d98ee
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceDataWorkloadPerformance.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceDataWorkloadPerformance.yaml
new file mode 100644
index 000000000..0d2c07175
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceDataWorkloadPerformance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-PerformanceDataWorkloadPerformance
+title: 'Collect performance data: Monitor workload performance, including latency,
+ availability, and usage metrics. Analyze logs to diagnose problems such as timeouts
+ and throttling. Create alerts to notify you if a file share is being throttled,
+ about to be throttled, or experiencing high latency.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: b67e8471-7d96-4b52-83d2-622c83758327
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceOptimizationGuidanceDataTransferTool.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceOptimizationGuidanceDataTransferTool.yaml
new file mode 100644
index 000000000..7bdcb5a6d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceOptimizationGuidanceDataTransferTool.yaml
@@ -0,0 +1,19 @@
+name: wafsg-PerformanceOptimizationGuidanceDataTransferTool
+title: 'Optimize the performance of data clients: Choose a data transfer tool that''s
+ most appropriate for the data size, transfer frequency, and bandwidth of your workloads.
+ Some tools such as AzCopy are optimized for performance and require little intervention.
+ Consider the factors that influence latency, and fine-tune performance by reviewing
+ the performance optimization guidance that''s published with each tool.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 2c5c76ee-3c54-4063-9deb-6e02b3b046e6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceScaleLimitsAzureFilesService.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceScaleLimitsAzureFilesService.yaml
new file mode 100644
index 000000000..1be6609ad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PerformanceScaleLimitsAzureFilesService.yaml
@@ -0,0 +1,22 @@
+name: wafsg-PerformanceScaleLimitsAzureFilesService
+title: 'Create storage accounts in the same regions as connecting clients to reduce
+ latency: The farther you are from the Azure Files service, the greater the latency
+ and the more difficult to achieve performance scale limits. This consideration is
+ especially true when you access Azure Files from on-premises environments. If possible,
+ ensure that your storage account and your clients are co-located in the same Azure
+ region. Optimize for on-premises clients by minimizing network latency or by using
+ an ExpressRoute connection to extend on-premises networks into the Microsoft cloud
+ over a private connection.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 056cff2c-647d-41c8-82b0-f3ce60d82973
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PremiumBlockBlobStorageAccountsOptimalStorageAccountType.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PremiumBlockBlobStorageAccountsOptimalStorageAccountType.yaml
new file mode 100644
index 000000000..bc26da9a1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PremiumBlockBlobStorageAccountsOptimalStorageAccountType.yaml
@@ -0,0 +1,18 @@
+name: wafsg-PremiumBlockBlobStorageAccountsOptimalStorageAccountType
+title: 'Choose the optimal storage account type: If your workload requires high transaction
+ rates, smaller objects, and a consistently low transaction latency, then consider
+ using premium block blob storage accounts. A standard general-purpose v2 account
+ is most appropriate in most cases.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 414185fb-3518-4ff6-a275-a48689d44e4d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PremiumSmbFileSharesSmbAzureFileShare.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PremiumSmbFileSharesSmbAzureFileShare.yaml
new file mode 100644
index 000000000..314964bff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-PremiumSmbFileSharesSmbAzureFileShare.yaml
@@ -0,0 +1,19 @@
+name: wafsg-PremiumSmbFileSharesSmbAzureFileShare
+title: Enable SMB Multichannel for premium SMB file shares. SMB Multichannel allows
+ an SMB 3.1.1 client to establish multiple network connections to an SMB Azure file
+ share. SMB Multichannel only works when the feature is enabled on both client-side
+ (your client) and service-side (Azure). On Windows clients, SMB Multichannel is
+ enabled by default, but you need to enable it on your storage account.
+description: Increase throughput and IOPS while reducing the total cost of ownership.
+ Performance benefits increase with the number of files that distribute load.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 877da8a6-ccba-4655-a550-a1d0b01c13fc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-SameStorageAccountUpperPerformanceLimits.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-SameStorageAccountUpperPerformanceLimits.yaml
new file mode 100644
index 000000000..e58304d9f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-SameStorageAccountUpperPerformanceLimits.yaml
@@ -0,0 +1,22 @@
+name: wafsg-SameStorageAccountUpperPerformanceLimits
+title: 'Understand your application and usage patterns to achieve predictable performance:
+ Determine latency sensitivity, IOPS and throughput requirements, workload duration
+ and frequency, and workload parallelization. Use Azure Files for multi-threaded
+ applications to help you achieve the upper performance limits of a service. If most
+ of your requests are metadata-centric, such as createfile, openfile, closefile,
+ queryinfo, or querydirectory, the requests create poor latency that''s higher than
+ the read and write operations. If you have this problem, consider separating the
+ file share into multiple file shares within the same storage account.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: de7e1635-911b-43e8-a887-95b8e13778d1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-StorageAccountsScaleTargets.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-StorageAccountsScaleTargets.yaml
new file mode 100644
index 000000000..23e0a7d4c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-StorageAccountsScaleTargets.yaml
@@ -0,0 +1,15 @@
+name: wafsg-StorageAccountsScaleTargets
+title: 'Plan for scale: Understand the scale targets for storage accounts.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: aaf8acc7-9e41-4997-8da4-cc82b102db09
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-UnderlyingDiskConfigurationAzureFileSync.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-UnderlyingDiskConfigurationAzureFileSync.yaml
new file mode 100644
index 000000000..1a63e786c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Performance/wafsg-UnderlyingDiskConfigurationAzureFileSync.yaml
@@ -0,0 +1,20 @@
+name: wafsg-UnderlyingDiskConfigurationAzureFileSync
+title: 'Optimize for hybrid deployments: If you use Azure File Sync, sync performance
+ depends on many factors: your Windows Server and the underlying disk configuration,
+ network bandwidth between the server and the Azure storage, file size, total dataset
+ size, and the activity on the dataset. To measure the performance of a solution
+ that''s based on Azure File Sync, determine the number of objects, such as files
+ and directories, that you process per second.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Performance
+severity: 1
+labels:
+ guid: 06194a9a-646b-40f8-81df-2cffae089d7b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-AppropriateDataRedundancyOptionAzureStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-AppropriateDataRedundancyOptionAzureStorage.yaml
new file mode 100644
index 000000000..7f640174e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-AppropriateDataRedundancyOptionAzureStorage.yaml
@@ -0,0 +1,21 @@
+name: revcl-AppropriateDataRedundancyOptionAzureStorage
+title: Choose the most appropriate data redundancy option for Azure Storage based
+ on your requirements
+description: Use Zone-redundant Storage (ZRS) in the primary region for scenarios
+ that require high availability and for restricting replication to a particular country
+ or region. For protection against regional disasters, use Geo-zone-redundant Storage
+ (GZRS), which combines ZRS in the primary region with geo-replication to a secondary
+ region?.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 48c7c891-dcb1-4f7d-9769-ae568ba38d4a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-redundancy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-BlobSoftDeleteIndividualBlob.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-BlobSoftDeleteIndividualBlob.yaml
new file mode 100644
index 000000000..c3f1f8e94
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-BlobSoftDeleteIndividualBlob.yaml
@@ -0,0 +1,18 @@
+name: revcl-BlobSoftDeleteIndividualBlob
+title: Enable soft delete for blobs
+description: Blob soft delete protects an individual blob and its versions, snapshots,
+ and metadata from accidental deletes or overwrites by maintaining the deleted data
+ in the system for a specified period of time.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 9ada4666-7e13-4c10-96b9-153d89f89dc7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-CustomerManagedFailoverOperation.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-CustomerManagedFailoverOperation.yaml
new file mode 100644
index 000000000..321c37816
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-CustomerManagedFailoverOperation.yaml
@@ -0,0 +1,15 @@
+name: revcl-CustomerManagedFailoverOperation
+title: 'For write operation after failover, use customer-Managed Failover '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 2fa56c56-ad48-4408-be72-734c486ba280
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-DeleteLockMaliciousDeletion.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-DeleteLockMaliciousDeletion.yaml
new file mode 100644
index 000000000..4af9f9ab4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-DeleteLockMaliciousDeletion.yaml
@@ -0,0 +1,18 @@
+name: revcl-DeleteLockMaliciousDeletion
+title: Apply a Delete lock to prevent accidental or malicious deletion of storage
+ accounts
+description: Assigning a Delete lock to your storage account helps protect the availability
+ of your data, minimizing the risk of disruptions to your business operations.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 2
+labels:
+ guid: 85e2213d-bd7b-4b01-8f7b-95e06e158e3e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/lock-account-resource
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-LeverageGrsGzrsStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-LeverageGrsGzrsStorage.yaml
new file mode 100644
index 000000000..7c89da0de
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-LeverageGrsGzrsStorage.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageGrsGzrsStorage
+title: Leverage GRS, ZRS or GZRS storage for the highest availability
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 0
+labels:
+ guid: e05bbe20-9d49-4fda-9777-8424d116785c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-redundancy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-MicrosoftManagedFailoverDetails.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-MicrosoftManagedFailoverDetails.yaml
new file mode 100644
index 000000000..2ebfed9e2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-MicrosoftManagedFailoverDetails.yaml
@@ -0,0 +1,15 @@
+name: revcl-MicrosoftManagedFailoverDetails
+title: Understand Microsoft-Managed Failover details
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: dc0590cf-65de-48e1-909c-cbd579266bcc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-disaster-recovery-guidance#microsoft-managed-failover
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-SoftDelete.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-SoftDelete.yaml
new file mode 100644
index 000000000..221d12a11
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-SoftDelete.yaml
@@ -0,0 +1,15 @@
+name: revcl-SoftDelete
+title: Enable Soft Delete
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: a274faa1-abfe-49d5-9d04-c3c4919cb1b3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-StorageAccountContainersSoftDelete.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-StorageAccountContainersSoftDelete.yaml
new file mode 100644
index 000000000..1f07675c2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-StorageAccountContainersSoftDelete.yaml
@@ -0,0 +1,17 @@
+name: revcl-StorageAccountContainersSoftDelete
+title: Enable soft delete for Storage Account Containers
+description: Container soft delete protects your data from being accidentally deleted
+ by maintaining the deleted data in the system for a specified period of time.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 2
+labels:
+ guid: a3992c2d-e6e2-4065-a3a7-6af4a691e893
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-StoragevAccountTypePerformance.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-StoragevAccountTypePerformance.yaml
new file mode 100644
index 000000000..4478166f7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/revcl-StoragevAccountTypePerformance.yaml
@@ -0,0 +1,15 @@
+name: revcl-StoragevAccountTypePerformance
+title: Leverage a storagev2 account type for better performance and reliability
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 0
+labels:
+ guid: cb8eb8c0-aa62-4a25-a495-6eaa8dc4a243
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-account-upgrade?tabs=azure-portal
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureContentDeliveryNetworkFrontDoorEndpoints.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureContentDeliveryNetworkFrontDoorEndpoints.yaml
new file mode 100644
index 000000000..caec884ed
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureContentDeliveryNetworkFrontDoorEndpoints.yaml
@@ -0,0 +1,21 @@
+name: wafsg-AzureContentDeliveryNetworkFrontDoorEndpoints
+title: 'Use failure mode analysis: Minimize points of failure by considering internal
+ dependencies such as the availability of virtual networks, Azure Key Vault, or Azure
+ Content Delivery Network or Azure Front Door endpoints. Failures can occur if credentials
+ required by workloads to access Blob Storage go missing from Key Vault, or if workloads
+ use an endpoint based on a content delivery network that''s removed. In these cases,
+ workloads might need to use an alternative endpoint to connect. For general information
+ about failure mode analysis, see Recommendations for performing failure mode analysis.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 42f14a23-b4d3-47a8-a0d1-5f9987aab27b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems-1.yaml
new file mode 100644
index 000000000..50825d401
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems-1.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems-1
+title: 'Monitor potential availability problems: Subscribe to the Azure Service Health
+ dashboard to monitor potential availability problems. Use storage metrics and diagnostic
+ logs in Azure Monitor to investigate alerts.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 58746f78-dba5-4a3a-b4a5-bdbcb9a00a28
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems.yaml
new file mode 100644
index 000000000..139022d52
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureServiceHealthDashboardPotentialAvailabilityProblems
+title: 'Monitor potential availability problems: Subscribe to the Azure Service Health
+ dashboard to monitor potential availability problems. Use storage metrics in Azure
+ Monitor and diagnostic logs to investigate alerts.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 778ba0b4-9f48-4fd5-a788-949f2f2ea331
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-DataProtectionFeaturesPotentialDataLoss-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-DataProtectionFeaturesPotentialDataLoss-1.yaml
new file mode 100644
index 000000000..9e4e845cc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-DataProtectionFeaturesPotentialDataLoss-1.yaml
@@ -0,0 +1,18 @@
+name: wafsg-DataProtectionFeaturesPotentialDataLoss-1
+title: 'Create a recovery plan: Consider data protection features, backup and restore
+ operations, or failover procedures. Prepare for potential data loss and data inconsistencies
+ and the time and cost of failing over. For more information, see Recommendations
+ for designing a disaster recovery strategy.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 02300e9f-94e9-4cbd-b3ca-5c6cf17f2833
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-DataProtectionFeaturesPotentialDataLoss.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-DataProtectionFeaturesPotentialDataLoss.yaml
new file mode 100644
index 000000000..0e0e3b360
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-DataProtectionFeaturesPotentialDataLoss.yaml
@@ -0,0 +1,18 @@
+name: wafsg-DataProtectionFeaturesPotentialDataLoss
+title: 'Create a recovery plan: Consider data protection features, backup and restore
+ operations, or failover procedures. Prepare for potential data loss and data inconsistencies
+ and the time and cost of failing over. For more information, see Recommendations
+ for designing a disaster recovery strategy.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: d93ddbcf-8760-4b99-8fdc-4f31268e76f7
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-FailureModeAnalysisAzureServiceLevelAgreements-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-FailureModeAnalysisAzureServiceLevelAgreements-1.yaml
new file mode 100644
index 000000000..bee1a0f90
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-FailureModeAnalysisAzureServiceLevelAgreements-1.yaml
@@ -0,0 +1,20 @@
+name: wafsg-FailureModeAnalysisAzureServiceLevelAgreements-1
+title: 'Define reliability and recovery targets: Review the Azure service-level agreements
+ (SLAs). Derive the service-level objective (SLO) for the storage account. For example,
+ the redundancy configuration that you chose might affect the SLO. Consider the effect
+ of a regional outage, the potential for data loss, and the time required to restore
+ access after an outage. Also consider the availability of internal dependencies
+ that you identified as part of your failure mode analysis.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 76ae68b8-d5dd-44a0-a0e0-9abec3695316
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-FailureModeAnalysisAzureServiceLevelAgreements.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-FailureModeAnalysisAzureServiceLevelAgreements.yaml
new file mode 100644
index 000000000..51f216a54
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-FailureModeAnalysisAzureServiceLevelAgreements.yaml
@@ -0,0 +1,20 @@
+name: wafsg-FailureModeAnalysisAzureServiceLevelAgreements
+title: 'Define reliability and recovery targets: Review the Azure service-level agreements
+ (SLAs). Derive the service-level objective (SLO) for the storage account. For example,
+ the SLO might be affected by the redundancy configuration that you chose. Consider
+ the effect of a regional outage, the potential for data loss, and the time required
+ to restore access after an outage. Also consider the availability of any internal
+ dependencies that you identified as part of your failure mode analysis.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: ce838d0f-8069-420d-9adb-5c508c091e3f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-GzrsConfigurationOptionsDifferentAvailabilityZones.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-GzrsConfigurationOptionsDifferentAvailabilityZones.yaml
new file mode 100644
index 000000000..83d2848be
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-GzrsConfigurationOptionsDifferentAvailabilityZones.yaml
@@ -0,0 +1,18 @@
+name: wafsg-GzrsConfigurationOptionsDifferentAvailabilityZones
+title: Configure your account for redundancy. For maximum availability and durability,
+ configure your account by using zone-redundant storage (ZRS) or GZRS.
+description: Redundancy protects your data against unexpected failures. The ZRS and
+ GZRS configuration options replicate across different availability zones and enable
+ applications to continue reading data during an outage. For more information, see
+ Durability and availability by outage scenario and Durability and availability parameters.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 0a6a14f8-c014-4339-a444-45013d989209
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LastSynchronizationTimePropertyGzrsConfigurations-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LastSynchronizationTimePropertyGzrsConfigurations-1.yaml
new file mode 100644
index 000000000..41e012f9f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LastSynchronizationTimePropertyGzrsConfigurations-1.yaml
@@ -0,0 +1,20 @@
+name: wafsg-LastSynchronizationTimePropertyGzrsConfigurations-1
+title: Before you initiate a failover or failback, check the value of the last synchronization
+ time property to evaluate the potential for data loss. This recommendation applies
+ only to GRS and GZRS configurations.
+description: This property helps you estimate how much data you might lose if you
+ initiate an account failover. All data and metadata that's written before the last
+ synchronization time is available on the secondary region, but you might lose data
+ and metadata that's written after the last synchronization time because it's not
+ written to the secondary region.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: f436bbde-bfd0-4be2-85a6-c13f0d79cee1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LastSynchronizationTimePropertyGzrsConfigurations.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LastSynchronizationTimePropertyGzrsConfigurations.yaml
new file mode 100644
index 000000000..2d499b702
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LastSynchronizationTimePropertyGzrsConfigurations.yaml
@@ -0,0 +1,20 @@
+name: wafsg-LastSynchronizationTimePropertyGzrsConfigurations
+title: Before initiating a failover or failback, evaluate the potential for data loss
+ by checking the value of the last synchronization time property. This recommendation
+ applies only to GRS and GZRS configurations.
+description: This property helps you estimate how much data you might lose by initiating
+ an account failover. All data and metadata written before the last synchronization
+ time is available on the secondary region, but data and metadata written after the
+ last synchronization time might be lost because it's not written to the secondary
+ region.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: af07c8fb-ba63-41e5-b924-3bc6759ad671
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LimitedAzureRegionsPremiumSmbShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LimitedAzureRegionsPremiumSmbShares.yaml
new file mode 100644
index 000000000..4749177c5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-LimitedAzureRegionsPremiumSmbShares.yaml
@@ -0,0 +1,24 @@
+name: wafsg-LimitedAzureRegionsPremiumSmbShares
+title: "Configure your storage account for redundancy. For maximum availability and\
+ \ durability, configure your account with\u202Fzone-redundant storage (ZRS), GRS,\
+ \ or\u202FGZRS. Limited Azure regions support ZRS for standard and premium file\
+ \ shares. Only standard SMB accounts support GRS and GZRS. Premium SMB shares and\
+ \ NFS shares don't support GRS and GZRS. Azure Files doesn't support read-access\
+ \ geo-redundant storage (RA-GRS) or read-access geo-zone-redundant storage (RA-GZRS).\
+ \ If you configure a storage account to use RA-GRS or RA-GZRS, the file shares are\
+ \ configured and billed as GRS or GZRS."
+description: Redundancy protects your data against unexpected failures. The ZRS and
+ GZRS configuration options replicate across various availability zones and enable
+ applications to continue reading data during an outage. For more information, see
+ Durability and availability by outage scenario and Durability and availability parameters.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 57930240-9165-4fe1-a7ea-24bc09930158
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MaximumDurabilityAvailabilityZones-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MaximumDurabilityAvailabilityZones-1.yaml
new file mode 100644
index 000000000..fbc57a6f6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MaximumDurabilityAvailabilityZones-1.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MaximumDurabilityAvailabilityZones-1
+title: 'Configure data redundancy: For maximum durability, choose a configuration
+ that copies data across availability zones or global regions. For maximum availability,
+ choose a configuration that allows clients to read data from the secondary region
+ during an outage of the primary region.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 0363e36d-5971-4e00-8bc6-7e0fd7e00889
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MaximumDurabilityAvailabilityZones.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MaximumDurabilityAvailabilityZones.yaml
new file mode 100644
index 000000000..ec6457454
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MaximumDurabilityAvailabilityZones.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MaximumDurabilityAvailabilityZones
+title: 'Configure data redundancy: For maximum durability, choose a configuration
+ that copies data across availability zones or global regions. For maximum availability,
+ choose a configuration that allows clients to read data from the secondary region
+ during an outage of the primary region.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 8930145f-653c-4630-8090-7ddfb1522a30
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MissingContentDeliveryNetworkAzureContentDeliveryNetwork.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MissingContentDeliveryNetworkAzureContentDeliveryNetwork.yaml
new file mode 100644
index 000000000..b9f54f650
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-MissingContentDeliveryNetworkAzureContentDeliveryNetwork.yaml
@@ -0,0 +1,22 @@
+name: wafsg-MissingContentDeliveryNetworkAzureContentDeliveryNetwork
+title: 'Use failure mode analysis: Minimize points of failure by considering internal
+ dependencies such as the availability of virtual networks, Azure Key Vault, or Azure
+ Content Delivery Network or Azure Front Door endpoints. Failures can occur if you
+ need credentials to access Azure Files, and the credentials go missing from Key
+ Vault. Or you might have a failure if your workloads use an endpoint that''s based
+ on a missing content delivery network. In these cases, you might need to configure
+ your workloads to connect to an alternative endpoint. For general information about
+ failure mode analysis, see Recommendations for performing failure mode analysis.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 49da89d4-35df-4837-884f-ffa0dc248d0b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-PremisesSmbFileSharesFileShareLevel.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-PremisesSmbFileSharesFileShareLevel.yaml
new file mode 100644
index 000000000..337f57b90
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-PremisesSmbFileSharesFileShareLevel.yaml
@@ -0,0 +1,26 @@
+name: wafsg-PremisesSmbFileSharesFileShareLevel
+title: "As a part of your backup and recovery strategy, enable\u202Fsoft delete\u202F\
+ and\u202Fuse snapshots for point-in-time restore. You can use Azure Backup to back\
+ \ up your SMB file shares. You can also use Azure File Sync to back up on-premises\
+ \ SMB file shares to an Azure file share. Azure Backup also allows you to do a\
+ \ vaulted backup (preview) of Azure Files to protect your data from ransomware attacks\
+ \ or source data loss due to a malicious actor or rogue admin. By using vaulted\
+ \ backup, Azure Backup copies and stores data in the Recovery Services vault. This\
+ \ creates an offsite copy of data that you can retain for up to 99 years. Azure\
+ \ Backup creates and manages the recovery points as per the schedule and retention\
+ \ defined in the backup policy. Learn more."
+description: Soft delete works on a file share level to protect Azure file shares
+ against accidental deletion. Point-in-time restore protects against accidental deletion
+ or corruption because you can restore file shares to an earlier state. For more
+ information, see Data protection overview.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 0bcee250-521d-467f-94d6-ddeeb20844af
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-RecoveryTargetsFeatures-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-RecoveryTargetsFeatures-1.yaml
new file mode 100644
index 000000000..f97951f21
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-RecoveryTargetsFeatures-1.yaml
@@ -0,0 +1,16 @@
+name: wafsg-RecoveryTargetsFeatures-1
+title: 'Explore features to help you meet your recovery targets: Make files restorable
+ so that you can recover corrupted, edited, or deleted files.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: a5aa4909-7ee1-421e-a4c6-fa465f9bbdb5
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-RecoveryTargetsFeatures.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-RecoveryTargetsFeatures.yaml
new file mode 100644
index 000000000..045fce7cc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-RecoveryTargetsFeatures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-RecoveryTargetsFeatures
+title: 'Explore features to help you meet your recovery targets: Make blobs restorable
+ so that they can be recovered if they''re corrupted, edited, or deleted by mistake.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: ff928466-de8a-496a-b5ba-aa8c358e3e09
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-SecondaryRegionPrimaryRegion-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-SecondaryRegionPrimaryRegion-1.yaml
new file mode 100644
index 000000000..c9197e4c9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-SecondaryRegionPrimaryRegion-1.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SecondaryRegionPrimaryRegion-1
+title: 'Design applications: Design your applications to seamlessly shift so that
+ they read data from a secondary region if the primary region is unavailable. This
+ design consideration only applies to geo-redundant storage (GRS) and geo-zone-redundant
+ storage (GZRS) configurations. Design your applications to properly handle outages,
+ which reduces downtime for customers.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 6104ed5f-a4ee-4d87-82dd-1f7bafd7c468
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-SecondaryRegionPrimaryRegion.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-SecondaryRegionPrimaryRegion.yaml
new file mode 100644
index 000000000..a5cd9971b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-SecondaryRegionPrimaryRegion.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SecondaryRegionPrimaryRegion
+title: 'Design applications: Design applications to seamlessly shift to reading data
+ from the secondary region if the primary region becomes unavailable for any reason.
+ This only applies to geo-redundant storage (GRS) and geo-zone-redundant storage
+ (GZRS) configurations. Designing applications to handle outages reduces downtime
+ for end users.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: b819c0de-783e-4b18-8232-416710492029
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-TimeRestoreOptionsDataProtectionOverview.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-TimeRestoreOptionsDataProtectionOverview.yaml
new file mode 100644
index 000000000..260c0f326
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Reliability/wafsg-TimeRestoreOptionsDataProtectionOverview.yaml
@@ -0,0 +1,19 @@
+name: wafsg-TimeRestoreOptionsDataProtectionOverview
+title: As a part of your backup and recovery strategy, enable the container soft delete,
+ blob soft delete, versioning, and point-in-time restore options.
+description: The soft delete option enables a storage account to recover deleted containers
+ and blobs. The versioning option automatically tracks changes made to blobs. This
+ option lets you restore a blob to a previous state.The point-in-time restore option
+ protects against accidental blob deletion or corruption and lets you restore block
+ blob data to an earlier state. For more information, see Data protection overview.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 349d483b-5d14-4335-954a-4f8cbecfd7df
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ASasExpirationPolicySasExpirationPolicies.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ASasExpirationPolicySasExpirationPolicies.yaml
new file mode 100644
index 000000000..84e94979b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ASasExpirationPolicySasExpirationPolicies.yaml
@@ -0,0 +1,19 @@
+name: revcl-ASasExpirationPolicySasExpirationPolicies
+title: Consider configuring an SAS expiration policy
+description: A SAS expiration policy specifies a recommended interval over which the
+ SAS is valid. SAS expiration policies apply to a service SAS or an account SAS.
+ When a user generates service SAS or an account SAS with a validity interval that
+ is larger than the recommended interval, they'll see a warning.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 352beee0-79b5-488d-bfc4-972cd3cd21bf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/sas-expiration-policy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AccidentalDeleteOperationSoftDelete.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AccidentalDeleteOperationSoftDelete.yaml
new file mode 100644
index 000000000..9a2139e33
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AccidentalDeleteOperationSoftDelete.yaml
@@ -0,0 +1,17 @@
+name: revcl-AccidentalDeleteOperationSoftDelete
+title: Enable 'soft delete' for containers
+description: Soft delete for containers enables you to recover a container after it
+ has been deleted, for example recover from an accidental delete operation.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 43a58a9c-2289-4c3d-9b57-d0c655462f2a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AdHocSasServiceSasNearTermExpirationTimes.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AdHocSasServiceSasNearTermExpirationTimes.yaml
new file mode 100644
index 000000000..881407699
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AdHocSasServiceSasNearTermExpirationTimes.yaml
@@ -0,0 +1,20 @@
+name: revcl-AdHocSasServiceSasNearTermExpirationTimes
+title: Strive for short validity periods for ad-hoc SAS
+description: Use near-term expiration times on an ad hoc SAS service SAS or account
+ SAS. In this way, even if a SAS is compromised, it's valid only for a short time.
+ This practice is especially important if you cannot reference a stored access policy.
+ Near-term expiration times also limit the amount of data that can be written to
+ a blob by limiting the time available to upload to it.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 27138b82-1102-4cac-9eae-01e6e842e52f
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AzureActiveDirectoryAzureAdTokens.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AzureActiveDirectoryAzureAdTokens.yaml
new file mode 100644
index 000000000..5eb7967be
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AzureActiveDirectoryAzureAdTokens.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureActiveDirectoryAzureAdTokens
+title: Use Azure Active Directory (Azure AD) tokens for blob access
+description: AAD tokens should be favored over shared access signatures, wherever
+ possible
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: e1ce15dd-3f0d-45e7-92d4-1e3611cc57b4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/authorize-data-access
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AzureActiveDirectoryUserDelegationSas.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AzureActiveDirectoryUserDelegationSas.yaml
new file mode 100644
index 000000000..da0405ae1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-AzureActiveDirectoryUserDelegationSas.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureActiveDirectoryUserDelegationSas
+title: When using SAS, prefer 'user delegation SAS' over storage-account-key based
+ SAS.
+description: 'A user delegation SAS is secured with Azure Active Directory (Azure
+ AD) credentials and also by the permissions specified for the SAS. A user delegation
+ SAS is analogous to a service SAS in terms of its scope and function, but offers
+ security benefits over the service SAS. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 55461e1a-3e34-453a-9c86-39648b652d6c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-sas-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#best-practices-when-using-sas
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ClassicDeploymentModelArmDeploymentModel.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ClassicDeploymentModelArmDeploymentModel.yaml
new file mode 100644
index 000000000..df0be32bf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ClassicDeploymentModelArmDeploymentModel.yaml
@@ -0,0 +1,18 @@
+name: revcl-ClassicDeploymentModelArmDeploymentModel
+title: Ensure older storage accounts are not using 'classic deployment model'
+description: Newly created storage accounts are created using the ARM deployment model,
+ so that RBAC, auditing etc. are all enabled. Ensure that there are no old storage
+ accounts with classic deployment model in a subscription
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 30e37c3e-2971-41b2-963c-eee079b598de
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/migration-classic-resource-manager-overview#migration-of-storage-accounts
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ClientSideEncryption.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ClientSideEncryption.yaml
new file mode 100644
index 000000000..4a95392df
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ClientSideEncryption.yaml
@@ -0,0 +1,15 @@
+name: revcl-ClientSideEncryption
+title: Determine which/if client-side encryption should be used.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: e842e52f-4721-4d92-ac1b-1cd521e54a29
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/encryption-customer-provided-keys
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ContainerSoftDeleteStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ContainerSoftDeleteStorageAccount.yaml
new file mode 100644
index 000000000..2d8ca4469
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ContainerSoftDeleteStorageAccount.yaml
@@ -0,0 +1,16 @@
+name: revcl-ContainerSoftDeleteStorageAccount
+title: Enable container soft delete for the storage account to recover a deleted container
+ and its contents.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 159aac9f-863f-4f48-82cf-00c28fa97a0e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/data-protection-overview#recommendations-for-basic-data-protection
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ControlPlaneOperationsActivityLogData.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ControlPlaneOperationsActivityLogData.yaml
new file mode 100644
index 000000000..7388f3470
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ControlPlaneOperationsActivityLogData.yaml
@@ -0,0 +1,19 @@
+name: revcl-ControlPlaneOperationsActivityLogData
+title: Consider using Azure Monitor to audit control plane operations on the storage
+ account
+description: Use Activity Log data to identify 'when', 'who', 'what' and 'how' the
+ security of your storage account is being viewed or changed (i.e. storage account
+ keys, access policies, etc.).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: d7999a64-6f43-489a-af42-c78e78c06a73
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/blob-storage-monitoring-scenarios#audit-account-activity
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-CrossOriginResourceSharingBroadCorsPolicies.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-CrossOriginResourceSharingBroadCorsPolicies.yaml
new file mode 100644
index 000000000..95ba5d94a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-CrossOriginResourceSharingBroadCorsPolicies.yaml
@@ -0,0 +1,18 @@
+name: revcl-CrossOriginResourceSharingBroadCorsPolicies
+title: Avoid overly broad CORS policies
+description: Storage supports CORS (Cross-Origin Resource Sharing), i.e. an HTTP feature
+ that enables web apps from a different domain to loosen the same-origin policy.
+ When enabling CORS, keep the CorsRules to the least privilege.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: cef39812-bd46-43cb-aac8-ac199ebb91a3
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-CustomDomainsStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-CustomDomainsStorageAccount.yaml
new file mode 100644
index 000000000..56a8332a5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-CustomDomainsStorageAccount.yaml
@@ -0,0 +1,19 @@
+name: revcl-CustomDomainsStorageAccount
+title: When enforcing HTTPS (disabling HTTP), check that you do not use custom domains
+ (CNAME) for the storage account.
+description: When configuring a custom domain (hostname) on a storage account, check
+ whether you need TLS/HTTPS; if so, you might have to put Azure CDN in front of your
+ storage account.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 79b588de-fc49-472c-b3cd-21bf77036e5e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/storage-custom-domain-name
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-KeyExpirationPolicyStorageAccountKeys.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-KeyExpirationPolicyStorageAccountKeys.yaml
new file mode 100644
index 000000000..0c71fc7b1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-KeyExpirationPolicyStorageAccountKeys.yaml
@@ -0,0 +1,18 @@
+name: revcl-KeyExpirationPolicyStorageAccountKeys
+title: When using storage account keys, consider enabling a 'key expiration policy'
+description: A key expiration policy enables you to set a reminder for the rotation
+ of the account access keys. The reminder is displayed if the specified interval
+ has elapsed and the keys have not yet been rotated.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: a22a4956-e7a8-4dc4-a20e-27c3e29711b1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#create-a-key-expiration-policy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeastPrivilegeSecurityPrincipal.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeastPrivilegeSecurityPrincipal.yaml
new file mode 100644
index 000000000..786b883ad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeastPrivilegeSecurityPrincipal.yaml
@@ -0,0 +1,17 @@
+name: revcl-LeastPrivilegeSecurityPrincipal
+title: Least privilege in IaM permissions
+description: When assigning a role to a user, group, or application, grant that security
+ principal only those permissions that are necessary for them to perform their tasks.
+ Limiting access to resources helps prevent both unintentional and malicious misuse
+ of your data.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: a4b1410d-4395-48a8-a228-9b3d6b57cfc6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeverageMicrosoftDefenderStorageAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeverageMicrosoftDefenderStorageAccounts.yaml
new file mode 100644
index 000000000..ec5dac2d9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeverageMicrosoftDefenderStorageAccounts.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageMicrosoftDefenderStorageAccounts
+title: Enable Microsoft Defender for all of your storage accounts
+description: Leverage Microsoft Defender to learn about suspicious activity and misconfigurations.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: fc5972cd-4cd2-41b0-a803-7f5e6b4bfd3d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/azure-defender-storage-configure
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeverageResourceGraphExplorerPublicBlobAccess.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeverageResourceGraphExplorerPublicBlobAccess.yaml
new file mode 100644
index 000000000..069dc9e8e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LeverageResourceGraphExplorerPublicBlobAccess.yaml
@@ -0,0 +1,19 @@
+name: revcl-LeverageResourceGraphExplorerPublicBlobAccess
+title: 'Consider whether public blob access is needed, or whether it can be disabled
+ for certain storage accounts. '
+description: Leverage Resource Graph Explorer (resources | where type == 'microsoft.storage/storageaccounts'
+ | where properties['allowBlobPublicAccess'] == true) to find storage accounts which
+ allow anonymous blob access.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 659ae558-b937-4d49-a5e1-112dbd7ba012
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#allow-or-disallow-public-read-access-for-a-storage-account
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LittleAuditCapabilitiesUserDelegationSas.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LittleAuditCapabilitiesUserDelegationSas.yaml
new file mode 100644
index 000000000..38f70d18a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-LittleAuditCapabilitiesUserDelegationSas.yaml
@@ -0,0 +1,21 @@
+name: revcl-LittleAuditCapabilitiesUserDelegationSas
+title: Consider disabling storage account keys, so that only AAD access (and user
+ delegation SAS) is supported.
+description: 'Storage account keys (''shared keys'') have very little audit capabilities.
+ While it can be monitored on who/when fetched a copy of the keys, once the keys
+ are in the hands of multiple people, it is impossible to attribute usage to a specific
+ user. Solely relying on AAD authentication makes it easier to tie storage access
+ to a user. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 15f51296-5398-4e6d-bd22-7dd142b06c21
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/storageservices/authorize-with-shared-key
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-MicrosoftCloudSecurityBenchmarkAzureSecurityBaseline.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-MicrosoftCloudSecurityBenchmarkAzureSecurityBaseline.yaml
new file mode 100644
index 000000000..f2c3f3dac
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-MicrosoftCloudSecurityBenchmarkAzureSecurityBaseline.yaml
@@ -0,0 +1,17 @@
+name: revcl-MicrosoftCloudSecurityBenchmarkAzureSecurityBaseline
+title: Consider the 'Azure security baseline for storage'
+description: Apply guidance from the Microsoft cloud security benchmark related to
+ Storage
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: d237de14-3b16-4c21-b7aa-9b64604489a8
+links:
+- type: docs
+ url: https://learn.microsoft.com/security/benchmark/azure/baselines/storage-security-baseline
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-NarrowScopeSingleResource.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-NarrowScopeSingleResource.yaml
new file mode 100644
index 000000000..dfcd4fbb5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-NarrowScopeSingleResource.yaml
@@ -0,0 +1,17 @@
+name: revcl-NarrowScopeSingleResource
+title: Apply a narrow scope to a SAS
+description: When creating a SAS, be as specific and restrictive as possible. Prefer
+ a SAS for a single resource and operation over a SAS which gives much broader access.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 4721d928-c1b1-4cd5-81e5-4a29a9de399c
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/storageservices/delegate-access-with-shared-access-signature
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PlatformEncryption.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PlatformEncryption.yaml
new file mode 100644
index 000000000..380df6a1c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PlatformEncryption.yaml
@@ -0,0 +1,15 @@
+name: revcl-PlatformEncryption
+title: Determine which/if platform encryption should be used.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 8dd457e9-2713-48b8-8110-2cac6eae01e6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PricingModelLargeContents.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PricingModelLargeContents.yaml
new file mode 100644
index 000000000..b993ddab2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PricingModelLargeContents.yaml
@@ -0,0 +1,16 @@
+name: revcl-PricingModelLargeContents
+title: 'Consider checking uploaded data, after clients used a SAS to upload a file. '
+description: A SAS cannot constrain how much data a client uploads; given the pricing
+ model of amount of storage over time, it might make sense to validate whether clients
+ uploaded maliciously large contents.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 2
+labels:
+ guid: 348b263e-6dd6-4051-8a36-498f6dbad38e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PublicIpAddressAzureComputeResources.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PublicIpAddressAzureComputeResources.yaml
new file mode 100644
index 000000000..9b80d30df
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-PublicIpAddressAzureComputeResources.yaml
@@ -0,0 +1,18 @@
+name: revcl-PublicIpAddressAzureComputeResources
+title: Consider using private endpoints for Azure Storage
+description: Azure Storage by default has a public IP address and is Internet-reachable.
+ Private endpoints allow to securely expose Azure Storage only to those Azure Compute
+ resources that need access, thus eliminating exposure to the public Internet
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: f42d78e7-9d17-4a73-a22a-5a67e7a8ed4b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-private-endpoints
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ResourceLocksStorageAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ResourceLocksStorageAccounts.yaml
new file mode 100644
index 000000000..fd0f04016
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ResourceLocksStorageAccounts.yaml
@@ -0,0 +1,17 @@
+name: revcl-ResourceLocksStorageAccounts
+title: Enable resource locks on storage accounts
+description: Prevents accidental deletion of a storage account, by forcing the user
+ to first remove the deletion lock, prior to deletion
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 5398e6de-d227-4dd1-92b0-6c21d7999a64
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/lock-account-resource
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SecureTransferStorageAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SecureTransferStorageAccounts.yaml
new file mode 100644
index 000000000..8747c6c5a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SecureTransferStorageAccounts.yaml
@@ -0,0 +1,15 @@
+name: revcl-SecureTransferStorageAccounts
+title: Secure transfer to storage accounts should be enabled
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: b03ed428-4617-4067-a787-85468b9ccf3f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SftpEndpointAcls.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SftpEndpointAcls.yaml
new file mode 100644
index 000000000..361f5165e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SftpEndpointAcls.yaml
@@ -0,0 +1,15 @@
+name: revcl-SftpEndpointAcls
+title: 'SFTP: The SFTP endpoint does not support POSIX-like ACLs.'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 9f89dc7b-33be-42a1-a27f-7b9e91be1f38
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-known-issues#authentication-and-authorization
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SharedAccessSignatureSasTokens.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SharedAccessSignatureSasTokens.yaml
new file mode 100644
index 000000000..d5362cd37
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SharedAccessSignatureSasTokens.yaml
@@ -0,0 +1,17 @@
+name: revcl-SharedAccessSignatureSasTokens
+title: Limit shared access signature (SAS) tokens to HTTPS connections only
+description: Requiring HTTPS when a client uses a SAS token to access blob data helps
+ to minimize the risk of credential loss.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 6b4bed3d-5035-447c-8347-dc56028a71ff
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-sas-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteBlobContainers.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteBlobContainers.yaml
new file mode 100644
index 000000000..ea8f91b4e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteBlobContainers.yaml
@@ -0,0 +1,18 @@
+name: revcl-SoftDeleteBlobContainers
+title: Disable 'soft delete' for blobs
+description: 'Consider selectively disabling ''soft delete'' for certain blob containers,
+ for example if the application must ensure that deleted information is immediately
+ deleted, e.g. for confidentiality, privacy or compliance reasons. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 3f1d5e87-2e52-4e36-81cc-58b4a4b1510e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-enable
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteComplianceReasons.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteComplianceReasons.yaml
new file mode 100644
index 000000000..e16e13a19
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteComplianceReasons.yaml
@@ -0,0 +1,18 @@
+name: revcl-SoftDeleteComplianceReasons
+title: Disable 'soft delete' for containers
+description: 'Consider selectively disabling ''soft delete'' for certain blob containers,
+ for example if the application must ensure that deleted information is immediately
+ deleted, e.g. for confidentiality, privacy or compliance reasons. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 3e3453a3-c863-4964-ab65-2d6c15f51296
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-container-enable
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteSoftDeleteMechanism.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteSoftDeleteMechanism.yaml
new file mode 100644
index 000000000..0565ff941
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SoftDeleteSoftDeleteMechanism.yaml
@@ -0,0 +1,16 @@
+name: revcl-SoftDeleteSoftDeleteMechanism
+title: Enable 'soft delete' for blobs
+description: The soft-delete mechanism allows to recover accidentally deleted blobs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 503547c1-447e-4c66-828a-7100f1ce16dd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/soft-delete-blob-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SourceCodeRepositoryStorageAccountKeys.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SourceCodeRepositoryStorageAccountKeys.yaml
new file mode 100644
index 000000000..458b97a1d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SourceCodeRepositoryStorageAccountKeys.yaml
@@ -0,0 +1,16 @@
+name: revcl-SourceCodeRepositoryStorageAccountKeys
+title: Consider configuring your application's source code repository to detect checked-in
+ connection strings and storage account keys.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 028a71ff-e1ce-415d-b3f0-d5e772d41e36
+links:
+- type: docs
+ url: https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SpecificClientIpAddressClientIpAddresses.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SpecificClientIpAddressClientIpAddresses.yaml
new file mode 100644
index 000000000..6374b5bd2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-SpecificClientIpAddressClientIpAddresses.yaml
@@ -0,0 +1,17 @@
+name: revcl-SpecificClientIpAddressClientIpAddresses
+title: Consider scoping SAS to a specific client IP address, wherever possible
+description: 'A SAS can include parameters on which client IP addresses or address
+ ranges are authorized to request a resource using the SAS. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: fd7b28dc-9355-4562-82bf-e4564b0d834a
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/storageservices/create-account-sas
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-StorageAccountKeyAzureStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-StorageAccountKeyAzureStorage.yaml
new file mode 100644
index 000000000..b39e1ba57
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-StorageAccountKeyAzureStorage.yaml
@@ -0,0 +1,20 @@
+name: revcl-StorageAccountKeyAzureStorage
+title: Consider storing connection strings in Azure KeyVault (in scenarios where managed
+ identities are not possible)
+description: Ideally, your application should be using a managed identity to authenticate
+ to Azure Storage. If that is not possible, consider having the storage credential
+ (connection string, storage account key, SAS, service principal credential) in Azure
+ KeyVault or an equivalent service.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 11cc57b4-a4b1-4410-b439-58a8c2289b3d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/framework/security/design-storage-keys
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-StorageAccountKeysStoredAccessPolicies.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-StorageAccountKeysStoredAccessPolicies.yaml
new file mode 100644
index 000000000..157c8c41c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-StorageAccountKeysStoredAccessPolicies.yaml
@@ -0,0 +1,17 @@
+name: revcl-StorageAccountKeysStoredAccessPolicies
+title: Consider linking SAS to a stored access policy
+description: 'Stored access policies give you the option to revoke permissions for
+ a service SAS without having to regenerate the storage account keys. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 77036e5e-6b4b-4ed3-b503-547c1347dc56
+links:
+- type: docs
+ url: https://learn.microsoft.com/rest/api/storageservices/define-stored-access-policy
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ThreadModelPlatformManagedKey.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ThreadModelPlatformManagedKey.yaml
new file mode 100644
index 000000000..0c6e7dc53
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-ThreadModelPlatformManagedKey.yaml
@@ -0,0 +1,22 @@
+name: revcl-ThreadModelPlatformManagedKey
+title: Determine how data at rest should be encrypted. Understand the thread model
+ for data.
+description: Data at rest is always encrypted server-side, and in addition might be
+ encrypted client-side as well. Server-side encryption might happen using a platform-managed
+ key (default) or customer-managed key. Client-side encryption might happen by either
+ having the client supply an encryption/decryption key on a per-blob basis to Azure
+ storage, or by completely handling encryption on the client-side. thus not relying
+ on Azure Storage at all for confidentiality guarantees.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 3d90cae2-cc88-4137-86f7-c0cbafe61464
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-service-encryption
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-TimeBasedRetentionPoliciesLegalHold.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-TimeBasedRetentionPoliciesLegalHold.yaml
new file mode 100644
index 000000000..e67473435
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-TimeBasedRetentionPoliciesLegalHold.yaml
@@ -0,0 +1,20 @@
+name: revcl-TimeBasedRetentionPoliciesLegalHold
+title: Consider immutable blobs
+description: Consider 'legal hold' or 'time-based retention' policies for blobs, so
+ that is is impossible to delete the blob, the container, or the storage account.
+ Please note that 'impossible' actually means 'impossible'; once a storage account
+ contains an immutable blob, the only way to 'get rid' of that storage account is
+ by cancelling the Azure subscription.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: 6f4389a8-f42c-478e-98c0-6a73a22a4956
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/immutable-storage-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-UnprotectedHttpAccessStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-UnprotectedHttpAccessStorageAccount.yaml
new file mode 100644
index 000000000..3be488469
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-UnprotectedHttpAccessStorageAccount.yaml
@@ -0,0 +1,18 @@
+name: revcl-UnprotectedHttpAccessStorageAccount
+title: Require HTTPS, i.e. disable port 80 on the storage account
+description: 'Consider disabling unprotected HTTP/80 access to the storage account,
+ so that all data transfers are encrypted, integrity protected, and the server is
+ authenticated. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: e7a8dc4a-20e2-47c3-b297-11b1352beee0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/common/storage-require-secure-transfer
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-UsualRbacControlsLocalUserAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-UsualRbacControlsLocalUserAccount.yaml
new file mode 100644
index 000000000..65c4d6ad3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/revcl-UsualRbacControlsLocalUserAccount.yaml
@@ -0,0 +1,20 @@
+name: revcl-UsualRbacControlsLocalUserAccount
+title: 'SFTP: Limit the amount of ''local users'' for SFTP access, and audit whether
+ access is needed over time.'
+description: When accessing blob storage via SFTP using a 'local user account', the
+ 'usual' RBAC controls do not apply. Blob access via NFS or REST might be more restrictive
+ than SFTP access. Unfortunately, as of early 2023, local users are the only form
+ of identity management that is currently supported for the SFTP endpoint
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 0
+labels:
+ guid: ad53cc7c-e1d7-4aaa-a357-1449ab8053d8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/storage/blobs/secure-file-transfer-protocol-support#sftp-permission-model
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccessControlListsSecurityRequirements.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccessControlListsSecurityRequirements.yaml
new file mode 100644
index 000000000..e1c08af9c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccessControlListsSecurityRequirements.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AccessControlListsSecurityRequirements
+title: 'Understand your organization''s security requirements: NFS Azure file shares
+ only support Linux clients that use the NFSv4.1 protocol, with support for most
+ features from the 4.1 protocol specification. Some security features, such as Kerberos
+ authentication, access control lists (ACLs), and encryption in transit, aren''t
+ supported.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: a07d96be-b231-444c-8b2e-3123950de82f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccessSignatureTokensSensitiveInformation.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccessSignatureTokensSensitiveInformation.yaml
new file mode 100644
index 000000000..764f45e33
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccessSignatureTokensSensitiveInformation.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AccessSignatureTokensSensitiveInformation
+title: 'Protect sensitive information: Protect sensitive information such as account
+ keys and shared access signature tokens. While these forms of authorization are
+ generally not recommended, you should make sure to rotate, expire, and store them
+ securely.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 48fe0f97-d78a-4907-b588-0b6d53172ff2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccountKeyKeyVault.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccountKeyKeyVault.yaml
new file mode 100644
index 000000000..465f1c509
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccountKeyKeyVault.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AccountKeyKeyVault
+title: We recommend that you don't use an account key. If you must use account keys,
+ then store them in Key Vault, and make sure that you regenerate them periodically.
+description: Key Vault lets you retrieve keys at runtime, instead of saving them by
+ using your application. Key Vault also makes it easy to rotate your keys without
+ interruption to your applications. Rotating the account keys periodically reduces
+ the risk of exposing your data to malicious attacks.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: fa8fe7b9-8118-4913-adbe-be4420b62cfd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccountNetworkControlsStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccountNetworkControlsStorageAccount.yaml
new file mode 100644
index 000000000..ee378660c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AccountNetworkControlsStorageAccount.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AccountNetworkControlsStorageAccount
+title: 'Use network controls to restrict ingress and egress traffic: Disable all public
+ traffic to the storage account. Use account network controls to grant the minimal
+ level of access required by users and applications. For more information, see How
+ to approach network security for your storage account.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 345a1c5e-8ca7-41e1-9acc-702b9684df71
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AesKerberosTicketEncryptionSmbAzureFileShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AesKerberosTicketEncryptionSmbAzureFileShares.yaml
new file mode 100644
index 000000000..a436625cc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AesKerberosTicketEncryptionSmbAzureFileShares.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AesKerberosTicketEncryptionSmbAzureFileShares
+title: When possible, use identity-based authentication with AES-256 Kerberos ticket
+ encryption to authorize access to SMB Azure file shares.
+description: Use identity-based authentication to decrease the possibility of an attacker
+ using a storage account key to access file shares.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: b8abb5ae-bde5-40bc-b8d4-8518c9dd23c2
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AnonymousReadAccessAnonymousAccessSetting.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AnonymousReadAccessAnonymousAccessSetting.yaml
new file mode 100644
index 000000000..c9ec8b153
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AnonymousReadAccessAnonymousAccessSetting.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AnonymousReadAccessAnonymousAccessSetting
+title: Disable anonymous read access to containers and blob.
+description: When anonymous access is allowed for a storage account, a user that has
+ the appropriate permissions can modify a container's anonymous access setting to
+ enable anonymous access to the data in that container.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: a2c5082f-3260-46ef-a44f-cab9c74fd16f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureExpressrouteConnectionTcpPort.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureExpressrouteConnectionTcpPort.yaml
new file mode 100644
index 000000000..e9c3e2baf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureExpressrouteConnectionTcpPort.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureExpressrouteConnectionTcpPort
+title: Open TCP port 445 outbound or set up a VPN gateway or Azure ExpressRoute connection
+ for clients outside of Azure to access the file share.
+description: SMB 3.x is an internet-safe protocol, but you might not have the ability
+ to change organizational or ISP policies. You can use a VPN gateway or an ExpressRoute
+ connection as an alternative option.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: bfd07ef0-3cde-4965-bb68-0e382d5704c3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureFileSharesTransactionHeavyFileShares.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureFileSharesTransactionHeavyFileShares.yaml
new file mode 100644
index 000000000..cca329d8d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureFileSharesTransactionHeavyFileShares.yaml
@@ -0,0 +1,21 @@
+name: wafsg-AzureFileSharesTransactionHeavyFileShares
+title: 'Detect threats: Enable Microsoft Defender for Storage to detect potentially
+ harmful attempts to access or exploit your Azure file shares over SMB or FileREST
+ protocols. Subscription administrators get email alerts with details of suspicious
+ activity and recommendations about how to investigate and remediate threats. Defender
+ for Storage doesn''t support antivirus capabilities for Azure file shares. If you
+ use Defender for Storage, transaction-heavy file shares incur significant costs,
+ so consider opting out of Defender for Storage for specific storage accounts.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 776e5617-ee35-4172-b15b-848e3d5c7c7b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureFilesInsecureProtocol.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureFilesInsecureProtocol.yaml
new file mode 100644
index 000000000..517b4625b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureFilesInsecureProtocol.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureFilesInsecureProtocol
+title: If you open port 445, be sure to disable SMBv1 on Windows and Linux clients.
+ Azure Files doesn't support SMB 1, but you should still disable it on your clients.
+description: SMB 1 is an outdated, inefficient, and insecure protocol. Disable it
+ on clients to improve your security posture.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: ff7ac920-b3a0-4fbd-8434-69b5f5d52d89
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureResourceManagerLockDataLoss.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureResourceManagerLockDataLoss.yaml
new file mode 100644
index 000000000..b6b9b68ba
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureResourceManagerLockDataLoss.yaml
@@ -0,0 +1,14 @@
+name: wafsg-AzureResourceManagerLockDataLoss
+title: Apply an Azure Resource Manager lock on the storage account.
+description: Locking an account prevents it from being deleted and causing data loss.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 3195423b-0513-45e2-951b-87f9c5d534b0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureResourceManagerLockMaliciousDeletion.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureResourceManagerLockMaliciousDeletion.yaml
new file mode 100644
index 000000000..c9da81122
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureResourceManagerLockMaliciousDeletion.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureResourceManagerLockMaliciousDeletion
+title: Apply an Azure Resource Manager lock on the storage account.
+description: Lock the account to prevent accidental or malicious deletion of the storage
+ account, which can cause data loss.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 5efa7ffa-1cc0-4a74-bd15-c809185ccb58
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureRoleBasedAccessControlMicrosoftEntraId.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureRoleBasedAccessControlMicrosoftEntraId.yaml
new file mode 100644
index 000000000..83a341a31
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureRoleBasedAccessControlMicrosoftEntraId.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureRoleBasedAccessControlMicrosoftEntraId
+title: Authorize access by using Azure role-based access control (RBAC).
+description: With RBAC, there are no passwords or keys that can be compromised. The
+ security principal (user, group, managed identity, or service principal) is authenticated
+ by Microsoft Entra ID to return an OAuth 2.0 token. The token is used to authorize
+ a request against the Blob Storage service.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 02be562a-9a28-4e56-94a3-a3671dd382fc
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureStorageEncryptionStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureStorageEncryptionStorageAccount.yaml
new file mode 100644
index 000000000..9e40e66ad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-AzureStorageEncryptionStorageAccount.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureStorageEncryptionStorageAccount
+title: Consider using your own encryption key to protect the data in your storage
+ account. For more information, see Customer-managed keys for Azure Storage encryption.
+description: Customer-managed keys provide greater flexibility and control. For example,
+ you can store encryption keys in Key Vault and automatically rotate them.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: fd88f923-7d9f-4071-9152-15ee808cc9ed
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MicrosoftDefenderSubscriptionAdministrators.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MicrosoftDefenderSubscriptionAdministrators.yaml
new file mode 100644
index 000000000..c305b09ec
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MicrosoftDefenderSubscriptionAdministrators.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MicrosoftDefenderSubscriptionAdministrators
+title: 'Detect threats: Enable Microsoft Defender for Storage to detect threats. Security
+ alerts are triggered when anomalies in activity occur. The alerts notify subscription
+ administrators via email with details of suspicious activity and recommendations
+ on how to investigate and remediate threats.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: d0d49387-46dd-4aad-b467-19ecd0142c05
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MicrosoftEntraIdSuperiorSecurity.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MicrosoftEntraIdSuperiorSecurity.yaml
new file mode 100644
index 000000000..0a7d77eb8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MicrosoftEntraIdSuperiorSecurity.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MicrosoftEntraIdSuperiorSecurity
+title: 'Authorize access without using passwords or keys: Microsoft Entra ID provides
+ superior security and ease of use compared to shared keys and shared access signatures.
+ Grant security principals only those permissions that are necessary for them to
+ do their tasks.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 0936d029-8a6b-4eae-a739-863462bbecf4
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MinimumRequiredLevelNetworkControls.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MinimumRequiredLevelNetworkControls.yaml
new file mode 100644
index 000000000..f187daf44
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-MinimumRequiredLevelNetworkControls.yaml
@@ -0,0 +1,20 @@
+name: wafsg-MinimumRequiredLevelNetworkControls
+title: 'Consider using network controls to restrict ingress and egress traffic: You
+ might be comfortable exposing your storage account to the public internet under
+ certain conditions, like if you use identity-based authentication to grant access
+ to file shares. But we recommend that you use network controls to grant the minimum
+ required level of access to users and applications. For more information, see How
+ to approach network security for your storage account.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: e450fd68-ca8c-4380-96f4-812a146c50a3
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ModernCryptographicAlgorithmsStorageAccount-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ModernCryptographicAlgorithmsStorageAccount-1.yaml
new file mode 100644
index 000000000..c24a1dff5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ModernCryptographicAlgorithmsStorageAccount-1.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ModernCryptographicAlgorithmsStorageAccount-1
+title: Configure your storage account so that TLS 1.2 is the minimum version for clients
+ to send and receive data.
+description: TLS 1.2 is more secure and faster than TLS 1.0 and 1.1, which don't support
+ modern cryptographic algorithms and cipher suites.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: e780c530-cf9a-42d2-8ccc-b32e44ab73cd
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ModernCryptographicAlgorithmsStorageAccount.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ModernCryptographicAlgorithmsStorageAccount.yaml
new file mode 100644
index 000000000..5041f07de
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ModernCryptographicAlgorithmsStorageAccount.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ModernCryptographicAlgorithmsStorageAccount
+title: Configure your storage account so clients can send and receive data by using
+ the minimum version of TLS 1.2.
+description: TLS 1.2 is more secure and faster than TLS 1.0 and 1.1, which don't support
+ modern cryptographic algorithms and cipher suites.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 42a36eba-778e-437d-9750-4002823c8835
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NfsAzureFileSharePort.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NfsAzureFileSharePort.yaml
new file mode 100644
index 000000000..40987ef2c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NfsAzureFileSharePort.yaml
@@ -0,0 +1,15 @@
+name: wafsg-NfsAzureFileSharePort
+title: You must open port 2049 on the clients that you want to mount your NFS share
+ to.
+description: Open port 2049 to let clients communicate with the NFS Azure file share.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 45ae6fe2-da4c-4e41-9d2c-d9237a619ec6
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NfsAzureFileSharesNetworkLevelSecurity.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NfsAzureFileSharesNetworkLevelSecurity.yaml
new file mode 100644
index 000000000..c6c2ed0a9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NfsAzureFileSharesNetworkLevelSecurity.yaml
@@ -0,0 +1,19 @@
+name: wafsg-NfsAzureFileSharesNetworkLevelSecurity
+title: 'Use network-level security and controls to restrict ingress and egress traffic:
+ Identity-based authentication isn''t available for NFS Azure file shares, so you
+ must use network-level security and controls to grant the minimum required level
+ of access to users and applications. For more information, see How to approach network
+ security for your storage account.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: b3a2f115-8ee1-401e-a939-f4406b43b460
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NonSecureHttpConnectionsTransportLayerSecurity.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NonSecureHttpConnectionsTransportLayerSecurity.yaml
new file mode 100644
index 000000000..17d2379f1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-NonSecureHttpConnectionsTransportLayerSecurity.yaml
@@ -0,0 +1,18 @@
+name: wafsg-NonSecureHttpConnectionsTransportLayerSecurity
+title: 'Reduce the attack surface: Preventing anonymous access, account key access,
+ or access over non-secure (HTTP) connections can reduce the attack surface. Require
+ clients to send and receive data by using the latest version of the Transport Layer
+ Security (TLS) protocol.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: ceb9eb53-c2e4-4f28-b6e0-d42414ab3439
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-OtherBusinessPurposesCriticalObjects.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-OtherBusinessPurposesCriticalObjects.yaml
new file mode 100644
index 000000000..d49e0d504
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-OtherBusinessPurposesCriticalObjects.yaml
@@ -0,0 +1,18 @@
+name: wafsg-OtherBusinessPurposesCriticalObjects
+title: 'Protect critical objects: Apply immutability policies to protect critical
+ objects. Policies protect blobs that are stored for legal, compliance, or other
+ business purposes from being modified or deleted. Configure holds for set time periods
+ or until restrictions are lifted by an administrator.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 96a5a2e1-d8de-4297-b395-168cbd02467b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-RequireSecureTransferSettingStandardDataProcessingRates.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-RequireSecureTransferSettingStandardDataProcessingRates.yaml
new file mode 100644
index 000000000..81f7b56c6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-RequireSecureTransferSettingStandardDataProcessingRates.yaml
@@ -0,0 +1,23 @@
+name: wafsg-RequireSecureTransferSettingStandardDataProcessingRates
+title: NFS Azure file shares are only accessible through restricted networks. So you
+ must create a private endpoint for your storage account or restrict public endpoint
+ access to selected virtual networks and IP addresses. We recommend that you create
+ a private endpoint. You must configure network-level security for NFS shares because
+ Azure Files doesn't support encryption in transit with the NFS protocol. You need
+ to disable the Require secure transfer setting on the storage account to use NFS
+ Azure file shares. Standard data processing rates apply for private endpoints. If
+ you don't require a static IP address for your file share and want to avoid the
+ cost of private endpoints, you can restrict public endpoint access instead.
+description: Network traffic travels over the Microsoft backbone network instead of
+ the public internet, which eliminates risk exposure from the public internet.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 8959f137-e162-4b86-a14f-6e96c9fd5494
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ResourceManagerLockMaliciousDeletion.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ResourceManagerLockMaliciousDeletion.yaml
new file mode 100644
index 000000000..89e5e8313
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-ResourceManagerLockMaliciousDeletion.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ResourceManagerLockMaliciousDeletion
+title: Apply a Resource Manager lock on the storage account.
+description: Lock the account to prevent accidental or malicious deletion of the storage
+ account, which might cause data loss.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 0148ed98-3b9a-4b7f-81c2-8b550f56f793
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecureChannelEncryptionSmbProtocolVersion.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecureChannelEncryptionSmbProtocolVersion.yaml
new file mode 100644
index 000000000..abeabc716
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecureChannelEncryptionSmbProtocolVersion.yaml
@@ -0,0 +1,22 @@
+name: wafsg-SecureChannelEncryptionSmbProtocolVersion
+title: Use only the most recent supported SMB protocol version (currently 3.1.1.),
+ and use only AES-256-GCM for SMB channel encryption. Azure Files exposes settings
+ that you can use to toggle the SMB protocol and make it more compatible or more
+ secure, depending on your organization's requirements. By default, all SMB versions
+ are allowed. However, SMB 2.1 is disallowed if you enable Require secure transfer
+ because SMB 2.1 doesn't support encryption of data in transit. If you restrict these
+ settings to a high level of security, some clients might not be able to connect
+ to the file share.
+description: SMB 3.1.1, released with Windows 10, contains important security and
+ performance updates. AES-256-GCM offers more secure channel encryption.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 59fe4bee-d21b-4f74-880f-eb22da54ee6e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecureTransferStorageAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecureTransferStorageAccounts.yaml
new file mode 100644
index 000000000..3053f46aa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecureTransferStorageAccounts.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SecureTransferStorageAccounts
+title: 'Enable the secure transfer required option: Enabling this setting for all
+ your storage accounts ensures that all requests made against the storage account
+ must take place over secure connections. Any requests made over HTTP fail.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: b174e3db-c952-4b33-a72e-874f60a0f671
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineAzureStorage-1.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineAzureStorage-1.yaml
new file mode 100644
index 000000000..31f8ea543
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineAzureStorage-1.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SecurityBaselineAzureStorage-1
+title: 'Review the security baseline for Azure Storage: To get started, review the
+ security baseline for Storage.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 486329dd-f6a9-4714-bab2-0c7da68e2473
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineAzureStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineAzureStorage.yaml
new file mode 100644
index 000000000..bb05b5ad6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineAzureStorage.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SecurityBaselineAzureStorage
+title: 'Review the security baseline for Azure Storage: To get started, first review
+ the security baseline for Storage.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-blob-storage.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: a7cd3662-4984-4a5a-8ed7-95c707f19c25
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineStorage.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineStorage.yaml
new file mode 100644
index 000000000..22ed0b6bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SecurityBaselineStorage.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SecurityBaselineStorage
+title: 'Review the security baseline for Storage: To get started, review the security
+ baseline for Storage.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: c5f40aec-9c2c-4c16-8ae9-f9fdd4733804
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SharedAccessSignatureTokenAccessSignatureBestPractices.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SharedAccessSignatureTokenAccessSignatureBestPractices.yaml
new file mode 100644
index 000000000..56169c1aa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SharedAccessSignatureTokenAccessSignatureBestPractices.yaml
@@ -0,0 +1,18 @@
+name: wafsg-SharedAccessSignatureTokenAccessSignatureBestPractices
+title: We recommend that you don't use shared access signature tokens. Evaluate whether
+ you need shared access signature tokens to secure access to Blob Storage resources.
+ If you must create one, then review this list of shared access signature best practices
+ before you create and distribute it.
+description: Best practices can help you prevent a shared access signature token from
+ being leaked and quickly recover if a leak does occur.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 74296778-eb6c-4ef3-b2db-f64839ca4140
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SharedKeyAuthorizationAccessSignatureTokens.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SharedKeyAuthorizationAccessSignatureTokens.yaml
new file mode 100644
index 000000000..c57369469
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SharedKeyAuthorizationAccessSignatureTokens.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SharedKeyAuthorizationAccessSignatureTokens
+title: Disallow shared key authorization. This disables not only account key access
+ but also service and account shared access signature tokens because they're based
+ on account keys.
+description: Only secured requests that are authorized with Microsoft Entra ID are
+ permitted.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: c1c19545-ae06-45b2-9770-1bc64e63c70b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SmbFileSharesMostCases.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SmbFileSharesMostCases.yaml
new file mode 100644
index 000000000..fd900bf2c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SmbFileSharesMostCases.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SmbFileSharesMostCases
+title: In most cases, you should enable the Secure transfer required option on all
+ your storage accounts to enable encryption in transit for SMB file shares. Don't
+ enable this option if you need to allow very old clients to access the share. If
+ you disable secure transfer, be sure to use network controls to restrict traffic.
+description: This setting ensures that all requests that are made against the storage
+ account take place over secure connections (HTTPS). Any requests made over HTTP
+ will fail.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: b9cbb598-dcaa-431a-bae0-f8a7909f577b
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SpecificVirtualNetworksFirewallRules.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SpecificVirtualNetworksFirewallRules.yaml
new file mode 100644
index 000000000..90d7f2f16
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SpecificVirtualNetworksFirewallRules.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SpecificVirtualNetworksFirewallRules
+title: Enable firewall rules that limit access to specific virtual networks. Start
+ with zero access, and then methodically and incrementally provide the least amount
+ of access required for clients and services.
+description: Minimize the risk of creating openings for attackers.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: bbbb3c40-4a58-4602-87cd-5bb36d95381d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SpecificVirtualNetworksPublicEndpoints.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SpecificVirtualNetworksPublicEndpoints.yaml
new file mode 100644
index 000000000..f4e9f8292
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-SpecificVirtualNetworksPublicEndpoints.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SpecificVirtualNetworksPublicEndpoints
+title: Disable traffic to the public endpoints of your storage account. Create private
+ endpoints for clients that run in Azure. Enable the public endpoint only if clients
+ and services external to Azure require direct access to your storage account. Enable
+ firewall rules that limit access to specific virtual networks.
+description: Start with zero access and then incrementally authorize the lowest levels
+ of access required for clients and services to minimize the risk of creating unnecessary
+ openings for attackers.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 4c73ba4b-1d06-42f6-afcb-2dc1d4b8885a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StandardDataProcessingRatesSpecificVirtualNetworks.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StandardDataProcessingRatesSpecificVirtualNetworks.yaml
new file mode 100644
index 000000000..63fe30167
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StandardDataProcessingRatesSpecificVirtualNetworks.yaml
@@ -0,0 +1,23 @@
+name: wafsg-StandardDataProcessingRatesSpecificVirtualNetworks
+title: Consider disabling public network access to your storage account. Enable public
+ network access only if SMB clients and services that are external to Azure require
+ access to your storage account. If you disable public network access,create a private
+ endpoint for your storage account. Standard data processing rates for private endpoints
+ apply. A private endpoint doesn't block connections to the public endpoint. You
+ should still disable public network access as previously described. If you don't
+ require a static IP address for your file share and want to avoid the cost of private
+ endpoints, you can instead restrict public endpoint access to specific virtual networks
+ and IP addresses.
+description: Network traffic travels over the Microsoft backbone network instead of
+ the public internet, which eliminates risk exposure from the public internet.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 27f96d86-72a7-4c44-8cdd-146d39feefaf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeyAccessSmbSecuritySettings.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeyAccessSmbSecuritySettings.yaml
new file mode 100644
index 000000000..a5d696953
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeyAccessSmbSecuritySettings.yaml
@@ -0,0 +1,21 @@
+name: wafsg-StorageAccountKeyAccessSmbSecuritySettings
+title: If you use storage account keys, store them in Key Vault, and make sure to
+ regenerate them periodically. You can completely disallow storage account key access
+ to the file share by removing NTLMv2 from the share's SMB security settings. But
+ you generally shouldn't remove NTLMv2 from the share's SMB security settings because
+ administrators still need to use the account key for some tasks.
+description: Use Key Vault to retrieve keys at runtime instead of saving them with
+ your application. Key Vault also makes it easy to rotate your keys without interruption
+ to your applications. Periodically rotate the account keys to reduce the risk of
+ exposing your data to malicious attacks.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: c034b5bc-eaca-4ba4-b9c7-3d427108584d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeyAccessStorageAccountLevel.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeyAccessStorageAccountLevel.yaml
new file mode 100644
index 000000000..feb52f0c7
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeyAccessStorageAccountLevel.yaml
@@ -0,0 +1,18 @@
+name: wafsg-StorageAccountKeyAccessStorageAccountLevel
+title: Consider disallowing storage account key access at the storage account level.
+ You don't need this access to mount NFS file shares. But keep in mind that full
+ administrative control of a file share, including the ability to take ownership
+ of a file, requires use of a storage account key.
+description: Disallow the use of storage account keys to make your storage account
+ more secure.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: f7b42a8a-fb21-4101-a256-8bbab4e1bd25
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeysFullAdministrativeControl.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeysFullAdministrativeControl.yaml
new file mode 100644
index 000000000..8004d90b0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeysFullAdministrativeControl.yaml
@@ -0,0 +1,19 @@
+name: wafsg-StorageAccountKeysFullAdministrativeControl
+title: 'Minimize the use of storage account keys: Identity-based authentication provides
+ superior security compared to using a storage account key. But you must use a storage
+ account key to get full administrative control of a file share, including the ability
+ to take ownership of a file. Grant security principals only the necessary permissions
+ that they need to perform their tasks.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 88413b43-c031-4930-acbf-fc1d33b7d930
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeysSensitiveInformation.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeysSensitiveInformation.yaml
new file mode 100644
index 000000000..1692da0e5
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-StorageAccountKeysSensitiveInformation.yaml
@@ -0,0 +1,17 @@
+name: wafsg-StorageAccountKeysSensitiveInformation
+title: 'Protect sensitive information: Protect sensitive information, such as storage
+ account keys and passwords. We don''t recommend that you use these forms of authorization,
+ but if you do, you should make sure to rotate, expire, and store them securely.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 5542bb7f-c507-480d-8881-93f7a2854e63
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-TransportLayerSecurityTlsProtocolAttackSurface.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-TransportLayerSecurityTlsProtocolAttackSurface.yaml
new file mode 100644
index 000000000..b292b79d1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/Security/wafsg-TransportLayerSecurityTlsProtocolAttackSurface.yaml
@@ -0,0 +1,18 @@
+name: wafsg-TransportLayerSecurityTlsProtocolAttackSurface
+title: 'Reduce the attack surface: Use encryption in transit and prevent access over
+ non-secure (HTTP) connections to reduce the attack surface. Require clients to send
+ and receive data by using the latest version of the Transport Layer Security (TLS)
+ protocol.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-files.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.storage/storageaccounts
+waf: Security
+severity: 1
+labels:
+ guid: 57e9b6de-1640-41de-93c5-8306d37660ff
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-AzureStorageAccountsBlobOperationLatency.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-AzureStorageAccountsBlobOperationLatency.yaml
new file mode 100644
index 000000000..7db928b5a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-AzureStorageAccountsBlobOperationLatency.yaml
@@ -0,0 +1,19 @@
+name: aprl-AzureStorageAccountsBlobOperationLatency
+title: Enable versioning for accidental modification and keep the number of versions
+ below 1000
+description: |-
+ Consider enabling versioning for Azure Storage Accounts to recover from accidental modifications or deletions and manage blob operation latency. Microsoft advises maintaining fewer than 1000 versions per blob to optimize performance. Lifecycle management can help delete old versions automatically.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 2
+labels:
+ guid: 8ebda7c0-e0e1-ed45-af59-2d7ea9a1c05d
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-BlobStorageAccountsCriticalApplications.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-BlobStorageAccountsCriticalApplications.yaml
new file mode 100644
index 000000000..ae176790e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-BlobStorageAccountsCriticalApplications.yaml
@@ -0,0 +1,18 @@
+name: aprl-BlobStorageAccountsCriticalApplications
+title: Monitor all blob storage accounts
+description: |-
+ For critical applications and business processes relying on Azure, monitoring and alerts are crucial. Resource logs are only stored after creating a diagnostic setting to route logs to specified locations, requiring selection of log categories to collect.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 2
+labels:
+ guid: 96cb8331-6b06-8242-8ce8-4e2f665dc679
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-LeverageAzurePrivateLinkServiceGranularAccessControl.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-LeverageAzurePrivateLinkServiceGranularAccessControl.yaml
new file mode 100644
index 000000000..f4d795609
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-LeverageAzurePrivateLinkServiceGranularAccessControl.yaml
@@ -0,0 +1,25 @@
+name: aprl-LeverageAzurePrivateLinkServiceGranularAccessControl
+title: Enable Azure Private Link service for storage accounts
+description: |-
+ Leverage Azure Private Link Service for secure access to Azure Storage and services via Private Endpoint in your VNet. Eliminate the need for public IPs, ensuring data privacy. Enjoy granular access control for enhanced security.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 1
+labels:
+ guid: dc55be60-6f8c-461e-a9d5-a3c7686ed94e
+ area: Security
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // This resource graph query will return all storage accounts that does not have a Private Endpoint Connection or where a private endpoint exists but public access is enabled
+ resources
+ | where type =~ "Microsoft.Storage/StorageAccounts"
+ | where isnull(properties.privateEndpointConnections) or properties.privateEndpointConnections[0].properties.provisioningState != ("Succeeded") or (isnull(properties.networkAcls) and properties.publicNetworkAccess == 'Enabled')
+ | extend param1 = strcat('Private Endpoint: ', iif(isnotnull(properties.privateEndpointConnections),split(properties.privateEndpointConnections[0].properties.privateEndpoint.id,'/')[8],'No Private Endpoint'))
+ | extend param2 = strcat('Access: ', iif(properties.publicNetworkAccess == 'Disabled', 'Public Access Disabled', iif(isnotnull(properties.networkAcls), 'NetworkACLs in place','Public Access Enabled')))
+ | project recommendationId = "dc55be60-6f8c-461e-a9d5-a3c7686ed94e", name, id, tags, param1, param2
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-NewAzureResourceManagerResourcesClassicStorageAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-NewAzureResourceManagerResourcesClassicStorageAccounts.yaml
new file mode 100644
index 000000000..6fbac98dd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-NewAzureResourceManagerResourcesClassicStorageAccounts.yaml
@@ -0,0 +1,22 @@
+name: aprl-NewAzureResourceManagerResourcesClassicStorageAccounts
+title: Classic Storage Accounts must be migrated to new Azure Resource Manager resources
+description: |-
+ Classic storage accounts will be fully retired on August 31, 2024. If you have classic storage accounts, start planning your migration now.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 0
+labels:
+ guid: 63ad027e-611c-294b-acc5-8e3234db9a40
+ area: Service Upgrade and Retirement
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Azure classic Storage Account
+ resources
+ | where type =~ 'microsoft.classicstorage/storageaccounts'
+ | project recommendationId = '63ad027e-611c-294b-acc5-8e3234db9a40', name, id, tags, param1=type
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-PremiumPerformanceBlockBlobStorageFastStorageResponseTimes.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-PremiumPerformanceBlockBlobStorageFastStorageResponseTimes.yaml
new file mode 100644
index 000000000..2f4ce42ef
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-PremiumPerformanceBlockBlobStorageFastStorageResponseTimes.yaml
@@ -0,0 +1,18 @@
+name: aprl-PremiumPerformanceBlockBlobStorageFastStorageResponseTimes
+title: Use premium performance block blob storage for high performance workloads
+description: |-
+ Use premium performance block blob storage instead of standard performance storage for workloads that require fast storage response times and/or high transaction rates.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 1
+labels:
+ guid: 5587ef77-7a05-a74d-9c6e-449547a12f27
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-SoftDeleteOptionDataIntegrityMeasures.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-SoftDeleteOptionDataIntegrityMeasures.yaml
new file mode 100644
index 000000000..bae0ff45e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-SoftDeleteOptionDataIntegrityMeasures.yaml
@@ -0,0 +1,18 @@
+name: aprl-SoftDeleteOptionDataIntegrityMeasures
+title: Enable Soft Delete to protect your data
+description: |-
+ The soft delete option enables data recovery if mistakenly deleted, while the Lock feature prevents the accidental deletion of the storage account itself, ensuring additional security and data integrity measures.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 1
+labels:
+ guid: 03263c57-c869-3841-9e0a-3dbb9ef3e28d
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StandardGeneralPurposeVAccountsGpvAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StandardGeneralPurposeVAccountsGpvAccounts.yaml
new file mode 100644
index 000000000..d38cb3257
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StandardGeneralPurposeVAccountsGpvAccounts.yaml
@@ -0,0 +1,18 @@
+name: aprl-StandardGeneralPurposeVAccountsGpvAccounts
+title: Enable point-in-time restore for GPv2 accounts to safeguard against data loss
+description: |-
+ Consider enabling point-in-time restore for standard general purpose v2 accounts with flat namespace to protect against accidental deletion or corruption by restoring block blob data to an earlier state.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 2
+labels:
+ guid: 1b965cb9-7629-214e-b682-6bf6e450a100
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StandardGeneralPurposeVGeneralPurposeVAccounts.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StandardGeneralPurposeVGeneralPurposeVAccounts.yaml
new file mode 100644
index 000000000..2a6354786
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StandardGeneralPurposeVGeneralPurposeVAccounts.yaml
@@ -0,0 +1,26 @@
+name: aprl-StandardGeneralPurposeVGeneralPurposeVAccounts
+title: Consider upgrading legacy storage accounts to v2 storage accounts
+description: |-
+ General-purpose v2 accounts are recommended for most storage scenarios offering the latest features or the lowest per-gigabyte pricing. Legacy accounts like Standard general-purpose v1 and Blob Storage aren't advised by Microsoft but may fit specific scenarios.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 2
+labels:
+ guid: 2ad78dec-5a4d-4a30-8fd1-8584335ad781
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Azure Storage Accounts, that upgradeable to General purpose v2.
+ Resources
+ | where type =~ "Microsoft.Storage/storageAccounts" and kind in~ ("Storage", "BlobStorage")
+ | extend
+ param1 = strcat("AccountKind: ", case(kind =~ "Storage", "Storage (general purpose v1)", kind =~ "BlobStorage", "BlobStorage", kind)),
+ param2 = strcat("Performance: ", sku.tier),
+ param3 = strcat("Replication: ", sku.name)
+ | project recommendationId = "2ad78dec-5a4d-4a30-8fd1-8584335ad781", name, id, tags, param1, param2, param3
diff --git a/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StorageAccountsDurabilityTargets.yaml b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StorageAccountsDurabilityTargets.yaml
new file mode 100644
index 000000000..6de75812d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftStorage-storageAccounts/aprl-StorageAccountsDurabilityTargets.yaml
@@ -0,0 +1,23 @@
+name: aprl-StorageAccountsDurabilityTargets
+title: Ensure that storage accounts are zone or region redundant
+description: |-
+ Redundancy ensures storage accounts meet availability and durability targets amidst failures, weighing lower costs against higher availability. Locally redundant storage offers the least durability at the lowest cost.
+source:
+ type: aprl
+ file: azure-resources/Storage/storageAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Storage/storageAccounts
+severity: 0
+labels:
+ guid: e6c7e1cc-2f47-264d-aa50-1da421314472
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This query will return all storage accounts that are not using Zone or Region replication
+ Resources
+ | where type =~ "Microsoft.Storage/storageAccounts"
+ | where sku.name in~ ("Standard_LRS", "Premium_LRS")
+ | project recommendationId = "e6c7e1cc-2f47-264d-aa50-1da421314472", name, id, tags, param1 = strcat("sku: ", sku.name)
diff --git a/v2/recos/Services/MicrosoftSubscription-Subscriptions/aprl-ACitrixManagedAzureSubscriptionCitrixVdaServers.yaml b/v2/recos/Services/MicrosoftSubscription-Subscriptions/aprl-ACitrixManagedAzureSubscriptionCitrixVdaServers.yaml
new file mode 100644
index 000000000..2b7f45df9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSubscription-Subscriptions/aprl-ACitrixManagedAzureSubscriptionCitrixVdaServers.yaml
@@ -0,0 +1,28 @@
+name: aprl-ACitrixManagedAzureSubscriptionCitrixVdaServers
+title: Do not create more than 2000 Citrix VDA servers per subscription
+description: |-
+ A Citrix Managed Azure subscription supports VMs with VDA for app/desktop delivery, excluding other machines like Cloud Connectors. When close to the limit, signaled by a dashboard notification, and with sufficient licenses, request another subscription. Can't exceed the given limits for catalogs.
+source:
+ type: aprl
+ file: azure-resources/Subscription/subscriptions/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Subscription/Subscriptions
+severity: 0
+labels:
+ guid: c041d596-6c97-4c5f-b4b3-9cd37628f2e2
+ area: Governance
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Count VM instances with a tag that contains "Citrix VDA" and create output if that count is >2000 for each subscription.
+ // The Citrix published limit is 2500. This query runs an 80% check.
+
+ resources
+ | where type == 'microsoft.compute/virtualmachines'
+ | where tags contains 'Citrix VDA'
+ | summarize VMs=count() by subscriptionId
+ | where VMs > 2000
+ | join (resourcecontainers| where type =='microsoft.resources/subscriptions' | project subname=name, subscriptionId) on subscriptionId
+ | project recommendationId='c041d596-6c97-4c5f-b4b3-9cd37628f2e2', name= subname, id = subscriptionId, param1='Too many instances.', param2= VMs
diff --git a/v2/recos/Services/MicrosoftSubscription-Subscriptions/aprl-TenantRootManagementGroupManagementGroups.yaml b/v2/recos/Services/MicrosoftSubscription-Subscriptions/aprl-TenantRootManagementGroupManagementGroups.yaml
new file mode 100644
index 000000000..45d3b8e03
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSubscription-Subscriptions/aprl-TenantRootManagementGroupManagementGroups.yaml
@@ -0,0 +1,24 @@
+name: aprl-TenantRootManagementGroupManagementGroups
+title: Subscriptions should not be placed under the Tenant Root Management Group
+description: |-
+ The root management group in Azure is designed for organizational hierarchy, allowing for all management groups and subscriptions to fold into it.
+source:
+ type: aprl
+ file: azure-resources/Subscription/subscriptions/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Subscription/Subscriptions
+severity: 1
+labels:
+ guid: 5ada5ffa-7149-4e49-9fbf-e67be7c2594c
+ area: Governance
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure Subscriptions that are placed under the Tenant Root Management Group
+ resourcecontainers
+ | where type == 'microsoft.resources/subscriptions'
+ | extend mgParentSize = array_length(properties.managementGroupAncestorsChain)
+ | where mgParentSize == 1
+ | project recommendationId="5ada5ffa-7149-4e49-9fbf-e67be7c2594c", name, id, tags
diff --git a/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-AdditionalDataAnalysisCostData.yaml b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-AdditionalDataAnalysisCostData.yaml
new file mode 100644
index 000000000..72e62091e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-AdditionalDataAnalysisCostData.yaml
@@ -0,0 +1,15 @@
+name: revcl-AdditionalDataAnalysisCostData
+title: Export cost data to a storage account for additional data analysis.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.synapse/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 35e33789-7e31-4c67-b68c-f6a62a119495
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/availability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-AzureSynapseCommitUnitsAzureSynapseAnalyticsCosts.yaml b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-AzureSynapseCommitUnitsAzureSynapseAnalyticsCosts.yaml
new file mode 100644
index 000000000..75fd2d4bb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-AzureSynapseCommitUnitsAzureSynapseAnalyticsCosts.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureSynapseCommitUnitsAzureSynapseAnalyticsCosts
+title: Purchase Azure Synapse commit units (SCU) for one year with a pre-purchase
+ plan to save on your Azure Synapse Analytics costs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.synapse/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: ee0bdf5c-c2ef-4c5d-961d-41d2500bb47a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups#management-groups-in-the-azure-landing-zone-accelerator
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-DedicatedSqlPoolCosts.yaml b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-DedicatedSqlPoolCosts.yaml
new file mode 100644
index 000000000..9bd189caf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-DedicatedSqlPoolCosts.yaml
@@ -0,0 +1,16 @@
+name: revcl-DedicatedSqlPoolCosts
+title: Control costs for a dedicated SQL pool by pausing the resource when it is not
+ in use.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.synapse/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 6d697dc3-a2ed-427b-8d18-6f1a1252bddd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-MultipleApacheSparkPoolDefinitionsVariousSizes.yaml b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-MultipleApacheSparkPoolDefinitionsVariousSizes.yaml
new file mode 100644
index 000000000..1f6bce937
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-MultipleApacheSparkPoolDefinitionsVariousSizes.yaml
@@ -0,0 +1,15 @@
+name: revcl-MultipleApacheSparkPoolDefinitionsVariousSizes
+title: Create multiple Apache Spark pool definitions of various sizes.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.synapse/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: d5a3bec2-c4e2-4436-a133-6db55f17960e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-ServerlessApacheSparkAutomaticPauseFeatureTimeoutValue.yaml b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-ServerlessApacheSparkAutomaticPauseFeatureTimeoutValue.yaml
new file mode 100644
index 000000000..2d83614eb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-ServerlessApacheSparkAutomaticPauseFeatureTimeoutValue.yaml
@@ -0,0 +1,16 @@
+name: revcl-ServerlessApacheSparkAutomaticPauseFeatureTimeoutValue
+title: Enable the serverless Apache Spark automatic pause feature and set your timeout
+ value accordingly.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.synapse/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: e68a487c-dec4-4861-ac3b-c10ae77e26e4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-SpendingAnomaliesOverspendingRisks.yaml b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-SpendingAnomaliesOverspendingRisks.yaml
new file mode 100644
index 000000000..7d9b031c1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftSynapse-workspaces/Cost/revcl-SpendingAnomaliesOverspendingRisks.yaml
@@ -0,0 +1,16 @@
+name: revcl-SpendingAnomaliesOverspendingRisks
+title: Create budgets to manage costs and create alerts that automatically notify
+ stakeholders of spending anomalies and overspending risks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.synapse/workspaces
+waf: Cost
+severity: 1
+labels:
+ guid: 54387e5c-ed12-46cd-832a-f5b2fc6998a5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/availability-zones-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftVirtualMachineImages-imageTemplates/aprl-GenerationVirtualMachineSourceImageImageTemplates.yaml b/v2/recos/Services/MicrosoftVirtualMachineImages-imageTemplates/aprl-GenerationVirtualMachineSourceImageImageTemplates.yaml
new file mode 100644
index 000000000..c4058ecf6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftVirtualMachineImages-imageTemplates/aprl-GenerationVirtualMachineSourceImageImageTemplates.yaml
@@ -0,0 +1,18 @@
+name: aprl-GenerationVirtualMachineSourceImageImageTemplates
+title: Use Generation 2 virtual machine source image
+description: |-
+ When building Image Templates, use sources for gen 2 VMs. Gen 2 offers more memory, supports >2TB disks, uses UEFI for faster boot/installation, has Intel SGX, and virtualized persistent memory (vPMEM), unlike gen 1's BIOS-based architecture.
+source:
+ type: aprl
+ file: azure-resources/VirtualMachineImages/imageTemplates/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.VirtualMachineImages/imageTemplates
+severity: 2
+labels:
+ guid: 19b6df57-f6b5-3e4f-843a-273daa087cb0
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftVirtualMachineImages-imageTemplates/aprl-TheAzureImageBuilderServiceContinuousVirtualMachineDeployment.yaml b/v2/recos/Services/MicrosoftVirtualMachineImages-imageTemplates/aprl-TheAzureImageBuilderServiceContinuousVirtualMachineDeployment.yaml
new file mode 100644
index 000000000..24a8a0490
--- /dev/null
+++ b/v2/recos/Services/MicrosoftVirtualMachineImages-imageTemplates/aprl-TheAzureImageBuilderServiceContinuousVirtualMachineDeployment.yaml
@@ -0,0 +1,24 @@
+name: aprl-TheAzureImageBuilderServiceContinuousVirtualMachineDeployment
+title: Replicate your Image Templates to a secondary region
+description: |-
+ The Azure Image Builder service, used for deploying Image Templates, lacks availability zones support. By replicating Image Templates to a secondary, preferably paired, region, quick recovery from a region failure is enabled, ensuring continuous virtual machine deployment from these templates.
+source:
+ type: aprl
+ file: azure-resources/VirtualMachineImages/imageTemplates/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.VirtualMachineImages/imageTemplates
+severity: 2
+labels:
+ guid: 21fb841b-ba70-1f4e-a460-1f72fb41aa51
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // List all Image Templates that are not replicated to another region
+ resources
+ | where type =~ "microsoft.virtualmachineimages/imagetemplates"
+ | mv-expand distribution=properties.distribute
+ | where array_length(parse_json(distribution).replicationRegions) == 1
+ | project recommendationId = "21fb841b-ba70-1f4e-a460-1f72fb41aa51", name, id, param1=strcat("replicationRegions:",parse_json(distribution).replicationRegions)
diff --git a/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-AzureAppServiceInstancesServiceDisruptions.yaml b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-AzureAppServiceInstancesServiceDisruptions.yaml
new file mode 100644
index 000000000..196c4d0d6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-AzureAppServiceInstancesServiceDisruptions.yaml
@@ -0,0 +1,30 @@
+name: aprl-AzureAppServiceInstancesServiceDisruptions
+title: Avoid scaling up or down
+description: |-
+ Avoid frequent scaling up/down of Azure App Service instances to prevent service disruptions. Choose the right tier and size for the workload and scale out for traffic changes, as scaling adjustments can trigger application restarts.
+source:
+ type: aprl
+ file: azure-resources/Web/serverFarms/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/serverFarms
+severity: 1
+labels:
+ guid: 07243659-4643-d44c-a1c6-07ac21635072
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure App Service Plans and the number of changes that was made to the pricing tier, if the count is higher that 3 it means you need to avoid scaling up and down that often
+
+ resourcechanges
+ | extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),
+ changeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId,
+ changedProperties = properties.changes, changeCount = properties.changeAttributes.changesCount
+ | where changeTime > ago(14d)
+ | join kind=inner (resources | project resources_Name = name, resources_Type = type, resources_Subscription= subscriptionId, resources_ResourceGroup= resourceGroup, id) on $left.targetResourceId == $right.id
+ | where resources_Type contains "microsoft.web/serverfarms"
+ | where changedProperties['sku.name'].propertyChangeType == 'Update' or changedProperties['sku.tier'].propertyChangeType == 'Update'
+ | summarize count() by targetResourceId, resources_Name ,tostring(changedProperties['sku.name'].previousValue), tostring(changedProperties['sku.tier'].newValue)
+ | project recommendationId="07243659-4643-d44c-a1c6-07ac21635072", name=resources_Name, id=targetResourceId, tags="", param1=['changedProperties_sku.name_previousValue'], param2=['changedProperties_sku.tier_newValue'], param3=count_
diff --git a/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-AzureAppServiceServiceRequests.yaml b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-AzureAppServiceServiceRequests.yaml
new file mode 100644
index 000000000..de7a7d9c4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-AzureAppServiceServiceRequests.yaml
@@ -0,0 +1,19 @@
+name: aprl-AzureAppServiceServiceRequests
+title: Enable Autoscale/Automatic scaling to ensure adequate resources are available
+ to service requests
+description: |-
+ Enabling Autoscale/Automatic Scaling for your Azure App Service ensures sufficient resources for incoming requests. Autoscaling is rule-based, whereas Automatic Scaling, a newer feature, automatically adjusts resources based on HTTP traffic.
+source:
+ type: aprl
+ file: azure-resources/Web/serverFarms/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/serverFarms
+severity: 1
+labels:
+ guid: 6320abf6-f917-1843-b2ae-4779c35985ae
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-MigrateAppServiceAppServicePlans.yaml b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-MigrateAppServiceAppServicePlans.yaml
new file mode 100644
index 000000000..34bdd9b3b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-MigrateAppServiceAppServicePlans.yaml
@@ -0,0 +1,27 @@
+name: aprl-MigrateAppServiceAppServicePlans
+title: Migrate App Service to availability Zone Support
+description: |-
+ Azure's feature of deploying App Service plans across availability zones enhances resiliency and reliability by ensuring operation during datacenter failures, providing redundancy without needing different regions, thus minimizing downtime and maintaining uninterrupted services.
+source:
+ type: aprl
+ file: azure-resources/Web/serverFarms/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/serverFarms
+severity: 0
+labels:
+ guid: 88cb90c2-3b99-814b-9820-821a63f600dd
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // The query filters the qualified App Service Plans that do not have Zone Redundancy enabled.
+ // Its important to check regions that support availability zones for Azure App Services running on multi-tenant and App Service Environments https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service?tabs=graph%2Ccli#:~:text=The%20following%20regions%20support%20Azure%20App%20Services%20running%20on%20multi%2Dtenant%20environments%3A
+
+ resources
+ | where type =~ 'microsoft.web/serverfarms'
+ | extend zoneRedundant = tobool(properties.zoneRedundant)
+ | extend sku_tier = tostring(sku.tier)
+ | where (tolower(sku_tier) contains "isolated" or tolower(sku_tier) contains "premium") and zoneRedundant == false
+ | project recommendationId="88cb90c2-3b99-814b-9820-821a63f600dd", name, id, tags, param1=sku_tier, param2="Not Zone Redundant"
diff --git a/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-SeparateAppServicePlansTestingPurposes.yaml b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-SeparateAppServicePlansTestingPurposes.yaml
new file mode 100644
index 000000000..c51a6cee4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-SeparateAppServicePlansTestingPurposes.yaml
@@ -0,0 +1,18 @@
+name: aprl-SeparateAppServicePlansTestingPurposes
+title: Create separate App Service plans for production and test
+description: |-
+ It is strongly recommended to create separate App Service plans for production and test environments to avoid using slots within your production deployment for testing purposes.
+source:
+ type: aprl
+ file: azure-resources/Web/serverFarms/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/serverFarms
+severity: 0
+labels:
+ guid: dbe3fd66-fb2a-9d46-b162-1791e21da236
+ area: Governance
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-StandardPremiumAzureAppServicePlanUseStandard.yaml b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-StandardPremiumAzureAppServicePlanUseStandard.yaml
new file mode 100644
index 000000000..544d1d357
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-serverFarms/aprl-StandardPremiumAzureAppServicePlanUseStandard.yaml
@@ -0,0 +1,27 @@
+name: aprl-StandardPremiumAzureAppServicePlanUseStandard
+title: Use Standard or Premium tier
+description: |-
+ Choose Standard/Premium Azure App Service Plan for robust apps with advanced scaling, high availability, better performance, and multiple slots, ensuring resilience and continuous operation.
+source:
+ type: aprl
+ file: azure-resources/Web/serverFarms/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/serverFarms
+severity: 0
+labels:
+ guid: b2113023-a553-2e41-9789-597e2fb54c31
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure App Service Plans that are not in the "Standard", "Premium", or "IsolatedV2" SKU tiers.
+
+ resources
+ | where type =~ 'microsoft.web/serverfarms'
+ | extend sku_tier = tostring(sku.tier)
+ | where tolower(sku_tier) !contains "standard" and
+ tolower(sku_tier) !contains "premium" and
+ tolower(sku_tier) !contains "isolatedv2"
+ | project recommendationId="b2113023-a553-2e41-9789-597e2fb54c31", name, id, tags, param1= strcat("SKU=",sku_tier)
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-FunctionAppsPlan.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-FunctionAppsPlan.yaml
new file mode 100644
index 000000000..8b81c8993
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-FunctionAppsPlan.yaml
@@ -0,0 +1,16 @@
+name: revcl-FunctionAppsPlan
+title: Function apps in a given plan are all scaled together, so any issues with scaling
+ can affect all apps in the plan.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: ad53cc7d-e2e8-4aaa-a357-1549ab9153d8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/service-health/alerts-activity-log-service-notifications-portal
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-Functions.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-Functions.yaml
new file mode 100644
index 000000000..157dbe5e8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-Functions.yaml
@@ -0,0 +1,17 @@
+name: revcl-Functions
+title: Functions - Keep your functions warm
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 0e7c28dc-9366-4572-82bf-f4564b0d934a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources?tabs=json
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-FunctionsData.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-FunctionsData.yaml
new file mode 100644
index 000000000..b6b1c9efb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-FunctionsData.yaml
@@ -0,0 +1,17 @@
+name: revcl-FunctionsData
+title: Functions - Cache data locally
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 27139b82-1102-4dbd-9eaf-11e6f843e52f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/automation/update-management/overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/azure-administrator-manage-compute-resources/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-GbSecondCalculationAsyncOperation.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-GbSecondCalculationAsyncOperation.yaml
new file mode 100644
index 000000000..95bd40ebd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-GbSecondCalculationAsyncOperation.yaml
@@ -0,0 +1,23 @@
+name: revcl-GbSecondCalculationAsyncOperation
+title: Am I billed for 'await time'? This question is typically asked in the context
+ of a C# function that does an async operation and waits for the result, e.g. await
+ Task.Delay(1000) or await client.GetAsync('http://google.com'). The answer is yes
+ - the GB second calculation is based on the start and end time of the function and
+ the memory usage over that period. What actually happens over that time in terms
+ of CPU activity is not factored into the calculation.One exception to this rule
+ is if you are using durable functions. You are not billed for time spent at awaits
+ in orchestrator functions.apply demand shaping techinques where possible (dev environments?)
+ https://github.com/Azure-Samples/functions-csharp-premium-scaler
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 9f89dc7b-44be-43b1-a27f-8b9e91be1f38
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/alerts/action-groups
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-ReuseConnectionsFunctions.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-ReuseConnectionsFunctions.yaml
new file mode 100644
index 000000000..59b83f838
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-ReuseConnectionsFunctions.yaml
@@ -0,0 +1,17 @@
+name: revcl-ReuseConnectionsFunctions
+title: Functions - Reuse connections
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: cc881470-607c-41cc-a0e6-14658dd458e9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/how-to/guest-configuration-create
+- type: docs
+ url: https://learn.microsoft.com/azure/cost-management-billing/reservations/reservation-apis?toc=%2Fazure%2Fcost-management-billing%2Ftoc.json
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-SeparateConsumptionPlanHigherPlan.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-SeparateConsumptionPlanHigherPlan.yaml
new file mode 100644
index 000000000..36b445312
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-SeparateConsumptionPlanHigherPlan.yaml
@@ -0,0 +1,17 @@
+name: revcl-SeparateConsumptionPlanHigherPlan
+title: When using autoscale with different functions, there might be one driving all
+ the autoscale for all the resources - consider moving it to a separate consumption
+ plan (and consider higher plan for CPU)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 359c363e-7dd6-4162-9a36-4a907ebae38e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-SingleZipFileColdStarts.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-SingleZipFileColdStarts.yaml
new file mode 100644
index 000000000..3c2d69cc0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/revcl-SingleZipFileColdStarts.yaml
@@ -0,0 +1,21 @@
+name: revcl-SingleZipFileColdStarts
+title: Functions - Cold starts-Use the 'Run from package' functionality. This way,
+ the code is downloaded as a single zip file. This can, for example, result in significant
+ improvements with Javascript functions, which have a lot of node modules.Use language
+ specific tools to reduce the package size, for example, tree shaking Javascript
+ applications.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 4722d928-c1b1-4cd5-81e5-4a29b9de39ac
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/configure-network-watcher/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanAzureMonitor.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanAzureMonitor.yaml
new file mode 100644
index 000000000..20356bcfc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanAzureMonitor.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AppServicePlanAzureMonitor
+title: (App Service plan) Scale in when demand decreases. To scale in, define scale
+ rules to reduce the number of instances in Azure Monitor.
+description: Prevent wastage and reduce unnecessary expenses.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: a14a3b78-26d3-4159-975b-df8e82c9590e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanLowerEnvironments.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanLowerEnvironments.yaml
new file mode 100644
index 000000000..d9a0ac424
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanLowerEnvironments.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AppServicePlanLowerEnvironments
+title: (App Service plan) Choose Free or Basic tiers for lower environments. We recommend
+ these tiers for experimental use. Remove the tiers when you no longer need them.
+description: The Free and Basic tiers are budget-friendly compared to higher tiers.
+ They provide a cost-effective solution for nonproduction environments that don't
+ need the full features and performance of premium plans.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: dc84dbbc-6816-48ae-9926-e52e68d4273e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanPremiumVTier.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanPremiumVTier.yaml
new file mode 100644
index 000000000..c2427f941
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlanPremiumVTier.yaml
@@ -0,0 +1,20 @@
+name: wafsg-AppServicePlanPremiumVTier
+title: '(App Service plan) Take advantage of discounts and explore preferred pricing
+ for: - Lower environments with dev/test plans. - Azure reservations and Azure
+ savings plans for dedicated compute that you provision in the Premium V3 tier and
+ App Service Environment. Use reserved instances for stable workloads that have
+ predictable usage patterns.'
+description: Dev/test plans provide reduced rates for Azure services, which makes
+ them cost-effective for nonproduction environments. Use reserved instances to prepay
+ for compute resources and get significant discounts.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 1572941a-e08a-4d0c-bae6-5af048bbcc2a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlansMultipleApplications.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlansMultipleApplications.yaml
new file mode 100644
index 000000000..979c68178
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-AppServicePlansMultipleApplications.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AppServicePlansMultipleApplications
+title: 'Consider the tradeoffs between density and isolation: You can use App Service
+ plans to host multiple applications on the same compute, which saves costs with
+ shared environments. For more information, see Tradeoffs.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 66723d3b-34de-4f55-8861-299453c5b6d8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ConsistentUsagePatternDedicatedComputeInstances.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ConsistentUsagePatternDedicatedComputeInstances.yaml
new file mode 100644
index 000000000..2552d93da
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ConsistentUsagePatternDedicatedComputeInstances.yaml
@@ -0,0 +1,19 @@
+name: wafsg-ConsistentUsagePatternDedicatedComputeInstances
+title: 'Evaluate the discounted options: Higher tiers include dedicated compute instances.
+ You can apply a reservation discount if your workload has a predictable and consistent
+ usage pattern. Make sure that you analyze usage data to determine the type of reservation
+ that suits your workload. For more information, see Save costs with App Service
+ reserved instances.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 692ab2db-ff92-44e9-ae54-910c66389e0d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-CostAnalysisToolAppServiceResources.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-CostAnalysisToolAppServiceResources.yaml
new file mode 100644
index 000000000..1b16b0856
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-CostAnalysisToolAppServiceResources.yaml
@@ -0,0 +1,17 @@
+name: wafsg-CostAnalysisToolAppServiceResources
+title: (App Service) Monitor costs that App Service resources incur. Run the cost
+ analysis tool in the Azure portal. Create budgets and alerts to notify stakeholders.
+description: You can identify cost spikes, inefficiencies, or unexpected expenses
+ early on. This proactive approach helps you to provide budgetary controls to prevent
+ overspending.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 83127c0d-df6c-4785-be24-e54d0933118d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-EachAppServiceTierAzurePricingCalculator.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-EachAppServiceTierAzurePricingCalculator.yaml
new file mode 100644
index 000000000..73891b64e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-EachAppServiceTierAzurePricingCalculator.yaml
@@ -0,0 +1,18 @@
+name: wafsg-EachAppServiceTierAzurePricingCalculator
+title: 'Estimate the initial cost: As part of your cost modeling exercise, use the
+ Azure pricing calculator to evaluate the approximate costs associated with various
+ tiers based on the number of instances that you plan to run. Each App Service tier
+ offers different compute options.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 551337b1-cb7a-4f60-870b-331efa943936
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-EnvironmentCostsPreProductionEnvironments.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-EnvironmentCostsPreProductionEnvironments.yaml
new file mode 100644
index 000000000..3704d2d37
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-EnvironmentCostsPreProductionEnvironments.yaml
@@ -0,0 +1,18 @@
+name: wafsg-EnvironmentCostsPreProductionEnvironments
+title: 'Optimize environment costs: Consider the Basic or Free tier to run pre-production
+ environments. These tiers are low performance and low cost. If you use the Basic
+ or Free tier, use governance to enforce the tier, constrain the number of instances
+ and CPUs, restrict scaling, and limit log retention.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 4e2a03a6-ff51-46c5-902d-3d7161d9c99c
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ExtendedDataRetentionPeriodsExpensiveStorageTiers.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ExtendedDataRetentionPeriodsExpensiveStorageTiers.yaml
new file mode 100644
index 000000000..3f6cfb096
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ExtendedDataRetentionPeriodsExpensiveStorageTiers.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExtendedDataRetentionPeriodsExpensiveStorageTiers
+title: 'Regularly check data-related costs: Extended data retention periods or expensive
+ storage tiers can lead to high storage costs. More expenses can accumulate due to
+ both bandwidth usage and prolonged retention of logging data.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: b7564349-7885-4f66-89ae-b732adaf29ae
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-GatewayAggregationPatternImplementDesignPatterns.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-GatewayAggregationPatternImplementDesignPatterns.yaml
new file mode 100644
index 000000000..d7d517f49
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-GatewayAggregationPatternImplementDesignPatterns.yaml
@@ -0,0 +1,18 @@
+name: wafsg-GatewayAggregationPatternImplementDesignPatterns
+title: 'Implement design patterns: This strategy reduces the volume of requests that
+ your workload generates. Consider using patterns like the Backends for Frontends
+ pattern and the Gateway Aggregation pattern, which can minimize the number of requests
+ and reduce costs.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 7ce7bbb5-df18-4e4d-86b6-83e25e835457
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-SameComputeEnvironmentProductionInstance.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-SameComputeEnvironmentProductionInstance.yaml
new file mode 100644
index 000000000..2d1c68786
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-SameComputeEnvironmentProductionInstance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-SameComputeEnvironmentProductionInstance
+title: 'Optimize deployment costs: Take advantage of deployment slots to optimize
+ costs. The slot runs in the same compute environment as the production instance.
+ Use them strategically for scenarios like blue-green deployments that switch between
+ slots. This approach minimizes downtime and ensures smooth transitions.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 41026085-4728-4bff-abbe-be08a46e4735
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ScalingStrategyPreciseMaximum.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ScalingStrategyPreciseMaximum.yaml
new file mode 100644
index 000000000..75e2b94bc
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-ScalingStrategyPreciseMaximum.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ScalingStrategyPreciseMaximum
+title: 'Evaluate the effect of your scaling strategy on cost: You must properly design,
+ test, and configure for scaling out and for scaling in when you implement autoscaling.
+ Establish precise maximum and minimum limits on autoscaling.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 289a2a9d-eda1-4be4-af63-23d230194724
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-SuboptimalSkuSelectionAppServicePlan.yaml b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-SuboptimalSkuSelectionAppServicePlan.yaml
new file mode 100644
index 000000000..6222d577a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Cost/wafsg-SuboptimalSkuSelectionAppServicePlan.yaml
@@ -0,0 +1,20 @@
+name: wafsg-SuboptimalSkuSelectionAppServicePlan
+title: 'Understand usage meters: Azure charges an hourly rate, prorated to the second,
+ based on your App Service plan''s pricing tier. Charges apply to each scaled-out
+ instance in your plan, based on the time that you allocate the VM instance. Pay
+ attention to underused compute resources that might increase your costs as a result
+ of overallocation due to suboptimal SKU selection, or poorly configured scale-in
+ configuration.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Cost
+severity: 1
+labels:
+ guid: 84808948-46c4-4cd5-aa74-b79826a19b32
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/revcl-LeverageAzureDevopsFunctionAppCode.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/revcl-LeverageAzureDevopsFunctionAppCode.yaml
new file mode 100644
index 000000000..3454b8ad6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/revcl-LeverageAzureDevopsFunctionAppCode.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAzureDevopsFunctionAppCode
+title: Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Function
+ App code
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: bb42650c-257d-4cb0-822a-131138b8e6f0
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/training/modules/deploy-azure-functions/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/revcl-LeverageAzureDevopsLogicAppCode-1.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/revcl-LeverageAzureDevopsLogicAppCode-1.yaml
new file mode 100644
index 000000000..e0f3d8d14
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/revcl-LeverageAzureDevopsLogicAppCode-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAzureDevopsLogicAppCode-1
+title: Leverage Azure DevOps or GitHub to streamline CI/CD and safeguard your Logic
+ App code
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 74275fa5-9e08-4c7e-b096-13b538fe1501
+links:
+- type: docs
+ url: https://learn.microsoft.com/training/modules/deploy-azure-functions/
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServicePlanAppChanges.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServicePlanAppChanges.yaml
new file mode 100644
index 000000000..4e9823b83
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServicePlanAppChanges.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AppServicePlanAppChanges
+title: (App Service plan) Validate app changes in the staging slot before you swap
+ it with the production slot.
+description: Avoid downtime and errors. Quickly revert to the last-known good state
+ if you detect a problem after a swap.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 02d5a8b1-6038-49c3-96b1-87ac56064269
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServiceResourceProviderCertificationManagement.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServiceResourceProviderCertificationManagement.yaml
new file mode 100644
index 000000000..90452027f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServiceResourceProviderCertificationManagement.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AppServiceResourceProviderCertificationManagement
+title: (App Service) Take advantage of App Service managed certificates to offload
+ certification management to Azure.
+description: App Service automatically handles processes like certificate procurement,
+ certificate verification, certificate renewal, and importing certificates from Key
+ Vault. Alternatively, upload your certificate to Key Vault and authorize the App
+ Service resource provider to access it.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 471061e9-3f5f-43a3-a861-79108871cf91
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServiceWebAppDeploymentStampsPattern.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServiceWebAppDeploymentStampsPattern.yaml
new file mode 100644
index 000000000..9a12e07cd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AppServiceWebAppDeploymentStampsPattern.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AppServiceWebAppDeploymentStampsPattern
+title: 'Deploy immutable units: Implement the Deployment Stamps pattern to compartmentalize
+ App Service into an immutable stamp. App Service supports the use of containers,
+ which are inherently immutable. Consider custom containers for your App Service
+ web app.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 669390a7-ea5f-4e73-ba58-bf3606702be1
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AzureLoadTestingAutomatedTests.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AzureLoadTestingAutomatedTests.yaml
new file mode 100644
index 000000000..080831752
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-AzureLoadTestingAutomatedTests.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureLoadTestingAutomatedTests
+title: 'Run automated tests: Before you promote a release of your web app, thoroughly
+ test its performance, functionality, and integration with other components. Use
+ Azure Load Testing, which integrates with Apache JMeter, a popular tool for performance
+ testing. Explore automated tools for other types of testing, such as Phantom for
+ functional testing.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: a4224cce-1a82-4c9e-a488-86bb6b215a39
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-CustomDomainsTlsCertificates.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-CustomDomainsTlsCertificates.yaml
new file mode 100644
index 000000000..d908b748c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-CustomDomainsTlsCertificates.yaml
@@ -0,0 +1,15 @@
+name: wafsg-CustomDomainsTlsCertificates
+title: 'Manage certificates: For custom domains, you need to manage TLS certificates.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: dc4ab7a7-f32b-44e3-a2e5-830459d5359a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-FrequentLoggingStorageCosts.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-FrequentLoggingStorageCosts.yaml
new file mode 100644
index 000000000..b613f624b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-FrequentLoggingStorageCosts.yaml
@@ -0,0 +1,20 @@
+name: wafsg-FrequentLoggingStorageCosts
+title: '(App Service) Enable diagnostics logs for the application and the instance. Frequent
+ logging can slow down the performance of the system, add to storage costs, and introduce
+ risk if you have unsecure access to logs. Follow these best practices: - Log the
+ right level of information. - Set retention policies. - Keep an audit trail of
+ authorized access and unauthorized attempts. - Treat logs as data and apply data-protection
+ controls.'
+description: Diagnostic logs provide valuable insights into your app's behavior. Monitor
+ traffic patterns and identify anomalies.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 306767a6-b162-4b64-91a0-091a3d3b37cb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-InstanceHealthProbesHealthProbeRequests.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-InstanceHealthProbesHealthProbeRequests.yaml
new file mode 100644
index 000000000..13fe0d2d6
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-InstanceHealthProbesHealthProbeRequests.yaml
@@ -0,0 +1,16 @@
+name: wafsg-InstanceHealthProbesHealthProbeRequests
+title: (App Service) Monitor the health of your instances and activate instance health
+ probes. Set up a specific path for handling health probe requests.
+description: You can detect problems promptly and take necessary actions to maintain
+ availability and performance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 2bf6f5fc-cc4d-4ae3-98bc-ce4d42fafc32
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-SameVirtualMachineDeploymentSlots.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-SameVirtualMachineDeploymentSlots.yaml
new file mode 100644
index 000000000..3110be2bb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-SameVirtualMachineDeploymentSlots.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SameVirtualMachineDeploymentSlots
+title: 'Manage releases: Use deployment slots to manage releases effectively. You
+ can deploy your application to a slot, perform testing, and validate its functionality.
+ After verification, you can seamlessly move the app to production. This process
+ doesn''t incur extra costs because the slot runs in the same virtual machine (VM)
+ environment as the production instance.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: d4909fdf-867b-43b7-828d-197247a83530
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-SeparateAppServicePlansSeparateInstances.yaml b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-SeparateAppServicePlansSeparateInstances.yaml
new file mode 100644
index 000000000..d0eb0e77f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Operations/wafsg-SeparateAppServicePlansSeparateInstances.yaml
@@ -0,0 +1,18 @@
+name: wafsg-SeparateAppServicePlansSeparateInstances
+title: 'Keep production environments safe: Create separate App Service plans to run
+ production and pre-production environments. Don''t make changes directly in the
+ production environment to ensure stability and reliability. Separate instances allow
+ flexibility in development and testing before you promote changes to production.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Operations
+severity: 1
+labels:
+ guid: 6e19d92c-1d22-486b-81d2-bb3125e74231
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-AdequatePerformanceTestingScalingStrategy.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-AdequatePerformanceTestingScalingStrategy.yaml
new file mode 100644
index 000000000..5bf0d4a72
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-AdequatePerformanceTestingScalingStrategy.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AdequatePerformanceTestingScalingStrategy
+title: 'Optimize your scaling strategy: When possible, use autoscaling instead of
+ manually adjusting the number of instances as application load changes. With autoscaling,
+ App Service adjusts server capacity based on predefined rules or triggers. Make
+ sure you do adequate performance testing and set the right rules for the right triggers.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 4cb7ff21-66c1-4347-b93c-5c4073b3c4af
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-CacheQueryResultsRepeatedRoundTrips.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-CacheQueryResultsRepeatedRoundTrips.yaml
new file mode 100644
index 000000000..29b9c585a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-CacheQueryResultsRepeatedRoundTrips.yaml
@@ -0,0 +1,19 @@
+name: wafsg-CacheQueryResultsRepeatedRoundTrips
+title: 'Use caching: Retrieving information from a resource that doesn''t change frequently
+ and is expensive to access affects performance. Complex queries, including joins
+ and multiple lookups, contribute to runtime. Perform caching to minimize the processing
+ time and latency. Cache query results to avoid repeated round trips to the database
+ or back end and reduce processing time for subsequent requests.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 66321b11-3e45-4fa8-9afa-b5f9d6894c28
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-PerformanceIndicatorsKeyIndicators.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-PerformanceIndicatorsKeyIndicators.yaml
new file mode 100644
index 000000000..7333d1e72
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-PerformanceIndicatorsKeyIndicators.yaml
@@ -0,0 +1,18 @@
+name: wafsg-PerformanceIndicatorsKeyIndicators
+title: 'Identify and monitor performance indicators: Set targets for the key indicators
+ for the application, such as the volume of incoming requests, time that the application
+ takes to respond to requests, pending requests, and errors in HTTP responses. Consider
+ key indicators as part of the performance baseline for the workload.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: bebcf697-35e6-4f4d-abce-329e52c87367
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-PremiumVPricingTierRightTier.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-PremiumVPricingTierRightTier.yaml
new file mode 100644
index 000000000..9e33f9477
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-PremiumVPricingTierRightTier.yaml
@@ -0,0 +1,18 @@
+name: wafsg-PremiumVPricingTierRightTier
+title: 'Select the right tier: Use dedicated compute for production workloads. Premium
+ tiers offer larger SKUs with increased memory and CPU capacity, more instances,
+ and more features, such as zone redundancy. For more information, see Premium V3
+ pricing tier.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 5ae81d49-ba81-423f-b8a2-d7a29a30f349
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-ProtocolEfficiencyDataTransfer.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-ProtocolEfficiencyDataTransfer.yaml
new file mode 100644
index 000000000..818cbb38b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-ProtocolEfficiencyDataTransfer.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ProtocolEfficiencyDataTransfer
+title: Consider using HTTP/2 for applications to improve protocol efficiency.
+description: Choose HTTP/2 over HTTP/1.1 because HTTP/2 fully multiplexes connections,
+ reuses connections to reduce overhead, and compresses headers to minimize data transfer.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 4b759c59-9b6c-44d9-a7e1-1826948deb4a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-SingleAppServicePlanAppServiceApps.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-SingleAppServicePlanAppServiceApps.yaml
new file mode 100644
index 000000000..055424759
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-SingleAppServicePlanAppServiceApps.yaml
@@ -0,0 +1,16 @@
+name: wafsg-SingleAppServicePlanAppServiceApps
+title: Enable the Always On setting when applications share a single App Service plan.
+ App Service apps automatically unload when idle to save resources. The next request
+ triggers a cold start, which can cause request timeouts.
+description: The application is never unloaded with Always On enabled.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 225c3a4c-ee57-48b4-99f4-93d4c4884f4d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-VariousUserScenariosUseLoadTesting.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-VariousUserScenariosUseLoadTesting.yaml
new file mode 100644
index 000000000..8fad779d4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-VariousUserScenariosUseLoadTesting.yaml
@@ -0,0 +1,17 @@
+name: wafsg-VariousUserScenariosUseLoadTesting
+title: 'Assess capacity: Simulate various user scenarios to determine the optimal
+ capacity that you need to handle expected traffic. Use Load Testing to understand
+ how your application behaves under different levels of load.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 26455527-f19a-43ef-adf4-29ed5e966a44
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-WebApplicationBusinessRequirements.yaml b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-WebApplicationBusinessRequirements.yaml
new file mode 100644
index 000000000..ba4a9f60e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Performance/wafsg-WebApplicationBusinessRequirements.yaml
@@ -0,0 +1,17 @@
+name: wafsg-WebApplicationBusinessRequirements
+title: 'Review the performance antipatterns: To make sure the web application performs
+ and scales in accordance with your business requirements, avoid the typical antipatterns.
+ Here are some antipatterns that App Service corrects.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Performance
+severity: 1
+labels:
+ guid: 62ea8582-63cb-4ac6-8a73-c800a2a0428a
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceAppRegion.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceAppRegion.yaml
new file mode 100644
index 000000000..877bdfe23
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceAppRegion.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServiceAppRegion
+title: Familiarize with how to move an App Service app to another region During a
+ disaster
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 2
+labels:
+ guid: bd2a865c-0835-4418-bb58-4df91a5a9b3f
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/manage-disaster-recovery#recover-app-content-only
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1-2-3.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1-2-3.yaml
new file mode 100644
index 000000000..7e04d24ad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment-1-2-3.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServiceEnvironmentIsolatedEnvironment-1-2-3
+title: If deploying to an Isolated environment, use or migrate to App Service Environment
+ (ASE) v3
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 82118ec5-ed6f-4c68-9471-eb0da98a1b34
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/environment/intro
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment.yaml
new file mode 100644
index 000000000..f6e581284
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceEnvironmentIsolatedEnvironment.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServiceEnvironmentIsolatedEnvironment
+title: If deploying to an Isolated environment, use or migrate to App Service Environment
+ (ASE) v3
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 47a0aae0-d8a0-43b1-9791-e934dee3754c
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/environment/intro
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceInstancesHealthChecks.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceInstancesHealthChecks.yaml
new file mode 100644
index 000000000..c01bbf544
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServiceInstancesHealthChecks.yaml
@@ -0,0 +1,15 @@
+name: revcl-AppServiceInstancesHealthChecks
+title: Monitor App Service instances using Health checks
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: a3b4d5f6-758c-4f9d-9e1a-d7c6b7e8f9ab
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServicePlanFunctionApps-1.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServicePlanFunctionApps-1.yaml
new file mode 100644
index 000000000..cfdc09d74
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServicePlanFunctionApps-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServicePlanFunctionApps-1
+title: Ensure 'Always On' is enabled for all Function Apps running on App Service
+ Plan
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 17232891-f89f-4eaa-90f1-3b34bf798ed5
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServicePlanFunctionApps.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServicePlanFunctionApps.yaml
new file mode 100644
index 000000000..e318ee504
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AppServicePlanFunctionApps.yaml
@@ -0,0 +1,15 @@
+name: revcl-AppServicePlanFunctionApps
+title: Ensure "Always On" is enabled for Function Apps running on a app service plan
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: c7b5f3d1-0569-4fd2-9f32-c0b64e9c0c5e
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-functions/dedicated-plan#always-on
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-ApplicationInsightsAvailabilityTestsWebApp.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-ApplicationInsightsAvailabilityTestsWebApp.yaml
new file mode 100644
index 000000000..a2aa79c40
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-ApplicationInsightsAvailabilityTestsWebApp.yaml
@@ -0,0 +1,16 @@
+name: revcl-ApplicationInsightsAvailabilityTestsWebApp
+title: Monitor availability and responsiveness of web app or website using Application
+ Insights availability tests
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: c7d3e5f9-a19c-4833-8ca6-1dcb0128e129
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-ApplicationInsightsStandardTestWebApp.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-ApplicationInsightsStandardTestWebApp.yaml
new file mode 100644
index 000000000..7f73ec5e0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-ApplicationInsightsStandardTestWebApp.yaml
@@ -0,0 +1,16 @@
+name: revcl-ApplicationInsightsStandardTestWebApp
+title: Use Application Insights Standard test to monitor availability and responsiveness
+ of web app or website
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 2
+labels:
+ guid: b4e3f2d5-a5c6-4d7e-8b2f-c5d9e7a8f0ea
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-monitor/app/availability-standard-tests
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceBestPractices.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceBestPractices.yaml
new file mode 100644
index 000000000..06ee2123f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureAppServiceBestPractices
+title: Refer to backup and restore best practices for Azure App Service
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 35a91c5d-4ad6-4d9b-8e0f-c47db9e6d1e7
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/manage-backup
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceReliabilityBestPractices.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceReliabilityBestPractices.yaml
new file mode 100644
index 000000000..0d700defa
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceReliabilityBestPractices.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureAppServiceReliabilityBestPractices
+title: Implement Azure App Service reliability best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: e68cd0ec-afc6-4bd8-a27f-7860ad9a0db2
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/architecture/framework/services/compute/azure-app-service/reliability
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceReliabilitySupport.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceReliabilitySupport.yaml
new file mode 100644
index 000000000..ec4446be2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-AzureAppServiceReliabilitySupport.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureAppServiceReliabilitySupport
+title: Familiarize with reliability support in Azure App Service
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: f3d2f1e4-e6d4-4b7a-a5a5-e2a9b2c6f293
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-BaselineHighlyAvailableZoneRedundantWebApplicationArchitectureBestPractices.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-BaselineHighlyAvailableZoneRedundantWebApplicationArchitectureBestPractices.yaml
new file mode 100644
index 000000000..7c90a95db
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-BaselineHighlyAvailableZoneRedundantWebApplicationArchitectureBestPractices.yaml
@@ -0,0 +1,16 @@
+name: revcl-BaselineHighlyAvailableZoneRedundantWebApplicationArchitectureBestPractices
+title: Refer to baseline highly available zone-redundant web application architecture
+ for best practices
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 2
+labels:
+ guid: b32e1aa1-4813-4602-88fe-27ca2891f421
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/zone-redundant?source=recommendations
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3-4.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3-4.yaml
new file mode 100644
index 000000000..21839c938
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3-4.yaml
@@ -0,0 +1,15 @@
+name: revcl-CrossRegionDrStrategyCriticalWorkloads-1-2-3-4
+title: Consider a Cross-Region DR strategy for critical workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 1cda768f-a206-445d-8234-56f6a6e7286e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/logic-apps/business-continuity-disaster-recovery-guidance?toc=%2Fazure%2Freliability%2Ftoc.json&bc=%2Fazure%2Freliability%2Fbreadcrumb%2Ftoc.json
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads.yaml
new file mode 100644
index 000000000..bd5f373ff
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-CrossRegionDrStrategyCriticalWorkloads.yaml
@@ -0,0 +1,15 @@
+name: revcl-CrossRegionDrStrategyCriticalWorkloads
+title: Consider a Cross-Region DR strategy for critical workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 5969d03e-eacf-4042-b127-73c55e3575fa
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/reliability/reliability-functions?tabs=azure-portal#cross-region-disaster-recovery-and-business-continuity
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-FunctionAppStorageAccount.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-FunctionAppStorageAccount.yaml
new file mode 100644
index 000000000..069960881
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-FunctionAppStorageAccount.yaml
@@ -0,0 +1,16 @@
+name: revcl-FunctionAppStorageAccount
+title: Pair a Function App to its own storage account. Try not to re-use storage accounts
+ for Function Apps unless they are tightly coupled
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 40a325c2-7c0e-49e6-86d8-c273b4dc21ba
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#shared-storage-accounts
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-HealthChecksImplement.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-HealthChecksImplement.yaml
new file mode 100644
index 000000000..b58156969
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-HealthChecksImplement.yaml
@@ -0,0 +1,15 @@
+name: revcl-HealthChecksImplement
+title: Implement health checks
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 1275e4a9-7b6a-43c3-a9cd-5ee18d8995ad
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LeverageAvailabilityZonesConsumptionTier.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LeverageAvailabilityZonesConsumptionTier.yaml
new file mode 100644
index 000000000..e1870e773
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LeverageAvailabilityZonesConsumptionTier.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAvailabilityZonesConsumptionTier
+title: Leverage Availability Zones where regionally applicable (not available for
+ Consumption tier)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: a9808100-d640-4f77-ac56-1ec0600f6752
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LeverageAvailabilityZonesPremiumV.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LeverageAvailabilityZonesPremiumV.yaml
new file mode 100644
index 000000000..da20d248b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LeverageAvailabilityZonesPremiumV.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAvailabilityZonesPremiumV
+title: Leverage Availability Zones where regionally applicable (requires Premium v2
+ or v3 tier)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: a7e2e6c2-491f-4fa4-a82b-521d0bc3b202
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/reliability/migrate-app-service
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LogicAppsRegionFailures-1.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LogicAppsRegionFailures-1.yaml
new file mode 100644
index 000000000..4405b0ee8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-LogicAppsRegionFailures-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-LogicAppsRegionFailures-1
+title: Protect logic apps from region failures with zone redundancy and availability
+ zones
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 3d7008bd-6bc1-4b03-8aa8-ec2a3b55786a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/logic-apps/set-up-zone-redundancy-availability-zones?tabs=standard#next-steps
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-RightFunctionHostingPlanSloRequirements.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-RightFunctionHostingPlanSloRequirements.yaml
new file mode 100644
index 000000000..34a1bbccb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-RightFunctionHostingPlanSloRequirements.yaml
@@ -0,0 +1,15 @@
+name: revcl-RightFunctionHostingPlanSloRequirements
+title: Select the right Function hosting plan based on your business & SLO requirements
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 4238f409-2ea0-43be-a06b-2a993c98aa7b
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#overview-of-plans
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-RightLogicAppHostingPlanSloRequirements-1.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-RightLogicAppHostingPlanSloRequirements-1.yaml
new file mode 100644
index 000000000..a670d2869
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-RightLogicAppHostingPlanSloRequirements-1.yaml
@@ -0,0 +1,15 @@
+name: revcl-RightLogicAppHostingPlanSloRequirements-1
+title: Select the right Logic App hosting plan based on your business & SLO requirements
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 0
+labels:
+ guid: 3b7a56de-5020-4642-b3cb-c976e80b6d6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/logic-apps/single-tenant-overview-compare
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-UsePremiumStagingSlots.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-UsePremiumStagingSlots.yaml
new file mode 100644
index 000000000..5263a241f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/revcl-UsePremiumStagingSlots.yaml
@@ -0,0 +1,16 @@
+name: revcl-UsePremiumStagingSlots
+title: Use Premium and Standard tiers. These tiers support staging slots and automated
+ backups.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: e4b31c6a-2e3f-4df1-8e8b-9c3aa5a27820
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanOverviewPremiumAppServicePlan.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanOverviewPremiumAppServicePlan.yaml
new file mode 100644
index 000000000..17ee05eca
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanOverviewPremiumAppServicePlan.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AppServicePlanOverviewPremiumAppServicePlan
+title: (App Service plan) Choose the Premium tier of an App Service plan for production
+ workloads. Set the maximum and minimum number of workers according to your capacity
+ planning. For more information, see App Service plan overview.
+description: A premium App Service plan offers advanced scaling features and ensures
+ redundancy if failures occur.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 9ba4ebdd-a039-47e8-bff9-884e1852a030
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanUserFlowDesign.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanUserFlowDesign.yaml
new file mode 100644
index 000000000..f79920821
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanUserFlowDesign.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AppServicePlanUserFlowDesign
+title: 'Prioritize user flows: Not all flows are equally critical. Assign priorities
+ to each flow to guide your design decisions. User flow design can influence which
+ service tiers and number of instances that you choose for an App Service plan and
+ configuration.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: e545b2de-84e1-4c41-81a6-46914c8e72cf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanZoneRedundancy.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanZoneRedundancy.yaml
new file mode 100644
index 000000000..74723d7ad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AppServicePlanZoneRedundancy.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AppServicePlanZoneRedundancy
+title: (App Service plan) Enable zone redundancy. Consider provisioning more than
+ three instances to enhance fault tolerance. Check regional support for zone redundancy
+ because not all regions offer this feature.
+description: Your application can withstand failures in a single zone when multiple
+ instances are spread across zones. Traffic automatically shifts to healthy instances
+ in other zones and maintains application reliability if one zone is unavailable.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: f6d4a1ff-bf30-4477-823d-b2163667a87d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-ApplicationRequestRoutingOtherHealthyNodes.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-ApplicationRequestRoutingOtherHealthyNodes.yaml
new file mode 100644
index 000000000..a6c4662c2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-ApplicationRequestRoutingOtherHealthyNodes.yaml
@@ -0,0 +1,22 @@
+name: wafsg-ApplicationRequestRoutingOtherHealthyNodes
+title: (App Service) Consider disabling the application request routing (ARR) affinity
+ feature. ARR affinity creates sticky sessions that redirect users to the node that
+ handled their previous requests.
+description: Incoming requests are evenly distributed across all available nodes when
+ you disable ARR affinity. Evenly distributed requests prevent traffic from overwhelming
+ any single node. Requests can be seamlessly redirected to other healthy nodes if
+ a node is unavailable. Avoid session affinity to ensure that your App Service instance
+ remains stateless. A stateless App Service reduces complexity and ensures consistent
+ behavior across nodes. Remove sticky sessions so that App Service can add or remove
+ instances to scale horizontally.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 784f255c-4436-47c2-a1fc-65de9b5de39e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomatedRecoveryOperationsConductReliabilityTesting.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomatedRecoveryOperationsConductReliabilityTesting.yaml
new file mode 100644
index 000000000..42c7f4ea8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomatedRecoveryOperationsConductReliabilityTesting.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AutomatedRecoveryOperationsConductReliabilityTesting
+title: 'Conduct reliability testing: Conduct load testing to evaluate your application''s
+ reliability and performance under load. Test plans should include scenarios that
+ validate your automated recovery operations.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 04ae0e82-112b-4433-8a90-273a5684b328
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomaticHealingCapabilitiesAutomaticRepair.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomaticHealingCapabilitiesAutomaticRepair.yaml
new file mode 100644
index 000000000..d0c8d8e67
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomaticHealingCapabilitiesAutomaticRepair.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AutomaticHealingCapabilitiesAutomaticRepair
+title: 'Plan your recoverability: Redundancy is crucial for business continuity. Fail
+ over to another instance if one instance is unreachable. Explore automatic healing
+ capabilities in App Service, such as automatic repair of instances.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: bc69b314-43db-4c70-8b68-fcaf3b01137e
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomaticProactiveMaintenanceAutomaticHealingRules.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomaticProactiveMaintenanceAutomaticHealingRules.yaml
new file mode 100644
index 000000000..d0e0080ea
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AutomaticProactiveMaintenanceAutomaticHealingRules.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AutomaticProactiveMaintenanceAutomaticHealingRules
+title: (App Service) Define automatic healing rules based on request count, slow requests,
+ memory limits, and other indicators that are part of your performance baseline.
+ Consider this configuration as part of your scaling strategy.
+description: Automatic healing rules help your application recover automatically from
+ unexpected problems. The configured rules trigger healing actions when thresholds
+ are breached. Automatic healing enables automatic proactive maintenance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 152ed4b6-dba0-4737-92c1-441704fbfe83
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AvailabilityZonesFaultTolerance.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AvailabilityZonesFaultTolerance.yaml
new file mode 100644
index 000000000..ac15346b3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-AvailabilityZonesFaultTolerance.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AvailabilityZonesFaultTolerance
+title: 'Build redundancy: Build redundancy in the application and supporting infrastructure.
+ Spread instances across availability zones to improve fault tolerance. Traffic is
+ routed to other zones if one zone fails. Deploy your application across multiple
+ regions to ensure that your app remains available, even if an entire region experiences
+ an outage.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 87816451-1e4f-42f0-a497-753b966193b0
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-FailureModeAnalysisPotentialFailures.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-FailureModeAnalysisPotentialFailures.yaml
new file mode 100644
index 000000000..8127b0e39
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-FailureModeAnalysisPotentialFailures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-FailureModeAnalysisPotentialFailures
+title: 'Anticipate potential failures: Plan mitigation strategies for potential failures.
+ The following table shows examples of failure mode analysis.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: f5e1c56f-e3a8-4dbd-b235-fdb88c41216d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-HealthCheckFeatureHealthCheckRequests.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-HealthCheckFeatureHealthCheckRequests.yaml
new file mode 100644
index 000000000..fcf092dad
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-HealthCheckFeatureHealthCheckRequests.yaml
@@ -0,0 +1,17 @@
+name: wafsg-HealthCheckFeatureHealthCheckRequests
+title: (App Service) Enable the health check feature and provide a path that responds
+ to the health check requests.
+description: Health checks can detect problems early. Then the system can automatically
+ take corrective actions when a health check request fails. The load balancer routes
+ traffic away from unhealthy instances, which directs users to healthy nodes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 874fa451-0ef2-4638-8cfd-c07cef131d7f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-HealthProbesUnresponsiveWorkers.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-HealthProbesUnresponsiveWorkers.yaml
new file mode 100644
index 000000000..bd65259f2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-HealthProbesUnresponsiveWorkers.yaml
@@ -0,0 +1,17 @@
+name: wafsg-HealthProbesUnresponsiveWorkers
+title: 'Use health probes to identify unresponsive workers: App Service has built-in
+ capabilities that periodically ping a specific path of your web application. Unresponsive
+ instances are removed from the load balancer and replaced with a new instance.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: 10e2e605-ef6e-4f70-a77f-15ba305c15d7
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-ReliableScalingStrategyRightScalingApproach.yaml b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-ReliableScalingStrategyRightScalingApproach.yaml
new file mode 100644
index 000000000..392878810
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Reliability/wafsg-ReliableScalingStrategyRightScalingApproach.yaml
@@ -0,0 +1,20 @@
+name: wafsg-ReliableScalingStrategyRightScalingApproach
+title: 'Have a reliable scaling strategy: Unexpected load on an application can make
+ it unreliable. Consider the right scaling approach based on your workload characteristics.
+ You can sometimes scale up to handle the load. However, if the load continues to
+ increase, scale out to new instances. Prefer automatic scaling over manual approaches.
+ Always maintain a buffer of extra capacity during scaling operations to prevent
+ performance degradation.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Reliability
+severity: 1
+labels:
+ guid: e03792ee-d7db-4ec3-8596-9d77baf09f8f
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceAccessRestrictionsDifferentAccessRestrictions.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceAccessRestrictionsDifferentAccessRestrictions.yaml
new file mode 100644
index 000000000..93341deb1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceAccessRestrictionsDifferentAccessRestrictions.yaml
@@ -0,0 +1,18 @@
+name: revcl-AppServiceAccessRestrictionsDifferentAccessRestrictions
+title: Inbound network access should be controlled
+description: Control inbound network access using a combination of App Service Access
+ Restrictions, Service Endpoints or Private Endpoints. Different access restrictions
+ can be required and configured for the web app itself and the SCM site.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 0725769e-e669-41a4-a34a-c932223ece80
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceActivityLogsAppServiceResource.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceActivityLogsAppServiceResource.yaml
new file mode 100644
index 000000000..e1aa16372
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceActivityLogsAppServiceResource.yaml
@@ -0,0 +1,18 @@
+name: revcl-AppServiceActivityLogsAppServiceResource
+title: Send App Service activity logs to Log Analytics
+description: Set up a diagnostic setting to send the activity log to Log Analytics
+ as the central destination for logging and monitoring. This allows you to monitor
+ control plane activity on the App Service resource itself.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: ee72734b-475b-4a18-bdbf-590ce65de8e0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceKeyVaultReferencesAzureKeyVault.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceKeyVaultReferencesAzureKeyVault.yaml
new file mode 100644
index 000000000..c21a7bd8f
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceKeyVaultReferencesAzureKeyVault.yaml
@@ -0,0 +1,18 @@
+name: revcl-AppServiceKeyVaultReferencesAzureKeyVault
+title: Use Key Vault to store secrets
+description: Use Azure Key Vault to store any secrets the application needs. Key
+ Vault provides a safe and audited environment for storing secrets and is well-integrated
+ with App Service through the Key Vault SDK or App Service Key Vault References.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 834ac932-223e-4ce8-8b12-3071a5416415
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/app-service-key-vault-references
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceKeyVaultReferencesKeyVaultSdk.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceKeyVaultReferencesKeyVaultSdk.yaml
new file mode 100644
index 000000000..b9e23409c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceKeyVaultReferencesKeyVaultSdk.yaml
@@ -0,0 +1,17 @@
+name: revcl-AppServiceKeyVaultReferencesKeyVaultSdk
+title: Use Managed Identity to connect to Key Vault
+description: Use a Managed Identity to connect to Key Vault either using the Key Vault
+ SDK or through App Service Key Vault References.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 833ea3ad-2c2d-4e73-8165-c3acbef4abe1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/app-service-key-vault-references
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceRuntimeLogsRuntimeActivity.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceRuntimeLogsRuntimeActivity.yaml
new file mode 100644
index 000000000..5dd900014
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceRuntimeLogsRuntimeActivity.yaml
@@ -0,0 +1,19 @@
+name: revcl-AppServiceRuntimeLogsRuntimeActivity
+title: Send App Service runtime logs to Log Analytics
+description: By configuring the diagnostic settings of App Service, you can send all
+ telemetry to Log Analytics as the central destination for logging and monitoring.
+ This allows you to monitor runtime activity of App Service such as HTTP logs, application
+ logs, platform logs, ...
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 47768314-c115-4775-a2ea-55b46ad48408
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/troubleshoot-diagnostic-logs
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceTlsCertificateKeyVault.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceTlsCertificateKeyVault.yaml
new file mode 100644
index 000000000..a21bc7e0e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AppServiceTlsCertificateKeyVault.yaml
@@ -0,0 +1,16 @@
+name: revcl-AppServiceTlsCertificateKeyVault
+title: Use Key Vault to store TLS certificate.
+description: Store the App Service TLS certificate in Key Vault.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: f8d39fda-4776-4831-9c11-5775c2ea55b4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/configure-ssl-certificate
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AuthenticatedWebApplicationAzureAdBC.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AuthenticatedWebApplicationAzureAdBC.yaml
new file mode 100644
index 000000000..ec030cae1
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AuthenticatedWebApplicationAzureAdBC.yaml
@@ -0,0 +1,19 @@
+name: revcl-AuthenticatedWebApplicationAzureAdBC
+title: Use an established Identity Provider for authentication
+description: For authenticated web application, use a well established Identity Provider
+ like Azure AD or Azure AD B2C. Leverage the application framework of your choice
+ to integrate with this provider or use the App Service Authentication / Authorization
+ feature.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 919ca0b2-c121-459e-814b-933df574eccc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/overview-authentication-authorization
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureAdCredentialsBasicAuthentication.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureAdCredentialsBasicAuthentication.yaml
new file mode 100644
index 000000000..f04e76b6d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureAdCredentialsBasicAuthentication.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureAdCredentialsBasicAuthentication
+title: Disable basic authentication
+description: Disable basic authentication for both FTP/FTPS and for WebDeploy/SCM. This
+ disables access to these services and enforces the use of Azure AD secured endpoints
+ for deployment. Note that the SCM site can also be opened using Azure AD credentials.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 5d04c2c3-919c-4a0b-8c12-159e114b933d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/deploy-configure-credentials#disable-basic-authentication
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureContainerRegistryManagedIdentity.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureContainerRegistryManagedIdentity.yaml
new file mode 100644
index 000000000..1193f3b82
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureContainerRegistryManagedIdentity.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureContainerRegistryManagedIdentity
+title: Pull containers using a Managed Identity
+description: Where using images stored in Azure Container Registry, pull these using
+ a Managed Identity.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: d9a25827-18d2-4ddb-8072-5769ee6691a4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/configure-custom-container#use-managed-identity-to-pull-image-from-azure-container-registry
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureContainerRegistryVirtualNetwork.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureContainerRegistryVirtualNetwork.yaml
new file mode 100644
index 000000000..58e209178
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-AzureContainerRegistryVirtualNetwork.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureContainerRegistryVirtualNetwork
+title: Pull containers over a Virtual Network
+description: Where using images stored in Azure Container Registry, pull these over
+ a virtual network from Azure Container Registry using its private endpoint and the
+ app setting 'WEBSITE_PULL_IMAGE_OVER_VNET'.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 2c2de732-165c-43ac-aef4-abe1f8d39fda
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/configure-custom-container#use-an-image-from-a-network-protected-registry
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-CorsConfigurationWildcards.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-CorsConfigurationWildcards.yaml
new file mode 100644
index 000000000..2a1d85939
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-CorsConfigurationWildcards.yaml
@@ -0,0 +1,18 @@
+name: revcl-CorsConfigurationWildcards
+title: Wildcards must not be used for CORS
+description: Do not use wildcards in your CORS configuration, as this allows all origins
+ to access the service (thereby defeating the purpose of CORS). Specifically only
+ allow the origins that you expect to be able to access the service.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 68266abc-a264-4f9a-89ae-d9c55d04c2c3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-rest-api
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-DevopsDeploymentPipelineTrustedEnvironment.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-DevopsDeploymentPipelineTrustedEnvironment.yaml
new file mode 100644
index 000000000..dbfdc2ddb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-DevopsDeploymentPipelineTrustedEnvironment.yaml
@@ -0,0 +1,18 @@
+name: revcl-DevopsDeploymentPipelineTrustedEnvironment
+title: Deploy from a trusted environment
+description: Deploy code to App Service from a controlled and trusted environment,
+ like a well-managed and secured DevOps deployment pipeline. This avoids code that
+ was not version controlled and verified to be deployed from a malicious host.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 3f9bcbd4-6826-46ab-aa26-4f9a19aed9c5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/deploy-best-practices
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-HttpStrictTransportSecurityAppService.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-HttpStrictTransportSecurityAppService.yaml
new file mode 100644
index 000000000..f62c577ee
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-HttpStrictTransportSecurityAppService.yaml
@@ -0,0 +1,21 @@
+name: revcl-HttpStrictTransportSecurityAppService
+title: Use HTTPS only
+description: Configure App Service to use HTTPS only. This causes App Service to
+ redirect from HTTP to HTTPS. Strongly consider the use of HTTP Strict Transport
+ Security (HSTS) in your code or from your WAF, which informs browsers that the site
+ should only be accessed using HTTPS.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 475ba18f-dbf5-490c-b65d-e8e03f9bcbd4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-https
+queries:
+ arg: where (type=='microsoft.web/sites' and (kind == 'app' or kind == 'app,linux'
+ )) | extend compliant = (properties.httpsOnly==true) | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-IntelligentDdosStandardCapabilitiesDdosProtectionStandard.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-IntelligentDdosStandardCapabilitiesDdosProtectionStandard.yaml
new file mode 100644
index 000000000..18ba78c46
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-IntelligentDdosStandardCapabilitiesDdosProtectionStandard.yaml
@@ -0,0 +1,20 @@
+name: revcl-IntelligentDdosStandardCapabilitiesDdosProtectionStandard
+title: Enable DDOS Protection Standard on the WAF VNet
+description: Azure provides DDoS Basic protection on its network, which can be improved
+ with intelligent DDoS Standard capabilities which learns about normal traffic patterns
+ and can detect unusual behavior. DDoS Standard applies to a Virtual Network so it
+ must be configured for the network resource in front of the app, such as Application
+ Gateway or an NVA.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 223ece80-b123-4071-a541-6415833ea3ad
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-LatestVersionsDatePlatforms-1.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-LatestVersionsDatePlatforms-1.yaml
new file mode 100644
index 000000000..81b5cb6d4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-LatestVersionsDatePlatforms-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-LatestVersionsDatePlatforms-1
+title: Use up-to-date platforms, languages, protocols and frameworks
+description: Use the latest versions of supported platforms, programming languages,
+ protocols, and frameworks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 114b933d-f574-4ecc-ad9b-d3bafcda3b54
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/overview-patch-os-runtime
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MaliciousInboundTrafficWebApplicationFirewall.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MaliciousInboundTrafficWebApplicationFirewall.yaml
new file mode 100644
index 000000000..b1222b36c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MaliciousInboundTrafficWebApplicationFirewall.yaml
@@ -0,0 +1,17 @@
+name: revcl-MaliciousInboundTrafficWebApplicationFirewall
+title: Use a WAF in front of App Service
+description: Protect against malicious inbound traffic using a Web Application Firewall
+ like Application Gateway or Azure Front Door. Make sure to monitor the WAF's logs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: b123071a-5416-4415-a33e-a3ad2c2de732
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking/app-gateway-with-service-endpoints
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MaliciousIpAddressesAppService.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MaliciousIpAddressesAppService.yaml
new file mode 100644
index 000000000..8b163d372
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MaliciousIpAddressesAppService.yaml
@@ -0,0 +1,18 @@
+name: revcl-MaliciousIpAddressesAppService
+title: Enable Defender for Cloud - Defender for App Service
+description: Enable Defender for App Service. This (amongst other threats) detects
+ communications to known malicious IP addresses. Review the recommendations from
+ Defender for App Service as part of your operations.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 18d2ddb1-0725-4769-be66-91a4834ac932
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ManagedIdentityAzureAd.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ManagedIdentityAzureAd.yaml
new file mode 100644
index 000000000..7c50c2021
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ManagedIdentityAzureAd.yaml
@@ -0,0 +1,18 @@
+name: revcl-ManagedIdentityAzureAd
+title: Use Managed Identity to connect to resources
+description: Where possible use Managed Identity to connect to Azure AD secured resources. If
+ this is not possible, store secrets in Key Vault and connect to Key Vault using
+ a Managed Identity instead.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: f574eccc-d9bd-43ba-bcda-3b54eb2eb03d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/overview-managed-identity?tabs=portal%2Chttp
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MinimumTlsPolicyAppServiceConfiguration.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MinimumTlsPolicyAppServiceConfiguration.yaml
new file mode 100644
index 000000000..61d73d70d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-MinimumTlsPolicyAppServiceConfiguration.yaml
@@ -0,0 +1,18 @@
+name: revcl-MinimumTlsPolicyAppServiceConfiguration
+title: Set minimum TLS policy to 1.2
+description: Set minimum TLS policy to 1.2 in App Service configuration.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: c115775c-2ea5-45b4-9ad4-8408ee72734b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/configure-ssl-bindings#enforce-tls-versions
+queries:
+ arg: appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant
+ = (properties.MinTlsVersion>=1.2) | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-OutboundNetworkAccessRegionalVnetIntegration.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-OutboundNetworkAccessRegionalVnetIntegration.yaml
new file mode 100644
index 000000000..95d63acbe
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-OutboundNetworkAccessRegionalVnetIntegration.yaml
@@ -0,0 +1,18 @@
+name: revcl-OutboundNetworkAccessRegionalVnetIntegration
+title: Outbound network access should be controlled
+description: Control outbound network access using a combination of regional VNet
+ integration, network security groups and UDR's. Traffic should be routed to an
+ NVA such as Azure Firewall. Ensure to monitor the Firewall's logs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: c12159e1-14b9-433d-b574-ecccd9bd3baf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/overview-vnet-integration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-PenetrationTestingRulesWebApplication.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-PenetrationTestingRulesWebApplication.yaml
new file mode 100644
index 000000000..c440d72e4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-PenetrationTestingRulesWebApplication.yaml
@@ -0,0 +1,17 @@
+name: revcl-PenetrationTestingRulesWebApplication
+title: Conduct a penetration test
+description: Conduct a penetration test on the web application following the penetration
+ testing rules of engagement.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: eb2eb03d-d9a2-4582-918d-2ddb10725769
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/security/fundamentals/pen-testing
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-RemoteDebuggingAdditionalPorts.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-RemoteDebuggingAdditionalPorts.yaml
new file mode 100644
index 000000000..dd5b32287
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-RemoteDebuggingAdditionalPorts.yaml
@@ -0,0 +1,20 @@
+name: revcl-RemoteDebuggingAdditionalPorts
+title: Turn off remote debugging
+description: Remote debugging must not be turned on in production as this opens additional
+ ports on the service which increases the attack surface. Note that the service does
+ turn of remote debugging automatically after 48 hours.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: d9bd3baf-cda3-4b54-bb2e-b03dd9a25827
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/configure-common#configure-general-settings
+queries:
+ arg: appserviceresources | where type =~ 'microsoft.web/sites/config' | extend compliant
+ = (properties.RemoteDebuggingEnabled == false) | distinct id,compliant
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-SensitiveDataLocalDisk.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-SensitiveDataLocalDisk.yaml
new file mode 100644
index 000000000..61aa6d08d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-SensitiveDataLocalDisk.yaml
@@ -0,0 +1,17 @@
+name: revcl-SensitiveDataLocalDisk
+title: Do not store sensitive data on local disk
+description: 'Local disks on App Service are not encrypted and sensitive data should
+ not be stored on those. (For example: D:\\Local and %TMP%).'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: e65de8e0-3f9b-4cbd-9682-66abca264f9a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/operating-system-functionality#file-access
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-SeparateAppServicePlansAppServiceEnvironments.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-SeparateAppServicePlansAppServiceEnvironments.yaml
new file mode 100644
index 000000000..9f9847dd2
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-SeparateAppServicePlansAppServiceEnvironments.yaml
@@ -0,0 +1,18 @@
+name: revcl-SeparateAppServicePlansAppServiceEnvironments
+title: Isolate systems that process sensitive information
+description: Systems that process sensitive information should be isolated. To do
+ so, use separate App Service Plans or App Service Environments and consider the
+ use of different subscriptions or management groups.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 6ad48408-ee72-4734-a475-ba18fdbf590c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/overview-hosting-plans
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ServiceEndpointsPrivateEndpoints.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ServiceEndpointsPrivateEndpoints.yaml
new file mode 100644
index 000000000..67d44ed8e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ServiceEndpointsPrivateEndpoints.yaml
@@ -0,0 +1,17 @@
+name: revcl-ServiceEndpointsPrivateEndpoints
+title: Avoid for WAF to be bypassed
+description: Make sure the WAF cannot be bypassed by locking down access to only the
+ WAF. Use a combination of Access Restrictions, Service Endpoints and Private Endpoints.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 0
+labels:
+ guid: 165c3acb-ef4a-4be1-b8d3-9fda47768314
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features#access-restrictions
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-StableOutboundIpRangeVnetNatGateway.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-StableOutboundIpRangeVnetNatGateway.yaml
new file mode 100644
index 000000000..064e0f8b0
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-StableOutboundIpRangeVnetNatGateway.yaml
@@ -0,0 +1,22 @@
+name: revcl-StableOutboundIpRangeVnetNatGateway
+title: Ensure a stable IP for outbound communications towards internet addresses
+description: You can provide a stable outbound IP by using VNet integration and using
+ a VNet NAT Gateway or an NVA like Azure Firewall. This allows the receiving party
+ to allow-list based on IP, should that be needed. Note that for communications
+ towards Azure Services often there's no need to depend on the IP address and mechanics
+ like Service Endpoints should be used instead. (Also the use of private endpoints
+ on the receiving end avoids for SNAT to happen and provides a stable outbound IP
+ range.)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 2
+labels:
+ guid: cda3b54e-b2eb-403d-b9a2-582718d2ddb1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking/nat-gateway-integration
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ValidatedCodeTrustedCode.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ValidatedCodeTrustedCode.yaml
new file mode 100644
index 000000000..f1be0df32
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/revcl-ValidatedCodeTrustedCode.yaml
@@ -0,0 +1,17 @@
+name: revcl-ValidatedCodeTrustedCode
+title: Deploy validated code
+description: Deploy trusted code that was validated and scanned for vulnerabilities
+ according to DevSecOps practices.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 19aed9c5-5d04-4c2c-9919-ca0b2c12159e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/solution-ideas/articles/devsecops-in-azure
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServiceAppsAzureVirtualNetwork.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServiceAppsAzureVirtualNetwork.yaml
new file mode 100644
index 000000000..f304581ca
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServiceAppsAzureVirtualNetwork.yaml
@@ -0,0 +1,20 @@
+name: wafsg-AppServiceAppsAzureVirtualNetwork
+title: 'Create segmentation through isolation boundaries to contain breach: Apply
+ identity segmentation. For example, implement role-based access control (RBAC) to
+ assign specific permissions based on roles. Follow the principle of least privilege
+ to limit access rights to only what''s necessary. Also create segmentation at the
+ network level. Inject App Service apps in an Azure virtual network for isolation
+ and define network security groups (NSGs) to filter traffic.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: dbeebd4f-c94a-4060-a2ac-c523b3e64a3d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServicePlanSecurityBaselines.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServicePlanSecurityBaselines.yaml
new file mode 100644
index 000000000..d30c8a7bd
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServicePlanSecurityBaselines.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AppServicePlanSecurityBaselines
+title: 'Review security baselines: To enhance the security posture of your application
+ that''s hosted on an App Service plan, review the security baseline for App Service.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 44ba257f-d6b6-4eed-b5a1-eff3dcb027e8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServiceWebApp.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServiceWebApp.yaml
new file mode 100644
index 000000000..eb878735a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AppServiceWebApp.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AppServiceWebApp
+title: (App Service) Assign managed identities to the web app. To maintain isolation
+ boundaries, don't share or reuse identities across applications. Make sure that
+ you securely connect to your container registry if you use containers for your deployment.
+description: The application retrieves secrets from Key Vault to authenticate outward
+ communication from the application. Azure manages the identity and doesn't require
+ you to provision or rotate any secrets. You have distinct identities for granularity
+ of control. Distinct identities make revocation easy if an identity is compromised.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 14bc5ea3-400b-4bbf-9187-f0b21505173d
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureFrontDoorNetworkTraffic.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureFrontDoorNetworkTraffic.yaml
new file mode 100644
index 000000000..11cd6ad4a
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureFrontDoorNetworkTraffic.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureFrontDoorNetworkTraffic
+title: 'Control network traffic to and from the application: Don''t expose application
+ endpoints to the public internet. Instead, add a private endpoint on the web app
+ that''s placed in a dedicated subnet. Front your application with a reverse proxy
+ that communicates with that private endpoint. Consider using Application Gateway
+ or Azure Front Door for that purpose.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: e9b8f604-ff04-4eef-9949-bd6c23179186
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureKeyVaultReferencesSensitiveInformation.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureKeyVaultReferencesSensitiveInformation.yaml
new file mode 100644
index 000000000..a15de3652
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureKeyVaultReferencesSensitiveInformation.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureKeyVaultReferencesSensitiveInformation
+title: 'Protect application secrets: You need to handle sensitive information, like
+ API keys or authentication tokens. Instead of hardcoding these secrets directly
+ into your application code or configuration files, you can use Azure Key Vault references
+ in app settings. When the application starts, App Service automatically retrieves
+ the secret values from Key Vault by using the app''s managed identity.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 0545fb6c-0662-4ffd-8834-7d4d4ac7f2bb
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureStorageAccountsAzureEventHubs.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureStorageAccountsAzureEventHubs.yaml
new file mode 100644
index 000000000..313f9d313
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-AzureStorageAccountsAzureEventHubs.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureStorageAccountsAzureEventHubs
+title: (App Service plan) Enable diagnostic logging and add instrumentation to your
+ app. The logs are sent to Azure Storage accounts, Azure Event Hubs, and Log Analytics.
+ For more information about audit log types, see Supported log types.
+description: Logging captures access patterns. It records relevant events that provide
+ valuable insights into how users interact with an application or platform. This
+ information is crucial for accountability, compliance, and security purposes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 603bf106-42e6-43d3-a8e0-4470d05093b9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-ComprehensiveActivityTrailsResourceLogs.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-ComprehensiveActivityTrailsResourceLogs.yaml
new file mode 100644
index 000000000..3f5e660bf
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-ComprehensiveActivityTrailsResourceLogs.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ComprehensiveActivityTrailsResourceLogs
+title: 'Enable resource logs for your application: Enable resource logs for your application
+ to create comprehensive activity trails that provide valuable data during investigations
+ that follow security incidents.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 1c90ec2a-85e3-400e-8937-22686ac115b8
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-KeyVaultReferencesSecretRotations.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-KeyVaultReferencesSecretRotations.yaml
new file mode 100644
index 000000000..a23fbd17e
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-KeyVaultReferencesSecretRotations.yaml
@@ -0,0 +1,15 @@
+name: wafsg-KeyVaultReferencesSecretRotations
+title: (App Service) Always use Key Vault references as app settings.
+description: Secrets are kept separate from your app's configuration. App settings
+ are encrypted at rest. App Service also manages secret rotations.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 59402f53-7298-4295-b919-609d8fc73876
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-LanguageRuntimeSupportPolicyLatestRuntime.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-LanguageRuntimeSupportPolicyLatestRuntime.yaml
new file mode 100644
index 000000000..e908bd707
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-LanguageRuntimeSupportPolicyLatestRuntime.yaml
@@ -0,0 +1,18 @@
+name: wafsg-LanguageRuntimeSupportPolicyLatestRuntime
+title: 'Use the latest runtime and libraries: Thoroughly test your application builds
+ before you do updates to catch problems early and ensure a smooth transition to
+ the new version. App Service supports the language runtime support policy for updating
+ existing stacks and retiring end-of-support stacks.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 4133fafa-441c-4d27-bfd1-f76a58ab6620
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-MicrosoftEntraIdBasedAuthenticationSecureDeploymentMethod.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-MicrosoftEntraIdBasedAuthenticationSecureDeploymentMethod.yaml
new file mode 100644
index 000000000..cee0753b8
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-MicrosoftEntraIdBasedAuthenticationSecureDeploymentMethod.yaml
@@ -0,0 +1,21 @@
+name: wafsg-MicrosoftEntraIdBasedAuthenticationSecureDeploymentMethod
+title: '(App Service) To implement hardening: - Disable basic authentication that
+ uses a username and password in favor of Microsoft Entra ID-based authentication. -
+ Turn off remote debugging so that inbound ports aren''t opened. - Enable CORS policies
+ to tighten incoming requests. - Disable protocols, such as FTP.'
+description: We don't recommend basic authentication as a secure deployment method.
+ Microsoft Entra ID employs OAuth 2.0 token-based authentication, which offers numerous
+ advantages and enhancements that address the limitations that are associated with
+ basic authentication. Policies restrict access to application resources, only allow
+ requests from specific domains, and secure cross-region requests.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 78fd4f02-98f6-459c-882c-5f0d659a2251
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-MicrosoftEntraIdMultipleSignInProviders.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-MicrosoftEntraIdMultipleSignInProviders.yaml
new file mode 100644
index 000000000..a7ae26793
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-MicrosoftEntraIdMultipleSignInProviders.yaml
@@ -0,0 +1,21 @@
+name: wafsg-MicrosoftEntraIdMultipleSignInProviders
+title: (App Service) valuate whether App Service built-in authentication is the right
+ mechanism to authenticate users that access your application. App Service built-in
+ authentication integrates with Microsoft Entra ID. This feature handles token validation
+ and user identity management across multiple sign-in providers and supports OpenID
+ Connect. With this feature, you don't have authorization at a granular level, and
+ you don't have a mechanism to test authentication.
+description: When you use this feature, you don't have to use authentication libraries
+ in application code, which reduces complexity. The user is already authenticated
+ when a request reaches the application.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 8cde5bed-8dd0-4a16-ae15-0672275bd473
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-OverallSecurityPostureAccessControls.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-OverallSecurityPostureAccessControls.yaml
new file mode 100644
index 000000000..f63944c69
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-OverallSecurityPostureAccessControls.yaml
@@ -0,0 +1,18 @@
+name: wafsg-OverallSecurityPostureAccessControls
+title: 'Apply access controls on identities: Restrict both inward access to the web
+ app and outward access from the web app to other resources. This configuration applies
+ access controls on identities and helps maintain the workload''s overall security
+ posture.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 5bb8daca-fde8-45bf-82f6-e55cdb28da05
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-OverallSecurityPostureAppServicePlan.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-OverallSecurityPostureAppServicePlan.yaml
new file mode 100644
index 000000000..9ebd85552
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-OverallSecurityPostureAppServicePlan.yaml
@@ -0,0 +1,15 @@
+name: wafsg-OverallSecurityPostureAppServicePlan
+title: (App Service plan) Enable Microsoft Defender for Cloud for App Service.
+description: Get real-time protection for resources that run in an App Service plan.
+ Guard against threats and enhance your overall security posture.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: def198c3-8a34-4d8f-8e46-91b6f36064ab
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-SourceControlManagerFileTransferProtocol.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-SourceControlManagerFileTransferProtocol.yaml
new file mode 100644
index 000000000..c4dae808c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-SourceControlManagerFileTransferProtocol.yaml
@@ -0,0 +1,19 @@
+name: wafsg-SourceControlManagerFileTransferProtocol
+title: 'Reduce the attack surface: Remove default configurations that you don''t need.
+ For example, disable remote debugging, local authentication for Source Control Manager
+ (SCM) sites, and basic authentication. Disable unsecure protocols like HTTP and
+ File Transfer Protocol (FTP). Enforce configurations through Azure policies. For
+ more information, see Azure policies.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: d63a7c58-a495-4ff3-a164-88e8eac4febf
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-TransportLayerSecurityAppService.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-TransportLayerSecurityAppService.yaml
new file mode 100644
index 000000000..b768e9aeb
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-TransportLayerSecurityAppService.yaml
@@ -0,0 +1,17 @@
+name: wafsg-TransportLayerSecurityAppService
+title: (App Service) Configure custom domains for applications. Disable HTTP and
+ only accept HTTPS requests.
+description: Custom domains enable secure communication through HTTPS using Transport
+ Layer Security (TLS) protocol, which ensures the protection of sensitive data and
+ builds user trust.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: ef64b1c3-a41f-4913-8ac4-27be04d96d10
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-TransportLayerSecurityCustomerManagedKeys.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-TransportLayerSecurityCustomerManagedKeys.yaml
new file mode 100644
index 000000000..e350ddcf4
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-TransportLayerSecurityCustomerManagedKeys.yaml
@@ -0,0 +1,17 @@
+name: wafsg-TransportLayerSecurityCustomerManagedKeys
+title: 'Encrypt data: Protect data in transit with end-to-end Transport Layer Security
+ (TLS). Use your customer-managed keys for full encryption of data at rest. For more
+ information, see Encryption at rest using customer-managed keys.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/app-service-web-apps.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 4ed59aaa-9948-4387-975e-11e1fc65ff40
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-VirtualNetworkIntegrationAzureVirtualNetwork.yaml b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-VirtualNetworkIntegrationAzureVirtualNetwork.yaml
new file mode 100644
index 000000000..82f9b57e9
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/Security/wafsg-VirtualNetworkIntegrationAzureVirtualNetwork.yaml
@@ -0,0 +1,20 @@
+name: wafsg-VirtualNetworkIntegrationAzureVirtualNetwork
+title: (App Service) Configure the application for virtual network integration. Use
+ private endpoints for App Service apps. Block all public traffic. Route the container
+ image pull through the virtual network integration. All outgoing traffic from the
+ application passes through the virtual network.
+description: Get the security benefits of using an Azure virtual network. For example,
+ the application can securely access resources within the network. Add a private
+ endpoint to help protect your application. Private endpoints limit direct exposure
+ to the public network and allow controlled access through the reverse proxy.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.web/sites
+waf: Security
+severity: 1
+labels:
+ guid: 703d13a6-d768-443b-b9f9-4e31d74767f9
+links: []
+queries: {}
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureAppServiceAspNetCore.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureAppServiceAspNetCore.yaml
new file mode 100644
index 000000000..2ed772937
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureAppServiceAspNetCore.yaml
@@ -0,0 +1,20 @@
+name: aprl-AzureAppServiceAspNetCore
+title: Monitor Performance
+description: |-
+ Use Application Insights to monitor app performance and load behavior, offering real-time insights, issue diagnosis, and root-cause analysis. It supports ASP.NET, ASP.NET Core, Java, and Node.js on Azure App Service, now with built-in monitoring.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: a7e8bb3d-8ceb-442d-b26f-007cd63f9ffc
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |+
+ // cannot-be-validated-with-arg
+
+...
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureAppServiceWebServerLogging.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureAppServiceWebServerLogging.yaml
new file mode 100644
index 000000000..bfb8bd493
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureAppServiceWebServerLogging.yaml
@@ -0,0 +1,20 @@
+name: aprl-AzureAppServiceWebServerLogging
+title: Enable diagnostics logging
+description: |-
+ Enabling diagnostics logging for your Azure App Service is crucial for monitoring and diagnostics, including both application logging and web server logging.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 2
+labels:
+ guid: 493f6079-3bb6-4a56-96ba-ab3248474cb1
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |+
+ // cannot-be-validated-with-arg
+
+...
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureFunctionsRuntimeFunctionApp.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureFunctionsRuntimeFunctionApp.yaml
new file mode 100644
index 000000000..8346ef971
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-AzureFunctionsRuntimeFunctionApp.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureFunctionsRuntimeFunctionApp
+title: Ensure Function App runs a supported version
+description: |-
+ Beginning on December 13, 2022, function apps running on versions 2.x and 3.x of the Azure Functions runtime have reached the end of life (EOL) of extended support. We highly recommend you migrating your function apps to version 4.x of the Functions runtime.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: c9a278b7-024b-454b-bd54-41587c512b74
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-BadUpdateChancesPreviousGoodDeployment.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-BadUpdateChancesPreviousGoodDeployment.yaml
new file mode 100644
index 000000000..a7479041d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-BadUpdateChancesPreviousGoodDeployment.yaml
@@ -0,0 +1,31 @@
+name: aprl-BadUpdateChancesPreviousGoodDeployment
+title: Deploy to a staging slot
+description: |-
+ Create a deployment slot for staging to deploy updates, verify them, and ensure all instances are warmed up before production swap, reducing bad update chances. An LKG slot allows easy rollback to a previous good deployment if issues arise later, enhancing reliability.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 2
+labels:
+ guid: a1d91661-32d4-430b-b3b6-5adeb0975df7
+ area: Governance
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Display App Service with the count of deployment slots for Apps under eligible App service plans and it shows if deployment slot is enabled or not
+
+ resources
+ | where type =~ 'microsoft.web/sites' or type =~ 'microsoft.web/sites/slots'
+ | extend isSlot = iff(type =~ 'microsoft.web/sites/slots', 1, 0)
+ | extend AspName = iff(isSlot == 1, split(name, '/')[0], name)
+ | extend Sku = tostring(properties.sku)
+ | where tolower(Sku) contains "standard" or tolower(Sku) contains "premium" or tolower(Sku) contains "isolatedv2"
+ | project id, name, AspName, isSlot, Sku
+ | summarize Slots = countif(isSlot == 1) by id, name, AspName, Sku
+ | extend DeploymentSlotEnabled = iff(Slots > 1, true, false)
+ | where DeploymentSlotEnabled = false
+ | project recommendationId="a1d91661-32d4-430b-b3b6-5adeb0975df7", name, id, tags="", param1=Sku, param2=Slots, param3="DeploymentSlotEnabled=false"
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-FunctionAppConfigurationAppropriateValue.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-FunctionAppConfigurationAppropriateValue.yaml
new file mode 100644
index 000000000..a0f72f33b
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-FunctionAppConfigurationAppropriateValue.yaml
@@ -0,0 +1,18 @@
+name: aprl-FunctionAppConfigurationAppropriateValue
+title: Ensure FUNCTIONS_WORKER_RUNTIME is set properly
+description: |-
+ The FUNCTIONS_WORKER_RUNTIME setting in the Function App configuration should be set to the appropriate value based on the language you are using. This setting is used to determine the language worker that will be used to execute your functions.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: 7c608f46-46b2-4cc0-bbd6-1d457c16671c
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-HttpServerErrorsAutoHeal.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-HttpServerErrorsAutoHeal.yaml
new file mode 100644
index 000000000..6e6d9e2a3
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-HttpServerErrorsAutoHeal.yaml
@@ -0,0 +1,30 @@
+name: aprl-HttpServerErrorsAutoHeal
+title: Enable auto heal for Functions App
+description: |-
+ Auto Heal allows you to mitigate your apps when it runs into unexpected situations like HTTP server errors, resource exhaustion, etc. You can configure different triggers based on your need and choose to recycle the app to recover it from a bad state.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 2
+labels:
+ guid: c6c4b962-5af4-447a-9d74-7b9c53a5dff5
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Provides a list of Azure Function App resources that do not have auto heal enabled
+
+ Resources
+ | where type =~ 'microsoft.web/sites'
+ | where properties.kind contains 'functionapp'
+ | join kind=inner
+ (appserviceresources
+ | where type == "microsoft.web/sites/config"
+ | where properties.AutoHealEnabled == 'false'
+ | project id, name, tenantId, location, resourceGroup, properties.AutoHealEnabled
+ ) on name
+ | project recommendationID = "c6c4b962-5af4-447a-9d74-7b9c53a5dff5", name, id, type, kind, param1="AutoHealEnabled =false"
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-LongerWarmupTimeMinimumInstanceCount.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-LongerWarmupTimeMinimumInstanceCount.yaml
new file mode 100644
index 000000000..af54e0294
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-LongerWarmupTimeMinimumInstanceCount.yaml
@@ -0,0 +1,30 @@
+name: aprl-LongerWarmupTimeMinimumInstanceCount
+title: Set minimum instance count to 2 for app service
+description: |-
+ App Service should be configured with a minimum of two instances for production workloads. If apps have a longer warmup time a minimum of three instances should be used.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: 9e6682ac-31bc-4635-9959-ab74b52454e6
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Provides a list of App services that do not have minimum instance count of 2
+
+ resources
+ | where type =~ 'microsoft.web/sites'
+ | where properties.kind has 'app'
+ | join kind = inner
+ (
+ appserviceresources
+ | where properties.PreWarmedInstanceCount < 2
+ | project name
+ ) on name
+ | project recommendationId = "9e6682ac-31bc-4635-9959-ab74b52454e6", name, id, tags, param1 = "PreWarmedInstanceCount is less than 2"
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-PriorityOrderedAllowDenyListPublicFacingWebApplications.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-PriorityOrderedAllowDenyListPublicFacingWebApplications.yaml
new file mode 100644
index 000000000..3798f358c
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-PriorityOrderedAllowDenyListPublicFacingWebApplications.yaml
@@ -0,0 +1,31 @@
+name: aprl-PriorityOrderedAllowDenyListPublicFacingWebApplications
+title: Configure network access restrictions
+description: |-
+ Use network access restrictions to define a priority-ordered allow/deny list that controls network access to your app. Web application firewalls, such as the one available in Application Gateway, are recommended for protection of public-facing web applications.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: aab6b4a4-9981-43a4-8728-35c7ecbb746d
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Check if Network access restrictions defined for App service
+
+ resources
+ | where type =~ 'microsoft.web/sites'
+ | where properties.kind has 'app'
+ | join kind = inner
+ (
+ appserviceresources
+ | mv-expand IpSecurityRestrictions = properties.IpSecurityRestrictions
+ | where isnotnull(IpSecurityRestrictions) == true
+ | project name
+ ) on name
+ | project recommendationId = "aab6b4a4-9981-43a4-8728-35c7ecbb746d", name, id, tags, param1 = "No network restrictions set"
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-ResourceManagerTemplatesAutomatedDeploymentUpdateProcess.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-ResourceManagerTemplatesAutomatedDeploymentUpdateProcess.yaml
new file mode 100644
index 000000000..92c27e303
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-ResourceManagerTemplatesAutomatedDeploymentUpdateProcess.yaml
@@ -0,0 +1,25 @@
+name: aprl-ResourceManagerTemplatesAutomatedDeploymentUpdateProcess
+title: Store configuration as app settings
+description: |-
+ Use app settings for configuration and define them in Resource Manager templates or via PowerShell to facilitate part of an automated deployment/update process for improved reliability.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: 0b80b67c-afbe-4988-ad58-a85a146b681e
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure App Service resources that don't have App Settings configured
+
+ appserviceresources
+ | where type == "microsoft.web/sites/config"
+ | extend AppSettings = iif(isempty(properties.AppSettings), true, false)
+ | where AppSettings == false
+ | project recommendationId="0b80b67c-afbe-4988-ad58-a85a146b681e", id, name, tags="", param1="AppSettings is not configured"
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-SeparateAppServiceAppsWebFrontEnd.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-SeparateAppServiceAppsWebFrontEnd.yaml
new file mode 100644
index 000000000..a0260208d
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-SeparateAppServiceAppsWebFrontEnd.yaml
@@ -0,0 +1,18 @@
+name: aprl-SeparateAppServiceAppsWebFrontEnd
+title: Separate web apps from web APIs
+description: |-
+ If your solution includes both a web front end and a web API, decomposing them into separate App Service apps facilitates solution decomposition by workload, allowing for independent scaling. Initially, you can deploy both in the same plan and separate them for independent scaling when necessary.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 2
+labels:
+ guid: 78a5c033-ff51-4332-8a71-83464c34494b
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-SeparateStorageAccountSameOne.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-SeparateStorageAccountSameOne.yaml
new file mode 100644
index 000000000..cc0739681
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-SeparateStorageAccountSameOne.yaml
@@ -0,0 +1,18 @@
+name: aprl-SeparateStorageAccountSameOne
+title: Create a separate storage account for logs
+description: |-
+ Creating a separate storage account for logs and not using the same one for application data prevents logging activities from reducing application performance by ensuring that the resources dedicated to handling application data are not burdened by logging processes.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: 3f9ddb59-0bb3-4acb-9c9b-99aa1776f0ab
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-TheHealthCheckPathUseHealthCheck.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-TheHealthCheckPathUseHealthCheck.yaml
new file mode 100644
index 000000000..615ddef21
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-TheHealthCheckPathUseHealthCheck.yaml
@@ -0,0 +1,30 @@
+name: aprl-TheHealthCheckPathUseHealthCheck
+title: Enable Health check for App Services
+description: |-
+ Use Health Check for production workloads. Health check increases your application's availability by rerouting requests away from unhealthy instances, and replacing instances if they remain unhealthy. The Health check path should check critical components of your application.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: fd049c28-ae6d-48f0-a641-cc3ba1a3fe1d
+ area: Other Best Practices
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Check if Health Check is enabled for App Service
+
+ resources
+ | where type =~ 'microsoft.web/sites'
+ | where properties.kind has 'app'
+ | join kind = inner
+ (
+ appserviceresources
+ | where isnull(properties.HealthCheckPath) == true
+ | project name
+ ) on name
+ | project recommendationId = "fd049c28-ae6d-48f0-a641-cc3ba1a3fe1d", name, id, tags, param1 = "Healthcheckpath = not set"
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-UniqueHostidSetHostIdValue.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-UniqueHostidSetHostIdValue.yaml
new file mode 100644
index 000000000..f988fba68
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-UniqueHostidSetHostIdValue.yaml
@@ -0,0 +1,18 @@
+name: aprl-UniqueHostidSetHostIdValue
+title: Ensure unique hostid set for Function App
+description: |-
+ A host ID must be between 1 and 32 characters, contain only lowercase letters, numbers, and dashes, not start or end with a dash, and not contain consecutive dashes. The host ID value should be unique for all apps/slots you're running.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 2
+labels:
+ guid: 0b06a688-0dd6-4d73-9f72-6666ff853ca9
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/MicrosoftWeb-sites/aprl-WarmupTriggerFunctionApp.yaml b/v2/recos/Services/MicrosoftWeb-sites/aprl-WarmupTriggerFunctionApp.yaml
new file mode 100644
index 000000000..ed2e5d766
--- /dev/null
+++ b/v2/recos/Services/MicrosoftWeb-sites/aprl-WarmupTriggerFunctionApp.yaml
@@ -0,0 +1,18 @@
+name: aprl-WarmupTriggerFunctionApp
+title: No warmup trigger added to Function App
+description: |-
+ Add a warmup trigger to pre-load custom dependencies during the pre-warming process so that your functions are ready to start processing requests immediately.
+source:
+ type: aprl
+ file: azure-resources/Web/sites/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Web/sites
+severity: 1
+labels:
+ guid: 52f368ee-1d77-4b34-92db-64be269642d0
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcache-redis/Reliability/revcl-AzureCacheRedisInstance.yaml b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-AzureCacheRedisInstance.yaml
new file mode 100644
index 000000000..6d09bb8a4
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-AzureCacheRedisInstance.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureCacheRedisInstance
+title: Configure data persistence for an Azure Cache for Redis instance. Because your
+ cache data is stored in memory, a rare and unplanned failure of multiple nodes can
+ cause all the data to be dropped. To avoid losing data completely, Redis persistence
+ allows you to take periodic snapshots of in-memory data, and store it to your storage
+ account.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cache/redis
+waf: Reliability
+severity: 1
+labels:
+ guid: bc178bdc-5a06-4ca7-8443-51e19dd34429
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#persistence
+queries: {}
diff --git a/v2/recos/Services/microsoftcache-redis/Reliability/revcl-DifferentAzureAvailabilityZonesZoneRedundantCache.yaml b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-DifferentAzureAvailabilityZonesZoneRedundantCache.yaml
new file mode 100644
index 000000000..9605a4699
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-DifferentAzureAvailabilityZonesZoneRedundantCache.yaml
@@ -0,0 +1,19 @@
+name: revcl-DifferentAzureAvailabilityZonesZoneRedundantCache
+title: Enable zone redundancy for Azure Cache for Redis. Azure Cache for Redis supports
+ zone redundant configurations in the Premium and Enterprise tiers. A zone redundant
+ cache can place its nodes across different Azure Availability Zones in the same
+ region. It eliminates data center or AZ outage as a single point of failure and
+ increases the overall availability of your cache.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cache/redis
+waf: Reliability
+severity: 0
+labels:
+ guid: 65285269-440b-44be-9d3e-0844276d4bdc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-zone-redundancy
+queries: {}
diff --git a/v2/recos/Services/microsoftcache-redis/Reliability/revcl-GeoRedundantStorageAccountAzureCache.yaml b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-GeoRedundantStorageAccountAzureCache.yaml
new file mode 100644
index 000000000..34dfbe37e
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-GeoRedundantStorageAccountAzureCache.yaml
@@ -0,0 +1,16 @@
+name: revcl-GeoRedundantStorageAccountAzureCache
+title: Use Geo-redundant storage account to persist Azure Cache for Redis data, or
+ zonally redundant where geo-redundancy is not available
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cache/redis
+waf: Reliability
+severity: 1
+labels:
+ guid: eb722823-7a15-41c5-ab4e-4f1814387e5c
+links:
+- type: docs
+ url: https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-high-availability#storage-account-for-persistence
+queries: {}
diff --git a/v2/recos/Services/microsoftcache-redis/Reliability/revcl-TwoPremiumTierCacheInstancesPremiumAzureCache.yaml b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-TwoPremiumTierCacheInstancesPremiumAzureCache.yaml
new file mode 100644
index 000000000..87a6d0d7d
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/Reliability/revcl-TwoPremiumTierCacheInstancesPremiumAzureCache.yaml
@@ -0,0 +1,20 @@
+name: revcl-TwoPremiumTierCacheInstancesPremiumAzureCache
+title: Configure passive geo-replication for Premium Azure Cache for Redis instances.
+ Geo-replication is a mechanism for linking two or more Azure Cache for Redis instances,
+ typically spanning two Azure regions. Geo-replication is designed mainly for cross-region
+ disaster recovery. Two Premium tier cache instances are connected through geo-replication
+ in a way that provides reads and writes to your primary cache, and that data is
+ replicated to the secondary cache.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.cache/redis
+waf: Reliability
+severity: 1
+labels:
+ guid: a8c26c9b-32ab-45bd-bc69-98a135e33789
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-cache-for-redis/cache-how-to-geo-replication
+queries: {}
diff --git a/v2/recos/Services/microsoftcache-redis/aprl-MaintenanceWindowAzureCache.yaml b/v2/recos/Services/microsoftcache-redis/aprl-MaintenanceWindowAzureCache.yaml
new file mode 100644
index 000000000..28ae7cd20
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/aprl-MaintenanceWindowAzureCache.yaml
@@ -0,0 +1,18 @@
+name: aprl-MaintenanceWindowAzureCache
+title: Schedule updates by setting a maintenance window
+description: |-
+ Azure Cache for Redis allows for specifying maintenance windows. A maintenance window allows you to control the days and times of a week during which the VMs hosting your cache can be updated.
+source:
+ type: aprl
+ file: azure-resources/Cache/Redis/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cache/redis
+severity: 1
+labels:
+ guid: cabc1f98-c8a7-44f7-ab24-977982ef3f70
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcache-redis/aprl-MultipleAvailabilityZonesZoneRedundancy.yaml b/v2/recos/Services/microsoftcache-redis/aprl-MultipleAvailabilityZonesZoneRedundancy.yaml
new file mode 100644
index 000000000..e9bca6a9c
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/aprl-MultipleAvailabilityZonesZoneRedundancy.yaml
@@ -0,0 +1,24 @@
+name: aprl-MultipleAvailabilityZonesZoneRedundancy
+title: Enable zone redundancy for Azure Cache for Redis
+description: |-
+ Azure Cache for Redis offers zone redundancy in Premium and Enterprise tiers, using VMs across multiple Availability Zones to ensure greater resilience and availability.
+source:
+ type: aprl
+ file: azure-resources/Cache/Redis/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cache/Redis
+severity: 0
+labels:
+ guid: 5a44bd30-ae6a-4b81-9b68-dc3a8ffca4d8
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find Cache for Redis instances with one or no Zones selected
+ resources
+ | where type =~ "microsoft.cache/redis"
+ | where array_length(zones) <= 1 or isnull(zones)
+ | project recommendationId = "5a44bd30-ae6a-4b81-9b68-dc3a8ffca4d8", name, id, tags, param1 = "AvailabilityZones: Single Zone"
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcache-redis/aprl-PrivateEndpointsSecureConnection.yaml b/v2/recos/Services/microsoftcache-redis/aprl-PrivateEndpointsSecureConnection.yaml
new file mode 100644
index 000000000..d4eb285ab
--- /dev/null
+++ b/v2/recos/Services/microsoftcache-redis/aprl-PrivateEndpointsSecureConnection.yaml
@@ -0,0 +1,24 @@
+name: aprl-PrivateEndpointsSecureConnection
+title: Configure Private Endpoints
+description: |-
+ Use private endpoints for secure connection to cache via a private link, avoiding the public internet.
+source:
+ type: aprl
+ file: azure-resources/Cache/Redis/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Cache/redis
+severity: 1
+labels:
+ guid: c474fc96-4e6a-4fb0-95d0-a26b3f35933c
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Azure Redis cache services not protected by private endpoints.
+ Resources
+ | where type =~ "microsoft.cache/redis"
+ | where properties['publicNetworkAccess'] == "Enabled"
+ | project recommendationId = "c474fc96-4e6a-4fb0-95d0-a26b3f35933c", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Reliability/revcl-PrivateRegistryRegionReplication.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Reliability/revcl-PrivateRegistryRegionReplication.yaml
new file mode 100644
index 000000000..e49db787b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Reliability/revcl-PrivateRegistryRegionReplication.yaml
@@ -0,0 +1,16 @@
+name: revcl-PrivateRegistryRegionReplication
+title: If using a private registry, configure region replication to store images in
+ multiple regions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Reliability
+severity: 0
+labels:
+ guid: 3c763963-7a55-42d5-a15e-401955387e5c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-geo-replication
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AcrPullPushOperationsAcrpushRbacRoles.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AcrPullPushOperationsAcrpushRbacRoles.yaml
new file mode 100644
index 000000000..4e212ab18
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AcrPullPushOperationsAcrpushRbacRoles.yaml
@@ -0,0 +1,18 @@
+name: revcl-AcrPullPushOperationsAcrpushRbacRoles
+title: Assign AcrPull & AcrPush RBAC roles rather than granting Administrative access
+ to identity principals
+description: Disable Administrator account and assign RBAC roles to principals for
+ ACR Pull/Push operations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: 387e5ced-126c-4d13-8af5-b20c6998a646
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-roles?tabs=azure-cli
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AcrpullPushRbacAccessManagedIdentities.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AcrpullPushRbacAccessManagedIdentities.yaml
new file mode 100644
index 000000000..daef101cf
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AcrpullPushRbacAccessManagedIdentities.yaml
@@ -0,0 +1,17 @@
+name: revcl-AcrpullPushRbacAccessManagedIdentities
+title: Use Managed Identities to connect instead of Service Principals
+description: Use managed identities to secure ACRPull/Push RBAC access from client
+ applications
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: 8f42d78e-79dc-47b3-9bd2-a1a27e7a8e90
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AnonymousPullPushAccess.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AnonymousPullPushAccess.yaml
new file mode 100644
index 000000000..41d53a70f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AnonymousPullPushAccess.yaml
@@ -0,0 +1,16 @@
+name: revcl-AnonymousPullPushAccess
+title: Disable Anonymous pull access
+description: Disable anonymous pull/push access
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: e338997e-41c7-47d7-acf6-a62a1194956d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/anonymous-pull-access#configure-anonymous-pull-access
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AuditComplianceVisibilityAzureContainerRegistry.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AuditComplianceVisibilityAzureContainerRegistry.yaml
new file mode 100644
index 000000000..dbce058c6
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AuditComplianceVisibilityAzureContainerRegistry.yaml
@@ -0,0 +1,17 @@
+name: revcl-AuditComplianceVisibilityAzureContainerRegistry
+title: Enable Azure Policies for Azure Container Registry
+description: Enable audit compliance visibility by enabling Azure Policy for Azure
+ Container Registry
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: d503547c-d447-4e82-9128-a7100f1cac6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-azure-policy
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureArmAudienceTokensConditionalAccessPolicies.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureArmAudienceTokensConditionalAccessPolicies.yaml
new file mode 100644
index 000000000..bbc8691c6
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureArmAudienceTokensConditionalAccessPolicies.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureArmAudienceTokensConditionalAccessPolicies
+title: Disable Azure ARM audience tokens for authentication
+description: Only tokens with an ACR audience can be used for authentication. Used
+ when enabling Conditional access policies for ACR
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: 3a041fd3-2947-498b-8288-b3c6a56ceb54
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-enable-conditional-access-policy
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistryContainerImages.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistryContainerImages.yaml
new file mode 100644
index 000000000..71286245f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistryContainerImages.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureContainerRegistryContainerImages
+title: Enable Defender for Containers to scan Azure Container Registry for vulnerabilities
+description: Azure Defender for containers or equivalent service should be used to
+ scan container images for vulnerabilities
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 2
+labels:
+ guid: bad37dac-43bc-46ce-8d7a-a9b24604489a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-introduction
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistryImageExportImageImport.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistryImageExportImageImport.yaml
new file mode 100644
index 000000000..0df2ae366
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistryImageExportImageImport.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureContainerRegistryImageExportImageImport
+title: Disable Azure Container Registry image export
+description: Disable image export to prevent data exfiltration. Note that this will
+ prevent image import of images into another ACR instance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: ab91932c-9fc9-4d1b-a880-37f5e6bfcb9e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/data-loss-prevention
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistrySkuAcrPremiumSku.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistrySkuAcrPremiumSku.yaml
new file mode 100644
index 000000000..8e17a89cb
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-AzureContainerRegistrySkuAcrPremiumSku.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureContainerRegistrySkuAcrPremiumSku
+title: Use an Azure Container Registry SKU that supports Private Link (Premium SKU)
+description: Only the ACR Premium SKU supports Private Link access
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: fc833934-8b26-42d6-ac5f-512925498f6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-skus
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ContainerImagesTrustedCode.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ContainerImagesTrustedCode.yaml
new file mode 100644
index 000000000..bcb992303
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ContainerImagesTrustedCode.yaml
@@ -0,0 +1,15 @@
+name: revcl-ContainerImagesTrustedCode
+title: Deploy validated container images
+description: Deploy trusted code that was validated and scanned for vulnerabilities
+ according to DevSecOps practices.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: 4451e1a2-d345-4293-a763-9637a551c5c0
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-CustomerManagedKeyAdditionalEncryptionLayer.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-CustomerManagedKeyAdditionalEncryptionLayer.yaml
new file mode 100644
index 000000000..62af7dd05
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-CustomerManagedKeyAdditionalEncryptionLayer.yaml
@@ -0,0 +1,19 @@
+name: revcl-CustomerManagedKeyAdditionalEncryptionLayer
+title: Encrypt registry with a customer managed key
+description: Azure Container Registry automatically encrypts images and other artifacts
+ that you store. By default, Azure automatically encrypts the registry content at
+ rest by using service-managed keys. By using a customer-managed key, you can supplement
+ default encryption with an additional encryption layer.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: 0bd05dc2-efd5-4d76-8d41-d2500cc47b49
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/tutorial-customer-managed-keys
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-DiagnosticSettingLogAnalytics.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-DiagnosticSettingLogAnalytics.yaml
new file mode 100644
index 000000000..960b6ab65
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-DiagnosticSettingLogAnalytics.yaml
@@ -0,0 +1,18 @@
+name: revcl-DiagnosticSettingLogAnalytics
+title: Enable diagnostics logging
+description: Set up a diagnostic setting to send 'repositoryEvents' & 'LoginEvents'
+ to Log Analytics as the central destination for logging and monitoring. This allows
+ you to monitor control plane activity on the ACR resource itself.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: 8a488cde-c486-42bc-9bd2-1be77f26e5e6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/monitor-service
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ImagesVulnerabilities.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ImagesVulnerabilities.yaml
new file mode 100644
index 000000000..ca12adf9a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ImagesVulnerabilities.yaml
@@ -0,0 +1,15 @@
+name: revcl-ImagesVulnerabilities
+title: Scan your images for vulnerabilities
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: 59bce65d-e8a0-43f9-9879-468d66a786d6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/security-center/container-security
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-LatestVersionsDatePlatforms.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-LatestVersionsDatePlatforms.yaml
new file mode 100644
index 000000000..8d054ab60
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-LatestVersionsDatePlatforms.yaml
@@ -0,0 +1,15 @@
+name: revcl-LatestVersionsDatePlatforms
+title: Use up-to-date platforms, languages, protocols and frameworks
+description: Use the latest versions of supported platforms, programming languages,
+ protocols, and frameworks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: 4e401955-387e-45ce-b126-cd132af5b20c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ManagementPlaneAccessRbacBasedAccessMethods.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ManagementPlaneAccessRbacBasedAccessMethods.yaml
new file mode 100644
index 000000000..07bd6333d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ManagementPlaneAccessRbacBasedAccessMethods.yaml
@@ -0,0 +1,17 @@
+name: revcl-ManagementPlaneAccessRbacBasedAccessMethods
+title: Disable local authentication for management plane access
+description: The local Administrator account is disabled by default and should not
+ be enabled. Use either Token or RBAC-based access methods instead
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: be0e38ce-e297-411b-b363-caaab79b198d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-authentication-managed-identity
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-PublicNetworkAccessInboundNetworkAccess.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-PublicNetworkAccessInboundNetworkAccess.yaml
new file mode 100644
index 000000000..ecdaae48a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-PublicNetworkAccessInboundNetworkAccess.yaml
@@ -0,0 +1,17 @@
+name: revcl-PublicNetworkAccessInboundNetworkAccess
+title: Disable Public Network access
+description: Disable public network access if inbound network access is secured using
+ Private Link
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: cd289ced-6b17-4db8-8554-62f2aee4553a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-access-selected-networks#disable-public-network-access
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-RepositoryScopedAccessTokensAadPrincipal.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-RepositoryScopedAccessTokensAadPrincipal.yaml
new file mode 100644
index 000000000..3c864dd2f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-RepositoryScopedAccessTokensAadPrincipal.yaml
@@ -0,0 +1,17 @@
+name: revcl-RepositoryScopedAccessTokensAadPrincipal
+title: Disable repository-scoped access tokens
+description: Token authentication doesn't support assignment to an AAD principal.
+ Any tokens provided are able to be used by anyone who can access the token
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: 698dc3a2-fd27-4b2e-8870-1a1252beedf6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-authentication?tabs=azure-cli
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ServiceLevelIpAclFilteringRuleDisablePublicNetworkAccessToggle.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ServiceLevelIpAclFilteringRuleDisablePublicNetworkAccessToggle.yaml
new file mode 100644
index 000000000..3ff99508e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-ServiceLevelIpAclFilteringRuleDisablePublicNetworkAccessToggle.yaml
@@ -0,0 +1,18 @@
+name: revcl-ServiceLevelIpAclFilteringRuleDisablePublicNetworkAccessToggle
+title: Control inbound network access with Private Link
+description: Service supports disabling public network access either through using
+ service-level IP ACL filtering rule (not NSG or Azure Firewall) or using a 'Disable
+ Public Network Access' toggle switch
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 1
+labels:
+ guid: 21d41d25-00b7-407a-b9ea-b40fd3290798
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-private-link
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-TheAzureKeyVaultTheAzureContainerRegistry.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-TheAzureKeyVaultTheAzureContainerRegistry.yaml
new file mode 100644
index 000000000..ee81d3d6a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-TheAzureKeyVaultTheAzureContainerRegistry.yaml
@@ -0,0 +1,19 @@
+name: revcl-TheAzureKeyVaultTheAzureContainerRegistry
+title: Sign and Verify containers with notation (Notary v2)
+description: The Azure Key Vault (AKV) is used to store a signing key that can be
+ utilized by?notation?with the notation AKV plugin (azure-kv) to sign and verify
+ container images and other artifacts. The Azure Container Registry (ACR) allows
+ you to attach these signatures using the?az?or?oras?CLI commands.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: d345293c-7639-4637-a551-c5c04e401955
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-TrustedEnvironmentPrivateEndpoint.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-TrustedEnvironmentPrivateEndpoint.yaml
new file mode 100644
index 000000000..7fb48f34d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/Security/revcl-TrustedEnvironmentPrivateEndpoint.yaml
@@ -0,0 +1,15 @@
+name: revcl-TrustedEnvironmentPrivateEndpoint
+title: Deploy images from a trusted environment
+description: Deploy container images to an ACR behind a Private endpoint within a
+ trusted network
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerregistry/registries
+waf: Security
+severity: 0
+labels:
+ guid: b3bec3d4-f343-47c1-936d-b55f27a71eee
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistriesDiagnosticSettings.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistriesDiagnosticSettings.yaml
new file mode 100644
index 000000000..5792e9587
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistriesDiagnosticSettings.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureContainerRegistriesDiagnosticSettings
+title: Configure Diagnostic Settings for all Azure Container Registries
+description: |-
+ Resource Logs are not collected and stored until you create a diagnostic setting and route them to one or more locations.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 1
+labels:
+ guid: 44107155-7a32-9348-89f3-d5aa7e7c5a1d
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryAnonymousPullAccess.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryAnonymousPullAccess.yaml
new file mode 100644
index 000000000..f1b5ae3de
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryAnonymousPullAccess.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureContainerRegistryAnonymousPullAccess
+title: Disable anonymous pull access
+description: |-
+ By default, Azure container registry requires authentication for pull/push actions. Enabling anonymous pull access exposes all content for public read actions. This applies to all repositories, potentially allowing unrestricted access if repository-scoped tokens are used.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 1
+labels:
+ guid: 03f4a7d8-c5b4-7842-8e6e-14997a34842b
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Container Registries that have anonymous pull access enabled
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | where properties.anonymousPullEnabled == "true"
+ | project recommendationId = "03f4a7d8-c5b4-7842-8e6e-14997a34842b", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryCriticalProductionWorkloads.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryCriticalProductionWorkloads.yaml
new file mode 100644
index 000000000..8bfb60d98
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryCriticalProductionWorkloads.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureContainerRegistryCriticalProductionWorkloads
+title: Use Premium tier for critical production workloads
+description: |-
+ Choose a service tier of Azure Container Registry to meet your performance needs. Premium offers the most bandwidth and highest rate of read and write operations for high-volume deployments. Use Basic to start, Standard for production, and Premium for hyper-scale performance and geo-replication.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 0
+labels:
+ guid: eb005943-40a8-194b-9db2-474d430046b7
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Container Registries that are not using the Premium tier
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | where sku.name != "Premium"
+ | project recommendationId = "eb005943-40a8-194b-9db2-474d430046b7", name, id, tags, param1=strcat("SkuName: ", tostring(sku.name))
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryFullStackMonitoringService.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryFullStackMonitoringService.yaml
new file mode 100644
index 000000000..5d8930949
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryFullStackMonitoringService.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureContainerRegistryFullStackMonitoringService
+title: Monitor Azure Container Registry with Azure Monitor
+description: |-
+ Monitoring Azure resources using Azure Monitor enhances their availability, performance, and operation. Azure Container Registry, a full-stack monitoring service, provides features for Azure and other cloud and on-premises resources.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 1
+labels:
+ guid: d594cde6-4116-d143-a64a-25f63289a2f8
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryOptionalZoneRedundancy.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryOptionalZoneRedundancy.yaml
new file mode 100644
index 000000000..6d531709d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryOptionalZoneRedundancy.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureContainerRegistryOptionalZoneRedundancy
+title: Enable zone redundancy
+description: |-
+ Azure Container Registry's optional zone redundancy enhances resiliency and high availability for registries or replication resources in a specific region by distributing resources across multiple zones.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 0
+labels:
+ guid: 63491f70-22e4-3b4a-8b0c-845450e46fac
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Container Registries that do not have zone redundancy enabled
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | where properties.zoneRedundancy != "Enabled"
+ | project recommendationId = "63491f70-22e4-3b4a-8b0c-845450e46fac", name, id, tags, param1=strcat("zoneRedundancy: ", tostring(properties.zoneRedundancy))
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryRegistrySize.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryRegistrySize.yaml
new file mode 100644
index 000000000..eec496e9f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistryRegistrySize.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureContainerRegistryRegistrySize
+title: Manage registry size
+description: |-
+ The storage constraints of Azure Container Registry's service tiers align with usage scenarios: Basic for starters, Standard for production, and Premium for high-scale performance and geo-replication.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 1
+labels:
+ guid: 3ef86f16-f65b-c645-9901-7830d6dc3a1b
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Container Registries that have their retention policy disabled
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | where properties.policies.retentionPolicy.status == "disabled"
+ | project recommendationId = "3ef86f16-f65b-c645-9901-7830d6dc3a1b", name, id, tags, param1='retentionPolicy:disabled'
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistrySoftDeletePolicy.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistrySoftDeletePolicy.yaml
new file mode 100644
index 000000000..d81ecfd29
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-AzureContainerRegistrySoftDeletePolicy.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureContainerRegistrySoftDeletePolicy
+title: Enable soft delete policy
+description: |-
+ Enabling soft delete in Azure Container Registry (ACR) allows for the management of deleted artifacts with a specified retention period. Users can list, filter, and restore these artifacts until automatically purged post-retention.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 1
+labels:
+ guid: e7f0fd54-fba0-054e-9ab8-e676f2851f88
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of Azure Container Registry resources that do not have soft delete enabled
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | where properties.policies.softDeletePolicy.status == "disabled"
+ | project recommendationId = "e7f0fd54-fba0-054e-9ab8-e676f2851f88", name, id, tags
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-LocalDataCentersDistributedDevelopmentTeams.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-LocalDataCentersDistributedDevelopmentTeams.yaml
new file mode 100644
index 000000000..2becd4754
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-LocalDataCentersDistributedDevelopmentTeams.yaml
@@ -0,0 +1,32 @@
+name: aprl-LocalDataCentersDistributedDevelopmentTeams
+title: Enable geo-replication
+description: |-
+ Use Azure Container Registry's geo-replication for multi-region deployments to simplify registry management and minimize latency. It enables serving global customers from local data centers and supports distributed development teams. Regional webhooks can notify of events in replicas.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 0
+labels:
+ guid: 36ea6c09-ef6e-d743-9cfb-bd0c928a430b
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Container Registries that do not have geo-replication enabled
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | project registryName = name, registryId = id, tags, primaryRegion = location
+ | join kind=leftouter (
+ Resources
+ | where type =~ "microsoft.containerregistry/registries/replications"
+ | project replicationRegion=name, replicationId = id
+ | extend registryId=strcat_array(array_slice(split(replicationId, '/'), 0, -3), '/')
+ ) on registryId
+ | project-away registryId1, replicationId
+ | where isempty(replicationRegion)
+ | project recommendationId = "36ea6c09-ef6e-d743-9cfb-bd0c928a430b", name=registryName, id=registryId, tags
+ | order by id asc
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-MoveContainerRegistryDedicatedResourceGroup.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-MoveContainerRegistryDedicatedResourceGroup.yaml
new file mode 100644
index 000000000..577afd241
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-MoveContainerRegistryDedicatedResourceGroup.yaml
@@ -0,0 +1,29 @@
+name: aprl-MoveContainerRegistryDedicatedResourceGroup
+title: Move Container Registry to a dedicated resource group
+description: |-
+ Container registries, used across multiple hosts, should be in their own resource group to prevent accidental deletion of images when container instances are deleted, preserving the image collection while experimenting with hosts.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 2
+labels:
+ guid: 8e389532-5db5-7e4c-9d4d-443b3e55ae82
+ area: Governance
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // List container registries that contain additional resources within the same resource group.
+ resources
+ | where type =~ "microsoft.containerregistry/registries"
+ | project registryName=name, registryId=id, registryTags=tags, resourceGroupId=strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup), resourceGroup, subscriptionId
+ | join kind=inner (
+ resources
+ | where not(type =~ "microsoft.containerregistry/registries")
+ | summarize recourceCount=count() by subscriptionId, resourceGroup
+ | where recourceCount != 0
+ ) on resourceGroup, subscriptionId
+ | project recommendationId = "8e389532-5db5-7e4c-9d4d-443b3e55ae82", name=registryName, id=registryId, tags=registryTags, param1=strcat('resourceGroupName:',resourceGroup), param2=strcat('resourceGroupId:',resourceGroupId)
diff --git a/v2/recos/Services/microsoftcontainerregistry-registries/aprl-SingleRegistryMultipleGroups.yaml b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-SingleRegistryMultipleGroups.yaml
new file mode 100644
index 000000000..634edb86f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerregistry-registries/aprl-SingleRegistryMultipleGroups.yaml
@@ -0,0 +1,18 @@
+name: aprl-SingleRegistryMultipleGroups
+title: Use Repository namespaces
+description: |-
+ Using repository namespaces allows a single registry to be shared across multiple groups and deployments within an organization, supporting nested namespaces for group isolation. However, repositories are managed independently, not hierarchically.
+source:
+ type: aprl
+ file: azure-resources/ContainerRegistry/registries/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerRegistry/registries
+severity: 2
+labels:
+ guid: a5a0101a-a240-8742-90ba-81dbde9a0c0c
+ area: Security
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-AksAutoscalerClustersUsage.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-AksAutoscalerClustersUsage.yaml
new file mode 100644
index 000000000..deeae1e58
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-AksAutoscalerClustersUsage.yaml
@@ -0,0 +1,16 @@
+name: revcl-AksAutoscalerClustersUsage
+title: Use AKS autoscaler to match your clusters usage (make sure the pods requirements
+ match the scaler)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: c1b1cd52-1e54-4a29-a9de-39ac0e7c28dc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/cross-region-replication-azure
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-DevTestClusterNodepoolStart.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-DevTestClusterNodepoolStart.yaml
new file mode 100644
index 000000000..dcd864bd8
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-DevTestClusterNodepoolStart.yaml
@@ -0,0 +1,15 @@
+name: revcl-DevTestClusterNodepoolStart
+title: If running a Dev/Test cluster use NodePool Start/Stop
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 2
+labels:
+ guid: 2b72a08b-0410-4cd6-9093-e068a5cf27e8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/start-stop-nodepools
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-ExternalApplicationDifferentUsers.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-ExternalApplicationDifferentUsers.yaml
new file mode 100644
index 000000000..11fa0d7e7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-ExternalApplicationDifferentUsers.yaml
@@ -0,0 +1,16 @@
+name: revcl-ExternalApplicationDifferentUsers
+title: Use an external application such as kubecost to allocate costs to different
+ users
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 2
+labels:
+ guid: f82cb8eb-8c0a-4a63-a25a-4956eaa8dc4a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/aks/eslz-cost-governance-with-kubecost
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-MultiInstancePartitioningGpuAksClusters.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-MultiInstancePartitioningGpuAksClusters.yaml
new file mode 100644
index 000000000..6d3c874f4
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-MultiInstancePartitioningGpuAksClusters.yaml
@@ -0,0 +1,15 @@
+name: revcl-MultiInstancePartitioningGpuAksClusters
+title: When required use multi-instance partitioning GPU on AKS Clusters
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 87e651ea-bc4a-4a87-a6df-c06a4b570ebc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/gpu-multi-instance
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-NodepoolSnapshots.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-NodepoolSnapshots.yaml
new file mode 100644
index 000000000..374559a6d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-NodepoolSnapshots.yaml
@@ -0,0 +1,15 @@
+name: revcl-NodepoolSnapshots
+title: If required use nodePool snapshots
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 2
+labels:
+ guid: 64d1a846-e28a-4b6b-9a33-22a635c15a21
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/node-pool-snapshot
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-ScaleMode.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-ScaleMode.yaml
new file mode 100644
index 000000000..97058c623
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/revcl-ScaleMode.yaml
@@ -0,0 +1,15 @@
+name: revcl-ScaleMode
+title: Use scale down mode to delete/deallocate nodes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 2
+labels:
+ guid: 4d3dfbab-9924-4831-a68d-fdf0d72f462c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/scale-down-mode
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AppropriateManagedDiskTierWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AppropriateManagedDiskTierWorkloadArchitectures.yaml
new file mode 100644
index 000000000..50a98455c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AppropriateManagedDiskTierWorkloadArchitectures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AppropriateManagedDiskTierWorkloadArchitectures
+title: 'Cluster and workload architectures: Use appropriate managed disk tier and
+ size.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 9cd3e427-64d5-48e8-aa6a-dfa7a473512c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AppropriateVmSkuClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AppropriateVmSkuClusterArchitecture.yaml
new file mode 100644
index 000000000..7d0fd44fc
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AppropriateVmSkuClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AppropriateVmSkuClusterArchitecture
+title: 'Cluster architecture: Use appropriate VM SKU per node pool and reserved instances
+ where long-term capacity is expected.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: ec710c29-e6c0-4675-b051-73fc3a0010d7
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ArmUbuntuAgentNodesArmArchitectureNodes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ArmUbuntuAgentNodesArmArchitectureNodes.yaml
new file mode 100644
index 000000000..875597dfc
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ArmUbuntuAgentNodesArmArchitectureNodes.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ArmUbuntuAgentNodesArmArchitectureNodes
+title: 'Cluster architecture: Select virtual machines based on the Arm architecture.'
+description: AKS supports creating ARM64 Ubuntu agent nodes, as well as a of mix Intel
+ and ARM architecture nodes within a cluster that can bring better performance at
+ a lower cost.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 620cb68e-2005-464b-90d3-0e767babcfcd
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureManagedGrafanaContainerInsights.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureManagedGrafanaContainerInsights.yaml
new file mode 100644
index 000000000..b69d42f39
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureManagedGrafanaContainerInsights.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureManagedGrafanaContainerInsights
+title: 'Cluster architecture: Configure monitoring of cluster with Container insights.'
+description: Container insights help provides actionable insights into your clusters
+ idle and unallocated resources. Container insights also supports collecting Prometheus
+ metrics and integrates with Azure Managed Grafana to get a holistic view of your
+ application and infrastructure.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 3c328ad3-02b3-4b44-b833-e8e0edcf8fd8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureSavingsPlanAzureReservations.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureSavingsPlanAzureReservations.yaml
new file mode 100644
index 000000000..5d6e43f51
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureSavingsPlanAzureReservations.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureSavingsPlanAzureReservations
+title: 'Cluster architecture: Sign up for Azure Reservations or Azure Savings Plan.'
+description: If you properly planned for capacity, your workload is predictable and
+ exists for an extended period of time, sign up for an Azure Reservation or a savings
+ plan to further reduce your resource costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 8b20a125-f425-42b9-9636-128941325958
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureSpotVirtualMachinesUnutilizedAzureCapacity.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureSpotVirtualMachinesUnutilizedAzureCapacity.yaml
new file mode 100644
index 000000000..f28a3d46e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-AzureSpotVirtualMachinesUnutilizedAzureCapacity.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureSpotVirtualMachinesUnutilizedAzureCapacity
+title: 'Cluster architecture: Select Azure Spot Virtual Machines.'
+description: Spot VMs allow you to take advantage of unutilized Azure capacity with
+ significant discounts (up to 90% as compared to pay-as-you-go prices). If Azure
+ needs capacity back, the Azure infrastructure evicts the Spot nodes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 357e61fe-86e6-41c6-b446-3f0def6d8bcf
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostAnalysisClusterExtensionAksCostAnalysis.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostAnalysisClusterExtensionAksCostAnalysis.yaml
new file mode 100644
index 000000000..f79abfe2f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostAnalysisClusterExtensionAksCostAnalysis.yaml
@@ -0,0 +1,15 @@
+name: wafsg-CostAnalysisClusterExtensionAksCostAnalysis
+title: 'Cluster architecture: Configure the AKS Cost Analysis add-on.'
+description: The cost analysis cluster extension enables you to obtain granular insight
+ into costs associated with various Kubernetes resources in your clusters or namespaces.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 1104dc91-14f0-4330-ac7d-fa85039a0802
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostOptimizationOpportunitiesPerformanceMetrics.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostOptimizationOpportunitiesPerformanceMetrics.yaml
new file mode 100644
index 000000000..675d3d76c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostOptimizationOpportunitiesPerformanceMetrics.yaml
@@ -0,0 +1,17 @@
+name: wafsg-CostOptimizationOpportunitiesPerformanceMetrics
+title: 'Cluster architecture: Review performance metrics, starting with CPU, memory,
+ storage, and network, to identify cost optimization opportunities by cluster, nodes,
+ and namespace.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: aa2243d7-e30a-4963-b569-a93bf2660bb2
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostSavingGoalsCloudFinancialDiscipline.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostSavingGoalsCloudFinancialDiscipline.yaml
new file mode 100644
index 000000000..ea0a058c0
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-CostSavingGoalsCloudFinancialDiscipline.yaml
@@ -0,0 +1,19 @@
+name: wafsg-CostSavingGoalsCloudFinancialDiscipline
+title: 'Cluster and workload architectures: Adopt a cloud financial discipline and
+ cultural practice to drive ownership of cloud usage.'
+description: The foundation of enabling cost optimization is the spread of a cost
+ saving cluster. A financial operations approach (FinOps) is often used to help organizations
+ reduce cloud costs. It is a practice involving collaboration between finance, operations,
+ and engineering teams to drive alignment on cost saving goals and bring transparency
+ to cloud costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 7bf19a02-eeec-4611-b559-f5cef964cc63
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ExcessResourceCapacityClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ExcessResourceCapacityClusterArchitecture.yaml
new file mode 100644
index 000000000..a53b0098e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ExcessResourceCapacityClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ExcessResourceCapacityClusterArchitecture
+title: 'Cluster architecture: Enable Cluster Autoscaler to automatically reduce the
+ number of agent nodes in response to excess resource capacity.'
+description: Automatically scaling down the number of nodes in your AKS cluster lets
+ you run an efficient cluster when demand is low and scale up when demand returns.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 330a0b20-69f1-44b9-9b9e-907e8e1bf5ca
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ExtraNetworkingChargesClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ExtraNetworkingChargesClusterArchitecture.yaml
new file mode 100644
index 000000000..563238608
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-ExtraNetworkingChargesClusterArchitecture.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExtraNetworkingChargesClusterArchitecture
+title: 'Cluster architecture: Select the appropriate region.'
+description: Due to many factors, cost of resources varies per region in Azure. Evaluate
+ the cost, latency, and compliance requirements to ensure you are running your workload
+ cost-effectively and it doesn't affect your end-users or create extra networking
+ charges.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: ddb71774-895b-4149-9e0c-e348a9829df5
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-HorizontalPodAutoscalerOtherSelectMetrics.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-HorizontalPodAutoscalerOtherSelectMetrics.yaml
new file mode 100644
index 000000000..7485ddc32
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-HorizontalPodAutoscalerOtherSelectMetrics.yaml
@@ -0,0 +1,15 @@
+name: wafsg-HorizontalPodAutoscalerOtherSelectMetrics
+title: 'Workload architecture: Use the Horizontal Pod Autoscaler.'
+description: Adjust the number of pods in a deployment depending on CPU utilization
+ or other select metrics, which support cluster scale-in operations.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 18dfc1c5-f5e8-4c89-9805-af9dd82f595d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-KubernetesEventDrivenAutoscalingKedaScalers.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-KubernetesEventDrivenAutoscalingKedaScalers.yaml
new file mode 100644
index 000000000..eaa6124ec
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-KubernetesEventDrivenAutoscalingKedaScalers.yaml
@@ -0,0 +1,15 @@
+name: wafsg-KubernetesEventDrivenAutoscalingKedaScalers
+title: 'Workload architecture: Use Kubernetes Event Driven Autoscaling (KEDA).'
+description: Scale based on the number of events being processed. Choose from a rich
+ catalogue of 50+ KEDA scalers.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: afad2446-229b-4b5c-89fc-33e0a1ffdf05
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-PendingPodResourceRequirementsVmSkuSelection.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-PendingPodResourceRequirementsVmSkuSelection.yaml
new file mode 100644
index 000000000..6f60f6db9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-PendingPodResourceRequirementsVmSkuSelection.yaml
@@ -0,0 +1,16 @@
+name: wafsg-PendingPodResourceRequirementsVmSkuSelection
+title: 'Cluster architecture: Enable Node Autoprovision to automate VM SKU selection.'
+description: Node Autoprovision simplifies the SKU selection process and decides,
+ based on pending pod resource requirements, the optimal VM configuration to run
+ workloads in the most efficient and cost effective manner.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 479e3bcb-48bb-4f49-a449-d67df3a82c1e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-RightVirtualMachineInstanceTypeHighPerformanceInstance.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-RightVirtualMachineInstanceTypeHighPerformanceInstance.yaml
new file mode 100644
index 000000000..05afbbdea
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-RightVirtualMachineInstanceTypeHighPerformanceInstance.yaml
@@ -0,0 +1,19 @@
+name: wafsg-RightVirtualMachineInstanceTypeHighPerformanceInstance
+title: 'Cluster architecture: Select the right virtual machine instance type.'
+description: Selecting the right virtual machine instance type is critical as it directly
+ impacts the cost of running applications on AKS. Choosing a high-performance instance
+ without proper utilization can lead to wasteful spending, while choosing a powerful
+ instance can lead to performance issues and increased downtime. To determine the
+ right virtual machine instance type, consider workload characteristics, resource
+ requirements, and availability needs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 45c1b3bf-8e01-4337-984d-e8b03a969e4c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-UserRequestFailuresWorkloadArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-UserRequestFailuresWorkloadArchitecture.yaml
new file mode 100644
index 000000000..cf9778d65
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-UserRequestFailuresWorkloadArchitecture.yaml
@@ -0,0 +1,17 @@
+name: wafsg-UserRequestFailuresWorkloadArchitecture
+title: 'Workload architecture: Maintain small and optimized images.'
+description: Streamlining your images helps reduce costs since new nodes need to download
+ these images. Build images in a way that allows the container start as soon as possible
+ to help avoid user request failures or timeouts while the application is starting
+ up, potentially leading to overprovisioning.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: d6b9a1b1-66b9-4f32-9269-4dba8ff3691d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-VerticalPodAutoscalerWorkloadArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-VerticalPodAutoscalerWorkloadArchitecture.yaml
new file mode 100644
index 000000000..bcd83df88
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-VerticalPodAutoscalerWorkloadArchitecture.yaml
@@ -0,0 +1,15 @@
+name: wafsg-VerticalPodAutoscalerWorkloadArchitecture
+title: 'Workload architecture: Use Vertical Pod Autoscaler (preview).'
+description: Rightsize your pods and dynamically set requests and limits based on
+ historic usage.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: ff159e4c-281f-4c30-aa1c-819ce3c94aad
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-WorkloadArchitectureCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-WorkloadArchitectureCluster.yaml
new file mode 100644
index 000000000..eec4873a0
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-WorkloadArchitectureCluster.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WorkloadArchitectureCluster
+title: 'Cluster and workload architecture: Use autoscalers to scale in when workloads
+ are less active.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: d917bb41-11ca-4487-a354-abad918096e6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-WorkloadArchitecturesDiskSize.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-WorkloadArchitecturesDiskSize.yaml
new file mode 100644
index 000000000..22a7abf70
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Cost/wafsg-WorkloadArchitecturesDiskSize.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WorkloadArchitecturesDiskSize
+title: 'Cluster and workload architectures: Align SKU selection and managed disk size
+ with workload requirements.'
+description: Matching your selection to your workload demands ensures you don't pay
+ for unneeded resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Cost
+severity: 1
+labels:
+ guid: 60822342-a88f-4260-a595-c5919386bbdd
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksAutoCertificateRotation.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksAutoCertificateRotation.yaml
new file mode 100644
index 000000000..3bd55080d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksAutoCertificateRotation.yaml
@@ -0,0 +1,15 @@
+name: revcl-AksAutoCertificateRotation
+title: Enable AKS auto-certificate rotation
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 3aa70560-e7e7-4968-be3d-628af35b2ced
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/certificate-rotation
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksAutoupgradeFeatureRegularProcess.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksAutoupgradeFeatureRegularProcess.yaml
new file mode 100644
index 000000000..5af85d65b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksAutoupgradeFeatureRegularProcess.yaml
@@ -0,0 +1,16 @@
+name: revcl-AksAutoupgradeFeatureRegularProcess
+title: Have a regular process to upgrade your kubernetes version periodically (quarterly,
+ for example), or use the AKS autoupgrade feature
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: e189c599-df0d-45a7-9dd4-ce32c1881370
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/supported-kubernetes-versions
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksCommandPrivateClusters.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksCommandPrivateClusters.yaml
new file mode 100644
index 000000000..fafc094f3
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksCommandPrivateClusters.yaml
@@ -0,0 +1,15 @@
+name: revcl-AksCommandPrivateClusters
+title: Consider using AKS command invoke on private clusters
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: d7672c26-7602-4482-85a4-14527fbe855c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/command-invoke
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksVirtualNodeQuickBursting.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksVirtualNodeQuickBursting.yaml
new file mode 100644
index 000000000..2cd10c863
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AksVirtualNodeQuickBursting.yaml
@@ -0,0 +1,18 @@
+name: revcl-AksVirtualNodeQuickBursting
+title: Consider AKS virtual node for quick bursting
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: c755562f-2b4e-4456-9b4d-874a748b662e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/concepts-scale
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (isnotnull(properties.addonProfiles.aciConnectorLinux) and properties.addonProfiles.aciConnectorLinux.enabled==true)
+ | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AzureAdvisorRecommendations.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AzureAdvisorRecommendations.yaml
new file mode 100644
index 000000000..555d5154f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AzureAdvisorRecommendations.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureAdvisorRecommendations
+title: Check regularly Azure Advisor for recommendations on your cluster
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 337453a3-cc63-4963-9a65-22ac19e80696
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/advisor/advisor-get-started
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AzureCniPodIps.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AzureCniPodIps.yaml
new file mode 100644
index 000000000..5dc5b4524
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-AzureCniPodIps.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureCniPodIps
+title: If using Azure CNI, monitor % of pod IPs consumed per node
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 1a4835ac-9422-423e-ae80-b123081a5417
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/configure-azure-cni
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterConfigurationMultipleClusters.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterConfigurationMultipleClusters.yaml
new file mode 100644
index 000000000..d884f443c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterConfigurationMultipleClusters.yaml
@@ -0,0 +1,16 @@
+name: revcl-ClusterConfigurationMultipleClusters
+title: Consider gitops to deploy applications or cluster configuration to multiple
+ clusters
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 0102ce16-ee30-41e6-b882-e52e4621dd68
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/example-scenario/bedrock/bedrock-automated-deployments
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterLogsContainerInsights.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterLogsContainerInsights.yaml
new file mode 100644
index 000000000..cce39ac94
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterLogsContainerInsights.yaml
@@ -0,0 +1,19 @@
+name: revcl-ClusterLogsContainerInsights
+title: Store and analyze your cluster logs with Container Insights (or other tools
+ like Telegraf/ElasticSearch)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: eaa8dc4a-2436-47b3-9697-15b1752beee0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (isnotnull(properties.addonProfiles.omsagent) and properties.addonProfiles.omsagent.enabled==true)
+ | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterMetricsContainerInsights.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterMetricsContainerInsights.yaml
new file mode 100644
index 000000000..b4984010a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterMetricsContainerInsights.yaml
@@ -0,0 +1,15 @@
+name: revcl-ClusterMetricsContainerInsights
+title: Monitor your cluster metrics with Container Insights (or other tools like Prometheus)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: 6f8389a7-f82c-4b8e-a8c0-aa63a25a4956
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterNodeImagesRegularProcess.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterNodeImagesRegularProcess.yaml
new file mode 100644
index 000000000..22cd93a85
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ClusterNodeImagesRegularProcess.yaml
@@ -0,0 +1,16 @@
+name: revcl-ClusterNodeImagesRegularProcess
+title: Have a regular process to upgrade the cluster node images periodically (weekly,
+ for example)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: 139c9580-ade3-426a-ba09-cf157d9f6477
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/node-image-upgrade
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-CriticalMetricsContainerInsights.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-CriticalMetricsContainerInsights.yaml
new file mode 100644
index 000000000..53e056669
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-CriticalMetricsContainerInsights.yaml
@@ -0,0 +1,15 @@
+name: revcl-CriticalMetricsContainerInsights
+title: Configure alerts on the most critical metrics (see Container Insights for recommendations)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: 67f7a9ed-5b31-4f38-a3f3-9812b2463cff
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/insights/container-insights-metric-alerts
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-CustomNodeRgInfraRg.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-CustomNodeRgInfraRg.yaml
new file mode 100644
index 000000000..034806482
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-CustomNodeRgInfraRg.yaml
@@ -0,0 +1,17 @@
+name: revcl-CustomNodeRgInfraRg
+title: Use custom Node RG (aka 'Infra RG') name
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 73b32a5a-67f7-4a9e-b5b3-1f38c3f39812
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/cluster-configuration
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (properties.nodeResourceGroup !startswith 'MC_') | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-DeprecatedKubernetesApisYamlManifests.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-DeprecatedKubernetesApisYamlManifests.yaml
new file mode 100644
index 000000000..90ecab7e1
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-DeprecatedKubernetesApisYamlManifests.yaml
@@ -0,0 +1,15 @@
+name: revcl-DeprecatedKubernetesApisYamlManifests
+title: Do not use deprecated Kubernetes APIs in your YAML manifests
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: b2463cff-e189-4c59-adf0-d5a73dd4ce32
+links:
+- type: docs
+ url: https://kubernetes.io/docs/setup/release/notes/
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-EgressFilteringStandardAlb.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-EgressFilteringStandardAlb.yaml
new file mode 100644
index 000000000..9a0d31db9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-EgressFilteringStandardAlb.yaml
@@ -0,0 +1,16 @@
+name: revcl-EgressFilteringStandardAlb
+title: If not using egress filtering with AzFW/NVA, monitor standard ALB allocated
+ SNAT ports
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: be209d39-fda4-4777-a424-d116785c2fa5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/load-balancer-standard
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-EnoughQuotaSubscription.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-EnoughQuotaSubscription.yaml
new file mode 100644
index 000000000..2e4a31650
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-EnoughQuotaSubscription.yaml
@@ -0,0 +1,15 @@
+name: revcl-EnoughQuotaSubscription
+title: Ensure your subscription has enough quota to scale out your nodepools
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: 081a5417-4158-433e-a3ad-3c2de733165c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-GovernancePracticesNodeRg.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-GovernancePracticesNodeRg.yaml
new file mode 100644
index 000000000..99d6b9c86
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-GovernancePracticesNodeRg.yaml
@@ -0,0 +1,16 @@
+name: revcl-GovernancePracticesNodeRg
+title: Develop own governance practices to make sure no changes are performed by operators
+ in the node RG (aka 'infra RG')
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: ed0fda7f-211b-47c7-8b6e-c18873fb473c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/faq
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-HostPatchLevelWindowsContainers.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-HostPatchLevelWindowsContainers.yaml
new file mode 100644
index 000000000..045b5414f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-HostPatchLevelWindowsContainers.yaml
@@ -0,0 +1,15 @@
+name: revcl-HostPatchLevelWindowsContainers
+title: Keep windows containers patch level in sync with host patch level
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 67138b82-0102-4ce1-9ee3-01e6e882e52e
+links:
+- type: docs
+ url: https://learn.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-20H2%2Cwindows-10-20H2
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-LinuxNodeUpgradesNodeImageUpgrade.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-LinuxNodeUpgradesNodeImageUpgrade.yaml
new file mode 100644
index 000000000..a0c859741
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-LinuxNodeUpgradesNodeImageUpgrade.yaml
@@ -0,0 +1,15 @@
+name: revcl-LinuxNodeUpgradesNodeImageUpgrade
+title: Use kured for Linux node upgrades in case you are not using node-image upgrade
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: 6f7c4c0d-4e51-4464-ad24-57ed67138b82
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/node-updates-kured
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-MemoryUtilizationCpu.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-MemoryUtilizationCpu.yaml
new file mode 100644
index 000000000..494cd7a85
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-MemoryUtilizationCpu.yaml
@@ -0,0 +1,15 @@
+name: revcl-MemoryUtilizationCpu
+title: Monitor CPU and memory utilization of the nodes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 4621dd68-c5a5-4be2-bdb1-1726769ef669
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/containers/container-insights-analyze
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-MicroserviceDevelopmentDapr.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-MicroserviceDevelopmentDapr.yaml
new file mode 100644
index 000000000..0bce8abdf
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-MicroserviceDevelopmentDapr.yaml
@@ -0,0 +1,15 @@
+name: revcl-MicroserviceDevelopmentDapr
+title: Use Dapr to ease microservice development
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 26886d20-b66c-457b-a591-19bf8e8f5c58
+links:
+- type: docs
+ url: https://dapr.io/
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-NodeAutoDrainEvents.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-NodeAutoDrainEvents.yaml
new file mode 100644
index 000000000..ab3fb0a34
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-NodeAutoDrainEvents.yaml
@@ -0,0 +1,15 @@
+name: revcl-NodeAutoDrainEvents
+title: For planned events consider using Node Auto Drain
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 31d7aaab-7571-4449-ab80-53d89e89d17b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/node-auto-repair#node-autodrain
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-OsDiskQueueDepthCriticalResource.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-OsDiskQueueDepthCriticalResource.yaml
new file mode 100644
index 000000000..0e0b63bb1
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-OsDiskQueueDepthCriticalResource.yaml
@@ -0,0 +1,18 @@
+name: revcl-OsDiskQueueDepthCriticalResource
+title: Monitor OS disk queue depth in nodes
+description: I/O in the OS disk is a critical resource. If the OS in the nodes gets
+ throttled on I/O, this could lead to unpredictable behavior, typically ending up
+ in node being declared NotReady
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 415833ea-3ad3-4c2d-b733-165c3acbe04b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/premium-storage-performance
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-PodSpecsRequests.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-PodSpecsRequests.yaml
new file mode 100644
index 000000000..e6b9f8c43
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-PodSpecsRequests.yaml
@@ -0,0 +1,15 @@
+name: revcl-PodSpecsRequests
+title: Configure requests and limits in your pod specs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: b54eb2eb-03dd-4aa3-9927-18e2edb11726
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-PreferredLogManagementSolutionViaDiagnosticSettings.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-PreferredLogManagementSolutionViaDiagnosticSettings.yaml
new file mode 100644
index 000000000..ada6f5f48
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-PreferredLogManagementSolutionViaDiagnosticSettings.yaml
@@ -0,0 +1,17 @@
+name: revcl-PreferredLogManagementSolutionViaDiagnosticSettings
+title: Send master logs (aka API logs) to Azure Monitor or your preferred log management
+ solution
+description: Via Diagnostic Settings at the cluster level
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: 5b56ad48-408f-4e72-934c-476ba280dcf5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/monitor-aks
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ReadinessProbesLiveness.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ReadinessProbesLiveness.yaml
new file mode 100644
index 000000000..4ba21c4b8
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ReadinessProbesLiveness.yaml
@@ -0,0 +1,15 @@
+name: revcl-ReadinessProbesLiveness
+title: Configure Liveness and Readiness probes for all deployments
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 0
+labels:
+ guid: f4fd0602-7ab5-46f1-b66a-e9dea9654a65
+links:
+- type: docs
+ url: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ResourceHealthNotificationsAksCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ResourceHealthNotificationsAksCluster.yaml
new file mode 100644
index 000000000..0c47eedf0
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ResourceHealthNotificationsAksCluster.yaml
@@ -0,0 +1,15 @@
+name: revcl-ResourceHealthNotificationsAksCluster
+title: Subscribe to resource health notifications for your AKS cluster
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 74c2ee76-569b-4a79-a57e-dedf91b022c9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/aks-resource-health
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ResourceQuotasNamespaces.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ResourceQuotasNamespaces.yaml
new file mode 100644
index 000000000..0ec053aa8
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-ResourceQuotasNamespaces.yaml
@@ -0,0 +1,15 @@
+name: revcl-ResourceQuotasNamespaces
+title: Enforce resource quotas for namespaces
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 769ef669-1a48-435a-a942-223ece80b123
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-SpotNodePoolsTimeSensitiveWorkloads.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-SpotNodePoolsTimeSensitiveWorkloads.yaml
new file mode 100644
index 000000000..cd25f0fe4
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-SpotNodePoolsTimeSensitiveWorkloads.yaml
@@ -0,0 +1,15 @@
+name: revcl-SpotNodePoolsTimeSensitiveWorkloads
+title: Consider spot node pools for non time-sensitive workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: c5a5b252-1e44-4a59-a9d2-399c4d7b68d0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/spot-node-pool
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-TaintWindowsNodes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-TaintWindowsNodes.yaml
new file mode 100644
index 000000000..dc54bb44c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/revcl-TaintWindowsNodes.yaml
@@ -0,0 +1,15 @@
+name: revcl-TaintWindowsNodes
+title: Taint Windows nodes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 2
+labels:
+ guid: c1881370-6f7c-44c0-b4e5-14648d2457ed
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure-stack/aks-hci/adapt-apps-mixed-os-clusters
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AksBestPracticesDocumentationWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AksBestPracticesDocumentationWorkloadArchitectures.yaml
new file mode 100644
index 000000000..0d9b6b4ae
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AksBestPracticesDocumentationWorkloadArchitectures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AksBestPracticesDocumentationWorkloadArchitectures
+title: 'Cluster and workload architectures: Review AKS best practices documentation.'
+description: To build and run applications successfully in AKS, there are key considerations
+ to understand and implement. These areas include multi-tenancy and scheduler features,
+ cluster, and pod security, or business continuity and disaster recovery.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: df3a72a5-8d24-4289-aa12-803287bb182d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AutomatedDeploymentProcessesSoftwareDevelopmentLifecycle.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AutomatedDeploymentProcessesSoftwareDevelopmentLifecycle.yaml
new file mode 100644
index 000000000..f17edcda5
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AutomatedDeploymentProcessesSoftwareDevelopmentLifecycle.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AutomatedDeploymentProcessesSoftwareDevelopmentLifecycle
+title: 'Workload architecture: Use a repeatable and automated deployment processes
+ for your workload within your software development lifecycle.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: a394bfb7-a185-4416-af7f-908ad78ba2cf
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AzureChaosStudioDisasterRecoverySituations.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AzureChaosStudioDisasterRecoverySituations.yaml
new file mode 100644
index 000000000..3c1cfd24f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-AzureChaosStudioDisasterRecoverySituations.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureChaosStudioDisasterRecoverySituations
+title: 'Cluster and workload architectures: Review Azure Chaos Studio.'
+description: Azure Chaos Studio can help simulate faults and trigger disaster recovery
+ situations.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 037e283c-7763-4006-939e-f101331fef86
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-CentralizedConsistentMannerPodsConfigurationStandards.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-CentralizedConsistentMannerPodsConfigurationStandards.yaml
new file mode 100644
index 000000000..bb26d8770
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-CentralizedConsistentMannerPodsConfigurationStandards.yaml
@@ -0,0 +1,17 @@
+name: wafsg-CentralizedConsistentMannerPodsConfigurationStandards
+title: 'Cluster architecture: Operationalize clusters and pods configuration standards
+ with Azure Policy.'
+description: Azure Policy can help to apply at-scale enforcement and safeguards on
+ your clusters in a centralized, consistent manner. It can also control what functions
+ pods are granted and if anything is running against company policy.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 3dc59879-d877-4719-84d1-8262c08c7081
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ChaosEngineeringPracticesPlatformReliabilityIssues.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ChaosEngineeringPracticesPlatformReliabilityIssues.yaml
new file mode 100644
index 000000000..4f0b37c85
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ChaosEngineeringPracticesPlatformReliabilityIssues.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ChaosEngineeringPracticesPlatformReliabilityIssues
+title: 'Cluster and workload architectures: Use chaos engineering practices that target
+ Kubernetes to identify application or platform reliability issues.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: e14572fc-3556-4968-a23b-dcdb2305c57c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-CoreApiServerInteractionsClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-CoreApiServerInteractionsClusterArchitecture.yaml
new file mode 100644
index 000000000..8ed3a96eb
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-CoreApiServerInteractionsClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CoreApiServerInteractionsClusterArchitecture
+title: 'Cluster architecture: Enable diagnostics settings to ensure control plane
+ or core API server interactions are logged.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: b88f9b48-fd82-404f-8b7b-5acea4d17dc4
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-DifferentAzureRegionsInternetFacingWorkloads-1.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-DifferentAzureRegionsInternetFacingWorkloads-1.yaml
new file mode 100644
index 000000000..9c5f5fb14
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-DifferentAzureRegionsInternetFacingWorkloads-1.yaml
@@ -0,0 +1,17 @@
+name: wafsg-DifferentAzureRegionsInternetFacingWorkloads-1
+title: 'Cluster architecture: Adopt a multiregion strategy by deploying AKS clusters
+ deployed across different Azure regions to maximize availability and provide business
+ continuity.'
+description: Internet facing workloads should leverage Azure Front Door or Azure Traffic
+ Manager to route traffic globally across AKS clusters.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 8dd12fab-e3cb-4b39-9ebf-3609a3de2e34
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ManyAdvancedDeploymentPatternsReleaseEngineeringProcess.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ManyAdvancedDeploymentPatternsReleaseEngineeringProcess.yaml
new file mode 100644
index 000000000..198adbf2a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ManyAdvancedDeploymentPatternsReleaseEngineeringProcess.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ManyAdvancedDeploymentPatternsReleaseEngineeringProcess
+title: 'Workload architecture: Use platform capabilities in your release engineering
+ process.'
+description: Kubernetes and ingress controllers support many advanced deployment patterns
+ for inclusion in your release engineering process. Consider patterns like blue-green
+ deployments or canary releases.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: cb3372a2-16ef-4ebf-b7c2-b58f984ef966
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-NecessaryClusterWideConfigurationsClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-NecessaryClusterWideConfigurationsClusterArchitecture.yaml
new file mode 100644
index 000000000..89fc4873f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-NecessaryClusterWideConfigurationsClusterArchitecture.yaml
@@ -0,0 +1,17 @@
+name: wafsg-NecessaryClusterWideConfigurationsClusterArchitecture
+title: 'Cluster architecture: Build an automated process to ensure your clusters are
+ bootstrapped with the necessary cluster-wide configurations and deployments. This
+ is often performed using GitOps.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 484c6621-c021-430c-a94b-633da893adc5
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ReadinessStatusesWorkloadArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ReadinessStatusesWorkloadArchitecture.yaml
new file mode 100644
index 000000000..4714de234
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-ReadinessStatusesWorkloadArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ReadinessStatusesWorkloadArchitecture
+title: 'Workload architecture: The workload should be designed to emit telemetry that
+ can be collected, which should also include liveliness and readiness statuses.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: a36b0ea0-7805-4deb-8c01-75ad610ecdc7
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-SeamlessOnboardingExperienceReferenceConfigureScraping.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-SeamlessOnboardingExperienceReferenceConfigureScraping.yaml
new file mode 100644
index 000000000..57ed3b6d5
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-SeamlessOnboardingExperienceReferenceConfigureScraping.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SeamlessOnboardingExperienceReferenceConfigureScraping
+title: 'Workload architecture: Configure scraping of Prometheus metrics with Container
+ insights.'
+description: Container insights, which are part of Azure Monitor, provide a seamless
+ onboarding experience to collect Prometheus metrics. Reference Configure scraping
+ of Prometheus metrics for more information.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 35367a45-61fb-4731-a636-e59e8ce67fac
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-SourceCodeRepoClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-SourceCodeRepoClusterArchitecture.yaml
new file mode 100644
index 000000000..a3b99e278
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-SourceCodeRepoClusterArchitecture.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SourceCodeRepoClusterArchitecture
+title: 'Cluster architecture: Use a template-based deployment using Bicep, Terraform,
+ or others. Make sure that all deployments are repeatable, traceable, and stored
+ in a source code repo.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 231e994a-ffa3-4eef-bcd5-e85c0fd017ef
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-StampLevelBlueGreenDeploymentsMissionCriticalDesignAreas.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-StampLevelBlueGreenDeploymentsMissionCriticalDesignAreas.yaml
new file mode 100644
index 000000000..e870463cb
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-StampLevelBlueGreenDeploymentsMissionCriticalDesignAreas.yaml
@@ -0,0 +1,16 @@
+name: wafsg-StampLevelBlueGreenDeploymentsMissionCriticalDesignAreas
+title: 'Cluster and workload architectures: For mission-critical workloads, use stamp-level
+ blue/green deployments.'
+description: Automate your mission-critical design areas, including deployment and
+ testing.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 0586a21b-1b24-4112-b1b6-9e10119bed8b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitectureApplicationPerformance.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitectureApplicationPerformance.yaml
new file mode 100644
index 000000000..e2113d45d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitectureApplicationPerformance.yaml
@@ -0,0 +1,15 @@
+name: wafsg-WorkloadArchitectureApplicationPerformance
+title: 'Workload architecture: Monitor application performance with Azure Monitor.'
+description: Configure Application Insights for code-based monitoring of applications
+ running in an AKS cluster.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: ea1485fc-32d7-46dc-a000-9e87c4834091
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitectureContainer.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitectureContainer.yaml
new file mode 100644
index 000000000..10b563939
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitectureContainer.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WorkloadArchitectureContainer
+title: 'Workload architecture: Optimize your workload to operate and deploy efficiently
+ in a container.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 3e3b24ae-ab28-40fe-8074-1a30b6c1a71f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesContainerInsights-1-2.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesContainerInsights-1-2.yaml
new file mode 100644
index 000000000..c9b0b00c0
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesContainerInsights-1-2.yaml
@@ -0,0 +1,17 @@
+name: wafsg-WorkloadArchitecturesContainerInsights-1-2
+title: 'Cluster and workload architectures: Configure monitoring of cluster with Container
+ insights.'
+description: Container insights help monitor the performance of containers by collecting
+ memory and processor metrics from controllers, nodes, and containers that are available
+ in Kubernetes through the Metrics API and container logs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: bdab324d-7736-4444-a03e-a1ec180f3699
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesContainerInsights-1.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesContainerInsights-1.yaml
new file mode 100644
index 000000000..191a7346a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesContainerInsights-1.yaml
@@ -0,0 +1,17 @@
+name: wafsg-WorkloadArchitecturesContainerInsights-1
+title: 'Cluster and workload architectures: Enable Container insights to collect metrics,
+ logs, and diagnostics to monitor the availability and performance of the cluster
+ and workloads running on it.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: 9ab6b90d-899e-4c61-8127-e097c1d80cca
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesWorkloadGovernance.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesWorkloadGovernance.yaml
new file mode 100644
index 000000000..3735d1baa
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Operations/wafsg-WorkloadArchitecturesWorkloadGovernance.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WorkloadArchitecturesWorkloadGovernance
+title: 'Cluster and workload architectures: Enforce cluster and workload governance
+ using Azure Policy.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Operations
+severity: 1
+labels:
+ guid: cb964e93-b3f5-43b4-a52f-30f53a16d163
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AdditionalAksClusterNodes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AdditionalAksClusterNodes.yaml
new file mode 100644
index 000000000..6fae6dcfd
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AdditionalAksClusterNodes.yaml
@@ -0,0 +1,16 @@
+name: revcl-AdditionalAksClusterNodes
+title: If more than 5000 nodes are required for scalability then consider using an
+ additional AKS cluster
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: 38800e6a-ae01-40a2-9fbc-ae5a06e5462d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/quotas-skus-regions#service-quotas-and-limits
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AksNodePoolsNodeConfiguration.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AksNodePoolsNodeConfiguration.yaml
new file mode 100644
index 000000000..68c15fd4e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AksNodePoolsNodeConfiguration.yaml
@@ -0,0 +1,17 @@
+name: revcl-AksNodePoolsNodeConfiguration
+title: Customize node configuration for AKS node pools
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: 831c2872-c693-4b39-a887-a561bada49bc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/custom-node-configuration
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (isnotnull(properties.austoscalerProfile)) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AppropriateNodeSizeLargerNodes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AppropriateNodeSizeLargerNodes.yaml
new file mode 100644
index 000000000..12f3a98cd
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AppropriateNodeSizeLargerNodes.yaml
@@ -0,0 +1,18 @@
+name: revcl-AppropriateNodeSizeLargerNodes
+title: Consider an appropriate node size, not too large or too small
+description: Larger nodes will bring higher performance and features such as ephemeral
+ disks and accelerated networking, but they will increase the blast radius and decrease
+ the scaling granularity
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 0
+labels:
+ guid: 5ae124ba-34df-4585-bcdc-e9bd3bb0cdb3
+links:
+- type: docs
+ url: https://blog.cloudtrooper.net/2020/10/23/which-vm-size-should-i-choose-as-aks-node/
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureCniMaximumNumber.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureCniMaximumNumber.yaml
new file mode 100644
index 000000000..cb20586c1
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureCniMaximumNumber.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureCniMaximumNumber
+title: If using Azure CNI, size your subnet accordingly considering the maximum number
+ of pods per node
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 0
+labels:
+ guid: 7faf12e7-0943-4f63-8472-2da29c2b1cd6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/configure-azure-cni
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureCniMaximumPodsNode.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureCniMaximumPodsNode.yaml
new file mode 100644
index 000000000..57eee48f2
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureCniMaximumPodsNode.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureCniMaximumPodsNode
+title: If using Azure CNI, check the maximum pods/node (default 30)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 0
+labels:
+ guid: 22f54b29-bade-43aa-b1e8-c38ec9366673
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/configure-azure-cni
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureDedicatedHostsAksNodes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureDedicatedHostsAksNodes.yaml
new file mode 100644
index 000000000..3ca11e2aa
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureDedicatedHostsAksNodes.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureDedicatedHostsAksNodes
+title: If required consider using Azure Dedicated Hosts for AKS nodes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: c4e37133-f186-4ce1-aed9-9f1b32f6e021
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-azure-dedicated-hosts
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureDisksLrsDisk.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureDisksLrsDisk.yaml
new file mode 100644
index 000000000..f4e01c6f3
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-AzureDisksLrsDisk.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureDisksLrsDisk
+title: If using Azure Disks and AZs, consider having nodepools within a zone for LRS
+ disk with VolumeBindingMode:WaitForFirstConsumer for provisioning storage in right
+ zone or use ZRS disk for nodepools spanning multiple zones
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 83958a8c-2689-4b32-ab57-cfc64546135a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/availability-zones#azure-disk-availability-zone-support
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-ClusterAutoscaler.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-ClusterAutoscaler.yaml
new file mode 100644
index 000000000..162ecd5b3
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-ClusterAutoscaler.yaml
@@ -0,0 +1,17 @@
+name: revcl-ClusterAutoscaler
+title: Use the Cluster Autoscaler
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 90ce65de-8e13-4f9c-abd4-69266abca264
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/concepts-scale
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (isnotnull(properties.autoScalerProfile)) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-DefaultAksLogRotationThresholdsLargerOsDisks.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-DefaultAksLogRotationThresholdsLargerOsDisks.yaml
new file mode 100644
index 000000000..86a0a3828
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-DefaultAksLogRotationThresholdsLargerOsDisks.yaml
@@ -0,0 +1,17 @@
+name: revcl-DefaultAksLogRotationThresholdsLargerOsDisks
+title: For non-ephemeral disks, use high IOPS and larger OS disks for the nodes when
+ running many pods/node since it requires high performance for running multiple pods
+ and will generate huge logs with default AKS log rotation thresholds
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 0
+labels:
+ guid: f0ce315f-1120-4166-8206-94f2cf3a4d07
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-machines/disks-types
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EphemeralOsDisks.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EphemeralOsDisks.yaml
new file mode 100644
index 000000000..cccfb36e6
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EphemeralOsDisks.yaml
@@ -0,0 +1,18 @@
+name: revcl-EphemeralOsDisks
+title: Use ephemeral OS disks
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 0
+labels:
+ guid: 24367b33-6971-45b1-952b-eee0b9b588de
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/cluster-configuration
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles
+ | mvexpand pools | extend compliant = (pools.osDiskType=='Ephemeral') | project
+ id,name=strcat(name,'-',pools.name), resourceGroup, compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EventDrivenWorkloadsKeda.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EventDrivenWorkloadsKeda.yaml
new file mode 100644
index 000000000..76efba5b9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EventDrivenWorkloadsKeda.yaml
@@ -0,0 +1,15 @@
+name: revcl-EventDrivenWorkloadsKeda
+title: Use KEDA if running event-driven workloads
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: a280dcf5-90ce-465d-b8e1-3f9ccbd46926
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-functions/functions-kubernetes-keda
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EventgridEventsAksAutomation.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EventgridEventsAksAutomation.yaml
new file mode 100644
index 000000000..4201610f9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-EventgridEventsAksAutomation.yaml
@@ -0,0 +1,15 @@
+name: revcl-EventgridEventsAksAutomation
+title: Consider subscribing to EventGrid Events for AKS automation
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: 9583c0f6-6083-43f6-aa6b-df7102c901bb
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-grid/event-schema-aks
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-HorizontalPodAutoscaler.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-HorizontalPodAutoscaler.yaml
new file mode 100644
index 000000000..0abaf3a20
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-HorizontalPodAutoscaler.yaml
@@ -0,0 +1,15 @@
+name: revcl-HorizontalPodAutoscaler
+title: Use the Horizontal Pod Autoscaler when required
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: faa19bfe-9d55-4d04-a3c4-919ca1b2d121
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/concepts-scale
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-HyperPerformanceStorageOptionUltraDisks.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-HyperPerformanceStorageOptionUltraDisks.yaml
new file mode 100644
index 000000000..eba3de3eb
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-HyperPerformanceStorageOptionUltraDisks.yaml
@@ -0,0 +1,15 @@
+name: revcl-HyperPerformanceStorageOptionUltraDisks
+title: For hyper performance storage option use Ultra Disks on AKS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: 39c486ce-d5af-4062-89d5-18bb5fd795db
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-ultra-disks
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-LongRunningOperationAksCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-LongRunningOperationAksCluster.yaml
new file mode 100644
index 000000000..7035a895c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-LongRunningOperationAksCluster.yaml
@@ -0,0 +1,15 @@
+name: revcl-LongRunningOperationAksCluster
+title: For long running operation on an AKS cluster consider event termination
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: c5016d8c-c6c9-4165-89ae-673ef0fff19d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/manage-abort-operations
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-PerformanceReasonsAzfilesStandard.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-PerformanceReasonsAzfilesStandard.yaml
new file mode 100644
index 000000000..c7b220153
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-PerformanceReasonsAzfilesStandard.yaml
@@ -0,0 +1,16 @@
+name: revcl-PerformanceReasonsAzfilesStandard
+title: If using AzFiles Standard, consider AzFiles Premium and/or ANF for performance
+ reasons
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 24429eb7-2281-4376-85cc-57b4a4b18142
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-storage
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-PublicIpNode.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-PublicIpNode.yaml
new file mode 100644
index 000000000..25bd142f6
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-PublicIpNode.yaml
@@ -0,0 +1,15 @@
+name: revcl-PublicIpNode
+title: If required configure Public IP per node in AKS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 2
+labels:
+ guid: 4b3bb365-9458-44d9-9ed1-5c8f52890364
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-StateCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-StateCluster.yaml
new file mode 100644
index 000000000..15252034f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-StateCluster.yaml
@@ -0,0 +1,16 @@
+name: revcl-StateCluster
+title: Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL,
+ Cosmos, etc)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 9f7547c1-747d-4c56-868a-714435bd19dd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-multi-region
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-WindowsWorkloadsAcceleratedNetworking.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-WindowsWorkloadsAcceleratedNetworking.yaml
new file mode 100644
index 000000000..283e4b85a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/revcl-WindowsWorkloadsAcceleratedNetworking.yaml
@@ -0,0 +1,15 @@
+name: revcl-WindowsWorkloadsAcceleratedNetworking
+title: For Windows workloads use Accelerated Networking
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 7bacd7b9-c025-4a9d-a5d2-25d6bc5439d9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/accelerated-networking-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-AksAdvancedSchedulerFeaturesWorkloadArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-AksAdvancedSchedulerFeaturesWorkloadArchitecture.yaml
new file mode 100644
index 000000000..42f5e5af5
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-AksAdvancedSchedulerFeaturesWorkloadArchitecture.yaml
@@ -0,0 +1,14 @@
+name: wafsg-AksAdvancedSchedulerFeaturesWorkloadArchitecture
+title: 'Workload architecture: Use AKS advanced scheduler features.'
+description: Helps control balancing of resources for workloads that require them.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 259b98d6-ff88-4ba1-b459-bf1fab15ae3e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DetailedCapacityPlanExerciseWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DetailedCapacityPlanExerciseWorkloadArchitectures.yaml
new file mode 100644
index 000000000..c533d0b03
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DetailedCapacityPlanExerciseWorkloadArchitectures.yaml
@@ -0,0 +1,17 @@
+name: wafsg-DetailedCapacityPlanExerciseWorkloadArchitectures
+title: 'Cluster and workload architectures: Perform and iterate on a detailed capacity
+ plan exercise that includes SKU, autoscale settings, IP addressing, and failover
+ considerations.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: f527e0a1-3ba5-48d8-93db-07cf5ce42fdd
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DetailedCapacityPlanWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DetailedCapacityPlanWorkloadArchitectures.yaml
new file mode 100644
index 000000000..fb03a5ecc
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DetailedCapacityPlanWorkloadArchitectures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-DetailedCapacityPlanWorkloadArchitectures
+title: 'Cluster and workload architectures: Develop a detailed capacity plan and continually
+ review and revise.'
+description: After formalizing your capacity plan, it should be frequently updated
+ by continuously observing the resource utilization of the cluster.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 1b9c4ae0-1ae6-4d09-a1e8-22dec6edb20b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DifferentNodePoolsUserNodePools.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DifferentNodePoolsUserNodePools.yaml
new file mode 100644
index 000000000..bab571ef9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DifferentNodePoolsUserNodePools.yaml
@@ -0,0 +1,16 @@
+name: wafsg-DifferentNodePoolsUserNodePools
+title: 'Cluster and workload architectures: Separate workloads into different node
+ pools and consider scaling user node pools.'
+description: Unlike System node pools that always require running nodes, user node
+ pools allow you to scale up or down.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 0b3fd6dd-f113-441a-bf35-e6e49400a99e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DifferentNodePoolsWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DifferentNodePoolsWorkloadArchitectures.yaml
new file mode 100644
index 000000000..a846b8746
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-DifferentNodePoolsWorkloadArchitectures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-DifferentNodePoolsWorkloadArchitectures
+title: 'Cluster and workload architectures: Separate workloads into different node
+ pools allowing independent scalling.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 162e3ed3-bde4-4a09-b074-aec1140b735a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-EfficientCostEffectiveClusterClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-EfficientCostEffectiveClusterClusterArchitecture.yaml
new file mode 100644
index 000000000..b9e96bf85
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-EfficientCostEffectiveClusterClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-EfficientCostEffectiveClusterClusterArchitecture
+title: 'Cluster architecture: Enable cluster autoscaler to automatically adjust the
+ number of agent nodes in response to resource constraints.'
+description: The ability to automatically scale up or down the number of nodes in
+ your AKS cluster lets you run an efficient, cost-effective cluster.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: b71f8835-94bd-4396-88e2-07a8ce2916e0
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-HorizontalPodAutoscalerOtherSelectMetrics-1.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-HorizontalPodAutoscalerOtherSelectMetrics-1.yaml
new file mode 100644
index 000000000..3c1010e81
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-HorizontalPodAutoscalerOtherSelectMetrics-1.yaml
@@ -0,0 +1,16 @@
+name: wafsg-HorizontalPodAutoscalerOtherSelectMetrics-1
+title: 'Cluster architecture: Use the Horizontal pod autoscaler to adjust the number
+ of pods in a deployment depending on CPU utilization or other select metrics.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 1cb2782a-f301-4c47-b0a5-f355abdbb796
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-MeaningfulAutoScaleRulesetMeaningfulWorkloadScalingMetrics.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-MeaningfulAutoScaleRulesetMeaningfulWorkloadScalingMetrics.yaml
new file mode 100644
index 000000000..c58b1bc8d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-MeaningfulAutoScaleRulesetMeaningfulWorkloadScalingMetrics.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MeaningfulAutoScaleRulesetMeaningfulWorkloadScalingMetrics
+title: 'Workload architecture: Use meaningful workload scaling metrics.'
+description: Not all scale decisions can be derived from CPU or memory metrics. Often
+ scale considerations will come from more complex or even external data points. Use
+ KEDA to build a meaningful auto scale ruleset based on signals that are specific
+ to your workload.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: 5cf34320-3414-4c06-93c7-945fc9f3d7e2
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-OngoingLoadTestingActivitiesWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-OngoingLoadTestingActivitiesWorkloadArchitectures.yaml
new file mode 100644
index 000000000..59a98dad9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-OngoingLoadTestingActivitiesWorkloadArchitectures.yaml
@@ -0,0 +1,16 @@
+name: wafsg-OngoingLoadTestingActivitiesWorkloadArchitectures
+title: 'Cluster and workload architectures: Perform ongoing load testing activities
+ that exercise both the pod and cluster autoscaler.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: a805eb93-ffa7-4fc8-a8ce-7481da64aa1e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-ResponseWorkloadDemandsClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-ResponseWorkloadDemandsClusterArchitecture.yaml
new file mode 100644
index 000000000..714f86c36
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Performance/wafsg-ResponseWorkloadDemandsClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ResponseWorkloadDemandsClusterArchitecture
+title: 'Cluster architecture: Enable cluster autoscaler to automatically adjust the
+ number of agent nodes in response workload demands.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Performance
+severity: 1
+labels:
+ guid: d8ec7ce1-bb32-4042-93f3-ad468f9c120b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AgicAppgw.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AgicAppgw.yaml
new file mode 100644
index 000000000..9ac26f2d8
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AgicAppgw.yaml
@@ -0,0 +1,15 @@
+name: revcl-AgicAppgw
+title: If using AGIC, do not share an AppGW across clusters
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: cbd8ac2a-aebc-4a2a-94da-1dbf3dc99248
+links:
+- type: docs
+ url: https://azure.github.io/application-gateway-kubernetes-ingress/setup/install-existing/
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AksHttpRoutingAddApplicationRouting.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AksHttpRoutingAddApplicationRouting.yaml
new file mode 100644
index 000000000..4b00dc51d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AksHttpRoutingAddApplicationRouting.yaml
@@ -0,0 +1,19 @@
+name: revcl-AksHttpRoutingAddApplicationRouting
+title: Do not use AKS HTTP Routing Add-On, use instead the managed NGINX ingress with
+ the application routing add-on.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 0
+labels:
+ guid: 8008ae7d-7e4b-4475-a6c8-bdbf59bce65d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/http-application-routing
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (isnull(properties.addonProfiles.httpApplicationRouting) or properties.addonProfiles.httpApplicationRouting.enabled==false)
+ | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AksWindowsWorkloadsHostprocessContainers.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AksWindowsWorkloadsHostprocessContainers.yaml
new file mode 100644
index 000000000..98b2d1f4d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AksWindowsWorkloadsHostprocessContainers.yaml
@@ -0,0 +1,15 @@
+name: revcl-AksWindowsWorkloadsHostprocessContainers
+title: If required for AKS Windows workloads HostProcess containers can be used
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 2
+labels:
+ guid: ab5351f6-383a-45ed-9c5e-b143b16db40a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-windows-hpc
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AzureCniIpExhaustionDynamicAllocations.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AzureCniIpExhaustionDynamicAllocations.yaml
new file mode 100644
index 000000000..c3bd6737b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AzureCniIpExhaustionDynamicAllocations.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureCniIpExhaustionDynamicAllocations
+title: Use Dynamic allocations of IPs in order to avoid Azure CNI IP exhaustion
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 8ee9a69a-1b58-4b1e-9c61-476e110a160b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/configure-azure-cni#dynamic-allocation-of-ips-and-enhanced-subnet-support
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AzureNatGatewayEgressTraffic.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AzureNatGatewayEgressTraffic.yaml
new file mode 100644
index 000000000..2bfd14ef3
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-AzureNatGatewayEgressTraffic.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureNatGatewayEgressTraffic
+title: Use Azure NAT Gateway as outboundType for scaling egress traffic
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 2
+labels:
+ guid: ccb534e7-416e-4a1d-8e93-533b53199085
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/nat-gateway
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-BestCniNetworkPluginAzureCni.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-BestCniNetworkPluginAzureCni.yaml
new file mode 100644
index 000000000..53114b3be
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-BestCniNetworkPluginAzureCni.yaml
@@ -0,0 +1,17 @@
+name: revcl-BestCniNetworkPluginAzureCni
+title: Choose the best CNI network plugin for your requirements (Azure CNI recommended)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 0
+labels:
+ guid: a0f61565-9de5-458f-a372-49c831112dbd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-network
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (properties.networkProfile.networkPlugin=='azure') | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-IngressControllerWebBasedApps.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-IngressControllerWebBasedApps.yaml
new file mode 100644
index 000000000..9842efa88
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-IngressControllerWebBasedApps.yaml
@@ -0,0 +1,16 @@
+name: revcl-IngressControllerWebBasedApps
+title: Use an ingress controller to expose web-based apps instead of exposing them
+ with LoadBalancer-type services
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: b3808b9f-a1cf-4204-ad01-3a923ce474db
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/concepts-network
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-ServiceIpAddressRangeClusterScalability.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-ServiceIpAddressRangeClusterScalability.yaml
new file mode 100644
index 000000000..4b0568e71
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-ServiceIpAddressRangeClusterScalability.yaml
@@ -0,0 +1,16 @@
+name: revcl-ServiceIpAddressRangeClusterScalability
+title: Size the service IP address range accordingly (it is going to limit the cluster
+ scalability)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 0
+labels:
+ guid: 43f63047-22d9-429c-8b1c-d622f54b29ba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/configure-azure-cni
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-SlaBackedAksOffering.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-SlaBackedAksOffering.yaml
new file mode 100644
index 000000000..7c76b8c51
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-SlaBackedAksOffering.yaml
@@ -0,0 +1,17 @@
+name: revcl-SlaBackedAksOffering
+title: Use the SLA-backed AKS offering
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 0
+labels:
+ guid: 71d41e36-10cc-457b-9a4b-1410d4395898
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/uptime-sla
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (sku.tier=='Paid') | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-StandardAlbBasicOne.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-StandardAlbBasicOne.yaml
new file mode 100644
index 000000000..9714591bd
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-StandardAlbBasicOne.yaml
@@ -0,0 +1,18 @@
+name: revcl-StandardAlbBasicOne
+title: Use the standard ALB (as opposed to the basic one)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 0
+labels:
+ guid: ba7da7be-9952-4914-a384-5d997cb39132
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/load-balancer-standard
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (tolower(properties.networkProfile.loadBalancerSku)=='standard') | distinct
+ id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-UseDisruptionBudgetsDeploymentDefinitions.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-UseDisruptionBudgetsDeploymentDefinitions.yaml
new file mode 100644
index 000000000..2decc3469
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/revcl-UseDisruptionBudgetsDeploymentDefinitions.yaml
@@ -0,0 +1,15 @@
+name: revcl-UseDisruptionBudgetsDeploymentDefinitions
+title: Use Disruption Budgets in your pod and deployment definitions
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 2
+labels:
+ guid: c1288b3c-6a57-4cfc-9444-51e1a3d3453a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-scheduler
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-AksUptimeSlaClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-AksUptimeSlaClusterArchitecture.yaml
new file mode 100644
index 000000000..110e37b65
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-AksUptimeSlaClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AksUptimeSlaClusterArchitecture
+title: 'Cluster architecture: Use the AKS Uptime SLA to meet availability targets
+ for production workloads.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 359d4a34-78c9-41e3-9fce-3a4b5fb08a2b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ApplicationDeploymentManifestsPodResourceRequests.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ApplicationDeploymentManifestsPodResourceRequests.yaml
new file mode 100644
index 000000000..0680de294
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ApplicationDeploymentManifestsPodResourceRequests.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ApplicationDeploymentManifestsPodResourceRequests
+title: 'Cluster and workload architectures: Define Pod resource requests and limits
+ in application deployment manifests, and enforce with Azure Policy.'
+description: Container CPU and memory resource limits are necessary to prevent resource
+ exhaustion in your Kubernetes cluster.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 5527c666-0096-4a1d-9022-cada9d4c77da
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ClusterArchitectureCriticalWorkloads.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ClusterArchitectureCriticalWorkloads.yaml
new file mode 100644
index 000000000..a411c6d74
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ClusterArchitectureCriticalWorkloads.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ClusterArchitectureCriticalWorkloads
+title: 'Cluster architecture: For critical workloads, use availability zones for your
+ AKS clusters.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 2e9764a8-9f04-49c8-912c-41f40b2307e3
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ContainerInsightsReliabilityImpactingEvents.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ContainerInsightsReliabilityImpactingEvents.yaml
new file mode 100644
index 000000000..02edebf6a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ContainerInsightsReliabilityImpactingEvents.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ContainerInsightsReliabilityImpactingEvents
+title: 'Cluster architecture: Enable Container insights to monitor your cluster and
+ configure alerts for reliability-impacting events.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 217d3e94-7267-4b11-bd87-928d6119a666
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-DifferentAzureRegionsInternetFacingWorkloads.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-DifferentAzureRegionsInternetFacingWorkloads.yaml
new file mode 100644
index 000000000..6103f7391
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-DifferentAzureRegionsInternetFacingWorkloads.yaml
@@ -0,0 +1,17 @@
+name: wafsg-DifferentAzureRegionsInternetFacingWorkloads
+title: 'Cluster architecture: Adopt a multiregion strategy by deploying AKS clusters
+ deployed across different Azure regions to maximize availability and provide business
+ continuity.'
+description: Internet facing workloads should leverage Azure Front Door or Azure Traffic
+ Manager to route traffic globally across AKS clusters.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 57d11e53-f830-4930-9d74-2ce5435cd971
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ExtraManagementOverheadMemoryOptimizedVms.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ExtraManagementOverheadMemoryOptimizedVms.yaml
new file mode 100644
index 000000000..cd4d34875
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ExtraManagementOverheadMemoryOptimizedVms.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExtraManagementOverheadMemoryOptimizedVms
+title: 'Cluster and workload architectures: Separate applications to dedicated node
+ pools based on specific requirements.'
+description: Applications may share the same configuration and need GPU-enabled VMs,
+ CPU or memory optimized VMs, or the ability to scale-to-zero. Avoid large number
+ of node pools to reduce extra management overhead.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: caa13588-59c1-416a-8b81-4e1ce3d9b707
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-IpAddressSpaceFailoverTraffic.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-IpAddressSpaceFailoverTraffic.yaml
new file mode 100644
index 000000000..635d77673
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-IpAddressSpaceFailoverTraffic.yaml
@@ -0,0 +1,16 @@
+name: wafsg-IpAddressSpaceFailoverTraffic
+title: 'Cluster architecture: Plan the IP address space to ensure your cluster can
+ reliably scale, including handling of failover traffic in multi-cluster topologies.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 5e7f4600-3959-4c9c-b29d-c555c79dfd9e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ManyConcurrentOutboundConnectionsAzureLoadBalancerLimitations.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ManyConcurrentOutboundConnectionsAzureLoadBalancerLimitations.yaml
new file mode 100644
index 000000000..2606b2c9b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-ManyConcurrentOutboundConnectionsAzureLoadBalancerLimitations.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ManyConcurrentOutboundConnectionsAzureLoadBalancerLimitations
+title: 'Cluster architecture: Use a NAT gateway for clusters that run workloads that
+ make many concurrent outbound connections.'
+description: To avoid reliability issues with Azure Load Balancer limitations with
+ high concurrent outbound traffic, us a NAT Gateway instead to support reliable egress
+ traffic at scale.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: ecb8bcd9-2f8b-4394-86bb-c7ee533f7d08
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-MatchingNodeSelectorWorkloadArchitectures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-MatchingNodeSelectorWorkloadArchitectures.yaml
new file mode 100644
index 000000000..08cbbf595
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-MatchingNodeSelectorWorkloadArchitectures.yaml
@@ -0,0 +1,20 @@
+name: wafsg-MatchingNodeSelectorWorkloadArchitectures
+title: 'Cluster and workload architectures: Control pod scheduling using node selectors
+ and affinity.'
+description: Allows the Kubernetes scheduler to logically isolate workloads by hardware
+ in the node. Unlike tolerations, pods without a matching node selector can be scheduled
+ on labeled nodes, which allows unused resources on the nodes to consume, but gives
+ priority to pods that define the matching node selector. Use node affinity for more
+ flexibility, which allows you to define what happens if the pod can't be matched
+ with a node.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: dd3b6ffb-7e93-4b1a-aaf0-3cc42e6271df
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-RegularVmssBasedAksDeploymentSeparateDataCenters.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-RegularVmssBasedAksDeploymentSeparateDataCenters.yaml
new file mode 100644
index 000000000..36376de6f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-RegularVmssBasedAksDeploymentSeparateDataCenters.yaml
@@ -0,0 +1,19 @@
+name: wafsg-RegularVmssBasedAksDeploymentSeparateDataCenters
+title: 'Cluster architecture: Use availability zones to maximize resilience within
+ an Azure region by distributing AKS agent nodes across physically separate data
+ centers.'
+description: By spreading node pools across multiple zones, nodes in one node pool
+ will continue running even if another zone has gone down. If colocality requirements
+ exist, either a regular VMSS-based AKS deployment into a single zone or proximity
+ placement groups can be used to minimize internode latency.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 4834a7a7-6bf7-4a58-961b-f1b97da3c724
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-TheAksUptimeSlaGuaranteesKubernetesApiServerEndpoint.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-TheAksUptimeSlaGuaranteesKubernetesApiServerEndpoint.yaml
new file mode 100644
index 000000000..442a9329c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-TheAksUptimeSlaGuaranteesKubernetesApiServerEndpoint.yaml
@@ -0,0 +1,17 @@
+name: wafsg-TheAksUptimeSlaGuaranteesKubernetesApiServerEndpoint
+title: 'Cluster and workload architectures: Use the AKS Uptime SLA for production
+ grade clusters.'
+description: 'The AKS Uptime SLA guarantees: - `99.95%` availability of the Kubernetes
+ API server endpoint for AKS Clusters that use Azure Availability Zones, or - `99.9%`
+ availability for AKS Clusters that don''t use Azure Availability Zones.'
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 856eeb19-e8cf-4c18-8443-69a4d4a66600
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-UserNodePoolsRightSizeSku.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-UserNodePoolsRightSizeSku.yaml
new file mode 100644
index 000000000..2f9aa4a03
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-UserNodePoolsRightSizeSku.yaml
@@ -0,0 +1,17 @@
+name: wafsg-UserNodePoolsRightSizeSku
+title: 'Cluster and workload architectures: Ensure your workload is running on user
+ node pools and chose the right size SKU. At a minimum, include two nodes for user
+ node pools and three nodes for the system node pool.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 3d531a79-530b-416f-8176-d18fb151f2a0
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-UserNodePoolsSystemNodePool.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-UserNodePoolsSystemNodePool.yaml
new file mode 100644
index 000000000..215e31eb4
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-UserNodePoolsSystemNodePool.yaml
@@ -0,0 +1,17 @@
+name: wafsg-UserNodePoolsSystemNodePool
+title: 'Cluster and workload architectures: Keep the System node pool isolated from
+ application workloads.'
+description: System node pools require a VM SKU of at least 2 vCPUs and 4 GB memory,
+ but 4 vCPU or more is recommended. Reference System and user node pools for detailed
+ requirements.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 80a4d735-cacb-456d-a188-ebf3e6610e6b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WindowsBasedNodePoolsKubernetesNetworkPolicies.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WindowsBasedNodePoolsKubernetesNetworkPolicies.yaml
new file mode 100644
index 000000000..4accf0a7b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WindowsBasedNodePoolsKubernetesNetworkPolicies.yaml
@@ -0,0 +1,17 @@
+name: wafsg-WindowsBasedNodePoolsKubernetesNetworkPolicies
+title: 'Cluster architecture: Ensure proper selection of network plugin based on network
+ requirements and cluster sizing.'
+description: Azure CNI is required for specific scenarios, for example, Windows-based
+ node pools, specific networking requirements and Kubernetes Network Policies. Reference
+ Kubenet versus Azure CNI for more information.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: a2c3dd5a-7ebc-4e4e-8061-a4cb90ed1fe7
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WorkloadArchitectureHorizontalScaling.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WorkloadArchitectureHorizontalScaling.yaml
new file mode 100644
index 000000000..197637f81
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WorkloadArchitectureHorizontalScaling.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WorkloadArchitectureHorizontalScaling
+title: 'Workload architecture: Ensure workloads are built to support horizontal scaling
+ and report application readiness and health.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: b07721f6-5bd8-47df-8a79-e7e3ffa4e84a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WorkloadArchitecturesContainerInsights.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WorkloadArchitecturesContainerInsights.yaml
new file mode 100644
index 000000000..760ac6fd9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Reliability/wafsg-WorkloadArchitecturesContainerInsights.yaml
@@ -0,0 +1,17 @@
+name: wafsg-WorkloadArchitecturesContainerInsights
+title: 'Cluster and workload architectures: Configure monitoring of cluster with Container
+ insights.'
+description: Container insights help monitor the health and performance of controllers,
+ nodes, and containers that are available in Kubernetes through the Metrics API.
+ Integration with Prometheus enables collection of application and workload metrics.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Reliability
+severity: 1
+labels:
+ guid: 1b92e639-a727-409c-a343-17109a2861f2
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AadConditionalAccessAks.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AadConditionalAccessAks.yaml
new file mode 100644
index 000000000..88dabf8da
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AadConditionalAccessAks.yaml
@@ -0,0 +1,15 @@
+name: revcl-AadConditionalAccessAks
+title: Configure if required AAD conditional access for AKS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: c4d7f4c6-79bf-45d0-aa05-ce8fc717e150
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/managed-aad#use-conditional-access-with-azure-ad-and-aks
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AadRbacAuthorization.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AadRbacAuthorization.yaml
new file mode 100644
index 000000000..093496f73
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AadRbacAuthorization.yaml
@@ -0,0 +1,15 @@
+name: revcl-AadRbacAuthorization
+title: Integrate authorization with AAD RBAC
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: eec4962c-c3bd-421b-b77f-26e5e6b3bec3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/manage-azure-rbac
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AdvancedMicroserviceCommunicationManagementServiceMesh.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AdvancedMicroserviceCommunicationManagementServiceMesh.yaml
new file mode 100644
index 000000000..bbc00b33e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AdvancedMicroserviceCommunicationManagementServiceMesh.yaml
@@ -0,0 +1,15 @@
+name: revcl-AdvancedMicroserviceCommunicationManagementServiceMesh
+title: Consider using a service mesh for advanced microservice communication management
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: e9855d04-c3c3-49c9-a6bb-2c12159a114b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/servicemesh-about
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksLocalAccounts.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksLocalAccounts.yaml
new file mode 100644
index 000000000..bde300849
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksLocalAccounts.yaml
@@ -0,0 +1,17 @@
+name: revcl-AksLocalAccounts
+title: Disable AKS local accounts
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: b085b1f2-3119-4771-8c9a-bbf4411810ec
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/managed-aad#disable-local-accounts
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (properties.disableLocalAccounts==true) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksNonInteractiveLoginsKubelogin.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksNonInteractiveLoginsKubelogin.yaml
new file mode 100644
index 000000000..21dd85b8c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksNonInteractiveLoginsKubelogin.yaml
@@ -0,0 +1,15 @@
+name: revcl-AksNonInteractiveLoginsKubelogin
+title: For AKS non-interactive logins use kubelogin (preview)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: f4dcf690-1b30-407d-abab-6f8aa780d3a3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/managed-aad#non-interactive-sign-in-with-kubelogin
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksVirtualNetworkDdosStandard.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksVirtualNetworkDdosStandard.yaml
new file mode 100644
index 000000000..4ebb59ced
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AksVirtualNetworkDdosStandard.yaml
@@ -0,0 +1,22 @@
+name: revcl-AksVirtualNetworkDdosStandard
+title: Use DDoS Standard in the AKS Virtual Network
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 9bda4776-8f24-4c11-9775-c2ea55b46a94
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/ddos-protection-overview
+queries:
+ arg: Resources | where type=~'microsoft.containerservice/managedclusters' | project
+ resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project
+ subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources
+ | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets
+ | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id))
+ on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant
+ = (enableDdosProtection == 'true')
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AppSeparationRequirementsNamespace.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AppSeparationRequirementsNamespace.yaml
new file mode 100644
index 000000000..67762f6b7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AppSeparationRequirementsNamespace.yaml
@@ -0,0 +1,15 @@
+name: revcl-AppSeparationRequirementsNamespace
+title: Define app separation requirements (namespace/nodepool/cluster)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: d167dd18-2b0a-4c24-8b99-9a646f8389a7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-cluster-isolation
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AzureCniDifferentSubnets.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AzureCniDifferentSubnets.yaml
new file mode 100644
index 000000000..621a952af
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AzureCniDifferentSubnets.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureCniDifferentSubnets
+title: If using Azure CNI, consider using different Subnets for NodePools
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 22fbe8d6-9b40-47ef-9011-25bb1a555a6b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-multiple-node-pools#add-a-node-pool-with-a-unique-subnet
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AzurePolicyClusterCompliance.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AzurePolicyClusterCompliance.yaml
new file mode 100644
index 000000000..8c93a2e16
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-AzurePolicyClusterCompliance.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzurePolicyClusterCompliance
+title: Use Azure Policy for Kubernetes to ensure cluster compliance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 9ca48e4a-85e2-4223-bce8-bb12307ca5f1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (isnotnull(properties.addonProfiles.azurepolicy) and properties.addonProfiles.azurepolicy.enabled==true)
+ | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CalicoNetworkPoliciesAksNodes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CalicoNetworkPoliciesAksNodes.yaml
new file mode 100644
index 000000000..748a87ebb
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CalicoNetworkPoliciesAksNodes.yaml
@@ -0,0 +1,18 @@
+name: revcl-CalicoNetworkPoliciesAksNodes
+title: 'For Windows 2019 and 2022 AKS nodes Calico Network Policies can be used '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: ce7f2a7c-297c-47c6-adea-a6ff838db665
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-network-policies
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster)
+ | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true)
+ | distinct id, compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ClusterAccessTime.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ClusterAccessTime.yaml
new file mode 100644
index 000000000..e80d828c1
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ClusterAccessTime.yaml
@@ -0,0 +1,15 @@
+name: revcl-ClusterAccessTime
+title: Configure if required Just-in-time cluster access
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: 36abb0db-c118-4f4c-9880-3f30f9a2deb6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/managed-aad#configure-just-in-time-cluster-access-with-azure-ad-and-aks
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CniPlugin.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CniPlugin.yaml
new file mode 100644
index 000000000..2e25ab539
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CniPlugin.yaml
@@ -0,0 +1,15 @@
+name: revcl-CniPlugin
+title: If required add your own CNI plugin
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: 57bf217f-6dc8-481c-81e2-785773e9c00f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-byo-cni
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ConfidentialComputeAks.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ConfidentialComputeAks.yaml
new file mode 100644
index 000000000..ea8dcead6
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ConfidentialComputeAks.yaml
@@ -0,0 +1,15 @@
+name: revcl-ConfidentialComputeAks
+title: If required consider using Confidential Compute for AKS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: ec8e4e42-0344-41b0-b865-9123e8956d31
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/confidential-computing/confidential-nodes-aks-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CsiSecretsStoreDriverAzureKeyVault.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CsiSecretsStoreDriverAzureKeyVault.yaml
new file mode 100644
index 000000000..0c0fdc42c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-CsiSecretsStoreDriverAzureKeyVault.yaml
@@ -0,0 +1,15 @@
+name: revcl-CsiSecretsStoreDriverAzureKeyVault
+title: Store your secrets in Azure Key Vault with the CSI Secrets Store driver
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 5e3df584-eccc-4d97-a3b6-bcda3b50eb2e
+links:
+- type: docs
+ url: https://github.com/Azure/secrets-store-csi-driver-provider-azure
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-DefenderContainers.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-DefenderContainers.yaml
new file mode 100644
index 000000000..109cce6bf
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-DefenderContainers.yaml
@@ -0,0 +1,15 @@
+name: revcl-DefenderContainers
+title: Consider using Defender for Containers
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: c9e95ffe-6dd1-4a17-8c5f-110389ca9b21
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/defender-for-cloud/defender-for-containers-enable
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-EgressTrafficSecurityRequirements.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-EgressTrafficSecurityRequirements.yaml
new file mode 100644
index 000000000..7fed57266
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-EgressTrafficSecurityRequirements.yaml
@@ -0,0 +1,17 @@
+name: revcl-EgressTrafficSecurityRequirements
+title: Filter egress traffic with AzFW/NVA if your security requirements mandate it
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: 3b365a91-7ecb-4e48-bbe5-4cd7df2e8bba
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/limit-egress-traffic
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (properties.networkProfile.outboundType=='userDefinedRouting') | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-FinerControlKubeletIdentity.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-FinerControlKubeletIdentity.yaml
new file mode 100644
index 000000000..4c3df8ecd
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-FinerControlKubeletIdentity.yaml
@@ -0,0 +1,15 @@
+name: revcl-FinerControlKubeletIdentity
+title: For finer control consider using a managed Kubelet Identity
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 1f711a74-3672-470b-b8b8-a2148d640d79
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-managed-identity#use-a-pre-created-kubelet-managed-identity
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-HttpProxyCompany.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-HttpProxyCompany.yaml
new file mode 100644
index 000000000..1f3b0e0cf
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-HttpProxyCompany.yaml
@@ -0,0 +1,22 @@
+name: revcl-HttpProxyCompany
+title: If required add company HTTP Proxy
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: 6c46b91a-1107-4485-ad66-3183e2a8c266
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/http-proxy
+queries:
+ arg: Resources | where type=~'microsoft.containerservice/managedclusters' | project
+ resourceGroup,name,pools=properties.agentPoolProfiles | mv-expand pools | project
+ subnetId=tostring(pools.vnetSubnetID) | where isnotempty(subnetId) | join (Resources
+ | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,enableDdosProtection=tostring(properties.enableDdosProtection),subnets=properties.subnets
+ | mv-expand subnets | project id,resourceGroup,name,enableDdosProtection,subnetId=tostring(subnets.id))
+ on subnetId | distinct id,resourceGroup,name,enableDdosProtection | extend compliant
+ = (enableDdosProtection == 'true')
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-InternalAppsOrganizationsPrivateIpLoadbalancerServices.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-InternalAppsOrganizationsPrivateIpLoadbalancerServices.yaml
new file mode 100644
index 000000000..a04702612
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-InternalAppsOrganizationsPrivateIpLoadbalancerServices.yaml
@@ -0,0 +1,22 @@
+name: revcl-InternalAppsOrganizationsPrivateIpLoadbalancerServices
+title: If using private-IP LoadBalancer services, use a dedicated subnet (not the
+ AKS subnet)
+description: For internal apps organizations often open the whole AKS subnet in their
+ firewalls. This opens network access to the nodes too, and potentially to the pods
+ as well (if using Azure CNI). If LoadBalancer IPs are in a different subnet, only
+ this one needs to be available to the app clients. Another reason is that if the
+ IP addresses in the AKS subnet are a scarce resource, consuming its IP addresses
+ for services will reduce the maximum scalability of the cluster .
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: 13c00567-4b1e-4945-a459-c373e7ed6162
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/internal-lb
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KeyManagementServiceEncryption.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KeyManagementServiceEncryption.yaml
new file mode 100644
index 000000000..6e4419514
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KeyManagementServiceEncryption.yaml
@@ -0,0 +1,15 @@
+name: revcl-KeyManagementServiceEncryption
+title: If required add Key Management Service etcd encryption
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: e7ba73a3-0508-4f80-806f-527db30cee96
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-kms-etcd-encryption
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KubernetesNetworkPoliciesIntraClusterSecurity.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KubernetesNetworkPoliciesIntraClusterSecurity.yaml
new file mode 100644
index 000000000..404d5a26a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KubernetesNetworkPoliciesIntraClusterSecurity.yaml
@@ -0,0 +1,15 @@
+name: revcl-KubernetesNetworkPoliciesIntraClusterSecurity
+title: Use Kubernetes network policies to increase intra-cluster security
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: 85e2223e-ce8b-4b12-907c-a5f16f158e3e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-network
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KubernetesNetworkPolicyOptionCalicoAzure.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KubernetesNetworkPolicyOptionCalicoAzure.yaml
new file mode 100644
index 000000000..2223185c0
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-KubernetesNetworkPolicyOptionCalicoAzure.yaml
@@ -0,0 +1,17 @@
+name: revcl-KubernetesNetworkPolicyOptionCalicoAzure
+title: Enable a Kubernetes Network Policy option (Calico/Azure)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: 58d7c892-ddb1-407d-9769-ae669ca48e4a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-network-policies
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = isnotnull(properties.networkProfile.networkPolicy) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-LimitAccessAdminKubeconfig.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-LimitAccessAdminKubeconfig.yaml
new file mode 100644
index 000000000..2b97eb3fc
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-LimitAccessAdminKubeconfig.yaml
@@ -0,0 +1,15 @@
+name: revcl-LimitAccessAdminKubeconfig
+title: Limit access to admin kubeconfig (get-credentials --admin)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: a2fe27b2-e287-401a-8352-beedf79b488d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/control-kubeconfig-access
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ManagedIdentitiesServicePrincipals.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ManagedIdentitiesServicePrincipals.yaml
new file mode 100644
index 000000000..1989516b2
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ManagedIdentitiesServicePrincipals.yaml
@@ -0,0 +1,17 @@
+name: revcl-ManagedIdentitiesServicePrincipals
+title: Use managed identities instead of Service Principals
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: ed127dd1-42b0-46b2-8c69-99a646f3389a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-managed-identity
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = (properties.servicePrincipalProfile.clientId=='msi') | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ManagedIntegrationAuthentication.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ManagedIntegrationAuthentication.yaml
new file mode 100644
index 000000000..b73a922ff
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ManagedIntegrationAuthentication.yaml
@@ -0,0 +1,17 @@
+name: revcl-ManagedIntegrationAuthentication
+title: Integrate authentication with AAD (using the managed integration)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 7e42c78e-78c0-46a6-8a21-94956e698dc4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/managed-aad
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = isnotnull(properties.aadProfile) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PodIdentityAccessManagementAzureAdWorkloadIdentity.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PodIdentityAccessManagementAzureAdWorkloadIdentity.yaml
new file mode 100644
index 000000000..5e0906d4e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PodIdentityAccessManagementAzureAdWorkloadIdentity.yaml
@@ -0,0 +1,15 @@
+name: revcl-PodIdentityAccessManagementAzureAdWorkloadIdentity
+title: For Pod Identity Access Management use Azure AD Workload Identity (preview)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: d2e0d5d7-71d4-41e3-910c-c57b4a4b1410
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/workload-identity-migration-sidecar
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PrivateClustersRequirements.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PrivateClustersRequirements.yaml
new file mode 100644
index 000000000..fe2e8493c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PrivateClustersRequirements.yaml
@@ -0,0 +1,18 @@
+name: revcl-PrivateClustersRequirements
+title: Use private clusters if your requirements mandate it
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: ecccd979-3b6b-4cda-9b50-eb2eb03dda6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/private-clusters
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | where isnotnull(properties.apiServerAccessProfile.enablePrivateCluster)
+ | extend compliant = (properties.apiServerAccessProfile.enablePrivateCluster==true)
+ | distinct id, compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PrivateRegistryImages.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PrivateRegistryImages.yaml
new file mode 100644
index 000000000..501aa584a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PrivateRegistryImages.yaml
@@ -0,0 +1,15 @@
+name: revcl-PrivateRegistryImages
+title: Use a private registry for your images, such as ACR
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 55b46a94-8008-4ae7-b7e4-b475b6c8bdbf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/container-registry/
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PublicApiEndpointIpAddresses.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PublicApiEndpointIpAddresses.yaml
new file mode 100644
index 000000000..281f9ec3c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-PublicApiEndpointIpAddresses.yaml
@@ -0,0 +1,19 @@
+name: revcl-PublicApiEndpointIpAddresses
+title: If using a public API endpoint, restrict the IP addresses that can access it
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: c4581559-bb91-463e-a908-aed8c44ce3b2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/api-server-authorized-ip-ranges
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | extend compliant
+ = ((isnull(properties.apiServerAccessProfile.enablePrivateCluster) or properties.apiServerAccessProfile.enablePrivateCluster==false)
+ and isnotnull(properties.apiServerAccessProfile.authorizedIPRanges)) | distinct
+ id,compliant
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-RbacPrivilegeNamespaces.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-RbacPrivilegeNamespaces.yaml
new file mode 100644
index 000000000..667fe7260
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-RbacPrivilegeNamespaces.yaml
@@ -0,0 +1,15 @@
+name: revcl-RbacPrivilegeNamespaces
+title: Use namespaces for restricting RBAC privilege in Kubernetes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: d4f3537c-1346-4dc5-9027-a71ffe1bd05d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-identity
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ServicePrincipalsCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ServicePrincipalsCluster.yaml
new file mode 100644
index 000000000..396bc27f9
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-ServicePrincipalsCluster.yaml
@@ -0,0 +1,16 @@
+name: revcl-ServicePrincipalsCluster
+title: If using Service Principals for the cluster, refresh credentials periodically
+ (like quarterly)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: b03dda6d-58d7-4c89-8ddb-107d5769ae66
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/update-credentials
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-SystemNodepoolTaint.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-SystemNodepoolTaint.yaml
new file mode 100644
index 000000000..0f41abdbd
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-SystemNodepoolTaint.yaml
@@ -0,0 +1,15 @@
+name: revcl-SystemNodepoolTaint
+title: Add taint to your system nodepool to make it dedicated
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: a7a1f893-9bda-4477-98f2-4c116775c2ea
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-system-pools
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-UserSystemNodePoolsControlPlane.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-UserSystemNodePoolsControlPlane.yaml
new file mode 100644
index 000000000..e4eb334b4
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-UserSystemNodePoolsControlPlane.yaml
@@ -0,0 +1,18 @@
+name: revcl-UserSystemNodePoolsControlPlane
+title: Separate applications from the control plane with user/system node pools
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 6f158e3e-a3a9-42c2-be7e-2165c3a87af4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-system-pools
+queries:
+ arg: where type=='microsoft.containerservice/managedclusters' | project id,resourceGroup,name,pools=properties.agentPoolProfiles
+ | project id,name,resourceGroup,poolcount=array_length(pools) | extend compliant
+ = (poolcount > 1)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-VirtualNetworkServiceEndpointsPrivateEndpoints.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-VirtualNetworkServiceEndpointsPrivateEndpoints.yaml
new file mode 100644
index 000000000..3782f4a90
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-VirtualNetworkServiceEndpointsPrivateEndpoints.yaml
@@ -0,0 +1,16 @@
+name: revcl-VirtualNetworkServiceEndpointsPrivateEndpoints
+title: Use Private Endpoints (preferred) or Virtual Network Service Endpoints to access
+ PaaS services from the cluster
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: c3c39c98-6bb2-4c12-859a-114b5e3df584
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/private-link/private-link-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-WebWorkloadsWaf.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-WebWorkloadsWaf.yaml
new file mode 100644
index 000000000..3fb716bb7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-WebWorkloadsWaf.yaml
@@ -0,0 +1,15 @@
+name: revcl-WebWorkloadsWaf
+title: Use a WAF for web workloads (UIs or APIs)
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 0
+labels:
+ guid: a3a92c2d-e7e2-4165-a3a8-7af4a7a1f893
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/operator-best-practices-network
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-WindowsAksWorkloadsGmsa.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-WindowsAksWorkloadsGmsa.yaml
new file mode 100644
index 000000000..266c7faa7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/revcl-WindowsAksWorkloadsGmsa.yaml
@@ -0,0 +1,15 @@
+name: revcl-WindowsAksWorkloadsGmsa
+title: 'If required for Windows AKS workloads configure gMSA '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 2
+labels:
+ guid: e1123a7c-a333-4eb4-a120-4ee3f293c9f3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/aks/use-group-managed-service-accounts
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ApiServerAuthorizedIpRangesAuthorizedIpRangeFeature.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ApiServerAuthorizedIpRangesAuthorizedIpRangeFeature.yaml
new file mode 100644
index 000000000..89c31147b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ApiServerAuthorizedIpRangesAuthorizedIpRangeFeature.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ApiServerAuthorizedIpRangesAuthorizedIpRangeFeature
+title: 'Cluster architecture: For non-private AKS clusters, use API server authorized
+ IP ranges.'
+description: When using public clusters, you can still limit the traffic that can
+ reach your clusters API server by using the authorized IP range feature. Include
+ sources like the public IPs of your deployment build agents, operations management,
+ and node pools' egress point (such as Azure Firewall).
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: f169dfc7-70ef-478d-a483-12f396742584
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-AzureNetworkPoliciesNetworkTraffic.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-AzureNetworkPoliciesNetworkTraffic.yaml
new file mode 100644
index 000000000..0565bf0c3
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-AzureNetworkPoliciesNetworkTraffic.yaml
@@ -0,0 +1,14 @@
+name: wafsg-AzureNetworkPoliciesNetworkTraffic
+title: 'Cluster architecture: Use Azure network policies or Calico.'
+description: Secure and control network traffic between pods in a cluster.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: d1008f3b-5c0d-42ff-8513-fcd6b064fc5d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-AzureWebApplicationFirewallAzureApplicationGateway.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-AzureWebApplicationFirewallAzureApplicationGateway.yaml
new file mode 100644
index 000000000..385106723
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-AzureWebApplicationFirewallAzureApplicationGateway.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureWebApplicationFirewallAzureApplicationGateway
+title: 'Workload architecture: Use a Web Application Firewall to secure HTTP(S) traffic.'
+description: To scan incoming traffic for potential attacks, use a web application
+ firewall such as Azure Web Application Firewall (WAF) on Azure Application Gateway
+ or Azure Front Door.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: dc2dfc11-1574-4228-88d9-50e077b7d8d3
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-CentralizedConsistentMannerClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-CentralizedConsistentMannerClusterArchitecture.yaml
new file mode 100644
index 000000000..33f95432d
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-CentralizedConsistentMannerClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CentralizedConsistentMannerClusterArchitecture
+title: 'Cluster architecture: Secure clusters and pods with Azure Policy.'
+description: Azure Policy can help to apply at-scale enforcement and safeguards on
+ your clusters in a centralized, consistent manner. It can also control what functions
+ pods are granted and if anything is running against company policy.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: e4987bda-a67a-4407-b133-8c378788a8b8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ClusterArchitectureMicrosoftDefender.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ClusterArchitectureMicrosoftDefender.yaml
new file mode 100644
index 000000000..5d0af2cc7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ClusterArchitectureMicrosoftDefender.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ClusterArchitectureMicrosoftDefender
+title: 'Cluster architecture: Use Microsoft Defender for Containers.'
+description: Monitor and maintain the security of your clusters, containers, and their
+ applications.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 628bfcb8-06cb-495f-a25e-5890b6f5dbba
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ClusterManagementTrafficPrivateAksCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ClusterManagementTrafficPrivateAksCluster.yaml
new file mode 100644
index 000000000..fce8ebe1a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-ClusterManagementTrafficPrivateAksCluster.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ClusterManagementTrafficPrivateAksCluster
+title: 'Cluster architecture: Deploy a private AKS cluster to ensure cluster management
+ traffic to your API server remains on your private network. Or use the API server
+ allow list for non-private clusters.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: a572c855-d42a-4490-ab5e-afab4018fd8f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-KubernetesRoleBasedAccessControlMicrosoftEntraId.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-KubernetesRoleBasedAccessControlMicrosoftEntraId.yaml
new file mode 100644
index 000000000..589fb5db7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-KubernetesRoleBasedAccessControlMicrosoftEntraId.yaml
@@ -0,0 +1,17 @@
+name: wafsg-KubernetesRoleBasedAccessControlMicrosoftEntraId
+title: 'Cluster architecture: Use Kubernetes role-based access control (RBAC) with
+ Microsoft Entra ID for least privilege access and minimize granting administrator
+ privileges to protect configuration, and secrets access.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: c90dce11-1c77-4b0e-b1c4-4aba286475af
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftBackboneNetworkPrivateAksCluster.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftBackboneNetworkPrivateAksCluster.yaml
new file mode 100644
index 000000000..3c269757b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftBackboneNetworkPrivateAksCluster.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MicrosoftBackboneNetworkPrivateAksCluster
+title: 'Cluster architecture: Secure network traffic to your API server with private
+ AKS cluster.'
+description: By default, network traffic between your node pools and the API server
+ travels the Microsoft backbone network; by using a private cluster, you can ensure
+ network traffic to your API server remains on the private network only.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 539f0f42-b505-41d0-b297-3b49cc829720
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftDefenderAzureSentinel.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftDefenderAzureSentinel.yaml
new file mode 100644
index 000000000..5b1139e26
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftDefenderAzureSentinel.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MicrosoftDefenderAzureSentinel
+title: 'Cluster architecture: Use Microsoft Defender for containers with Azure Sentinel
+ to detect and quickly respond to threats across your cluster and workloads running
+ on them.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 35a19511-d5d5-4a36-8fdc-796b8549dc4c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIdAzureContainerRegistry.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIdAzureContainerRegistry.yaml
new file mode 100644
index 000000000..2f7f9c223
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIdAzureContainerRegistry.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MicrosoftEntraIdAzureContainerRegistry
+title: 'Cluster architecture: Authenticate with Microsoft Entra ID to Azure Container
+ Registry.'
+description: AKS and Microsoft Entra ID enables authentication with Azure Container
+ Registry without the use of `imagePullSecrets` secrets. Review Authenticate with
+ Azure Container Registry from Azure Kubernetes Service for more information.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 0b153016-434a-419e-8114-530956194357
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIdBasedIdentitiesKubernetesRoleBasedAccessControl.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIdBasedIdentitiesKubernetesRoleBasedAccessControl.yaml
new file mode 100644
index 000000000..1ea6874eb
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIdBasedIdentitiesKubernetesRoleBasedAccessControl.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MicrosoftEntraIdBasedIdentitiesKubernetesRoleBasedAccessControl
+title: 'Cluster architecture: Protect the API server with Microsoft Entra RBAC.'
+description: Securing access to the Kubernetes API Server is one of the most important
+ things you can do to secure your cluster. Integrate Kubernetes role-based access
+ control (RBAC) with Microsoft Entra ID to control access to the API server. Disable
+ local accounts to enforce all cluster access using Microsoft Entra ID-based identities.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 8431face-139d-4a91-ba8c-6053f0125e74
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIntegrationMicrosoftEntraId.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIntegrationMicrosoftEntraId.yaml
new file mode 100644
index 000000000..c292cd566
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-MicrosoftEntraIntegrationMicrosoftEntraId.yaml
@@ -0,0 +1,17 @@
+name: wafsg-MicrosoftEntraIntegrationMicrosoftEntraId
+title: 'Cluster architecture: Use Microsoft Entra integration.'
+description: Using Microsoft Entra ID centralizes the identity management component.
+ Any change in user account or group status is automatically updated in access to
+ the AKS cluster. The developers and application owners of your Kubernetes cluster
+ need access to different resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: a97490b6-9e41-45a1-83bd-7d78dcaa75a6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-NetworkSecurityPointClusterEgressTraffic.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-NetworkSecurityPointClusterEgressTraffic.yaml
new file mode 100644
index 000000000..0396322e4
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-NetworkSecurityPointClusterEgressTraffic.yaml
@@ -0,0 +1,15 @@
+name: wafsg-NetworkSecurityPointClusterEgressTraffic
+title: 'Cluster architecture: Control cluster egress traffic.'
+description: Ensure your cluster's outbound traffic is passing through a network security
+ point such as Azure Firewall or an HTTP proxy.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 267d8ee6-5cfb-471c-ac5c-d2543358525b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-OpenSourceMicrosoftEntraWorkloadIdSecretsStoreCsiDriver.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-OpenSourceMicrosoftEntraWorkloadIdSecretsStoreCsiDriver.yaml
new file mode 100644
index 000000000..d3a8b033b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-OpenSourceMicrosoftEntraWorkloadIdSecretsStoreCsiDriver.yaml
@@ -0,0 +1,17 @@
+name: wafsg-OpenSourceMicrosoftEntraWorkloadIdSecretsStoreCsiDriver
+title: 'Cluster architecture: Use the open-source Microsoft Entra Workload ID and
+ Secrets Store CSI Driver with Azure Key Vault.'
+description: Protect and rotate secrets, certificates, and connection strings in Azure
+ Key Vault with strong encryption. Provides an access audit log, and keeps core secrets
+ out of the deployment pipeline.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: f5ae12ec-66b2-43fa-844d-3be5e07b91f0
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-RotatingServicePrinciplesClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-RotatingServicePrinciplesClusterArchitecture.yaml
new file mode 100644
index 000000000..51f768c97
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-RotatingServicePrinciplesClusterArchitecture.yaml
@@ -0,0 +1,16 @@
+name: wafsg-RotatingServicePrinciplesClusterArchitecture
+title: 'Cluster architecture: Use Managed Identities to avoid managing and rotating
+ service principles.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 5f6c3708-ec93-417b-909c-4414202ff1e6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-SecureContainerAccessClusterArchitecture.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-SecureContainerAccessClusterArchitecture.yaml
new file mode 100644
index 000000000..425cef7f1
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-SecureContainerAccessClusterArchitecture.yaml
@@ -0,0 +1,15 @@
+name: wafsg-SecureContainerAccessClusterArchitecture
+title: 'Cluster architecture: Secure container access to resources.'
+description: Limit access to actions that containers can perform. Provide the least
+ number of permissions, and avoid the use of root or privileged escalation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 6fff442f-deed-462d-90b6-7fde6ce81fae
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-WebApplicationFirewallHttpSTraffic.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-WebApplicationFirewallHttpSTraffic.yaml
new file mode 100644
index 000000000..8232b6bec
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-WebApplicationFirewallHttpSTraffic.yaml
@@ -0,0 +1,15 @@
+name: wafsg-WebApplicationFirewallHttpSTraffic
+title: 'Workload architecture: Use a Web Application Firewall to secure HTTP(S) traffic.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: 80693bc5-79bf-4928-8887-1a77544d3bad
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-WorkloadArchitectureCiCidPipeline.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-WorkloadArchitectureCiCidPipeline.yaml
new file mode 100644
index 000000000..c3ffa824f
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/Security/wafsg-WorkloadArchitectureCiCidPipeline.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WorkloadArchitectureCiCidPipeline
+title: 'Workload architecture: Ensure your CI/CID pipeline is hardened with container-aware
+ scanning.'
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-kubernetes-service.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.containerservice/managedclusters
+waf: Security
+severity: 1
+labels:
+ guid: ab5dd3a3-2d8f-4a82-b209-05715fba7e61
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-APodDisruptionBudgetPodDisruptionBudgets.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-APodDisruptionBudgetPodDisruptionBudgets.yaml
new file mode 100644
index 000000000..3dc1783a2
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-APodDisruptionBudgetPodDisruptionBudgets.yaml
@@ -0,0 +1,18 @@
+name: aprl-APodDisruptionBudgetPodDisruptionBudgets
+title: Configure pod disruption budgets (PDBs)
+description: |-
+ A Pod Disruption Budget is a Kubernetes resource configuring the minimum number or percentage of pods that should remain available during disruptions like maintenance or scaling, ensuring a minimum number of pods are always available in the cluster.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 1
+labels:
+ guid: a08a06a0-e41a-4b99-83bb-69ce8bca54cb
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AResourcequotaObjectImplementResourceQuota.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AResourcequotaObjectImplementResourceQuota.yaml
new file mode 100644
index 000000000..b9b149349
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AResourcequotaObjectImplementResourceQuota.yaml
@@ -0,0 +1,19 @@
+name: aprl-AResourcequotaObjectImplementResourceQuota
+title: Implement Resource Quota to ensure that Kubernetes resources do not exceed
+ hard resource limits
+description: |-
+ A ResourceQuota object sets limits on resource use per namespace, controlling the number and type of objects created, and the total compute resources available.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 2
+labels:
+ guid: 9a1c17e5-c9a0-43db-b920-adaf54d1bcb7
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AksKubeletControllerStartupProbes.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AksKubeletControllerStartupProbes.yaml
new file mode 100644
index 000000000..a4121ba60
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AksKubeletControllerStartupProbes.yaml
@@ -0,0 +1,18 @@
+name: aprl-AksKubeletControllerStartupProbes
+title: Configures Pods Liveness, Readiness, and Startup Probes
+description: |-
+ AKS kubelet controller uses liveness probes to validate containers and applications health, ensuring the system knows when to restart a container based on its health status.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: cd6791b1-c60e-4b37-ac98-9897b1e6f4b8
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AutoScalerPodCreationFailuresQuickPodProvisioning.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AutoScalerPodCreationFailuresQuickPodProvisioning.yaml
new file mode 100644
index 000000000..be70776df
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AutoScalerPodCreationFailuresQuickPodProvisioning.yaml
@@ -0,0 +1,18 @@
+name: aprl-AutoScalerPodCreationFailuresQuickPodProvisioning
+title: Attach Virtual Nodes (ACI) to the AKS cluster
+description: |-
+ To rapidly scale AKS workloads, utilize virtual nodes for quick pod provisioning, unlike Kubernetes auto-scaler. For clusters with availability zones, ensure one nodepool per AZ due to persistent volumes not working across AZs, preventing auto-scaler pod creation failures if lacking access.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 2
+labels:
+ guid: b4639ca7-6308-429a-8b98-92f0bf9bf813
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureAvailabilityZonesHighAvailability.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureAvailabilityZonesHighAvailability.yaml
new file mode 100644
index 000000000..b8001f695
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureAvailabilityZonesHighAvailability.yaml
@@ -0,0 +1,35 @@
+name: aprl-AzureAvailabilityZonesHighAvailability
+title: Deploy AKS cluster across availability zones
+description: |-
+ Azure Availability Zones ensure high availability by offering independent locations within regions, equipped with their own power, cooling, and networking to ensure applications and data are protected from datacenter-level failures.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 4f63619f-5001-439c-bacb-8de891287727
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Returns AKS clusters that do not have any availability zones enabled or only use a single zone
+ resources
+ | where type =~ "Microsoft.ContainerService/managedClusters"
+ | project id, name, tags, location, pools = properties.agentPoolProfiles
+ | mv-expand pool = pools
+ | extend
+ numOfAvailabilityZones = iif(isnull(pool.availabilityZones), 0, array_length(pool.availabilityZones))
+ | where numOfAvailabilityZones < 2
+ | project
+ recommendationId = "4f63619f-5001-439c-bacb-8de891287727",
+ id,
+ name,
+ tags,
+ param1 = strcat("NodePoolName: ", pool.name),
+ param2 = strcat("Mode: ", pool.mode),
+ param3 = strcat("AvailabilityZones: ", iif(numOfAvailabilityZones == 0, "None", strcat("Zone ", strcat_array(pool.availabilityZones, ", ")))),
+ param4 = strcat("Location: ", location)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureCsiDriversAzureDisk.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureCsiDriversAzureDisk.yaml
new file mode 100644
index 000000000..758eb24b7
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureCsiDriversAzureDisk.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureCsiDriversAzureDisk
+title: Upgrade Persistent Volumes using in-tree drivers to Azure CSI drivers
+description: |-
+ From Kubernetes 1.26, Azure Disk and Azure File in-tree drivers are deprecated in favor of CSI drivers. Existing deployments remain operational but untested; users should switch to CSI drivers for new features and SKUs.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: b002c030-72e6-4a37-8217-1cb276c43169
+ area: Governance
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureKubernetesServiceAzureBackup.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureKubernetesServiceAzureBackup.yaml
new file mode 100644
index 000000000..6be5dbe5b
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureKubernetesServiceAzureBackup.yaml
@@ -0,0 +1,31 @@
+name: aprl-AzureKubernetesServiceAzureBackup
+title: Back up Azure Kubernetes Service
+description: |-
+ AKS, popular for stateful apps needing backups, can now use Azure Backup to secure clusters and attached volumes through an installed Backup Extension, enabling backup and restore operations via a Backup Vault.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 2
+labels:
+ guid: 269a9f1a-6675-460a-831e-b05a887a8c4b
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find AKS clusters that do not have backup enabled
+
+ resources
+ | where type =~ 'Microsoft.ContainerService/managedClusters'
+ | extend lname = tolower(name)
+ | join kind=leftouter(recoveryservicesresources
+ | where type =~ 'microsoft.dataprotection/backupvaults/backupinstances'
+ | extend lname = tolower(tostring(split(properties.dataSourceInfo.resourceID, '/')[8]))
+ | extend protectionState = properties.currentProtectionState
+ | project lname, protectionState) on lname
+ | where protectionState != 'ProtectionConfigured'
+ | extend param1 = iif(isnull(protectionState), 'Protection Not Configured', strcat('Protection State: ', protectionState))
+ | project recommendationId = "269a9f1a-6675-460a-831e-b05a887a8c4b", name, id, tags, param1
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureMonitorContainerInsightsPerformanceInsights.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureMonitorContainerInsightsPerformanceInsights.yaml
new file mode 100644
index 000000000..6fc59e985
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzureMonitorContainerInsightsPerformanceInsights.yaml
@@ -0,0 +1,25 @@
+name: aprl-AzureMonitorContainerInsightsPerformanceInsights
+title: Enable AKS Monitoring
+description: |-
+ Azure Monitor enables real-time health and performance insights for AKS by collecting events, capturing container logs, and gathering CPU/Memory data from the Metrics API. It allows data visualization using Azure Monitor Container Insights, Prometheus, Grafana, or others.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: dcaf8128-94bd-4d53-9235-3a0371df6b74
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns AKS clusters where either Azure Monitor is not enabled and/or Container Insights is not enabled
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | extend azureMonitor = tostring(parse_json(properties.azureMonitorProfile.metrics.enabled))
+ | extend insights = tostring(parse_json(properties.addonProfiles.omsagent.enabled))
+ | where isempty(azureMonitor) or isempty(insights)
+ | project recommendationId="dcaf8128-94bd-4d53-9235-3a0371df6b74",id, name, tags, param1=strcat("azureMonitorProfileEnabled: ", iff(isempty(azureMonitor), "false", azureMonitor)), param2=strcat("containerInsightsEnabled: ", iff(isempty(insights), "false", insights))
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzurePoliciesBestPractices.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzurePoliciesBestPractices.yaml
new file mode 100644
index 000000000..ff41f9d4e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-AzurePoliciesBestPractices.yaml
@@ -0,0 +1,33 @@
+name: aprl-AzurePoliciesBestPractices
+title: Enable and remediate Azure Policies configured for AKS
+description: |-
+ Azure Policies in AKS clusters help enforce governance best practices concerning security, authentication, provisioning, networking, and more, ensuring a robust and secure environment for operations.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 2
+labels:
+ guid: 26ebaf1f-c70d-4ebd-8641-4b60a0ce0094
+ area: Governance
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Returns a count of non-compliant policy items per AKS cluster
+ PolicyResources
+ | where type =~ 'Microsoft.PolicyInsights/PolicyStates'
+ | extend complianceState = tostring(properties.complianceState)
+ | where complianceState == 'NonCompliant'
+ | where properties.resourceType =~ 'Microsoft.ContainerService/managedClusters'
+ | extend
+ id = tostring(properties.resourceId)
+ | summarize count() by id
+ | join kind=inner (
+ resources
+ | where type =~ 'Microsoft.ContainerService/managedClusters'
+ | project id, name
+ ) on id
+ | project recommendationId="26ebaf1f-c70d-4ebd-8641-4b60a0ce0094", id, name, param1=strcat("numNonCompliantAlerts: ", count_)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-DevopsFrameworksOperatingModel.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-DevopsFrameworksOperatingModel.yaml
new file mode 100644
index 000000000..f824bae1c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-DevopsFrameworksOperatingModel.yaml
@@ -0,0 +1,24 @@
+name: aprl-DevopsFrameworksOperatingModel
+title: Enable GitOps when using DevOps frameworks
+description: |-
+ GitOps, an operating model for cloud-native apps, uses Git for storing application and infrastructure code as a source of truth for continuous delivery.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 2
+labels:
+ guid: 5f3cbd68-692a-4121-988c-9770914859a9
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns AKS clusters where GitOps is not enabled
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | extend gitops = tostring (parse_json(properties.addOnProfiles.gitops.enabled))
+ | where isempty(gitops)
+ | project recommendationId="5f3cbd68-692a-4121-988c-9770914859a9", id, name, tags, param1=strcat("gitopsEnabled: ", "false")
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-DirectPodVnetConnectivityDiverseNetworkPolicies.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-DirectPodVnetConnectivityDiverseNetworkPolicies.yaml
new file mode 100644
index 000000000..ebb4d1c22
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-DirectPodVnetConnectivityDiverseNetworkPolicies.yaml
@@ -0,0 +1,24 @@
+name: aprl-DirectPodVnetConnectivityDiverseNetworkPolicies
+title: Configure Azure CNI networking for dynamic allocation of IPs
+description: |-
+ Azure CNI enhances cluster IP and network management, allowing dynamic IP allocation, scalable subnets, direct pod-VNET connectivity, and supports diverse network policies for pods and nodes with Azure Network Policies and Calico, optimizing network efficiency and security
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 1
+labels:
+ guid: c22db132-399b-4e7c-995d-577a60881be8
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Check AKS Clusters using kubenet network profile
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | extend networkProfile = tostring (parse_json(properties.networkProfile.networkPlugin))
+ | where networkProfile =="kubenet"
+ | project recommendationId="c22db132-399b-4e7c-995d-577a60881be8", name, id, tags, param1=strcat("networkProfile :",networkProfile)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-LowerReadWriteLatencyEphemeralOsDisks.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-LowerReadWriteLatencyEphemeralOsDisks.yaml
new file mode 100644
index 000000000..cab796d72
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-LowerReadWriteLatencyEphemeralOsDisks.yaml
@@ -0,0 +1,25 @@
+name: aprl-LowerReadWriteLatencyEphemeralOsDisks
+title: Use Ephemeral OS disks on AKS clusters
+description: |-
+ Ephemeral OS disks on AKS offer lower read/write latency due to local attachment, eliminating the need for replication seen with managed disks. This enhances performance and speeds up cluster operations such as scaling or upgrading due to quicker re-imaging and boot times.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 1
+labels:
+ guid: a7bfcc18-b0d8-4d37-81f3-8131ed8bead5
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Returns any AKS cluster nodepools that do not have Ephemeral Disks
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | mv-expand agentPoolProfile = properties.agentPoolProfiles
+ | extend type = tostring(agentPoolProfile.osDiskType)
+ | where type != 'Ephemeral'
+ | project recommendationId="a7bfcc18-b0d8-4d37-81f3-8131ed8bead5", name, id, param1=strcat("osDiskType: ", type)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MaximumAutoScaleSettingsMaxAutoScaleSettings.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MaximumAutoScaleSettingsMaxAutoScaleSettings.yaml
new file mode 100644
index 000000000..903c7c774
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MaximumAutoScaleSettingsMaxAutoScaleSettings.yaml
@@ -0,0 +1,42 @@
+name: aprl-MaximumAutoScaleSettingsMaxAutoScaleSettings
+title: Nodepool subnet size needs to accommodate maximum auto-scale settings
+description: |-
+ Nodepool subnets sized for max auto-scale settings enable AKS to efficiently scale out nodes, meeting increased demand while reducing resource constraints and potential service disruptions.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: e620fa98-7a40-41a0-bfc9-b4407297fb58
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns each AKS cluster with nodepools that have user nodepools with a subnetmask that does not match autoscale configured max-nodes
+ // Subtracting the network address, broadcast address, and default 3 addresses Azure reserves within each subnet
+
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | extend nodePools = properties['agentPoolProfiles']
+ | mv-expand nodePools = properties.agentPoolProfiles
+ | where nodePools.enableAutoScaling == true
+ | extend nodePoolName=nodePools.name, maxNodes = nodePools.maxCount, subnetId = tostring(nodePools.vnetSubnetID)
+ | project clusterId = id, clusterName=name, nodePoolName=nodePools.name, toint(maxNodes), subnetId
+ | join kind = leftouter (
+ resources
+ | where type == 'microsoft.network/virtualnetworks'
+ | extend subnets = properties.subnets
+ | mv-expand subnets
+ | project id = tostring(subnets.id), addressPrefix = tostring(subnets.properties['addressPrefix'])
+ | extend subnetmask = toint(substring(addressPrefix, indexof(addressPrefix, '/')+1, string_size(addressPrefix)))
+ | extend possibleMaxNodeCount = toint(exp2(32-subnetmask) - 5)
+ ) on $left.subnetId == $right.id
+ | project-away id, subnetmask
+ | where possibleMaxNodeCount <= maxNodes
+ | extend param1 = strcat(nodePoolName, " autoscaler upper limit: ", maxNodes)
+ | extend param2 = strcat("ip addresses on subnet: ", possibleMaxNodeCount)
+ | project recommendationId="e620fa98-7a40-41a0-bfc9-b4407297fb58", name=clusterName, id=clusterId, param1, param2
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MultiZoneAksClustersZoneRedundantStorage.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MultiZoneAksClustersZoneRedundantStorage.yaml
new file mode 100644
index 000000000..6cd8f3a0c
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MultiZoneAksClustersZoneRedundantStorage.yaml
@@ -0,0 +1,18 @@
+name: aprl-MultiZoneAksClustersZoneRedundantStorage
+title: Use zone-redundant storage for persistent volumes when running multi-zone AKS
+description: |-
+ ZRS ensures data replication across three zones, protecting against zonal outages. It's available for Azure Disks, Container Storage, Files, and Blob by setting the SKU to ZRS in storage classes, enhancing multi-zone AKS clusters from v1.29.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 1
+labels:
+ guid: d3111036-355d-431b-ab49-8ddad042800b
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MultipleReplicasProductionApplications.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MultipleReplicasProductionApplications.yaml
new file mode 100644
index 000000000..2450850a5
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-MultipleReplicasProductionApplications.yaml
@@ -0,0 +1,19 @@
+name: aprl-MultipleReplicasProductionApplications
+title: Use deployments with multiple replicas in production applications to guarantee
+ availability
+description: |-
+ Configuring multiple replicas in Pod or Deployment manifests stabilizes the number of replica Pods, ensuring that a specified number of identical Pods are always available, thereby guaranteeing their availability.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: bcfe71f1-ebed-49e5-a84a-193b81ad5d27
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-NodePoolAutoScaleSettingsNodePoolSettings.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-NodePoolAutoScaleSettingsNodePoolSettings.yaml
new file mode 100644
index 000000000..c68b50edd
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-NodePoolAutoScaleSettingsNodePoolSettings.yaml
@@ -0,0 +1,18 @@
+name: aprl-NodePoolAutoScaleSettingsNodePoolSettings
+title: Node pool auto-scale settings should not exceed subscription core quota
+description: |-
+ Node pool settings should not exceed the subscription core quota to ensure AKS can scale out nodes efficiently, meeting increased demand while reducing resource constraints and potential service disruptions.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: a01afc4c-7439-4919-b2da-3565992ea2a7
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-PodResourceNeedsClusterAutoScaler.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-PodResourceNeedsClusterAutoScaler.yaml
new file mode 100644
index 000000000..c5e395c0a
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-PodResourceNeedsClusterAutoScaler.yaml
@@ -0,0 +1,24 @@
+name: aprl-PodResourceNeedsClusterAutoScaler
+title: Enable the cluster auto-scaler on an existing cluster
+description: |-
+ The cluster auto-scaler in AKS adjusts node counts based on pod resource needs and available capacity, enabling scaling as per demand to prevent outages.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 902c82ff-4910-4b61-942d-0d6ef7f39b67
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find AKS clusters with auto-scaling disabled
+ Resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | extend autoScaling = tostring (parse_json(properties.agentPoolProfiles.[0].enableAutoScaling))
+ | where autoScaling == "false"
+ | project recommendationId="902c82ff-4910-4b61-942d-0d6ef7f39b67", name, id, tags, param1=strcat("autoScaling :", autoScaling)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-PodTopologySpreadConstraintsZoneTopology.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-PodTopologySpreadConstraintsZoneTopology.yaml
new file mode 100644
index 000000000..c93c1158e
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-PodTopologySpreadConstraintsZoneTopology.yaml
@@ -0,0 +1,19 @@
+name: aprl-PodTopologySpreadConstraintsZoneTopology
+title: Use pod topology spread constraints to ensure that pods are spread across different
+ nodes or zones
+description: |-
+ Enhance availability and reliability by using pod topology spread constraints to control pod distribution based on node or zone topology, ensuring pods are spread across your cluster.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 928fcc6f-5e9a-42d9-9bd4-260af42de2e5
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-ProductionAksClustersAksTier.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-ProductionAksClustersAksTier.yaml
new file mode 100644
index 000000000..8395e8d78
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-ProductionAksClustersAksTier.yaml
@@ -0,0 +1,23 @@
+name: aprl-ProductionAksClustersAksTier
+title: Update AKS tier to Standard
+description: |-
+ Production AKS clusters require the Standard tier for a financially backed SLA and enhanced node scalability, as the free service lacks these features.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 0611251f-e70f-4243-8ddd-cfe894bec2e7
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns all AKS clusters not running on the Standard tier
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | where sku.tier != "Standard"
+ | project recommendationId="0611251f-e70f-4243-8ddd-cfe894bec2e7", id, name, tags, param1=strcat("skuName: ", sku.name), param2=strcat("skuTier: ", sku.tier)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SecureScalableAuthenticationSystemExternalIdentityProviders.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SecureScalableAuthenticationSystemExternalIdentityProviders.yaml
new file mode 100644
index 000000000..e885ac825
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SecureScalableAuthenticationSystemExternalIdentityProviders.yaml
@@ -0,0 +1,26 @@
+name: aprl-SecureScalableAuthenticationSystemExternalIdentityProviders
+title: Disable local accounts
+description: |-
+ Local Kubernetes accounts in AKS, being non-auditable and legacy, are discouraged. Microsoft Entra's integration offers centralized management, multi-factor authentication, RBAC for detailed access, and a secure, scalable authentication system compatible with Azure and external identity providers.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: ca324d71-54b0-4a3e-b9e4-10e767daa9fc
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns a list of AKS clusters not using AAD enabled
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | extend aadProfile = tostring (parse_json(properties.aadProfile))
+ | extend disablelocalAdmin = tostring(parse_json(properties.disableLocalAccounts))
+ | extend RBAC = tostring(parse_json(properties.enableRBAC))
+ | where RBAC == "false"
+ | project recommendationId="ca324d71-54b0-4a3e-b9e4-10e767daa9fc", name, id, tags, param1=strcat("aadProfile: ", aadProfile), param2=strcat("disablelocalAdmin: ",disablelocalAdmin), param3=strcat("RBAC: ", RBAC)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SystemNodePoolsIsolateSystem.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SystemNodePoolsIsolateSystem.yaml
new file mode 100644
index 000000000..73ab55953
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SystemNodePoolsIsolateSystem.yaml
@@ -0,0 +1,35 @@
+name: aprl-SystemNodePoolsIsolateSystem
+title: Isolate system and application pods
+description: |-
+ AKS assigns the kubernetes.azure.com/mode: system label to nodes in system node pools signaling the preference for system pods should be scheduled there. The CriticalAddonsOnly=true:NoSchedule taint can be added to your system nodes to prohibit application pods from being scheduled on them.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 5ee083cd-6ac3-4a83-8913-9549dd36cf56
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Returns each AKS cluster with nodepools that do not have system pods labelled with CriticalAddonsOnly
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | mv-expand agentPoolProfile = properties.agentPoolProfiles
+ | where agentPoolProfile.mode =~ 'System' // system node pools
+ | extend taint = tostring(parse_json(agentPoolProfile.nodeTaints))
+ | extend hasCriticalAddonsTaint = agentPoolProfile.kubeletConfig has 'CriticalAddonsOnly'
+ | extend hasNodeLabel = agentPoolProfile.customNodeLabels has 'CriticalAddonsOnly'
+ | extend hasCriticalAddonsOnly = hasCriticalAddonsTaint or hasNodeLabel or isempty(taint)
+ | extend nodePool = tostring(parse_json(agentPoolProfile.name))
+ | where hasCriticalAddonsOnly
+ | project
+ recommendationId="5ee083cd-6ac3-4a83-8913-9549dd36cf56",
+ id,
+ name,
+ tags,
+ param1=strcat("nodepoolName: ", nodePool)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SystemNodepoolCountCriticalSystemPods.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SystemNodepoolCountCriticalSystemPods.yaml
new file mode 100644
index 000000000..23afc2f94
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-SystemNodepoolCountCriticalSystemPods.yaml
@@ -0,0 +1,26 @@
+name: aprl-SystemNodepoolCountCriticalSystemPods
+title: Configure system nodepool count
+description: |-
+ The system node pool should be configured with a minimum node count of two to ensure critical system pods are resilient to node outages.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 7f7ae535-a5ba-4665-b7e0-c451dbdda01f
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns each AKS cluster with nodepools that have system nodepools with less than 2 nodes
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | mv-expand agentPoolProfile = properties.agentPoolProfiles
+ | extend taints = tostring(parse_json(agentPoolProfile.nodeTaints))
+ | extend nodePool = tostring(parse_json(agentPoolProfile.name))
+ | where taints has "CriticalAddonsOnly=true:NoSchedule" and agentPoolProfile.minCount < 2
+ | project recommendationId="7f7ae535-a5ba-4665-b7e0-c451dbdda01f", id, name, param1=strcat("nodePoolName: ", nodePool), param2=strcat("nodePoolMinNodeCount: ", agentPoolProfile.minCount)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-TwoReplicasNodeFailures.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-TwoReplicasNodeFailures.yaml
new file mode 100644
index 000000000..9627114e4
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-TwoReplicasNodeFailures.yaml
@@ -0,0 +1,18 @@
+name: aprl-TwoReplicasNodeFailures
+title: Deploy at least two replicas of your application
+description: |-
+ Deploying at least two replicas of your application ensures that your application is highly available and can tolerate node failures.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 9200aca6-0e83-4749-a5eb-e3939367bdc2
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-UserNodepoolCountUserNodePool.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-UserNodepoolCountUserNodePool.yaml
new file mode 100644
index 000000000..386295e91
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-UserNodepoolCountUserNodePool.yaml
@@ -0,0 +1,26 @@
+name: aprl-UserNodepoolCountUserNodePool
+title: Configure user nodepool count
+description: |-
+ Configuring the user node pool with at least two nodes is essential for applications needing high availability, ensuring they remain operational and accessible without interruption.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: 005ccbbd-aeab-46ef-80bd-9bd4479412ec
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Returns each AKS cluster with nodepools that have user nodepools with less than 2 nodes
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | mv-expand agentPoolProfile = properties.agentPoolProfiles
+ | extend taints = tostring(parse_json(agentPoolProfile.nodeTaints))
+ | extend nodePool = tostring(parse_json(agentPoolProfile.name))
+ | where taints !has "CriticalAddonsOnly=true:NoSchedule" and agentPoolProfile.minCount < 2
+ | project recommendationId="005ccbbd-aeab-46ef-80bd-9bd4479412ec", id, name, param1=strcat("nodePoolName: ", nodePool), param2=strcat("nodePoolMinNodeCount: ", agentPoolProfile.minCount)
diff --git a/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-ValidatedSourceBuiltComponentsLinuxNodepools.yaml b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-ValidatedSourceBuiltComponentsLinuxNodepools.yaml
new file mode 100644
index 000000000..3d03a2701
--- /dev/null
+++ b/v2/recos/Services/microsoftcontainerservice-managedClusters/aprl-ValidatedSourceBuiltComponentsLinuxNodepools.yaml
@@ -0,0 +1,24 @@
+name: aprl-ValidatedSourceBuiltComponentsLinuxNodepools
+title: Use Azure Linux for Linux nodepools
+description: |-
+ Azure Linux on AKS boosts resiliency with a native image using validated, source-built components. It's lightweight, reducing the attack surface and maintenance. A Microsoft-hardened kernel, optimized for Azure, enhances stability and security for container workloads.
+source:
+ type: aprl
+ file: azure-resources/ContainerService/managedClusters/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.ContainerService/managedClusters
+severity: 0
+labels:
+ guid: f46b0d1d-56ef-4795-b98a-f6ee00cb341a
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Returns each AKS cluster with nodepools that have Linux nodepools not using Azure Linux
+ resources
+ | where type == "microsoft.containerservice/managedclusters"
+ | mv-expand agentPoolProfile = properties.agentPoolProfiles
+ | where agentPoolProfile.osType == 'Linux' and agentPoolProfile.osSKU != 'AzureLinux'
+ | project recommendationid="f46b0d1d-56ef-4795-b98a-f6ee00cb341a", name, id, param1=strcat("nodePoolName: ", agentPoolProfile.name)
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-AzureCosmosDbExtraProvisionedThroughput.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-AzureCosmosDbExtraProvisionedThroughput.yaml
new file mode 100644
index 000000000..88557044f
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-AzureCosmosDbExtraProvisionedThroughput.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureCosmosDbExtraProvisionedThroughput
+title: Continous Backup with point-in-time restore in Azure Cosmos DB
+description: Continous 7 day retention and 30 day retention backups. Azure Cosmos
+ DB performs data backup in the background without consuming any extra provisioned
+ throughput (RUs) or affecting the performance and availability of your database.
+ Continuous backups are taken in every region where the account exists.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: d43918a8-cd28-49be-b6b1-7cb8245461e1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/continuous-backup-restore-introduction
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/create-custom-azure-roles-with-rbac/
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-AzureCosmosDbRegularIntervals.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-AzureCosmosDbRegularIntervals.yaml
new file mode 100644
index 000000000..2bd2e3648
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-AzureCosmosDbRegularIntervals.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureCosmosDbRegularIntervals
+title: Enable Automatic Backups
+description: Azure Cosmos DB automatically takes backups of your data at regular intervals.
+ The automatic backups are taken without affecting the performance or availability
+ of the database operations. All the backups are stored separately in a storage service.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 3499c9c1-133d-42f7-a4b1-a5bd06ff1a90
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/online-backup-and-restore
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-FtaResiliencyPlaybook.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-FtaResiliencyPlaybook.yaml
new file mode 100644
index 000000000..6752cb700
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-FtaResiliencyPlaybook.yaml
@@ -0,0 +1,15 @@
+name: revcl-FtaResiliencyPlaybook
+title: FTA Resiliency Playbook
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 43e52f47-22d9-428c-8b1c-d521e54a29a9
+links:
+- type: docs
+ url: https://github.com/Azure/fta-resiliencyplaybooks/blob/main/pass-foundations-playbooks-CosmosDB_v1.docx
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-LeverageAvailablityZonesOfcourse.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-LeverageAvailablityZonesOfcourse.yaml
new file mode 100644
index 000000000..efd28c7c0
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-LeverageAvailablityZonesOfcourse.yaml
@@ -0,0 +1,16 @@
+name: revcl-LeverageAvailablityZonesOfcourse
+title: Leverage Availablity Zones where regionally applicable and ofcourse if the
+ service offers it
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 0
+labels:
+ guid: de39ac0e-7c28-4dc9-9565-7202bff4564b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/high-availability#slas
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-LeverageMultiRegionWritesMultiRegionWritesCapability.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-LeverageMultiRegionWritesMultiRegionWritesCapability.yaml
new file mode 100644
index 000000000..48f5f4e0f
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-LeverageMultiRegionWritesMultiRegionWritesCapability.yaml
@@ -0,0 +1,17 @@
+name: revcl-LeverageMultiRegionWritesMultiRegionWritesCapability
+title: Leverage Multi-Region Writes
+description: Multi-region writes capability allows you to take advantage of the provisioned
+ throughput for your databases and containers across the globe
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: bad38ead-53cc-47de-8d8a-aab3571449ab
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/high-availability#multiple-write-regions
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-MaximumRetentionPeriodMinimumBackupInterval.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-MaximumRetentionPeriodMinimumBackupInterval.yaml
new file mode 100644
index 000000000..1f77f346f
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-MaximumRetentionPeriodMinimumBackupInterval.yaml
@@ -0,0 +1,22 @@
+name: revcl-MaximumRetentionPeriodMinimumBackupInterval
+title: Perform Periodic Backups
+description: This mode is the default backup mode for all existing accounts. In this
+ mode, backup is taken at a periodic interval and the data is restored by creating
+ a request with the support team. In this mode, you configure a backup interval and
+ retention for your account. The maximum retention period extends to a month. The
+ minimum backup interval can be one hour.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: a6eb33f6-005c-4d92-9286-7655672d6121
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/periodic-backup-restore-introduction
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/manage-identity-and-access/
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-MultipleReplicasDatabase.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-MultipleReplicasDatabase.yaml
new file mode 100644
index 000000000..b088998db
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-MultipleReplicasDatabase.yaml
@@ -0,0 +1,15 @@
+name: revcl-MultipleReplicasDatabase
+title: Run multiple replicas of the database (>1 ) in Prod
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 0d934a34-8b26-43e7-bd60-513a3649906e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/high-availability#replica-outages
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-RegularBusinessContinuityDrillsAzureCosmosDb.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-RegularBusinessContinuityDrillsAzureCosmosDb.yaml
new file mode 100644
index 000000000..4102785a8
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-RegularBusinessContinuityDrillsAzureCosmosDb.yaml
@@ -0,0 +1,21 @@
+name: revcl-RegularBusinessContinuityDrillsAzureCosmosDb
+title: Enable Service managed failover
+description: Maintain business continuity during regional outages. Azure Cosmos DB
+ supports service-managed failover during a regional outage. During a regional outage,
+ Azure Cosmos DB continues to maintain its latency, availability, consistency, and
+ throughput SLAs. To help make sure that your entire application is highly available,
+ Azure Cosmos DB offers a manual failover API to simulate a regional outage. By using
+ this API, you can carry out regular business continuity drills.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: a47e4d1e-bb79-43f9-bf87-69e1032b72fe
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/how-to-manage-database-account#automatic-failover
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-SeveralWellDefinedConsistencyModelsVariousConsistencyLevels.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-SeveralWellDefinedConsistencyModelsVariousConsistencyLevels.yaml
new file mode 100644
index 000000000..b916d5bfd
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-SeveralWellDefinedConsistencyModelsVariousConsistencyLevels.yaml
@@ -0,0 +1,17 @@
+name: revcl-SeveralWellDefinedConsistencyModelsVariousConsistencyLevels
+title: Choose from several well-defined consistency models
+description: Choose from various consistency levels such as Eventual, Consistent Prefix,
+ Session, Bounded Staleness and strong
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 0
+labels:
+ guid: 9f8ea848-25ec-4140-bc32-2758e6ee9ac0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/consistency-levels
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-SpanCosmosAccountData.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-SpanCosmosAccountData.yaml
new file mode 100644
index 000000000..17e7367bc
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/Reliability/revcl-SpanCosmosAccountData.yaml
@@ -0,0 +1,16 @@
+name: revcl-SpanCosmosAccountData
+title: Distribute your data globally
+description: Span Cosmos account across two or more regions with multi-region writes
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.documentdb/databaseaccounts
+waf: Reliability
+severity: 1
+labels:
+ guid: 8153d89f-89dc-47b3-9be2-b1a27f7b9e91
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cosmos-db/high-availability#slas
+queries: {}
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-AzureCosmosDbResourcesCosmosDbHealth.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-AzureCosmosDbResourcesCosmosDbHealth.yaml
new file mode 100644
index 000000000..f2a0bf022
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-AzureCosmosDbResourcesCosmosDbHealth.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureCosmosDbResourcesCosmosDbHealth
+title: Monitor Cosmos DB health and set up alerts
+description: |-
+ Monitoring the availability and responsiveness of Azure Cosmos DB resources and having alerts set up for your workload is a good practice. This ensures you stay proactive in handling unforeseen events.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 1
+labels:
+ guid: deaea200-013c-414b-ac9f-bfa7a7fb13f0
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-ContinuousBackupModeContinuousMode.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-ContinuousBackupModeContinuousMode.yaml
new file mode 100644
index 000000000..a11990963
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-ContinuousBackupModeContinuousMode.yaml
@@ -0,0 +1,26 @@
+name: aprl-ContinuousBackupModeContinuousMode
+title: Configure continuous backup mode
+description: |-
+ Cosmos DB's backup is always on, offering protection against data mishaps. Continuous mode allows for self-serve restoration to a pre-mishap point, unlike periodic mode which requires contacting Microsoft support, leading to longer restore times.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 0
+labels:
+ guid: e544520b-8505-7841-9e77-1f1974ee86ec
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Query all Azure Cosmos DB accounts that do not have continuous backup mode configured
+ Resources
+ | where type =~ 'Microsoft.DocumentDb/databaseAccounts'
+ | where
+ properties.backupPolicy.type == 'Periodic' and
+ properties.enableMultipleWriteLocations == false and
+ properties.enableAnalyticalStorage == false
+ | project recommendationId='e544520b-8505-7841-9e77-1f1974ee86ec', name, id, tags
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-ManyTransientErrorsRobustErrorHandling.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-ManyTransientErrorsRobustErrorHandling.yaml
new file mode 100644
index 000000000..a5ef1adf5
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-ManyTransientErrorsRobustErrorHandling.yaml
@@ -0,0 +1,18 @@
+name: aprl-ManyTransientErrorsRobustErrorHandling
+title: Implement retry logic in your client
+description: |-
+ Cosmos DB SDKs automatically manage many transient errors through retries. Despite this, it's crucial for applications to implement additional retry policies targeting specific cases that the SDKs can't generically address, ensuring more robust error handling.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 1
+labels:
+ guid: fa6ac22f-0584-bb4b-80e4-80f4755d1a97
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-MbResponseLimitCosmosDb.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-MbResponseLimitCosmosDb.yaml
new file mode 100644
index 000000000..4de26f5ad
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-MbResponseLimitCosmosDb.yaml
@@ -0,0 +1,18 @@
+name: aprl-MbResponseLimitCosmosDb
+title: Ensure query results are fully drained
+description: |-
+ Cosmos DB has a 4 MB response limit, leading to paginated results for large or partition-spanning queries. Each page shows availability and provides a continuation token for the next. A while loop in code is necessary to traverse all pages until completion.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 0
+labels:
+ guid: c006604a-0d29-684c-99f0-9729cb40dac5
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-MultiRegionWriteCapabilityMultipleRegions.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-MultiRegionWriteCapabilityMultipleRegions.yaml
new file mode 100644
index 000000000..adfe4cf64
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-MultiRegionWriteCapabilityMultipleRegions.yaml
@@ -0,0 +1,25 @@
+name: aprl-MultiRegionWriteCapabilityMultipleRegions
+title: Evaluate multi-region write capability
+description: |-
+ Multi-region write capability allows for designing applications that are highly available across multiple regions, though it demands careful attention to consistency requirements and conflict resolution. Improper setup may decrease availability and cause data corruption due to unhandled conflicts.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 0
+labels:
+ guid: 9ce78192-74a0-104c-b5bb-9a443f941649
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Query to find Azure Cosmos DB accounts that have multiple read locations but do not have multiple write locations enabled
+ Resources
+ | where type =~ 'Microsoft.DocumentDb/databaseAccounts'
+ | where
+ array_length(properties.locations) > 1 and
+ properties.enableMultipleWriteLocations == false
+ | project recommendationId='9ce78192-74a0-104c-b5bb-9a443f941649', name, id, tags
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-SingleWriteRegionNextAvailableRegion.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-SingleWriteRegionNextAvailableRegion.yaml
new file mode 100644
index 000000000..4c1a96477
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-SingleWriteRegionNextAvailableRegion.yaml
@@ -0,0 +1,27 @@
+name: aprl-SingleWriteRegionNextAvailableRegion
+title: Enable service-managed failover for multi-region accounts with single write
+ region
+description: |-
+ Cosmos DB boasts high uptime and resiliency. Even so, issues may arise. With Service-Managed failover, if a region is down, Cosmos DB automatically switches to the next available region, requiring no user action.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 0
+labels:
+ guid: 9cabded7-a1fc-6e4a-944b-d7dd98ea31a2
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Query to list all Azure Cosmos DB accounts that do not have multiple write locations or automatic failover enabled
+ Resources
+ | where type =~ 'Microsoft.DocumentDb/databaseAccounts'
+ | where
+ array_length(properties.locations) > 1 and
+ tobool(properties.enableAutomaticFailover) == false and
+ tobool(properties.enableMultipleWriteLocations) == false
+ | project recommendationId='9cabded7-a1fc-6e4a-944b-d7dd98ea31a2', name, id, tags
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-SingletonPatternSingleInstance.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-SingletonPatternSingleInstance.yaml
new file mode 100644
index 000000000..8a99c00c1
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-SingletonPatternSingleInstance.yaml
@@ -0,0 +1,18 @@
+name: aprl-SingletonPatternSingleInstance
+title: Maintain singleton pattern in your client
+description: |-
+ Using a single instance of the SDK client for each account and application is crucial as connections are tied to the client. Compute environments have a limit on open connections, affecting connectivity when exceeded.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 1
+labels:
+ guid: 7eb32cf9-9a42-1540-acf8-597cbba8a418
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-TwoRegionsSecondaryRegion.yaml b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-TwoRegionsSecondaryRegion.yaml
new file mode 100644
index 000000000..896304962
--- /dev/null
+++ b/v2/recos/Services/microsoftdocumentdb-databaseAccounts/aprl-TwoRegionsSecondaryRegion.yaml
@@ -0,0 +1,25 @@
+name: aprl-TwoRegionsSecondaryRegion
+title: Configure at least two regions for high availability
+description: |-
+ Enable a secondary region in Cosmos DB for higher SLA without downtime. Simple as pinning a location on a map. For Strong consistency, configure at least three regions for write availability in case of failure.
+source:
+ type: aprl
+ file: azure-resources/DocumentDB/databaseAccounts/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.DocumentDB/databaseAccounts
+severity: 0
+labels:
+ guid: 43663217-a1d3-844b-80ea-571a2ce37c6c
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Query to find Azure Cosmos DB accounts that have less than 2 regions or less than 3 regions with strong consistency level
+ Resources
+ | where type =~ 'Microsoft.DocumentDb/databaseAccounts'
+ | where
+ array_length(properties.locations) < 2 or
+ (array_length(properties.locations) < 3 and properties.consistencyPolicy.defaultConsistencyLevel == 'Strong')
+ | project recommendationId='43663217-a1d3-844b-80ea-571a2ce37c6c', name, id, tags
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-BusinessCriticalApplicationsActiveActiveConfiguration.yaml b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-BusinessCriticalApplicationsActiveActiveConfiguration.yaml
new file mode 100644
index 000000000..c36a7d3f7
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-BusinessCriticalApplicationsActiveActiveConfiguration.yaml
@@ -0,0 +1,20 @@
+name: revcl-BusinessCriticalApplicationsActiveActiveConfiguration
+title: For Business Critical Applications, use Active Active configuration
+description: Should be used for DR configurations where an outage or loss of event
+ data in the downed region cannot be tolerated. For these cases, follow the replication
+ guidance and do not use the built-in geo-disaster recovery capability (active/passive).
+ With Active/Active, Maintain multiple Event Hubs in different regions and namespaces,
+ and events will be replicated between the hubs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 6e31b67d-67ba-4591-89c0-9e805d597c7e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/event-hubs-federation-overview
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-DedicatedSkusPredicablePerformance.yaml b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-DedicatedSkusPredicablePerformance.yaml
new file mode 100644
index 000000000..c4b903213
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-DedicatedSkusPredicablePerformance.yaml
@@ -0,0 +1,15 @@
+name: revcl-DedicatedSkusPredicablePerformance
+title: Use the Premium or Dedicated SKUs for predicable performance
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 20b56c56-ad58-4519-8f82-735c586bb281
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/compare-tiers
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-DesignResilientEventHubs.yaml b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-DesignResilientEventHubs.yaml
new file mode 100644
index 000000000..751d37a3f
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-DesignResilientEventHubs.yaml
@@ -0,0 +1,15 @@
+name: revcl-DesignResilientEventHubs
+title: Design Resilient Event Hubs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 9ced16ad-d186-4f0a-a241-a999a68af77c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/serverless/event-hubs-functions/resilient-design
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-GeoDisasterRecoveryActivePassiveConfiguration.yaml b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-GeoDisasterRecoveryActivePassiveConfiguration.yaml
new file mode 100644
index 000000000..f1c3b3e7e
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-GeoDisasterRecoveryActivePassiveConfiguration.yaml
@@ -0,0 +1,21 @@
+name: revcl-GeoDisasterRecoveryActivePassiveConfiguration
+title: Plan for Geo Disaster Recovery using Active Passive configuration
+description: The built-in geo-disaster recovery feature, when enabled, ensures that
+ the entire configuration of anamespace (Event Hubs, Consumer Groups and settings)
+ is continuously replicated from a primary namespace to a secondary namespace, and
+ it allows a once-only failover move from the primary to the secondary at any time.
+ Active/Passive feature is designed to make it easier to recover from and abandon
+ a failed Azure region without having to change application configurations
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Reliability
+severity: 0
+labels:
+ guid: dc15a1c0-75ee-49f1-90ac-ccd579376bcd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/event-hubs-geo-dr?tabs=portal
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-LeverageFtaResillencyHandbook.yaml b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-LeverageFtaResillencyHandbook.yaml
new file mode 100644
index 000000000..6ca347b3b
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-LeverageFtaResillencyHandbook.yaml
@@ -0,0 +1,15 @@
+name: revcl-LeverageFtaResillencyHandbook
+title: Leverage FTA Resillency HandBook
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Reliability
+severity: 1
+labels:
+ guid: 31d41e36-11c8-417b-8afb-c410d4391898
+links:
+- type: docs
+ url: https://github.com/Azure/fta-resiliencyplaybooks/blob/main/paas-foundations-playbooks-AEH_v1.docx
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-NewEhNamespaceLeverageAvailabilityZones.yaml b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-NewEhNamespaceLeverageAvailabilityZones.yaml
new file mode 100644
index 000000000..069d097d2
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Reliability/revcl-NewEhNamespaceLeverageAvailabilityZones.yaml
@@ -0,0 +1,18 @@
+name: revcl-NewEhNamespaceLeverageAvailabilityZones
+title: Leverage Availability Zones if regionally applicable
+description: ' This will be turned on automatically for a new EH namespace created
+ from the portal with Premium, Dedicated, or Standard SKUs in a zone-enabled region.
+ Both the EH metadata and the event data itself are replicated across zones'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Reliability
+severity: 0
+labels:
+ guid: f15bce21-9e4a-40eb-9787-9424d226786d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/event-hubs-premium-overview#high-availability-with-availability-zones
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubCustomerManagedKeyOption.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubCustomerManagedKeyOption.yaml
new file mode 100644
index 000000000..8e569ac2a
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubCustomerManagedKeyOption.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureEventHubCustomerManagedKeyOption
+title: Use customer-managed key option in data at rest encryption when required
+description: 'Azure Event Hub provides encryption of data at rest. If you use your
+ own key, the data is still encrypted using the Microsoft-managed key, but in addition
+ the Microsoft-managed key will be encrypted using the customer-managed key. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 2
+labels:
+ guid: 7aaf12e7-b94e-4f6e-847d-2d92981b1cd6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/configure-customer-managed-key
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/plan-implement-administer-conditional-access/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubNamespaceClasslessInterDomainRoutingNotation.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubNamespaceClasslessInterDomainRoutingNotation.yaml
new file mode 100644
index 000000000..8d8d809be
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubNamespaceClasslessInterDomainRoutingNotation.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureEventHubNamespaceClasslessInterDomainRoutingNotation
+title: Consider only allowing access to Azure Event Hub namespace from specific IP
+ addresses or ranges
+description: 'With IP firewall, you can restrict public endpoint further to only a
+ set of IPv4 addresses or IPv4 address ranges in CIDR (Classless Inter-Domain Routing)
+ notation. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: a0e6c465-89e5-458b-a37d-3974d1112dbd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/event-hubs-ip-filtering
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-resource-mgmt-security/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubPublicIpAddress.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubPublicIpAddress.yaml
new file mode 100644
index 000000000..896c7f775
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubPublicIpAddress.yaml
@@ -0,0 +1,22 @@
+name: revcl-AzureEventHubPublicIpAddress
+title: Consider using private endpoints to access Azure Event Hub and disable public
+ network access when applicable.
+description: 'Azure Event Hub by default has a public IP address and is Internet-reachable.
+ Private endpoints allow traffic between your virtual network and Azure Event Hub
+ traverses over the Microsoft backbone network. In addition to that, you should disable
+ public endpoints if those are not used. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 5abca2a4-eda1-4dae-8cc9-5d48c6b791dc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/private-link-service
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubResourceLogsDataPlaneAccessOperations.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubResourceLogsDataPlaneAccessOperations.yaml
new file mode 100644
index 000000000..7fe91b236
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubResourceLogsDataPlaneAccessOperations.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureEventHubResourceLogsDataPlaneAccessOperations
+title: Enable logging for security investigation. Use Azure Monitor to captured metrics
+ and logs such as resource logs, runtime audit logs and Kafka logs
+description: Azure Event Hub resource logs include operational logs, virtual network
+ and Kafka logs. Runtime audit logs capture aggregated diagnostic information for
+ all data plane access operations (such as send or receive events) in Event Hubs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: b38b875b-a1cf-4104-a900-3a4d3ce474db
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/monitor-event-hubs-reference
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/manage-identity-and-access/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubsNamespacesTransportLayerSecurity.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubsNamespacesTransportLayerSecurity.yaml
new file mode 100644
index 000000000..07c847d42
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-AzureEventHubsNamespacesTransportLayerSecurity.yaml
@@ -0,0 +1,22 @@
+name: revcl-AzureEventHubsNamespacesTransportLayerSecurity
+title: 'Enforce a minimum required version of Transport Layer Security (TLS) for requests '
+description: 'Azure Event Hubs namespaces permit clients to send and receive data
+ with TLS 1.0 and above. To enforce stricter security measures, you can configure
+ your Event Hubs namespace to require that clients send and receive data with a newer
+ version of TLS. If an Event Hubs namespace requires a minimum version of TLS, then
+ any requests made with an older version will fail. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: d2f54b29-769e-43a6-a0e7-828ac936657e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/transport-layer-security-configure-minimum-version
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/secure-aad-users-with-mfa/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-EventHubsNamespaceAdministrativeRootAccount.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-EventHubsNamespaceAdministrativeRootAccount.yaml
new file mode 100644
index 000000000..7c0daa174
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-EventHubsNamespaceAdministrativeRootAccount.yaml
@@ -0,0 +1,22 @@
+name: revcl-EventHubsNamespaceAdministrativeRootAccount
+title: Avoid using root account when it is not necessary
+description: "When you create an Event Hubs namespace, a policy rule named RootManageSharedAccessKey\
+ \ is automatically created for the namespace. This policy has manage permissions\
+ \ for the entire namespace. It\xEF\xBF\xBDs recommended that you treat this rule\
+ \ like an administrative root account and don\xEF\xBF\xBDt use it in your application.\
+ \ Using AAD as an authentication provider with RBAC is recommended. "
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 13b0f566-4b1e-4944-a459-837ee79d6c6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature#shared-access-authorization-policies
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/azure-administrator-manage-identities-governance/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-LeastPrivilegeDataPlaneRbacAzureEventHub.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-LeastPrivilegeDataPlaneRbacAzureEventHub.yaml
new file mode 100644
index 000000000..8fef7148d
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-LeastPrivilegeDataPlaneRbacAzureEventHub.yaml
@@ -0,0 +1,21 @@
+name: revcl-LeastPrivilegeDataPlaneRbacAzureEventHub
+title: Use least privilege data plane RBAC
+description: When creating permissions, provide fine-grained control over a client's
+ access to Azure Event Hub. Permissions in Azure Event Hub can and should be scoped
+ to the individual resource level e.g. consumer group, event hub entity, event hub
+ namespaces, etc.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 0
+labels:
+ guid: 8357c559-675c-45ee-a5b8-6ad8844ce3b2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory#azure-built-in-roles-for-azure-event-hubs
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/explore-basic-services-identity-types/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-VirtualMachineScaleSetsAzureVirtualMachines.yaml b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-VirtualMachineScaleSetsAzureVirtualMachines.yaml
new file mode 100644
index 000000000..7cf8d5f61
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/Security/revcl-VirtualMachineScaleSetsAzureVirtualMachines.yaml
@@ -0,0 +1,24 @@
+name: revcl-VirtualMachineScaleSetsAzureVirtualMachines
+title: When possible, your application should be using a managed identity to authenticate
+ to Azure Event Hub. If not, consider having the storage credential (SAS, service
+ principal credential) in Azure Key Vault or an equivalent service
+description: 'Managed identities for Azure resources can authorize access to Event
+ Hubs resources using Azure AD credentials from applications running in Azure Virtual
+ Machines (VMs), Function apps, Virtual Machine Scale Sets, and other services. By
+ using managed identities for Azure resources together with Azure AD authentication,
+ you can avoid storing credentials with your applications that run in the cloud. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.eventhub/namespaces
+waf: Security
+severity: 1
+labels:
+ guid: 3a365a5c-7acb-4e48-abd5-4cd79f2e8776
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/azure-ad-privileged-identity-management/
+queries: {}
diff --git a/v2/recos/Services/microsofteventhub-namespaces/aprl-EventHubStandardTierNamespacesEgressThrottleScenarios.yaml b/v2/recos/Services/microsofteventhub-namespaces/aprl-EventHubStandardTierNamespacesEgressThrottleScenarios.yaml
new file mode 100644
index 000000000..1ac4859f9
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/aprl-EventHubStandardTierNamespacesEgressThrottleScenarios.yaml
@@ -0,0 +1,24 @@
+name: aprl-EventHubStandardTierNamespacesEgressThrottleScenarios
+title: Enable auto-inflate on Event Hub Standard tier
+description: |-
+ Enable auto-inflate on Event Hub Standard tier namespaces to automatically scale up TUs, meeting usage needs and preventing data ingress or egress throttle scenarios by adjusting to allowed rates.
+source:
+ type: aprl
+ file: azure-resources/EventHub/namespaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.EventHub/namespaces
+severity: 0
+labels:
+ guid: fbfef3df-04a5-41b2-a8fd-b8541eb04956
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find Event Hub namespace instances that are Standard tier and do not have Auto Inflate enabled
+ resources
+ | where type == "microsoft.eventhub/namespaces"
+ | where sku.tier == "Standard"
+ | where properties.isAutoInflateEnabled == "false"
+ | project recommendationId = "fbfef3df-04a5-41b2-a8fd-b8541eb04956", name, id, tags, param1 = "AutoInflateEnabled: False"
diff --git a/v2/recos/Services/microsofteventhub-namespaces/aprl-ZoneRedundancyAzurePortal.yaml b/v2/recos/Services/microsofteventhub-namespaces/aprl-ZoneRedundancyAzurePortal.yaml
new file mode 100644
index 000000000..6f7d5f8eb
--- /dev/null
+++ b/v2/recos/Services/microsofteventhub-namespaces/aprl-ZoneRedundancyAzurePortal.yaml
@@ -0,0 +1,16 @@
+name: aprl-ZoneRedundancyAzurePortal
+title: Ensure zone redundancy is enabled in supported regions
+description: |-
+ When using the Azure portal, zone redundancy is automatically enabled. However, some Infrastructure as Code (IaC) tools may default this to false. To ensure replication of metadata and events across data centers in an availability zone, always verify that zone redundancy is enabled.
+source:
+ type: aprl
+ file: azure-resources/EventHub/namespaces/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.EventHub/namespaces
+severity: 0
+labels:
+ guid: 84636c6c-b317-4722-b603-7b1ffc16384b
+ area: High Availability
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstanceCountAzureApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstanceCountAzureApplicationGateway.yaml
new file mode 100644
index 000000000..9c1e24508
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstanceCountAzureApplicationGateway.yaml
@@ -0,0 +1,19 @@
+name: wafsg-ApplicationGatewayInstanceCountAzureApplicationGateway
+title: Have a scale-in and scale-out policy
+description: A scale-out policy ensures that there will be enough instances to handle
+ incoming traffic and spikes. Also, have a scale-in policy that makes sure the number
+ of instances are reduced when demand drops. Consider the choice of instance size.
+ The size can significantly impact the cost. Some considerations are described in
+ the Estimate the Application Gateway instance count.For more information, see What
+ is Azure Application Gateway v2?
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: d0c4b44f-7b43-428c-93f2-dedd7bf00799
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesEmptyBackendPools.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesEmptyBackendPools.yaml
new file mode 100644
index 000000000..81b006a07
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesEmptyBackendPools.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewayInstancesEmptyBackendPools
+title: Review underutilized resources
+description: Identify and delete Application Gateway instances with empty backend
+ pools to avoid unnecessary costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 7947e534-c9a8-435b-9e03-d300143b5f74
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesExtraneousCosts.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesExtraneousCosts.yaml
new file mode 100644
index 000000000..0710dfd4b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesExtraneousCosts.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ApplicationGatewayInstancesExtraneousCosts
+title: Stop Application Gateway instances when not in use
+description: You aren't billed when Application Gateway is in the stopped state. Continuously
+ running Application Gateway instances can incur extraneous costs. Evaluate usage
+ patterns and stop instances when you don't need them. For example, usage after business
+ hours in Dev/Test environments is expected to be low.See these articles for information
+ about how to stop and start instances.- Stop-AzApplicationGateway- Start-AzApplicationGateway
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 3c5f0966-3c57-4e15-a6b0-6cb73405bbf1
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesUse.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesUse.yaml
new file mode 100644
index 000000000..585455127
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayInstancesUse.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewayInstancesUse
+title: Stop Application Gateway instances that are not in use
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: a36bac4f-bf10-44c6-a51e-0d845162b3af
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayPricing.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayPricing.yaml
new file mode 100644
index 000000000..c9bf67f70
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ApplicationGatewayPricing.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewayPricing
+title: Familiarize yourself with Application Gateway pricing
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 30cbe437-b17d-45ad-a42e-a26bef6f4b77
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-AzureApplicationGatewayWebApplicationFirewall.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-AzureApplicationGatewayWebApplicationFirewall.yaml
new file mode 100644
index 000000000..65ef0e568
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-AzureApplicationGatewayWebApplicationFirewall.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureApplicationGatewayWebApplicationFirewall
+title: Familiarize yourself with Application Gateway pricing
+description: For information about Application Gateway pricing, see Understanding
+ Pricing for Azure Application Gateway and Web Application Firewall. You can also
+ leverage the Pricing calculator.Ensure that the options are adequately sized to
+ meet the capacity demand and deliver expected performance without wasting resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 6f1432ef-61d2-4037-8f85-58e005d16b8c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ConsumptionMetricsDifferentParameters.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ConsumptionMetricsDifferentParameters.yaml
new file mode 100644
index 000000000..5d75e5e4d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ConsumptionMetricsDifferentParameters.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ConsumptionMetricsDifferentParameters
+title: Review consumption metrics across different parameters
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 0ce550b6-f2ed-428c-b8c2-b224c065a0db
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-CurrentCapacityUnitsforMicrosoftCostManagement.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-CurrentCapacityUnitsforMicrosoftCostManagement.yaml
new file mode 100644
index 000000000..96c7d2f60
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-CurrentCapacityUnitsforMicrosoftCostManagement.yaml
@@ -0,0 +1,21 @@
+name: wafsg-CurrentCapacityUnitsforMicrosoftCostManagement
+title: Review consumption metrics across different parameters
+description: You're billed based on metered instances of Application Gateway based
+ on the metrics tracked by Azure. Evaluate the various metrics and capacity units
+ and determine the cost drivers. For more information, see Microsoft Cost Management
+ and Billing. The following metrics are key for Application Gateway. This information
+ can be used to validate that the provisioned instance count matches the amount of
+ incoming traffic.- Estimated Billed Capacity Units- Fixed Billable Capacity Units-
+ Current Capacity UnitsFor more information, see Application Gateway metrics.Make
+ sure you account for bandwidth costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: ac8bb190-71ba-48ec-9fef-351c1cd5501f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ScalePolicy.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ScalePolicy.yaml
new file mode 100644
index 000000000..d161e98d5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-ScalePolicy.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ScalePolicy
+title: Have a scale-in and scale-out policy
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 96bcda1b-240a-4d4b-93fa-6872b549d711
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-UnderutilizedResources.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-UnderutilizedResources.yaml
new file mode 100644
index 000000000..4a55d5a9a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Cost/wafsg-UnderutilizedResources.yaml
@@ -0,0 +1,15 @@
+name: wafsg-UnderutilizedResources
+title: Review underutilized resources
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Cost
+severity: 1
+labels:
+ guid: 74ad737c-cbb8-4e91-84b7-2aa937b37ede
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafConfigurationNewRuleSetVersion.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafConfigurationNewRuleSetVersion.yaml
new file mode 100644
index 000000000..48de3eb62
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafConfigurationNewRuleSetVersion.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureApplicationGatewayWafConfigurationNewRuleSetVersion
+title: Define your Azure Application Gateway WAF configuration as code. By using code,
+ you can more easily adopt new rule set version and gain additional protection.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: ba0e9b26-6e0d-4ec8-8541-023c00afd5b7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#define-your-waf-configuration-as-code
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafLogsDiagnosticSettings.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafLogsDiagnosticSettings.yaml
new file mode 100644
index 000000000..3449e9783
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafLogsDiagnosticSettings.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureApplicationGatewayWafLogsDiagnosticSettings
+title: Add diagnostic settings to save your Azure Application Gateway WAF logs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: f84106a2-2e9e-42ac-add6-d3416ecfed53
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#add-diagnostic-settings-to-save-your-wafs-logs
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafLogsMicrosoftSentinel.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafLogsMicrosoftSentinel.yaml
new file mode 100644
index 000000000..7c190088f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-AzureApplicationGatewayWafLogsMicrosoftSentinel.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureApplicationGatewayWafLogsMicrosoftSentinel
+title: Send Azure Application Gateway WAF logs to Microsoft Sentinel.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 92664c60-47e3-4591-8b1b-8d557656e686
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#send-logs-to-microsoft-sentinel
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-CustomErrorPagesPersonalizedUserExperience.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-CustomErrorPagesPersonalizedUserExperience.yaml
new file mode 100644
index 000000000..87ee273a1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-CustomErrorPagesPersonalizedUserExperience.yaml
@@ -0,0 +1,15 @@
+name: revcl-CustomErrorPagesPersonalizedUserExperience
+title: Create custom error pages to display a personalized user experience
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 2
+labels:
+ guid: c8741f03-45a4-4183-a6b8-139e0773b8b5
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/custom-error
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-GatewayManagedCookiesUserSession.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-GatewayManagedCookiesUserSession.yaml
new file mode 100644
index 000000000..a3476355c
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-GatewayManagedCookiesUserSession.yaml
@@ -0,0 +1,16 @@
+name: revcl-GatewayManagedCookiesUserSession
+title: Use gateway-managed cookies to direct traffic from a user session to the same
+ server for processing
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: bb697864-1b4c-43af-8667-90cc69aaed5f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/how-application-gateway-works#modifications-to-the-request
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-LegacyWafConfigurationWafPolicies.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-LegacyWafConfigurationWafPolicies.yaml
new file mode 100644
index 000000000..2d3f2d517
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/revcl-LegacyWafConfigurationWafPolicies.yaml
@@ -0,0 +1,15 @@
+name: revcl-LegacyWafConfigurationWafPolicies
+title: Use WAF Policies instead of the legacy WAF configuration.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: f17ec301-8470-4afd-aabc-c1fdfe47dcc0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/policy-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-ApplicationGatewayHighTrafficSupportApplicationGatewayCapacity.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-ApplicationGatewayHighTrafficSupportApplicationGatewayCapacity.yaml
new file mode 100644
index 000000000..542739741
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-ApplicationGatewayHighTrafficSupportApplicationGatewayCapacity.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ApplicationGatewayHighTrafficSupportApplicationGatewayCapacity
+title: Monitor capacity metrics
+description: Use these metrics as indicators of utilization of the provisioned Application
+ Gateway capacity. We strongly recommend setting up alerts on capacity. For details,
+ see Application Gateway high traffic support.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 14cdf40e-36a1-4947-90a3-3b833e2df9d3
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-AzureMonitorNetworkInsights.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-AzureMonitorNetworkInsights.yaml
new file mode 100644
index 000000000..7aea622df
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-AzureMonitorNetworkInsights.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureMonitorNetworkInsights
+title: Use Azure Monitor Network Insights
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 3b24c03f-1fab-436e-b45c-4b4838f9f01a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-AzureMonitorNetworkInsightsNetworkResources.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-AzureMonitorNetworkInsightsNetworkResources.yaml
new file mode 100644
index 000000000..980ab0514
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-AzureMonitorNetworkInsightsNetworkResources.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureMonitorNetworkInsightsNetworkResources
+title: Use Azure Monitor Network Insights
+description: Azure Monitor Network Insights provides a comprehensive view of health
+ and metrics for network resources, including Application Gateway. For additional
+ details and supported capabilities for Application Gateway, see Azure Monitor Network
+ insights.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 98530e65-c941-48d2-8ce7-55649e17a701
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-CapacityMetrics.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-CapacityMetrics.yaml
new file mode 100644
index 000000000..b90eb574a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-CapacityMetrics.yaml
@@ -0,0 +1,15 @@
+name: wafsg-CapacityMetrics
+title: Monitor capacity metrics
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 188b768d-c65f-46c8-b0a7-e7b288b0c15d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-DataPlaneRelatedProblemsIncorrectKeyVaultConfiguration.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-DataPlaneRelatedProblemsIncorrectKeyVaultConfiguration.yaml
new file mode 100644
index 000000000..48e1c4386
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-DataPlaneRelatedProblemsIncorrectKeyVaultConfiguration.yaml
@@ -0,0 +1,20 @@
+name: wafsg-DataPlaneRelatedProblemsIncorrectKeyVaultConfiguration
+title: Monitor Key Vault configuration issues using Azure Advisor
+description: Application Gateway checks for the renewed certificate version in the
+ linked Key Vault at every 4-hour interval. If it is inaccessible due to any incorrect
+ Key Vault configuration, it logs that error and pushes a corresponding Advisor recommendation.
+ You must configure the Advisor alerts to stay updated and fix such issues immediately
+ to avoid any Control or Data plane related problems. For more information, see Investigating
+ and resolving key vault errors. To set an alert for this specific case, use the
+ Recommendation Type as Resolve Azure Key Vault issue for your Application Gateway.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 91366299-47be-4ee6-a9c1-adfa6b11beff
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-KeyVaultConfigurationIssuesAzureAdvisor.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-KeyVaultConfigurationIssuesAzureAdvisor.yaml
new file mode 100644
index 000000000..d3f5b9dc1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-KeyVaultConfigurationIssuesAzureAdvisor.yaml
@@ -0,0 +1,15 @@
+name: wafsg-KeyVaultConfigurationIssuesAzureAdvisor
+title: Monitor Key Vault configuration issues using Azure Advisor
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: b53da374-3be5-405b-b543-b104491fc2e5
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-LoadBalancerTcpResetMatchTimeoutSettings.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-LoadBalancerTcpResetMatchTimeoutSettings.yaml
new file mode 100644
index 000000000..bd4582bff
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-LoadBalancerTcpResetMatchTimeoutSettings.yaml
@@ -0,0 +1,18 @@
+name: wafsg-LoadBalancerTcpResetMatchTimeoutSettings
+title: Match timeout settings with the backend application
+description: Ensure you have configured the IdleTimeout settings to match the listener
+ and traffic characteristics of the backend application. The default value is set
+ to four minutes and can be configured to a maximum of 30. For more information,
+ see Load Balancer TCP Reset and Idle Timeout.For workload considerations, see Monitoring
+ application health for reliability.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 9dd45a04-f63b-4ba8-bb19-0fa074b57dcc
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-MatchTimeoutSettingsBackendApplication.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-MatchTimeoutSettingsBackendApplication.yaml
new file mode 100644
index 000000000..f5cc66c2a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-MatchTimeoutSettingsBackendApplication.yaml
@@ -0,0 +1,15 @@
+name: wafsg-MatchTimeoutSettingsBackendApplication
+title: Match timeout settings with the backend application
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 02610076-047b-4f48-9c50-0172c4bac957
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SameVirtualNetworkSnatPortLimitations.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SameVirtualNetworkSnatPortLimitations.yaml
new file mode 100644
index 000000000..58a274740
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SameVirtualNetworkSnatPortLimitations.yaml
@@ -0,0 +1,23 @@
+name: wafsg-SameVirtualNetworkSnatPortLimitations
+title: Consider SNAT port limitations in your design
+description: SNAT port limitations are important for backend connections on the Application
+ Gateway. There are separate factors that affect how Application Gateway reaches
+ the SNAT port limit. For example, if the backend is a public IP address, it will
+ require its own SNAT port. In order to avoid SNAT port limitations, you can increase
+ the number of instances per Application Gateway, scale out the backends to have
+ more IP addresses, or move your backends into the same virtual network and use private
+ IP addresses for the backends.Requests per second (RPS) on the Application Gateway
+ will be affected if the SNAT port limit is reached. For example, if an Application
+ Gateway reaches the SNAT port limit, then it won't be able to open a new connection
+ to the backend, and the request will fail.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 9bb30e02-43fd-4ed2-9189-c9a23ae9933f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SnatPortLimitations.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SnatPortLimitations.yaml
new file mode 100644
index 000000000..749414f9f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SnatPortLimitations.yaml
@@ -0,0 +1,15 @@
+name: wafsg-SnatPortLimitations
+title: Configure and monitor SNAT port limitations
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: d32ea6dc-3993-4536-b570-bc4d0236a136
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SnatPortLimitationsDesign.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SnatPortLimitationsDesign.yaml
new file mode 100644
index 000000000..e4cbca03f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-SnatPortLimitationsDesign.yaml
@@ -0,0 +1,15 @@
+name: wafsg-SnatPortLimitationsDesign
+title: Consider SNAT port limitations in your design
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: fa9b6a56-3144-4d79-b409-8fc896c4ba76
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-UnhealthyHostCountResponseStatusBackendLastByteResponseTime.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-UnhealthyHostCountResponseStatusBackendLastByteResponseTime.yaml
new file mode 100644
index 000000000..1afbfaa13
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-UnhealthyHostCountResponseStatusBackendLastByteResponseTime.yaml
@@ -0,0 +1,18 @@
+name: wafsg-UnhealthyHostCountResponseStatusBackendLastByteResponseTime
+title: Troubleshoot using metrics
+description: There are other metrics that can indicate issues either at Application
+ Gateway or the backend. We recommend evaluating the following alerts:- Unhealthy
+ Host Count- Response Status (dimension 4xx and 5xx)- Backend Response Status (dimension
+ 4xx and 5xx)- Backend Last Byte Response Time- Application Gateway Total TimeFor
+ more information, see Metrics for Application Gateway.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 00ddc7ab-c60b-4249-92e0-939a99ac890c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-WebApplicationFirewallApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-WebApplicationFirewallApplicationGateway.yaml
new file mode 100644
index 000000000..92ffa1f7e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-WebApplicationFirewallApplicationGateway.yaml
@@ -0,0 +1,15 @@
+name: wafsg-WebApplicationFirewallApplicationGateway
+title: Enable diagnostics on Application Gateway and Web Application Firewall (WAF)
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: 63eb295f-ef20-4749-a576-fbbdd528d093
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-WebApplicationFirewallApplicationGatewayInstances.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-WebApplicationFirewallApplicationGatewayInstances.yaml
new file mode 100644
index 000000000..7567a5450
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Operations/wafsg-WebApplicationFirewallApplicationGatewayInstances.yaml
@@ -0,0 +1,17 @@
+name: wafsg-WebApplicationFirewallApplicationGatewayInstances
+title: Enable diagnostics on Application Gateway and Web Application Firewall (WAF)
+description: Diagnostic logs allow you to view firewall logs, performance logs, and
+ access logs. Use these logs to manage and troubleshoot issues with Application Gateway
+ instances. For more information, see Back-end health and diagnostic logs for Application
+ Gateway.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Operations
+severity: 1
+labels:
+ guid: ee3b1f28-7d23-484a-a721-a0e0da65aed8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/revcl-GlobalWebTrafficRoutingQuickGlobalFailover.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/revcl-GlobalWebTrafficRoutingQuickGlobalFailover.yaml
new file mode 100644
index 000000000..3ca1fe2b2
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/revcl-GlobalWebTrafficRoutingQuickGlobalFailover.yaml
@@ -0,0 +1,16 @@
+name: revcl-GlobalWebTrafficRoutingQuickGlobalFailover
+title: Configure Front Door to optimize global web traffic routing and top-tier end-user
+ performance, and reliability through quick global failover
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: eadc3164-4a0f-461c-85f1-1a372c04dfd1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/front-door-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/revcl-TransportLayerLoadBalancing.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/revcl-TransportLayerLoadBalancing.yaml
new file mode 100644
index 000000000..eb9f1eda6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/revcl-TransportLayerLoadBalancing.yaml
@@ -0,0 +1,15 @@
+name: revcl-TransportLayerLoadBalancing
+title: Use transport layer load balancing
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 29dcc19f-a8fa-4c35-8281-290577538793
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/load-balancer/load-balancer-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewayInstanceCount.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewayInstanceCount.yaml
new file mode 100644
index 000000000..bb9a725bf
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewayInstanceCount.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewayInstanceCount
+title: Estimate the Application Gateway instance count
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 63dd2b1b-6076-46c9-8b80-54a255b77f49
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewaySubnetSize.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewaySubnetSize.yaml
new file mode 100644
index 000000000..2a3e70860
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewaySubnetSize.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewaySubnetSize
+title: Define Application Gateway subnet size
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 0e38111f-c642-46ca-a2a0-72d5eb520cab
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewayVFeaturesPerformanceBenefits.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewayVFeaturesPerformanceBenefits.yaml
new file mode 100644
index 000000000..94f489065
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-ApplicationGatewayVFeaturesPerformanceBenefits.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ApplicationGatewayVFeaturesPerformanceBenefits
+title: Take advantage of Application Gateway V2 features for autoscaling and performance
+ benefits
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 66695955-0890-4f69-ab88-292a6c641558
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-AverageCurrentComputeUnitsApplicationGatewayVSku.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-AverageCurrentComputeUnitsApplicationGatewayVSku.yaml
new file mode 100644
index 000000000..8c0144553
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-AverageCurrentComputeUnitsApplicationGatewayVSku.yaml
@@ -0,0 +1,24 @@
+name: wafsg-AverageCurrentComputeUnitsApplicationGatewayVSku
+title: Define the minimum instance count
+description: For Application Gateway v2 SKU, autoscaling takes some time (approximately
+ six to seven minutes) before the additional set of instances is ready to serve traffic.
+ During that time, if there are short spikes in traffic, expect transient latency
+ or loss of traffic.We recommend that you set your minimum instance count to an optimal
+ level. After you estimate the average instance count and determine your Application
+ Gateway autoscaling trends, define the minimum instance count based on your application
+ patterns. For information, see Application Gateway high traffic support.Check the
+ Current Compute Units for the past one month. This metric represents the gateway's
+ CPU utilization. To define the minimum instance count, divide the peak usage by
+ 10. For example, if your average Current Compute Units in the past month is 50,
+ set the minimum instance count to five.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: af6f1096-14f3-465c-8691-b15cf5361942
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-MaximumInstanceCount.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-MaximumInstanceCount.yaml
new file mode 100644
index 000000000..274764fec
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-MaximumInstanceCount.yaml
@@ -0,0 +1,15 @@
+name: wafsg-MaximumInstanceCount
+title: Define the maximum instance count
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: adb085fc-433d-4bde-815d-77486524d8a3
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-MinimumInstanceCount.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-MinimumInstanceCount.yaml
new file mode 100644
index 000000000..111f2cb83
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-MinimumInstanceCount.yaml
@@ -0,0 +1,15 @@
+name: wafsg-MinimumInstanceCount
+title: Define the minimum instance count
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 33ae0084-c64e-471f-aef1-c84a5cf77d5d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-OtherApplicationGatewayResourcesOnePrivateIpAddress.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-OtherApplicationGatewayResourcesOnePrivateIpAddress.yaml
new file mode 100644
index 000000000..a04d7f7a0
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-OtherApplicationGatewayResourcesOnePrivateIpAddress.yaml
@@ -0,0 +1,26 @@
+name: wafsg-OtherApplicationGatewayResourcesOnePrivateIpAddress
+title: Define Application Gateway subnet size
+description: Application Gateway needs a dedicated subnet within a virtual network.
+ The subnet can have multiple instances of the deployed Application Gateway resource.
+ You can also deploy other Application Gateway resources in that subnet, v1 or v2
+ SKU.Here are some considerations for defining the subnet size:- Application Gateway
+ uses one private IP address per instance and another private IP address if a private
+ front-end IP is configured.- Azure reserves five IP addresses in each subnet for
+ internal use.- Application Gateway (Standard or WAF SKU) can support up to 32 instances.
+ Taking 32 instance IP addresses + 1 private front-end IP + 5 Azure reserved, a minimum
+ subnet size of /26 is recommended. Because the Standard_v2 or WAF_v2 SKU can support
+ up to 125 instances, using the same calculation, a subnet size of /24 is recommended.-
+ If you want to deploy additional Application Gateway resources in the same subnet,
+ consider the additional IP addresses that will be required for their maximum instance
+ count for both, Standard and Standard v2.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 6d9985b2-103c-4b47-82b9-148e22af311b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-SufficientAvailableIpAddressesMaximumAutoscaleInstanceCount.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-SufficientAvailableIpAddressesMaximumAutoscaleInstanceCount.yaml
new file mode 100644
index 000000000..9603ed2e9
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-SufficientAvailableIpAddressesMaximumAutoscaleInstanceCount.yaml
@@ -0,0 +1,17 @@
+name: wafsg-SufficientAvailableIpAddressesMaximumAutoscaleInstanceCount
+title: Define the maximum instance count
+description: We recommend 125 as the maximum autoscale instance count. Make sure the
+ subnet that has the Application Gateway has sufficient available IP addresses to
+ support the scale-up set of instances.Setting the maximum instance count to 125
+ has no cost implications because you're billed only for the consumed capacity.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: e1a91738-8def-4c1e-83ce-cd7dac9c986a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-VSkuApplicationGatewayWebApplicationFirewall.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-VSkuApplicationGatewayWebApplicationFirewall.yaml
new file mode 100644
index 000000000..626ed4707
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Performance/wafsg-VSkuApplicationGatewayWebApplicationFirewall.yaml
@@ -0,0 +1,21 @@
+name: wafsg-VSkuApplicationGatewayWebApplicationFirewall
+title: Take advantage of features for autoscaling and performance benefits
+description: The v2 SKU offers autoscaling to ensure that your Application Gateway
+ can scale up as traffic increases. When compared to v1 SKU, v2 has capabilities
+ that enhance the performance of the workload. For example, better TLS offload performance,
+ quicker deployment and update times, zone redundancy, and more. For more information
+ about autoscaling features, see Scaling Application Gateway v2 and WAF v2.If you
+ are running v1 SKU Application gateway, consider migrating to the Application gateway
+ v2 SKU. For more information, see Migrate Azure Application Gateway and Web Application
+ Firewall from v1 to v2.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Performance
+severity: 1
+labels:
+ guid: 22740e5f-f63b-4b82-8629-fb9d4fd74c36
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/revcl-ApplicationGatewayAvailabilityZones.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/revcl-ApplicationGatewayAvailabilityZones.yaml
new file mode 100644
index 000000000..c6d8e63b5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/revcl-ApplicationGatewayAvailabilityZones.yaml
@@ -0,0 +1,19 @@
+name: revcl-ApplicationGatewayAvailabilityZones
+title: Deploy Application Gateway across Availability Zones
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 060c6964-52b5-48db-af8b-83e4b2d85349
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/reliability/migrate-app-gateway-v2
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries:
+ arg: resources | where type =~ 'microsoft.network/applicationGateways' | extend
+ compliant = (isnotnull(zones) and array_length(zones) > 1) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/revcl-MinimumAmountAutoscaling.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/revcl-MinimumAmountAutoscaling.yaml
new file mode 100644
index 000000000..f00da8569
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/revcl-MinimumAmountAutoscaling.yaml
@@ -0,0 +1,20 @@
+name: revcl-MinimumAmountAutoscaling
+title: Configure autoscaling with a minimum amount of instances of two.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 135bf4ac-f9db-461f-b76b-2ee9e30b12c0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/application-gateway-autoscaling-zone-redundant
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries:
+ arg: resources | where type =~ 'microsoft.network/applicationGateways' | extend
+ compliant = (isnotnull(properties.autoscaleConfiguration) and properties.autoscaleConfiguration.minCapacity
+ >= 2) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ApplicationGatewayBackendPool.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ApplicationGatewayBackendPool.yaml
new file mode 100644
index 000000000..cbe95cb0f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ApplicationGatewayBackendPool.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ApplicationGatewayBackendPool
+title: Plan for rule updates
+description: Plan enough time for updates before accessing Application Gateway or
+ making further changes. For example, removing servers from backend pool might take
+ some time because they have to drain existing connections.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 67b006ed-a8b2-4f66-806b-ed9d83f94982
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ApplicationGatewayInstanceShortTransientFailures.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ApplicationGatewayInstanceShortTransientFailures.yaml
new file mode 100644
index 000000000..5c1ecfdb4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ApplicationGatewayInstanceShortTransientFailures.yaml
@@ -0,0 +1,22 @@
+name: wafsg-ApplicationGatewayInstanceShortTransientFailures
+title: Review the impact of the interval and threshold settings on health probes
+description: The health probe sends requests to the configured endpoint at a set interval.
+ Also, there's a threshold of failed requests that will be tolerated before the backend
+ is marked unhealthy. These numbers present a trade-off.- Setting a higher interval
+ puts a higher load on your service. Each Application Gateway instance sends its
+ own health probes, so 100 instances every 30 seconds means 100 requests per 30 seconds.-
+ Setting a lower interval leaves more time before an outage is detected.- Setting
+ a low unhealthy threshold might mean that short, transient failures might take down
+ a backend. - Setting a high threshold it can take longer to take a backend out of
+ rotation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 1690d11b-f93e-4bc4-9db3-25e56a9b2699
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-AzureApplicationGatewayNewDeployments.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-AzureApplicationGatewayNewDeployments.yaml
new file mode 100644
index 000000000..75c920d78
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-AzureApplicationGatewayNewDeployments.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureApplicationGatewayNewDeployments
+title: In new deployments, use Azure Application Gateway v2 unless there is a compelling
+ reason to use Azure Application Gateway v1.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 1b30c500-4ccd-4608-be41-d21c58fb0bb4
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-AzureFrontDoorApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-AzureFrontDoorApplicationGateway.yaml
new file mode 100644
index 000000000..b860f6caf
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-AzureFrontDoorApplicationGateway.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureFrontDoorApplicationGateway
+title: When using Azure Front Door and Application Gateway to protect `HTTP/S` applications,
+ use WAF policies in Front Door and lock down Application Gateway to receive traffic
+ only from Azure Front Door.
+description: Certain scenarios can force you to implement rules specifically on Application
+ Gateway. For example, if ModSec CRS 2.2.9, CRS 3.0 or CRS 3.1 rules are required,
+ these rules can be only implemented on Application Gateway. Conversely, rate-limiting
+ and geo-filtering are available only on Azure Front Door, not on AppGateway.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: f3b0ac39-7b7c-4fea-a540-6aa367afbc12
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-DirectDependencyCallHealthEndpoints.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-DirectDependencyCallHealthEndpoints.yaml
new file mode 100644
index 000000000..df294555e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-DirectDependencyCallHealthEndpoints.yaml
@@ -0,0 +1,22 @@
+name: wafsg-DirectDependencyCallHealthEndpoints
+title: Verify downstream dependencies through health endpoints
+description: Suppose each backend has its own dependencies to ensure failures are
+ isolated. For example, an application hosted behind Application Gateway might have
+ multiple backends, each connected to a different database (replica). When such a
+ dependency fails, the application might be working but won't return valid results.
+ For that reason, the health endpoint should ideally validate all dependencies. Keep
+ in mind that if each call to the health endpoint has a direct dependency call, that
+ database would receive 100 queries every 30 seconds instead of 1. To avoid this,
+ the health endpoint should cache the state of the dependencies for a short period
+ of time.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: f5d846c8-9341-4a57-a77e-ccf4e9818c7f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-DownstreamDependenciesHealthEndpoints.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-DownstreamDependenciesHealthEndpoints.yaml
new file mode 100644
index 000000000..bd1d40969
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-DownstreamDependenciesHealthEndpoints.yaml
@@ -0,0 +1,15 @@
+name: wafsg-DownstreamDependenciesHealthEndpoints
+title: Verify downstream dependencies through health endpoints
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: cdc7160c-bc9d-40d9-ba43-bc9fa804c8c6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-HealthProbesBackendUnavailability.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-HealthProbesBackendUnavailability.yaml
new file mode 100644
index 000000000..1bb811c0d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-HealthProbesBackendUnavailability.yaml
@@ -0,0 +1,15 @@
+name: wafsg-HealthProbesBackendUnavailability
+title: Use health probes to detect backend unavailability
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: ca9df7df-8e89-4216-b9a2-0384af19938d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-MultipleBackendInstancesBackendUnavailability.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-MultipleBackendInstancesBackendUnavailability.yaml
new file mode 100644
index 000000000..1654944ca
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-MultipleBackendInstancesBackendUnavailability.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MultipleBackendInstancesBackendUnavailability
+title: Use health probes to detect backend unavailability
+description: If Application Gateway is used to load balance incoming traffic over
+ multiple backend instances, we recommend the use of health probes. These will ensure
+ that traffic is not routed to backends that are unable to handle the traffic.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 6dcb1632-2ca3-411f-8555-69d689b8054f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-RuleUpdatesPlan.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-RuleUpdatesPlan.yaml
new file mode 100644
index 000000000..ac5b84357
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-RuleUpdatesPlan.yaml
@@ -0,0 +1,15 @@
+name: wafsg-RuleUpdatesPlan
+title: Plan for rule updates
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 174a65f5-51ca-483e-937f-9096d4468afa
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ThresholdSettingsHealthProbes.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ThresholdSettingsHealthProbes.yaml
new file mode 100644
index 000000000..8c7353464
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ThresholdSettingsHealthProbes.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ThresholdSettingsHealthProbes
+title: Review the impact of the interval and threshold settings on health probes
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 9754bccf-e2a5-4b36-9bca-058ec0a08fff
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-UseApplicationGatewayWebApplicationFirewall.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-UseApplicationGatewayWebApplicationFirewall.yaml
new file mode 100644
index 000000000..1272e7778
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-UseApplicationGatewayWebApplicationFirewall.yaml
@@ -0,0 +1,16 @@
+name: wafsg-UseApplicationGatewayWebApplicationFirewall
+title: Use Application Gateway with Web Application Firewall (WAF) within a virtual
+ network to protect inbound `HTTP/S` traffic from the Internet.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 56195bba-5bc2-4f00-976e-f2734b46fe2b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ZoneAwareConfigurationInstances.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ZoneAwareConfigurationInstances.yaml
new file mode 100644
index 000000000..7374ac748
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Reliability/wafsg-ZoneAwareConfigurationInstances.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ZoneAwareConfigurationInstances
+title: Deploy the instances in a zone-aware configuration, where available.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: dc6efb36-f70f-41ed-aaf2-f8667781c123
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewayNativeSupport.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewayNativeSupport.yaml
new file mode 100644
index 000000000..1b40d57a4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewayNativeSupport.yaml
@@ -0,0 +1,15 @@
+name: revcl-ApplicationGatewayNativeSupport
+title: Use Application Gateway for native support for WebSocket and HTTP/2 protocols
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 2
+labels:
+ guid: fa64b4dd-35c2-4047-ac5c-45dfbf8b0db9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/application-gateway-websocket
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewaySubnetInboundTraffic.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewaySubnetInboundTraffic.yaml
new file mode 100644
index 000000000..8a3bbf7aa
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewaySubnetInboundTraffic.yaml
@@ -0,0 +1,16 @@
+name: revcl-ApplicationGatewaySubnetInboundTraffic
+title: Filter inbound traffic in the backends so that they only accept connections
+ from the Application Gateway subnet, for example with NSGs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: d4eb8667-f8cb-4cdd-94e6-2f967ba98f88
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/scenario-secured-hub-app-gateway
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewayVSku.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewayVSku.yaml
new file mode 100644
index 000000000..63793cd5b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewayVSku.yaml
@@ -0,0 +1,19 @@
+name: revcl-ApplicationGatewayVSku
+title: Ensure you are using Application Gateway v2 SKU
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 553585a6-abe0-11ed-afa1-0242ac120002
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/overview-v2
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries:
+ arg: resources | where type == 'microsoft.network/applicationgateways' | project
+ id, compliant = properties.sku.name in ('Standard_v2', 'WAF_v2') | project id,compliant
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewaysIpPrefixes.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewaysIpPrefixes.yaml
new file mode 100644
index 000000000..9c1c47f87
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ApplicationGatewaysIpPrefixes.yaml
@@ -0,0 +1,27 @@
+name: revcl-ApplicationGatewaysIpPrefixes
+title: Your Application Gateways v2 should be deployed in subnets with IP prefixes
+ equal or larger than /24
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: dfc50f87-3800-424c-937b-ed5f186e7c15
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/configuration-infrastructure#size-of-the-subnet
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries:
+ arg: resources | where type=='microsoft.network/applicationgateways' | extend subnetId
+ = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id) | project
+ id, subnetId | join (resources | where type=='microsoft.network/virtualnetworks'
+ | project id,subnets=properties.subnets | mv-expand subnets | mv-expand subnets.properties.addressPrefixes
+ | project id, subnetId = tostring(subnets.id), prefix1 = subnets.properties.addressPrefix,
+ prefix2 = subnets.properties.addressPrefixes | mv-expand prefix2 | extend prefix
+ = iff(isnotnull(prefix1), prefix1, prefix2) | extend subnetPrefixLength = split(prefix,
+ '/')[1])on subnetId | extend compliant = (subnetPrefixLength <= 24 or subnetPrefixLength
+ == 64) | distinct id,compliant
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafBotProtectionRuleBotRules.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafBotProtectionRuleBotRules.yaml
new file mode 100644
index 000000000..ff31805a3
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafBotProtectionRuleBotRules.yaml
@@ -0,0 +1,21 @@
+name: revcl-AzureApplicationGatewayWafBotProtectionRuleBotRules
+title: Enable the Azure Application Gateway WAF bot protection rule set The bot rules
+ detect good and bad bots.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: 2f8e81eb-8e68-4026-8b1f-70f9b05f7cf9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/bot-protection
+queries:
+ arg: resources | where type == 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies'
+ | mv-expand properties.managedRules.managedRuleSets | project id, rulesettype
+ = properties_managedRules_managedRuleSets.ruleSetType | extend compliant1 = (rulesettype
+ == 'Microsoft_BotManagerRuleSet') | project id, compliant1 | summarize compliant
+ = max(compliant1) by id
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafFalsePositiveDetections.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafFalsePositiveDetections.yaml
new file mode 100644
index 000000000..6fefc88c6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafFalsePositiveDetections.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureApplicationGatewayWafFalsePositiveDetections
+title: Tune the Azure Application Gateway WAF for your workload. Reduce false positive
+ detections.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: a4dd86d3-5ffa-408c-b660-cce073d085b8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#tune-your-waf
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafLargeAmounts.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafLargeAmounts.yaml
new file mode 100644
index 000000000..07b0e4231
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafLargeAmounts.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureApplicationGatewayWafLargeAmounts
+title: Add rate limiting to the Azure Application Gateway WAF. Rate limiting blocks
+ clients accidentally or intentionally sending large amounts of traffic in a short
+ period of time.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 43fae595-8a32-4299-a69e-0f32c454dcc9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafPolicyBodyInspectionFeature.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafPolicyBodyInspectionFeature.yaml
new file mode 100644
index 000000000..158d693fb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafPolicyBodyInspectionFeature.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureApplicationGatewayWafPolicyBodyInspectionFeature
+title: Enable request body inspection feature enabled in Azure Application Gateway
+ WAF policy.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: 8ea8e0d4-84e8-4b33-aeab-493f6391b4d6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafRateLimitsHighRateLimitThresholds.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafRateLimitsHighRateLimitThresholds.yaml
new file mode 100644
index 000000000..81e410d69
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafRateLimitsHighRateLimitThresholds.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureApplicationGatewayWafRateLimitsHighRateLimitThresholds
+title: 'Use a high threshold for Azure Application Gateway WAF rate limits. High rate
+ limit thresholds avoid blocking legitimate traffic, while still providing protection
+ against extremely high numbers of requests that might overwhelm your infrastructure. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 041e0ad8-7b12-4694-a0b7-a0e25ee2470f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/rate-limiting-overview#rate-limiting-details
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafUnknownZzLocation.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafUnknownZzLocation.yaml
new file mode 100644
index 000000000..3ca3d194f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzureApplicationGatewayWafUnknownZzLocation.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureApplicationGatewayWafUnknownZzLocation
+title: Specify the unknown (ZZ) location when geo-filtering traffic with the Azure
+ Application Gateway WAF. Avoid accidentally blocking legitimate requests when IP
+ addresses can't be geo-matched.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 349a15c1-52f4-4319-9078-3895d95ecafd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/geomatch-custom-rules
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzurePaasServicesControlPlaneTraffic.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzurePaasServicesControlPlaneTraffic.yaml
new file mode 100644
index 000000000..26442240b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-AzurePaasServicesControlPlaneTraffic.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzurePaasServicesControlPlaneTraffic
+title: Ensure that control-plane communication for Azure PaaS services injected into
+ a virtual network is not broken, for example with a 0.0.0.0/0 route or an NSG rule
+ that blocks control plane traffic.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: d301d6e8-72e5-42e3-911c-c58b5a4b1511
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-network/vnet-integration-for-azure-services
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/?source=learn
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-BackendServersTraffic.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-BackendServersTraffic.yaml
new file mode 100644
index 000000000..e00ef5b97
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-BackendServersTraffic.yaml
@@ -0,0 +1,15 @@
+name: revcl-BackendServersTraffic
+title: You should encrypt traffic to the backend servers.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: a66f0fd8-2ca4-422e-8df3-235148127ca2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/ssl-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-GeographicalRegionsExpectedCountries-1.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-GeographicalRegionsExpectedCountries-1.yaml
new file mode 100644
index 000000000..e7b014a17
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-GeographicalRegionsExpectedCountries-1.yaml
@@ -0,0 +1,16 @@
+name: revcl-GeographicalRegionsExpectedCountries-1
+title: If you are not expecting traffic from all geographical regions, use geo-filters
+ to block traffic from non-expected countries.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 2
+labels:
+ guid: 99937189-ff78-492a-b9ca-18d828d82b37
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#geo-filtering-best-practices
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-Http.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-Http.yaml
new file mode 100644
index 000000000..0cc1ca294
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-Http.yaml
@@ -0,0 +1,15 @@
+name: revcl-Http
+title: Redirect HTTP to HTTPS
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 0158fcb6-0bc1-4687-832f-cc7c359c22d2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/redirect-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-HttpRequestsResponseHeaders.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-HttpRequestsResponseHeaders.yaml
new file mode 100644
index 000000000..b9802cdf5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-HttpRequestsResponseHeaders.yaml
@@ -0,0 +1,16 @@
+name: revcl-HttpRequestsResponseHeaders
+title: Edit HTTP requests and response headers for easier routing and information
+ exchange between the client and server
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: f850d46f-f5d7-4b17-b48c-a780741402e1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/rewrite-http-headers-url
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-InboundHttpSConnectionsLandingZoneVirtualNetwork.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-InboundHttpSConnectionsLandingZoneVirtualNetwork.yaml
new file mode 100644
index 000000000..796379200
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-InboundHttpSConnectionsLandingZoneVirtualNetwork.yaml
@@ -0,0 +1,23 @@
+name: revcl-InboundHttpSConnectionsLandingZoneVirtualNetwork
+title: Deploy Azure Application Gateway v2 or partner NVAs used for proxying inbound
+ HTTP(S) connections within the landing-zone virtual network and with the apps that
+ they're securing.
+description: Administration of reverse proxies in general and WAF in particular is
+ closer to the application than to networking, so they belong in the same subscription
+ as the app. Centralizing the Application Gateway and WAF in the connectivity subscription
+ might be OK if it is managed by one single team.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 48b662d6-d15f-4512-a654-98f6dfe237de
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-IpProtectionPlansPublicIpAddresses-1.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-IpProtectionPlansPublicIpAddresses-1.yaml
new file mode 100644
index 000000000..40b213439
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-IpProtectionPlansPublicIpAddresses-1.yaml
@@ -0,0 +1,18 @@
+name: revcl-IpProtectionPlansPublicIpAddresses-1
+title: Use a DDoS Network or IP protection plans for all Public IP addresses in application
+ landing zones.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: f109e1f3-c79b-4f14-82de-6b5c22314d08
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-LatestAzureApplicationGatewayWafRuleSetVersionRuleSetUpdates.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-LatestAzureApplicationGatewayWafRuleSetVersionRuleSetUpdates.yaml
new file mode 100644
index 000000000..9b51a3a5a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-LatestAzureApplicationGatewayWafRuleSetVersionRuleSetUpdates.yaml
@@ -0,0 +1,16 @@
+name: revcl-LatestAzureApplicationGatewayWafRuleSetVersionRuleSetUpdates
+title: Use the latest Azure Application Gateway WAF rule set version. Rule set updates
+ are regularly updated to take account of the current threat landscape.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 6c19dfd5-a61c-436c-9001-491b9b3d0228
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/best-practices#use-the-latest-ruleset-versions
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-MultipleWebApplicationsDomainName.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-MultipleWebApplicationsDomainName.yaml
new file mode 100644
index 000000000..81f07584d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-MultipleWebApplicationsDomainName.yaml
@@ -0,0 +1,16 @@
+name: revcl-MultipleWebApplicationsDomainName
+title: Configure routing based on host or domain name for multiple web applications
+ on a single gateway
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 276898c1-af5e-4819-9e8e-049c7801ab9d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/multiple-site-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ServiceUpdatesExistingMembrs.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ServiceUpdatesExistingMembrs.yaml
new file mode 100644
index 000000000..d7dfeee94
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-ServiceUpdatesExistingMembrs.yaml
@@ -0,0 +1,16 @@
+name: revcl-ServiceUpdatesExistingMembrs
+title: Enable connection draining during planned service updates to prevent connection
+ loss to existing membrs of the backend pool
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: ff353ad8-15fb-4ae8-9fc5-a85a36d36a35
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/configuration-http-settings
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-SslCertificateManagementBackendServerFarm.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-SslCertificateManagementBackendServerFarm.yaml
new file mode 100644
index 000000000..499d6c023
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-SslCertificateManagementBackendServerFarm.yaml
@@ -0,0 +1,16 @@
+name: revcl-SslCertificateManagementBackendServerFarm
+title: Centralize SSL certificate management to reduce encryption and decryption overhead
+ from a backend server farm
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 5fe365b6-58e8-47ed-a8cf-5163850380a2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/application-gateway/create-ssl-portal
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-WafPolicyApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-WafPolicyApplicationGateway.yaml
new file mode 100644
index 000000000..f4966b001
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-WafPolicyApplicationGateway.yaml
@@ -0,0 +1,22 @@
+name: revcl-WafPolicyApplicationGateway
+title: Deploy your WAF policy for Application Gateway in 'Prevention' mode.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: baf8e317-2397-4d49-b3d1-0dcc16d8778d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings
+queries:
+ arg: resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies'
+ | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks,
+ enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode
+ | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy,
+ '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3),
+ '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')),
+ enabledState, mode
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-WebApplicationFirewall.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-WebApplicationFirewall.yaml
new file mode 100644
index 000000000..4971ee7e5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/revcl-WebApplicationFirewall.yaml
@@ -0,0 +1,15 @@
+name: revcl-WebApplicationFirewall
+title: You should use a Web Application Firewall.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 0
+labels:
+ guid: 3dba65cb-834d-44d8-a3ca-a6aa2f1587be
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewayCapacityChangesApplicationGatewayCapacityRequirements.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewayCapacityChangesApplicationGatewayCapacityRequirements.yaml
new file mode 100644
index 000000000..3f896ca0a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewayCapacityChangesApplicationGatewayCapacityRequirements.yaml
@@ -0,0 +1,19 @@
+name: wafsg-ApplicationGatewayCapacityChangesApplicationGatewayCapacityRequirements
+title: Be aware of Application Gateway capacity changes when enabling WAF
+description: When WAF is enabled, every request must be buffered by the Application
+ Gateway until it fully arrives, checks if the request matches with any rule violation
+ in its core rule set, and then forwards the packet to the backend instances. When
+ there are large file uploads (30MB+ in size), it can result in a significant latency.
+ Because Application Gateway capacity requirements are different with WAF, we do
+ not recommend enabling WAF on Application Gateway without proper testing and validation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: fb24f724-e47b-46ec-a3cb-426fe159fdbf
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewayCapacityChangesWaf.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewayCapacityChangesWaf.yaml
new file mode 100644
index 000000000..69b218a10
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewayCapacityChangesWaf.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewayCapacityChangesWaf
+title: Be aware of Application Gateway capacity changes when enabling WAF
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 1c10e986-48da-4cf8-acd6-2a7f7c940735
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewaySubnetUdrs.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewaySubnetUdrs.yaml
new file mode 100644
index 000000000..68113c1e6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewaySubnetUdrs.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ApplicationGatewaySubnetUdrs
+title: Refrain from using UDRs on the Application Gateway subnet
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 4890a129-6456-48e0-843c-195848a1eeea
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewaySubnetUserDefinedRoutes.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewaySubnetUserDefinedRoutes.yaml
new file mode 100644
index 000000000..33387c424
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-ApplicationGatewaySubnetUserDefinedRoutes.yaml
@@ -0,0 +1,20 @@
+name: wafsg-ApplicationGatewaySubnetUserDefinedRoutes
+title: Refrain from using UDRs on the Application gateway subnet
+description: Using User Defined Routes (UDR) on the Application Gateway subnet can
+ cause some issues. Health status in the back-end might be unknown. Application Gateway
+ logs and metrics might not get generated. We recommend that you don't use UDRs on
+ the Application Gateway subnet so that you can view the back-end health, logs, and
+ metrics. If your organizations require to use UDR in the Application Gateway subnet,
+ please ensure you review the supported scenarios. For more information, see Supported
+ user-defined routes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 9ba32fa7-9880-47f8-aaed-93097fe35c99
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AppropriateDnsServerBackendPoolResources.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AppropriateDnsServerBackendPoolResources.yaml
new file mode 100644
index 000000000..87234a89e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AppropriateDnsServerBackendPoolResources.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AppropriateDnsServerBackendPoolResources
+title: Use an appropriate DNS server for backend pool resources
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 24847b21-1c0f-4ac9-9c00-f116155257b3
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AppropriateDnsServerPrivateDnsZone.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AppropriateDnsServerPrivateDnsZone.yaml
new file mode 100644
index 000000000..55617e916
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AppropriateDnsServerPrivateDnsZone.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AppropriateDnsServerPrivateDnsZone
+title: Use an appropriate DNS server for backend pool resources
+description: When the backend pool contains a resolvable FQDN, the DNS resolution
+ is based on a private DNS zone or custom DNS server (if configured on the VNet),
+ or it uses the default Azure-provided DNS.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 694b80a2-72fb-4d42-a249-e9c86fb4d00a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AzureKeyVaultTlsCertificates.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AzureKeyVaultTlsCertificates.yaml
new file mode 100644
index 000000000..4277a361b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-AzureKeyVaultTlsCertificates.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureKeyVaultTlsCertificates
+title: Use Azure Key Vault to store TLS certificates
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 2e0b6e8f-2784-4ea8-bec5-a128ddce6c98
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-EasierCertificateManagementTlsTermination.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-EasierCertificateManagementTlsTermination.yaml
new file mode 100644
index 000000000..fac039ede
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-EasierCertificateManagementTlsTermination.yaml
@@ -0,0 +1,19 @@
+name: wafsg-EasierCertificateManagementTlsTermination
+title: Use AppGateway for TLS termination
+description: There are advantages of using Application Gateway for TLS termination:-
+ Performance improves because requests going to different backends to have to re-authenticate
+ to each backend.- Better utilization of backend servers because they don't have
+ to perform TLS processing- Intelligent routing by accessing the request content.-
+ Easier certificate management because the certificate only needs to be installed
+ on Application Gateway.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 726e1bc8-2b65-4393-a9a5-1b73976c89ef
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-EasierCertificateRenewalAzureKeyVault.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-EasierCertificateRenewalAzureKeyVault.yaml
new file mode 100644
index 000000000..15e696bfc
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-EasierCertificateRenewalAzureKeyVault.yaml
@@ -0,0 +1,16 @@
+name: wafsg-EasierCertificateRenewalAzureKeyVault
+title: Use Azure Key Vault to store TLS certificates
+description: Application Gateway can be integrated with Key Vault. This provides stronger
+ security, easier separation of roles and responsibilities, support for managed certificates,
+ and an easier certificate renewal and rotation process.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 5692cf86-c36a-4c1b-a73f-1a73f5728cd0
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate-1.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate-1.yaml
new file mode 100644
index 000000000..3b6361771
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate-1.yaml
@@ -0,0 +1,19 @@
+name: wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate-1
+title: When re-encrypting backend traffic, ensure the backend server certificate contains
+ both the root and intermediate Certificate Authorities (CAs)
+description: A TLS certificate of the backend server must be issued by a well-known
+ CA. If the certificate was not issued by a trusted CA, the Application Gateway checks
+ if the certificate was issued by a trusted CA, and so on, until a trusted CA certificate
+ is found. Only then a secure connection is established. Otherwise, Application Gateway
+ marks the backend as unhealthy.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 08b9ecd4-7e8b-40a1-803b-bad57bec80ea
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate.yaml
new file mode 100644
index 000000000..b4dd45ca8
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate.yaml
@@ -0,0 +1,16 @@
+name: wafsg-IntermediateCertificateAuthoritiesBackendServerCertificate
+title: When re-encrypting backend traffic, ensure the backend server certificate contains
+ both the root and intermediate Certificate Authorities (CAs)
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: d3ed4722-efc4-4567-b9fe-e4254225913e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-LatestTlsPolicyVersionEnhancedSecurity.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-LatestTlsPolicyVersionEnhancedSecurity.yaml
new file mode 100644
index 000000000..b299b0468
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-LatestTlsPolicyVersionEnhancedSecurity.yaml
@@ -0,0 +1,15 @@
+name: wafsg-LatestTlsPolicyVersionEnhancedSecurity
+title: Set up a TLS policy for enhanced security
+description: Set up a TLS policy for extra security. Ensure you're always using the
+ latest TLS policy version available. This enforces TLS 1.2 and stronger ciphers.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 7547ed98-86fb-4a8f-94d8-162c5d6fd39d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-NetworkSecurityGroupsApplicationGatewaySubnet.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-NetworkSecurityGroupsApplicationGatewaySubnet.yaml
new file mode 100644
index 000000000..c31fa6070
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-NetworkSecurityGroupsApplicationGatewaySubnet.yaml
@@ -0,0 +1,17 @@
+name: wafsg-NetworkSecurityGroupsApplicationGatewaySubnet
+title: Comply with all NSG restrictions for Application Gateway
+description: NSGs are supported on Application Gateway subnet, but there are some
+ restrictions. For instance, some communication with certain port ranges is prohibited.
+ Make sure you understand the implications of those restrictions. For details, see
+ Network security groups.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: fc06eb7c-1989-4048-9c2f-6fc6e48fc334
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-NsgRestrictionsApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-NsgRestrictionsApplicationGateway.yaml
new file mode 100644
index 000000000..c76a344cf
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-NsgRestrictionsApplicationGateway.yaml
@@ -0,0 +1,15 @@
+name: wafsg-NsgRestrictionsApplicationGateway
+title: Comply with all NSG restrictions for Application Gateway
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 12e359f5-1252-4fdf-83e8-542e5d5d34d8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-TlsPolicyEnhancedSecurity.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-TlsPolicyEnhancedSecurity.yaml
new file mode 100644
index 000000000..2bb0c655b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-TlsPolicyEnhancedSecurity.yaml
@@ -0,0 +1,15 @@
+name: wafsg-TlsPolicyEnhancedSecurity
+title: Set up a TLS policy for enhanced security
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 297b842f-979b-474d-aa48-b6799a76c083
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-TlsTerminationAppgateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-TlsTerminationAppgateway.yaml
new file mode 100644
index 000000000..e0b297207
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/Security/wafsg-TlsTerminationAppgateway.yaml
@@ -0,0 +1,15 @@
+name: wafsg-TlsTerminationAppgateway
+title: Use AppGateway for TLS termination
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-application-gateway.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/applicationgateways
+waf: Security
+severity: 1
+labels:
+ guid: 61aac352-64e1-4351-8bc5-7dd84996adc6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-ApplicationGatewaySubnetWafVSku.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-ApplicationGatewaySubnetWafVSku.yaml
new file mode 100644
index 000000000..4888d797a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-ApplicationGatewaySubnetWafVSku.yaml
@@ -0,0 +1,31 @@
+name: aprl-ApplicationGatewaySubnetWafVSku
+title: Ensure Application Gateway Subnet is using a /24 subnet mask
+description: |-
+ Application Gateway v2 (Standard_v2 or WAF_v2 SKU) can support up to 125 instances. A /24 subnet isn't mandatory for deployment but is advised to provide enough space for autoscaling and maintenance upgrades.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 0
+labels:
+ guid: 8364fd0a-7c0e-e240-9d95-4bf965aec243
+ area: Other Best Practices
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This query will validate the subnet id for an appGW ends with a /24
+
+ resources
+ | where type =~ 'Microsoft.Network/applicationGateways'
+ | extend subnetid = tostring(properties.gatewayIPConfigurations[0].properties.subnet.id)
+ | join kind=leftouter(resources
+ | where type == "microsoft.network/virtualnetworks"
+ | mv-expand properties.subnets
+ | extend subnetid = tostring(properties_subnets.id)
+ | extend addressprefix = tostring(properties_subnets.properties.addressPrefix)
+ | project subnetid, addressprefix) on subnetid
+ | where addressprefix !endswith '/24'
+ | project recommendationId = "8364fd0a-7c0e-e240-9d95-4bf965aec243", name, id, tags, param1 = strcat('AppGW subnet prefix: ', addressprefix)
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-ApplicationGatewayZoneRedundantConfiguration.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-ApplicationGatewayZoneRedundantConfiguration.yaml
new file mode 100644
index 000000000..c5a55ed77
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-ApplicationGatewayZoneRedundantConfiguration.yaml
@@ -0,0 +1,24 @@
+name: aprl-ApplicationGatewayZoneRedundantConfiguration
+title: Deploy Application Gateway in a zone-redundant configuration
+description: |-
+ Deploying Application Gateway in a zone-aware configuration ensures continued customer access to services even if a specific zone goes down, as services in other zones remain available.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 0
+labels:
+ guid: c9c00f2a-3888-714b-a72b-b4c9e8fcffb2
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // list Application Gateways that are not configured to use at least 2 Availability Zones
+ resources
+ | where type =~ "microsoft.network/applicationGateways"
+ | where isnull(zones) or array_length(zones) < 2
+ | extend zoneValue = iff((isnull(zones)), "null", zones)
+ | project recommendationId = "c9c00f2a-3888-714b-a72b-b4c9e8fcffb2", name, id, tags, param1="Zones: No Zone or Zonal", param2=strcat("Zones value: ", zoneValue )
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-AzureApplicationGatewaysAvailableFashion.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-AzureApplicationGatewaysAvailableFashion.yaml
new file mode 100644
index 000000000..c09ca9ea0
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-AzureApplicationGatewaysAvailableFashion.yaml
@@ -0,0 +1,26 @@
+name: aprl-AzureApplicationGatewaysAvailableFashion
+title: Ensure Autoscale feature has been enabled
+description: |-
+ Azure Application Gateways v2 are always deployed in a highly available fashion with multiple instances by default. Enabling autoscale ensures the service is not reliant on manual intervention for scaling.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 1
+labels:
+ guid: 823b0cff-05c0-2e4e-a1e7-9965e1cfa16f
+ area: Scalability
+links: []
+queries:
+ arg: |+
+ // Azure Resource Graph Query
+ // This query will return all Application Gateways that do not have autoscale enabled or have a min capacity of 1
+ resources
+ | where type =~ "microsoft.network/applicationGateways"
+ | where isnull(properties.autoscaleConfiguration) or properties.autoscaleConfiguration.minCapacity <= 1
+ | project recommendationId = "823b0cff-05c0-2e4e-a1e7-9965e1cfa16f", name, id, tags, param1 = "autoScaleConfiguration: isNull or MinCapacity <= 1"
+ | order by id asc
+
+...
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-AzureKeyvaultIntegrationApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-AzureKeyvaultIntegrationApplicationGateway.yaml
new file mode 100644
index 000000000..32acc86ee
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-AzureKeyvaultIntegrationApplicationGateway.yaml
@@ -0,0 +1,24 @@
+name: aprl-AzureKeyvaultIntegrationApplicationGateway
+title: Migrate to Application Gateway v2
+description: |-
+ Use Application Gateway v2 for built-in features like autoscaling, static VIPs, Azure KeyVault integration for better traffic management and performance, unless v1 is necessary.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 0
+labels:
+ guid: 7893f0b3-8622-1d47-beed-4b50a19f7895
+ area: Scalability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Get all Application Gateways, which are using the deprecated V1 SKU
+ resources
+ | where type =~ 'microsoft.network/applicationgateways'
+ | extend tier = properties.sku.tier
+ | where tier == 'Standard' or tier == 'WAF'
+ | project recommendationId = "7893f0b3-8622-1d47-beed-4b50a19f7895", name, id, tags
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-BackendPoolMembersBackendMaintenance.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-BackendPoolMembersBackendMaintenance.yaml
new file mode 100644
index 000000000..98be01b62
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-BackendPoolMembersBackendMaintenance.yaml
@@ -0,0 +1,26 @@
+name: aprl-BackendPoolMembersBackendMaintenance
+title: Plan for backend maintenance by using connection draining
+description: |-
+ Using connection draining for backend maintenance ensures graceful removal of backend pool members during updates or health issues. It's enabled via Backend Setting and applies to all members during rule creation.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 1
+labels:
+ guid: 10f02bc6-e2e7-004d-a2c2-f9bf9f16b915
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This query will check if connection draining is enabled
+ resources
+ | where type =~ "microsoft.network/applicationGateways"
+ | mv-expand backendHttpSettings = properties.backendHttpSettingsCollection
+ | extend connectionDrainingEnabled = backendHttpSettings.properties.connectionDraining.enabled
+ | where connectionDrainingEnabled != true
+ | extend backendPoolName = backendHttpSettings.name
+ | project recommendationId = "10f02bc6-e2e7-004d-a2c2-f9bf9f16b915", name, id, tags, param1 = "connectionDraining: Disabled", param2 = strcat("backendSettingsName: ", backendPoolName)
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-CustomHealthProbesBackendAvailability.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-CustomHealthProbesBackendAvailability.yaml
new file mode 100644
index 000000000..0a5109410
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-CustomHealthProbesBackendAvailability.yaml
@@ -0,0 +1,23 @@
+name: aprl-CustomHealthProbesBackendAvailability
+title: Use Health Probes to detect backend availability
+description: |-
+ Using custom health probes enhances understanding of backend availability and facilitates monitoring of backend services for any impact.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 0
+labels:
+ guid: 847a8d88-21c4-bc48-a94e-562206edd767
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Application Gateways are not using health probes to monitor the availability of the backend systems
+ resources
+ | where type =~ "microsoft.network/applicationGateways"
+ | where array_length(properties.probes) == 0
+ | project recommendationId="847a8d88-21c4-bc48-a94e-562206edd767", name, id, tags, param1="customHealthProbeUsed: false"
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-IncomingConnectionsProductionServices.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-IncomingConnectionsProductionServices.yaml
new file mode 100644
index 000000000..7ceba0657
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-IncomingConnectionsProductionServices.yaml
@@ -0,0 +1,25 @@
+name: aprl-IncomingConnectionsProductionServices
+title: Secure all incoming connections with SSL
+description: |-
+ Secure all incoming connections using HTTPS for production services with end-to-end SSL/TLS or SSL/TLS termination at the Application Gateway to protect against attacks and ensure data remains private and encrypted between the web server and browsers.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 0
+labels:
+ guid: 233a7008-71e9-e745-923e-1a1c7a0b92f3
+ area: Security
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // You can use the following Azure Resource Graph query to check if an HTTP rule is using an SSL certificate or is using Azure Key Vault to store the certificates
+ resources
+ | where type =~ "microsoft.network/applicationGateways"
+ | mv-expand frontendPorts = properties.frontendPorts
+ | mv-expand httpListeners = properties.httpListeners
+ | where isnull(parse_json(httpListeners.properties.sslCertificate))
+ | project recommendationId="233a7008-71e9-e745-923e-1a1c7a0b92f3", name, id, tags, param1=strcat("frontendPort: ", frontendPorts.properties.port), param2="tls: false"
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-NsgFlowLogsDepthTrafficAnalysis.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-NsgFlowLogsDepthTrafficAnalysis.yaml
new file mode 100644
index 000000000..16de3f6f4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-NsgFlowLogsDepthTrafficAnalysis.yaml
@@ -0,0 +1,18 @@
+name: aprl-NsgFlowLogsDepthTrafficAnalysis
+title: Monitor and Log the configurations and traffic
+description: |-
+ Enable logging in storage accounts, Log Analytics, and monitoring services for auditing and insights. If using NSGs, enable NSG flow logs to be stored, providing in-depth traffic analysis into Azure Cloud.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 0
+labels:
+ guid: 5d035919-898d-a047-8d5d-454e199692e5
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-OwaspCoreRuleSetsBasedRulesInboundHttpSInternetTraffic.yaml b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-OwaspCoreRuleSetsBasedRulesInboundHttpSInternetTraffic.yaml
new file mode 100644
index 000000000..b6692391f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-applicationGateways/aprl-OwaspCoreRuleSetsBasedRulesInboundHttpSInternetTraffic.yaml
@@ -0,0 +1,26 @@
+name: aprl-OwaspCoreRuleSetsBasedRulesInboundHttpSInternetTraffic
+title: Enable Web Application Firewall policies
+description: |-
+ Use Application Gateway with Web Application Firewall (WAF) in an application virtual network to safeguard inbound HTTP/S internet traffic. WAF offers centralized defense against potential exploits through OWASP core rule sets-based rules.
+source:
+ type: aprl
+ file: azure-resources/Network/applicationGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/applicationGateways
+severity: 2
+labels:
+ guid: 8d9223c4-730d-ca47-af88-a9a024c37270
+ area: Security
+links: []
+queries:
+ arg: |+
+ // Azure Resource Graph Query
+ // This query will return all Application Gateways that do not have WAF enabled
+ Resources
+ | where type =~ "microsoft.network/applicationGateways"
+ | where properties.firewallpolicy != ""
+ | project recommendationId = "8d9223c4-730d-ca47-af88-a9a024c37270", name, id, tags, param1 = "webApplicationFirewallConfiguration: isNull"
+ | order by id asc
+
+...
diff --git a/v2/recos/Services/microsoftnetwork-bastionHosts/Security/revcl-AzureBastionNetwork.yaml b/v2/recos/Services/microsoftnetwork-bastionHosts/Security/revcl-AzureBastionNetwork.yaml
new file mode 100644
index 000000000..f1e28ec62
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-bastionHosts/Security/revcl-AzureBastionNetwork.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureBastionNetwork
+title: Consider using Azure Bastion to securely connect to your network.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/bastionhosts
+waf: Security
+severity: 1
+labels:
+ guid: ee1ac551-c4d5-46cf-b035-d0a3c50d87ad
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/bastion/bastion-overview
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-bastionHosts/Security/revcl-AzureBastionSubnet.yaml b/v2/recos/Services/microsoftnetwork-bastionHosts/Security/revcl-AzureBastionSubnet.yaml
new file mode 100644
index 000000000..7c48f8bde
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-bastionHosts/Security/revcl-AzureBastionSubnet.yaml
@@ -0,0 +1,20 @@
+name: revcl-AzureBastionSubnet
+title: Use Azure Bastion in a subnet /26 or larger.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/bastionhosts
+waf: Security
+severity: 1
+labels:
+ guid: 6eab9eb6-762b-485e-8ea8-15aa5dba0bd0
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/bastion/bastion-faq#subnet
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets
+ | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix
+ | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName ==
+ 'AzureBastionSubnet' | extend compliant = (subnetPrefixLength <= 26) | distinct
+ id, compliant
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-CircuitsPeeringLocationLocalSku.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-CircuitsPeeringLocationLocalSku.yaml
new file mode 100644
index 000000000..b41070f8a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-CircuitsPeeringLocationLocalSku.yaml
@@ -0,0 +1,22 @@
+name: revcl-CircuitsPeeringLocationLocalSku
+title: Leverage the Local SKU of ExpressRoute to reduce the cost of your circuits,
+ if your circuits' peering location supports your Azure regions for the Local SKU.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 0
+labels:
+ guid: f4e7926a-ec35-476e-a412-5dd17136bd62
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-faqs#expressroute-local
+queries:
+ arg: resources | where type=='microsoft.network/connections' | where properties.connectionType
+ == 'ExpressRoute' | project id, gwid=tostring(properties.virtualNetworkGateway1.id),
+ circuitid=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits'
+ | project circuitid=tostring(id), circuitsku=sku.tier) on circuitid | project
+ id=gwid, compliant = (circuitsku == 'Local') | summarize compliant=max(compliant)
+ by id
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-LocalAzureRegionsExpressrouteLocalCircuits.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-LocalAzureRegionsExpressrouteLocalCircuits.yaml
new file mode 100644
index 000000000..1e2b63f68
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-LocalAzureRegionsExpressrouteLocalCircuits.yaml
@@ -0,0 +1,18 @@
+name: revcl-LocalAzureRegionsExpressrouteLocalCircuits
+title: If using ExpressRoute Direct, consider using ExpressRoute Local circuits to
+ the local Azure regions to save costs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 0
+labels:
+ guid: 718cb437-b060-2589-8856-2e93a5c6633b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-UnlimitedDataExpressrouteCircuitsBandwidth.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-UnlimitedDataExpressrouteCircuitsBandwidth.yaml
new file mode 100644
index 000000000..9ed81ba41
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/revcl-UnlimitedDataExpressrouteCircuitsBandwidth.yaml
@@ -0,0 +1,19 @@
+name: revcl-UnlimitedDataExpressrouteCircuitsBandwidth
+title: Ensure that you're using unlimited-data ExpressRoute circuits only if you reach
+ the bandwidth that justifies their cost.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 0
+labels:
+ guid: 7025b442-f6e9-4af6-b11f-c9574916016f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/plan-manage-cost
+queries:
+ arg: resources | where type=='microsoft.network/expressroutecircuits' | extend compliant
+ = (tolower(sku.family) == 'metereddata' or tolower(sku.tier) == 'local') | distinct
+ id,compliant
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-BudgetAlertsCost.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-BudgetAlertsCost.yaml
new file mode 100644
index 000000000..3017e768d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-BudgetAlertsCost.yaml
@@ -0,0 +1,15 @@
+name: wafsg-BudgetAlertsCost
+title: Monitor cost and create budget alerts.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: 7327aac3-008f-4878-bf49-a6c3f76746a1
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-DeprovisionExpressrouteCircuitsUse.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-DeprovisionExpressrouteCircuitsUse.yaml
new file mode 100644
index 000000000..abcc85c70
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-DeprovisionExpressrouteCircuitsUse.yaml
@@ -0,0 +1,15 @@
+name: wafsg-DeprovisionExpressrouteCircuitsUse
+title: Deprovision ExpressRoute circuits no longer in use.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: 271b6cfe-4507-4afa-a1e5-000e3be105ac
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteCircuitSkuBandwidth.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteCircuitSkuBandwidth.yaml
new file mode 100644
index 000000000..31ebb6b87
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteCircuitSkuBandwidth.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteCircuitSkuBandwidth
+title: Determine the ExpressRoute circuit SKU and bandwidth required.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: a3aaf86d-0531-404f-b881-78bbacd912ca
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteCircuitsUnnecessaryCost.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteCircuitsUnnecessaryCost.yaml
new file mode 100644
index 000000000..1a5ff3214
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteCircuitsUnnecessaryCost.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExpressrouteCircuitsUnnecessaryCost
+title: Deprovision and delete ExpressRoute circuits no longer in use.
+description: ExpressRoute circuits are charged from the moment they're created. To
+ reduce unnecessary cost, deprovision the circuit with the service provider and delete
+ the ExpressRoute circuit from your subscription. For steps on how to remove an ExpressRoute
+ circuit, see Deprovisioning an ExpressRoute circuit.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: c36e0c83-11b4-409a-a4a6-2118b52a380f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressroutePricing.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressroutePricing.yaml
new file mode 100644
index 000000000..554a18f3e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressroutePricing.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressroutePricing
+title: Familiarize yourself with ExpressRoute pricing.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: 96599299-4653-4e94-989b-8c7fe64cb2bd
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressroutePricingUnderstandPricing.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressroutePricingUnderstandPricing.yaml
new file mode 100644
index 000000000..21eecb43c
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressroutePricingUnderstandPricing.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExpressroutePricingUnderstandPricing
+title: Familiarize yourself with ExpressRoute pricing
+description: For information about ExpressRoute pricing, see Understand pricing for
+ Azure ExpressRoute. You can also use the Pricing calculator.Ensure that the options
+ are adequately sized to meet the capacity demand and deliver expected performance
+ without wasting resources.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: 92eec823-61dd-486c-b46e-0339fc02987e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteVirtualNetworkGatewaySize.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteVirtualNetworkGatewaySize.yaml
new file mode 100644
index 000000000..037048d24
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteVirtualNetworkGatewaySize.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteVirtualNetworkGatewaySize
+title: Determine the ExpressRoute virtual network gateway size required.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: 2d710fcf-b8bc-461d-81a1-895193ce91cc
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteVirtualNetworkGatewaySizePreferredVirtualNetworkGatewaySku.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteVirtualNetworkGatewaySizePreferredVirtualNetworkGatewaySku.yaml
new file mode 100644
index 000000000..64629ef4c
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ExpressrouteVirtualNetworkGatewaySizePreferredVirtualNetworkGatewaySku.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExpressrouteVirtualNetworkGatewaySizePreferredVirtualNetworkGatewaySku
+title: Determine the ExpressRoute virtual network gateway size
+description: ExpressRoute virtual network gateways are used to pass traffic into a
+ virtual network over private peering. Review the performance and scale needs of
+ your preferred Virtual Network Gateway SKU. Select the appropriate gateway SKU on
+ your on-premises to Azure workload.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: 73967d95-39ff-47bb-b4f4-33ddade69d1f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-MonitoringExpressrouteCostsExpressrouteCircuit.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-MonitoringExpressrouteCostsExpressrouteCircuit.yaml
new file mode 100644
index 000000000..29bcdb327
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-MonitoringExpressrouteCostsExpressrouteCircuit.yaml
@@ -0,0 +1,16 @@
+name: wafsg-MonitoringExpressrouteCostsExpressrouteCircuit
+title: Monitor cost and create budget alerts
+description: Monitor the cost of your ExpressRoute circuit and create alerts for spending
+ anomalies and overspending risks. For more information, see Monitoring ExpressRoute
+ costs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: edd459fa-3105-4a03-b009-4f983d23da5a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ThreeDifferentSkuTypesUnlimitedDataPlan.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ThreeDifferentSkuTypesUnlimitedDataPlan.yaml
new file mode 100644
index 000000000..9ed25b7fe
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Cost/wafsg-ThreeDifferentSkuTypesUnlimitedDataPlan.yaml
@@ -0,0 +1,20 @@
+name: wafsg-ThreeDifferentSkuTypesUnlimitedDataPlan
+title: Determine SKU and bandwidth required
+description: The way you're charged for your ExpressRoute usage varies between the
+ three different SKU types. With Local SKU, you're automatically charged with an
+ Unlimited data plan. With Standard and Premium SKU, you can select between a Metered
+ or an Unlimited data plan. All ingress data are free of charge except when using
+ the Global Reach add-on. It's important to understand which SKU types and data plan
+ works best for your workload to best optimize cost and budget. For more information
+ resizing ExpressRoute circuit, see upgrading ExpressRoute circuit bandwidth.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Cost
+severity: 1
+labels:
+ guid: c5c27eb1-6f1c-4b97-a216-0cbdc31a3c98
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ConnectionMonitorConnectivityMonitoring.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ConnectionMonitorConnectivityMonitoring.yaml
new file mode 100644
index 000000000..fcf842b47
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ConnectionMonitorConnectivityMonitoring.yaml
@@ -0,0 +1,18 @@
+name: revcl-ConnectionMonitorConnectivityMonitoring
+title: Use Connection Monitor for connectivity monitoring across the network, especially
+ between on-premises and Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 5bf68dc9-325e-4873-bf88-f8214ef2e5d2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/how-to-configure-connection-monitor
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ExpressRouteInsightsExpressrouteAvailability.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ExpressRouteInsightsExpressrouteAvailability.yaml
new file mode 100644
index 000000000..1fd7d4512
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ExpressRouteInsightsExpressrouteAvailability.yaml
@@ -0,0 +1,18 @@
+name: revcl-ExpressRouteInsightsExpressrouteAvailability
+title: Monitor ExpressRoute availability and utilization using built-in Express Route
+ Insights.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: b30e38c3-f298-412b-8363-cefe179b599d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-monitoring-metrics-alerts
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ExpressrouteVirtualNetworkGatewayDiagnosticLogs.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ExpressrouteVirtualNetworkGatewayDiagnosticLogs.yaml
new file mode 100644
index 000000000..cebdbd53c
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/revcl-ExpressrouteVirtualNetworkGatewayDiagnosticLogs.yaml
@@ -0,0 +1,17 @@
+name: revcl-ExpressrouteVirtualNetworkGatewayDiagnosticLogs
+title: Configure diagnostic logs and alerts for ExpressRoute virtual network gateway.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 3f79ed00-203b-4c95-9efd-691505f5a1f9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-howto-setup-alerts-virtual-network-gateway-log
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ConnectionMonitoringAzureNetwork.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ConnectionMonitoringAzureNetwork.yaml
new file mode 100644
index 000000000..12fcf7fdb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ConnectionMonitoringAzureNetwork.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ConnectionMonitoringAzureNetwork
+title: Configure connection monitoring between your on-premises and Azure network.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 138436b3-3868-43ad-8a1c-61c8e4a84d8e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressrouteGatewayConnectionsExpressrouteResourceMetrics.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressrouteGatewayConnectionsExpressrouteResourceMetrics.yaml
new file mode 100644
index 000000000..849cfc606
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressrouteGatewayConnectionsExpressrouteResourceMetrics.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ExpressrouteGatewayConnectionsExpressrouteResourceMetrics
+title: Review ExpressRoute resource metrics
+description: ExpressRoute uses Azure Monitor to collect metrics and create alerts
+ base on your configuration. Metrics are collected for ExpressRoute circuits, ExpressRoute
+ gateways, ExpressRoute gateway connections, and ExpressRoute Direct. These metrics
+ are useful for diagnosing connectivity problems and understanding the performance
+ of your ExpressRoute connection.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: e2ca25a4-7d0d-49f8-8618-f81f0f3ff3e0
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressrouteInsightsNetworkInsights.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressrouteInsightsNetworkInsights.yaml
new file mode 100644
index 000000000..0b0b68728
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressrouteInsightsNetworkInsights.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ExpressrouteInsightsNetworkInsights
+title: Review metrics and dashboards available through ExpressRoute Insights using
+ Network Insights.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 6c4de9f0-b0f4-4390-8222-d5b9dfb506b6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressroutePrivatePeeringMicrosoftPeeringConnection.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressroutePrivatePeeringMicrosoftPeeringConnection.yaml
new file mode 100644
index 000000000..d6a761d93
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ExpressroutePrivatePeeringMicrosoftPeeringConnection.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ExpressroutePrivatePeeringMicrosoftPeeringConnection
+title: Configure connection monitoring
+description: Connection monitoring allows you to monitor connectivity between your
+ on-premises resources and Azure over the ExpressRoute private peering and Microsoft
+ peering connection. Connection monitor can detect networking issues by identifying
+ where along the network path the problem is and help you quickly resolve configuration
+ or hardware failures.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 06b83763-eef7-4e07-8c16-8e0fcc9a388c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-HealthNotificationsUpcomingMaintenance.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-HealthNotificationsUpcomingMaintenance.yaml
new file mode 100644
index 000000000..7faca899d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-HealthNotificationsUpcomingMaintenance.yaml
@@ -0,0 +1,17 @@
+name: wafsg-HealthNotificationsUpcomingMaintenance
+title: Configure Service Health
+description: Set up Service Health notifications to alert when planned and upcoming
+ maintenance is happening to all ExpressRoute circuits in your subscription. Service
+ Health also displays past maintenance along with RCA if an unplanned maintenance
+ were to occur.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 98086164-1e4f-4bd3-b67b-904b60e32470
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ReviewExpressrouteResourceMetrics.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ReviewExpressrouteResourceMetrics.yaml
new file mode 100644
index 000000000..55d97a7b1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ReviewExpressrouteResourceMetrics.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ReviewExpressrouteResourceMetrics
+title: Review ExpressRoute resource metrics.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 8c22c571-98a1-4d91-94b7-efb58db4763e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ServiceHealthNotification.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ServiceHealthNotification.yaml
new file mode 100644
index 000000000..70f103cdc
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ServiceHealthNotification.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ServiceHealthNotification
+title: Configure Service Health for receiving notification.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: 7cfb8c20-2449-4892-bb3f-d994944ba6c9
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ThroughputGatewayMetricsNetworkInsights.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ThroughputGatewayMetricsNetworkInsights.yaml
new file mode 100644
index 000000000..375eb61ff
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Operations/wafsg-ThroughputGatewayMetricsNetworkInsights.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ThroughputGatewayMetricsNetworkInsights
+title: Review metrics with Network Insights
+description: ExpressRoute Insights with Network Insights allow you to review and analyze
+ ExpressRoute circuits, gateways, connections metrics and health dashboards. ExpressRoute
+ Insights also provide a topology view of your ExpressRoute connections where you
+ can view details of your peering components all in a single place.Metrics available:-
+ Availability- Throughput- Gateway metrics
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Operations
+severity: 1
+labels:
+ guid: f48383e3-3d08-47a4-852e-211cc3a792df
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-ExpressrouteCircuitsVnetCommunication.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-ExpressrouteCircuitsVnetCommunication.yaml
new file mode 100644
index 000000000..a28cb5a1b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-ExpressrouteCircuitsVnetCommunication.yaml
@@ -0,0 +1,17 @@
+name: revcl-ExpressrouteCircuitsVnetCommunication
+title: Avoid using ExpressRoute circuits for VNet-to-VNet communication.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 5234c93f-b651-41dd-80c1-234177b91ced
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/virtual-network-connectivity-guidance
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-GbpsPortsExpressrouteDirect.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-GbpsPortsExpressrouteDirect.yaml
new file mode 100644
index 000000000..f8253a86e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-GbpsPortsExpressrouteDirect.yaml
@@ -0,0 +1,18 @@
+name: revcl-GbpsPortsExpressrouteDirect
+title: For scenarios that require bandwidth higher than 10 Gbps or dedicated 10/100-Gbps
+ ports, use ExpressRoute Direct.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 72e52e36-11cc-458b-9a4b-1511e43a58a9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-azure
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-LowLatencyExpressrouteGateway.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-LowLatencyExpressrouteGateway.yaml
new file mode 100644
index 000000000..ef683cdae
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-LowLatencyExpressrouteGateway.yaml
@@ -0,0 +1,19 @@
+name: revcl-LowLatencyExpressrouteGateway
+title: When low latency is required, or throughput from on-premises to Azure must
+ be greater than 10 Gbps, enable FastPath to bypass the ExpressRoute gateway from
+ the data path.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: c2299c4d-7b57-4d0c-9555-62f2b3e4563a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/about-fastpath
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-PrimaryConnectionPossibility.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-PrimaryConnectionPossibility.yaml
new file mode 100644
index 000000000..f899c6427
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-PrimaryConnectionPossibility.yaml
@@ -0,0 +1,18 @@
+name: revcl-PrimaryConnectionPossibility
+title: Ensure that you have investigated the possibility to use ExpressRoute as primary
+ connection to Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 359c373e-7dd6-4162-9a36-4a907ecae48e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/reference-architectures/hybrid-networking/hub-spoke?tabs=cli
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-RightSkuExpressrouteVpnGateways.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-RightSkuExpressrouteVpnGateways.yaml
new file mode 100644
index 000000000..fbf5dd989
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/revcl-RightSkuExpressrouteVpnGateways.yaml
@@ -0,0 +1,23 @@
+name: revcl-RightSkuExpressrouteVpnGateways
+title: Ensure that you're using the right SKU for the ExpressRoute/VPN gateways based
+ on bandwidth and performance requirements.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: d4cd21b0-8813-47f5-b6c4-cfd3e504547c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-routing
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries:
+ arg: resources| where type == 'microsoft.network/virtualnetworkgateways'| where
+ properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend
+ SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType|
+ extend compliant = SKUTier !in ('Basic', 'Standard')| project name, id, subscriptionId,
+ resourceGroup, compliant
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ErgwAzVirtualNetworkGatewayAzureVirtualNetwork.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ErgwAzVirtualNetworkGatewayAzureVirtualNetwork.yaml
new file mode 100644
index 000000000..e50eb4bbe
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ErgwAzVirtualNetworkGatewayAzureVirtualNetwork.yaml
@@ -0,0 +1,16 @@
+name: wafsg-ErgwAzVirtualNetworkGatewayAzureVirtualNetwork
+title: Enable ExpressRoute FastPath for higher throughput
+description: If you're using an Ultra performance or an ErGW3AZ virtual network gateway,
+ you can enable FastPath to improve the data path performance between your on-premises
+ network and Azure virtual network.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: a5327e51-9367-4f91-bca2-71b5724e6acb
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitBandwidth.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitBandwidth.yaml
new file mode 100644
index 000000000..01502217d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitBandwidth.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteCircuitBandwidth
+title: Upgrade the ExpressRoute circuit bandwidth.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 124c88c4-391e-41fc-be92-f8efd3ae6b71
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitExpressrouteConnection.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitExpressrouteConnection.yaml
new file mode 100644
index 000000000..e57b7c2ea
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitExpressrouteConnection.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExpressrouteCircuitExpressrouteConnection
+title: Monitor ExpressRoute circuit and gateway metrics
+description: Set up alerts base on ExpressRoute metrics to proactively notify you
+ when a certain threshold is met. These metrics are useful to understand anomalies
+ that can happen with your ExpressRoute connection such as outages and maintenance
+ happening to your ExpressRoute circuits.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 3e5d89cf-a4b0-4624-8a74-c086ce3665ac
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitGatewayMetrics.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitGatewayMetrics.yaml
new file mode 100644
index 000000000..a95f43330
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteCircuitGatewayMetrics.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteCircuitGatewayMetrics
+title: Monitor the ExpressRoute circuit and gateway metrics.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: a77220d0-45e2-4ac9-9f8e-352f4e4848d8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteFastpathHigherThroughput.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteFastpathHigherThroughput.yaml
new file mode 100644
index 000000000..4287cc25e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteFastpathHigherThroughput.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteFastpathHigherThroughput
+title: Enable ExpressRoute FastPath for higher throughput.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 21303a27-77fc-4cd0-afab-0080bbbf6501
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteGatewaySize.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteGatewaySize.yaml
new file mode 100644
index 000000000..9edee16cb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-ExpressrouteGatewaySize.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteGatewaySize
+title: Increase the size of the ExpressRoute gateway.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 68ebf30c-d5f8-4e5a-bafa-9b8ff5aea0cc
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-HigherGatewaySkuExpressrouteGateway.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-HigherGatewaySkuExpressrouteGateway.yaml
new file mode 100644
index 000000000..a52ac5bd5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-HigherGatewaySkuExpressrouteGateway.yaml
@@ -0,0 +1,15 @@
+name: wafsg-HigherGatewaySkuExpressrouteGateway
+title: Increase the size of the ExpressRoute gateway.
+description: Upgrade to a higher gateway SKU for improved throughput performance between
+ on-premises and Azure environment.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: caa42667-014b-4fb2-9e0a-954e05385785
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements-1.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements-1.yaml
new file mode 100644
index 000000000..a63038c6e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements-1.yaml
@@ -0,0 +1,15 @@
+name: wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements-1
+title: Test ExpressRoute gateway performance to meet work load requirements.
+description: Use Azure Connectivity Toolkit to test performance across your ExpressRoute
+ circuit to understand bandwidth capacity and latency of your network connection.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 71513d98-78dc-49ad-ba19-3d769b03c9bb
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements.yaml
new file mode 100644
index 000000000..c525ec15b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements.yaml
@@ -0,0 +1,15 @@
+name: wafsg-TestExpressrouteGatewayPerformanceWorkLoadRequirements
+title: Test ExpressRoute gateway performance to meet work load requirements.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: 986e4310-6a7c-469e-bd94-8b8d1c388f51
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-UpgradeExpressrouteCircuitBandwidthWorkLoadRequirements.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-UpgradeExpressrouteCircuitBandwidthWorkLoadRequirements.yaml
new file mode 100644
index 000000000..59b06ee1b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Performance/wafsg-UpgradeExpressrouteCircuitBandwidthWorkLoadRequirements.yaml
@@ -0,0 +1,17 @@
+name: wafsg-UpgradeExpressrouteCircuitBandwidthWorkLoadRequirements
+title: Upgrade ExpressRoute circuit bandwidth
+description: Upgrade your circuit bandwidth to meet your work load requirements. Circuit
+ bandwidth is shared between all virtual networks connected to the ExpressRoute circuit.
+ Depending on your work load, one or more virtual networks can use up all the bandwidth
+ on the circuit.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Performance
+severity: 1
+labels:
+ guid: be5fc5f6-92bd-4239-87a0-275d786b8d68
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-BidirectionalForwardingDetectionEdgeRoutingDevices.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-BidirectionalForwardingDetectionEdgeRoutingDevices.yaml
new file mode 100644
index 000000000..7bb5da6b0
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-BidirectionalForwardingDetectionEdgeRoutingDevices.yaml
@@ -0,0 +1,18 @@
+name: revcl-BidirectionalForwardingDetectionEdgeRoutingDevices
+title: Ensure Bidirectional Forwarding Detection (BFD) is enabled and configured on
+ customer or provider edge routing devices.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: fe2a1b53-6fbd-4c67-b58a-85d7c7a0afcb
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-bfd
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-DifferentPeeringLocationsExpressrouteCircuits.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-DifferentPeeringLocationsExpressrouteCircuits.yaml
new file mode 100644
index 000000000..824ab4790
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-DifferentPeeringLocationsExpressrouteCircuits.yaml
@@ -0,0 +1,23 @@
+name: revcl-DifferentPeeringLocationsExpressrouteCircuits
+title: Use ExpressRoute circuits from different peering locations for redundancy.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: e0d5973c-d4cd-421b-8881-37f5e6c4cfd3
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering#challenges-of-using-multiple-expressroute-circuits
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries:
+ arg: resources | where type=='microsoft.network/connections' | where properties.connectionType
+ == 'ExpressRoute' | project cxId=id, gwId=tostring(properties.virtualNetworkGateway1.id),
+ circuitId=tostring(properties.peer.id) | join (resources | where type=='microsoft.network/expressroutecircuits'
+ | project circuitId=tostring(id), circuitLocation=tostring(properties.serviceProviderProperties.peeringLocation))
+ on circuitId | distinct gwId, circuitLocation | summarize countErLocations=count()
+ by id=gwId | extend compliant = (countErLocations >= 2)
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-DifferentPeeringLocationsExpressrouteGateway.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-DifferentPeeringLocationsExpressrouteGateway.yaml
new file mode 100644
index 000000000..dc019e234
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-DifferentPeeringLocationsExpressrouteGateway.yaml
@@ -0,0 +1,18 @@
+name: revcl-DifferentPeeringLocationsExpressrouteGateway
+title: Connect the ExpressRoute Gateway to two or more circuits from different peering
+ locations for higher resiliency.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 0
+labels:
+ guid: 669b215a-ce43-4371-8f6f-11047f6490f1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-MultipleExpressrouteCircuitsPremLocations.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-MultipleExpressrouteCircuitsPremLocations.yaml
new file mode 100644
index 000000000..a7d8b5214
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-MultipleExpressrouteCircuitsPremLocations.yaml
@@ -0,0 +1,21 @@
+name: revcl-MultipleExpressrouteCircuitsPremLocations
+title: When you use multiple ExpressRoute circuits, or multiple on-prem locations,
+ make sure to optimize routing with BGP attributes, if certain paths are preferred.
+description: You can use AS-path prepending and connection weights to influence traffic
+ from Azure to on-premises, and the full range of BGP attributes in your own routers
+ to influence traffic from on-premises to Azure.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: f29812b2-363c-4efe-879b-599de0d5973c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-routing
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-PremisesRoutingConnectionFailure.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-PremisesRoutingConnectionFailure.yaml
new file mode 100644
index 000000000..839385931
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-PremisesRoutingConnectionFailure.yaml
@@ -0,0 +1,18 @@
+name: revcl-PremisesRoutingConnectionFailure
+title: 'If using ExpressRoute, your on-premises routing should be dynamic: in the
+ event of a connection failure it should converge to the remaining connection of
+ the circuit. Load should be shared across both connections ideally as active/active,
+ although active/passive is supported too.'
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 0
+labels:
+ guid: d581a947-69a2-4783-942e-9df3664324c8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute#active-active-connections
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-RouteTableGatewayRoutes.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-RouteTableGatewayRoutes.yaml
new file mode 100644
index 000000000..e57f5a25e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-RouteTableGatewayRoutes.yaml
@@ -0,0 +1,22 @@
+name: revcl-RouteTableGatewayRoutes
+title: If you are using a route table in the GatewaySubnet, make sure that gateway
+ routes are propagated.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 0
+labels:
+ guid: 72105cc8-aaea-4ee1-8c7a-ad25977afcaf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpn-gateway-settings#gwsub
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworks' | project id,resourceGroup,name,subnets=properties.subnets
+ | mv-expand subnets | project id,resourceGroup,name,subnetName=tostring(subnets.name),routeTableId=tostring(subnets.properties.routeTable.id)
+ | where subnetName == 'GatewaySubnet' | join kind=leftouter (Resources | where
+ type == 'microsoft.network/routetables' | project routeTableName=name,routeTableId=id,
+ disableBgpRoutePropagation=properties.disableBgpRoutePropagation) on routeTableId
+ | project id,compliant = (disableBgpRoutePropagation == False or isnull(disableBgpRoutePropagation))
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-SingleExpressrouteCircuitSite.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-SingleExpressrouteCircuitSite.yaml
new file mode 100644
index 000000000..c61851ad7
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-SingleExpressrouteCircuitSite.yaml
@@ -0,0 +1,16 @@
+name: revcl-SingleExpressrouteCircuitSite
+title: Use site-to-site VPN as failover of ExpressRoute, especially if only using
+ a single ExpressRoute circuit.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: cf3fe65c-fec0-495a-8edc-9675200f2add
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-TwoDistinctEdgeDevicesTwoPhysicalLinks.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-TwoDistinctEdgeDevicesTwoPhysicalLinks.yaml
new file mode 100644
index 000000000..aa5fd6b07
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-TwoDistinctEdgeDevicesTwoPhysicalLinks.yaml
@@ -0,0 +1,18 @@
+name: revcl-TwoDistinctEdgeDevicesTwoPhysicalLinks
+title: Ensure the two physical links of your ExpressRoute circuit are connected to
+ two distinct edge devices in your network.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: b258f058-b9f6-46cd-b28d-990106f0c3f8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/designing-for-high-availability-with-expressroute
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-ZoneRedundantExpressrouteGatewayAzureRegions.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-ZoneRedundantExpressrouteGatewayAzureRegions.yaml
new file mode 100644
index 000000000..26e77f82d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/revcl-ZoneRedundantExpressrouteGatewayAzureRegions.yaml
@@ -0,0 +1,22 @@
+name: revcl-ZoneRedundantExpressrouteGatewayAzureRegions
+title: Deploy a zone-redundant ExpressRoute gateway in the supported Azure regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 2447ec66-138a-4720-8f1c-e16ed301d6e8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries:
+ arg: resources| where type == 'microsoft.network/virtualnetworkgateways'| where
+ properties.gatewayType =~ 'vpn' or properties.gatewayType == 'ExpressRoute'| extend
+ SKUName = properties.sku.name, SKUTier = properties.sku.tier, Type = properties.gatewayType|
+ extend compliant = SKUTier contains 'AZ'| project name, id, subscriptionId, resourceGroup,
+ Type, compliant
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ActiveActiveExpressrouteConnectionsPremises.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ActiveActiveExpressrouteConnectionsPremises.yaml
new file mode 100644
index 000000000..85c8281a1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ActiveActiveExpressrouteConnectionsPremises.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ActiveActiveExpressrouteConnectionsPremises
+title: Configure Active-Active ExpressRoute connections between on-premises and Azure.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 7a87eeb7-44d2-409f-842f-fad32d9b01e1
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-BusinessRequirementsExpressrouteCircuit.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-BusinessRequirementsExpressrouteCircuit.yaml
new file mode 100644
index 000000000..08a61ad7e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-BusinessRequirementsExpressrouteCircuit.yaml
@@ -0,0 +1,15 @@
+name: wafsg-BusinessRequirementsExpressrouteCircuit
+title: Select between ExpressRoute circuit or ExpressRoute Direct for business requirements.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: c18e33dd-d764-42da-b855-cd050de2367a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-DifferentServiceProvidersOnePeeringLocations.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-DifferentServiceProvidersOnePeeringLocations.yaml
new file mode 100644
index 000000000..43ebe0d9e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-DifferentServiceProvidersOnePeeringLocations.yaml
@@ -0,0 +1,18 @@
+name: wafsg-DifferentServiceProvidersOnePeeringLocations
+title: Plan for geo-redundant circuits
+description: To plan for disaster recovery, set up ExpressRoute circuits in more than
+ one peering locations. You can create circuits in peering locations in the same
+ metro or different metro and choose to work with different service providers for
+ diverse paths through each circuit. For more information, see Designing for disaster
+ recovery and Designing for high availability.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 6807a566-19b0-4db5-a02e-af800136355e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteCircuitMaintenanceNotificationService.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteCircuitMaintenanceNotificationService.yaml
new file mode 100644
index 000000000..1b362a7a1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteCircuitMaintenanceNotificationService.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteCircuitMaintenanceNotificationService
+title: Configure service health to receive ExpressRoute circuit maintenance notification.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 41687924-ef94-411f-b71a-c8ec2543dbb7
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteDedicatedCircuitsActiveActiveConnectivity.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteDedicatedCircuitsActiveActiveConnectivity.yaml
new file mode 100644
index 000000000..fe4bc562b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteDedicatedCircuitsActiveActiveConnectivity.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExpressrouteDedicatedCircuitsActiveActiveConnectivity
+title: Plan for Active-Active connectivity
+description: ExpressRoute dedicated circuits guarantee `99.95%` availability when
+ an active-active connectivity is configured between on-premises and Azure. This
+ mode provides higher availability of your Expressroute connection. It's also recommended
+ to configure BFD for faster failover if there's a link failure on a connection.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: b145c875-e017-4b1e-af6a-e2c86150d5b9
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressroutePrivatePeeringSite.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressroutePrivatePeeringSite.yaml
new file mode 100644
index 000000000..166d2bb9a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressroutePrivatePeeringSite.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressroutePrivatePeeringSite
+title: Configure site-to-site VPN as a backup to ExpressRoute private peering.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: d8dbe205-0115-4fc8-8aaf-fff7d9382a5e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteVirtualNetworkGatewaysAvailabilityZone.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteVirtualNetworkGatewaysAvailabilityZone.yaml
new file mode 100644
index 000000000..956d40bd4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteVirtualNetworkGatewaysAvailabilityZone.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteVirtualNetworkGatewaysAvailabilityZone
+title: Set up availability zone aware ExpressRoute Virtual Network Gateways.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 51ac729d-25ff-4632-88e5-72df1106559d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteVirtualNetworkGatewaysDifferentRegions.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteVirtualNetworkGatewaysDifferentRegions.yaml
new file mode 100644
index 000000000..2ff2a4820
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-ExpressrouteVirtualNetworkGatewaysDifferentRegions.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteVirtualNetworkGatewaysDifferentRegions
+title: Configure ExpressRoute Virtual Network Gateways in different regions.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 2d31b435-8edb-46cb-a682-8190d7cfedf9
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-InitialPlanningPhasePrivateDedicatedConnection.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-InitialPlanningPhasePrivateDedicatedConnection.yaml
new file mode 100644
index 000000000..34c9f8be7
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-InitialPlanningPhasePrivateDedicatedConnection.yaml
@@ -0,0 +1,19 @@
+name: wafsg-InitialPlanningPhasePrivateDedicatedConnection
+title: Plan for ExpressRoute circuit or ExpressRoute Direct
+description: During the initial planning phase, you want to decide whether you want
+ to configure an ExpressRoute circuit or an ExpressRoute Direct connection. An ExpressRoute
+ circuit allows a private dedicated connection into Azure with the help of a connectivity
+ provider. ExpressRoute Direct allows you to extend on-premises network directly
+ into the Microsoft network at a peering location. You also need to identify the
+ bandwidth requirement and the SKU type requirement for your business needs.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 47e7f99c-d9da-440c-96f3-53c2d1b3578e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-PhysicalLayerDiversityDifferentServiceProvider.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-PhysicalLayerDiversityDifferentServiceProvider.yaml
new file mode 100644
index 000000000..756c280d3
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-PhysicalLayerDiversityDifferentServiceProvider.yaml
@@ -0,0 +1,17 @@
+name: wafsg-PhysicalLayerDiversityDifferentServiceProvider
+title: Physical layer diversity
+description: For better resiliency, plan to have multiple paths between the on-premises
+ edge and the peering locations (provider/Microsoft edge locations). This configuration
+ can be achieved by going through different service provider or through a different
+ location from the on-premises network.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 18491e10-13a3-4864-87e9-3e37cbf8625e
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-UnplannedMaintenanceExpressrouteCircuits.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-UnplannedMaintenanceExpressrouteCircuits.yaml
new file mode 100644
index 000000000..f0ce057c7
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-UnplannedMaintenanceExpressrouteCircuits.yaml
@@ -0,0 +1,16 @@
+name: wafsg-UnplannedMaintenanceExpressrouteCircuits
+title: Enable service health
+description: ExpressRoute uses service health to notify about planned and unplanned
+ maintenance. Configuring service health will notify you about changes made to your
+ ExpressRoute circuits.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 1c26f51d-9ce7-49c5-87e8-d45a56f9fa14
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-VirtualNetworkGatewayHealthVariousMetrics.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-VirtualNetworkGatewayHealthVariousMetrics.yaml
new file mode 100644
index 000000000..8a24f8a32
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-VirtualNetworkGatewayHealthVariousMetrics.yaml
@@ -0,0 +1,15 @@
+name: wafsg-VirtualNetworkGatewayHealthVariousMetrics
+title: Monitor circuits and gateway health
+description: Set up monitoring and alerts for ExpressRoute circuits and Virtual Network
+ Gateway health based on various metrics available.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: 1f311354-8e72-4308-ac18-29dd48ce58ad
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-VirtualNetworkGatewaysAvailabilityZone.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-VirtualNetworkGatewaysAvailabilityZone.yaml
new file mode 100644
index 000000000..7e2fd924f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Reliability/wafsg-VirtualNetworkGatewaysAvailabilityZone.yaml
@@ -0,0 +1,16 @@
+name: wafsg-VirtualNetworkGatewaysAvailabilityZone
+title: Planning for Virtual Network Gateways
+description: Create availability zone aware Virtual Network Gateway for higher resiliency
+ and plan for Virtual Network Gateways in different region for disaster recovery
+ and high availability.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Reliability
+severity: 1
+labels:
+ guid: a71ef0ea-30fd-4a34-b4ca-10a87d4db10a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-AzurePaasServicesExpressroutePrivatePeering.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-AzurePaasServicesExpressroutePrivatePeering.yaml
new file mode 100644
index 000000000..281686d06
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-AzurePaasServicesExpressroutePrivatePeering.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzurePaasServicesExpressroutePrivatePeering
+title: Access Azure PaaS services from on-premises via private endpoints and ExpressRoute
+ private peering. This method avoids transiting over the public internet.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: b3e4563a-4d87-4397-98b6-62d6d15f512a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/app-service/networking-features
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-AzureRouteServerVpnGateways.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-AzureRouteServerVpnGateways.yaml
new file mode 100644
index 000000000..698de07f9
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-AzureRouteServerVpnGateways.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureRouteServerVpnGateways
+title: If you need transit between ExpressRoute and VPN gateways in hub and spoke
+ scenarios, use Azure Route Server.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 2
+labels:
+ guid: ce463dbb-bc8a-4c2a-aebc-92a43da1dae2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-howto-coexist-resource-manager#to-enable-transit-routing-between-expressroute-and-azure-vpn
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-DifferentExpressrouteCircuitsIsolatedRoutingDomains.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-DifferentExpressrouteCircuitsIsolatedRoutingDomains.yaml
new file mode 100644
index 000000000..4530c2c6a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-DifferentExpressrouteCircuitsIsolatedRoutingDomains.yaml
@@ -0,0 +1,19 @@
+name: revcl-DifferentExpressrouteCircuitsIsolatedRoutingDomains
+title: When traffic isolation or dedicated bandwidth is required, such as for separating
+ production and nonproduction environments, use different ExpressRoute circuits.
+ It will help you ensure isolated routing domains and alleviate noisy-neighbor risks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: 8042d88e-79d1-47b7-9b22-a5a67e7a8ed4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/architecture/framework/services/networking/expressroute/reliability
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/design-implement-azure-expressroute/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-ExpressrouteDirectLayerTwoLevel.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-ExpressrouteDirectLayerTwoLevel.yaml
new file mode 100644
index 000000000..a158e178f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-ExpressrouteDirectLayerTwoLevel.yaml
@@ -0,0 +1,17 @@
+name: revcl-ExpressrouteDirectLayerTwoLevel
+title: When you're using ExpressRoute Direct, configure MACsec in order to encrypt
+ traffic at the layer-two level between the organization's routers and MSEE. The
+ diagram shows this encryption in flow.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: de0d5973-cd4c-4d21-a088-137f5e6c4cfd
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-howto-macsec
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-ExpressroutePrivatePeeringExpressrouteDirect.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-ExpressroutePrivatePeeringExpressrouteDirect.yaml
new file mode 100644
index 000000000..68c23b15d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-ExpressroutePrivatePeeringExpressrouteDirect.yaml
@@ -0,0 +1,19 @@
+name: revcl-ExpressroutePrivatePeeringExpressrouteDirect
+title: For scenarios where MACsec isn't an option (for example, not using ExpressRoute
+ Direct), use a VPN gateway to establish IPsec tunnels over ExpressRoute private
+ peering.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 2
+labels:
+ guid: ed301d6e-872e-452e-9611-cc58b5a4b151
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-erdirect-about
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/implement-network-security/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-GatewaySubnets.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-GatewaySubnets.yaml
new file mode 100644
index 000000000..17b93bdbb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-GatewaySubnets.yaml
@@ -0,0 +1,20 @@
+name: revcl-GatewaySubnets
+title: Use at least a /27 prefix for your Gateway subnets
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 0
+labels:
+ guid: f2aad7e3-bb03-4adc-8606-4123d342a917
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/expressroute/expressroute-howto-add-gateway-resource-manager#add-a-gateway
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworks' | project id,subnets=properties.subnets
+ | mv-expand subnets | project id, subnetName = subnets.name, subnetPrefix = subnets.properties.addressPrefix
+ | extend subnetPrefixLength = split(subnetPrefix, '/')[1] | where subnetName ==
+ 'GatewaySubnet' | extend compliant = (subnetPrefixLength <= 27) | distinct id,
+ compliant
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-OverlappingIpAddressSpacesAzureRegions.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-OverlappingIpAddressSpacesAzureRegions.yaml
new file mode 100644
index 000000000..05ca948a3
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/revcl-OverlappingIpAddressSpacesAzureRegions.yaml
@@ -0,0 +1,18 @@
+name: revcl-OverlappingIpAddressSpacesAzureRegions
+title: Ensure no overlapping IP address spaces across Azure regions and on-premises
+ locations are used
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 0
+labels:
+ guid: 558fd772-49b8-4211-82df-27ee412e7f98
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-ip-addressing
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-network-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ActivityLogLogs.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ActivityLogLogs.yaml
new file mode 100644
index 000000000..78ef350a7
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ActivityLogLogs.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ActivityLogLogs
+title: Configure Activity log to send logs to archive.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: dbcfcfa3-dcb3-43f7-8e98-a9d6d44ab3ae
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ActivityLogSubscriptionLevel.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ActivityLogSubscriptionLevel.yaml
new file mode 100644
index 000000000..ac8be7b73
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ActivityLogSubscriptionLevel.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ActivityLogSubscriptionLevel
+title: Configure Activity log to send logs to archive
+description: Activity logs provide insights into operations that were performed at
+ the subscription level for ExpressRoute resources. With Activity logs, you can determine
+ who and when an operation was performed at the control plane. Data retention is
+ only 90 days and required to be stored in Log Analytics, Event Hubs or a storage
+ account for archive.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: b893441c-5f7c-44fe-bfa2-457af4ae1cb8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-AdministrativeAccountsExpressrouteResources.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-AdministrativeAccountsExpressrouteResources.yaml
new file mode 100644
index 000000000..0250d8e97
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-AdministrativeAccountsExpressrouteResources.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AdministrativeAccountsExpressrouteResources
+title: Maintain an inventory of administrative accounts with access to ExpressRoute
+ resources.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: fd7f29a7-ae31-4983-8510-e219a25cfdfc
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-AzureVirtualNetworkPremisesNetwork.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-AzureVirtualNetworkPremisesNetwork.yaml
new file mode 100644
index 000000000..5bf38ddfd
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-AzureVirtualNetworkPremisesNetwork.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureVirtualNetworkPremisesNetwork
+title: Encrypt traffic using IPsec
+description: Configure a Site-to-site VPN tunnel over your ExpressRoute circuit to
+ encrypt data transferring between your on-premises network and Azure virtual network.
+ You can configure a tunnel using private peering or using Microsoft peering.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: a7cb83ea-dfc8-49eb-9c03-a57fbcd3a0ef
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ExpressrouteDirectResourcesMacsec.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ExpressrouteDirectResourcesMacsec.yaml
new file mode 100644
index 000000000..83d6ae53b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-ExpressrouteDirectResourcesMacsec.yaml
@@ -0,0 +1,15 @@
+name: wafsg-ExpressrouteDirectResourcesMacsec
+title: Configure MACSec for ExpressRoute Direct resources.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: e09a0328-3f6e-4ab5-9856-581a76090453
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MaintainInventoryAdministrativeAccounts.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MaintainInventoryAdministrativeAccounts.yaml
new file mode 100644
index 000000000..1df4d1ab1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MaintainInventoryAdministrativeAccounts.yaml
@@ -0,0 +1,15 @@
+name: wafsg-MaintainInventoryAdministrativeAccounts
+title: Maintain inventory of administrative accounts
+description: Use Azure RBAC to configure roles to limit user accounts that can add,
+ update, or delete peering configuration on an ExpressRoute circuit.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: 44059f81-2473-4325-ad67-70df146e1f5d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MdHashExpressrouteCircuit-1.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MdHashExpressrouteCircuit-1.yaml
new file mode 100644
index 000000000..e8fc613ad
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MdHashExpressrouteCircuit-1.yaml
@@ -0,0 +1,15 @@
+name: wafsg-MdHashExpressrouteCircuit-1
+title: Configure MD5 hash on ExpressRoute circuit
+description: During configuration of private peering or Microsoft peering, apply an
+ MD5 hash to secure messages between the on-premises route and the MSEE routers.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: 0d7a206c-e977-4c39-9379-766f5f20365b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MdHashExpressrouteCircuit.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MdHashExpressrouteCircuit.yaml
new file mode 100644
index 000000000..d81b13b1e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MdHashExpressrouteCircuit.yaml
@@ -0,0 +1,15 @@
+name: wafsg-MdHashExpressrouteCircuit
+title: Configure MD5 hash on ExpressRoute circuit.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: 5f06f160-46b8-48b3-ab94-89da0ff37c56
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MediaAccessControlSecurityDataLinkLayer.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MediaAccessControlSecurityDataLinkLayer.yaml
new file mode 100644
index 000000000..87b989c73
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-MediaAccessControlSecurityDataLinkLayer.yaml
@@ -0,0 +1,18 @@
+name: wafsg-MediaAccessControlSecurityDataLinkLayer
+title: Configure MACSec for ExpressRoute Direct resources
+description: Media Access Control security is a point-to-point security at the data
+ link layer. ExpressRoute Direct supports configuring MACSec to prevent security
+ threats to protocols such as ARP, DHCP, LACP not normally secured on the Ethernet
+ link. For more information on how to configure MACSec, see MACSec for ExpressRoute
+ Direct ports.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: 02e71cb8-379a-45ef-8daa-e4bfa3fa7237
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-VirtualNetworkTrafficPrivatePeering.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-VirtualNetworkTrafficPrivatePeering.yaml
new file mode 100644
index 000000000..f98423c6e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/Security/wafsg-VirtualNetworkTrafficPrivatePeering.yaml
@@ -0,0 +1,16 @@
+name: wafsg-VirtualNetworkTrafficPrivatePeering
+title: Encrypt traffic over private peering and Microsoft peering for virtual network
+ traffic.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-expressroute.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/expressroutecircuits
+waf: Security
+severity: 1
+labels:
+ guid: 960e86aa-d918-4a37-917a-eab33a2a98fa
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-AzureCriticalWorkloadsDifferentPeeringLocations.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-AzureCriticalWorkloadsDifferentPeeringLocations.yaml
new file mode 100644
index 000000000..43a56f812
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-AzureCriticalWorkloadsDifferentPeeringLocations.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureCriticalWorkloadsDifferentPeeringLocations
+title: Connect on-prem networks to Azure critical workloads via multiple ExpressRoutes
+description: |-
+ Connecting each ExpressRoute Gateway to a minimum of two circuits in different peering locations enhances redundancy and reliability by ensuring alternate pathways for data in case one circuit fails.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 0
+labels:
+ guid: 4d703025-dafc-f840-a183-5dc440456134
+ area: High Availability
+links: []
+queries:
+ arg: |-
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-AzureMonitorBaselineAlertsExpressrouteCircuitAvailability.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-AzureMonitorBaselineAlertsExpressrouteCircuitAvailability.yaml
new file mode 100644
index 000000000..af554d361
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-AzureMonitorBaselineAlertsExpressrouteCircuitAvailability.yaml
@@ -0,0 +1,18 @@
+name: aprl-AzureMonitorBaselineAlertsExpressrouteCircuitAvailability
+title: Configure monitoring and alerting for ExpressRoute circuits
+description: |-
+ Use Network Insights for monitoring ExpressRoute circuit availability, QoS, and throughput. Set alerts based on Azure Monitor Baseline Alerts for availability, QoS metrics, and throughput metrics exceeding specific thresholds.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 0
+labels:
+ guid: 9771a435-d031-814e-9827-9b5fdafc0f87
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-DistinctNetworkEdgeDevicesExpressroutePeeringLocation.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-DistinctNetworkEdgeDevicesExpressroutePeeringLocation.yaml
new file mode 100644
index 000000000..db830f598
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-DistinctNetworkEdgeDevicesExpressroutePeeringLocation.yaml
@@ -0,0 +1,18 @@
+name: aprl-DistinctNetworkEdgeDevicesExpressroutePeeringLocation
+title: Ensure ExpressRoute's physical links connect to distinct network edge devices
+description: |-
+ Microsoft or the ExpressRoute provider always ensures physical redundancy in their services. It's essential to maintain this level of physical redundancy (two devices, two links) from the ExpressRoute peering location to your network for optimal performance and reliability.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 0
+labels:
+ guid: 0e19cc41-8274-1342-b0db-0e4146eacef8
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteCircuitActiveMode.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteCircuitActiveMode.yaml
new file mode 100644
index 000000000..f4ad8cafb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteCircuitActiveMode.yaml
@@ -0,0 +1,19 @@
+name: aprl-ExpressrouteCircuitActiveMode
+title: Ensure both connections of an ExpressRoute circuit are configured in active-active
+ mode
+description: |-
+ Operating both connections of an ExpressRoute circuit in active-active mode enhances high availability as the Microsoft network will load balance the traffic across the connections on a per-flow basis.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 0
+labels:
+ guid: f06a2bbe-5839-d447-9f39-fc3d20562d88
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteCircuitMaintenanceNotificationUnplannedMaintenance.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteCircuitMaintenanceNotificationUnplannedMaintenance.yaml
new file mode 100644
index 000000000..a129859dc
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteCircuitMaintenanceNotificationUnplannedMaintenance.yaml
@@ -0,0 +1,18 @@
+name: aprl-ExpressrouteCircuitMaintenanceNotificationUnplannedMaintenance
+title: Configure service health to receive ExpressRoute circuit maintenance notification
+description: |-
+ ExpressRoute leverages service health for notifications on both planned and unplanned maintenance, ensuring users are informed about any changes to their ExpressRoute circuits.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 0
+labels:
+ guid: 26cb547f-aabc-dc40-be02-d0a9b6b04b1a
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteDirectCircuitsNetworkFlow.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteDirectCircuitsNetworkFlow.yaml
new file mode 100644
index 000000000..038816ef3
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-ExpressrouteDirectCircuitsNetworkFlow.yaml
@@ -0,0 +1,25 @@
+name: aprl-ExpressrouteDirectCircuitsNetworkFlow
+title: Implement rate-limiting across ExpressRoute Direct Circuits to optimize network
+ flow
+description: |-
+ Rate limiting controls traffic volume between on-premises networks and Azure via ExpressRoute Direct, applying to private or Microsoft peering. It distributes port bandwidth, ensures stability, and prevents congestion, with steps outlined for enabling on circuits.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 1
+labels:
+ guid: d40c769d-2f08-4980-8d8f-a386946276e6
+ area: Scalability
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // This query will return all the ExpressRoute circuits (Direct Based) that have Direct Port Rate Limiting disabled
+ resources
+ | where type =~ "microsoft.network/expressroutecircuits"
+ | where properties.expressRoutePort != "" or isnotnull(properties.expressRoutePort)
+ | where properties.enableDirectPortRateLimit == false
+ | project recommendationId = "d40c769d-2f08-4980-8d8f-a386946276e6", name, id, tags, param1=strcat("enableDirectPortRateLimit: ",properties.enableDirectPortRateLimit)
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-PartnerEdgeRoutingDevicesBidirectionalForwardingDetection.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-PartnerEdgeRoutingDevicesBidirectionalForwardingDetection.yaml
new file mode 100644
index 000000000..b31b5ff21
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-PartnerEdgeRoutingDevicesBidirectionalForwardingDetection.yaml
@@ -0,0 +1,18 @@
+name: aprl-PartnerEdgeRoutingDevicesBidirectionalForwardingDetection
+title: Activate Bidirectional Forwarding Detection on edge devices for faster failover
+description: |-
+ Enabling BFD over ExpressRoute speeds up link failure detection between MSEE devices and routers configured for ExpressRoute (CE/PE), applicable over both customer and Partner Edge routing devices with managed Layer 3 service.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 0
+labels:
+ guid: 2a5bf650-586d-db4c-a292-d922be7d3e0e
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-SingleExpressrouteCircuitInterimBackupSolution.yaml b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-SingleExpressrouteCircuitInterimBackupSolution.yaml
new file mode 100644
index 000000000..9ad8f6e31
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-expressRouteCircuits/aprl-SingleExpressrouteCircuitInterimBackupSolution.yaml
@@ -0,0 +1,19 @@
+name: aprl-SingleExpressrouteCircuitInterimBackupSolution
+title: Use a site-to-site VPN as an interim backup solution for a single ExpressRoute
+ circuit
+description: |-
+ If you haven't added a second ExpressRoute circuit, use a site-to-site VPN as a temporary solution until the second circuit is available. This ensures network reliability and continuity of service.
+source:
+ type: aprl
+ file: azure-resources/Network/expressRouteCircuits/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/expressRouteCircuits
+severity: 1
+labels:
+ guid: f902cf86-2b53-2942-abc2-781f4fb62be6
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/revcl-DefaultHomepageinApplicationSettings.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/revcl-DefaultHomepageinApplicationSettings.yaml
new file mode 100644
index 000000000..29018f580
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/revcl-DefaultHomepageinApplicationSettings.yaml
@@ -0,0 +1,17 @@
+name: revcl-DefaultHomepageinApplicationSettings
+title: Frontdoor - Turn off the default homepageIn the application settings of your
+ App, set AzureWebJobsDisableHomepage to true. This will return a 204 (No Content)
+ to the PoP so only header data is returned.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 3da1dae2-cc88-4147-8607-c1cca0e61465
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-monitor/logs/design-logs-deployment
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/revcl-MinimalContentFunctionProxy.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/revcl-MinimalContentFunctionProxy.yaml
new file mode 100644
index 000000000..d7619ef6b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/revcl-MinimalContentFunctionProxy.yaml
@@ -0,0 +1,18 @@
+name: revcl-MinimalContentFunctionProxy
+title: Frontdoor - Route to something that returns nothing. Either set up a Function,
+ Function Proxy, or add a route in your WebApp that returns 200 (OK) and sends no
+ or minimal content. The advantage of this is you will be able to log out when it
+ is called.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 8dd458e9-2713-49b8-8110-2dbd6eaf11e6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-setup-guide/monitoring-reporting?tabs=AzureMonitor
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorIncomingRequests.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorIncomingRequests.yaml
new file mode 100644
index 000000000..1b2277ff6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorIncomingRequests.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureFrontDoorIncomingRequests
+title: Optimize incoming requests. Azure Front Door bills the incoming requests. You
+ can set restrictions in your design configuration.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 871b4651-734d-40f4-b8a5-1705fa30dbe3
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorInstanceDataTransferCosts.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorInstanceDataTransferCosts.yaml
new file mode 100644
index 000000000..76a25e40b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorInstanceDataTransferCosts.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFrontDoorInstanceDataTransferCosts
+title: Use caching for endpoints that support it.
+description: Caching optimizes data transfer costs because it reduces the number of
+ calls from your Azure Front Door instance to the origin.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: fc470281-721e-40db-9289-ad73b03159d7
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorOriginGroupSingleBackEndPools.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorOriginGroupSingleBackEndPools.yaml
new file mode 100644
index 000000000..1165034d4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorOriginGroupSingleBackEndPools.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureFrontDoorOriginGroupSingleBackEndPools
+title: Disable health checks in single back-end pools.If you have only one origin
+ configured in your Azure Front Door origin group, these calls are unnecessary.
+description: You can save on bandwidth costs by disabling requests that aren't required
+ to make routing decisions.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: f397a438-b320-46f8-a41a-f94545db3412
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorReportsDataTransfer.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorReportsDataTransfer.yaml
new file mode 100644
index 000000000..c61098e91
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorReportsDataTransfer.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFrontDoorReportsDataTransfer
+title: Consider bandwidth costs. The bandwidth costs of Azure Front Door depend on
+ the tier that you choose and the type of data transfer. Azure Front Door provides
+ built-in reports for billable metrics. To assess your costs related to bandwidth
+ and where you can focus your optimization efforts, see Azure Front Door reports.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 3db5b1f9-57ec-44a6-adec-4f7cef47e63c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorRoutingMethod.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorRoutingMethod.yaml
new file mode 100644
index 000000000..8b963af27
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorRoutingMethod.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFrontDoorRoutingMethod
+title: Use resources efficiently. Azure Front Door uses a routing method that helps
+ with resource optimization. Unless the workload is extremely latency sensitive,
+ distribute traffic evenly across all environments to effectively use deployed resources.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: d16d79fc-3c0c-4da4-9cfe-8a6b97d7259d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorTiersRealisticCosts.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorTiersRealisticCosts.yaml
new file mode 100644
index 000000000..5d3b5a785
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-AzureFrontDoorTiersRealisticCosts.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFrontDoorTiersRealisticCosts
+title: Review Azure Front Door tiers and pricing. Use the pricing calculator to estimate
+ the realistic costs for each tier. Compare the features and suitability of each
+ tier for your scenario. For instance, only the Premium tier supports connecting
+ to your origin via Private Link.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 5ecb8da9-9b18-4f39-a69e-c69eb2513b4b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-BandwidthConsumptionFileCompression.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-BandwidthConsumptionFileCompression.yaml
new file mode 100644
index 000000000..1f2f390be
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-BandwidthConsumptionFileCompression.yaml
@@ -0,0 +1,15 @@
+name: wafsg-BandwidthConsumptionFileCompression
+title: Consider enabling file compression. For this configuration, the application
+ must support compression and caching must be enabled.
+description: Compression reduces bandwidth consumption and improves performance.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 638db3b0-f9b3-49b8-86f1-11621086b10f
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-HighAvailabilityRequirementsCentralizedServices.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-HighAvailabilityRequirementsCentralizedServices.yaml
new file mode 100644
index 000000000..c790aec4d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-HighAvailabilityRequirementsCentralizedServices.yaml
@@ -0,0 +1,18 @@
+name: wafsg-HighAvailabilityRequirementsCentralizedServices
+title: Consider using a shared instance that's provided by the organization. Costs
+ incurred from centralized services are shared between the workloads. However, consider
+ the tradeoff with reliability. For mission-critical applications that have high
+ availability requirements, we recommend an autonomous instance.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 78f09072-d08f-430c-9d24-6d3b938ecd14
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-LongPeriodLoggingData.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-LongPeriodLoggingData.yaml
new file mode 100644
index 000000000..2eacd935c
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Cost/wafsg-LongPeriodLoggingData.yaml
@@ -0,0 +1,17 @@
+name: wafsg-LongPeriodLoggingData
+title: Pay attention to the amount of data logged. Costs related to both bandwidth
+ and storage can accrue if certain requests aren't necessary or if logging data is
+ retained for a long period of time.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Cost
+severity: 1
+labels:
+ guid: 1069bc46-68c3-46dd-80d0-700866521165
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafConfigurationNewRuleSetVersion.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafConfigurationNewRuleSetVersion.yaml
new file mode 100644
index 000000000..d4f334a1e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafConfigurationNewRuleSetVersion.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureFrontDoorWafConfigurationNewRuleSetVersion
+title: Define your Azure Front Door WAF configuration as code. By using code, you
+ can more easily adopt new rule set version and gain additional protection.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 189ea962-3969-4863-8f5a-5ad808c2cf4b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#define-your-waf-configuration-as-code
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafLogsDiagnosticSettings.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafLogsDiagnosticSettings.yaml
new file mode 100644
index 000000000..5df784f76
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafLogsDiagnosticSettings.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorWafLogsDiagnosticSettings
+title: Add diagnostic settings to save your Azure Front Door WAF logs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 4cea4050-7946-4a7c-89e6-b021b73c352d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafLogsMicrosoftSentinel.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafLogsMicrosoftSentinel.yaml
new file mode 100644
index 000000000..024a234f9
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-AzureFrontDoorWafLogsMicrosoftSentinel.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorWafLogsMicrosoftSentinel
+title: Send Azure Front Door WAF logs to Microsoft Sentinel.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 845f5f91-9c21-4674-a725-5ce890850e20
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-CustomerManagedTlsCertificatesAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-CustomerManagedTlsCertificatesAzureFrontDoor.yaml
new file mode 100644
index 000000000..2e2326ab5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-CustomerManagedTlsCertificatesAzureFrontDoor.yaml
@@ -0,0 +1,17 @@
+name: revcl-CustomerManagedTlsCertificatesAzureFrontDoor
+title: If you use customer-managed TLS certificates with Azure Front Door, use the
+ 'Latest' certificate version. Reduce the risk of outages caused by manual certificate
+ renewal
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: f00a69de-7076-4734-a734-6e4552cad9e1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-latest-version-for-customer-managed-certificates
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-ManagedTlsCertificatesAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-ManagedTlsCertificatesAzureFrontDoor.yaml
new file mode 100644
index 000000000..13f440f65
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/revcl-ManagedTlsCertificatesAzureFrontDoor.yaml
@@ -0,0 +1,20 @@
+name: revcl-ManagedTlsCertificatesAzureFrontDoor
+title: Use managed TLS certificates with Azure Front Door. Reduce operational cost
+ and risk of outages due to certificate renewals.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 0
+labels:
+ guid: af95c92d-d723-4f4a-98d7-8722324efd4d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-managed-tls-certificates
+queries:
+ arg: cdnresources | where type =~ 'microsoft.cdn/profiles/customdomains' | extend
+ frontDoorId = substring(id, 0, indexof(id, '/customdomains')) | extend compliant
+ = (isnull(properties['tlsSettings']['certificateType']) or tolower(properties['tlsSettings']['certificateType'])
+ =~ 'customercertificate') | project compliant, id = frontDoorId
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorConfigurationCriticalOperationalIssues.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorConfigurationCriticalOperationalIssues.yaml
new file mode 100644
index 000000000..2f56eff2f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorConfigurationCriticalOperationalIssues.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFrontDoorConfigurationCriticalOperationalIssues
+title: Capture logs and metrics. Include resource activity logs, access logs, health
+ probe logs, and WAF logs. Set up alerts.
+description: Monitoring ingress flow is a crucial part of monitoring an application.
+ You want to track requests and make performance and security improvements. You need
+ data to debug your Azure Front Door configuration. With alerts in place, you can
+ get instant notifications of any critical operational issues.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 90aa5326-da06-4070-bcb0-26d31648029a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorForwardCompatibility.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorForwardCompatibility.yaml
new file mode 100644
index 000000000..b975dbede
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorForwardCompatibility.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFrontDoorForwardCompatibility
+title: Use HTTP to HTTPS redirection to support forward compatibility.
+description: When redirection is enabled, Azure Front Door automatically redirects
+ clients that are using older protocol to use HTTPS for a secure experience.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 1e9aecf0-747c-47c6-936e-a0c404ae8e21
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorManagedTlsCertificates.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorManagedTlsCertificates.yaml
new file mode 100644
index 000000000..a938a3e89
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorManagedTlsCertificates.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureFrontDoorManagedTlsCertificates
+title: Use managed TLS certificates when possible.
+description: Azure Front Door can issue and manage certificates for you. This feature
+ eliminates the need for certificate renewals and minimizes the risk of an outage
+ due to an invalid or expired TLS certificate.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 544fffff-4bcd-4d30-851d-05b7bc2cdb91
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorProfileAnalyticsReports.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorProfileAnalyticsReports.yaml
new file mode 100644
index 000000000..8260df02a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorProfileAnalyticsReports.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFrontDoorProfileAnalyticsReports
+title: Review the built-in analytics reports.
+description: A holistic view of your Azure Front Door profile helps drive improvements
+ based on traffic and security reports through WAF metrics.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: bf371c38-103b-4467-953d-f6fc7746d599
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorRedirectionCapabilities.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorRedirectionCapabilities.yaml
new file mode 100644
index 000000000..675f765bd
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorRedirectionCapabilities.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFrontDoorRedirectionCapabilities
+title: Simplify configurations. Use Azure Front Door to easily manage configurations.
+ For example, suppose your architecture supports microservices. Azure Front Door
+ supports redirection capabilities, so you can use path-based redirection to target
+ individual services.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: bd0f5f64-5670-4d70-9e1e-a455f393824b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorRoutingMethodsWeightedLoadBalancingApproach.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorRoutingMethodsWeightedLoadBalancingApproach.yaml
new file mode 100644
index 000000000..42dd58ef4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureFrontDoorRoutingMethodsWeightedLoadBalancingApproach.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureFrontDoorRoutingMethodsWeightedLoadBalancingApproach
+title: Handle progressive exposure by using Azure Front Door routing methods. For
+ a weighted load balancing approach you can use a canary deployment to send a specific
+ percentage of traffic to a back end. This approach helps you test new features and
+ releases in a controlled environment before you roll them out.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 34d0c653-4565-4c84-b000-6226c6410dac
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureResourceManagerTemplatesAzureFrontDoorInstance.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureResourceManagerTemplatesAzureFrontDoorInstance.yaml
new file mode 100644
index 000000000..9318f3368
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-AzureResourceManagerTemplatesAzureFrontDoorInstance.yaml
@@ -0,0 +1,18 @@
+name: wafsg-AzureResourceManagerTemplatesAzureFrontDoorInstance
+title: Use infrastructure as code (IaC) technologies. Use IaC technologies like Bicep
+ and Azure Resource Manager templates to provision the Azure Front Door instance.
+ These declarative approaches provide consistency and straightforward maintenance.
+ For example, by using IaC technologies, you can easily adopt new ruleset versions.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 58485d89-afb9-4dd4-bc01-1c487bce0642
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-CertificateManagementOperationalBurden.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-CertificateManagementOperationalBurden.yaml
new file mode 100644
index 000000000..328b833d9
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-CertificateManagementOperationalBurden.yaml
@@ -0,0 +1,16 @@
+name: wafsg-CertificateManagementOperationalBurden
+title: Offload certificate management to Azure. Ease the operational burden associated
+ with certification rotation and renewals.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 29049b7b-7468-4852-895e-f33d1fb0c7fb
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-RelevantAzureFrontDoorLogsAzureFrontDoorOperationalData.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-RelevantAzureFrontDoorLogsAzureFrontDoorOperationalData.yaml
new file mode 100644
index 000000000..64cb5accb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-RelevantAzureFrontDoorLogsAzureFrontDoorOperationalData.yaml
@@ -0,0 +1,18 @@
+name: wafsg-RelevantAzureFrontDoorLogsAzureFrontDoorOperationalData
+title: Collect and analyze Azure Front Door operational data as part of your workload
+ monitoring. Capture relevant Azure Front Door logs and metrics with Azure Monitor
+ Logs. This data helps you troubleshoot, understand user behaviors, and optimize
+ operations.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: 46ce7fe1-829b-48d0-889f-cafd0e5cae28
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-WildcardTlsCertificatesConfiguration.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-WildcardTlsCertificatesConfiguration.yaml
new file mode 100644
index 000000000..d0cc87b5a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Operations/wafsg-WildcardTlsCertificatesConfiguration.yaml
@@ -0,0 +1,15 @@
+name: wafsg-WildcardTlsCertificatesConfiguration
+title: Use wildcard TLS certificates.
+description: You don't need to modify the configuration to add or specify each subdomain
+ separately.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Operations
+severity: 1
+labels:
+ guid: bf934891-a9a1-49f7-9036-ea7ba9630bdc
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/revcl-AzureFrontDoorOriginGroupOneOrigin.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/revcl-AzureFrontDoorOriginGroupOneOrigin.yaml
new file mode 100644
index 000000000..e56389b6e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/revcl-AzureFrontDoorOriginGroupOneOrigin.yaml
@@ -0,0 +1,24 @@
+name: revcl-AzureFrontDoorOriginGroupOneOrigin
+title: Disable health probes when there is only one origin in an Azure Front Door
+ origin group.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 2
+labels:
+ guid: 0b5a380c-4bfb-47bc-b1d7-dcfef363a61b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#disable-health-probes-when-theres-only-one-origin-in-an-origin-group
+queries:
+ arg: cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups/origins'
+ | extend frontDoorId = substring(id, 0, indexof(id, '/origingroups')) | extend
+ originGroupId = substring(id, 0, indexof(id, '/origins')) | join kind=inner (cdnresources
+ | where type =~ 'microsoft.cdn/profiles/origingroups' | extend originGroupName
+ = name | extend hasHealthProbe = isnotnull(properties.healthProbeSettings)) on
+ $left.originGroupId == $right.id | summarize numberOrigins = count() by originGroupId,
+ subscriptionId, frontDoorId, hasHealthProbe, originGroupName | extend compliant
+ = not(numberOrigins == 1 and hasHealthProbe) | project id = frontDoorId, compliant
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/revcl-HeadHealthProbesAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/revcl-HeadHealthProbesAzureFrontDoor.yaml
new file mode 100644
index 000000000..a7479f1f4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/revcl-HeadHealthProbesAzureFrontDoor.yaml
@@ -0,0 +1,20 @@
+name: revcl-HeadHealthProbesAzureFrontDoor
+title: Use HEAD health probes with Azure Front Door, to reduce the traffic that Front
+ Door sends to your application.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 2
+labels:
+ guid: a13f72f3-8f5c-4864-95e5-75bf37fbbeb1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-head-health-probes
+queries:
+ arg: cdnresources | where type =~ 'microsoft.cdn/profiles/origingroups' | extend
+ frontDoorId = substring(id, 0, indexof(id, '/origingroups/')) | extend compliant
+ = (isnull(properties['healthProbeSettings']['probeRequestType']) or toupper(properties['healthProbeSettings']['probeRequestType'])
+ == 'HEAD') | project compliant, id=frontDoorId
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorHealthProbes.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorHealthProbes.yaml
new file mode 100644
index 000000000..f967896ed
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorHealthProbes.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFrontDoorHealthProbes
+title: When you configure health probes in Azure Front Door, consider using `HEAD`
+ requests instead of `GET` requests. The health probe reads only the status code,
+ not the content.
+description: '`HEAD` requests let you query a state change without fetching its entire
+ content.'
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: a03377e9-9c4a-49dd-abbc-6b240286eb1d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorOptimalFormat.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorOptimalFormat.yaml
new file mode 100644
index 000000000..f0a6acb08
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorOptimalFormat.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFrontDoorOptimalFormat
+title: Use file compression when you're accessing downloadable content.
+description: Compression in Azure Front Door helps deliver content in the optimal
+ format, has a smaller payload, and delivers content to the users faster.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: 1c3bbe86-1c5f-491f-99c7-54f0603b943a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorReportsPerformanceData.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorReportsPerformanceData.yaml
new file mode 100644
index 000000000..1b73f692d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-AzureFrontDoorReportsPerformanceData.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFrontDoorReportsPerformanceData
+title: Analyze performance data by regularly reviewing Azure Front Door reports. These
+ reports provide insights into various metrics that serve as performance indicators
+ at the technology level.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: 83ea22a9-10c2-4d23-a022-05fc70bfc284
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-BestTrafficRoutingOptionSessionAffinityBasedRouting.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-BestTrafficRoutingOptionSessionAffinityBasedRouting.yaml
new file mode 100644
index 000000000..e39dc83f7
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-BestTrafficRoutingOptionSessionAffinityBasedRouting.yaml
@@ -0,0 +1,19 @@
+name: wafsg-BestTrafficRoutingOptionSessionAffinityBasedRouting
+title: Review the origin routing method. Azure Front Door provides various routing
+ methods, including latency-based, priority-based, weighted, and session affinity-based
+ routing, to the origin. These methods significantly affect your application's performance.
+ To learn more about the best traffic routing option for your scenario, see Traffic
+ routing methods to origin.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: c1024a4d-bcba-42d9-92a8-070c5de5abf4
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-DataTransfers.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-DataTransfers.yaml
new file mode 100644
index 000000000..03f9657fb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-DataTransfers.yaml
@@ -0,0 +1,15 @@
+name: wafsg-DataTransfers
+title: Optimize data transfers.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: b3216475-74fa-46b9-b5a3-f13fcbb7e718
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-ExpectedTrafficPatternsPlanCapacity.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-ExpectedTrafficPatternsPlanCapacity.yaml
new file mode 100644
index 000000000..080699781
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-ExpectedTrafficPatternsPlanCapacity.yaml
@@ -0,0 +1,17 @@
+name: wafsg-ExpectedTrafficPatternsPlanCapacity
+title: Plan capacity by analyzing your expected traffic patterns. Conduct thorough
+ testing to understand how your application performs under different loads. Consider
+ factors like simultaneous transactions, request rates, and data transfer.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: 231e1a74-b2af-4061-8703-c1bc0c84ad7c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-HealthProbesHealthInformation.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-HealthProbesHealthInformation.yaml
new file mode 100644
index 000000000..0eab6a516
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-HealthProbesHealthInformation.yaml
@@ -0,0 +1,17 @@
+name: wafsg-HealthProbesHealthInformation
+title: Optimize the use of health probes. Get health information from health probes
+ only when the state of the origins change. Strike a balance between monitoring accuracy
+ and minimizing unnecessary traffic.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: fa0e75e6-5669-406a-8155-44e8d40ae935
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-MultipleBackEndsSameBackEndServer.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-MultipleBackEndsSameBackEndServer.yaml
new file mode 100644
index 000000000..bc919b042
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-MultipleBackEndsSameBackEndServer.yaml
@@ -0,0 +1,20 @@
+name: wafsg-MultipleBackEndsSameBackEndServer
+title: Evaluate whether you should enable session affinity when requests from the
+ same user should be directed to the same back-end server. From a reliability perspective,
+ we don't recommend this approach. If you use this option, the application should
+ gracefully recover without disrupting user sessions. There's also a tradeoff on
+ load balancing because it restricts the flexibility of distributing traffic across
+ multiple back ends evenly.
+description: Optimize performance and maintain continuity for user sessions, especially
+ when applications rely on maintaining state information locally.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: c1acd7ab-028c-4f25-a0a9-840fe534fca7
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-NearestAzureFrontDoorEntryPointFasterUserExperience.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-NearestAzureFrontDoorEntryPointFasterUserExperience.yaml
new file mode 100644
index 000000000..843c6fca5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-NearestAzureFrontDoorEntryPointFasterUserExperience.yaml
@@ -0,0 +1,20 @@
+name: wafsg-NearestAzureFrontDoorEntryPointFasterUserExperience
+title: Review the location of origin servers. Your origin servers' location impacts
+ the responsiveness of your application. Origin servers should be closer to the users.
+ Azure Front Door ensures that users from a specific location access the nearest
+ Azure Front Door entry point. The performance benefits include faster user experience,
+ better use of latency-based routing by Azure Front Door, and minimized data transfer
+ time by using caching, which stores content closer to users.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: 95d67b4f-c19e-40d0-9a55-dba46c40eea8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-RobustContentDeliveryNetworkSolutionAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-RobustContentDeliveryNetworkSolutionAzureFrontDoor.yaml
new file mode 100644
index 000000000..01d4731e5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Performance/wafsg-RobustContentDeliveryNetworkSolutionAzureFrontDoor.yaml
@@ -0,0 +1,21 @@
+name: wafsg-RobustContentDeliveryNetworkSolutionAzureFrontDoor
+title: Enable caching. You can optimize query strings for caching. For purely static
+ content, ignore query strings to maximize your use of the cache. If your application
+ uses query strings, consider including them in the cache key. Including the query
+ strings in the cache key allows Azure Front Door to serve cached responses or other
+ responses, based on your configuration.
+description: Azure Front Door offers a robust content delivery network solution that
+ caches content at the edge of the network. Caching reduces the load on the back-end
+ servers and reduces data movement across the network, which helps offload bandwidth
+ usage.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Performance
+severity: 1
+labels:
+ guid: 6133804d-8e26-4b44-b0ac-9a94fc420227
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/revcl-GoodHealthProbeEndpointsAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/revcl-GoodHealthProbeEndpointsAzureFrontDoor.yaml
new file mode 100644
index 000000000..28eb29d94
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/revcl-GoodHealthProbeEndpointsAzureFrontDoor.yaml
@@ -0,0 +1,16 @@
+name: revcl-GoodHealthProbeEndpointsAzureFrontDoor
+title: Select good health probe endpoints for Azure Front Door. Consider building
+ health endpoints that check all of your application's dependencies.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 5567048e-e5d7-4206-9c55-b5ed45d2cc0c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#select-good-health-probe-endpoints
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AllowableLatencyRangeBestOriginResource.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AllowableLatencyRangeBestOriginResource.yaml
new file mode 100644
index 000000000..09ea7160f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AllowableLatencyRangeBestOriginResource.yaml
@@ -0,0 +1,21 @@
+name: wafsg-AllowableLatencyRangeBestOriginResource
+title: Choose a routing method that supports your deployment strategy. The weighted
+ method, which distributes traffic based on the configured weight coefficient, supports
+ active-active models. A priority-based value that configures the primary region
+ to receive all traffic and send traffic to the secondary region as a backup supports
+ active-passive models. Combine the preceding methods with latency so that the origin
+ with the lowest latency receives traffic.
+description: You can select the best origin resource by using a series of decision
+ steps and your design. The selected origin serves traffic within the allowable latency
+ range in the specified ratio of weights.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 2de15aa6-f607-4487-8972-2267a304f313
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorBackEnd.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorBackEnd.yaml
new file mode 100644
index 000000000..8503f417f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorBackEnd.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureFrontDoorBackEnd
+title: Set a timeout on forwarding requests to the back end. Adjust the timeout setting
+ according to your endpoints' needs. If you don't, Azure Front Door might close the
+ connection before the origin sends the response. You can also lower the default
+ timeout for Azure Front Door if all of your origins have a shorter timeout. For
+ more information, see Troubleshooting unresponsive requests.
+description: Timeouts help prevent performance issues and availability issues by terminating
+ requests that take longer than expected to complete.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: afb9a354-567a-4820-ae85-8eff0ad71f44
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorFundamentalDeploymentApproaches.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorFundamentalDeploymentApproaches.yaml
new file mode 100644
index 000000000..6552e9dd1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorFundamentalDeploymentApproaches.yaml
@@ -0,0 +1,22 @@
+name: wafsg-AzureFrontDoorFundamentalDeploymentApproaches
+title: Choose your deployment strategy. The fundamental deployment approaches are
+ active-active and active-passive. Active-active deployment means that multiple environments
+ or stamps that run the workload serve traffic. Active-passive deployment means that
+ only the primary region handles all traffic, but it fails over to the secondary
+ region when necessary. In a multiregion deployment, stamps run in different regions
+ for higher availability with a global load balancer, like Azure Front Door, that
+ distributes traffic. Therefore, it's important to configure the load balancer for
+ the appropriate deployment approach.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 1bc246b5-fba0-4047-bfaf-e5b677c6d003
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorHealthProbesHealthEndpointMonitoringPattern.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorHealthProbesHealthEndpointMonitoringPattern.yaml
new file mode 100644
index 000000000..ef43691ae
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorHealthProbesHealthEndpointMonitoringPattern.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureFrontDoorHealthProbesHealthEndpointMonitoringPattern
+title: Implement the health endpoint monitoring pattern. Your application should expose
+ health endpoints, which aggregate the state of the critical services and dependencies
+ that your application needs to serve requests. Azure Front Door health probes use
+ the endpoint to detect origin servers' health. For more information, see Health
+ Endpoint Monitoring pattern.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: c30bd721-eb70-4887-8b8a-ce38e47ec178
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorPremiumTierAzureFrontDoorEdge.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorPremiumTierAzureFrontDoorEdge.yaml
new file mode 100644
index 000000000..6fc7d9931
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-AzureFrontDoorPremiumTierAzureFrontDoorEdge.yaml
@@ -0,0 +1,19 @@
+name: wafsg-AzureFrontDoorPremiumTierAzureFrontDoorEdge
+title: Estimate the traffic pattern and volume. The number of requests from the client
+ to the Azure Front Door edge might influence your tier choice. If you need to support
+ a high volume of requests, consider the Azure Front Door Premium tier because performance
+ ultimately impacts availability. However, there's a cost tradeoff. These tiers are
+ described in Performance Efficiency.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: fd9f0940-7c31-4ed9-bd8c-5e927973c6c5
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-ContentDeliveryNetworkFunctionalityContentDeliveryNetworkFeature.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-ContentDeliveryNetworkFunctionalityContentDeliveryNetworkFeature.yaml
new file mode 100644
index 000000000..2c9445e67
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-ContentDeliveryNetworkFunctionalityContentDeliveryNetworkFeature.yaml
@@ -0,0 +1,18 @@
+name: wafsg-ContentDeliveryNetworkFunctionalityContentDeliveryNetworkFeature
+title: Take advantage of the built-in content delivery network functionality in Azure
+ Front Door. The content delivery network feature of Azure Front Door has hundreds
+ of edge locations and can help withstand distributed denial of service (DDoS) attacks.
+ These capabilities help improve reliability.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: ec18a3d4-61d5-4247-aa88-acbf11a339df
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-HealthMonitoringPatternImplementationAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-HealthMonitoringPatternImplementationAzureFrontDoor.yaml
new file mode 100644
index 000000000..cddaf50d1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-HealthMonitoringPatternImplementationAzureFrontDoor.yaml
@@ -0,0 +1,19 @@
+name: wafsg-HealthMonitoringPatternImplementationAzureFrontDoor
+title: Set up health probes on the origin. Configure Azure Front Door to conduct health
+ checks to determine if the back-end instance is available and ready to continue
+ receiving requests.
+description: Enabled health probes are part of the health monitoring pattern implementation.
+ Health probes make sure that Azure Front Door only routes traffic to instances that
+ are healthy enough to handle requests. For more information, see Best practices
+ on health probes.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 803e063d-1267-43c9-9878-54b1f3bb33b1
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-HighReliabilityRequirementsSessionAffinity.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-HighReliabilityRequirementsSessionAffinity.yaml
new file mode 100644
index 000000000..b50731a1d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-HighReliabilityRequirementsSessionAffinity.yaml
@@ -0,0 +1,17 @@
+name: wafsg-HighReliabilityRequirementsSessionAffinity
+title: Decide if your application requires session affinity. If you have high reliability
+ requirements, we recommend that you disable session affinity.
+description: With session affinity, user connections stay on the same origin during
+ the user session. If that origin becomes unavailable, the user experience might
+ be disrupted.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 702c37d1-ddfb-40fc-9ea0-58643a2e61b6
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-MultipleCustomDomainNamesOriginalHttpHostName.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-MultipleCustomDomainNamesOriginalHttpHostName.yaml
new file mode 100644
index 000000000..56c3456b1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-MultipleCustomDomainNamesOriginalHttpHostName.yaml
@@ -0,0 +1,19 @@
+name: wafsg-MultipleCustomDomainNamesOriginalHttpHostName
+title: Use the same host name on Azure Front Door and your origin. Azure Front Door
+ can rewrite the host header of incoming requests, which is useful when you have
+ multiple custom domain names that route to one origin. However, rewriting the host
+ header might cause issues with request cookies and URL redirection.
+description: Set the same host name to prevent malfunction with session affinity,
+ authentication, and authorization. For more information, see Preserve the original
+ HTTP host name between a reverse proxy and its back-end web application.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: afa6253b-fffa-487f-a9b9-911e9821afef
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-OriginalHttpHostNameSameHostName.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-OriginalHttpHostNameSameHostName.yaml
new file mode 100644
index 000000000..57eed267e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-OriginalHttpHostNameSameHostName.yaml
@@ -0,0 +1,17 @@
+name: wafsg-OriginalHttpHostNameSameHostName
+title: Use the same host name on Azure Front Door and origin servers. To ensure that
+ cookies or redirect URLs work properly, preserve the original HTTP host name when
+ you use a reverse proxy, like a load balancer, in front of a web application.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 70c56b7a-a811-4c35-9fe0-939d9e866854
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-OtherBackEndOriginsBackEndPools.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-OtherBackEndOriginsBackEndPools.yaml
new file mode 100644
index 000000000..faf0422fd
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-OtherBackEndOriginsBackEndPools.yaml
@@ -0,0 +1,19 @@
+name: wafsg-OtherBackEndOriginsBackEndPools
+title: Support redundancy by having multiple origins in one or more back-end pools.
+ Always have redundant instances of your application and make sure each instance
+ exposes an endpoint or origin. You can place those origins in one or more back-end
+ pools.
+description: Multiple origins support redundancy by distributing traffic across multiple
+ instances of the application. If one instance is unavailable, then other back-end
+ origins can still receive traffic.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: d5494be7-6a79-4d3f-bf44-ebe88788cd95
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-RedundantTrafficManagementOptionAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-RedundantTrafficManagementOptionAzureFrontDoor.yaml
new file mode 100644
index 000000000..27c4d8493
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-RedundantTrafficManagementOptionAzureFrontDoor.yaml
@@ -0,0 +1,18 @@
+name: wafsg-RedundantTrafficManagementOptionAzureFrontDoor
+title: Consider a redundant traffic management option. Azure Front Door is a globally
+ distributed service that runs as a singleton in an environment. Azure Front Door
+ is a potential single point of failure in the system. If the service fails, then
+ clients can't access your application during the downtime.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 5a88863f-43e9-48c7-8346-cf797fa4e4fa
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-WebApplicationFirewallRateLimitingRules.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-WebApplicationFirewallRateLimitingRules.yaml
new file mode 100644
index 000000000..9c253f15d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Reliability/wafsg-WebApplicationFirewallRateLimitingRules.yaml
@@ -0,0 +1,16 @@
+name: wafsg-WebApplicationFirewallRateLimitingRules
+title: Take advantage of the rate-limiting rules that are included with a web application
+ firewall (WAF).
+description: Limit requests to prevent clients from sending too much traffic to your
+ application. Rate limiting can help you avoid problems like a retry storm.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Reliability
+severity: 1
+labels:
+ guid: 4a17bea1-3951-4f73-8de7-cd3193bca5d2
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorEnd.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorEnd.yaml
new file mode 100644
index 000000000..8be91682e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorEnd.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureFrontDoorEnd
+title: Use end-to-end TLS with Azure Front Door. Use TLS for connections from your
+ clients to Front Door, and from Front Door to your origin.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 2e30abab-5478-417c-81bf-bf1ad4ed1ed4
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-end-to-end-tls
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorGlobalHttpSApps.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorGlobalHttpSApps.yaml
new file mode 100644
index 000000000..d8b6ef350
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorGlobalHttpSApps.yaml
@@ -0,0 +1,18 @@
+name: revcl-AzureFrontDoorGlobalHttpSApps
+title: Use Azure Front Door with WAF policies to deliver and help protect global HTTP/S
+ apps that span multiple Azure regions.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: e79d17b7-3b22-4a5a-97e7-a8ed4b30e38c
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorHttpsRedirection.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorHttpsRedirection.yaml
new file mode 100644
index 000000000..3e263d6f2
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorHttpsRedirection.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureFrontDoorHttpsRedirection
+title: Use HTTP to HTTPS redirection with Azure Front Door. Support older clients
+ by redirecting them to an HTTPS request automatically.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 10aa45af-166f-44c4-9f36-b6d592dac2ca
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-http-to-https-redirection
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorInstanceOrigins.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorInstanceOrigins.yaml
new file mode 100644
index 000000000..43a75bfc8
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorInstanceOrigins.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorInstanceOrigins
+title: Make sure your origins only take traffic from your Azure Front Door instance.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 7d3df025-59a3-447d-ac25-3f5750d35de1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/origin-security?tabs=app-service-functions
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafApplication.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafApplication.yaml
new file mode 100644
index 000000000..547c4ccaa
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafApplication.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorWafApplication
+title: Enable the Azure Front Door WAF. Protect your application from a range of attacks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 28b9ee82-b2c7-45aa-bc98-6de6f59a095d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#enable-the-waf
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafBotProtectionRuleSetBotRules.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafBotProtectionRuleSetBotRules.yaml
new file mode 100644
index 000000000..0c6ed8875
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafBotProtectionRuleSetBotRules.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureFrontDoorWafBotProtectionRuleSetBotRules
+title: Enable the Azure Front Door WAF bot protection rule set. The bot rules detect
+ good and bad bots.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 147a13d4-2a2f-4824-a524-f5855b52b946
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-bot-management-rules
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafDefaultRuleSetsCommonAttacks.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafDefaultRuleSetsCommonAttacks.yaml
new file mode 100644
index 000000000..05ccf11ba
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafDefaultRuleSetsCommonAttacks.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureFrontDoorWafDefaultRuleSetsCommonAttacks
+title: Enable the Azure Front Door WAF default rule sets. The default rule sets detect
+ and block common attacks.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 49a98f2b-ec22-4a87-9415-6a10b00d6555
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#enable-default-rule-sets
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafFalsePositiveDetections.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafFalsePositiveDetections.yaml
new file mode 100644
index 000000000..c50889aaa
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafFalsePositiveDetections.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorWafFalsePositiveDetections
+title: Tune the Azure Front Door WAF for your workload. Reduce false positive detections.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 2902d8cc-1b0c-4495-afad-624ab70f7bd6
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#tune-your-waf
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafLargeAmounts.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafLargeAmounts.yaml
new file mode 100644
index 000000000..a0b09b7cd
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafLargeAmounts.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureFrontDoorWafLargeAmounts
+title: Add rate limiting to the Azure Front Door WAF. Rate limiting blocks clients
+ accidentally or intentionally sending large amounts of traffic in a short period
+ of time.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: b9620385-1cde-418f-914b-a84a06982ffc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-rate-limiting
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafPolicyBodyInspectionFeature.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafPolicyBodyInspectionFeature.yaml
new file mode 100644
index 000000000..dd91ae780
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafPolicyBodyInspectionFeature.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureFrontDoorWafPolicyBodyInspectionFeature
+title: Enable request body inspection feature enabled in Azure Front Door WAF policy.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 17ba124b-127d-42b6-9322-388d5b2bbcfc
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits#request-body-inspection
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafRateLimitsHighRateLimitThresholds.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafRateLimitsHighRateLimitThresholds.yaml
new file mode 100644
index 000000000..976ed5c5b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafRateLimitsHighRateLimitThresholds.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureFrontDoorWafRateLimitsHighRateLimitThresholds
+title: 'Use a high threshold for Azure Front Door WAF rate limits. High rate limit
+ thresholds avoid blocking legitimate traffic, while still providing protection against
+ extremely high numbers of requests that might overwhelm your infrastructure. '
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 6dc36c52-0124-4ffe-9eaf-23ec1282dedb
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-a-high-threshold-for-rate-limits
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafUnknownZzLocation.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafUnknownZzLocation.yaml
new file mode 100644
index 000000000..9d918ec16
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureFrontDoorWafUnknownZzLocation.yaml
@@ -0,0 +1,17 @@
+name: revcl-AzureFrontDoorWafUnknownZzLocation
+title: Specify the unknown (ZZ) location when geo-filtering traffic with the Azure
+ Front Door WAF. Avoid accidentally blocking legitimate requests when IP addresses
+ can't be geo-matched.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 00acd8a9-6975-414f-8491-2be6309893b8
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#specify-the-unknown-zz-location
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureTrafficManagerAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureTrafficManagerAzureFrontDoor.yaml
new file mode 100644
index 000000000..1329d6f82
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-AzureTrafficManagerAzureFrontDoor.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureTrafficManagerAzureFrontDoor
+title: Avoid combining Azure Traffic Manager and Azure Front Door.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 062d5839-4d36-402f-bfa4-02811eb936e9
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#avoid-combining-traffic-manager-and-front-door
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-FrontDoorApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-FrontDoorApplicationGateway.yaml
new file mode 100644
index 000000000..b9716fea6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-FrontDoorApplicationGateway.yaml
@@ -0,0 +1,19 @@
+name: revcl-FrontDoorApplicationGateway
+title: When using Front Door and Application Gateway to help protect HTTP/S apps,
+ use WAF policies in Front Door. Lock down Application Gateway to receive traffic
+ only from Front Door.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 3f29812b-2363-4cef-b179-b599de0d5973
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/ddos-protection/ddos-protection-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-GeographicalRegionsExpectedCountries.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-GeographicalRegionsExpectedCountries.yaml
new file mode 100644
index 000000000..83e011f69
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-GeographicalRegionsExpectedCountries.yaml
@@ -0,0 +1,16 @@
+name: revcl-GeographicalRegionsExpectedCountries
+title: If you are not expecting traffic from all geographical regions, use geo-filters
+ to block traffic from non-expected countries.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 2
+labels:
+ guid: 388a3d0e-0a43-4367-90b2-3dd2aeece5ee
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#geo-filter-traffic
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-LatestAzureFrontDoorWafRuleSetVersionRuleSetUpdates.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-LatestAzureFrontDoorWafRuleSetVersionRuleSetUpdates.yaml
new file mode 100644
index 000000000..e201fd283
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-LatestAzureFrontDoorWafRuleSetVersionRuleSetUpdates.yaml
@@ -0,0 +1,16 @@
+name: revcl-LatestAzureFrontDoorWafRuleSetVersionRuleSetUpdates
+title: Use the latest Azure Front Door WAF rule set version. Rule set updates are
+ regularly updated to take account of the current threat landscape.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: d7dcdcb9-0d99-44b9-baab-ac7570ede79a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#use-the-latest-ruleset-versions
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-SameDomainNameAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-SameDomainNameAzureFrontDoor.yaml
new file mode 100644
index 000000000..062a9b80a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-SameDomainNameAzureFrontDoor.yaml
@@ -0,0 +1,16 @@
+name: revcl-SameDomainNameAzureFrontDoor
+title: Use the same domain name on Azure Front Door and your origin. Mismatched host
+ names can cause subtle bugs.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: 5efeb96a-003f-4b18-8fcd-b4d84459c2b2
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/frontdoor/best-practices#use-the-same-domain-name-on-front-door-and-your-origin
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-WafPolicyFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-WafPolicyFrontDoor.yaml
new file mode 100644
index 000000000..0c0c253af
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/revcl-WafPolicyFrontDoor.yaml
@@ -0,0 +1,22 @@
+name: revcl-WafPolicyFrontDoor
+title: Deploy your WAF policy for Front Door in 'Prevention' mode.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 0
+labels:
+ guid: ae248989-b306-4591-9186-de482e3f0f0e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-policy-settings
+queries:
+ arg: resources | where type == 'microsoft.network/frontdoorwebapplicationfirewallpolicies'
+ | project policyName=name, policyId=id,policySku=sku.name, links=properties.securityPolicyLinks,
+ enabledState=properties.policySettings.enabledState, mode=properties.policySettings.mode
+ | mvexpand links | extend securityPolicy=links.id | extend securityPolicyParts=split(securityPolicy,
+ '/') | extend profileId=strcat_array(array_slice(securityPolicyParts, 0, -3),
+ '/') | project id=profileId, compliant=((enabledState=='Enabled') and (mode=='Prevention')),
+ enabledState, mode
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorFrontEnds.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorFrontEnds.yaml
new file mode 100644
index 000000000..6c53df4f6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorFrontEnds.yaml
@@ -0,0 +1,17 @@
+name: wafsg-AzureFrontDoorFrontEnds
+title: Block common threats at the edge. WAF is integrated with Azure Front Door.
+ Enable WAF rules on the front ends to protect applications from common exploits
+ and vulnerabilities at the network edge, closer to the attack source.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 45987127-47d8-43a3-ad12-9f625ed6a883
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorRoleBasedAccessControlControlPlane.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorRoleBasedAccessControlControlPlane.yaml
new file mode 100644
index 000000000..a79752e1f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorRoleBasedAccessControlControlPlane.yaml
@@ -0,0 +1,16 @@
+name: wafsg-AzureFrontDoorRoleBasedAccessControlControlPlane
+title: Allow only authorized access to the control plane. Use Azure Front Door role-based
+ access control (RBAC) to restrict access to only the identities that need it.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 959ab078-8d43-4796-9fef-6445a325097c
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorSecurityBaseline.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorSecurityBaseline.yaml
new file mode 100644
index 000000000..7faf78aed
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-AzureFrontDoorSecurityBaseline.yaml
@@ -0,0 +1,15 @@
+name: wafsg-AzureFrontDoorSecurityBaseline
+title: Review the security baseline for Azure Front Door.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 017b3c2c-d4ae-434f-8a34-07892661814d
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-BackEndServersFrontEnd.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-BackEndServersFrontEnd.yaml
new file mode 100644
index 000000000..743e8c6e6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-BackEndServersFrontEnd.yaml
@@ -0,0 +1,16 @@
+name: wafsg-BackEndServersFrontEnd
+title: Protect the back-end servers. The front end acts as the single point of ingress
+ to the application.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: cbbd35ba-ecdb-4139-ab42-bdac8141062a
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-CentralizedSecurityInformationAnomalousActivity.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-CentralizedSecurityInformationAnomalousActivity.yaml
new file mode 100644
index 000000000..a9c13b51b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-CentralizedSecurityInformationAnomalousActivity.yaml
@@ -0,0 +1,19 @@
+name: wafsg-CentralizedSecurityInformationAnomalousActivity
+title: Monitor anomalous activity. Regularly review the logs to check for attacks
+ and false positives. Send WAF logs from Azure Front Door to your organization's
+ centralized security information and event management (SIEM), such as Microsoft
+ Sentinel, to detect threat patterns and incorporate preventative measures in the
+ workload design.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 7eec048b-3dfe-4a71-b4ac-5a3f554ff7ae
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-EndTransportLayerSecurityAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-EndTransportLayerSecurityAzureFrontDoor.yaml
new file mode 100644
index 000000000..3a7e1b4f2
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-EndTransportLayerSecurityAzureFrontDoor.yaml
@@ -0,0 +1,17 @@
+name: wafsg-EndTransportLayerSecurityAzureFrontDoor
+title: Protect data in transit. Enable end-to-end Transport Layer Security (TLS),
+ HTTP to HTTPS redirection, and managed TLS certificates when applicable. For more
+ information, see TLS best practices for Azure Front Door.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: ad119b63-dfca-446a-a65b-9f1e5849be6b
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-FrontDoorCustomDomainEndpointsAzureFrontDoorManagedCertificates.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-FrontDoorCustomDomainEndpointsAzureFrontDoorManagedCertificates.yaml
new file mode 100644
index 000000000..e3ab5923d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-FrontDoorCustomDomainEndpointsAzureFrontDoorManagedCertificates.yaml
@@ -0,0 +1,21 @@
+name: wafsg-FrontDoorCustomDomainEndpointsAzureFrontDoorManagedCertificates
+title: Enable end-to-end TLS, HTTP to HTTPS redirection, and managed TLS certificates
+ when applicable. Review the TLS best practices for Azure Front Door. Use TLS version
+ 1.2 as the minimum allowed version with ciphers that are relevant for your application. Azure
+ Front Door managed certificates should be your default choice for ease of operations.
+ However, if you want to manage the lifecycle of the certificates, use your own certificates
+ in Azure Front Door custom domain endpoints and store them in Key Vault.
+description: TLS ensures that data exchanges between the browser, Azure Front Door,
+ and the back-end origins are encrypted to prevent tampering. Key Vault offers managed
+ certificate support and simple certificate renewal and rotation.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 5d4054fd-512a-4af5-84bd-1b039783b5e2
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-OtherPublicIpAddressesDdosProtectionStandardPlan.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-OtherPublicIpAddressesDdosProtectionStandardPlan.yaml
new file mode 100644
index 000000000..463234347
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-OtherPublicIpAddressesDdosProtectionStandardPlan.yaml
@@ -0,0 +1,19 @@
+name: wafsg-OtherPublicIpAddressesDdosProtectionStandardPlan
+title: Protect Azure Front Door against unexpected traffic. Azure Front Door uses
+ the basic plan of Azure DDoS protection to protect application endpoints from DDoS
+ attacks. If you need to expose other public IP addresses from your application,
+ consider adding the DDoS Protection standard plan for those addresses for advanced
+ protection and detection capabilities.
+description: ''
+source:
+ type: wafsg
+ file: well-architected/service-guides/azure-front-door.md
+ timestamp: July 24, 2024
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 92f43df8-151b-4445-bba9-e1b96da81d10
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-OwaspTopAttackTypesMicrosoftThreatIntelligence.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-OwaspTopAttackTypesMicrosoftThreatIntelligence.yaml
new file mode 100644
index 000000000..9a82b33f1
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-OwaspTopAttackTypesMicrosoftThreatIntelligence.yaml
@@ -0,0 +1,22 @@
+name: wafsg-OwaspTopAttackTypesMicrosoftThreatIntelligence
+title: 'Enable WAF rule sets that detect and block potentially malicious traffic.
+ This feature is available on the Premium tier. We recommend these rule sets: -
+ Default- Bot protection- IP restriction- Geo-filtering- Rate limiting'
+description: Default rule sets are updated frequently based on OWASP top-10 attack
+ types and information from Microsoft Threat Intelligence. The specialized rule
+ sets detect certain use cases. For example, bot rules classify bots as good, bad,
+ or unknown based on the client IP addresses. They also block bad bots and known
+ IP addresses and restrict traffic based on geographical location of the callers. By
+ using a combination of rule sets, you can detect and block attacks with various
+ intents.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: 67a91ccb-b42b-486c-8d10-99717d93fdb8
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-RuleSetsWafPolicy.yaml b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-RuleSetsWafPolicy.yaml
new file mode 100644
index 000000000..11428acbb
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoors/Security/wafsg-RuleSetsWafPolicy.yaml
@@ -0,0 +1,15 @@
+name: wafsg-RuleSetsWafPolicy
+title: Create exclusions for managed rule sets. Test a WAF policy in detection mode
+ for a few weeks and adjust any false positives before you deploy it.
+description: Reduce false positives and allow legitimate requests for your application.
+source:
+ type: wafsg
+ file: ./checklists-ext/wafsg_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoors
+waf: Security
+severity: 1
+labels:
+ guid: e85f5804-244d-4e3e-bd19-9c5476602260
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Operations/revcl-ApplicationDeliveryServicesAzureFrontDoor-1.yaml b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Operations/revcl-ApplicationDeliveryServicesAzureFrontDoor-1.yaml
new file mode 100644
index 000000000..a912d1b6a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Operations/revcl-ApplicationDeliveryServicesAzureFrontDoor-1.yaml
@@ -0,0 +1,17 @@
+name: revcl-ApplicationDeliveryServicesAzureFrontDoor-1
+title: Send WAF logs from your application delivery services like Azure Front Door
+ and Azure Application Gateway to Microsoft Sentinel. Detect attacks and integrate
+ WAF telemetry into your overall Azure environment.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoorwebapplicationfirewalls
+waf: Operations
+severity: 1
+labels:
+ guid: 7f408960-c626-44cb-a018-347c8d790cdf
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#send-logs-to-microsoft-sentinel
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Operations/revcl-ApplicationDeliveryServicesAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Operations/revcl-ApplicationDeliveryServicesAzureFrontDoor.yaml
new file mode 100644
index 000000000..79391f341
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Operations/revcl-ApplicationDeliveryServicesAzureFrontDoor.yaml
@@ -0,0 +1,17 @@
+name: revcl-ApplicationDeliveryServicesAzureFrontDoor
+title: Add diagnostic settings to save WAF logs from application delivery services
+ like Azure Front Door and Azure Application Gateway. Regularly review the logs to
+ check for attacks and for false positive detections.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoorwebapplicationfirewalls
+waf: Operations
+severity: 0
+labels:
+ guid: 89cc5e11-aa4d-4c3b-893d-feb99215266a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/waf-front-door-best-practices#add-diagnostic-settings-to-save-your-wafs-logs
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-AzureFrontDoorAzureApplicationGateway.yaml b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-AzureFrontDoorAzureApplicationGateway.yaml
new file mode 100644
index 000000000..80787b07f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-AzureFrontDoorAzureApplicationGateway.yaml
@@ -0,0 +1,19 @@
+name: revcl-AzureFrontDoorAzureApplicationGateway
+title: When using Azure Front Door and Azure Application Gateway to help protect HTTP/S
+ apps, use WAF policies in Azure Front Door. Lock down Azure Application Gateway
+ to receive traffic only from Azure Front Door.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoorwebapplicationfirewalls
+waf: Security
+severity: 2
+labels:
+ guid: 3b22a5a6-7e7a-48ed-9b30-e38c3f29812b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-InboundHttpSConnectionsAzureFrontDoor.yaml b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-InboundHttpSConnectionsAzureFrontDoor.yaml
new file mode 100644
index 000000000..a256745d4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-InboundHttpSConnectionsAzureFrontDoor.yaml
@@ -0,0 +1,18 @@
+name: revcl-InboundHttpSConnectionsAzureFrontDoor
+title: Use Azure Front Door and WAF policies to provide global protection across Azure
+ regions for inbound HTTP/S connections to a landing zone.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoorwebapplicationfirewalls
+waf: Security
+severity: 1
+labels:
+ guid: 1d7aa9b6-4704-4489-a804-2d88e79d17b7
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/afds/afds-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-application-delivery/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-OtherReverseProxiesLandingZoneVirtualNetwork.yaml b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-OtherReverseProxiesLandingZoneVirtualNetwork.yaml
new file mode 100644
index 000000000..a24cd6fa8
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-frontdoorwebApplicationFirewalls/Security/revcl-OtherReverseProxiesLandingZoneVirtualNetwork.yaml
@@ -0,0 +1,19 @@
+name: revcl-OtherReverseProxiesLandingZoneVirtualNetwork
+title: Deploy WAFs and other reverse proxies are required for inbound HTTP/S connections,
+ deploy them within a landing-zone virtual network and together with the apps that
+ they're protecting and exposing to the internet.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/frontdoorwebapplicationfirewalls
+waf: Security
+severity: 0
+labels:
+ guid: 2363cefe-179b-4599-be0d-5973cd4cd21b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/architect-network-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-networkWatchers/Operations/revcl-NetworkWatcherTrafficFlows.yaml b/v2/recos/Services/microsoftnetwork-networkWatchers/Operations/revcl-NetworkWatcherTrafficFlows.yaml
new file mode 100644
index 000000000..7e155cd64
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-networkWatchers/Operations/revcl-NetworkWatcherTrafficFlows.yaml
@@ -0,0 +1,17 @@
+name: revcl-NetworkWatcherTrafficFlows
+title: Use Network Watcher to proactively monitor traffic flows
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/networkwatchers
+waf: Operations
+severity: 1
+labels:
+ guid: 90483845-c986-4cb2-a131-56a12476e49f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/network-watcher/network-watcher-monitoring-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/configure-network-watcher/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-AzureNetworkWatcherNetworkingServices.yaml b/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-AzureNetworkWatcherNetworkingServices.yaml
new file mode 100644
index 000000000..08846c0a4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-AzureNetworkWatcherNetworkingServices.yaml
@@ -0,0 +1,26 @@
+name: aprl-AzureNetworkWatcherNetworkingServices
+title: Deploy Network Watcher in all regions where you have networking services
+description: |-
+ Azure Network Watcher offers tools for monitoring, diagnosing, viewing metrics, and managing logs for IaaS resources. It helps maintain the health of VMs, VNets, application gateways, load balancers, but not for PaaS or Web analytics.
+source:
+ type: aprl
+ file: azure-resources/Network/networkWatchers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkWatchers
+severity: 2
+labels:
+ guid: 4e133bd0-8762-bc40-a95b-b29142427d73
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This query will return all locations that do not have a Network Watcher deployed
+ resources
+ | where location != "global"
+ | union (Resources
+ | where type =~ "microsoft.network/networkwatchers")
+ | summarize NetworkWatcherCount = countif(type =~ 'Microsoft.Network/networkWatchers') by location
+ | where NetworkWatcherCount == 0
+ | project recommendationId = "4e133bd0-8762-bc40-a95b-b29142427d73", name=location, id="n/a", param1 = strcat("LocationMisingNetworkWatcher:", location)
diff --git a/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-NetworkSecurityGroupFlowLoggingFlowLogConfigurations.yaml b/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-NetworkSecurityGroupFlowLoggingFlowLogConfigurations.yaml
new file mode 100644
index 000000000..359a96a8f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-NetworkSecurityGroupFlowLoggingFlowLogConfigurations.yaml
@@ -0,0 +1,27 @@
+name: aprl-NetworkSecurityGroupFlowLoggingFlowLogConfigurations
+title: Fix Flow Log configurations in Failed state or Disabled Status
+description: |-
+ Network security group flow logging is a feature of Azure Network Watcher that logs IP traffic info through a network security group. If in Failed state, monitoring data from the associated resource is not collected.
+source:
+ type: aprl
+ file: azure-resources/Network/networkWatchers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkWatchers
+severity: 2
+labels:
+ guid: 22a769ed-0ecb-8b49-bafe-8f52e6373d9c
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // This query will return all Network Watcher Flow Logs that are not enabled or in a succeeded state
+ resources
+ | where type =~ "microsoft.network/networkwatchers/flowlogs" and isnotnull(properties)
+ | extend targetResourceId = tostring(properties.targetResourceId)
+ | extend status = iff(properties.enabled =~ 'true', "Enabled", "Disabled")
+ | extend provisioningState = tostring(properties.provisioningState)
+ | extend flowLogType = iff(properties.targetResourceId contains "Microsoft.Network/virtualNetworks", 'Virtual network', 'Network security group')
+ | where provisioningState != "Succeeded" or status != "Enabled"
+ | project recommendationId = "22a769ed-0ecb-8b49-bafe-8f52e6373d9c", name, id, tags, param1 = strcat("provisioningState:", provisioningState), param2=strcat("Status:", status), param3=strcat("targetResourceId:",targetResourceId), param4=strcat("flowLogType:",flowLogType)
diff --git a/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-NetworkWatcherConnectionMonitorHybridConnectivity.yaml b/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-NetworkWatcherConnectionMonitorHybridConnectivity.yaml
new file mode 100644
index 000000000..4ebc4b55a
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-networkWatchers/aprl-NetworkWatcherConnectionMonitorHybridConnectivity.yaml
@@ -0,0 +1,16 @@
+name: aprl-NetworkWatcherConnectionMonitorHybridConnectivity
+title: Configure Network Watcher Connection monitor
+description: |-
+ Improves monitoring for Azure and Hybrid connectivity
+source:
+ type: aprl
+ file: azure-resources/Network/networkWatchers/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/networkWatchers
+severity: 0
+labels:
+ guid: 1e28bbc1-1eb7-486f-8d7f-93943f40219c
+ area: Monitoring and Alerting
+links: []
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/Reliability/revcl-TrafficManagerGlobalApps.yaml b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/Reliability/revcl-TrafficManagerGlobalApps.yaml
new file mode 100644
index 000000000..213536abd
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/Reliability/revcl-TrafficManagerGlobalApps.yaml
@@ -0,0 +1,17 @@
+name: revcl-TrafficManagerGlobalApps
+title: Use Traffic Manager to deliver global apps that span protocols other than HTTP/S.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/trafficmanagerprofiles
+waf: Reliability
+severity: 0
+labels:
+ guid: cd4cd21b-0881-437f-9e6c-4cfd3e504547
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/web-application-firewall/ag/ag-overview
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-DifferentRegionsOneEndpoint.yaml b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-DifferentRegionsOneEndpoint.yaml
new file mode 100644
index 000000000..a7a360dd5
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-DifferentRegionsOneEndpoint.yaml
@@ -0,0 +1,18 @@
+name: aprl-DifferentRegionsOneEndpoint
+title: Configure at least one endpoint within a another region
+description: |-
+ Profiles should have multiple endpoints to ensure availability in case an endpoint fails. It's also advised to distribute these endpoints across different regions for enhanced reliability.
+source:
+ type: aprl
+ file: azure-resources/Network/trafficManagerProfiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/trafficManagerProfiles
+severity: 1
+labels:
+ guid: 1ad9d7b7-9692-1441-a8f4-93792efbe97a
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |
+ // cannot-be-validated-with-arg
diff --git a/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficBlackHolesGeographicProfiles.yaml b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficBlackHolesGeographicProfiles.yaml
new file mode 100644
index 000000000..2148ade9c
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficBlackHolesGeographicProfiles.yaml
@@ -0,0 +1,27 @@
+name: aprl-TrafficBlackHolesGeographicProfiles
+title: Ensure endpoint configured to (All World) for geographic profiles
+description: |-
+ For geographic routing, traffic is directed to endpoints based on specific regions. If a region fails, without a predefined failover, configuring an endpoint to "All (World)" for geographic profiles can prevent traffic black holes, ensuring service remains available.
+source:
+ type: aprl
+ file: azure-resources/Network/trafficManagerProfiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/trafficManagerProfiles
+severity: 0
+labels:
+ guid: c31f76a0-48cd-9f44-aa43-99ee904db9bc
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |-
+ // Azure Resource Graph Query
+ // Provides a list of Traffic Manager resources that are not confirgured for all-World access
+ Resources
+ | where type == 'microsoft.network/trafficmanagerprofiles'
+ | where properties.trafficRoutingMethod =~ "Geographic"
+ | extend endpoints = properties.endpoints
+ | mv-expand endpoint = endpoints
+ | where endpoint.properties.geoMapping !contains "WORLD"
+ | extend endpointName = endpoint.name
+ | project recommendationId="c31f76a0-48cd-9f44-aa43-99ee904db9bc", name, id, tags, param1=strcat("endpointName:",endpointName), param2=strcat("GeoMapping:", tostring(endpoint.properties.geoMapping))
diff --git a/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficManagerMonitorStatusApplicationWorkload.yaml b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficManagerMonitorStatusApplicationWorkload.yaml
new file mode 100644
index 000000000..d7063a85f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficManagerMonitorStatusApplicationWorkload.yaml
@@ -0,0 +1,24 @@
+name: aprl-TrafficManagerMonitorStatusApplicationWorkload
+title: Traffic Manager Monitor Status Should be Online
+description: |-
+ Monitor status should be online to ensure failover for application workload. If Traffic Manager's health shows Degraded, one or more endpoints may also be Degraded.
+source:
+ type: aprl
+ file: azure-resources/Network/trafficManagerProfiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/trafficManagerProfiles
+severity: 0
+labels:
+ guid: f05a3e6d-49db-2740-88e2-2b13706c1f67
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find traffic manager profiles that have an endpoint monitor status of not 'Online'
+ resources
+ | where type == "microsoft.network/trafficmanagerprofiles"
+ | mv-expand properties.endpoints
+ | where properties_endpoints.properties.endpointMonitorStatus != "Online"
+ | project recommendationId = "f05a3e6d-49db-2740-88e2-2b13706c1f67", name, id, tags, param1 = strcat('Profile name: ',properties_endpoints.name), param2 = strcat('endpointMonitorStatus: ', properties_endpoints.properties.endpointMonitorStatus)
diff --git a/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficManagerProfilesAzureTrafficManager.yaml b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficManagerProfilesAzureTrafficManager.yaml
new file mode 100644
index 000000000..5b2a4e93d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-trafficManagerProfiles/aprl-TrafficManagerProfilesAzureTrafficManager.yaml
@@ -0,0 +1,23 @@
+name: aprl-TrafficManagerProfilesAzureTrafficManager
+title: Traffic manager profiles should have more than one endpoint
+description: |-
+ When configuring the Azure traffic manager, provision at least two endpoints to ensure workloads can fail-over to another instance, enhancing reliability and availability.
+source:
+ type: aprl
+ file: azure-resources/Network/trafficManagerProfiles/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/trafficManagerProfiles
+severity: 1
+labels:
+ guid: 5b422a7f-8caa-3d48-becb-511599e5bba9
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find traffic manager profiles that have less than 2 endpoints
+ resources
+ | where type == "microsoft.network/trafficmanagerprofiles"
+ | where array_length(properties.endpoints) < 2
+ | project recommendationId = "5b422a7f-8caa-3d48-becb-511599e5bba9", name, id, tags, param1 = strcat('EndpointCount: ', array_length(properties.endpoints))
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/Reliability/revcl-RedundantVpnAppliancesPremises.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/Reliability/revcl-RedundantVpnAppliancesPremises.yaml
new file mode 100644
index 000000000..4f3dbf49f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/Reliability/revcl-RedundantVpnAppliancesPremises.yaml
@@ -0,0 +1,17 @@
+name: revcl-RedundantVpnAppliancesPremises
+title: Use redundant VPN appliances on-premises (active/active or active/passive).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworkgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 45866df8-cf85-4ca9-bbe2-65ec1478919e
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-highlyavailable
+- type: docs
+ url: https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/Reliability/revcl-ZoneRedundantVpnGatewaysRemoteLocations.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/Reliability/revcl-ZoneRedundantVpnGatewaysRemoteLocations.yaml
new file mode 100644
index 000000000..e26ad5a9d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/Reliability/revcl-ZoneRedundantVpnGatewaysRemoteLocations.yaml
@@ -0,0 +1,21 @@
+name: revcl-ZoneRedundantVpnGatewaysRemoteLocations
+title: Use zone-redundant VPN gateways to connect branches or remote locations to
+ Azure (where available).
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualnetworkgateways
+waf: Reliability
+severity: 1
+labels:
+ guid: 4d873974-8b66-42d6-b15f-512a65498f6d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/vpn-gateway/create-zone-redundant-vnet-gateway
+- type: docs
+ url: https://learn.microsoft.com/training/modules/intro-to-azure-vpn-gateway/
+queries:
+ arg: resources | where type=='microsoft.network/virtualnetworkgateways' | where
+ properties.gatewayType == 'Vpn' | extend compliant = (tolower(properties.sku.name)
+ contains 'az') | distinct id, compliant
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-CustomerControlledExpressrouteGatewayMaintenanceCustomerControlledMaintenanceConfiguration.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-CustomerControlledExpressrouteGatewayMaintenanceCustomerControlledMaintenanceConfiguration.yaml
new file mode 100644
index 000000000..789d0d37b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-CustomerControlledExpressrouteGatewayMaintenanceCustomerControlledMaintenanceConfiguration.yaml
@@ -0,0 +1,37 @@
+name: aprl-CustomerControlledExpressrouteGatewayMaintenanceCustomerControlledMaintenanceConfiguration
+title: Configure customer-controlled ExpressRoute gateway maintenance
+description: |-
+ ExpressRoute gateways are updated for improved functionality, reliability, performance, and security. Customer-controlled maintenance configuration and scheduling minimize update impact and align with your maintenance windows.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: 3e115044-a3aa-433e-be01-ce17d67e50da
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Find all Virtual Network Gateways without Maintenance Configurations
+
+ resources
+ | where type =~ "Microsoft.Network/virtualNetworkGateways"
+ | extend resourceId = tolower(id)
+ | join kind=leftouter (
+ maintenanceresources
+ | where type =~ "Microsoft.Maintenance/configurationAssignments"
+ | project JsonData = parse_json(properties)
+ | extend maintenanceConfigurationId = tolower(tostring(JsonData.maintenanceConfigurationId))
+ | join kind=inner (
+ resources
+ | where type =~ "Microsoft.Maintenance/maintenanceConfigurations"
+ | project maintenanceConfigurationId=tolower(id)
+ ) on maintenanceConfigurationId
+ | project maintenanceConfigurationId, resourceId=tolower(tostring(JsonData.resourceId))
+ ) on resourceId
+ | where isempty(maintenanceConfigurationId)
+ | project recommendationId = "3e115044-a3aa-433e-be01-ce17d67e50da", name, id, tags, param1= strcat("sku-tier: " , properties.sku.tier), param2=location
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-DiversePeeringLocationsDifferentPeeringLocation-1.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-DiversePeeringLocationsDifferentPeeringLocation-1.yaml
new file mode 100644
index 000000000..401961756
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-DiversePeeringLocationsDifferentPeeringLocation-1.yaml
@@ -0,0 +1,74 @@
+name: aprl-DiversePeeringLocationsDifferentPeeringLocation-1
+title: Connect ExpressRoute gateway with circuits from diverse peering locations for
+ resilience
+description: |-
+ To increase reliability, it's advised that each ExpressRoute gateway connects to at least two circuits, with each circuit originating from a different peering location than the other, ensuring diverse connectivity paths for enhanced resilience.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: d37db635-157f-584d-9bce-4f6fc8c65ce5
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of ExpressRoute Gateways that are not connected to two or more ExpressRoute Circuits. Baremetal circuits are excluded from consideration
+ //This query assumes that the running entity has visibilty to the gateway, connection, and circuit scopes.
+ //Start with a full list of gateways
+ (resources
+ | where type == "microsoft.network/virtualnetworkgateways"
+ | where properties.gatewayType == "ExpressRoute"
+ | extend exrGatewayId = tolower(tostring(id))
+ | join kind=inner(
+ resources
+ | where type == "microsoft.network/virtualnetworkgateways"
+ | where properties.gatewayType == "ExpressRoute"
+ | extend exrGatewayId = tolower(tostring(id))
+ | join kind=leftouter(
+ //connections joined with circuit peer info
+ resources
+ | where type == "microsoft.network/connections"
+ | extend connectionType = properties.connectionType
+ | extend exrGatewayId = tolower(tostring(properties.virtualNetworkGateway1.id))
+ | extend peerId = tolower(tostring(properties.peer.id))
+ | extend connectionId = tolower(tostring(id))
+ | where connectionType == "ExpressRoute"
+ | join kind=leftouter(
+ resources
+ | where type == "microsoft.network/expressroutecircuits"
+ //should this be location instead of peeringLocation
+ | extend circuitId = tolower(tostring(id))
+ | extend peeringLocation = tostring(properties.serviceProviderProperties.peeringLocation)
+ | extend peerId = tolower(id)
+ ) on peerId ) on exrGatewayId
+ //remove bare metal services connections/circuits
+ | where not(isnotnull(connectionId) and isnull(sku1))
+ //group by gateway ID's and peering locations
+ | summarize by exrGatewayId, peeringLocation
+ //summarize to connections with fewer than two unique connections
+ | summarize connCount = count() by exrGatewayId
+ | where connCount < 2) on exrGatewayId
+ | project recommendationId = "d37db635-157f-584d-9bce-4f6fc8c65ce5", name, id, tags, param1 = "twoOrMoreCircuitsConnectedFromDifferentPeeringLocations: false")
+ | union
+ (
+ resources
+ | where type == "microsoft.network/virtualnetworkgateways"
+ | where properties.gatewayType == "ExpressRoute"
+ | extend exrGatewayId = tolower(tostring(id))
+ | join kind=leftouter(
+ //connections joined with circuit peer info
+ resources
+ | where type == "microsoft.network/connections"
+ | extend connectionType = properties.connectionType
+ | extend exrGatewayId = tolower(tostring(properties.virtualNetworkGateway1.id))
+ | extend peerId = tolower(tostring(properties.peer.id))
+ | extend connectionId = tolower(tostring(id))
+ | where connectionType == "ExpressRoute") on exrGatewayId
+ | where isnull(connectionType)
+ | project recommendationId = "d37db635-157f-584d-9bce-4f6fc8c65ce5", name, id, tags, param1 = "twoOrMoreCircuitsConnectedFromDifferentPeeringLocations: false", param2 = "noConnectionsOnGateway: true"
+ )
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ExpressrouteGatewaysNetworkInsights.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ExpressrouteGatewaysNetworkInsights.yaml
new file mode 100644
index 000000000..88a7a5140
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ExpressrouteGatewaysNetworkInsights.yaml
@@ -0,0 +1,20 @@
+name: aprl-ExpressrouteGatewaysNetworkInsights
+title: Monitor gateway health for ExpressRoute gateways
+description: |-
+ Use Network Insights for monitoring ExpressRoute Gateway's health, including availability, performance, and scalability.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: 1c34faa8-8b99-974c-adbf-71922eae943c
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |+
+ // under-development
+
+...
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-FourIpsecTunnelsActiveActiveVpnConcentrators.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-FourIpsecTunnelsActiveActiveVpnConcentrators.yaml
new file mode 100644
index 000000000..9bcd30425
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-FourIpsecTunnelsActiveActiveVpnConcentrators.yaml
@@ -0,0 +1,21 @@
+name: aprl-FourIpsecTunnelsActiveActiveVpnConcentrators
+title: Deploy active-active VPN concentrators on your premises for maximum resiliency
+ with VPN gateways
+description: |-
+ Deploying active-active VPN concentrators and Azure VPN Gateways maximizes resilience and availability using a fully-meshed topology with four IPSec tunnels.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: af11fc4c-c06c-4f4c-b98d-6eee6d5c4c70
+ area: Disaster Recovery
+links: []
+queries:
+ arg: |+
+ // under-development
+
+...
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-SameExpressrouteGatewayAzureRouteServer.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-SameExpressrouteGatewayAzureRouteServer.yaml
new file mode 100644
index 000000000..8f6eeebc6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-SameExpressrouteGatewayAzureRouteServer.yaml
@@ -0,0 +1,18 @@
+name: aprl-SameExpressrouteGatewayAzureRouteServer
+title: Avoid using ExpressRoute circuits for VNet to VNet communication
+description: |-
+ While multiple VNets can connect via the same ExpressRoute gateway, Microsoft recommends using alternatives like VNet peering, Azure Firewall, NVA, Azure Route Server, site-to-site VPN, virtual WAN, or SD-WAN for VNet-to-VNet communication to optimize network performance and management.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 1
+labels:
+ guid: 194c14ac-0d7a-5a48-ae32-75fa450ee564
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-TwoGatewayIpConfigurationsTwoPublicIpAddresses.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-TwoGatewayIpConfigurationsTwoPublicIpAddresses.yaml
new file mode 100644
index 000000000..bd2d1b476
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-TwoGatewayIpConfigurationsTwoPublicIpAddresses.yaml
@@ -0,0 +1,27 @@
+name: aprl-TwoGatewayIpConfigurationsTwoPublicIpAddresses
+title: Enable Active-Active VPN Gateways for redundancy
+description: |-
+ The active-active mode is available for all SKUs except Basic, allowing for two Gateway IP configurations and two public IP addresses, enhancing redundancy and traffic handling.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 1
+labels:
+ guid: 281a2713-c0e0-3c48-b596-19f590c46671
+ area: High Availability
+links: []
+queries:
+ arg: |+
+ // Azure Resource Graph Query
+ // Identifies non-active-active VPN type virtual network gateways
+ resources
+ | where type =~ 'Microsoft.Network/virtualNetworkGateways'
+ | where properties.gatewayType =~ "vpn"
+ | extend gatewayType = properties.gatewayType, vpnType = properties.vpnType, connections = properties.connections, activeactive=properties.activeActive
+ | where activeactive == false
+ | project recommendationId = "281a2713-c0e0-3c48-b596-19f590c46671", name, id, tags
+
+...
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-UnintendedUserDeletionsAzureResourceLock.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-UnintendedUserDeletionsAzureResourceLock.yaml
new file mode 100644
index 000000000..697e71bf6
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-UnintendedUserDeletionsAzureResourceLock.yaml
@@ -0,0 +1,19 @@
+name: aprl-UnintendedUserDeletionsAzureResourceLock
+title: Configure an Azure Resource lock for ExpressRoute gateway to prevent accidental
+ deletion
+description: |-
+ Configuring an Azure Resource lock for ExpressRoute gateway prevents accidental deletion by enabling administrators to lock an Azure subscription, resource group, or resource, thereby protecting them from unintended user deletions and modifications, with the lock overriding all user permissions.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 1
+labels:
+ guid: c0f23a92-d322-4d4d-97e9-a238b5e3bbb8
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-VirtualNetworkGatewayHealthVpnGatewayConnections.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-VirtualNetworkGatewayHealthVpnGatewayConnections.yaml
new file mode 100644
index 000000000..2d86bf034
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-VirtualNetworkGatewayHealthVpnGatewayConnections.yaml
@@ -0,0 +1,18 @@
+name: aprl-VirtualNetworkGatewayHealthVpnGatewayConnections
+title: Monitor VPN gateway connections and health
+description: |-
+ Set up monitoring and alerts for Virtual Network Gateway health to utilize a variety of metrics for ensuring operational efficiency and prompt response to any disruptions.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: 9eab120e-f6d3-ee49-ba0d-766562ce7df1
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |
+ // under-development
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-VpnGatewayServiceHealthVpnConnectivity.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-VpnGatewayServiceHealthVpnConnectivity.yaml
new file mode 100644
index 000000000..7236f0c2b
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-VpnGatewayServiceHealthVpnConnectivity.yaml
@@ -0,0 +1,20 @@
+name: aprl-VpnGatewayServiceHealthVpnConnectivity
+title: Enable VPN gateway service health
+description: |-
+ VPN gateway leverages service health to inform users about both planned and unplanned maintenance, ensuring they are notified about modifications to their VPN connectivity.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: 9186dae0-7ddc-8f4b-bea5-55538cea4893
+ area: Monitoring and Alerting
+links: []
+queries:
+ arg: |+
+ // under-development
+
+...
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantExpressrouteGatewaySkusAzureExpressrouteGateway.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantExpressrouteGatewaySkusAzureExpressrouteGateway.yaml
new file mode 100644
index 000000000..0ca7419c4
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantExpressrouteGatewaySkusAzureExpressrouteGateway.yaml
@@ -0,0 +1,25 @@
+name: aprl-ZoneRedundantExpressrouteGatewaySkusAzureExpressrouteGateway
+title: Use Zone-redundant ExpressRoute gateway SKUs
+description: |-
+ Azure ExpressRoute gateway offers variable SLAs based on deployment in single or multiple availability zones. To deploy virtual network gateways across zones automatically, use zone-redundant gateways for accessing critical, scalable services with increased resilience.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: bbe668b7-eb5c-c746-8b82-70afdedf0cae
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // For all VNGs of type ExpressRoute, show any that do not have AZ in the SKU tier
+ resources
+ | where type =~ "Microsoft.Network/virtualNetworkGateways"
+ | where properties.gatewayType == "ExpressRoute"
+ | where properties.sku.tier !contains 'AZ'
+ | project recommendationId = "bbe668b7-eb5c-c746-8b82-70afdedf0cae", name, id, tags, param1= strcat("sku-tier: " , properties.sku.tier), param2=location
+ | order by id asc
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantStandardSkuPublicIpsZoneRedundantPublicIpS.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantStandardSkuPublicIpsZoneRedundantPublicIpS.yaml
new file mode 100644
index 000000000..8444e8cfc
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantStandardSkuPublicIpsZoneRedundantPublicIpS.yaml
@@ -0,0 +1,31 @@
+name: aprl-ZoneRedundantStandardSkuPublicIpsZoneRedundantPublicIpS
+title: Deploy zone-redundant VPN gateways with zone-redundant Public IP(s)
+description: |-
+ For zone-redundant VPN gateways, always use zone-redundant Standard SKU public IPs to avoid deploying all instances in one zone. This ensures the gateway's reliability, applying to both active-passive (single IP) and active-active (dual IP) setups.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: 4bae5a28-5cf4-40d9-bcf1-623d28f6d917
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // Provides a list of zone-redundant Azure VPN gateways associated with non-zone-redundant Public IPs
+ resources
+ | where type =~ "Microsoft.Network/virtualNetworkGateways"
+ | where properties.gatewayType == "Vpn"
+ | where properties.sku.tier contains 'AZ'
+ | mv-expand ipconfig = properties.ipConfigurations
+ | extend pipId = tostring(ipconfig.properties.publicIPAddress.id)
+ | join kind=inner (
+ resources
+ | where type == "microsoft.network/publicipaddresses"
+ | where isnull(zones) or array_length(zones) < 3 )
+ on $left.pipId == $right.id
+ | project recommendationId = "4bae5a28-5cf4-40d9-bcf1-623d28f6d917", name, id, tags, param1 = strcat("PublicIpAddressName: ", name1), param2 = strcat ("PublicIpAddressId: ",id1), param3 = strcat ("PublicIpAddressTags: ",tags1)
diff --git a/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantVirtualNetworkGatewaysZoneRedundantVpnGateway.yaml b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantVirtualNetworkGatewaysZoneRedundantVpnGateway.yaml
new file mode 100644
index 000000000..408f8b541
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualNetworkGateways/aprl-ZoneRedundantVirtualNetworkGatewaysZoneRedundantVpnGateway.yaml
@@ -0,0 +1,25 @@
+name: aprl-ZoneRedundantVirtualNetworkGatewaysZoneRedundantVpnGateway
+title: Choose a Zone-redundant VPN gateway
+description: |-
+ Azure VPN gateway offers variable SLAs based on deployment in one or two availability zones. Deploying zone-redundant virtual network gateways across availability zones ensures zone-resiliency, improving access to mission-critical, scalable services on Azure.
+source:
+ type: aprl
+ file: azure-resources/Network/virtualNetworkGateways/recommendations.yaml
+ timestamp: July 24, 2024
+resourceTypes:
+- Microsoft.Network/virtualNetworkGateways
+severity: 0
+labels:
+ guid: 5b1933a6-90e4-f642-a01f-e58594e5aab2
+ area: High Availability
+links: []
+queries:
+ arg: |
+ // Azure Resource Graph Query
+ // For all VNGs of type Vpn, show any that do not have AZ in the SKU tier
+ resources
+ | where type =~ "Microsoft.Network/virtualNetworkGateways"
+ | where properties.gatewayType == "Vpn"
+ | where properties.sku.tier !contains 'AZ'
+ | project recommendationId = "5b1933a6-90e4-f642-a01f-e58594e5aab2", name, id, tags, param1= strcat("sku-tier: " , properties.sku.tier), param2=location
+ | order by id asc
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Operations/revcl-AzureMonitorInsightsVirtualWan.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Operations/revcl-AzureMonitorInsightsVirtualWan.yaml
new file mode 100644
index 000000000..0f7339407
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Operations/revcl-AzureMonitorInsightsVirtualWan.yaml
@@ -0,0 +1,16 @@
+name: revcl-AzureMonitorInsightsVirtualWan
+title: Use Azure Monitor Insights for Virtual WAN to monitor the end-to-end topology
+ of the Virtual WAN, status, and key metrics.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Operations
+severity: 1
+labels:
+ guid: 261623a7-65a9-417e-8f34-8ef254c27d42
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/azure-monitor-insights
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Operations/revcl-SimplifiedAzureNetworkingManagementVirtualWanRoutingDesigns.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Operations/revcl-SimplifiedAzureNetworkingManagementVirtualWanRoutingDesigns.yaml
new file mode 100644
index 000000000..a85cecc96
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Operations/revcl-SimplifiedAzureNetworkingManagementVirtualWanRoutingDesigns.yaml
@@ -0,0 +1,18 @@
+name: revcl-SimplifiedAzureNetworkingManagementVirtualWanRoutingDesigns
+title: Consider Virtual WAN for simplified Azure networking management, and make sure
+ your scenario is explicitly described in the list of Virtual WAN routing designs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Operations
+severity: 1
+labels:
+ guid: 412e7f98-3f63-4047-82dd-69c5b5c2622f
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/scenario-any-to-any
+- type: docs
+ url: https://learn.microsoft.com/learn/modules/introduction-azure-virtual-wan/
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Performance/revcl-CommonGlobalAzureVirtualWanVirtualWanHub.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Performance/revcl-CommonGlobalAzureVirtualWanVirtualWanHub.yaml
new file mode 100644
index 000000000..a31a5897d
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Performance/revcl-CommonGlobalAzureVirtualWanVirtualWanHub.yaml
@@ -0,0 +1,16 @@
+name: revcl-CommonGlobalAzureVirtualWanVirtualWanHub
+title: Use a Virtual WAN hub per Azure region to connect multiple landing zones together
+ across Azure regions via a common global Azure Virtual WAN.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Performance
+severity: 1
+labels:
+ guid: 54b69bad-33aa-4d5e-ac68-e1d76667313b
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Performance/revcl-MicrosoftBackboneNetworkPrinciple.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Performance/revcl-MicrosoftBackboneNetworkPrinciple.yaml
new file mode 100644
index 000000000..6711e3aef
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Performance/revcl-MicrosoftBackboneNetworkPrinciple.yaml
@@ -0,0 +1,16 @@
+name: revcl-MicrosoftBackboneNetworkPrinciple
+title: Follow the principle 'traffic in Azure stays in Azure' so that communication
+ across resources in Azure occurs via the Microsoft backbone network
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Performance
+severity: 2
+labels:
+ guid: 8ac6a9e0-1e6a-483d-b5de-32c199248160
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-AzureVirtualWanLimitsNetworkArchitecture.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-AzureVirtualWanLimitsNetworkArchitecture.yaml
new file mode 100644
index 000000000..2a05c6d6e
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-AzureVirtualWanLimitsNetworkArchitecture.yaml
@@ -0,0 +1,15 @@
+name: revcl-AzureVirtualWanLimitsNetworkArchitecture
+title: Ensure that the network architecture is within the Azure Virtual WAN limits.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Reliability
+severity: 1
+labels:
+ guid: 6667313b-4f56-464b-9e98-4a859c773e7d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-EnoughIpSpaceVirtualHubs.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-EnoughIpSpaceVirtualHubs.yaml
new file mode 100644
index 000000000..ccbd6a430
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-EnoughIpSpaceVirtualHubs.yaml
@@ -0,0 +1,15 @@
+name: revcl-EnoughIpSpaceVirtualHubs
+title: Assign enough IP space to virtual hubs, ideally a /23 prefix.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Reliability
+severity: 0
+labels:
+ guid: 9c75dfef-573c-461c-a698-68598595581a
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#what-is-the-recommended-hub-address-space-during-hub-creation
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-HubRoutingPreferenceAsPath.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-HubRoutingPreferenceAsPath.yaml
new file mode 100644
index 000000000..0be13b51f
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-HubRoutingPreferenceAsPath.yaml
@@ -0,0 +1,16 @@
+name: revcl-HubRoutingPreferenceAsPath
+title: Use AS-Path as hub routing preference, since it is more flexible than ExpressRoute
+ or VPN.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Reliability
+severity: 1
+labels:
+ guid: d49ac006-6670-4bc9-9948-d3e0a3a94f4d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing-preference
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-IacDeploymentsLabelBasedPropagation.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-IacDeploymentsLabelBasedPropagation.yaml
new file mode 100644
index 000000000..6aa3bd2b7
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-IacDeploymentsLabelBasedPropagation.yaml
@@ -0,0 +1,16 @@
+name: revcl-IacDeploymentsLabelBasedPropagation
+title: Make sure that your IaC deployments are configuring label-based propagation
+ in Virtual WAN, otherwise connectivity between virtual hubs will be impaired.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Reliability
+severity: 1
+labels:
+ guid: 2586b854-237e-47f1-84a1-d45d4cd2310d
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/about-virtual-hub-routing#labels
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-IacDeploymentsVirtualWan.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-IacDeploymentsVirtualWan.yaml
new file mode 100644
index 000000000..d824f8a49
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Reliability/revcl-IacDeploymentsVirtualWan.yaml
@@ -0,0 +1,16 @@
+name: revcl-IacDeploymentsVirtualWan
+title: Make sure that your IaC deployments does not disable branch-to-branch traffic
+ in Virtual WAN, unless these flows should be explicitly blocked.
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Reliability
+severity: 1
+labels:
+ guid: 727c77e1-b9aa-4a37-a024-129d042422c1
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/virtual-wan-faq#is-branch-to-branch-connectivity-allowed-in-virtual-wan
+queries: {}
diff --git a/v2/recos/Services/microsoftnetwork-virtualWans/Security/revcl-OutboundInternetTrafficProtectionAzureFirewall.yaml b/v2/recos/Services/microsoftnetwork-virtualWans/Security/revcl-OutboundInternetTrafficProtectionAzureFirewall.yaml
new file mode 100644
index 000000000..b3b6f0004
--- /dev/null
+++ b/v2/recos/Services/microsoftnetwork-virtualWans/Security/revcl-OutboundInternetTrafficProtectionAzureFirewall.yaml
@@ -0,0 +1,20 @@
+name: revcl-OutboundInternetTrafficProtectionAzureFirewall
+title: For outbound Internet traffic protection and filtering, deploy Azure Firewall
+ in secured hubs
+source:
+ type: revcl
+ file: ./checklists/waf_checklist.en.json
+resourceTypes:
+- microsoft.network/virtualwans
+waf: Security
+severity: 1
+labels:
+ guid: 7d5d1e4e-6146-458d-9558-fd77249b8211
+links:
+- type: docs
+ url: https://learn.microsoft.com/azure/virtual-wan/virtual-wan-about
+- type: docs
+ url: https://learn.microsoft.com/learn/paths/secure-networking-infrastructure/
+queries:
+ arg: resources | where type=='microsoft.network/virtualhubs' | extend compliant
+ = isnotnull(properties.azureFirewall.id) | project id, compliant
diff --git a/v2/schema/checklist.schema.json b/v2/schema/checklist.schema.json
new file mode 100644
index 000000000..54d6cb491
--- /dev/null
+++ b/v2/schema/checklist.schema.json
@@ -0,0 +1,114 @@
+{
+ "$schema": "https://json-schema.org/2020-12/schema#",
+ "$id": "https://github.com/Azure/review-checklists/v2/checklist.schema.json",
+ "title": "Checklist",
+ "type": "object",
+ "anyOf": [
+ {"required": ["include"]},
+ {"required": ["exclude"]},
+ {"required": ["areas"]}
+ ],
+ "required": ["name"],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Human readable name for the checklist.",
+ "minLength": 5,
+ "maxLength": 50
+ },
+ "include": {
+ "$ref": "#/definitions/selectorBlock"
+ },
+ "exclude": {
+ "$ref": "#/definitions/selectorBlock"
+ },
+ "areas": {
+ "type": "array",
+ "description": "Areas included in the checklist.",
+ "items": {
+ "type": "object",
+ "description": "Areas included in the checklist.",
+ "anyOf": [
+ {"required": ["include"]},
+ {"required": ["exclude"]},
+ {"required": ["subareas"]}
+ ],
+ "properties": {
+ "include": {
+ "$ref": "#/definitions/selectorBlock"
+ },
+ "exclude": {
+ "$ref": "#/definitions/selectorBlock"
+ },
+ "subareas": {
+ "type": "array",
+ "description": "Subareas included in the checklist.",
+ "items": {
+ "type": "object",
+ "description": "Subareas included in the checklist.",
+ "anyOf": [
+ {"required": ["include"]},
+ {"required": ["exclude"]}
+ ],
+ "properties": {
+ "include": {
+ "$ref": "#/definitions/selectorBlock"
+ },
+ "exclude": {
+ "$ref": "#/definitions/selectorBlock"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "selectorBlock": {
+ "type": "object",
+ "anyOf": [
+ {"required": ["nameSelector"]},
+ {"required": ["resourceTypeSelector"]},
+ {"required": ["wafSelector"]},
+ {"required": ["sourceSelector"]}
+ ],
+ "properties": {
+ "nameSelector": {
+ "type": "array",
+ "description": "List of names that will be matched by the selector.",
+ "items": {
+ "type": "string",
+ "minLength": 5,
+ "maxLength": 100
+ }
+ },
+ "resourceTypeSelector": {
+ "type": "array",
+ "description": "List of resource types that will be matched by the selector.",
+ "items": {
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 50
+ }
+ },
+ "wafSelector": {
+ "type": "array",
+ "description": "List of WAF pillars that will be matched by the selector.",
+ "items": {
+ "type": "string",
+ "enum": ["Security", "Performance", "Reliability", "Cost", "Operations"]
+ }
+ },
+ "sourceSelector": {
+ "type": "array",
+ "description": "List of reco sources that will be matched by the selector.",
+ "items": {
+ "type": "string",
+ "enum": ["revcl", "aprl", "wafsg"]
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/v2/schema/recommendation.schema.json b/v2/schema/recommendation.schema.json
new file mode 100644
index 000000000..f116c1583
--- /dev/null
+++ b/v2/schema/recommendation.schema.json
@@ -0,0 +1,141 @@
+{
+ "$schema": "https://json-schema.org/2020-12/schema#",
+ "$id": "https://github.com/Azure/review-checklists/v2/recommendation.schema.json",
+ "title": "Recommendation",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Unique identifier for the recommendation, human readable.",
+ "pattern": "^[0-9A-Za-z\\-]+$",
+ "minLength": 5,
+ "maxLength": 100,
+ "$comment": "Names added for human readability, even if not strictly necessary when having GUIDs."
+ },
+ "title": {
+ "type": "string",
+ "description": "Recommendation text.",
+ "minLength": 5,
+ "maxLength": 1000
+ },
+ "description": {
+ "type": "string",
+ "description": "More verbose recommendation description.",
+ "maxLength": 2000
+ },
+ "severity": {
+ "type": "integer",
+ "description": "Severity of the recommendation.",
+ "enum": [0, 1, 2],
+ "$comment": "0: High, 1: Medium, 2: Low"
+ },
+ "waf": {
+ "type": "string",
+ "description": "WAF pillar.",
+ "enum": ["Security", "Performance", "Reliability", "Cost", "Operations"]
+ },
+ "source": {
+ "type": "object",
+ "description": "Source of the recommendation.",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "Type of the source.",
+ "enum": ["revcl", "aprl", "wafsg"]
+ },
+ "url": {
+ "type": "string",
+ "description": "ID of the source."
+ }
+ }
+ },
+ "reviewedDate": {
+ "type": "string",
+ "description": "WAF pillar.",
+ "format": "date"
+ },
+ "resourceTypes": {
+ "type": "array",
+ "description": "List of resource types that this recommendation applies to.",
+ "items": {
+ "type": "string",
+ "minLength": 5,
+ "maxLength": 100
+ }
+ },
+ "automatable": {
+ "type": "boolean",
+ "description": "Whether this check can be automated via some kind of query, such as Azure Resource Graph."
+ },
+ "queries": {
+ "type": "object",
+ "description": "Query to find the resources that this recommendation applies to.",
+ "properties": {
+ "arg": {
+ "type": "string",
+ "description": "Azure Resource Graph query"
+ }
+ }
+ },
+ "links": {
+ "type": "array",
+ "description": "List of links to documentation or other resources.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "target type.",
+ "enum": ["docs", "training", "other"]
+ },
+ "url": {
+ "type": "string",
+ "description": "Link URL."
+ }
+ }
+ }
+ },
+ "labels": {
+ "type": "object",
+ "description": "Optional labels for the recommendation."
+ },
+ "constraints": {
+ "type": "array",
+ "description": "List of constraints that this recommendation applies to.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Variable to compare."
+ },
+ "operator": {
+ "type": "string",
+ "description": "Comparison operator.",
+ "enum": ["equals", "greater", "less", "contains", "startsWith", "endsWith"]
+ },
+ "value": {
+ "type": "string",
+ "description": "Value to compare against"
+ },
+ "effect": {
+ "type": "string",
+ "description": "Effect of the constraint.",
+ "enum": ["show", "hide"],
+ "$comment": "Show or hide the recommendation."
+ }
+ }
+ }
+ },
+ "duplicates": {
+ "type": "array",
+ "description": "List of names of recommendations that are duplicates of this one.",
+ "items": {
+ "type": "string",
+ "minLength": 36,
+ "maxLength": 36
+ }
+ }
+ },
+ "required": ["name", "title", "severity"]
+}